From cd1a41fec8c238257e1d975f39d6d4575e9fff00 Mon Sep 17 00:00:00 2001 From: "Igor Zalatov (from Citadel PC)" Date: Wed, 23 Feb 2022 19:06:37 +0300 Subject: [PATCH] [Goke] add sc2335 sensor support (untested) --- .../config/sc2335_i2c_1080p_untested.ini | 148 ++++++++++++++++++ .../files/sensor/libsns_sc2335.so | Bin 0 -> 34800 bytes 2 files changed, 148 insertions(+) create mode 100644 general/package/goke-osdrv-gk7205v200/files/sensor/config/sc2335_i2c_1080p_untested.ini create mode 100644 general/package/goke-osdrv-gk7205v200/files/sensor/libsns_sc2335.so diff --git a/general/package/goke-osdrv-gk7205v200/files/sensor/config/sc2335_i2c_1080p_untested.ini b/general/package/goke-osdrv-gk7205v200/files/sensor/config/sc2335_i2c_1080p_untested.ini new file mode 100644 index 00000000..d40dc5e2 --- /dev/null +++ b/general/package/goke-osdrv-gk7205v200/files/sensor/config/sc2335_i2c_1080p_untested.ini @@ -0,0 +1,148 @@ +[sensor] +Mode =0 ;WDR_MODE_NONE = 0 + ;WDR_MODE_BUILT_IN = 1 + ;WDR_MODE_QUDRA = 2 + ;WDR_MODE_2To1_LINE = 3 + ;WDR_MODE_2To1_FRAME = 4 + ;WDR_MODE_2To1_FRAME_FULL_RATE = 5 + ;WDR_MODE_3To1_LINE = 6 + ;WDR_MODE_3To1_FRAME = 7 + ;WDR_MODE_3To1_FRAME_FULL_RATE = 8 + ;WDR_MODE_4To1_LINE = 9 + ;WDR_MODE_4To1_FRAME = 10 + ;WDR_MODE_4To1_FRAME_FULL_RATE = 11 +DllFile = /usr/lib/sensors/libsns_sc3235.so + + +[mode] +input_mode =0 ;INPUT_MODE_MIPI = 0 + ;INPUT_MODE_SUBLVDS = 1 + ;INPUT_MODE_LVDS = 2 ...etc + +raw_bitness = 10 + +[mipi] +;----------only for mipi_dev--------- +data_type = 1 ;raw data type: 8/10/12/14 bit + ;DATA_TYPE_RAW_8BIT = 0, + ;DATA_TYPE_RAW_10BIT, + ;DATA_TYPE_RAW_12BIT, + ;DATA_TYPE_RAW_14BIT, + ;DATA_TYPE_RAW_16BIT, + ;DATA_TYPE_YUV420_8BIT_NORMAL, + ;DATA_TYPE_YUV420_8BIT_LEGACY, + ;DATA_TYPE_YUV422_8BIT, +lane_id = 0|-1|-1|-1|-1|-1|-1|-1| ;lane_id: -1 - disable + +[isp_image] +Isp_x =0 +Isp_y =0 +Isp_W =1920 +Isp_H =1080 +Isp_FrameRate=20 +Isp_Bayer =3 ;BAYER_RGGB=0, BAYER_GRBG=1, BAYER_GBRG=2, BAYER_BGGR=3 + +[vi_dev] +Input_mod = 6 + ; VI_MODE_BT656 = 0, /* ITU-R BT.656 YUV4:2:2 */ + ; VI_MODE_BT656_PACKED_YUV, /* ITU-R BT.656 packed YUV4:2:2 */ + ; VI_MODE_BT601, /* ITU-R BT.601 YUV4:2:2 */ + ; VI_MODE_DIGITAL_CAMERA, /* digatal camera mode */ + ; VI_MODE_BT1120_STANDARD, /* BT.1120 progressive mode */ + ; VI_MODE_BT1120_INTERLEAVED, /* BT.1120 interstage mode */ + ; VI_MODE_MIPI, /* MIPI RAW mode */ + ; VI_MODE_MIPI_YUV420_NORMAL, /* MIPI YUV420 normal mode */ + ; VI_MODE_MIPI_YUV420_LEGACY, /* MIPI YUV420 legacy mode */ + ; VI_MODE_MIPI_YUV422, /* MIPI YUV422 mode */ + ; VI_MODE_LVDS, /* LVDS mode */ + ; VI_MODE_HISPI, /* HiSPi mode */ + ; VI_MODE_SLVS, /* SLVS mode */ +Work_mod =0 ;VI_WORK_MODE_1Multiplex = 0 + ;VI_WORK_MODE_2Multiplex, + ;VI_WORK_MODE_4Multiplex +Combine_mode =0 ;Y/C composite or separation mode + ;VI_COMBINE_COMPOSITE = 0 /*Composite mode */ + ;VI_COMBINE_SEPARATE, /*Separate mode */ +Comp_mode =0 ;Component mode (single-component or dual-component) + ;VI_COMP_MODE_SINGLE = 0, /*single component mode */ + ;VI_COMP_MODE_DOUBLE = 1, /*double component mode */ +Clock_edge =1 ;Clock edge mode (sampling on the rising or falling edge) + ;VI_CLK_EDGE_SINGLE_UP=0, /*rising edge */ + ;VI_CLK_EDGE_SINGLE_DOWN, /*falling edge */ +Mask_num =2 ;Component mask +Mask_0 =0xFFF00000 +Mask_1 =0x0 +Scan_mode = 1;VI_SCAN_INTERLACED = 0 + ;VI_SCAN_PROGRESSIVE, +Data_seq =2 ;data sequence (ONLY for YUV format) + ;----2th component U/V sequence in bt1120 + ; VI_INPUT_DATA_VUVU = 0, + ; VI_INPUT_DATA_UVUV, + ;----input sequence for yuv + ; VI_INPUT_DATA_UYVY = 0, + ; VI_INPUT_DATA_VYUY, + ; VI_INPUT_DATA_YUYV, + ; VI_INPUT_DATA_YVYU + +Vsync =1 ; vertical synchronization signal + ;VI_VSYNC_FIELD = 0, + ;VI_VSYNC_PULSE, +VsyncNeg=1 ;Polarity of the vertical synchronization signal + ;VI_VSYNC_NEG_HIGH = 0, + ;VI_VSYNC_NEG_LOW /*if VIU_VSYNC_E +Hsync =0 ;Attribute of the horizontal synchronization signal + ;VI_HSYNC_VALID_SINGNAL = 0, + ;VI_HSYNC_PULSE, +HsyncNeg =0 ;Polarity of the horizontal synchronization signal + ;VI_HSYNC_NEG_HIGH = 0, + ;VI_HSYNC_NEG_LOW +VsyncValid =1 ;Attribute of the valid vertical synchronization signal + ;VI_VSYNC_NORM_PULSE = 0, + ;VI_VSYNC_VALID_SINGAL, +VsyncValidNeg =0;Polarity of the valid vertical synchronization signal + ;VI_VSYNC_VALID_NEG_HIGH = 0, + ;VI_VSYNC_VALID_NEG_LOW +Timingblank_HsyncHfb =0 ;Horizontal front blanking width +Timingblank_HsyncAct =1920 ;Horizontal effetive width +Timingblank_HsyncHbb =0 ;Horizontal back blanking width +Timingblank_VsyncVfb =0 ;Vertical front blanking height +Timingblank_VsyncVact =1080 ;Vertical effetive width +Timingblank_VsyncVbb=0 ;Vertical back blanking height +Timingblank_VsyncVbfb =0 ;Even-field vertical front blanking height(interlace, invalid progressive) +Timingblank_VsyncVbact=0 ;Even-field vertical effetive width(interlace, invalid progressive) +Timingblank_VsyncVbbb =0 ;Even-field vertical back blanking height(interlace, invalid progressive) + +;----- only for bt656 ---------- +FixCode =0 ;BT656_FIXCODE_1 = 0, + ;BT656_FIXCODE_0 +FieldPolar=0 ;BT656_FIELD_POLAR_STD = 0 + ;BT656_FIELD_POLAR_NSTD +DataPath =1 ;ISP enable or bypass + ;VI_PATH_BYPASS = 0,/* ISP bypass */ + ;VI_PATH_ISP = 1,/* ISP enable */ + ;VI_PATH_RAW = 2,/* Capture raw data, for debug */ +InputDataType=1 ;VI_DATA_TYPE_YUV = 0,VI_DATA_TYPE_RGB = 1, +DataRev =FALSE ;Data reverse. FALSE = 0; TRUE = 1 +DevRect_x=200 ; +DevRect_y=20 ; +DevRect_w=1920 ; +DevRect_h=1080 ; + +[vi_chn] +CapRect_X =0 +CapRect_Y =0 +CapRect_Width=1920 +CapRect_Height=1080 +DestSize_Width=1920 +DestSize_Height=1080 +CapSel =2 ;Frame/field select. ONLY used in interlaced mode + ;VI_CAPSEL_TOP = 0, /* top field */ + ;VI_CAPSEL_BOTTOM, /* bottom field */ + ;VI_CAPSEL_BOTH, /* top and bottom field */ + +PixFormat =26;PIXEL_FORMAT_YVU_SEMIPLANAR_420 = 26 ...etc +CompressMode =0 ;COMPRESS_MODE_NONE = 0 + ;COMPRESS_MODE_SEG =1 ...etc + +SrcFrameRate=-1 ;Source frame rate. -1: not controll +FrameRate =-1 ;Target frame rate. -1: not controll diff --git a/general/package/goke-osdrv-gk7205v200/files/sensor/libsns_sc2335.so b/general/package/goke-osdrv-gk7205v200/files/sensor/libsns_sc2335.so new file mode 100644 index 0000000000000000000000000000000000000000..2bd7fcf1d8e2af74de4dd0a888d87246d380d912 GIT binary patch literal 34800 zcmeIb33wDm*Y{oBJ^LCULIi{XK_jw+fPx4T2>T*oM;4Pn0t5nySs)9>_Icj-{jTr3zUz9ruYamf)#+MJ zojP@@x_dIcV~0y2u)|?!IF&L=? z)03tNku*&S;-W!_1QJbpx=J{d^r56noPd^)>9C64fxI+=e>-G)6zD^GWd56|u!Ou< z*1bMx3GN2XfD_2$9w5`?A=@U8Mxj7h^-uYxR<3&ewJAQsdHe|Knq7fGDuKg7HA_>jDXr~+-T!0XoO%6fRK9@4GC2F&0V zJuVzn;-YSt(8CzQdf+y2C%7HRqZWt`UWNLkG1qZAT`@Q;3*^vr4H!h9hiI30iVK5R zLB)iq#JNpg=!dMk8bQmxe>I#)DANl`zeXp@KB1{$qaV7JoKM?kkS)s@% z?l>Jx3H_1zU#W2axQP2@e#a`%Z6fZk%k@g`Ux#A!fKS$E4q-t-sD71@eEkad-%fox zMAWAj>FZI{x#T79e?5X<*6%3!8xZz7I#8x>A#N`BOI@i%%m~t>p=F;*dDejrAM*Z& z5&6mXTqHf*Kb7g9XGqVBsPESi_e=hb;mimn-6Mkba2?hU87=9y5%QL-x2Z6n%&brKewyQXJmFx#`wIEBxR@O=7rKkZXVUn5#!Rw z<)-I}E?tv*CUs5j+BYe=Z~FM$tQ<;6OwG(}pE_b}II&&Fe@GkH{%;b;kwex9+L4<_ zKFK3Sk4+w#nvr=^#Hjq#oHUU;E;T1Fmy&6DMqUJ&UI0lYM`TZmh|P!}k(`>AmJ<<` zmYSEEJbY4KdPJOL3B^UUuXlcW&ZLe7*;%>yIq5<9+$cOJJvHqwp^NPNyxfS~Cgx=1 zrQb-6$TB3d{^S2iXn&vjm)LGj9+{I)JM#LD&+VHid$QN?F%cC(n&Z=kN6I57ow%Gx zxk(9yL^)pX{jBWt@ggH@L|&#Ck(renDJRJs6m+nO5hZ12j89L^Np2d~GA_GWTqwi* z+|2a!Y>}DPC_fRs8xc~wI}hD@GEWJpFwWr#yjEJK`x zV>0yM6Uh)mep-e&F6U*4Lvm4u*pSOI#KE~HL*@(*<*Up+^<;>lY$(Hc?3E0$sY&ov z#jy61A{DeA-2nqcJGiOHoHiME%5h>d?n|9YIM@DsYmJg*K3?K6gLVOiq{5Q#fytA z=XV8?drwnSWui0jM0 z-l)U*i0cy(*ToUnM`>w<{u zYTLCGm3XdZ7PxX$B@4o zxBRC3mXOy1Fopbl)NM5PMkO>lDep~5SQ`*=Uj_^bGVi|rDDTdgq+p#^1oL2ewRMoR zSX=gZdHK)#K+6j04XK-K<7(3Ck*0Wj{$RU39|XwnL;__ur|h|ueUNZ9;l519dA=fK zJqA&SLEI zZrQ%xep%O;gFQndJd79~Rbn~T0E5#rf^p=e=X6W0s${DOT)TxC6<@5m>GwELO~eG_dKB3XC9i{&k)rp7q@~`3#^{p3s_W&aq`f)>&wuK##qhkl^P6vfn(}=c zJ=`h2);c%Oy3ucG^;rWkNGyac36J3iL=&EG*XX23=v}&pev^GRg8tb-pNS-C3mJ>4 zax4z;_a?qw6Q5s1`TVOzVX4UW`MtDTj@kHzjL#y*0BO=rT|ejc8K8}6dRn$)Pau~2x?~pyQsR96Linaf75ihThlRE&MSB9*8_}k?J%NN`+6BLI zzt6t_evN$QrW6Ls(X}4%_XDFrHb^4>K_C<40YmYgK=Y`=Kx@#ls4#GT#?BLRd=^q> zn%?Jf{6_Y9jfn9l`DOplguk`UFX>2rcLjbgn+$Ti7BFt3fE>4SA>9EV=pcSkG~xMP z^t-or>EZTk1Bc^7bA@4kqcd9ein27urignoFf?vqz(>DhEB&g^SF)7rjqnC_V-xdA z>N7#zc$E0eSZpnFG0_K>B@0Xc__O@yLU?Q6CH%(J`DIr0-r`vpFp{nnttgB3EG!*O zdNj67(kWcW$ZPbcCgt{fe{G;2aZ)E`oQJe}#CIURLqvQm@ePS@PJHu-_~yjN5&s4C z5GhHeNnY=T&e)jf(zO8#b%}z%W!%D2>BCt)=ndtxE?yW&;J(WxYXg@V4>C>0cObqC z@h6Bs5fNXktPS)aEs3-vq#Yqm&f6_TsGZ^a`@u5^o*8;wuw~UZ!7IzPQ5Pu_S&oDH zX!94Ialrec&TB!ob1SV4oWfog){*voMVS{mvi}#uJJhoVKgd@i`%PmEJU|&~(vHpF zdHVd~ohLeQPbqnH(esdWWFFJV;|%twCh_0F7pwEttH75BpC7(Vi|{Awb(~&aUi}z4 z`6~BamNqh_7(Ze~+4%~3Dv}lk(zxeK?%zV%ugseV;WwpNg8cg`@YhV~<{t$AUib@1 z`-J@EJQ?Qq{SAK)_}_)U17YDp)&K>nEI znxbscMKXS`rD41TekZ(LEnN~S2EBJH6e zYF6Mk`pD5Vl(!MxsHb1k?COR3^=R^nQqeJN&5AlJ0vEAgtD6=EnpcwdEiV4#TKUgO z%%|s@(#Ia3KMH$Si7~I?x2Vw3*f{D|BE*knBhM9+s7c=z79^gxUD?(x0&CdY*?) ziLjpcmU`abKY}=|A$oxB;E$C&iY&%a?osqa6#M)~(66i_=3soQ9{3s_`c~?YoCgw+ zt&EpGN+w-~{6^v(#IM)mWAymd#9N48rN>J@K<2Z6_=dzw8ylK?Lh)0Gm-<|w z$H(gYnb^fl(mIefT2GVmYfhg&DgC3AJ%Mdmg{58KSBv)qq#q&6vCzKO+$ZP5O?Byi z+9%7i6n_=?v5)YZ#hWK==m~febB1M=Rc+v z2Bg1pFupMGDL4WSgH4`~O5XAmmTdBTR#F7Li~HWIyC+aWSPJ}HZzui@cy_*z-h*t` zGwaZU2hah2ahPBes{)(1>Q_zEer zi(5m#m9)BKi&z`j!adS9%Q+=3sxYvvXm!c9s3j#*A2*AyOSX8vE@??QyN2#5+2q_) zvboWolI`#BDS4;zo)Qafmo`E6osqtmHpJwWbMe2gA!~ZO`SYpcFLG{$UxQ!TkT8G6 zHKgRvfIk5L_TizvUq4b2$GDdCMfy=f_GJuvdz;wDI}t-)61K#4obTM|Wd9#Rdjqlf zqp_vTODVpRdf1Zwx8b*CGv_2hN6jb|o+kssGvlVYbP)Y~ZRuL+^Op=*S5_wIU+a>^ z#rIIBb-uztzUSO=A-)YvNI7@Be?QXcqa7)XHP$D2N!V-TXTVk`kWT_}sH?3VA={xg zGrToP^I;35&WpHZ0hKx1A;f+qxG%+e5}u9l^l!7Uw4RLfuuq};X6R=1{y!`%jm1AZ zKL`2WsspcLIe0#zywfQ+{Js@w>`{R& z?1xKT+rq|B0oU7up0`$BlP_xYkEI$>#GbINBWQV(Q4HB*)bw01Mgwj_O4qNOeA z!#z95Q`-JrNi$1!CCn<3_Ee6aO3lT8T;r{zUEz6L^3UbL<_gA90hj`kKmw3$TtyqD zeQby=Y={k%^^*26=xge8FecSz$^Hu4G0=|(Sp%r{MnVtvjfmU@o8=Af@G3j(Bw3l@0^GW{E&@w-ZPNzZ3_yppt z#GP-q^F;EM@>8+M_eE@0J^Di0HxG2=d?oqXz_)%_$W}=?7P3}2h;8!G*Wvw2DNDw= zZ3+Dul&3zgu*Ya?$9yPtMTi-JEpfZC{ku!HgLgm_eU?I*OR0m@2U&+f73y#sbr1Kk z!uqI(>PnkXz!F}>dvi&8D+nT|=mz2d+ z$otA4<)>B;3F%W5c@&``2SrE@G7t9Jg8Kq@$gpT>;JS0DpCwfTxwqHO<@2vE4y_~P z8dzh^Anl^!=<8=+&7djImaVHwsyjw6Nr883ND*~+}N-K)#Arc261(F|;Cq1JmXcQTSlkk~I1#EiTkQkvfk8*e*74W5auwu=iJ|w^~-F)b*8gVC|N}{931~ zw0&|LL3?#)v1_7pu!^R_Kdi)F&9@_SJJI?9)OP*Oh_lD1XUC9)o< zrp<;Qu)}~&K>wa&&X@cC_;__5DL!|62KFGyGK>Ahgwi_EzLLY#NACa1J>P~Rq+e2Z zE-?rFr#;qtshh0-Wq4xs`b#=emm0xSJm^OKmtaUYF(@(#7Z3)0RQBA4whQgIb(LdB z?yY6}N~ArmeJlE%;ww3OSJaALLfRGfUbgGJ zl8$Wmxd`65q?wqVn|95N;vdPB@paH3~I|&_Q^S{4T~J7kqN* z7ie)y%Y?o+(@^$R63-D@@(hV}xDoj$5z2MCT$kh1mkRtw1F$6R2{;J1OS!-oUdwNR zZYX`rBJ`}NFyLjbSRmL>rf=58;cG_WgGR~y0iIFde@cI6DE#U0OP|yQzoBA55 z2;<;8O+Gc*Uyy!Vq(8I~zfJlHv0`mtByyAU9?vfRZQjdH*m+|5Sn18(T;F`UaI z(iRl04QxUla@>XF!G4V{56mRG%X~r|4b)vp!oNoU3Mucg2MbF(#25mO1Z09e??Jnh zM9~GQPi|X>i?Uv_|G)Z&xo|M|&|`kd+Z^6c;B848C!)HO55v6e}2}^6Z?>v9LIa8ZxnqcpP@=#S!dIdFUzcP zzLKlIhtDr+cZ7gx-9pIau^015E*;y!8HM0PRjyA@@vE8HuVEDZcfSv-$E^&4SfKSks* zhUEUK7Yt=?lyk!t=7}C$7Z4r>QZM3?SU)B)cQ<{4`uD|FA)^G=-L%iD*G2k8hNh2| z$^HrVYwLl$t6RjLdR%yJSzKI99plKeA^oE!pl=F$M!`MNB%bLk46w!YPL!wUg6tbh z9BYaqpT7?Ns9Mat!oGQ25^}ryz!?FrLRxKG;>9{q2Lc{=J)Q#rGcq->AMf<|N@Sl# zf$d2LO1AVqP_m==K*`qK2THbsc~b5{`&s;^NBr`k-$-CkQas-Z9cH+Fc^&H0c8ypn3LOYAQYun4{M}*cU=RgOl|S>8h-MbVU7+ z{#E}K|5pEki27%7eX%!v#`p@?e?d3a@6=!VV-l2mO6r6{eHIL4E~>(dH4QKw^| zozQJ{x-PT=eZNlg{Kv0Cx6o-1v;n%APTvY$3%ZF;Z-TZ%->uUYXb1G25%k^Ax9jw9 z(nmtq)@jyJ{^y}<=(G`f3UoD{mi3tmT}7u2(8-r)7Ez`uBI8o(nD8_p44z`PF7G*pLJT09?kt_Iz1EG z0>59U7eLGMe~P$YmjAs@N0Hu)^1jjO#?U6{FLk;QTGr=tosNZ;{qu=V*MXM(vsb63 zyf#9ApwrRNuR*^TLA#*ejo|MAy-lZ0@JB(vsnfE5q<*~~!7uge6`dYUdK~S4NvCCh z+!kZ-|4XN({@w|_R;Oiq=kV;}8J(8p&4qq4B7Gk8@`&{L(2FC|mq5>tpqE0=(P`Nq z%b;gPq%Vh_9zm~wel&vr3FwItw0yRb8^OO9I!mWzefL3+jY!`QJt`vo6X+2U>0dx6 zN6?3%hv>Ad@3+tcb-EgK8uIO{(-!C@(7kk8>f=)A?mFEPdKq+QotE{J<2zBO<#<{S z-BzcizOR73KZ1S&x`j^5^0MjAW)bvi=q5TX%Uc6|w@$}HFM+-@f?f)JyH0l?eHnCZ zop$K?*U)KM-Zavy>9lO$bm%HNE%kpQv|FbigD!x!>+~GxNzi7UmiAZHU(;!s-xTQb z-$LVG)_*GWRh@ngIuH7Hon8%{5B;l7KMOqp`kYQn`&v6n^Z%^Vaz2pH^2&5NJbwK; zE$iQu^q+LPDs)}w?{!+%SKj}PPD^?8#lC&1(<`8Z<6oy`|5>qjpXl^T=xF+HuTIy7 zZbg0{=ycfryr$EIS&WEq-^qtUhK70jQ&aZOrl=I?C z&{1a9pGjzh&L)f&_zn2pp$2|s*uOyoH z=?tvJe`SwX)|r=zgZqQtt|1@YS#U@ZYoPr;BNI_)|r*^VlI&c2?ze&~85Pc}01Wkx`pgl+g z9Y9CW33LWsKv&QWbO${^Pw*h<1(HB-&{HPf>B^J$N*!&Sda{HPf>B^J$N*!&SdaWAPZ!JM?en91$iJJ zOaK!>0hk0PgGa#>FcnM#(?J3oaP2^QkO(?}j-V6h47z}>pd088dVrqbLC^~%f!?4G z=nMLR{$KzY2nK{>X-&fgSqv#5@xxv*b%P`9+Z@XtDnx|9>;@$q)AG_m`yd zMrY&(vj|o*xDPXvyye<^Hkb?Mfdya@SOS)T6<{S;1)c`-`+#SG4?GXnffvDgumNlY zuK~Fqu^DUuTfuhl4%h*9fg1#l5u0++!Ra1C4sUPXwRpb*RkbHO~Y04xGaz%sA`tOTpT(_l4t z7WlyPU>$f7tOpywM(`St-+XTdTfkPZ9lQf}fL)*nybtz(kH9{#AINVwKLZEBA#fOc z4UT~Cz)|ocCSP52vr@?CQEbxKn!8-6FSPwRUjo>w~32X*iz*evwyaRTCU7!fO5B7kMz&@}a zd(mfbYOj@FOS&rQjGi4o-km;50Z3&Vvi!BDe%DgDc<~xDLF`F*89S zm<{HFd0+up1eSnhUZupPVuc7R== z2)qyWfRDgFupfL1J_85AA#fOc4UT~Cz)|ocCqQo`pdMtS&*5i!D}pY`}+yB@z15Fc?eg!u5;AjYacDwC83%2`J8 z^H_@&;z_=P-zS_(Go?`ZQz=yMQQuJpDNf}};unZVMIKlpUS~u{D{0CXN?$cfU7_5o zoW?dR6?stvV>GDEUf2*{bwX{vgjnF_2$as6+eeh*siZtlj&< zs0>$*C@(7s$~i37RFNba3He3$EusnBv&7rtsu-YrpuC_oS59KzCX4R;`hrCmgaf(s z64SA7zl+|=d&(L(PGAM|MHfmjASAx4C%{cF9%*uYGI9~MR*COJ;gUJ3F@dY0!FOU!>B`BwF5mfO1V?{4a@$9SW8Z;#G6?7-$i3(vT{-xu1-<^ROTx!m8;nMH^jfh z8s?U5Xvb|zJ7t|xQ+-A4rXHkCRg@p~Ql`;|Pa}&H)N`_OTFIjx>*>48;zQauk=6_o zqXcgOFryfi!PMhH^%7;=sT@b|X41;;q7yAn6OS=BofWN>7nMfnakdhJmaahudx(4J zlNLy10yX+x+^)<~?CO4HC^G#BjTt6dqdm9ss}t?SXj=T4s7g()C|i`?$~F4sG0~46 zli%o9MGJ4UHG1xM+UFI0#a-xz0j`F@zTGV}Wu$TxeeZy@-a-p|Py@42 z(6I)hKa$-g6ga+7HYgp@16 zbY(FTaZ-;`WfyX>qaRDe2u9N#qBg%s(t)wFnqIh-@$#$ku`))9R=%RYC(@c$jHgzF zlbGpC7;}Y+rk+t|GxE#mwK-@;f9l&$jH8TqnRQzzKBcU&BGdUzbEJ&OlYh>dujemsxN$0^?_De6#0|8(rbpUnTe@G;hk zmnq>pVNf1W7AfV*W9ob~Xc1%PPw@>>`4>LP%e4JRaR*X(L8-02p$<^LrZu-I#~8`a zP}^BzK3cXLZ=ta=OZg2eb(i|8(jFcBnEa>En&Bdox~xMQZY;}ZN*`5G=P7qFw%=fk zjABf6XLODsA316hf>!F3GC`@T9HJe$XjehTF<`w>R&K}NV8i@Tg&O$=(#U5u)6$nP)~ zW-1y~qKwCCf6a)RKsl`$QwiAiN0|qXF>>c9HdUyFN<(D&CVeszdG=D0+21*`v z7^|i-wx?ss{=};6z&5WzKX%b4R(gE7Vo?{Xi&Ryetu&$kKgGtZ3u@3i%qZ=R<=sDJv71zl>jCru=u6`_*_fC|#*W&%B52S%8I_M-S{4KU2n7 z#zLk#Ts@^sQR0!wAtdlJsV|^yUt(=rU4 znAzv7TB_w}n^d>@H1^P{9AyT0oj&@C9_c~P*H^czg<1n`g6cLL1euzO7bL=O{H8xiiqgyP3zDAhX5PxPh_~dF@kIt5>PFQ+W&Dp#|2(%&$gu zV%&ZpVi>hi>Na(U`WuolDQ{4N#z8N~g`PY@t*S86OzJwdmG&z#{SyyuICGPVm9jAY z$D=WBv{Y5ss^`_?aA?X#W}vvBj@i+ZYk2KL09qPi2y+-_i zeUaMnxq3{!SACa}d!9LW26Y*ZhRmjau8IelCA+F;REL&{6@J-zw{ z*5wMmn6zRG)vnrhwLTtM7p(t>%;a9|&my?|q6YnWTp6iW)#e9BjI=^8Fqfw=Hpigv z@3AKCt!z^g(T}le03EEP>_PvAA@BQ;YzE`v6m$Bs%I#=sU-bMTw0tx3oV5J4=)Zw@ z5=TTm{KiW3TxYbjhjIaFrQ-)h2@@LBl|K3)=qD-aGIfNy760xuk{V178eWbYUCm=u zRZ?=8J04Sys#}=hkK->6z=Kw>Fm|-y5%j~wJa|T#p)OTl$ASmw&B5rg87*@$%jDr5 zxEY7%mFdW28>8hcZB0Y_s-QtNMSHB;F6!~9a#>lRPE$X?3S2{y6VUO-_(4sWgBCC! z--*37t1qbOSpE#;@gY`WD6MFVpEDj?Qi^?fO1T9soT*-*-SwFpq)Z=1hek0fx6}VU z@b{XkpQtaYb=1|g_bUDNG*)OTvVD<#jc8>w{XbB>s2)%gutFo1TKH2t=vyBne?MMw zOMLLl%2f3>t(rDkJ*Pab+|P*k5$*T@Ejoj*CjHww>dWdt?QU%%HCasmS5^FQe2jhh zg|RXif3T6dQ(dTCRD0sZj$`zn5_>4+U(9A9Z+?klU>59x2Gzlr?uz#)eQ7V=%OYx8 zN;z4|F(pI2MOzf~gc?!8^NhumpuL@qRlLS{d0T0(mZ{lzYz4|KL5V%gEY%8MX$;(D z;$AeUJ~bJ{cp9pdBlUc|&aeh8WK7jp7ATd~m(+G>5RS{kz0jf;(4x4Y9jd|Tol47N z=)H2~Np$rcZ2LL1Xb8TL0WFDQhRDYbRmO5$ROYKcqGt){$SQQ?PF;&y1hvQw#|3m` zxw?tbf1L3$7*E_xE-rLFk6v&yYAz}>)yF8MJEgpUWsozO9XrzrZQd=aF)LhFma~TW zkP-1G?U}?3Cbg&;TDyoj`7SJ`Nqs^cseX^#D>2(GWG@(p=dqfbsn*k?v@z;=s5Xj)lJ+CZ&+)ZyQ-+{Lcd8rI6zx3g ztwXE;S}-?%L-|E;okkYjm6wzn%nc8tBe8hP{qcrM7)d_H->b;tS9DeS(gkXLZLxYi zxTgCBDXzo{6)<+5XNHMpb@DYU{@>Jx)t``m4N6$c$QwrgWzZt&_jL=lcAwf+-Gg;B zD(~Pe4Q5=oVBC#@yNp@&2_+h<+MMy<4!gac{(J!M;Wo5n5FYB6Sbr~b%pA3rx`vgd zpBl<}${n;ro$0yv(C0^}>m=5vYq8otFw+h|gVMUFm6#$Xu4pU7FIl)s6Bt;}DvgOTra?o@Gu8Wd*MElj;yuET3U_h=Dr+fhHr;c?^Y%Y@)1F?qD*U$|N-#H|8AO z@+6bpR3@@@7>UZt!?Z(Moyw;+PiDj&qi2C$y8=DbAm@)7lyBEay4xy!MNBLHkv^sQsp0(tg)2Yge?Z z+BJ>+RYSBf+E{AXWSC~?VW@66LD_|zp1)4nIfV}jD@#B{wFryJlo0P=sd{^YC*{us z&px9tcxp>|zCa=aDuy9*C*!*%J<*+^k<5%Tfi7K)-QIxL@G;iqXK@`>zC&rvK*>bW zpTmFqfqksnSj7x{j-Bc$wK~$Ai4=adOppQ)+YXTHU<%yNtM zIcsy<=e9h1UB`EhHO{fFj_!t0o=SBp$5-hSJ?oZ_s@8~^b*oZiMa>6lDV`tde0BTD z`ZZ&-8XRl*NE1u^E6sZOSD~C9 z=XbqPH1Yj*d)yzD?A`Y9(oeDv^!>c`7qMT)eC7Ja@~!!M+YhcEtNe6pv8N=qG~VCl zSl7V7<0H!^oS1X+sZ+21{K4sO&-`-Me!l)M?Jgw$I`!h3-`=}a`n&0mhFAJsopSBP zKM!43x7;fq>M-n=D1%hF?;gH7ftG|$_RZTb6JGDD83~Q}Jy(yXR?V64dsfz{e#O7xv3yh_> z?pu@(nM%r-eywT^wGr-9KRP)V8#kA(UV{s`J1*4iS`+PlhE!iI zSn_Ha6aC zY-8+b>}l+89BNE6jy2{QCmUxNA2%*BK52Z`_=0hx@lE49#va%~ZW?78XUa8AGEFxXn&z37 zn4T~_V|vc?qG_Y)4bwK$4%7Rn_5stErX!{wO@7l!(^=C+(;uemCWF~(cAKNk)y=id z_00{;aprr>t;`ALj^^&>By)fB5Oaz--8|NuZO%78YWA8RGtVao_d##$R$n_BO&-e+xNZD;Lh?P~35?QQLEeaJe@nrcnAW?08rv#oj70_zm3*IHyoJ>sIUA)}7WO>mKV~>wfEJ)-SAwtw*fiTYt2c zSOeA*)}O6strx7nSub0!TCZCbo6%;m*=;UcC0n$unytF6maUGhp6yOs16w0ooUNJd zUfX@PHns#?qOFsytF4Evm#vR&fbAjMP+N*^gl(iP!EGcY`bc^Zd2?AyUA{~JM3`H+xTelD)6JzkQH>h<%tn#XiD5(mvWg z);`|;h&|6f!9K}8#XikG!(M2gW1nYVU|(!sW?x}nX@APT+WxHlIr}>MOZE-+jrP~= zo9$cdTkUV#ci4B?ciZ>a_uBW{Kec~uKV&~_|Hl5U{d@b5_F}u=e%yY-{jQjT~`~c*i}C zmX21AHjcKA_KpsY&W^5*?v4i?Nshjb0ggeAA&y~=WXEtvnq!n>j3d*L<#@!A>%a~> zCOf7$raNXh3LSGCk2~f&7CDwWmOEBDRym$_tahw*Jm>hA<3-2Ij#nJ7I$n2dc5HEM zb-eA^;n?LUa(v+U(6QI?vEx(6=Z-HNUpl^a9APRs>iEe~>Nw^&?l|fA*>T2k&hd-m zqT`a|vg3;5Pe-{!aT=Uvr`2h9x|~tY%FbwKRp+hF8qV9C9%o%=J?9r1P}%tn<9{g7c#DlJm0jit|rrxl?gzE~CrrvbyXpmn+Iu*%j@o z>WXnychz*&a(P^JUG-ddxME!mTn$}KTuoigT=%$IxbAb^?`q>}>uTppbaixfc6D`i zclC7ja`krgbq#P0at(G3bv^7#aSeB+xkkE1yT-UOUE^KZt{hjMYl5r5HQ6=AHO=L9 z&2$yIX1nIP=D8NQ7P*$Vmbq5AR=QTXo_4KvJ?rwho_DQtz35u++Thygdd;=Twb`}B zwbixF^|tF>*G|`auHCK=Tpzmjx;}P&;yU2^-1UX)OBZvi>s#0NuA{CWUB#|a*D=>| z*9q4t*J;;T*Ll|k*G1PQ*Jalg*EQFlu5y>+*4#$7*==>(-A=dLUCCY99qq2_j&WCa z*L2r%d)#&0x4Y}R?{wegzT4f%-NYT|j(0bA-|KGaZsl(6e!!jJZs$&PcXW4lcXfAn z_jLDiC%OB$`?&|W2e}8khq~ogm;b*%9(E_YQ{5xn>F!bP4EI>~IQMvWwmZk2>&|yi zbWd_W>YnPJ?w;YEn=w9qz>R#@C!u_QCDfiRv)$V8AKKFC(f4N_9 zzvy1?-r(Noe$Bnfz1h9Rz16+V{kHpE_YU_icai&j_a66$?!E4h-TU32x<7LtbRTjb zc7N?Y;{MM4z556EPwrxOsr#7wxch|rr2A+08TVQDdG`hPMfWB5@9sa`SKZg#*WKm3 zyCwa9r?aSX_)Mu1I(d{EJblrj)64#fJZI?VO#E4S&eBgd-@<2@^`=mkQ!Cud_+d96 z;iXeJ4ArY13#^t2aW`0#x+JuW^Tb3uEGAX1qWF1~*x2~ie;x6SIAUXKMcYF6B*~*o z!oBr$ey=yab*G3U+{j>9i~3bOL)pl>7rBeA)hm@WY^+RmdIXu zWDYxmD_A_PXW73CfA`Q|=RWAS*{y$pRJmh66aJ~(SHS6G@!6u2&FbCKx^hiV?P`f^ z4%Dt4UAuO5z2b=bCYpt9kglPp8w`dZT~nuxM&nI1E9xM9o1V@hJ4n~kX{*&*yLPqO zwZpW{W~*KMRy~ox;c(Qh9nKuu>2%&mi zo%@F?oL{pa|Fw9N*6&wVkv^otd5kA|$Hc2V8{N%@+mkFsZ$5uvul*PCg7OL_ETjhg zE1cKaow&|BgfA$s@?>EtGQ9b;^EBPg?)@|DTTEm3v}c9027OjTnF+@e?5@vZ-}~mX z0ne5j@SfBRc6W1l8zrH_c^_{`+{aV99CFWKH$Oz*_}h`^>>YWMp2E|gRG#2At#F2F zo1{F*-Gh~ZY%hWbmEn#}%7cXaILGnHIZ(cR{xc4Pm!T7@&z9}Rh$+l8k(jUsGx z$XXAi%z;?%y4-s|k}y;_yOC=*bhZZjx%aTU{Rex=k!Pr-E}pK%vU&NtI9K7U&2zQd zj7}%dVCu1d9_sHKe?$Ezcz>e`Wqd0tp5L<_`n_N`i|4yll+W2$zxjNJt=M;XS|=!@ z8d7>L*gu=#U!oNAHbUsUA`G-V7WuuvHf(Qn>2{tETx1hBbY2k_?rw!7US=J;TIM%hZ`cjnNqu?FGu3eR5dV|RTH&w8XT+tniFRD`Bp;XQ?R+_{u@GuBbEhfQgr z4n|`_=M_|Czxv)hzW=KEN&eLP%f#@lbNfpF>~-nq!+$;JEBU@vb_v}Kd)O>iUqq8LxVzmIG_;t6P1 zp4H3qM*6R$=Og=FNarGNCTtI$H_|VVK9Ssa(l?iRXXWkSc_aN7(hKPOos@BnXHKE} z7h{z|r%azjzwe-plRj z)Bii^{cw8t?q_%+ol5(sqhXQh;nG*}>^_~Ymj`EHfE#{34C?-YZl*6;?O zu70kHf^Ssu!;h-C`?xBGpHW32|D0>Ss)@uXO>DkR6Gt0pVowWAjPJm8k|wI~G2JbE zAa^WJ6EnSE#0LSdyswD{2Q)GJ8%-3IXyUt{HF5YiO>8RH zM3&VcDpfIvRW%L5aECz*XkrkH`6mpU+8M;#-3($wUxVn8PWl9cSTV;SI;=8?SJoTE zr`rkl8ASIZ2Ju>%L40$`AoejFW<~S<$n8ckys1$<-qt8)^fZbGhZx1V(MB<9f>CUn zWfVX0BhLOcM)CdzqnNtQD5~x;ibV&F;`mXcsCCjPTK;Ba_A!adPLud5hF^(^Gl|2U zOyd4wCeb0+BreP~iEhuDM6WkZ!m!UI#ve6_MdwXow81Q{S2K$~cbmoN2h5^9ALbR0 zFpEwT%p#u;53-&%i+lNS;FFzZ(d2WpNG~>vale>FHy(^#t!xo9Z?}k&W)>0C!6NSJ zXA#k97V%xKMNFM#5q~bTh@sD0#8Yor#OBW}BI%4p6xghy@tsytkZ2Wylda;&WUILJ zgjHAgS*+p$>BE9^ii9*XSq#W-e41x-?xePzO{+H z=WTogVHdHr?BcQJcCoRWT|Ap&7sDpl#mV`0(eXLE$k}Qa?TYOp+3FBqHFb#f4>?4M z*CA%Vfy(PVqr&r}!$xDRK*)V(m*#@$i19c=NPVJm+$WhkCojnq@9A z>ktpeE4dlZZc#MPEdn39MY-HmG4Q|qfCt2Z1ds$$KsNA#CBO$Zfg*4a6od0XU=gE$ z2gHE{kOWddHt>Qazy~&gB5)8CgY$r;yNCiFK(~tokOWddHt>Qazy~&gB5)8CgY!U` zxgU5y97q63AO&OtFIWP6U=t_;2SG7759DjS9*_W1fEV~c5hw<{YA!q=0i*yg@PQ&w z40!cPct8S30bbw(MW7h)Qj73_1dsx}zz2#zG2j(X;Qywwz#;*7K@s3}AdvvPph)g^ zR)z*%Pz2;Zo=gB<`Fn$aEhCWtyr2m18jnZ-UQh&hD?=mzFDL@?H|r9B7Zd>=K#K(6 z1w}wU=T87$Py~3vO(Xy>C<5}ggcE=l6ao29ITL^v6ao29D-(bh6al%BmjJw=2=KT& z_zkF+um}hbX@ECFgctDgxbOmAdl6p1yD7p8cvVh#0Z&qe7x2(rcmXfB2ruA;U*QG3 zsUp09Ed}8Py!s@(fR{Ce7w`^>@B&_k6JEfhci{!R&L_Npmm-80@SckB0$vgqUchU1 z!V7p&N_YY9y9h7f!M*STUab;dz;j;V1#DReFW?mm;RU=oBfNkYdW0A7qLlE0fB5dP zYi{;>wNOEJgMm({t4WT9RIKLn>hUD4F6kgz400TKehJ1uG>H6^Ea*i z@ASiendiT?_{PV+fBhG~i2uoV^ZzKk!CT?q6CyXc5v_m}&?GH=LKCuUR6qZpbf*{p zB+wJ&9i5RZOHa$0z%3sBRb*E1qu_s#Vb}P?IfRa=9Vqo5b%KndTYKC*1OXD~3kqe<7cNeY*CGkPIF3Kga(_;D03W zKN9%glz{X}FG^pPL)!R7dT7!@v_dG8<^P+TT|49R_p{;NJ=HAK3VYn@}zX{=0|#ANJwn7?t{e8{xA5k3uhXFAw#Nw;(sIZ&KGT zJgp8M1~IDE8HH7*ccPa!+r4ePx!z4mc671wk+-_{aj#YNdLQ(D=&hnIbbP05_ty2k z<*loZ^G@@=Hlv|tv$aqYXE?+v?=Q+j-fz4IXS^gk=>OuF%nOaLvFj^<)CJy(Y`<^I zgf;F0aM*@E@f%O=MnsPlS*UW!&toHShTzq0&T>H3Y@yYRVP4A0q z+O+vyo_onBPPCJYx7761;Tb}a>q289zsHka(5PJtVX~RqS$HkiW^|~P4bgm(P)&>B zSx8-;Pc~H9AZ(mFIyWzepHCBwN2lhFW&?E6_}oe3LSbHxXiSAYzjUfOm!7f4LObV*ts;dw&Zc*!f{ z2C= z$X!J0hpd}CFob{c$vIcz@5=3{^T~QAz$0-a5kf!0_3H^O%awdFlS2rnN!IZ7K(6I5 zlA@J!eA2WVX+-_ijuBkTEhxz+=l*{GfiH`6S+3+81mB>);UkGpgF-Tvd~$vs3ZLu` zNy|glPs(O02B9yO8>M)D^X7RgW zGC@CNUh-H7WPWjy;E;R|g)W1CWtzlFKwjCwNdByWPj2Oe56L4B8N&D1aRj~>|Dr