From 0568d5192db9c85115d8cf0ef57adcad67236d3c Mon Sep 17 00:00:00 2001 From: h3xduck Date: Wed, 24 Nov 2021 10:50:30 -0500 Subject: [PATCH] Finished externalizing helper functions --- src/.output/xdp_filter.bpf.o | Bin 6680 -> 6840 bytes src/.output/xdp_filter.o | Bin 27328 -> 27488 bytes src/.output/xdp_filter.skel.h | 503 ++++++++++++++-------------- src/bin/xdp_filter | Bin 1573152 -> 1573152 bytes src/ebpf/xdp_filter.bpf.c | 31 +- src/include/packet/packet_manager.h | 47 +++ src/include/packet/tcp_helper.h | 0 src/include/packet_manager.h | 13 - 8 files changed, 318 insertions(+), 276 deletions(-) create mode 100644 src/include/packet/packet_manager.h create mode 100644 src/include/packet/tcp_helper.h delete mode 100644 src/include/packet_manager.h diff --git a/src/.output/xdp_filter.bpf.o b/src/.output/xdp_filter.bpf.o index 6113920a050dac0abfe0123f34a6449213cbc825..53ab89dfe537da65eafc58ce3c9674d26afd5bd5 100644 GIT binary patch delta 1868 zcmZvcUuauZ9LLYO`PbWSNm`rSM6!8xxTdb_&APV9(6!wxbK=Ae3+~A@O>TS3x+Em2 zrns5vQw71*pAXUpaiB0CbjG~o&4~&F_b@?W$ch<)3>0jAaeEN`oqK<`-d+5`$-STN z_ji8h-#vMMv^{nyDb2u|IZFpE)EasP%3%XX$<zK!PLt?B0uk`HWL$J{^(C~A{rm;nm*3rC6OmGWX?&s_z zzKi@#Z2i-Woh82qYsyK^W{IB^Jj7X@@@J64?=iMYeo^>Oakj=-!yI5k2veMWNF7?p zky*w*rw+dee}=O*@k1Wuvz*-|9zqTpoZWJ;jNBo9LF6xSc8}OV)-K>Gc*9zu5JpkJ zMVk{6+>fj}cmNp}x#LeEryM+ujBD8Ok075UZi)%K&Dm+JmUlP*rVIP)N@Y>I^YVgF`Iem#+d3DUFw?vbYM)c$ak5RUtuo-Ip5L2FN|p@R+5Hk}+x;o88gS zVM`ey1Df4Yv)zbx2dwHT{0`Hw72O3fWtP`rMM?8EG?hvIEo>{3@&UZBBDUd3EG;K? wS;Sx^mX_2Id=Z@~ delta 1736 zcmZ9ML1+_c6vy8;$=D2S;-s216Dme4ZLE|gY1$+n+A1zoP^bl=3wAANYm3E1Eg~W& zN<|NXsZXTrWvwR<%d%RK;;En)ML|7vVONSQOWBiNq^D)yn|V{mc@SoP|Nr;C@4YYI zH_N>X`FdJgjn8-X>0NF808hp~Y1$g1P;ZI6#eFcxHp*7?gVix z*go>maU)yF;dtibH$ML4;|(82bPVge<9#&M9^IZX61N`!``K!59v0aWc~Zw8^c&ha zed(3ns&=I)rYBSB^riCj=~U<5iP@>tzSPC(D--3(bSDuWZCJzy4N>e4g-jkfUFqtt zTqw_$PnBozOz7m&*UO2!DWLuO&)U}`Jse@ zjPMMx(W+or_yO_ujDm3w8^lw>FL``kK~4BC;_x8_w*jj50xTFL)MY?`iZq54JQi*x zj-61j>|uj=MfeDhA6Kv{JV6|(C|L8bLA)+}o5#=6qN?h2xJW|xoC0dvE{Hi#Oigd{ zcH*>$JBX>tO@ENM=;1@e)WfDsQ(` z4;#dF;Tg{Vopwz4Cb7OkJ0koKarh1Gh>xr5KH;;EH-xv*feyc;9iqzlOt_H{&XBJN z(!%b786OwF=L`&fFTjv+jwaOqrX3MJPHe6#yx!6}a+Qh#Aj5vTr2q_yUh(O==)61L zcx{6Q8www7ZLi)EG-+mU{4D9*t2g)raT(mRH%g-O{qV+rHfT`uiuC@%(UbOh_j)zQ zfK@zfcBnZ#Z?;%J(c}t(5R-xK+C#WVZkxF7SHyM0_?}!o|D3zSm-_)#v|HW9Y_wdh zNeW+f4(=sEzbOU^m-()8xV&Q1H|DiCTz`~bJY4s&{5Q$X1U`A*grTKU^IiHf1n_z6 z7o!A64j#;$%$D$cV+pIplcDG)fj+TwJ>tG!L+DZuQjR|hiZ83DEylNbaZ^}|dQh$tj#ToiH5JkXmOpn6)XKF9CM~FF2Df$ zit9}lLxxMMguK=OXNnKA^@fzaM5eH3b7ikX-7_9`G&MP*W5Lk_A=NP+2<}zmqVw+y zj0J|(iKYlqFrs0_W;+;*hLkmSH6BqKl>O1C)mYfJKR$6F7*|k>geD+ddP?T0(Q$u7 z4TRJQ|DM=^v5-F)QG6(doZpgrwnXQyp!DKTWHX21>|Q zY?Zd`O+AZ8bO`wYBPA#i&M9PRIVJ7*pXYyvZTVJ0`h{PFH6YBR)_88 z^5j(ZKj8oB>&*pele5M7y)lF3}&EDWb`ocJMn!B<-V z$=@pPxdFi!O$ErU{=xZsr!)&m=z<$!}biW*m>xwq%neHf4^wLLqI#9s$ zHr>6+)ad#rE9md=MZ1HQRKvaYCRdHP*=yqZcqd_N5&EwheS0+wb~L#j7q&s{AvbJ5 z=(0w~VdrsJSlDeEJ1X=ZjgG@scD~IftKm}T$MjuzuFFAhz--q$bP)!+{Y)>z`R;?v zDuZjsQPwEKr5)Q?pA5@-cC$%2HPSO?VM;qJsGqY}WjGyfr5E64*h^1B)v%X-2m`}j z*4qLz!ycN3n+VUhz{-e+8AC9Lo!JdD*fsiK0lUY1c%f!+Ms2L$2ZK=$OZZ?0J6i}A bq8>UARU=-eY=glOkF-L~-qmF&w_5)Nz3qUx delta 2092 zcmZ9MdrVtZ9LLW&?Pa?_yF#H4N?)=-M`V-&?eNZ}>3+gRE?+6Nz)=U^zu;%t0q+YaKx=U zT&No3f@{%teu7)3VHtT=@F4I18Sa?iqsY<%?ug(&kWE){M|2!t)d}}>ye8O+$JcZX zcL-O`&qO*Lf`jN&gn;1mgh3tGKFC4R@Ss4N1cz`y={D|&;AfC6s}!z#3ZH%%7expf zYMWjPAq_&0>2yixe0Q|*g9?nSQCPPX)7Qaox7VE%$-FXc@bkhaT3iy+5gcbbIj(z&bf zsKZVdVV|R%&cGXv;dnv}%kMG|zIX>d{I2pyGrx*F(!8M3|IDuvkF>v+zi4?sy|| zCEgYurBLCkk)O>P@A*obg9!Rq~Gi zPZK?s{H5HM;r*B1mJEi!Cr1rgk4VgLl=&q2ONs6?GAUqqZ8Di1K47I$=x;7(FBHJZ z=Ix=$g4CEli7&<*86OZj|A+8M>!%A~9lMg$p=()oFaY18mn7ZLmZv(0fkLprogs[0].prog = &obj->progs.xdp_receive; s->progs[0].link = &obj->links.xdp_receive; - s->data_sz = 6680; + s->data_sz = 6840; s->data = (void *)"\ \x7f\x45\x4c\x46\x02\x01\x01\0\0\0\0\0\0\0\0\0\x01\0\xf7\0\x01\0\0\0\0\0\0\0\0\ -\0\0\0\0\0\0\0\0\0\0\0\xd8\x16\0\0\0\0\0\0\0\0\0\0\x40\0\0\0\0\0\x40\0\x0d\0\ +\0\0\0\0\0\0\0\0\0\0\0\x78\x17\0\0\0\0\0\0\0\0\0\0\x40\0\0\0\0\0\x40\0\x0d\0\ \x0c\0\x61\x12\x04\0\0\0\0\0\x61\x11\0\0\0\0\0\0\xbf\x13\0\0\0\0\0\0\x07\x03\0\ -\0\x0e\0\0\0\x2d\x23\x3e\0\0\0\0\0\x3d\x32\x04\0\0\0\0\0\x18\x01\0\0\0\0\0\0\0\ -\0\0\0\0\0\0\0\xb7\x02\0\0\x13\0\0\0\x05\0\x38\0\0\0\0\0\xbf\x16\0\0\0\0\0\0\ -\x07\x06\0\0\x22\0\0\0\x3d\x62\x03\0\0\0\0\0\x18\x01\0\0\x13\0\0\0\0\0\0\0\0\0\ -\0\0\x05\0\x31\0\0\0\0\0\x71\x13\x17\0\0\0\0\0\x15\x03\x03\0\x06\0\0\0\x18\x01\ -\0\0\x15\0\0\0\0\0\0\0\0\0\0\0\x05\0\x2c\0\0\0\0\0\xbf\x13\0\0\0\0\0\0\x07\x03\ -\0\0\x36\0\0\0\x3d\x32\x03\0\0\0\0\0\x18\x01\0\0\x17\0\0\0\0\0\0\0\0\0\0\0\x05\ -\0\x26\0\0\0\0\0\x69\x13\x24\0\0\0\0\0\x15\x03\x03\0\x23\x28\0\0\x18\x01\0\0\ -\x19\0\0\0\0\0\0\0\0\0\0\0\x05\0\x21\0\0\0\0\0\x69\x13\x2e\0\0\0\0\0\x77\x03\0\ -\0\x02\0\0\0\x57\x03\0\0\x3c\0\0\0\x69\x14\x10\0\0\0\0\0\xdc\x04\0\0\x10\0\0\0\ -\x1f\x34\0\0\0\0\0\0\x71\x11\x0e\0\0\0\0\0\x67\x01\0\0\x02\0\0\0\x57\x01\0\0\ -\x3c\0\0\0\x1f\x14\0\0\0\0\0\0\x15\x04\x03\0\x04\0\0\0\x18\x01\0\0\x1b\0\0\0\0\ -\0\0\0\0\0\0\0\x05\0\x13\0\0\0\0\0\x0f\x36\0\0\0\0\0\0\xbf\x61\0\0\0\0\0\0\x07\ -\x01\0\0\x04\0\0\0\x3d\x12\x03\0\0\0\0\0\x18\x01\0\0\x1d\0\0\0\0\0\0\0\0\0\0\0\ -\x05\0\x0c\0\0\0\0\0\x18\x01\0\0\x1f\0\0\0\0\0\0\0\0\0\0\0\xb7\x02\0\0\x36\0\0\ -\0\xbf\x63\0\0\0\0\0\0\xb7\x04\0\0\x04\0\0\0\x85\0\0\0\x06\0\0\0\x71\x61\0\0\0\ -\0\0\0\x55\x01\x02\0\x74\0\0\0\x71\x61\x01\0\0\0\0\0\x15\x01\x06\0\x65\0\0\0\ -\x18\x01\0\0\x55\0\0\0\0\0\0\0\0\0\0\0\xb7\x02\0\0\x02\0\0\0\x85\0\0\0\x06\0\0\ -\0\xb7\0\0\0\x02\0\0\0\x95\0\0\0\0\0\0\0\x71\x61\x02\0\0\0\0\0\x55\x01\xf8\xff\ -\x73\0\0\0\x71\x61\x03\0\0\0\0\0\x55\x01\xf6\xff\x74\0\0\0\x18\x01\0\0\x57\0\0\ -\0\0\0\0\0\0\0\0\0\xb7\x02\0\0\x0f\0\0\0\x85\0\0\0\x06\0\0\0\xb7\x01\0\0\x62\0\ -\0\0\x73\x16\x01\0\0\0\0\0\x05\0\xf3\xff\0\0\0\0\x44\x75\x61\x6c\x20\x42\x53\ -\x44\x2f\x47\x50\x4c\0\x42\x6f\x75\x6e\x64\x20\x63\x68\x65\x63\x6b\x20\x66\x61\ -\x69\x6c\x20\x41\0\x42\0\x43\0\x44\0\x45\0\x46\0\x47\0\x52\x65\x63\x65\x69\x76\ -\x65\x64\x20\x76\x61\x6c\x69\x64\x20\x54\x43\x50\x20\x70\x61\x63\x6b\x65\x74\ -\x20\x77\x69\x74\x68\x20\x70\x61\x79\x6c\x6f\x61\x64\x20\x25\x73\x20\x6f\x66\ -\x20\x73\x69\x7a\x65\x20\x25\x69\x0a\0\x48\0\x42\x50\x46\x20\x66\x69\x6e\x69\ -\x73\x68\x65\x64\x0a\x20\0\x9f\xeb\x01\0\x18\0\0\0\0\0\0\0\x9c\x02\0\0\x9c\x02\ -\0\0\x76\x05\0\0\0\0\0\0\0\0\0\x02\x02\0\0\0\x01\0\0\0\x06\0\0\x04\x18\0\0\0\ -\x08\0\0\0\x03\0\0\0\0\0\0\0\x0d\0\0\0\x03\0\0\0\x20\0\0\0\x16\0\0\0\x03\0\0\0\ -\x40\0\0\0\x20\0\0\0\x03\0\0\0\x60\0\0\0\x30\0\0\0\x03\0\0\0\x80\0\0\0\x3f\0\0\ -\0\x03\0\0\0\xa0\0\0\0\x4e\0\0\0\0\0\0\x08\x04\0\0\0\x54\0\0\0\0\0\0\x01\x04\0\ -\0\0\x20\0\0\0\0\0\0\0\x01\0\0\x0d\x06\0\0\0\x61\0\0\0\x01\0\0\0\x65\0\0\0\0\0\ -\0\x01\x04\0\0\0\x20\0\0\x01\x69\0\0\0\x01\0\0\x0c\x05\0\0\0\x6b\x04\0\0\0\0\0\ -\x01\x01\0\0\0\x08\0\0\x01\0\0\0\0\0\0\0\x03\0\0\0\0\x08\0\0\0\x0a\0\0\0\x0d\0\ -\0\0\x70\x04\0\0\0\0\0\x01\x04\0\0\0\x20\0\0\0\x84\x04\0\0\0\0\0\x0e\x09\0\0\0\ -\x01\0\0\0\0\0\0\0\0\0\0\x0a\x08\0\0\0\0\0\0\0\0\0\0\x03\0\0\0\0\x0c\0\0\0\x0a\ -\0\0\0\x13\0\0\0\x8c\x04\0\0\0\0\0\x0e\x0d\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x03\0\0\ -\0\0\x0c\0\0\0\x0a\0\0\0\x02\0\0\0\xa0\x04\0\0\0\0\0\x0e\x0f\0\0\0\0\0\0\0\xb6\ -\x04\0\0\0\0\0\x0e\x0f\0\0\0\0\0\0\0\xcc\x04\0\0\0\0\0\x0e\x0f\0\0\0\0\0\0\0\ -\xe2\x04\0\0\0\0\0\x0e\x0f\0\0\0\0\0\0\0\xf8\x04\0\0\0\0\0\x0e\x0f\0\0\0\0\0\0\ -\0\x0e\x05\0\0\0\0\0\x0e\x0f\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x03\0\0\0\0\x0c\0\0\0\ -\x0a\0\0\0\x36\0\0\0\x24\x05\0\0\0\0\0\x0e\x16\0\0\0\0\0\0\0\x3a\x05\0\0\0\0\0\ -\x0e\x0f\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x03\0\0\0\0\x0c\0\0\0\x0a\0\0\0\x0f\0\0\0\ -\x50\x05\0\0\0\0\0\x0e\x19\0\0\0\0\0\0\0\x66\x05\0\0\x0a\0\0\x0f\0\0\0\0\x0e\0\ -\0\0\0\0\0\0\x13\0\0\0\x10\0\0\0\x13\0\0\0\x02\0\0\0\x11\0\0\0\x15\0\0\0\x02\0\ -\0\0\x12\0\0\0\x17\0\0\0\x02\0\0\0\x13\0\0\0\x19\0\0\0\x02\0\0\0\x14\0\0\0\x1b\ -\0\0\0\x02\0\0\0\x15\0\0\0\x1d\0\0\0\x02\0\0\0\x17\0\0\0\x1f\0\0\0\x36\0\0\0\ -\x18\0\0\0\x55\0\0\0\x02\0\0\0\x1a\0\0\0\x57\0\0\0\x0f\0\0\0\x6e\x05\0\0\x01\0\ -\0\x0f\0\0\0\0\x0b\0\0\0\0\0\0\0\x0d\0\0\0\0\x78\x64\x70\x5f\x6d\x64\0\x64\x61\ -\x74\x61\0\x64\x61\x74\x61\x5f\x65\x6e\x64\0\x64\x61\x74\x61\x5f\x6d\x65\x74\ -\x61\0\x69\x6e\x67\x72\x65\x73\x73\x5f\x69\x66\x69\x6e\x64\x65\x78\0\x72\x78\ -\x5f\x71\x75\x65\x75\x65\x5f\x69\x6e\x64\x65\x78\0\x65\x67\x72\x65\x73\x73\x5f\ -\x69\x66\x69\x6e\x64\x65\x78\0\x5f\x5f\x75\x33\x32\0\x75\x6e\x73\x69\x67\x6e\ -\x65\x64\x20\x69\x6e\x74\0\x63\x74\x78\0\x69\x6e\x74\0\x78\x64\x70\x5f\x72\x65\ -\x63\x65\x69\x76\x65\0\x78\x64\x70\x5f\x70\x72\x6f\x67\0\x2f\x68\x6f\x6d\x65\ -\x2f\x6f\x73\x62\x6f\x78\x65\x73\x2f\x54\x46\x47\x2f\x73\x72\x63\x2f\x65\x62\ -\x70\x66\x2f\x78\x64\x70\x5f\x66\x69\x6c\x74\x65\x72\x2e\x62\x70\x66\x2e\x63\0\ -\x20\x20\x20\x20\x76\x6f\x69\x64\x20\x2a\x64\x61\x74\x61\x5f\x65\x6e\x64\x20\ -\x3d\x20\x28\x76\x6f\x69\x64\x20\x2a\x29\x28\x6c\x6f\x6e\x67\x29\x63\x74\x78\ -\x2d\x3e\x64\x61\x74\x61\x5f\x65\x6e\x64\x3b\0\x20\x20\x20\x20\x76\x6f\x69\x64\ -\x20\x2a\x64\x61\x74\x61\x20\x3d\x20\x28\x76\x6f\x69\x64\x20\x2a\x29\x28\x6c\ -\x6f\x6e\x67\x29\x63\x74\x78\x2d\x3e\x64\x61\x74\x61\x3b\0\x20\x20\x20\x20\x69\ +\0\x0e\0\0\0\x3d\x32\x04\0\0\0\0\0\x18\x01\0\0\0\0\0\0\0\0\0\0\0\0\0\0\xb7\x02\ +\0\0\x13\0\0\0\x05\0\x38\0\0\0\0\0\xbf\x16\0\0\0\0\0\0\x07\x06\0\0\x22\0\0\0\ +\x3d\x62\x03\0\0\0\0\0\x18\x01\0\0\x13\0\0\0\0\0\0\0\0\0\0\0\x05\0\x31\0\0\0\0\ +\0\x71\x13\x17\0\0\0\0\0\x15\x03\x03\0\x06\0\0\0\x18\x01\0\0\x15\0\0\0\0\0\0\0\ +\0\0\0\0\x05\0\x2c\0\0\0\0\0\xbf\x13\0\0\0\0\0\0\x07\x03\0\0\x36\0\0\0\x3d\x32\ +\x03\0\0\0\0\0\x18\x01\0\0\x17\0\0\0\0\0\0\0\0\0\0\0\x05\0\x26\0\0\0\0\0\x69\ +\x13\x24\0\0\0\0\0\x15\x03\x03\0\x23\x28\0\0\x18\x01\0\0\x19\0\0\0\0\0\0\0\0\0\ +\0\0\x05\0\x21\0\0\0\0\0\x69\x13\x2e\0\0\0\0\0\x77\x03\0\0\x02\0\0\0\x57\x03\0\ +\0\x3c\0\0\0\x69\x14\x10\0\0\0\0\0\xdc\x04\0\0\x10\0\0\0\x1f\x34\0\0\0\0\0\0\ +\x71\x11\x0e\0\0\0\0\0\x67\x01\0\0\x02\0\0\0\x57\x01\0\0\x3c\0\0\0\x1f\x14\0\0\ +\0\0\0\0\x15\x04\x03\0\x04\0\0\0\x18\x01\0\0\x1b\0\0\0\0\0\0\0\0\0\0\0\x05\0\ +\x13\0\0\0\0\0\x0f\x36\0\0\0\0\0\0\xbf\x61\0\0\0\0\0\0\x07\x01\0\0\x04\0\0\0\ +\x3d\x12\x03\0\0\0\0\0\x18\x01\0\0\x1d\0\0\0\0\0\0\0\0\0\0\0\x05\0\x0c\0\0\0\0\ +\0\x18\x01\0\0\x1f\0\0\0\0\0\0\0\0\0\0\0\xb7\x02\0\0\x36\0\0\0\xbf\x63\0\0\0\0\ +\0\0\xb7\x04\0\0\x04\0\0\0\x85\0\0\0\x06\0\0\0\x71\x61\0\0\0\0\0\0\x55\x01\x02\ +\0\x74\0\0\0\x71\x61\x01\0\0\0\0\0\x15\x01\x06\0\x65\0\0\0\x18\x01\0\0\x55\0\0\ +\0\0\0\0\0\0\0\0\0\xb7\x02\0\0\x02\0\0\0\x85\0\0\0\x06\0\0\0\xb7\0\0\0\x02\0\0\ +\0\x95\0\0\0\0\0\0\0\x71\x61\x02\0\0\0\0\0\x55\x01\xf8\xff\x73\0\0\0\x71\x61\ +\x03\0\0\0\0\0\x55\x01\xf6\xff\x74\0\0\0\x18\x01\0\0\x57\0\0\0\0\0\0\0\0\0\0\0\ +\xb7\x02\0\0\x0f\0\0\0\x85\0\0\0\x06\0\0\0\xb7\x01\0\0\x62\0\0\0\x73\x16\x01\0\ +\0\0\0\0\x05\0\xf3\xff\0\0\0\0\x44\x75\x61\x6c\x20\x42\x53\x44\x2f\x47\x50\x4c\ +\0\x42\x6f\x75\x6e\x64\x20\x63\x68\x65\x63\x6b\x20\x66\x61\x69\x6c\x20\x41\0\ +\x42\0\x43\0\x44\0\x45\0\x46\0\x47\0\x52\x65\x63\x65\x69\x76\x65\x64\x20\x76\ +\x61\x6c\x69\x64\x20\x54\x43\x50\x20\x70\x61\x63\x6b\x65\x74\x20\x77\x69\x74\ +\x68\x20\x70\x61\x79\x6c\x6f\x61\x64\x20\x25\x73\x20\x6f\x66\x20\x73\x69\x7a\ +\x65\x20\x25\x69\x0a\0\x48\0\x42\x50\x46\x20\x66\x69\x6e\x69\x73\x68\x65\x64\ +\x0a\x20\0\x9f\xeb\x01\0\x18\0\0\0\0\0\0\0\x9c\x02\0\0\x9c\x02\0\0\x3d\x06\0\0\ +\0\0\0\0\0\0\0\x02\x02\0\0\0\x01\0\0\0\x06\0\0\x04\x18\0\0\0\x08\0\0\0\x03\0\0\ +\0\0\0\0\0\x0d\0\0\0\x03\0\0\0\x20\0\0\0\x16\0\0\0\x03\0\0\0\x40\0\0\0\x20\0\0\ +\0\x03\0\0\0\x60\0\0\0\x30\0\0\0\x03\0\0\0\x80\0\0\0\x3f\0\0\0\x03\0\0\0\xa0\0\ +\0\0\x4e\0\0\0\0\0\0\x08\x04\0\0\0\x54\0\0\0\0\0\0\x01\x04\0\0\0\x20\0\0\0\0\0\ +\0\0\x01\0\0\x0d\x06\0\0\0\x61\0\0\0\x01\0\0\0\x65\0\0\0\0\0\0\x01\x04\0\0\0\ +\x20\0\0\x01\x69\0\0\0\x01\0\0\x0c\x05\0\0\0\x32\x05\0\0\0\0\0\x01\x01\0\0\0\ +\x08\0\0\x01\0\0\0\0\0\0\0\x03\0\0\0\0\x08\0\0\0\x0a\0\0\0\x0d\0\0\0\x37\x05\0\ +\0\0\0\0\x01\x04\0\0\0\x20\0\0\0\x4b\x05\0\0\0\0\0\x0e\x09\0\0\0\x01\0\0\0\0\0\ +\0\0\0\0\0\x0a\x08\0\0\0\0\0\0\0\0\0\0\x03\0\0\0\0\x0c\0\0\0\x0a\0\0\0\x13\0\0\ +\0\x53\x05\0\0\0\0\0\x0e\x0d\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x03\0\0\0\0\x0c\0\0\0\ +\x0a\0\0\0\x02\0\0\0\x67\x05\0\0\0\0\0\x0e\x0f\0\0\0\0\0\0\0\x7d\x05\0\0\0\0\0\ +\x0e\x0f\0\0\0\0\0\0\0\x93\x05\0\0\0\0\0\x0e\x0f\0\0\0\0\0\0\0\xa9\x05\0\0\0\0\ +\0\x0e\x0f\0\0\0\0\0\0\0\xbf\x05\0\0\0\0\0\x0e\x0f\0\0\0\0\0\0\0\xd5\x05\0\0\0\ +\0\0\x0e\x0f\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x03\0\0\0\0\x0c\0\0\0\x0a\0\0\0\x36\0\ +\0\0\xeb\x05\0\0\0\0\0\x0e\x16\0\0\0\0\0\0\0\x01\x06\0\0\0\0\0\x0e\x0f\0\0\0\0\ +\0\0\0\0\0\0\0\0\0\0\x03\0\0\0\0\x0c\0\0\0\x0a\0\0\0\x0f\0\0\0\x17\x06\0\0\0\0\ +\0\x0e\x19\0\0\0\0\0\0\0\x2d\x06\0\0\x0a\0\0\x0f\0\0\0\0\x0e\0\0\0\0\0\0\0\x13\ +\0\0\0\x10\0\0\0\x13\0\0\0\x02\0\0\0\x11\0\0\0\x15\0\0\0\x02\0\0\0\x12\0\0\0\ +\x17\0\0\0\x02\0\0\0\x13\0\0\0\x19\0\0\0\x02\0\0\0\x14\0\0\0\x1b\0\0\0\x02\0\0\ +\0\x15\0\0\0\x1d\0\0\0\x02\0\0\0\x17\0\0\0\x1f\0\0\0\x36\0\0\0\x18\0\0\0\x55\0\ +\0\0\x02\0\0\0\x1a\0\0\0\x57\0\0\0\x0f\0\0\0\x35\x06\0\0\x01\0\0\x0f\0\0\0\0\ +\x0b\0\0\0\0\0\0\0\x0d\0\0\0\0\x78\x64\x70\x5f\x6d\x64\0\x64\x61\x74\x61\0\x64\ +\x61\x74\x61\x5f\x65\x6e\x64\0\x64\x61\x74\x61\x5f\x6d\x65\x74\x61\0\x69\x6e\ +\x67\x72\x65\x73\x73\x5f\x69\x66\x69\x6e\x64\x65\x78\0\x72\x78\x5f\x71\x75\x65\ +\x75\x65\x5f\x69\x6e\x64\x65\x78\0\x65\x67\x72\x65\x73\x73\x5f\x69\x66\x69\x6e\ +\x64\x65\x78\0\x5f\x5f\x75\x33\x32\0\x75\x6e\x73\x69\x67\x6e\x65\x64\x20\x69\ +\x6e\x74\0\x63\x74\x78\0\x69\x6e\x74\0\x78\x64\x70\x5f\x72\x65\x63\x65\x69\x76\ +\x65\0\x78\x64\x70\x5f\x70\x72\x6f\x67\0\x2f\x68\x6f\x6d\x65\x2f\x6f\x73\x62\ +\x6f\x78\x65\x73\x2f\x54\x46\x47\x2f\x73\x72\x63\x2f\x65\x62\x70\x66\x2f\x78\ +\x64\x70\x5f\x66\x69\x6c\x74\x65\x72\x2e\x62\x70\x66\x2e\x63\0\x20\x20\x20\x20\ +\x76\x6f\x69\x64\x20\x2a\x64\x61\x74\x61\x5f\x65\x6e\x64\x20\x3d\x20\x28\x76\ +\x6f\x69\x64\x20\x2a\x29\x28\x6c\x6f\x6e\x67\x29\x63\x74\x78\x2d\x3e\x64\x61\ +\x74\x61\x5f\x65\x6e\x64\x3b\0\x20\x20\x20\x20\x76\x6f\x69\x64\x20\x2a\x64\x61\ +\x74\x61\x20\x3d\x20\x28\x76\x6f\x69\x64\x20\x2a\x29\x28\x6c\x6f\x6e\x67\x29\ +\x63\x74\x78\x2d\x3e\x64\x61\x74\x61\x3b\0\x2f\x68\x6f\x6d\x65\x2f\x6f\x73\x62\ +\x6f\x78\x65\x73\x2f\x54\x46\x47\x2f\x73\x72\x63\x2f\x65\x62\x70\x66\x2f\x2e\ +\x2e\x2f\x69\x6e\x63\x6c\x75\x64\x65\x2f\x70\x61\x63\x6b\x65\x74\x2f\x70\x61\ +\x63\x6b\x65\x74\x5f\x6d\x61\x6e\x61\x67\x65\x72\x2e\x68\0\x20\x20\x20\x20\x69\ \x66\x20\x28\x28\x76\x6f\x69\x64\x20\x2a\x29\x65\x74\x68\x20\x2b\x20\x73\x69\ -\x7a\x65\x6f\x66\x28\x2a\x65\x74\x68\x29\x20\x3e\x20\x64\x61\x74\x61\x5f\x65\ -\x6e\x64\x29\x7b\0\x20\x20\x20\x20\x69\x66\x28\x65\x74\x68\x65\x72\x6e\x65\x74\ -\x5f\x68\x65\x61\x64\x65\x72\x5f\x62\x6f\x75\x6e\x64\x5f\x63\x68\x65\x63\x6b\ -\x28\x65\x74\x68\x2c\x20\x64\x61\x74\x61\x5f\x65\x6e\x64\x29\x3c\x30\x29\x7b\0\ -\x20\x20\x20\x20\x20\x20\x20\x20\x62\x70\x66\x5f\x70\x72\x69\x6e\x74\x6b\x28\ -\x22\x42\x6f\x75\x6e\x64\x20\x63\x68\x65\x63\x6b\x20\x66\x61\x69\x6c\x20\x41\ -\x22\x29\x3b\0\x20\x20\x20\x20\x69\x66\x20\x28\x28\x76\x6f\x69\x64\x20\x2a\x29\ -\x69\x70\x20\x2b\x20\x73\x69\x7a\x65\x6f\x66\x28\x2a\x69\x70\x29\x20\x3e\x20\ -\x64\x61\x74\x61\x5f\x65\x6e\x64\x29\x7b\0\x20\x20\x20\x20\x20\x20\x20\x20\x62\ -\x70\x66\x5f\x70\x72\x69\x6e\x74\x6b\x28\x22\x42\x22\x29\x3b\0\x20\x20\x20\x20\ -\x69\x66\x20\x28\x69\x70\x2d\x3e\x70\x72\x6f\x74\x6f\x63\x6f\x6c\x20\x21\x3d\ -\x20\x49\x50\x50\x52\x4f\x54\x4f\x5f\x54\x43\x50\x29\x7b\0\x20\x20\x20\x20\x20\ -\x20\x20\x20\x62\x70\x66\x5f\x70\x72\x69\x6e\x74\x6b\x28\x22\x43\x22\x29\x3b\0\ -\x20\x20\x20\x20\x69\x66\x20\x28\x28\x76\x6f\x69\x64\x20\x2a\x29\x74\x63\x70\ -\x20\x2b\x20\x73\x69\x7a\x65\x6f\x66\x28\x2a\x74\x63\x70\x29\x20\x3e\x20\x64\ -\x61\x74\x61\x5f\x65\x6e\x64\x29\x7b\0\x20\x20\x20\x20\x20\x20\x20\x20\x62\x70\ -\x66\x5f\x70\x72\x69\x6e\x74\x6b\x28\x22\x44\x22\x29\x3b\0\x20\x20\x20\x20\x69\ -\x66\x20\x28\x74\x63\x70\x2d\x3e\x64\x65\x73\x74\x20\x21\x3d\x20\x6e\x74\x6f\ -\x68\x73\x28\x39\x30\x30\x30\x29\x29\x7b\0\x20\x20\x20\x20\x20\x20\x20\x20\x62\ -\x70\x66\x5f\x70\x72\x69\x6e\x74\x6b\x28\x22\x45\x22\x29\x3b\0\x20\x20\x20\x20\ -\x70\x61\x79\x6c\x6f\x61\x64\x5f\x73\x69\x7a\x65\x20\x3d\x20\x6e\x74\x6f\x68\ -\x73\x28\x69\x70\x2d\x3e\x74\x6f\x74\x5f\x6c\x65\x6e\x29\x20\x2d\x20\x28\x74\ -\x63\x70\x2d\x3e\x64\x6f\x66\x66\x20\x2a\x20\x34\x29\x20\x2d\x20\x28\x69\x70\ -\x2d\x3e\x69\x68\x6c\x20\x2a\x20\x34\x29\x3b\0\x20\x20\x20\x20\x69\x66\x20\x28\ -\x70\x61\x79\x6c\x6f\x61\x64\x5f\x73\x69\x7a\x65\x20\x21\x3d\x20\x73\x69\x7a\ -\x65\x6f\x66\x28\x6d\x61\x74\x63\x68\x5f\x70\x61\x74\x74\x65\x72\x6e\x29\x20\ -\x2d\x20\x31\x29\x20\x7b\0\x20\x20\x20\x20\x20\x20\x20\x20\x62\x70\x66\x5f\x70\ -\x72\x69\x6e\x74\x6b\x28\x22\x46\x22\x29\x3b\0\x20\x20\x20\x20\x69\x66\x20\x28\ -\x28\x76\x6f\x69\x64\x20\x2a\x29\x70\x61\x79\x6c\x6f\x61\x64\x20\x2b\x20\x70\ -\x61\x79\x6c\x6f\x61\x64\x5f\x73\x69\x7a\x65\x20\x3e\x20\x64\x61\x74\x61\x5f\ -\x65\x6e\x64\x29\x7b\0\x20\x20\x20\x20\x20\x20\x20\x20\x62\x70\x66\x5f\x70\x72\ -\x69\x6e\x74\x6b\x28\x22\x47\x22\x29\x3b\0\x20\x20\x20\x20\x62\x70\x66\x5f\x70\ -\x72\x69\x6e\x74\x6b\x28\x22\x52\x65\x63\x65\x69\x76\x65\x64\x20\x76\x61\x6c\ -\x69\x64\x20\x54\x43\x50\x20\x70\x61\x63\x6b\x65\x74\x20\x77\x69\x74\x68\x20\ -\x70\x61\x79\x6c\x6f\x61\x64\x20\x25\x73\x20\x6f\x66\x20\x73\x69\x7a\x65\x20\ -\x25\x69\x5c\x6e\x22\x2c\x20\x70\x61\x79\x6c\x6f\x61\x64\x2c\x20\x70\x61\x79\ -\x6c\x6f\x61\x64\x5f\x73\x69\x7a\x65\x29\x3b\0\x20\x20\x20\x20\x20\x20\x20\x20\ -\x69\x66\x20\x28\x70\x61\x79\x6c\x6f\x61\x64\x5b\x69\x5d\x20\x21\x3d\x20\x6d\ -\x61\x74\x63\x68\x5f\x70\x61\x74\x74\x65\x72\x6e\x5b\x69\x5d\x29\x7b\0\x20\x20\ -\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x62\x70\x66\x5f\x70\x72\x69\x6e\x74\ -\x6b\x28\x22\x48\x22\x29\x3b\0\x7d\0\x20\x20\x20\x20\x62\x70\x66\x5f\x70\x72\ -\x69\x6e\x74\x6b\x28\x22\x42\x50\x46\x20\x66\x69\x6e\x69\x73\x68\x65\x64\x5c\ -\x6e\x20\x22\x29\x3b\0\x20\x20\x20\x20\x70\x61\x79\x6c\x6f\x61\x64\x5b\x31\x5d\ -\x20\x3d\x20\x27\x62\x27\x3b\0\x63\x68\x61\x72\0\x5f\x5f\x41\x52\x52\x41\x59\ -\x5f\x53\x49\x5a\x45\x5f\x54\x59\x50\x45\x5f\x5f\0\x4c\x49\x43\x45\x4e\x53\x45\ -\0\x78\x64\x70\x5f\x72\x65\x63\x65\x69\x76\x65\x2e\x5f\x5f\x5f\x5f\x66\x6d\x74\ -\0\x78\x64\x70\x5f\x72\x65\x63\x65\x69\x76\x65\x2e\x5f\x5f\x5f\x5f\x66\x6d\x74\ -\x2e\x31\0\x78\x64\x70\x5f\x72\x65\x63\x65\x69\x76\x65\x2e\x5f\x5f\x5f\x5f\x66\ -\x6d\x74\x2e\x32\0\x78\x64\x70\x5f\x72\x65\x63\x65\x69\x76\x65\x2e\x5f\x5f\x5f\ -\x5f\x66\x6d\x74\x2e\x33\0\x78\x64\x70\x5f\x72\x65\x63\x65\x69\x76\x65\x2e\x5f\ -\x5f\x5f\x5f\x66\x6d\x74\x2e\x34\0\x78\x64\x70\x5f\x72\x65\x63\x65\x69\x76\x65\ -\x2e\x5f\x5f\x5f\x5f\x66\x6d\x74\x2e\x35\0\x78\x64\x70\x5f\x72\x65\x63\x65\x69\ -\x76\x65\x2e\x5f\x5f\x5f\x5f\x66\x6d\x74\x2e\x36\0\x78\x64\x70\x5f\x72\x65\x63\ -\x65\x69\x76\x65\x2e\x5f\x5f\x5f\x5f\x66\x6d\x74\x2e\x37\0\x78\x64\x70\x5f\x72\ -\x65\x63\x65\x69\x76\x65\x2e\x5f\x5f\x5f\x5f\x66\x6d\x74\x2e\x38\0\x78\x64\x70\ -\x5f\x72\x65\x63\x65\x69\x76\x65\x2e\x5f\x5f\x5f\x5f\x66\x6d\x74\x2e\x39\0\x2e\ -\x72\x6f\x64\x61\x74\x61\0\x6c\x69\x63\x65\x6e\x73\x65\0\x9f\xeb\x01\0\x20\0\0\ -\0\0\0\0\0\x14\0\0\0\x14\0\0\0\xdc\x02\0\0\xf0\x02\0\0\0\0\0\0\x08\0\0\0\x75\0\ -\0\0\x01\0\0\0\0\0\0\0\x07\0\0\0\x10\0\0\0\x75\0\0\0\x2d\0\0\0\0\0\0\0\x7e\0\0\ -\0\xaa\0\0\0\x29\xe4\0\0\x08\0\0\0\x7e\0\0\0\xdc\0\0\0\x25\xe8\0\0\x10\0\0\0\ -\x7e\0\0\0\x06\x01\0\0\x15\x08\x01\0\x20\0\0\0\x7e\0\0\0\x06\x01\0\0\x09\x08\ -\x01\0\x28\0\0\0\x7e\0\0\0\x36\x01\0\0\x08\x18\x01\0\x30\0\0\0\x7e\0\0\0\x6c\ -\x01\0\0\x09\x1c\x01\0\x50\0\0\0\x7e\0\0\0\x96\x01\0\0\x14\x30\x01\0\x60\0\0\0\ -\x7e\0\0\0\x96\x01\0\0\x09\x30\x01\0\x68\0\0\0\x7e\0\0\0\xc4\x01\0\0\x09\x34\ -\x01\0\x80\0\0\0\x7e\0\0\0\xdd\x01\0\0\x0d\x44\x01\0\x88\0\0\0\x7e\0\0\0\xdd\ -\x01\0\0\x09\x44\x01\0\x90\0\0\0\x7e\0\0\0\x03\x02\0\0\x09\x48\x01\0\xa8\0\0\0\ -\x7e\0\0\0\x1c\x02\0\0\x15\x5c\x01\0\xb8\0\0\0\x7e\0\0\0\x1c\x02\0\0\x09\x5c\ -\x01\0\xc0\0\0\0\x7e\0\0\0\x4c\x02\0\0\x09\x60\x01\0\xd8\0\0\0\x7e\0\0\0\x65\ -\x02\0\0\x0e\x70\x01\0\xe0\0\0\0\x7e\0\0\0\x65\x02\0\0\x09\x70\x01\0\xe8\0\0\0\ -\x7e\0\0\0\x88\x02\0\0\x09\x74\x01\0\0\x01\0\0\x7e\0\0\0\xa1\x02\0\0\x2f\x84\ -\x01\0\x08\x01\0\0\x7e\0\0\0\xa1\x02\0\0\x34\x84\x01\0\x18\x01\0\0\x7e\0\0\0\ -\xa1\x02\0\0\x14\x84\x01\0\x28\x01\0\0\x7e\0\0\0\xa1\x02\0\0\x27\x84\x01\0\x30\ -\x01\0\0\x7e\0\0\0\xa1\x02\0\0\x40\x84\x01\0\x38\x01\0\0\x7e\0\0\0\xa1\x02\0\0\ -\x44\x84\x01\0\x48\x01\0\0\x7e\0\0\0\xa1\x02\0\0\x39\x84\x01\0\x50\x01\0\0\x7e\ -\0\0\0\xea\x02\0\0\x09\x94\x01\0\x58\x01\0\0\x7e\0\0\0\x1f\x03\0\0\x09\x98\x01\ -\0\x70\x01\0\0\x7e\0\0\0\0\0\0\0\0\0\0\0\x78\x01\0\0\x7e\0\0\0\x38\x03\0\0\x19\ -\xac\x01\0\x88\x01\0\0\x7e\0\0\0\x38\x03\0\0\x09\xac\x01\0\x90\x01\0\0\x7e\0\0\ -\0\x6c\x03\0\0\x09\xb0\x01\0\xa8\x01\0\0\x7e\0\0\0\x85\x03\0\0\x05\xc0\x01\0\ -\xd8\x01\0\0\x7e\0\0\0\xe6\x03\0\0\x0d\xcc\x01\0\xe0\x01\0\0\x7e\0\0\0\xe6\x03\ -\0\0\x0d\xcc\x01\0\xe8\x01\0\0\x7e\0\0\0\xe6\x03\0\0\x0d\xcc\x01\0\xf0\x01\0\0\ -\x7e\0\0\0\xe6\x03\0\0\x0d\xcc\x01\0\xf8\x01\0\0\x7e\0\0\0\x13\x04\0\0\x0d\xd0\ -\x01\0\x08\x02\0\0\x7e\0\0\0\0\0\0\0\0\0\0\0\x18\x02\0\0\x7e\0\0\0\x30\x04\0\0\ -\x01\x18\x02\0\x28\x02\0\0\x7e\0\0\0\xe6\x03\0\0\x0d\xcc\x01\0\x30\x02\0\0\x7e\ -\0\0\0\xe6\x03\0\0\x0d\xcc\x01\0\x38\x02\0\0\x7e\0\0\0\xe6\x03\0\0\x0d\xcc\x01\ -\0\x40\x02\0\0\x7e\0\0\0\xe6\x03\0\0\x0d\xcc\x01\0\x48\x02\0\0\x7e\0\0\0\x32\ -\x04\0\0\x05\xe4\x01\0\x70\x02\0\0\x7e\0\0\0\x55\x04\0\0\x10\xe8\x01\0\0\0\0\0\ -\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x7c\x01\0\0\0\0\x02\0\0\x01\0\0\ -\0\0\0\0\0\0\0\0\0\0\0\0\x40\x01\0\0\0\0\x02\0\x70\x01\0\0\0\0\0\0\0\0\0\0\0\0\ -\0\0\x05\x01\0\0\0\0\x02\0\xa8\x01\0\0\0\0\0\0\0\0\0\0\0\0\0\0\xca\0\0\0\0\0\ -\x02\0\xf8\x01\0\0\0\0\0\0\0\0\0\0\0\0\0\0\xa5\0\0\0\0\0\x02\0\x08\x02\0\0\0\0\ -\0\0\0\0\0\0\0\0\0\0\x87\0\0\0\0\0\x02\0\x10\x02\0\0\0\0\0\0\0\0\0\0\0\0\0\0\ -\x9a\x01\0\0\0\0\x02\0\x18\x02\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x74\x01\0\0\0\0\x02\ -\0\x28\x02\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x39\x01\0\0\0\0\x02\0\x50\0\0\0\0\0\0\0\ -\0\0\0\0\0\0\0\0\xfe\0\0\0\0\0\x02\0\x80\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\xc3\0\0\ -\0\0\0\x02\0\xa8\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x80\0\0\0\0\0\x02\0\xd8\0\0\0\0\ -\0\0\0\0\0\0\0\0\0\0\0\x14\0\0\0\x01\0\x04\0\0\0\0\0\0\0\0\0\x13\0\0\0\0\0\0\0\ -\x84\x01\0\0\x01\0\x04\0\x13\0\0\0\0\0\0\0\x02\0\0\0\0\0\0\0\x5e\x01\0\0\x01\0\ -\x04\0\x15\0\0\0\0\0\0\0\x02\0\0\0\0\0\0\0\x48\x01\0\0\x01\0\x04\0\x17\0\0\0\0\ -\0\0\0\x02\0\0\0\0\0\0\0\x23\x01\0\0\x01\0\x04\0\x19\0\0\0\0\0\0\0\x02\0\0\0\0\ -\0\0\0\x0d\x01\0\0\x01\0\x04\0\x1b\0\0\0\0\0\0\0\x02\0\0\0\0\0\0\0\xe8\0\0\0\ -\x01\0\x04\0\x1d\0\0\0\0\0\0\0\x02\0\0\0\0\0\0\0\xd2\0\0\0\x01\0\x04\0\x1f\0\0\ -\0\0\0\0\0\x36\0\0\0\0\0\0\0\xad\0\0\0\x01\0\x04\0\x55\0\0\0\0\0\0\0\x02\0\0\0\ -\0\0\0\0\x8f\0\0\0\x01\0\x04\0\x57\0\0\0\0\0\0\0\x0f\0\0\0\0\0\0\0\0\0\0\0\x03\ -\0\x02\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x03\0\x04\0\0\0\0\0\0\0\0\0\0\ -\0\0\0\0\0\0\0\x78\0\0\0\x11\0\x03\0\0\0\0\0\0\0\0\0\x0d\0\0\0\0\0\0\0\x43\0\0\ -\0\x12\0\x02\0\0\0\0\0\0\0\0\0\x80\x02\0\0\0\0\0\0\x30\0\0\0\0\0\0\0\x01\0\0\0\ -\x18\0\0\0\x68\0\0\0\0\0\0\0\x01\0\0\0\x18\0\0\0\x90\0\0\0\0\0\0\0\x01\0\0\0\ -\x18\0\0\0\xc0\0\0\0\0\0\0\0\x01\0\0\0\x18\0\0\0\xe8\0\0\0\0\0\0\0\x01\0\0\0\ -\x18\0\0\0\x58\x01\0\0\0\0\0\0\x01\0\0\0\x18\0\0\0\x90\x01\0\0\0\0\0\0\x01\0\0\ -\0\x18\0\0\0\xa8\x01\0\0\0\0\0\0\x01\0\0\0\x18\0\0\0\xf8\x01\0\0\0\0\0\0\x01\0\ -\0\0\x18\0\0\0\x48\x02\0\0\0\0\0\0\x01\0\0\0\x18\0\0\0\x28\x02\0\0\0\0\0\0\x0a\ -\0\0\0\x18\0\0\0\x34\x02\0\0\0\0\0\0\x0a\0\0\0\x18\0\0\0\x40\x02\0\0\0\0\0\0\ -\x0a\0\0\0\x18\0\0\0\x4c\x02\0\0\0\0\0\0\x0a\0\0\0\x18\0\0\0\x58\x02\0\0\0\0\0\ -\0\x0a\0\0\0\x18\0\0\0\x64\x02\0\0\0\0\0\0\x0a\0\0\0\x18\0\0\0\x70\x02\0\0\0\0\ -\0\0\x0a\0\0\0\x18\0\0\0\x7c\x02\0\0\0\0\0\0\x0a\0\0\0\x18\0\0\0\x88\x02\0\0\0\ -\0\0\0\x0a\0\0\0\x18\0\0\0\x94\x02\0\0\0\0\0\0\x0a\0\0\0\x18\0\0\0\xac\x02\0\0\ -\0\0\0\0\0\0\0\0\x19\0\0\0\x2c\0\0\0\0\0\0\0\0\0\0\0\x17\0\0\0\x40\0\0\0\0\0\0\ -\0\0\0\0\0\x17\0\0\0\x50\0\0\0\0\0\0\0\0\0\0\0\x17\0\0\0\x60\0\0\0\0\0\0\0\0\0\ -\0\0\x17\0\0\0\x70\0\0\0\0\0\0\0\0\0\0\0\x17\0\0\0\x80\0\0\0\0\0\0\0\0\0\0\0\ -\x17\0\0\0\x90\0\0\0\0\0\0\0\0\0\0\0\x17\0\0\0\xa0\0\0\0\0\0\0\0\0\0\0\0\x17\0\ -\0\0\xb0\0\0\0\0\0\0\0\0\0\0\0\x17\0\0\0\xc0\0\0\0\0\0\0\0\0\0\0\0\x17\0\0\0\ -\xd0\0\0\0\0\0\0\0\0\0\0\0\x17\0\0\0\xe0\0\0\0\0\0\0\0\0\0\0\0\x17\0\0\0\xf0\0\ -\0\0\0\0\0\0\0\0\0\0\x17\0\0\0\0\x01\0\0\0\0\0\0\0\0\0\0\x17\0\0\0\x10\x01\0\0\ -\0\0\0\0\0\0\0\0\x17\0\0\0\x20\x01\0\0\0\0\0\0\0\0\0\0\x17\0\0\0\x30\x01\0\0\0\ -\0\0\0\0\0\0\0\x17\0\0\0\x40\x01\0\0\0\0\0\0\0\0\0\0\x17\0\0\0\x50\x01\0\0\0\0\ -\0\0\0\0\0\0\x17\0\0\0\x60\x01\0\0\0\0\0\0\0\0\0\0\x17\0\0\0\x70\x01\0\0\0\0\0\ -\0\0\0\0\0\x17\0\0\0\x80\x01\0\0\0\0\0\0\0\0\0\0\x17\0\0\0\x90\x01\0\0\0\0\0\0\ -\0\0\0\0\x17\0\0\0\xa0\x01\0\0\0\0\0\0\0\0\0\0\x17\0\0\0\xb0\x01\0\0\0\0\0\0\0\ -\0\0\0\x17\0\0\0\xc0\x01\0\0\0\0\0\0\0\0\0\0\x17\0\0\0\xd0\x01\0\0\0\0\0\0\0\0\ -\0\0\x17\0\0\0\xe0\x01\0\0\0\0\0\0\0\0\0\0\x17\0\0\0\xf0\x01\0\0\0\0\0\0\0\0\0\ -\0\x17\0\0\0\0\x02\0\0\0\0\0\0\0\0\0\0\x17\0\0\0\x10\x02\0\0\0\0\0\0\0\0\0\0\ -\x17\0\0\0\x20\x02\0\0\0\0\0\0\0\0\0\0\x17\0\0\0\x30\x02\0\0\0\0\0\0\0\0\0\0\ -\x17\0\0\0\x40\x02\0\0\0\0\0\0\0\0\0\0\x17\0\0\0\x50\x02\0\0\0\0\0\0\0\0\0\0\ -\x17\0\0\0\x60\x02\0\0\0\0\0\0\0\0\0\0\x17\0\0\0\x70\x02\0\0\0\0\0\0\0\0\0\0\ -\x17\0\0\0\x80\x02\0\0\0\0\0\0\0\0\0\0\x17\0\0\0\x90\x02\0\0\0\0\0\0\0\0\0\0\ -\x17\0\0\0\xa0\x02\0\0\0\0\0\0\0\0\0\0\x17\0\0\0\xb0\x02\0\0\0\0\0\0\0\0\0\0\ -\x17\0\0\0\xc0\x02\0\0\0\0\0\0\0\0\0\0\x17\0\0\0\xd0\x02\0\0\0\0\0\0\0\0\0\0\ -\x17\0\0\0\xe0\x02\0\0\0\0\0\0\0\0\0\0\x17\0\0\0\xf0\x02\0\0\0\0\0\0\0\0\0\0\ -\x17\0\0\0\0\x03\0\0\0\0\0\0\0\0\0\0\x17\0\0\0\x20\x1f\x0e\x0f\x10\x11\x12\x13\ -\x14\x15\x16\x17\0\x2e\x74\x65\x78\x74\0\x2e\x72\x65\x6c\x2e\x42\x54\x46\x2e\ -\x65\x78\x74\0\x78\x64\x70\x5f\x72\x65\x63\x65\x69\x76\x65\x2e\x5f\x5f\x5f\x5f\ -\x66\x6d\x74\0\x2e\x72\x65\x6c\x78\x64\x70\x5f\x70\x72\x6f\x67\0\x2e\x6c\x6c\ -\x76\x6d\x5f\x61\x64\x64\x72\x73\x69\x67\0\x78\x64\x70\x5f\x72\x65\x63\x65\x69\ -\x76\x65\0\x6c\x69\x63\x65\x6e\x73\x65\0\x2e\x73\x74\x72\x74\x61\x62\0\x2e\x73\ -\x79\x6d\x74\x61\x62\0\x2e\x72\x6f\x64\x61\x74\x61\0\x2e\x72\x65\x6c\x2e\x42\ -\x54\x46\0\x4c\x49\x43\x45\x4e\x53\x45\0\x4c\x42\x42\x30\x5f\x39\0\x4c\x42\x42\ -\x30\x5f\x31\x39\0\x78\x64\x70\x5f\x72\x65\x63\x65\x69\x76\x65\x2e\x5f\x5f\x5f\ -\x5f\x66\x6d\x74\x2e\x39\0\x4c\x42\x42\x30\x5f\x31\x38\0\x78\x64\x70\x5f\x72\ -\x65\x63\x65\x69\x76\x65\x2e\x5f\x5f\x5f\x5f\x66\x6d\x74\x2e\x38\0\x4c\x42\x42\ -\x30\x5f\x37\0\x4c\x42\x42\x30\x5f\x31\x37\0\x78\x64\x70\x5f\x72\x65\x63\x65\ -\x69\x76\x65\x2e\x5f\x5f\x5f\x5f\x66\x6d\x74\x2e\x37\0\x78\x64\x70\x5f\x72\x65\ -\x63\x65\x69\x76\x65\x2e\x5f\x5f\x5f\x5f\x66\x6d\x74\x2e\x36\0\x4c\x42\x42\x30\ -\x5f\x35\0\x4c\x42\x42\x30\x5f\x31\x35\0\x78\x64\x70\x5f\x72\x65\x63\x65\x69\ -\x76\x65\x2e\x5f\x5f\x5f\x5f\x66\x6d\x74\x2e\x35\0\x78\x64\x70\x5f\x72\x65\x63\ -\x65\x69\x76\x65\x2e\x5f\x5f\x5f\x5f\x66\x6d\x74\x2e\x34\0\x4c\x42\x42\x30\x5f\ -\x33\0\x4c\x42\x42\x30\x5f\x31\x33\0\x78\x64\x70\x5f\x72\x65\x63\x65\x69\x76\ -\x65\x2e\x5f\x5f\x5f\x5f\x66\x6d\x74\x2e\x33\0\x78\x64\x70\x5f\x72\x65\x63\x65\ -\x69\x76\x65\x2e\x5f\x5f\x5f\x5f\x66\x6d\x74\x2e\x32\0\x4c\x42\x42\x30\x5f\x32\ -\x31\0\x4c\x42\x42\x30\x5f\x31\x31\0\x78\x64\x70\x5f\x72\x65\x63\x65\x69\x76\ -\x65\x2e\x5f\x5f\x5f\x5f\x66\x6d\x74\x2e\x31\0\x4c\x42\x42\x30\x5f\x32\x30\0\0\ +\x7a\x65\x6f\x66\x28\x73\x74\x72\x75\x63\x74\x20\x65\x74\x68\x68\x64\x72\x29\ +\x20\x3e\x20\x64\x61\x74\x61\x5f\x65\x6e\x64\x29\x7b\0\x20\x20\x20\x20\x69\x66\ +\x28\x65\x74\x68\x65\x72\x6e\x65\x74\x5f\x68\x65\x61\x64\x65\x72\x5f\x62\x6f\ +\x75\x6e\x64\x5f\x63\x68\x65\x63\x6b\x28\x65\x74\x68\x2c\x20\x64\x61\x74\x61\ +\x5f\x65\x6e\x64\x29\x3c\x30\x29\x7b\0\x20\x20\x20\x20\x20\x20\x20\x20\x62\x70\ +\x66\x5f\x70\x72\x69\x6e\x74\x6b\x28\x22\x42\x6f\x75\x6e\x64\x20\x63\x68\x65\ +\x63\x6b\x20\x66\x61\x69\x6c\x20\x41\x22\x29\x3b\0\x20\x20\x20\x20\x69\x66\x20\ +\x28\x28\x76\x6f\x69\x64\x20\x2a\x29\x69\x70\x20\x2b\x20\x73\x69\x7a\x65\x6f\ +\x66\x28\x2a\x69\x70\x29\x20\x3e\x20\x64\x61\x74\x61\x5f\x65\x6e\x64\x29\x7b\0\ +\x20\x20\x20\x20\x69\x66\x20\x28\x69\x70\x5f\x68\x65\x61\x64\x65\x72\x5f\x62\ +\x6f\x75\x6e\x64\x5f\x63\x68\x65\x63\x6b\x28\x69\x70\x2c\x20\x64\x61\x74\x61\ +\x5f\x65\x6e\x64\x29\x3c\x30\x29\x7b\0\x20\x20\x20\x20\x20\x20\x20\x20\x62\x70\ +\x66\x5f\x70\x72\x69\x6e\x74\x6b\x28\x22\x42\x22\x29\x3b\0\x20\x20\x20\x20\x73\ +\x77\x69\x74\x63\x68\x28\x69\x70\x2d\x3e\x70\x72\x6f\x74\x6f\x63\x6f\x6c\x29\ +\x7b\0\x20\x20\x20\x20\x69\x66\x20\x28\x67\x65\x74\x5f\x70\x72\x6f\x74\x6f\x63\ +\x6f\x6c\x28\x64\x61\x74\x61\x29\x20\x21\x3d\x20\x49\x50\x50\x52\x4f\x54\x4f\ +\x5f\x54\x43\x50\x29\x7b\0\x20\x20\x20\x20\x20\x20\x20\x20\x62\x70\x66\x5f\x70\ +\x72\x69\x6e\x74\x6b\x28\x22\x43\x22\x29\x3b\0\x20\x20\x20\x20\x69\x66\x20\x28\ +\x28\x76\x6f\x69\x64\x20\x2a\x29\x74\x63\x70\x20\x2b\x20\x73\x69\x7a\x65\x6f\ +\x66\x28\x2a\x74\x63\x70\x29\x20\x3e\x20\x64\x61\x74\x61\x5f\x65\x6e\x64\x29\ +\x7b\0\x20\x20\x20\x20\x69\x66\x20\x28\x74\x63\x70\x5f\x68\x65\x61\x64\x65\x72\ +\x5f\x62\x6f\x75\x6e\x64\x5f\x63\x68\x65\x63\x6b\x28\x74\x63\x70\x2c\x20\x64\ +\x61\x74\x61\x5f\x65\x6e\x64\x29\x29\x7b\0\x20\x20\x20\x20\x20\x20\x20\x20\x62\ +\x70\x66\x5f\x70\x72\x69\x6e\x74\x6b\x28\x22\x44\x22\x29\x3b\0\x20\x20\x20\x20\ +\x69\x66\x20\x28\x74\x63\x70\x2d\x3e\x64\x65\x73\x74\x20\x21\x3d\x20\x6e\x74\ +\x6f\x68\x73\x28\x39\x30\x30\x30\x29\x29\x7b\0\x20\x20\x20\x20\x20\x20\x20\x20\ +\x62\x70\x66\x5f\x70\x72\x69\x6e\x74\x6b\x28\x22\x45\x22\x29\x3b\0\x20\x20\x20\ +\x20\x70\x61\x79\x6c\x6f\x61\x64\x5f\x73\x69\x7a\x65\x20\x3d\x20\x6e\x74\x6f\ +\x68\x73\x28\x69\x70\x2d\x3e\x74\x6f\x74\x5f\x6c\x65\x6e\x29\x20\x2d\x20\x28\ +\x74\x63\x70\x2d\x3e\x64\x6f\x66\x66\x20\x2a\x20\x34\x29\x20\x2d\x20\x28\x69\ +\x70\x2d\x3e\x69\x68\x6c\x20\x2a\x20\x34\x29\x3b\0\x20\x20\x20\x20\x69\x66\x20\ +\x28\x70\x61\x79\x6c\x6f\x61\x64\x5f\x73\x69\x7a\x65\x20\x21\x3d\x20\x73\x69\ +\x7a\x65\x6f\x66\x28\x6d\x61\x74\x63\x68\x5f\x70\x61\x74\x74\x65\x72\x6e\x29\ +\x20\x2d\x20\x31\x29\x20\x7b\0\x20\x20\x20\x20\x20\x20\x20\x20\x62\x70\x66\x5f\ +\x70\x72\x69\x6e\x74\x6b\x28\x22\x46\x22\x29\x3b\0\x20\x20\x20\x20\x69\x66\x20\ +\x28\x28\x76\x6f\x69\x64\x20\x2a\x29\x70\x61\x79\x6c\x6f\x61\x64\x20\x2b\x20\ +\x70\x61\x79\x6c\x6f\x61\x64\x5f\x73\x69\x7a\x65\x20\x3e\x20\x64\x61\x74\x61\ +\x5f\x65\x6e\x64\x29\x7b\0\x20\x20\x20\x20\x20\x20\x20\x20\x62\x70\x66\x5f\x70\ +\x72\x69\x6e\x74\x6b\x28\x22\x47\x22\x29\x3b\0\x20\x20\x20\x20\x62\x70\x66\x5f\ +\x70\x72\x69\x6e\x74\x6b\x28\x22\x52\x65\x63\x65\x69\x76\x65\x64\x20\x76\x61\ +\x6c\x69\x64\x20\x54\x43\x50\x20\x70\x61\x63\x6b\x65\x74\x20\x77\x69\x74\x68\ +\x20\x70\x61\x79\x6c\x6f\x61\x64\x20\x25\x73\x20\x6f\x66\x20\x73\x69\x7a\x65\ +\x20\x25\x69\x5c\x6e\x22\x2c\x20\x70\x61\x79\x6c\x6f\x61\x64\x2c\x20\x70\x61\ +\x79\x6c\x6f\x61\x64\x5f\x73\x69\x7a\x65\x29\x3b\0\x20\x20\x20\x20\x20\x20\x20\ +\x20\x69\x66\x20\x28\x70\x61\x79\x6c\x6f\x61\x64\x5b\x69\x5d\x20\x21\x3d\x20\ +\x6d\x61\x74\x63\x68\x5f\x70\x61\x74\x74\x65\x72\x6e\x5b\x69\x5d\x29\x7b\0\x20\ +\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x62\x70\x66\x5f\x70\x72\x69\x6e\ +\x74\x6b\x28\x22\x48\x22\x29\x3b\0\x7d\0\x20\x20\x20\x20\x62\x70\x66\x5f\x70\ +\x72\x69\x6e\x74\x6b\x28\x22\x42\x50\x46\x20\x66\x69\x6e\x69\x73\x68\x65\x64\ +\x5c\x6e\x20\x22\x29\x3b\0\x20\x20\x20\x20\x70\x61\x79\x6c\x6f\x61\x64\x5b\x31\ +\x5d\x20\x3d\x20\x27\x62\x27\x3b\0\x63\x68\x61\x72\0\x5f\x5f\x41\x52\x52\x41\ +\x59\x5f\x53\x49\x5a\x45\x5f\x54\x59\x50\x45\x5f\x5f\0\x4c\x49\x43\x45\x4e\x53\ +\x45\0\x78\x64\x70\x5f\x72\x65\x63\x65\x69\x76\x65\x2e\x5f\x5f\x5f\x5f\x66\x6d\ +\x74\0\x78\x64\x70\x5f\x72\x65\x63\x65\x69\x76\x65\x2e\x5f\x5f\x5f\x5f\x66\x6d\ +\x74\x2e\x31\0\x78\x64\x70\x5f\x72\x65\x63\x65\x69\x76\x65\x2e\x5f\x5f\x5f\x5f\ +\x66\x6d\x74\x2e\x32\0\x78\x64\x70\x5f\x72\x65\x63\x65\x69\x76\x65\x2e\x5f\x5f\ +\x5f\x5f\x66\x6d\x74\x2e\x33\0\x78\x64\x70\x5f\x72\x65\x63\x65\x69\x76\x65\x2e\ +\x5f\x5f\x5f\x5f\x66\x6d\x74\x2e\x34\0\x78\x64\x70\x5f\x72\x65\x63\x65\x69\x76\ +\x65\x2e\x5f\x5f\x5f\x5f\x66\x6d\x74\x2e\x35\0\x78\x64\x70\x5f\x72\x65\x63\x65\ +\x69\x76\x65\x2e\x5f\x5f\x5f\x5f\x66\x6d\x74\x2e\x36\0\x78\x64\x70\x5f\x72\x65\ +\x63\x65\x69\x76\x65\x2e\x5f\x5f\x5f\x5f\x66\x6d\x74\x2e\x37\0\x78\x64\x70\x5f\ +\x72\x65\x63\x65\x69\x76\x65\x2e\x5f\x5f\x5f\x5f\x66\x6d\x74\x2e\x38\0\x78\x64\ +\x70\x5f\x72\x65\x63\x65\x69\x76\x65\x2e\x5f\x5f\x5f\x5f\x66\x6d\x74\x2e\x39\0\ +\x2e\x72\x6f\x64\x61\x74\x61\0\x6c\x69\x63\x65\x6e\x73\x65\0\x9f\xeb\x01\0\x20\ +\0\0\0\0\0\0\0\x14\0\0\0\x14\0\0\0\xcc\x02\0\0\xe0\x02\0\0\0\0\0\0\x08\0\0\0\ +\x75\0\0\0\x01\0\0\0\0\0\0\0\x07\0\0\0\x10\0\0\0\x75\0\0\0\x2c\0\0\0\0\0\0\0\ +\x7e\0\0\0\xaa\0\0\0\x29\xe4\0\0\x08\0\0\0\x7e\0\0\0\xdc\0\0\0\x25\xe8\0\0\x10\ +\0\0\0\x06\x01\0\0\x44\x01\0\0\x15\x28\0\0\x20\0\0\0\x7e\0\0\0\x7d\x01\0\0\x08\ +\x10\x01\0\x28\0\0\0\x7e\0\0\0\xb3\x01\0\0\x09\x14\x01\0\x48\0\0\0\x06\x01\0\0\ +\xdd\x01\0\0\x14\x44\0\0\x58\0\0\0\x7e\0\0\0\x0b\x02\0\0\x09\x28\x01\0\x60\0\0\ +\0\x7e\0\0\0\x3b\x02\0\0\x09\x2c\x01\0\x78\0\0\0\x06\x01\0\0\x54\x02\0\0\x10\ +\x94\0\0\x80\0\0\0\x7e\0\0\0\x6e\x02\0\0\x09\x3c\x01\0\x88\0\0\0\x7e\0\0\0\x9a\ +\x02\0\0\x09\x40\x01\0\xa0\0\0\0\x06\x01\0\0\xb3\x02\0\0\x15\x60\0\0\xb0\0\0\0\ +\x7e\0\0\0\xe3\x02\0\0\x09\x54\x01\0\xb8\0\0\0\x7e\0\0\0\x13\x03\0\0\x09\x58\ +\x01\0\xd0\0\0\0\x7e\0\0\0\x2c\x03\0\0\x0e\x68\x01\0\xd8\0\0\0\x7e\0\0\0\x2c\ +\x03\0\0\x09\x68\x01\0\xe0\0\0\0\x7e\0\0\0\x4f\x03\0\0\x09\x6c\x01\0\xf8\0\0\0\ +\x7e\0\0\0\x68\x03\0\0\x2f\x7c\x01\0\0\x01\0\0\x7e\0\0\0\x68\x03\0\0\x34\x7c\ +\x01\0\x10\x01\0\0\x7e\0\0\0\x68\x03\0\0\x14\x7c\x01\0\x20\x01\0\0\x7e\0\0\0\ +\x68\x03\0\0\x27\x7c\x01\0\x28\x01\0\0\x7e\0\0\0\x68\x03\0\0\x40\x7c\x01\0\x30\ +\x01\0\0\x7e\0\0\0\x68\x03\0\0\x44\x7c\x01\0\x40\x01\0\0\x7e\0\0\0\x68\x03\0\0\ +\x39\x7c\x01\0\x48\x01\0\0\x7e\0\0\0\xb1\x03\0\0\x09\x8c\x01\0\x50\x01\0\0\x7e\ +\0\0\0\xe6\x03\0\0\x09\x90\x01\0\x68\x01\0\0\x7e\0\0\0\0\0\0\0\0\0\0\0\x70\x01\ +\0\0\x7e\0\0\0\xff\x03\0\0\x19\xa4\x01\0\x80\x01\0\0\x7e\0\0\0\xff\x03\0\0\x09\ +\xa4\x01\0\x88\x01\0\0\x7e\0\0\0\x33\x04\0\0\x09\xa8\x01\0\xa0\x01\0\0\x7e\0\0\ +\0\x4c\x04\0\0\x05\xb8\x01\0\xd0\x01\0\0\x7e\0\0\0\xad\x04\0\0\x0d\xc4\x01\0\ +\xd8\x01\0\0\x7e\0\0\0\xad\x04\0\0\x0d\xc4\x01\0\xe0\x01\0\0\x7e\0\0\0\xad\x04\ +\0\0\x0d\xc4\x01\0\xe8\x01\0\0\x7e\0\0\0\xad\x04\0\0\x0d\xc4\x01\0\xf0\x01\0\0\ +\x7e\0\0\0\xda\x04\0\0\x0d\xc8\x01\0\0\x02\0\0\x7e\0\0\0\0\0\0\0\0\0\0\0\x10\ +\x02\0\0\x7e\0\0\0\xf7\x04\0\0\x01\x10\x02\0\x20\x02\0\0\x7e\0\0\0\xad\x04\0\0\ +\x0d\xc4\x01\0\x28\x02\0\0\x7e\0\0\0\xad\x04\0\0\x0d\xc4\x01\0\x30\x02\0\0\x7e\ +\0\0\0\xad\x04\0\0\x0d\xc4\x01\0\x38\x02\0\0\x7e\0\0\0\xad\x04\0\0\x0d\xc4\x01\ +\0\x40\x02\0\0\x7e\0\0\0\xf9\x04\0\0\x05\xdc\x01\0\x68\x02\0\0\x7e\0\0\0\x1c\ +\x05\0\0\x10\xe0\x01\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\ +\x9a\x01\0\0\0\0\x02\0\xf8\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x5e\x01\0\0\0\0\x02\0\ +\x68\x01\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x23\x01\0\0\0\0\x02\0\xa0\x01\0\0\0\0\0\0\ +\0\0\0\0\0\0\0\0\xe8\0\0\0\0\0\x02\0\xf0\x01\0\0\0\0\0\0\0\0\0\0\0\0\0\0\xc3\0\ +\0\0\0\0\x02\0\0\x02\0\0\0\0\0\0\0\0\0\0\0\0\0\0\xa5\0\0\0\0\0\x02\0\x08\x02\0\ +\0\0\0\0\0\0\0\0\0\0\0\0\0\x80\0\0\0\0\0\x02\0\x10\x02\0\0\0\0\0\0\0\0\0\0\0\0\ +\0\0\x57\x01\0\0\0\0\x02\0\x48\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x92\x01\0\0\0\0\ +\x02\0\x20\x02\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x1c\x01\0\0\0\0\x02\0\x78\0\0\0\0\0\ +\0\0\0\0\0\0\0\0\0\0\xe1\0\0\0\0\0\x02\0\xa0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x9e\ +\0\0\0\0\0\x02\0\xd0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x14\0\0\0\x01\0\x04\0\0\0\0\ +\0\0\0\0\0\x13\0\0\0\0\0\0\0\x7c\x01\0\0\x01\0\x04\0\x13\0\0\0\0\0\0\0\x02\0\0\ +\0\0\0\0\0\x66\x01\0\0\x01\0\x04\0\x15\0\0\0\0\0\0\0\x02\0\0\0\0\0\0\0\x41\x01\ +\0\0\x01\0\x04\0\x17\0\0\0\0\0\0\0\x02\0\0\0\0\0\0\0\x2b\x01\0\0\x01\0\x04\0\ +\x19\0\0\0\0\0\0\0\x02\0\0\0\0\0\0\0\x06\x01\0\0\x01\0\x04\0\x1b\0\0\0\0\0\0\0\ +\x02\0\0\0\0\0\0\0\xf0\0\0\0\x01\0\x04\0\x1d\0\0\0\0\0\0\0\x02\0\0\0\0\0\0\0\ +\xcb\0\0\0\x01\0\x04\0\x1f\0\0\0\0\0\0\0\x36\0\0\0\0\0\0\0\xad\0\0\0\x01\0\x04\ +\0\x55\0\0\0\0\0\0\0\x02\0\0\0\0\0\0\0\x88\0\0\0\x01\0\x04\0\x57\0\0\0\0\0\0\0\ +\x0f\0\0\0\0\0\0\0\0\0\0\0\x03\0\x02\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\ +\x03\0\x04\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x78\0\0\0\x11\0\x03\0\0\0\0\0\0\0\ +\0\0\x0d\0\0\0\0\0\0\0\x43\0\0\0\x12\0\x02\0\0\0\0\0\0\0\0\0\x78\x02\0\0\0\0\0\ +\0\x28\0\0\0\0\0\0\0\x01\0\0\0\x18\0\0\0\x60\0\0\0\0\0\0\0\x01\0\0\0\x18\0\0\0\ +\x88\0\0\0\0\0\0\0\x01\0\0\0\x18\0\0\0\xb8\0\0\0\0\0\0\0\x01\0\0\0\x18\0\0\0\ +\xe0\0\0\0\0\0\0\0\x01\0\0\0\x18\0\0\0\x50\x01\0\0\0\0\0\0\x01\0\0\0\x18\0\0\0\ +\x88\x01\0\0\0\0\0\0\x01\0\0\0\x18\0\0\0\xa0\x01\0\0\0\0\0\0\x01\0\0\0\x18\0\0\ +\0\xf0\x01\0\0\0\0\0\0\x01\0\0\0\x18\0\0\0\x40\x02\0\0\0\0\0\0\x01\0\0\0\x18\0\ +\0\0\x28\x02\0\0\0\0\0\0\x0a\0\0\0\x18\0\0\0\x34\x02\0\0\0\0\0\0\x0a\0\0\0\x18\ +\0\0\0\x40\x02\0\0\0\0\0\0\x0a\0\0\0\x18\0\0\0\x4c\x02\0\0\0\0\0\0\x0a\0\0\0\ +\x18\0\0\0\x58\x02\0\0\0\0\0\0\x0a\0\0\0\x18\0\0\0\x64\x02\0\0\0\0\0\0\x0a\0\0\ +\0\x18\0\0\0\x70\x02\0\0\0\0\0\0\x0a\0\0\0\x18\0\0\0\x7c\x02\0\0\0\0\0\0\x0a\0\ +\0\0\x18\0\0\0\x88\x02\0\0\0\0\0\0\x0a\0\0\0\x18\0\0\0\x94\x02\0\0\0\0\0\0\x0a\ +\0\0\0\x18\0\0\0\xac\x02\0\0\0\0\0\0\0\0\0\0\x19\0\0\0\x2c\0\0\0\0\0\0\0\0\0\0\ +\0\x17\0\0\0\x40\0\0\0\0\0\0\0\0\0\0\0\x17\0\0\0\x50\0\0\0\0\0\0\0\0\0\0\0\x17\ +\0\0\0\x60\0\0\0\0\0\0\0\0\0\0\0\x17\0\0\0\x70\0\0\0\0\0\0\0\0\0\0\0\x17\0\0\0\ +\x80\0\0\0\0\0\0\0\0\0\0\0\x17\0\0\0\x90\0\0\0\0\0\0\0\0\0\0\0\x17\0\0\0\xa0\0\ +\0\0\0\0\0\0\0\0\0\0\x17\0\0\0\xb0\0\0\0\0\0\0\0\0\0\0\0\x17\0\0\0\xc0\0\0\0\0\ +\0\0\0\0\0\0\0\x17\0\0\0\xd0\0\0\0\0\0\0\0\0\0\0\0\x17\0\0\0\xe0\0\0\0\0\0\0\0\ +\0\0\0\0\x17\0\0\0\xf0\0\0\0\0\0\0\0\0\0\0\0\x17\0\0\0\0\x01\0\0\0\0\0\0\0\0\0\ +\0\x17\0\0\0\x10\x01\0\0\0\0\0\0\0\0\0\0\x17\0\0\0\x20\x01\0\0\0\0\0\0\0\0\0\0\ +\x17\0\0\0\x30\x01\0\0\0\0\0\0\0\0\0\0\x17\0\0\0\x40\x01\0\0\0\0\0\0\0\0\0\0\ +\x17\0\0\0\x50\x01\0\0\0\0\0\0\0\0\0\0\x17\0\0\0\x60\x01\0\0\0\0\0\0\0\0\0\0\ +\x17\0\0\0\x70\x01\0\0\0\0\0\0\0\0\0\0\x17\0\0\0\x80\x01\0\0\0\0\0\0\0\0\0\0\ +\x17\0\0\0\x90\x01\0\0\0\0\0\0\0\0\0\0\x17\0\0\0\xa0\x01\0\0\0\0\0\0\0\0\0\0\ +\x17\0\0\0\xb0\x01\0\0\0\0\0\0\0\0\0\0\x17\0\0\0\xc0\x01\0\0\0\0\0\0\0\0\0\0\ +\x17\0\0\0\xd0\x01\0\0\0\0\0\0\0\0\0\0\x17\0\0\0\xe0\x01\0\0\0\0\0\0\0\0\0\0\ +\x17\0\0\0\xf0\x01\0\0\0\0\0\0\0\0\0\0\x17\0\0\0\0\x02\0\0\0\0\0\0\0\0\0\0\x17\ +\0\0\0\x10\x02\0\0\0\0\0\0\0\0\0\0\x17\0\0\0\x20\x02\0\0\0\0\0\0\0\0\0\0\x17\0\ +\0\0\x30\x02\0\0\0\0\0\0\0\0\0\0\x17\0\0\0\x40\x02\0\0\0\0\0\0\0\0\0\0\x17\0\0\ +\0\x50\x02\0\0\0\0\0\0\0\0\0\0\x17\0\0\0\x60\x02\0\0\0\0\0\0\0\0\0\0\x17\0\0\0\ +\x70\x02\0\0\0\0\0\0\0\0\0\0\x17\0\0\0\x80\x02\0\0\0\0\0\0\0\0\0\0\x17\0\0\0\ +\x90\x02\0\0\0\0\0\0\0\0\0\0\x17\0\0\0\xa0\x02\0\0\0\0\0\0\0\0\0\0\x17\0\0\0\ +\xb0\x02\0\0\0\0\0\0\0\0\0\0\x17\0\0\0\xc0\x02\0\0\0\0\0\0\0\0\0\0\x17\0\0\0\ +\xd0\x02\0\0\0\0\0\0\0\0\0\0\x17\0\0\0\xe0\x02\0\0\0\0\0\0\0\0\0\0\x17\0\0\0\ +\xf0\x02\0\0\0\0\0\0\0\0\0\0\x17\0\0\0\x20\x1f\x0e\x0f\x10\x11\x12\x13\x14\x15\ +\x16\x17\0\x2e\x74\x65\x78\x74\0\x2e\x72\x65\x6c\x2e\x42\x54\x46\x2e\x65\x78\ +\x74\0\x78\x64\x70\x5f\x72\x65\x63\x65\x69\x76\x65\x2e\x5f\x5f\x5f\x5f\x66\x6d\ +\x74\0\x2e\x72\x65\x6c\x78\x64\x70\x5f\x70\x72\x6f\x67\0\x2e\x6c\x6c\x76\x6d\ +\x5f\x61\x64\x64\x72\x73\x69\x67\0\x78\x64\x70\x5f\x72\x65\x63\x65\x69\x76\x65\ +\0\x6c\x69\x63\x65\x6e\x73\x65\0\x2e\x73\x74\x72\x74\x61\x62\0\x2e\x73\x79\x6d\ +\x74\x61\x62\0\x2e\x72\x6f\x64\x61\x74\x61\0\x2e\x72\x65\x6c\x2e\x42\x54\x46\0\ +\x4c\x49\x43\x45\x4e\x53\x45\0\x4c\x42\x42\x30\x5f\x31\x39\0\x78\x64\x70\x5f\ +\x72\x65\x63\x65\x69\x76\x65\x2e\x5f\x5f\x5f\x5f\x66\x6d\x74\x2e\x39\0\x4c\x42\ +\x42\x30\x5f\x38\0\x4c\x42\x42\x30\x5f\x31\x38\0\x78\x64\x70\x5f\x72\x65\x63\ +\x65\x69\x76\x65\x2e\x5f\x5f\x5f\x5f\x66\x6d\x74\x2e\x38\0\x4c\x42\x42\x30\x5f\ +\x31\x37\0\x78\x64\x70\x5f\x72\x65\x63\x65\x69\x76\x65\x2e\x5f\x5f\x5f\x5f\x66\ +\x6d\x74\x2e\x37\0\x4c\x42\x42\x30\x5f\x36\0\x4c\x42\x42\x30\x5f\x31\x36\0\x78\ +\x64\x70\x5f\x72\x65\x63\x65\x69\x76\x65\x2e\x5f\x5f\x5f\x5f\x66\x6d\x74\x2e\ +\x36\0\x78\x64\x70\x5f\x72\x65\x63\x65\x69\x76\x65\x2e\x5f\x5f\x5f\x5f\x66\x6d\ +\x74\x2e\x35\0\x4c\x42\x42\x30\x5f\x34\0\x4c\x42\x42\x30\x5f\x31\x34\0\x78\x64\ +\x70\x5f\x72\x65\x63\x65\x69\x76\x65\x2e\x5f\x5f\x5f\x5f\x66\x6d\x74\x2e\x34\0\ +\x78\x64\x70\x5f\x72\x65\x63\x65\x69\x76\x65\x2e\x5f\x5f\x5f\x5f\x66\x6d\x74\ +\x2e\x33\0\x4c\x42\x42\x30\x5f\x32\0\x4c\x42\x42\x30\x5f\x31\x32\0\x78\x64\x70\ +\x5f\x72\x65\x63\x65\x69\x76\x65\x2e\x5f\x5f\x5f\x5f\x66\x6d\x74\x2e\x32\0\x78\ +\x64\x70\x5f\x72\x65\x63\x65\x69\x76\x65\x2e\x5f\x5f\x5f\x5f\x66\x6d\x74\x2e\ +\x31\0\x4c\x42\x42\x30\x5f\x32\x30\0\x4c\x42\x42\x30\x5f\x31\x30\0\0\0\0\0\0\0\ \0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\ -\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x01\0\0\0\x01\0\0\0\x06\0\ -\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x40\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\ -\x04\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x2c\0\0\0\x01\0\0\0\x06\0\0\0\0\0\0\0\0\0\0\ -\0\0\0\0\0\x40\0\0\0\0\0\0\0\x80\x02\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x08\0\0\0\0\0\ -\0\0\0\0\0\0\0\0\0\0\x4f\0\0\0\x01\0\0\0\x03\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\xc0\ -\x02\0\0\0\0\0\0\x0d\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x01\0\0\0\0\0\0\0\0\0\0\0\0\ -\0\0\0\x67\0\0\0\x01\0\0\0\x02\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\xcd\x02\0\0\0\0\0\ -\0\x66\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x01\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x73\0\0\ -\0\x01\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x33\x03\0\0\0\0\0\0\x2a\x08\0\0\0\ -\0\0\0\0\0\0\0\0\0\0\0\x01\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x0b\0\0\0\x01\0\0\0\0\ -\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x5d\x0b\0\0\0\0\0\0\x10\x03\0\0\0\0\0\0\0\0\0\0\ -\0\0\0\0\x01\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x5f\0\0\0\x02\0\0\0\0\0\0\0\0\0\0\0\ -\0\0\0\0\0\0\0\0\x70\x0e\0\0\0\0\0\0\x88\x02\0\0\0\0\0\0\x0c\0\0\0\x19\0\0\0\ -\x08\0\0\0\0\0\0\0\x18\0\0\0\0\0\0\0\x28\0\0\0\x09\0\0\0\0\0\0\0\0\0\0\0\0\0\0\ -\0\0\0\0\0\xf8\x10\0\0\0\0\0\0\xa0\0\0\0\0\0\0\0\x07\0\0\0\x02\0\0\0\x08\0\0\0\ -\0\0\0\0\x10\0\0\0\0\0\0\0\x6f\0\0\0\x09\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\ -\x98\x11\0\0\0\0\0\0\xb0\0\0\0\0\0\0\0\x07\0\0\0\x05\0\0\0\x08\0\0\0\0\0\0\0\ -\x10\0\0\0\0\0\0\0\x07\0\0\0\x09\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x48\x12\ -\0\0\0\0\0\0\xe0\x02\0\0\0\0\0\0\x07\0\0\0\x06\0\0\0\x08\0\0\0\0\0\0\0\x10\0\0\ -\0\0\0\0\0\x35\0\0\0\x03\x4c\xff\x6f\0\0\0\x80\0\0\0\0\0\0\0\0\0\0\0\0\x28\x15\ -\0\0\0\0\0\0\x0c\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x01\0\0\0\0\0\0\0\0\0\0\0\0\0\0\ -\0\x57\0\0\0\x03\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x34\x15\0\0\0\0\0\0\xa2\ -\x01\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x01\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"; +\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x01\0\0\0\x01\0\0\0\x06\0\0\0\0\0\0\ +\0\0\0\0\0\0\0\0\0\x40\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x04\0\0\0\ +\0\0\0\0\0\0\0\0\0\0\0\0\x2c\0\0\0\x01\0\0\0\x06\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\ +\x40\0\0\0\0\0\0\0\x78\x02\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x08\0\0\0\0\0\0\0\0\0\0\ +\0\0\0\0\0\x4f\0\0\0\x01\0\0\0\x03\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\xb8\x02\0\0\0\ +\0\0\0\x0d\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x01\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x67\ +\0\0\0\x01\0\0\0\x02\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\xc5\x02\0\0\0\0\0\0\x66\0\0\ +\0\0\0\0\0\0\0\0\0\0\0\0\0\x01\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x73\0\0\0\x01\0\0\ +\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x2b\x03\0\0\0\0\0\0\xf1\x08\0\0\0\0\0\0\0\0\ +\0\0\0\0\0\0\x01\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x0b\0\0\0\x01\0\0\0\0\0\0\0\0\0\ +\0\0\0\0\0\0\0\0\0\0\x1c\x0c\0\0\0\0\0\0\0\x03\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x01\ +\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x5f\0\0\0\x02\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\ +\0\0\x20\x0f\0\0\0\0\0\0\x88\x02\0\0\0\0\0\0\x0c\0\0\0\x19\0\0\0\x08\0\0\0\0\0\ +\0\0\x18\0\0\0\0\0\0\0\x28\0\0\0\x09\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\xa8\ +\x11\0\0\0\0\0\0\xa0\0\0\0\0\0\0\0\x07\0\0\0\x02\0\0\0\x08\0\0\0\0\0\0\0\x10\0\ +\0\0\0\0\0\0\x6f\0\0\0\x09\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x48\x12\0\0\0\ +\0\0\0\xb0\0\0\0\0\0\0\0\x07\0\0\0\x05\0\0\0\x08\0\0\0\0\0\0\0\x10\0\0\0\0\0\0\ +\0\x07\0\0\0\x09\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\xf8\x12\0\0\0\0\0\0\xd0\ +\x02\0\0\0\0\0\0\x07\0\0\0\x06\0\0\0\x08\0\0\0\0\0\0\0\x10\0\0\0\0\0\0\0\x35\0\ +\0\0\x03\x4c\xff\x6f\0\0\0\x80\0\0\0\0\0\0\0\0\0\0\0\0\xc8\x15\0\0\0\0\0\0\x0c\ +\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x01\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x57\0\0\0\x03\ +\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\xd4\x15\0\0\0\0\0\0\xa2\x01\0\0\0\0\0\0\ +\0\0\0\0\0\0\0\0\x01\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"; return 0; err: diff --git a/src/bin/xdp_filter b/src/bin/xdp_filter index 5f136e8d79e995325e5e0ee2487b3f8aebd9e4d5..e9b8fd1dff879d89cf32ab78f2906afc59b00e3f 100755 GIT binary patch delta 38154 zcmeF4`F~8;AOGi^JBbO|$R3l8$U?-vwLzjO!PsL@34$O94Yh*vwg zq0B1Zi>btwpVO1IU=19XN=EN{$}9L&$CyW_ffidCN+9g>x|5D<5@k!SdvX`21OR zbLqjZ%VS(xSVfzokC%O1T;yz*0Cq?I)ujb1m91P`u*Y&Ie7=$=xwhboxxCr6J3B4k zbM3*CxZKpOJ3ArIaO=T0aru~AcdP1@^_Ne&xyat`0jyH)>E6T2LNetf+bGX=58yVE zeA~Udm5W(nFVAS`B8N5%;GU8^xnXy!0J9?As3?S@tt7vNqO)01XjDXN19%TfUZL%7 zr86s9%4@YQayb-(B-!1gyVY>BVvSLe>|t*;#w^J*O0prDYL=86CB+{0?3(=CqXnNU z$&EaNd5R1e2j%W5SVTue-13NkiQ3H3;8~<#X@e-q&wR!4{y?f9g|b>c~L%!&ztf? zeEuQ3`L*DZrQFLen7dfY^MKeGc@MBLM!pRMSju(%gLyYg`2%3Er92skvy?XjpIgco zfON~8xBkU}?1=o^fL?)@Gr8)BX!xc3UMWh%s?K*IC_V6xxVLzK`-s$!%W?ZuP9Esw zQTEPyy3yL=(R+*gMvG(bEIOMk^50wJ2@AeFQ$9cNAg_}tCk^_M&)Fq+iFD(syX4`K zUHI5t@}@{1K4_Pm8`+7s-X*_|{FGggrws1Ga^yXOyYjDg%8v(sp42a!tL*ej#5nb_ z2v*odDW0$fX?z|msZQH@r5O7${I)y!fBaG{f74oi$6Ee>zy0s?532o1A_hcoxmsZM zAFJihsO4W(%YUwxKc|*|V=ez;vp=jlhZ|}cB-QdStmUsG{Gv8U1ozo3 zw;jEx?)a~{>VyT7Ge}-EA~2_PbSz`P$OFbq;xoU>$sN;A;;mSY&G>vaaK@J+5{p>^ zcHxB)i_d5f=QMa*<&8wUd$x_M!lE8VS1C$LUc@S=V3U38|JrwXXHVN?|B2VQ*9N(A z;w&D#H76l5P3g=`XlSw<^ZhUbo6(yWD(c6F!sV$eG@D16Fd?i=K8(Prk4lZqeq2ym+QBcU&p& zo_UKmrkur}PGlIZ9w+#-Q?kRXF6>`<;H-`)*p;(d@Xt5MxwC>Bx^FPY)+(>`EPCU^ z4V8+5M&8b6y=*bN9q+XvCuDXw%m&hg|M*UQu9c(P1+)tsit>XA8K z7$I-XX^fm2@cFasJ=d3al;!So8}SfXo;X4KM)pV?f{`sDaW&ttI7hwUCBp#yX5qAYEf*P+x2j##7xK)ckND^>WPMT~PxwN< zpA=AURkB$-;|tj-xvAAK_>uG>tL2E~Z}@~SI124;WQq^BUo9_8Y0m4X$@@}V**W=aiXSrgB&8AWlP1?+;?4tC z$<3F<@^PQZv}7WCDl1C{@VGR2;L=65y+6ZX7MUjovvzK?<$Ft~q8apCrt|q^mPk?O zwAs-Aa|-&@pCXpz*)8d*7;Pu7lyjE_Iyk^8Y)IJPu*ks?sg!z~$LK zO;O3Ehwh_pTH+~P>a)^eClzH$-mKZFw-KMbLT;QI#mBFZ7o~b)=-!(81D~-%{$#}j z_AuwniZP6Rm*bbl87s*NTxG#{msGjsY7ahix!iBHH|*nAJF~;`vek{*_wwG=KD_@j z`O<1Pmkmor*`iex6d~q;=q`wB;}W@Q^=9t4JZJM4tr=IrbWJlftG8=5SpW$N+*|h4)R|%| zr)%;I`BakwDai18w8OB}GbpU(_h9;Q%9Dg}1n)E1Xy~^@9=1M+{Vp$AALg)Qk}+nl zC4lHq7Aq&ozpf9q9xLR=9ww#84jY1a<4JPZhCpj2wpt#VBG2B?jmMOQ2y-e<~(3Q&d#s=V9^> zJ6o|wIZt*z;K45M5Vqi^J@-EC2-ZT8G# zcjf(iy!pZexp0r3cTSK~_hQwOARpZu#HT07f9+k*qX)_hvb5~qoXuHvrO@bjq%<|J z=c-j3kx-ODom|lo?u+(`{6Cz5>UjBsD3MSU$^8=?4W?Dz4+2p0nR3Z@KHgnn6_)!5 zrBj*(+tP`oD5`T9?0bK9FlW;D zjTzTW&sm-0&oFcxKG+YVtL33t?7W&Y(3UGe#YJPMyXUiy~fsc zL=@J;G3ba#>zaCN-L7(EUP~T5NnVgrPaAVy9<<;MHP$of+OD5Bz1KH9%UQVwTU2Ssn+7jm}jaoXK|@C0*` z5@Gc4^}D3nOpphhcIQ6h<*BC|vI05vv=47ELC!j@<+}0mh0}iAcY^%lw1M5rd3NSQ ziMx-@3CbVE_`=R|+Ie^OG-ucO`)X{gR$L0<)1u`3Oa9y@N`8LH7wa77%Ujqk`S9g% z&PU3I%f9TO>{B=&4e0B_#e7__+~~?{K5n?&@TxoCGEDApbrO4!v+b%KLoyEhQpP(B z$=P!4Ah&8CfZn#M-ONZi>Sj+(iNDcTA@94nhkrdNXZS5&&VJ8Xc>5${hvd+rnONNC z6fNbAyyXw??B(72=9Jz+>mATXwz<2O{V8v`>(4Fw$oY3K@)WHnGkV2{(%4bn^QbYma+EJW`ii}fr#ueAu59Du_L$BtKVHD2yUBga0{Mb&^4zkU zjruhZDLMQ1PCGi8{HrSEe8O#GB9B@cQ`9-Ifjsj`8$7!6i5I({bM}cp=lw$EXU|Ua zO}6sE@}7KpS6M07HrZ&)RZH>`oEBH`h*dW6^+Y{btbh>9&3ueLsH5&(zAH4D*wP*KJ#}wbnv%- zd-KmjWbMl!uI?=Ndg;%n)ssI3AWVN*#Tx5b~I>)!k%@l|c*;g#cg-?nmIrK~w>B@)~YYo4l1D=U-7-A%SuPFRI$ zjH-dI@-^k0)r>ku-{&qHGFZF1XRDYhY_M)sbN!(QtQWI-T**W*8w065XFZ&=;nk(S zF5MNbD5JxM=~7=nxkoQ^mdUN|yfxa6_0xx2Fk8%LZWL+BR`JHc^uUr8@x%%`S%+!) zgbKP_hq>{OD(J27x2_;p4d_-u?KP}B%cBJv=IedvwTSD+-#dqovZFk$DkU#r{!!76 zAjI0~2Rf-??(AnO(y$J^(Q9(DVpG`fw8)BidDp3a*8HSh%C~s%sMuNH(G{;K&x-YA zJE(45mh3hUEgFM%voRPdzI=mG(8^@Cmv+=;E!lIrR+k-cKmC#!N4cKomIYvT5?AW4 z$h}K5+ENd>iTQwz)nmi?=9jyitQq59|4lA7ESWd@n>N|7rhIK6{ba*_W^eVfE$hPA z4MN}ln<;eGo^|3*fqGV-VJ@-`(r<6Td>Ho$(*NYZ0vNkYPaWA-KBT#RjT5uu>dO3hXFvS`SEgm$zbRdIWBs^uQ@yu4v*6t80r_j$13uP=tUXu+ z@90TGJXj$A+J_c-FmLYQM>{;&Cp^xRxF-uod_6o_5)byHd{1`1@uwGQh~+QX0Di^(+4_ zo^h)4o3W|>OqorXhxOvyrm97PO6W=xHjz7O=>tDDjVJs|d;C}*-b71p{8%#{swF>v zHh|rsIsR-odrVjTSpxf$dIYdmTw9ms1+ZYQ*3zB;)`UAXpeq3^v~`D@A~L6TfO*M+ zh=M&Zg{|#|Bqcr&r4p*@xzbse`UWbg0euw6eA$l_8;D@rG@!2n(ZqXI(6vAo#3LPu zH)XBZ6>8fQ)feGRLz*(|VQ4{9){8H()t_(5Rx%!7qaPB)x-#dStH$UL0PmyULwlQ} z4a92bMswDf*K?$Qo3jx12Xzc)pYst7C^r~UM_kcA3ubK?pQqOQwq&EY-Nm0xMP+RI zgVnUQHS=QE=s;^EtcNAtZO!_lfwpYJv^FEnrpVC}OB&vWC9@ysb{qDAljfWJ^8gq-nv;+WP8?y*Evt?+cRIci|57QbhFf8 zZ_0x!riz6K{4!l>&wM;Kn$@RjsH0#Hixua|t^-TpVO6xG1B+q5(W4GXMjZp$b!45{ z5$e;CdGN{qQd~!Ls!Q|*z(0CRIUU&)-d;oAotQKGmO6BT_B4&?#QcHJJK@Os7y7;v zhLTpL^rREJp$Rx^Y~%Oo;s+Q$R{TU$KV&^M?S3*!pXrZ(h}bmcr;Xk{Bz0!%`KZ&h zsWbbSUDDs}%w{p(@(B&;ijLRs2_raaM7(=7CM8AKG5$PL70o~bD zK9Li3XT5x;h)T~Zz2=Lp;bNtS-IC5?@xF3!%kb2DD8V#Fya&6h>3-B0S_wVu!J@40 zG#2w%=Z%H>z7eb*(^wr6TALqfOi$({Emd)v+mo&4E%jv8i-k0@&@68q%AM|8SQnfRTu> zXX-74aUo)HnI>Z8kd`ox!-U%Z;U+AuC)jy~i^&T+SEo+K#I^g5UiHS1*`ShwbgT{c zsH8DEHj6JkNVjw>fKNO~yboK;-70BAAN2U+`g48IBsCev2r*VY?8}y09ncyx9&(=M z^<&|D?g7f{$Hq4C-6xXsuup0^N}&-vNX+O1B99*P<{I!AE>*ln-ISt3ZA;O|5(Z{rQ5OZ>`!d%_|;Sp>b!o;@WUIcayqL}?& z>+=S&CQNh67*o4q{gX(HF6?7Xb zAAQVFcAD{a*C=o}o5-?g?Qj;0nda?qmcptiX#{*lR62rrX-@CND021TC3-f3xw739 zFp|Z(heH_l$-|GAiQySF*AqjPsL{w5v}Yt{@H6yqBrDTszBOjCobE)it85=-f5JZ0 zyx3tBeoudY!g}z!<@%6OEMLv%Jl0!|V|y4g=nurOZ#epK|A}mX)rVV+=5c?~o{3Cn z|K}FdptkrY)Ka^Sf01P@OXM^E)ThL=s#yYwc7n`g~lh6qsCZa={*1#3iXF3azUKcYtd4#im^>i_AbpBFrF@qgp zJn45jF_UHS8Fy&vr|btFS42${FpQ=b(c}bH!lxBc|5>aBpL&ND&B7=p-J!;_*+#zU zj{e8l%#-o@x9QGj7(v`_lg%8=NPTZp=p1yF0Y&;*b67jZ?$h46>-9}dYFBi?J>p+&hk+|oB($ch;IR$r0CmP&l}RZ3pWKIOxI)Bm$rtk^2aa|v6< zPVCybgt2-l^HFknSUdU8p#w`XHE-2-UWQQ*iCmhB)NQ9YZ!L! zpXs};VVtvK{m1LrAB?ZKK$uG#@~b{j{TYhh!1~(TUSO(l(fN$0 zEddwk_y*S8Z4sssAxga+mU^f3^z|wQHhAhJslUV!KlvF={*oPL2J#`yAazcYp0L{e z>J&X7%usr=+{oIptMuVUl#HHYHnJ{O^QIe{`{G>MyAf0FfIRwnBWuqC&yd9?md{Sm zrA?SyrseAMH>0}PJu-a7ezKoCzGm{APScfi^y^lvixqmcl^x;(4$;1C>?(IUMvJy%V)Z#j-)_gKa+6+dXM=c~gVcKm zTgWczFYI7e5)V77zrGWF2OaikCcD7+q+PUR4<^~}ddk~_f{r>wFZQrFECEOFMQSV$ zQSx3kn=d^~6?>UC7OrkttTSJDh=ygcp?v&7I*^4iOFl%+_F=4Eb%DNZ@x)^di z$EI4%G&%b*qo<#X&5(3|IyEE8nf#5rP0Fi6FPQ@_0UvpFnZ7EtuC`l=J!N4 zdTE4surzZsvUw0ygF{(lw8*5KH-dt$Uw1{=?qUf=x|;=}?v{5B@u`f2pjZI zZ>8wy&q^E5#N;gADp-o;(5iNIR?^7d(8x|x;&1E+_CVjUh=p3Q4E@|c#7-$$?rGqW` zeFcNz%?+b?2KSjjYQ~qa9r_iFM>0NpA{FB;qxA7aMqfnohBR2>!?<4zeJAlgNujY! zm0IH+uK8#xYa;v4TU)nU{)M&tgKPQw)$-q;@Za$6n*HO%wib=T;zlilE4BOuwfq-q z`OgbK!nyPsM`otiMPaFi!4a#PKce5&ysgh67+}3sD%!-t!(u#sffZPI>R+apAX_F- z8w=jm;rr1{wd8z~-{WDXl4v)60xhxN1AWwZ9@aRXeNy`C_$p@p@5CpR(b@()7+cM}2K-}Q?-|u`;0t-T zVYJMFd+?4UX{Q6<-RR~}W52T<$yB9dhE|D9ym9wh8iQ>h8voKq`WcQqfNRzcHuYE9 z=FB~L`%?W$XYR%Vx)5|Evmx)r?FZ|R zH{@qUGhX6}En|3JI_AlJvAVpA6L>y2lInZ$W;}i{b@9Se+i9g2Pvyz|$l03*qJTra z`5yj3KPvO)AF~J4+J`sg(fw(Z4-Z8@+u{SGGCJ?WeK3JO_Teq~h<5ks6FP|Xs9!==8 z0sJW+>Pr&`f)g9l&_Up5jr2Vt`F_UE>0b@zTE_P19ftDloY(OnJhG~rfC0wBq zBY2tBxQ0gW&_aE`k^D2xSG!aGC)|$*yHoimXpvjo$Ziz+!*OacihHoF)Mpg;=5}s0 z9bUfCRlj-^&SO}C{^)4loAEU+ddo38HeV zEWz?<>OB4ty3c`myfX&lXYr|25e8iGZ&FAx`Zk?;J?>P69@hD?>d8P93bJMcm zB*o81tN4x9&F8*+VI>_A5AC8G^LbkyZl$+QPRfFL*Nt-D8#N@y_s-YTwjfOPIm)H`((!HD@*zf1Tc&M~gLNf&k^S0`!tE_B=-w09Q|=S^BRR&a;epBz8Vv6-fl!;ah>k%=KehVy1won-j?xcUs32@ z98+APyLePj<@zRL0yrD)t6}18sXd19V})WX5$@|P zhI8{hwvZP0&G(_WuQK2F$G!U%lYKPq+nev>OAR{<6XX__-xFMO|H|0Y+k^fH_*ldd;lMJRsZ+^U#+oP zc2Oj{oo=S{6p@qC%X$69{u$C=nLGL*>*XsQav1OYO4utDCHt=?%GDk+#w4~J^S!W zP?!1^VZEgD7jeo_MJ@%H@)sS_|5(6xIPf_xG`5(x*KaN6cRBBDNsAuv{k*jWwJPC$ z4LXREe3gocZ(4f8^|qi%C75&uSf%=i}ZW5!JxpJ2x5sbi*%nK*uCaIDH3*Q5#F0Rgk8Pm1ww8aO^7 z*1MVar<3N5pFSbr(}bC`#wB<|78^5@y8p$uX@%{i_|dWB$Ha`EIeP5$S<_-hkBc2Y zZVIF{|1aL8W23+ijiG+}*`$PVu@E=!5!%5Q2vaS`cX5poY!-r0rrK(LAP0V@Xq774{J;aD$Ff0ukx?Yb0bhHy z8pc%UsYZVg{I*za-m2lZg1^}8?dW5je+@l@2VcQ4>Z>Ef%kuyDTh{V-{IB0j6>1i|5jiMAk(m8jbZh%!y0XyDGifu@ zAyOjhujVz%ERQwvy{55QE=s57RciEbmB?hx>$F)eGF$Wd)+8tYXT1KTWRpiFN}%S2 zbulg+#nu$!ew|tFUCUl;md~kWf6wUWs;%;KO9y10s|xALGw$z(cBEn|waUT#Ky`Q% zsD3$jaSJo6U23VDQJ7GR4lAB+SW8__GoZ%Xxzuvrf-R?`<$QY59CO$KW@9|7a)pbo z|wfx1k{QZR?u4?<`wfyFaa(`z~T|?Cmgz8T|=U+$^{SRNuTXp*KF?S-n zSG*4ENcOL=;%e1Fi0nG3bltkO9Npf8RuuM_I~zaj+nGdd&6>6_Z)V@de-^#3MX;!tA4{(1ukGsODsl1hghK9YyG94#~uXzW|%nx7lu2w&pi*Euwf6cw9 ze+757YKERHuIDtPf_LCrYs#Bq=S+DO*eiM4(W469g=f~MrfOcV z2bT?32zL$3uQE9G=}ILCPWWrO_3+nnNlG{j%O+JR7L!d*+}HFAdA00+vHH21cGdUQ z)UHI>sZ~l)T9uNE`zW}V%c~TXO7B@mIzDPd2@YQp;@>;%r|<7;%B%0snC%5Ks@;tD z&-mg#!|3$wCrFQ^QCpW)DX~a_aN@qEzox8OSCiGx)wHX=H&MTEvebwr6;qW`2)}LONJ{<$30vg+(%ohl-Y30;Z)m9ej$_1PTcWml6E=dvCSRo}8{xbe-in*=gT#< ztXf`eS8Y?2gg`RjMsP(L2xo0}LRJKqUdsttO;^)ye=ri%Tv00E>~WtB3Rf)?^4cyb z0ER*sU*lonUlyh)tvf18B)%%}DLBFGu9;;*UfZ36ZUf}P30?K`x*m!$A8(S+Kwr~k zc2Qa=;UWJO)-EB4DIt(T@R;ez4 zhK?%LHPCkg{xnADC#h5hP&XONj(mes0Q!P$r>ImN!IIBZszfja;f+6UP+o$Wpd*HA z?FHC1z*;s4H<1wZ1QWp57Y)jK@JxY0IS4lR*`QnlW$-1K2|8k0*A*fFF#U=_i2$>} zD6jyG2ji|HVlWZh2&REqU@n*s7J(%WSj&d|Vo)j|NC#UwBH(LC5Lf`t0TZvIgusv+ z1|<*71xtkdra{p-!Ty#(2?DKuMTvlEU;-F*+n{8E2Cx83|IMJ33Kk*Z*my<#Zcvhw zaHG2m10g6zLcpMV2BjlbCQ+acOar6AbTARr-8U#(LF)&24vYg!!7NaNm4~4O2?Di$ z7?f}@4U7k~z!WgJ18xd%6M!wB_7RE@OnhummV*UlC^Ar2Zcxg=wCAXM zca*^2umg);8I)X5_ZB(9T1oe>LCF9^6oXO@MyV>5j#`AnFp+{;5++d4ps7>>JV2|; zBqatn+IpCA!CdeRSYTbLRDfxAl}dys08%(cXsoVl{T@Zm6{0%FWOwih+ zQYirqUYOOr@w^Y719gpH50?4D-Un<_sVoQ6{gR--OJEMM1g7T5Du6QmVt)Ol}bnx*muD)12lBSl0f)F5gr%< z=7DiZxVeR!T<|5R4Z}Lb5B_eIN(xvOUa6FV)*n|Y2CxVW@<&njK*V5B&q`$@7}5&~ z19dt)hm~kSAA|>n^hJ&XVGqWG1~3D(#v11cn54x`0d9i8VlWDP31)$srbqzj4I03< zpcV_D2rvYU0^`60FbmuYmVrmW+yPi1HG_U&rJ@B3zz9$`2=<^h5(#gH{vS6ODTg2p zv<`y75ELzF7>XhTwZl+kU=(-_Ob5%rEKt=P5rK|i0T=*U4@X3x7K{R;zyz=eTmzPY z8K40?(j5KYdIU-Uf&x$zj0B8C0>G@ON+l7@1=oNDU5cCGq!H!@qr~}Ku z7|qK?7(2gT_`WNsg@$5pDv&L@*Rg2P45OFc!=O z6Tt#-4QM?MRU-7@HBcLafWfly$a!l#KLI%g3&7=|^+dD{FcCZmM#Z88!Js(w|Ijvw zU>fQO42nldfJHOV%G)A>PZ1%gO@JH>0*k;X@Ff@rYT6+}&>PGG+k!=)4lDzsLG3J* z5Eulefl*)v7&j{kjQ}_45EO!0Up=sU z2?l+J{tf1WWnkPKbn6aC$Xp~4ECYvuxk>X-w75y1k46X@a$wjA5g$TPf(76lPL3m)) zRWxql2Va6kzn}!VqW@=ILyo$lD8K@+04xT}z?Y!)b<}YviWJm>+8c-njJt&*1{1++ zU;$VL2Hi%&!cbMeA;F-o2zFo;cnu7>gSOQTaxk=85{d>lQ4nZFsKwoDC7@ORpGFEgx&(CJ;fvi#=SySevF7bvF!lU!7|X`U8QvF z4!uv65}AaXTz{;FL0uqL#9$&=1O_$3zN80o25P}Fuq9|6jD3QTx2RIifVnNP$BBS_ zE9`~9L@-MD+hBsBzaLzR-W1~+jXtCWLa0hligI#nqpU~ULD zCcW@rXY47#TrdL6>RP2Ff>EJ}01OI44nbWvB)B&c+5;OPFesu*i38($S1IekEM1jS z3>JVdg}+Z#lH#aC(f37)LF<0lGJ@$~0hrjoN^$K2!$Bx2Fb${i8DQKHln|H>mV*XR z+ZXmjkw7pDi~)1OIbZ>p29}LL#9;bJlvF=33Y(S;+!TF+fCNWXDIxulv(eb(f@NSf zsEbB~U;(HZ0R0#Q0H%+{h6dD)L&8CA40c0cB6tfd096BFk2lmE!JrA)Wr2y{MzA0W zH(9s|iLFvfL9zAs9Rx!h2ZVx&Q?Ne;bEj1)6=2kKw1G(E7+eEJ%}0@f)(apXj0}J= zVD3WX94tsiqXV@mNWc*Iu_;dhqi`&61Wd}sO*w81E3knciioi>P8@~+z%zp1Ko9D+ zq74j30AK_dwG9!0MPRb;M8LEHWGD$Yi9aJnVB96tF{r(a z)*Ouh3#*i2VA&NkQo*ZeBVf@lXd`1#r0CJTb)U>TSW>KB?l&%H(jU;&s2T34XEfjaP@(1V3SUy+3FAp~y` zQ7lpf>cA{88r1!ZA_NP-0Ty z0?WX7&|0l1xu6y-1ap%t6h#|{y2RI^qQE#X9xMPe1+8$V0P5;0O2AY+07iqldN|Mk z)4@V8&KjpE(~vM5JP(H0DoUR4+u;CXI_yDTP>b*KCx9W~axf_hH|e;EYJk%XQ0Jg1 z9pjN=M;LWm>3{`b zI^FqFYV2Nq*r2pf;R>%~FW?K;7A`iE+)46d_7p~vOOob0oIqF#1Jk7i(%>fP4GI<_ z_``Es`=$IN8_Rjtbu{n_eHL6A^e7RPD$K0s(~Sl~UjSDOy)oWueed_rmqA|$y@yIH zH>(YXy*IFCD%H<0z?bCT>!saHScnMlPE$3K>Ti_1n1)&jw5I_;7~$l}2?p;{t$QD6 z79L82ek-q`mxv1sk z?$$sSLbEnW9eB(M+P_I^#LG|6RgmfEpG{I@ek+gMH$$9olDY^Mo}@jSB~MD;EU9_i zDOw64bEVyzVSDg2T@qe%Od)$K{-YTzLgxP z{AbCIZhj>-;n&Vl6_k8VKJ`kMnzAUGl`eG+EW<%uV`FMfc_^_!IpGX0*enxyuYk;# z?xaf%k&ZX%NJqv6^86ZsbflhNBjUu1G~sK>lc!&#rC&>p-1Bj0*FXdiZfoBg#S?(r zBDC1T0y>4qoE&j@=OFaBLPV+OrQ`J@! z?AE)~Xq(iFh11k+QV$C)&c|ZN=NqXp6>XEeA+Fpe_2bw6q`upwA-v!*?c6SXV7UgT zU--sD@D|Da%NFPdlWKc>Z&$n}HOz zrREuuKhJ%EFA7Pc#2=0x&XA_@vVY0%Tj>MlO=G^5dP`>%1AX_cG@MtcsP0awmt`EQ zR5o+^<|LB0V5iiR}kEK3`QE7n?UP1ZmckRZS6-PzoHtBKz;^t zJ0ZsiTwtYX{J^s!B^elP=RkHG_bQ%l3^xw9;?&ujwjGeB zJ4ZKr|A>e(6uFCQCKB0nNHTO?#iLR0OC|;SOvr1_85<$XfULTaiqgu0Y-sLlX9en9=Y%*Lnrz|41x|vz9Qkxg)K@b zM;aO!5d1zEW2~6VeQU@fU>*XQH~ActdM72c_;2B)Lls{`CNi51SsY}>Mau|NW<}8X zkf%WIjC*kj+ak!;{14lgkZ0Di)p)8T)xj3@^q}NCwV;-=E!ya<{}GT5^72}?(U2Mb zhwU859b5i4f#S`AH_bRCxj1#Kr8)vtIGsF*_L+T1QaeS}(w9IVYt*|LaGP99ZSRFa z$)pazZALA12xQqNbtG={YpG))yJm_!`Y<9dtEFELJ${V&sJH;g+LDbPT|A1K=%r?Eg|L_ejkt!v zC3|D&Y+b4RL<63qA1~5NUHR5FbV`pEf-gP6lffZv|L?&`yn=~=e2NGMmuTBM$nx4! z>m$+!JfqNzO^>wRGZ@(niQ?Colx^>{_<{A$Loj^u2z>eIGNhuU-i7_X!@Xbu7%_pU??gvxe_vejx zE(qDkhOCnX?LUfDUx!oDEaZ0IDa^#nSJ3TKlDlQWib`dPg;;6&P{Y>#wu@@IuLy zfKWcfG*9W^F9;H&%YoBUKa1jZmCBzq<6o&Ed7qI&+!EyX@kYZm4ePde$i|5-=|IcR zNILu+AKf@3jT&FJ{=elGgZ?6ZI?YN%iA$8*9LP!_Gj1ZxvNXubYst1kW~d<(qtQXg zG_>g_X(UhIK(Bt1y0^-p_sJ6tI1UrmR>*qbUKL}i4MYR1)yda6B0|m%m zaH&*>)?Snvd*t4(RK_5Dw7F0|=zW!!wG~x<<)YLNq5Bj_jhz$mI>b2L!`K@xp&iDm z`!u2e>F}im1yV!j%#upejvi{!Zt`Jru!Qy(U@TAhld1}&ZcIgCKTExNMk%fS8Jm}q zQab)K66cDSC>Yz#JJ%4N@Q8vhA!KhFa7p@*Cp@Orm(Z=F%jnc4>}5-yknLruQR{5H zYZ--@#3c$ox+9teWWNhR58FJ(*CS6K*Yk!q5xTr*G#1bCtQWKtWW#9pWo&Wc{-(2+ zFfJPpRhKI518jI9yNP?0Yc&7Lm#cz5L2mL|t5m8vP=*cV4c+DZeos%+BEQ5R4!in)VBxyrrSdphu8Zm1)<| zOC0v-&SD@jHZ22eL+Rcxl7mwSOsYGb=)Oo8Ewi+?4$InFh4*CXBUo=q84>gAVi*Vy7YpdYZsyWWk87PRP=9J+bcy14f`SBxi-REfv=kqC0XD}CTu)U(PoeMi{3cC+>FDVl`npJ^~H?nyK6 zN_{<}@rn(9Ybm0_Z!cCMyk7MJ;H`j7MkM`yS88fe5m}{-rIWWXuzMFvZMk*`tuB_F zEz^2pvKc~ExVOl}eOp>pjG-@|W)!0!@``bsr5k26ZDfGDcvzLPPNclI?NR$Bm$c_ax7{zA)Pevjn5xk0*|xosfH^ji^#K zzY9{7RF8V1y%=C?PxtO&2q_s!p7#-Q>?iaA=#hn2e(zH;6^}$1Q<2si=YTZhKFaUR zC|Z4A>Vg5_XW>0EmL7=^f?}wuL~31E6pwgoSsX*%9-#74#?!P1sJxD}`vF!9ci$sbVwnrS#?sWUQ?E-lwEv+r#6q_i ze@9Ozuc13=A4$>t%wk&jNa__BfOoBSA~swi;o`lmFJv`~&KgO;s`8QK5G-EJ8pkY{ zI>NPuDgv?*xL0u;qz*>Y#H|kUH7V5ku{5n)=9vGU-xWfqOGReHGd1?(rI5!!ZYAWn z+QJzii%zBck1-%EPbK#)J3p-1&u9}y70W!w7m>X8Hc}R=*bcEMj%f3Tr6}$ zkPzdoWh`zFuA#n9FooY*Q>7d=?Zi4?muyLXBKZXB*8R6>mEeJh8nTv1Pz7Y+bms{M z%ItO2;3;}R1xy@G^G@_rDX#UJQSb9>8~}%6@gsK{dIqR2d! z!Y^dv9d|5b)u-Abcnzv9f#_+u)XOPi)GKsn2t)fi`ZU&CjJS&J~;9w+&H2 znvn>06Fq%yoDZA4z_PmlZ{ugsy%&-rt$Km|xR$N$&{KGM!WQcCQtIpExV7rtx>^kXxu1wOxb3CXulZJ}s&gQ6<&8yE zRt=d*d0WViKvrR@CX~I8JUkmFURmz5UGqQ%R{ex5U_zZgS4;Bm8 zGN{Wd$+@#3<9#ATOev$0;cx#d+X$Is4VfeCvLN%OwXcx*2-^J$YlQ4?>HaIU71y0r z$~4oW_=DG2wMEeI*C?`EyQ-8^rh~Hcuca0i!!q$w+hpcmfmarDcGCwHC@c-7R$#Qo zT8G~yEZPKSjzEqW_CSZbjf#>GCZ37vQ=1!5Wc@GXvu zalHC3*57KH`Y-mVXY{oHUkv$~N9fVNDD92Ms>A{OS&UI5449nbeyCCwoBTTsSW#}w zrAG#7Ha4weDkX+@h#AZX+Ug&U%vNpa_hs?O4#b$H_ z`j%)gw_yA75*@EZqbj*fwpCa`+f%D595-3xy9(9W6BBR3L{uwe8K%v4e3j(O6AS6f zDhw*v%v9kuOaQ*tU{T{wgv6f-{eSoW%i#aD4LDLu8?}9->i<|%{U2(o|L;rnf1qhu zNn>r)_?I)Z)<%v0IYTD_Dr}(EP=$>eKgLWxw(1rV{__kiimR_BJ6m;q{4}Nz;ukRv z0JO#d#-+9}ens`|)Ge$QoBz9wXud8KZKt-!@7IJ0O?4{j8#Q@CbAq-BO?7%)-)Y|c zi<ZZ-d)BZOGp04o zuvdH4ul`>)!dN)7xNQw^sb1@~NhuIXT_o{{>x|R*p_FN}Xg9hqg zn?W@K(h6-fwDqh1?G4VKjhBX=JF5LHEaCB?D-|4pIH_HY{>CPMGO89o$;lj0a&ygL z)}cu@YJaN~v$w9vyVC5fXY|&W&0cGBR5-VCQu{LpqZU7ENB-ud|IrUIGh8`uu*&2*wheP%d8G+1*x?0sv)*9iVI!Tu2y0NC^Bez zxPFM)$_644x>+1<7TZFkelH$gLu~O*Y&E@FY|86wvscU~Vy$itbAeebhH{}Yijw9nC0=&|CPtanC!DLpVquKR?D&cta$~P z!zrFtQ>s#RGs(xP#JAdNUW3gK^skkmIJ0~!)?GEP&&~2RSftjx(#`VX5hzY)y?rC~ zVO#d4{#;A-;{m*5jQ-%~>KM*7G335P{gB<#tCy;OmUzc;`d?Dj6U1*1eUPRO;jaB@ zPMSKHNA%Zcrm6E8exHM8u2%QJCivKDb$h<1AH7&D#$kQKFVyupkL{-qUaRJu-PX5~ z)om>CQ-R|*see%0x{9AKz{T)`Y*H}=f1~!Y4gHTyKk^&(JjN>M#uoKpR-q5ts@}s{ zw*KaJb+Vc#_tg*IrOse1ld3Y+DeQ=T@osfGGBB2WveYwq#8}#pr5?hQ$I_E5^>a)s zclW7BaMd{dhx^rM7(4Q1wt5^ZrkF-~GOfhQMorVwa^FkQESJ*I%v?%wLH@sU?*)YK zd;a%%cwXK)Gw;0HytAD%Q>->-=_BdYVl|fKkEG3jI9%#NvDy|Obc6Z=b7WJ|2DLd$ z$)+P4)JW#cme)6^lbHVz&u7ps8OAf3_=Q^6e@)Fqx$+Bjrm1GuEJjhAYG=)2viBy{ z$(S=#9@(O<*DW>3pQoie)hJ61>gVNGJJk^i8`+e?zf&i&l-}~C@6;a@Fg{|p`U=AH zwcYAmoF_AW55R7DX%8%EF1lq$ z@gyltjya|dQfqRwj`p9Z&Cxn}_k`LHNBX8x?-F$=o0Td*E>Ukn-BffMl)TcU-%lz| zi;D`S1!vTF)^H+yb_Tjl50$^3QQt7J4vL&}4*h|Dsb1+I{mrH~6)HZj-ZYB+=Ykq% z6gzT3{f_1KBKj4Ei|s|<{Hi9vOLzRLhDzVx)ay!3oiA3%=TdE*BeC5j^|`j29FNr1 zaH1RW((`cKmGLtjHvDve*;Ff^ym3i=jk5^~Exf9ZQ;O;ORkc3Le?kWTsrtJ_X?R_& zulVnHRFvKdW!`X$l6n)q2T^9;gt7LJxTU7Bq@I+1OHF6ap7PyW>W*4c#49xApW0F& zvFIQ5CI8ZzQpm*H>UH6t67q;_(;rgXa<#X=vsU8k<=}r4JuFvK{A&qG10JGzmD1^l z>IaVNRpl}wO_LrPeJ|8A<{=eUsQs8DME+T!PQp2sG(_QZSb>91D*Ppug zsVqH(^3BLskRm@b^My*=8vZk^+|8<2>jY1nerAuyrZtQ+tXw|r!*g)1c@KHYm!~r3 z)k8M&=M&MU2z@N`^#-rE;0v#B{xLU6m=oco$sR3vGwcq}ZD(2C>0v`ETsg{rR01+937K(sp9 zjwi8%W-_Eb7Ya)nBkOhGM}mCyrj;)H?KxUDSOl@erZO;{2cva2k#T+blMHn%?a!AZ zp310!d|a*IwX}i?Gi%#mX@&eglfUN65}L>%qj?X`MwH9{jOQzvk&-ltWRoczjd@lJ+Bu!K2Xm$sGk80ko7;W{?||HSGk6=8-hw`z z!J|>?=nS5~qFP8(9%m*T048RGW|>Tx&BrK+`0MAupe(YS+Ro!W4CtK4v;7kWR5~{F z9i_|b^Z0IsB@Uv^&+=zjLMA27hboUy_Iw`0oP*?|`Fs^)g#)Sa^Lz-)97qeF=hK=Id>H|DQwmVa<1lsnPVtk zq2z60r=WLvW9A%8UEYP1JLsu*c}sN0^ezwK$_csQLw=nh1|9vFJ7~*V9?9~D$egoO^SH~gn+)qXud3VguL|`#|;$eBdE?7ybsJh<_rFgYDuor4C4L+ zvTcSnG9FUmX5Nh@1kp2_(Ox#u*PG!Xr7O0;Z}J0W%PqVPqjehhR^bbO$$?wBpBtx1 zU-JvfU75a}A5)nlf?{@or4mZp#T&5n2swQh@6T941nv8t_hu>K6uKKh#)|or0iEIW zDdK^T2`kUtGZ8Xn^HS>Z$KbqI9dr|E}y2j&Q)4M5ra zhxC(?Ttez$-U<;T@i6aW!dxc*82^kF)TNHcVYBqQGUqt&B;cwaoZ#_ysw0?JLfrwl&oFEO;7OhkBod z9i!^V$!Gbe-mEZAMqWYv%o#~f|H+e4(Pw}1eau>yp1sEV!5NNS<6oIrN}PQ4CLax_ z>QA@-;mu*WhPTnGt^H;H+i)d>p(S_tOYk9k8S07cOC8I2CsvR_bIV|(oW62L8PCEI zh5ab(9#3bP{b7{bMm?dS%;D>yriRl?~gCgoNBMkgt5(jY*?YpW_a6qX14;Klj7MD#3 z@x1YTuqHP7JI#+Ym;zna(}iXP6B%a~DXyq8-CL9^8)>SKcpl&%A2AH7>E|n61Ss(Z z_7S!56VCx`@)J{8u1-xX;spb4u!t$lsZ)$UaKMlJMJgMq(;Wi`oM#0-NT+>P;WS`s z0B$r&(ka*`wi^tdu!(1CGKhyy28w(B(Vh;=HMB&|2|?mhh9DOfEPgWKyv#ceagMRk z<#Z}c+(dtSAY8<-S><#yTr_42$|)iOaCteUM2I%ZYMLJ*;xJiU3yfLK)S?v+l>bDC z9(JZjQRm0RV2JwWW8w=m*4}MIeU?&>rnM1mnWLWkxQ*DZu|5@YQfDy|eNF-$?jjzr z+ypw9B%)b{&jc2^wLT|%!W zqZZwdzDNd*L_aDqV2&R>Fkqn{MRgO=@UU*(1iC*O3&5Pdw8ThVL+gP?r~A6?>ZN}_ z+cgaFT7o0lFicZgDhfhJtgrmLo4^$%1r6kLj|+5{ISpxXcM(gAx(l4e-d)%+wILD-h^GP^ zq2>UrAeIKFiddG3gO^ib3`b*Hn<^%=g2oh@27F{=nUp5lf{g|=ySHct6|Lzl8bHWH zy~XRy5htJOBbX8}qRR4Fb#5vBP3z>$ba9g*-}ru_2TN!`pZ9|?%j7Tp#Aj%&F>?7J zu}v`ynUN))MCbZNmgtI3^>!Axio$zIgGDnovOZ-DhFwZ%&R`MG95M9aV6l@$MbpF~ zVmK>|rUOGnFP0fiAwwYq@NPpPTZx=BRP&0l%94EOo&j|q>Xc{rq&MZ{iS{htNB$>IOfi|>@-j)s z9QXk&8Z}o8w;r)nMhecc@yf{L08{2+}29=m7=KjI8}bPQrL`Hd&%2kf-x}oSCJ?+e5~0jv593y z$YmNDIIP4j}T|`=I%&3jjtnFf&sRb-_c)LJ% znA?(;>=YMSVM{q}m)MLRC`vZlBepP>@)%v&hk%;@7)9?F-I@Lvjo*(hXcfJ+ACBf| zO~33%J1-%>1EQ%ilIrajbtvNinw_D?J;EWI9TYPZ)03$5gF_+@F*xF|XvFec$?k_? zDeI;-Rjy?=r6Sk+NAWnSI~_VI21jIef8=R~Yt7P_(!l$StdAcP^&0-aSv(F}*pjBq z=RwxeM=Jw4S$s^yqxD70pN|`jVh>&XL0mVQDew@w{-b!zM5rkC1nm4FrJWF+m{%KG zazfl?Nv&wnNoZmZZ8|B^SyCJFE)lIv?T|gG1Z`+m8yZz2nzDaa(DD+|z_bVtwv-^= zyhp#4h=!(Dfcu>ija{v--6>HIl!lyw63gV`Q)uBpyZj`s7|i(Tnq4NJ5qlKnOY-?e zWMS=i^e=F=gtqeKU&QxV5ppTJjvRMh48c&ZEq(v1_!{oN;5X62;+0sbMCfe~?fMO_ zRz{@;*h9V-5h|UD)b65a$dVFe_C+y>p|{xlyGS!eDB5Ka$1>YetIG(PvF&KsWij4> zdoPREtee_ZQbvP^MdZXQ;-sNZ!}N9JkgKA-Vwv^$Bbjg$+@GSO<=mqM*U_JUisgs~ z&THs+SbBTe={n-HLFT2K@Jcx2lw0V&jRgGTpo@QtqlU;p>c~U?hzeKU!)4-zk>%UF z;vVGNb`LG6n0~z{o<($c@;(fW*ZuB`4lMC;+J9fPWa-INaUW7eb)&`)AZ1QB8t_0Q z!M9gD5UrV>Oa~qyxH`I$wH%KNyHZCNOs1T2C@Zro6_kq{)N!{Qt+tdRD!^OXL(vbt z`Ra!l3Pg3GA0DF9h)SZ!3eg!khgFCSmf1xXS75MIB|-|*LSeN|^pvW_Lg!0WZ2`;e zOhH_00ZF=ZtqF_mMANwz&oVpFYOXb6v7O~Uu5~qtNccw!6Eb%3(dx6rf6-Gu+H6+P zfzJAX+$Pd}k(}F+n);%gvpo&;)uNF+8_D4M-@c%p(t-9PmBn_XzkIbwiucvLap|7c zNI6Pf{InlfQcD?Z(eR?6F#(~I{-AJI-t*V+1yc2tB+#bq8@N_pU@&qwdL=S_TLPUnZ8eJV!{Qu z^z1<`lIi2+I|sF6Si=}cQx9u5SfjBt`iS-=)5pn(quLV27LJwcj%yVdHjKr(s@4>9 zNqPDw?S!I~$_+njBNPfds@W*|tTqjUp%rJfU2uUR=d`T~OUaQT7qoxj!sxMb#IM>P zCN^v=rT&g;lg7%4ziS5+R%fhie_2~3aNV}t`Ipujkz<0qdqcbA!>nWF`EqR)>Y?W= zv{V+ABac+T`&hwbdC8)u3l^J8%YyZKlohPEVR*R)NJlo(1?$oEVBL;ZRS>L4Q(PT= zmy+ZDKftcrNvosBP^w*@>Y))zr|mjA_!SPl6U&`yP>QB(haSp`UF4#v$Ut^XaaVZ8 zq1)Lk4^k&Y$4%pT#*+||A$k|(F5L;y@dnNeBh5~|Lc!j-$p#WmBg65|*!!U%mh&`y z6RL-^xQTQ&R8K*v*f71mk(?F=^35jFm@rrJ`Y?SsD|y;YtYJ8c#JUg{u}&;zA{B+} zxQk&1W@LH}OYl^i7J;0FuACwA#R&Z_uB4}D>*@)(d0~BBJy|(RH|y%g9N8YFw^9C~ z-cfoV+&cA6lwOaCiSnB${i4c}Cd)Mq^r0$L$>a1ymNQ9qiPN!W<~3Q$=DMj~RkLbs zgq2TdPr68}^77}QV5()~P7A|(ygbCLK+wuad{ zZWMSlW#g#o6bVw(Yd$`nqqnRM53cIp%Bu`utsK26V2oZJz&y`o@>G4cPmO9$KcnBT z4ur0J3#;jD>hVA5EX=>r@Zl;oC68hk>eT_wlPCu+)B|d=zA#@O&ubPQnnx8& zYZo4xC!4;ae{N_G`dq2iEYc>AURqhZNSi#lX{A0m7)1h$_1(2<>6u5DH`XrFGf&#T z)Gxs{^5JH^slh5>nC!7t|4etQDntf;r`Ho6{F^^uv9Gh6}^uNIN+L| ziV3Kb-up|(Qn^ze{7WCum?b?gV?xX=m5|ELh8gaoF7((+-@BVuUouyl%JWz*4>cE= z5qet2n71mp;peXg=7~0DeU64Dn!A9NeqPT1&N63FMrSh?q-N2S&gS~) z@!v4Ob=vF(KLhwWXI56aayT8`X2#_!Gi7ua^UWkSZ-K1iGn=AxrLw*YQSSc-qgT%S2+Q~EpR zXp9P`8ED~bDg??}FTj`VfVs2j+&ktNmN*+oocS^4 zct)N%XCBI#V?MRNWKM%V@-La2LY-e;G9P8=yz(!b$Fihn>BePq9Mlwk#rzdZpD#~c zF=IcqSf06Rwixh_Yvzu9>Mmfv;hmJr&rCP@bi^Y1D=dnezv4=k%6P2l-n>QKJA32L z2Y)+6fVoJos$=;XtLvdIX6Wls zOORX}YU%5PT||Ro2z6;_vB|~_Er(33RL3aG5*kstFH}_A&&|jo4+JBn6fnZ#ph1B{MDxxcK78`+15beM-`5?}MrLe^c4R2xzHK0rEH<}o{0do~O)Xb8MKpoKB z5(d!J4SE7ZRBo^p9rx6Hv6_QT^10@gpQ{Dv)xlzwi#u4-jlg`mGidE_^JwW}8BxVv zaTl<+vWw+vWPGKXFW@d7*Duu#AszM!U3_j&GWZ1M;>j# zDybN{anMhlEuqNzDzXBA(YkV9H_Kl-O9`Q`QlSYz!!77qswJ2{gb`P~Y!wupW(lko z`p?(hd|BRbLy*S11F0@8fuw^Lrdc{iRB=+@lP#q>d#OC1W{ELJ`c=x>^Kmz~qdgEL zv8m{iweuhg#xcNLF10kvazh2{hLyn@r?-b&rX#8X-`Wn_X|7zfr4TwVE3`BZk62pa z-Zv~Na(yd=bGkhcRV=0KOV)5Xa-*dkQ#{C*((;myZ8ECY6R%^%?|}DB*kLJDtCFtm zf~A^$XPH%*BDa5M*R;p* zJIDjU6LyOXL9vYKZ=FGuUx=DY?jO#TAEG zRCaN{-^Xf`8-1+p;*>tLq0|~G&26lW{X7WO?Pj&gVco2FMPnV6{0pBlRr1>NaTHwq zxb^!mCE6Wh+GitWPPWx-#brY2+160Xor2PzPO*L-6miV6;90bBs@o$@dLZOE=FXkE z&Aqv>9EZ@ zt1{u8ZD8w{ZB~qjJXt1xgOpFdv95@T#8QxpouU@pt>!)+2)4q#DB!ukaQW;dYfHv} zxs)Dt*=pr@+TsyhnlD>FyR6)yt;Yhw0J6Pp#_N-+{QFoyB=aOt{Eq?l$jZrG(b5pN z9zOIykTi{UyYt*1QHlX`HM5G70X7=@dq6N5|H(g225j<tQb4XZh~2ne zQ_{va9+C9Yt$?6)%o<&m-_^%vrAv*1LMc4m_AM*%Bu8b~tkRre!*xfP zPl9F$MfF9_;eBoK#>~={l4qn0{0@QdKwn#+G0{BV*LJOEWi#FKw#_E*y=@C>h)I~c zw)@|LY`dMdtIe6$Bx-caHWD+-{9Cp-{ha6370Nhh4U`9O+0=x{Pdr2AqB7&PZ~PqX z+z^`nB+qR+@0h?8#(=pbozyV!tJdtTJc=6<7-~S5HnN8Vs?5M#d7Q%n1A`(fhv7xT z@lm+(o8^I^jUo7kDS@LfY4sFoK0R=kZ{(Cpc8t@Uji1v4QDjPL^+JbUFG(lH6+I%9OaI8W;YhNn4?#tf^70|RM2Z_k(EQ` zqV>Do)$a8`P*E2eR2;H!a!}583}W4d|7aR)TNK|c7=LwSd^3AQPi#H*oM~^4Vc={7 zd_*4s7@LZxXWE+?n~mPH0I{jq-hhL2IewP?S!3Jt@@zZyuCVQSa}FLP=`wmQ9vJVK zygSeSfiZ6A>9n7Oi`0A0KGWDkT=|^+Yk^e~8k}#xX3X)QSZu$ogm_JIH_4~mityS5 zO(vf`N)xN1n3#m}H31vb!*2x}1hzTKk6f#5%^THDovWy8CnQ$yI z*<%{p7=vlZGK3i05OeDFdtB$7X!^YW{QdcT-EOaQe?6DiwO`lkx~|vhl(ir>Ye8&o zI5YF}U@CF=<#lC2tX|S0NiTk)yp%t;dp+Y$?oRJ|p({T7(z=JUcF)b0I{Ul~DYM>4 z4`#R_%3ZC$(NzDbQr$7?d)LtaZPX8}p?`1G$JWrV)X7U70$E-8utN~@lpo`>sqF07 zg@wu^9D~dXREFpiWiLlZIoHvTwUci;2C*pF%qfUkK3E@q>-A&OkRKG(&MPvG(` zm(FH0j0S6Yva6#U?&`J6#x)@CP+ngYEh7n)y;niqOaiMurmkzcw8@ta(3 zP(P4A;BsH!DVG-juetmqpyTqr`hl#DY~vBc+~o*-2Fa80*;d|y&mQs>k03rmlDTIf zpCHN2ffPv|39ORjZ-7imJ_&4>nk}>?Aw; z1o2TOayOqqKEp(w4HS-&cLC+2~UHu)UaQR$st;IgNj+SlG)^U-^f z-rJcR@ac9 zZU1kAd~4WkYslp_{O=p(h^id^Q^Vm-4f%Erd908{ZRX_+aO7OORX#IlpQ(B)s(E=R zljjXi!oc!+@LoPXN8UcsD-CZ z5$8pS%?gH~-SyhSRS_|dV=EOUtsrW-{R)HsH~;nD^wIxamh3zB8c$g*SB#y;S8UEp ziXW}!rC-Z`Bs64$WhJ3A|N3jW%LFez>uY)Z1Rpj`UNvDjvyfj-@a6xkkXo6h}?HtYZUCVX+iwnYB_&epzG|_#@Lz_l%7Rze7vSYQP9Xk z=gYFm^iaNQbza!?NXCn0dBKbeyi}HZ&aBVNWqIPv`pi^bKC>~hdT6ExM#vj88zQGV zd^VLmXL<8=-^iV3HQ<@w$m3@<#xSsERzqI2D(}cFGscq^$Y*Bf^M6;#3+Jq7-m-gg ze~fHN$t(Cj3-Z)+-!Kf&@8?adyE0XuyycT$@aq^MolG}!++348jP zs6_=`$UOh$CX8=dA_uQ<=i0?`uN9u~Ph8=^9OT6-8nSxw?iF4<_bd703TMZE7KyS& zt0*c)%ze>a5LbDcT)AQcPg}StWRaY?DvYO&mv60_ z%hxQD2YoY%>(b;4-z3;;ZlE2f{~Vt7%qs1PerRj=bDG>;u5UVayuO@5QY3<(KThxXRhm3-bpUHGFIpX8E9rHiDY#AFp-i5}%QsgC znxBj}Dndsslx^1p@P+Ym#2SC|;UD!`3+3r+I`Y#CBGGSdh1Y{@{E@YTk?u(TsJKi@tTWuo#I1UcRI+5=;5bx1Kz9p6rl$fnS>|-^=XF zzmJt$ZtTE+nk&!P*px3x&fBrEH{=9O<6%lL0|q9aDtjRWMPJDRa>dCzv-=Yf5r zMfpa0J4Gy1T$7r^vn4bT+>#n~YW56r8-pxv9VA!o3_+>3*fpDVkbl_a$!|}UFYnUw zjZ@|H-I%pZl@IR@;FqS#k9M!-1%2eXIc{u7-iDkyQh326q%^&t>+0#Jm-Gz6?Xh z!Tr53y4E@{jrq&T2j=s!<7DN48y}G%yB}=CXD7&!2OIE<33B|w!1@o-zL9Q^1B%k@ zZ4|n2Ka91_3Jmqf z+2?Y%qwV-F@pAgnwV1aa-E+x*;S1%X+D+N^Qd^ zIrF45-#bdyp7cWzm7Mf)`$8n;V0Kkd^x;z>Tg&dJTwD%}HfAvyPLJPxOzMQua-UN! ze14of;gl;2kke0j@hPL_oKtQ*Cr-X_%7>?omS3IHv536CPk$!y*(34-3WqU%J50_v z@4|ZKeSiL*8VjqX7sL3)A#&kGUp`@o{PLnV<~a_RHnZCD!Ap^R z7jn$+T}>km(m;97@4I+K-@HLLyg6&1H}BR7#_Z+r;whNi=M{g&7kJ2@{kfa(=#f|Y zCtB}5jcjpe73(Z-zT?ZsXyn2>Kl3Zy{c-$WR9@HvHxvHmb9wM%KP-_JKK`Ohs+|}OYMtZeXe*c= zhaTHw|l&pcSiytB`IIp5ns{`>D!{Jn*||3z1RslBYcaBEa< z!BvY2lI$0j^Qh$(m+OdHF?j+drkjNreNaa`+R5QBefUueIsT;^3ziqX^yAb{-utpX zYW?ENCVW|#{O?OI);rJrl?&q=+sSQSr}GVU<gmxUN~=H}B6# z{8V9NcdC1+h6tRZUB-<5tJsVKuE25Qn@!B|Ht zbC%7`+I`Ubo@}IzG+~x_o;gu;Ew-F5Y)bcQv0`5Qj!x8OZv5;!x>K7u^KI|wgOI;@ zM^2{TtasGXlyzpFG}n}Qd)mJfab17CW6&@wDsWS!6(r3$EZPy2m^-=B2~+06no_YT zYsDA5C3`dWC2LRf&6tPh*tf=ejdxn5eTN$lin&Jg{?d=mSg>E%V6AM)+B4RY(Dz@n;dIuTwc*qJ zw9JO#S(MO3yR{zkVtjrR?HOC<$5;?Ow_{oSV1Ra|J+tDh2W2_3Z&)2_;l!f(F<(k| zVm^FhBkevX=EnG9f4bz%dhzN0T2B{d!gE~ZF6Tsd67Hu`YaOhb*ax%_=-kUSf8D5_^X0^7nFKyFx)RU$-K=}kAFuYeOecX z`qO?7)&NESy9W#5lRe17lQs2iY`AYucX6Nn>pyW{vv=aYR8e%xqP?9^c>lQ42v6qE z8qhLNw17WdwL3jo0%um_(2(uq6N~9YL#AbJG|QX$@&p&!>dk_zWi&J-=|N{PGc#Fx zi|%?eN9IEBz1cw4g!(pO!9Mri>wQ|lN0a_sldhD;FGBswx5Yj7V{hr3YE#N?#N5sA z-!xP$5)?^S8nLlF$(7pru!;QI2ioPsdhkWA^xlUx;aRTan)LTDjk2N7{h2p&r+9w^E8Ebw{%GR6-qAIG7Qpw{Bi@)bW6da}F{&@yp87Xt zSi{iV#;hCv%R+m;Fyy*k08~Zv%Xaz7FkfiZ)PKo31xy4f&V0^lwuZ z#yU~!K(>G%v7!7xM4f$E`*$E~!T2pn>mAI7ajPc37>Y{Y^bbh1syRcY)4t|N*!L!M zr#b751{&Ogxmg@7`dF%enb4pXES0&^tro1Uef%?h-E3)vxA= z%Z%!_#Q5S!J}r^At#v87C2P;e7SigL%-gxic`?BJUaGS;&sbN}HK+C3UfScIAvV+Ar}SbSlG?G={P;;)-;Q-+f!aIm*fhphmQnu> z=y-d}D5V3dfLtzMKPT)G^TR8-3cR7rHcGIvkCkhBkIh$dHpOZy`c1(H330rWh&xb*d5ayhxDOE(&H{H#;jdK@f>Sceo5Oiiq&PN#e_E3ldg3`@-J6V|L$z`XSEFh97Tj(({CV*3sDQpOrw_d4~BCQ zo|wHKugBzijFm^Ecz9te$bP*(aiLc9wmXK*DLM+!uoir-jz(zMH2yG;ZfKYvKbJ?m z2V2Ew>1a(4^!WPPb3M=`P1X7cF;+e9$(ESeU?f3;GYe^UFBZvf=2Af~HnLG#j!4eq z9_cSo3JV}0F+b&sJa$4J6_H0pOI>=ieoiH5tx@U8-hQQDy+sa};R?=|U1)!AJP6jm zr_equ(9FX{AJ49{l+cIW@>sZA1ZlD22N6waja)x2r_p`c3e#76^zqiAfBT}1k9kL) zU$Ake;k)#=cBfTeFngC_c+U5JdujDa+ea@%6(Z&s6rx;)JEBOy%W0^Uv z8pPu9r1>z2rLkd@G8j@Al@4YerVV#s6uJ8NBKIWaTx8^YpUwtt7I(9p-77K`B- zHP;nGm8jAEFKO2hJi)!`@eo#K8oym1Z*TfDhFxVAlslAtX4-d~URjS`4`p5W_`kJb z!&sr3-*}>}HHz(GEJnL8j&0)T$Gyk0K4#x;*1H!yq+Mf~#=0{^vF2TP2DKEr?jhBR zXUY8PU)r>I_J;ZIl94d66c57ETQ&%8Ne!C)0g()%m^W)>+A^LsM@D=NdroloI2P+yJC_UH#V-(noMSg7{Bu;{WOK;@GHeMVJbVyi~gX- zNf<_Tf6(|O_JCjfgL+S6LHw6unm-Mr)Tm-=IGwHI?~Ap^rnCBtPrgZi&cFyV>n2&u z#1rX}Ru@=NE>nNk zy3S+8jG1W5Q`lD$e}08h7qY4R@Gb2>3&o6WDAixY7Bi3UcPwJ8?t|GV-vZ2?7SEu4 zU*XZL(zaWSQ4fjyDjlig^lLhs!+f;8ma>hECtlV*U&a*1T4|pzXMZrCr^ZKa>61TD z^8KDGN{{ps^t_#u#WMz*BS_Qc^Yr)EczkXuB1GEL_{^8}=9DPtH@o zYUau-&TG4_W_6fFs{})>T! zpQWdMt5o2FySzxf7DN1n=QMsTJIG?li|_;)dy=$-+3vq5=sw{I+x*4cvM@s0oBDKNcSx} zV|_EOdh({7q$`=oaq$uDt4tbs4-ZiJZiXo>Ip?r; z{Puntn8OC}GkLTx2V>Uj{nTU+#_DJLY4RS{z||&ClyPZ;&8N^qk$nG4QV0JZAZ{0qMmY!pW&8!XL zk&&b+WXnxwf2+4@=x!nFZ5C*d-i*+;Jy1buk@g5WTf#mskb!>45Q1G2dvRfA1gWHiiR zyfugdu3!cAt4zzTuy@{$Yi-%a=<fq~KAlSbX0x!i8T^7hJHBLAjQ>1?zIcVX zUr(Cx3dQC@4_~n#cw&-v?Q2$#@yw~T>kUh0)>_|xF#Tf9wJqMVK#6adK%?HXW&Gkq zdhwnOVa}xafEi{V?KdA#CM=5n(P7biew?;<1!g)}lHXG>7`9q7jBn@jN0XZIMNHBz zWjvbk>tm>d^8wO#V;FrM&0VRV#0T=PM$ul0_ejYa%T(#r-r*Xzrp%$n4$#N9xUwJ_lwZ0ikYszv8he4Y+8ltk#6 z(X_~f_w|Y!Ee6s@*q(h>dUJH8vP`zalTEWcv^@;i`Wa5;CftLCl2a|-oYki8wfIoJ zHjZ}H;x2qsoc3%j-iGmCMroNT$M&U~Y|MB$KRQxdw+`RJS!>#3&YSbOvD&-l`0@rb z)vmGP1snnOugBZ)vrlPNJsyaqW^kuZ((VMn7@cMl1Bkc(X?#%o)VZ=!T=a=T5m|M*oK~Q*iaaa!rTZ?^c*h`^7FzCvT@N1Dj~Y1h2AB|ba^}N%Nk7`* z%p>?;gXuB8O~989q-!p`7hgY+8o6=}8$wfDc{iRItv&9_&x&Tes6KDOxA&kU^|?1@ zmv`#(V1D2Wvhm&!IQrRUFF0xFychSv1N5mE58_99YTX*}M$D{_;R*1dwzgYC9>+`{V9-Z)dT9@O z^Wluu);jp`#S%}^&}M&r(k!yO-h5i69p9LjN&IXV?Z7}D!T7??^lcCy$o#c$g7^Y% z7WBE^adEjer8yt3W-YW&TJkSz^K-3eKzsh9>E4!lyPMXg12@6g8LAf_J<)oE^N!ps zp@kuyQtkMT{8!BXno);HKFQRhnO=|NMe?W2EFwrRrahotow?35EKn~FpdY&M-#Ina zE{@_$CDVugdbOR_S;L<(vzNYl@m;ajswW>K@$bE9Mj!s1Ya7zozTmkAG~f&HcQ0+1 zX#N9ZzS_6_xEo`2w6+8IR?f$|k#-Q@V0Oq=AJDbSGZklQf$ZT;X3{)GrCq;}6Jx>DY!O!J zo$1jcu0u{Ae8r1dg!aT@9&ExNz05j-{YVY)$hNVJZ?a{CKdOMz5LjAY%c6?3=t=Y~yut@rC zJ72*cU#HRE@lfm?eES`5h(!DZ)NSxPf)Ve()34LB@3;s5<2G6D;754Qb-J(vx$>eV z-=pJ7wEKG=$roLxm*1nZ*I%PG+4|DGnax{yWn9CXLQG;yx1B^GUPmDsR^w4v(~0km zxKXp6d<7o71v?SN=xcO$C->#suW9S-;vtM*+(6;G`6g7-o!$Iz>~vnr;g|Ttb=s^w z+=iv3Ul#*^zIQ4f0B0k;O__LGYK<+4~xM0$IQ;oNwQC8SA5<8?T$hZ(PX<9fF7 zIu_S!jn|2#I_w@`Agha5j;pLihbRS<~YWC=YNOWjUqISU%4CC0@(#l6seSGmb z?N9l9f*H1=nx5sJ%tPDrEXVqJ_c22m;-*OLiF4eF^Rk0<^*sNKFFr_C7ce}2bx<37 zfjcnEO$St}$Nda#^;&aE`U5;VoScFIZ-Tm5Q zMSPnrzu`b5OL$9@rVZPxRN6Hq{2u4iO=#AA{saF~P5uwKPrXDn3S6aP0-iY2)HLD& zZ*G=h&|6y2h<=u~wD$ow?~`TJS;0>n2W!YhHRO9WA!GAU`&s7VR5xs(sr`)J!g=8YwjV!ZZ#K@-Z*RhrVOGVYr)4-wVE zPL;hW(-%jTYzEm6HX&p9R+&06Rj^UUDo|zSh7A~_ycV)uFjK`=lg%K<8)fVss?0)| zD%B|e3E3i&sg|fzDf$S6!VHR)Mh6MWG>c-YY@>|LDwTZ<(|<`&BuL0+kPD1V{Fqi(HjuB2$%Alg%KP8s#OzKM9dCe2Y#5i0^%=g3_1@nf@q;Kt`rN%65?bs>!~P zk;#wtaLBEz$&rwehmZC)kb4{DCn5o>nQ9<53-k^i_>!#II;KJ*^)k|=KV}-`*05t$ zs9I7@HiNv5O7q< zqECvWN-oe#pJdUe#8G7*C@!kWqJ>tMjWy!(@dnYtsyjq!C%@ufV+fGw)jxbQYeUQ4 za&J2L7E|t4bnz|sAg3~JXWdez>DV!Nc&Gu*LdoVGccikXFohU&EsUlX#LBom9e>Il zY?>Q%&6^o*%?!58cf5}LBlnRDxD!q_y?DoCSt|7@=dEb--g>6kq`gv(sB_D?6Z?hE zm-7y0EzqgN(U@%B^Hyd<>l#FB>I0D{TGG<@yge_srVE1WY^cr$-rg*#p24kz`h37$ ze)a~@+!+1`gdd_k|AD`&o08bOLW#whD$YI?iVEioT$kXyjI#h|F3v2RD{+Ry9*oly zr!~%4oV{@-;!HYKp=99Pjax&R>HZh1?yK%sb#0)w{+Ch%mXf-zQc1*F zfb%lW5}Yq^s@7L3);K+JW7^6<;Yn&;HFp8UmvoKZ#;PeO)%?og|13pFfu6DC<^6jW7S6eH}8@zD0ZKEi)jAs%kbpPud3tK4e5vQXhCMRI2`9 zazmABJg94}QYC@jV^pdo!ah!=$^%JO-0MD$*&d!MI;^%6{-i@EX|SA_4%TKs!9u%Pu1TFzl*M zi2^lX4442Wg66*>V$cm-2L^ySU<_CYCW8-bF>5WxML85<*K|s-9RdcU!Gzy*%1qGh zI!XvE1`EKL-*KbR-_R+hc;u9U0btHeln5Ab3mE}*U^bZf2TBGEE7mEcf`206Sg`1B z>y*?KT$J5`gHV(pAz;y6ozfZ;6CJ1l1McaRSTGDs2Ft)KFy}t*1I-^GU{C{^V&akc z7ZL>KgOOmsLzD=p0nl8n%lk%US2tl_pow5W>c!nYa%UfQw<@CJThGQQcF50-sEPB2v}`&XxI2a6S*@&eSUDwNi42#4dL3u@GO*n*j6 z6^frbSf?UIiNi&HT|9Zg81o9{G?-vfp_GFG))h)reFOw%fEhM;N`qnbDwG>wj1wa8 zfb3SGWP>^G70LrJ(-Ti`Pu$-C_km^L4KSk-{JlV*3S|ix=9>ZoF3g)$C~;`*=1nV< zYhY0`OasvB&6^`&una5)b6Ox_pbqr*hCQ@Gi2(yzA{;ObECVy!S14hP;1Bi&Gs7#C z)j|fd!D6rgG*5}Zjkt&b-+=j`wGZUaE0i=aqf>=a3g&=1Fu8Mu65xxXj6%dFa*p8qrhS?1~eBFB2WWnff?W-Fs5&XqHY5F7Zr*dm;gqBWndDRAB}`JLH{@J zkCa0Z0GbED0rUnl2cpQpd@vi-f!DyWK`3HS1FD)LBG3*@0R6xmFbd2EV?Z641SStg zm4X@Ib}$n>)D- zz+f;Lj0AJQ7_bOT1a;sN&@Hw?$pkgv{uEp!;Gz)B1WUkt@C{f7nqyI6j_-zhf?;55 zFb33s8DJck1I`4C!Ihv6+ztketWfen4R{$$21~(APzM%)DR#{e5ia~dw^5k*f?;4Z zr~%`_7%&-309S%JV79Qwp-RAfuoTP~gPb?V{bP}1FacZw=73qCTRd_M>cAIZQ3CpZ zcnd@@33UV(C88w297K#W#Pf!DffXSc+%m8D- zd~haM1ZIFba64!|Jq3*b7h%&;M4$$I0LFmjU=HZr5+wwNftnc=%0MsyOaPO?R4@Zv z4Q7JbU=dgV#>_-x1cA2q|B9*uldqu!I-vh+enXBrpeVp1Faaz9Gr%`s4rm&VA_d*R{OgDaG{1==2Hn7G zU;`L$qSBs1!vg^p8xzEnhhSMpB)B^g8iln1SOg}3<{GR+ zK}`=V*1!btjgWg*rYLqA6n#&m7|iK~l^7V-8;e-btq&FVFPq5=c@qohD{ypb#h z!@w6{Cg|1^{sWOfPy@z+G2l!v0n7k1h9F`vECwaj3ml3?%XVBO4?{qL!z-1r-pCo4 z1ZKn{hhQ043?_^~iS&UT3!*=BpB3zhrpB=><_%aMJDzNVh12%ERK^0B7lu( zT!Ncn2g|b11_mL3Ehu782gZTPThSPW3}%8c+mUmj2j762AJEtaBY}GnJ{XXTssJ0M2n@sbJfgrdFb>Q(fQZ0=gNO*s2M-B5cms6PqNrmKA?ODt zgHfQ{A>0oJ97Yv^MMqFYLOzQ7V$lDKaPbC;jjIz1Tf|#ssPlSLWzKG zr%@uH`57d182rz|A1o?Fk%I~6kwDP=0#@5#4)_4n{EW6U9R5Wp5isBvWGDp}ZWoav z(EJkW7|aLVViDlwN@XCJaTSeJ@K>}EF!>tV$Osg<_%ayib{&3T0GI%VfvKPdTn*-f z*~0!i;sKMv%V5||^#5{UxP<^mBBg(z(SdHo=x$!Q_#$zZ^rXmnulZS)2(;SNd; z%q+p4!zh&0T|@+meFxJx++T{40~4_4pc;*EpTG|c0As24m;ok&Ici182lK(pU`z_WOyrh;x&&iD^V)C(6Toc2I*L*bmVtf~a6?^0 z1eSrBV3;`q0?jQH#d9JO1}1{Vme^GhvX!D(Pl7+_4d&w;@kwAYxCBfQ-=NRLg{~g9 zTEH?}Y`-KT#rALn!yFJ0m<-+kGr=-2A5=|7K%gDy=BOwEU_KZJ#yBBdu*g|aioqNg z*ry;ISM0ig#cn8xDd_+C?uueQ6$t=?!D3HENdS`@!2xvh!43$R4+bPb?~4dPjUOTa zW58T61H268gD=1$P(2Odflgpp6NC$D0u&_+%xnt3X(_nC7ESPU+=y+P1W?xu5rb|m z6vcD~QXT?5Sk@U;0VZGz#%?C`pdVNahJ$YSYx9+00=OSc1`ELquow*MhJ?&Q_+T`c zfIrR2q`4$DbXlp@DM2b6k+rP_ym5x$G~G!@Nb+I1beAN@l?jeHD#B>zlk^V4UW79hc7426_U@nVFM~Z1 zc6Yp7{S?5!PY&ixrJ4W-d=dSVUE0Znhln5m`hRKPI?01&(-i@HM*xUubyTO=!{KA9 zHJ<{-`#22H*rwps>=JR|AySI>Z>n7CvtF_tQ+8aZ)D^+t5T-XUl|m=t7KhM@S8Z>g z%hYQOI`QT+^(X9@RMUx9Y{}47h35oYBy=->q6_OKmu4BTxd?xKLHD*4_loe7;j-h)~;|q}zgtC#l=FQhoCL zR#J2GQ{?k4d=F9AZ{Zt#nkEV{msWi%wcwgFbXJIk^!Qr|--tR(wKAn{CaQBfGaPco&(Oh@(`r4IfX*l%m7Ppu&j4@^|5Z0G`wI+6Es z=uXqzjgl+Uv3?`c5&1J6--tkN&|_%1TM^aTB-Q6(MdY(dYTy!&&ANIbfJjU0?kFBV zTo$9nCjLSrH%X1{_rq>0>^MXOZnaga0@|_(LB(C9wcIWRvSJ#&UHY8IzoK2+ zk;H5C%XZ0^$GoPu+ofUL?LGDXPMXLwbaeJRsVyrYwnOSJ#i=T&*A8hAU&m}lEyR+3*eN-f#8_4+S7^&Q z$&UWqiJCFBq7OSI7nVczyQC)UGDYk{s#ms062TNg#cBYBDrH+9rSFG=hHj$EWeCS*%l%_)Wg{5^LG$WxOhz~ng zy1iR+XcK^YItzQ0rS+gXmZlNtu%bC-z$X^AXkkMiUC4P)(Mb~_X2Z6fn&wDTk%KKc z(kT1P`dF$8PaFX_S7S8FCg(j;5RdYpZhKIpr8H}g^qGm+N0eyp9_01P9_jO1#gOaj zYu=Y4evpQn#ClgKGstGEFIAa&x2ji}yUsUy#9ME&=oU0$Q*d!-ia1)bO{*`}0X z8`4}Kt)c71Ar+-HbTgrQ0G(GgzYLLDY+dTddR!t$DzT9p23;%R7j0=h4EYt+a0vQ1 z=&ghvhtL&47wc2eL2=cq49XHH6X00is1t#{fo>*rqEu7^EUlxBUD@0jg zsey@`KQ`*9&p8z8&>zvwAMBHYo0>PSFbp8LSEOV+hFd4-j^kRzGxgyn;8JWm7f{5H z(j*5}z^7Y8l;Oyod4Nb{p$mbZYPg}$P>w2d+?WbI<{bJ48)Iy+A`U;;9>8WH zY&e8247w6Jktf+Y7sFJQq}DLS!E^(wu)TPpDxJfqkaob`369)-cCHmuWE1#O3}P zX7Q$=K$sovZ`3dyg6V-F;@$@(b&9Tr{Q>Nz%_Txw<7;9+rCYv^F&Cu+*HD(5l1I7bd!}3T5lZ;lrA2j^Lpbh4(FIJ}PZ#<`F4` z;ct#$ODXH{-v><+W>6&$ra}3VYr8U-MT-!JXh`Ztm?=V6RR}`o z1l=3xst;@d(7m92`I4=R2%>tnL=pzVtd5}DNCAtdrpF`?6Y;9-jks*cQ#(@MW0-se zd`{CrOhDHk!=x=fQv2i>9@GwFzWy}%2}WqyzLyqKGrLXA&I!`w|%E0hMp zUrccjyRf^V$ULEMNGJZ4Y}f9WOsU|66pm>HJBdkf)O>1tQX1(Jz35YKUWeNPkc-~X zwK1WdM=$~W{iHMvneA~34`sh)H2aj~QY&Fug|f&*Ogg>j=qYKId(29_Tr$KT&ifl4 zSsKVi0s58KX{nbWwuYvk zk%o=VSo7avi$iZ&QbRWrx-{tY3krlMiZTPbl{Iu(&}CNBiLq!ublKGAtTcp&t);bR zrOwSF*L_N!Xub(pafd_K1=p%LLmh|XG7b8f(D$QNZ!qOITg!lzdHsGb@x6qTQj~ z3Z>Rq7QZi)dinchVLqh4&5+d_&5*2WI?)2kpv$7k=P~8<+*YC7GbHiVd31;(vcDj8 z#{zN01+?+79rV=&sWVU7MHeqf!%*E#f0lmYb~owy&uIElcv%uneSSgyE|yBQsacWK z&^_jl3T1>yK$K-T|Kd}XmxYKbpIjvMLg**p>EMP}At)vN;fc?rP>fXf=|d6HahlwJ zkz5_3{;Dvn?qL?~rVuXCe^Jk0Fp_&eqD{X@9a$FL{YC1|BOg=XMXY1e9@DUkNZcX3 zP{GJH;Xl+G!AHK^mplV zG@~uQqo^b6(edB0uq>yWLJYH|x4%n1JkFNt-+*&I^}B&#E!vJ&+>m_ilkF-$u6$5^ zs>leea_IaGtk25qE0yo721OI{x+!_ok9Dk6&|8doAEeK_DDfM(EzOaJ-IO}l%5bVw z+DK$sBstQFo6;9N#+4jyA?nlAtKH~_TWGL$zEmlg<9*bN8? z(a!r5Wx%5%X~S)_f|ZeU?>34ot}|KQK}li*=#J#t#w`jjZbW>d5luIAPA7;u3|}i@ zn_Xo~_+)d!aPo#W;&wi;D;+^-^^?2d+nWYgr;e7MT}6u!-7^EOsokhviPW>cD!Nj^ zA1{ii@MDIR2(MdRKZxb-tqHBWc70AE;MR>|Jbal?~MUHqgPII;c|lMx>{^WftQT5m%SGB3n+~Fc}yu zZgSyE2GbD`{ouE|k_R^*LiO)S_3L=UZ5`a~^s*0k8$z9-cMlj+sciTdq$sK`bwzv8 z!8e!Y-@_1+7DLDHA!O5GbPIIX;Pv09R7}7vQTkM5bXTb^lg)kPAZ|DX-j~{A0GJ@e zf%v27`v{>ZjyC-zHLoMeN4&vI9ZmP{qxQVVkmUo^-VN&d0FwpW^+58)UlacM0MnX~ z9vBY|mjiJbN$f8?3vwSwYLjHh*ckc?_k_`izc8g0?>S$H%g@+$+6eH06ZLVD`9sN+ zn@=K#hZx1yO`^6BFdSkFzHlJv zM}=b8@%VTo*|y71!W$f+$6<|A-5Y%kI&9bJ5215{Za;K&tLXxu%cXq?!ry#a<;T^5 zaF2#59y>rBXNd@;Q~tQeola^|6Sj zcn0i=$(2fw*c`1^Dk@f&(Y{u3#d$E8vIr&2fn!nDf&%)rH)+|$riFFJE10aMGTl5L=PS*stq zkSNhvLtrX}ZZNJ@99ygX&_Hpifj)Q=-rjzZ-g&VJk~VX2d5GDKAQLh9Ro zNi~~jh9$7+$T+S-7CQ0j+jL#!$IWgLyeaC>ZXK<7DRr|ig{|tbD{S$wJ)mbVF&%2X zf!e;3+B>Y<@Tq}_S~4Ai=DUGbywX1!&%DA6JYi#{GMVPT#!hY1*I1b6Q>WKbD?G60 zzQ#BawTX_r#zZM@6Fq;8$?F4Z_XZP)=*_g^jd-YK(QVLvKi=$DO|iwJAb+T6h!Out zy_$yOC4bd+y~vd(=2x0(I+5}a=mtVpZm8l3nUXo({RdM}^KDe?t<=*bXIrJRrt0Br zN=a|Am2UkVee)L6hNSQ4_FKuJUFLV6(jX#A8;%DHhxuD6y?=)io0(myoHXp7jVqUeOv)ig8{CeR<3)zk zF1l5YvdSj^_ZWjQ4|tD~jNgMlK!FzT72YEb&mXDY2gI@D$4dN$)4n6W;rUI*De8?psbDGo6JM~xE0-7g>T4s1U?1ME-3!&GlKG@DF#6p$BIceV0i!i*3r zwnjAkU&$X6()53^hm1Yfe=!r^P8K>WR^tv)PaTH+sKc~Whr(`sv{LNKpTjuyL5JtG zd48p`&>(lNz}&L+Fk$RZ6zq%J9{Lxg!23%V6FOPlL{N_02a2!)$MS4WXqm zZKAC8FWRBguWYd@9gMCe+RF|2uD(RWD$%CWF4GT{m`mr<6$I~`bNN&D#3MLqEUFc{ z?S@siwIX?Qw=2|A!N7uLje?gmg;y#S6Z}zyukr7P#NQD8zw`fiVe}<|0e=Al0`DLY!Mp~%xuU=@Cg*pg-P=7+8DZLa3B`-^Lkc5BtLh}=B+{nsO zZG+#V6iWOI#Xf=VbXTB1*;oPhX|g~=1MbijA$jOwRu!WY8oVPFSgEZ){_~elDmIix zSgV69s{Z|p3p$e1s(rSUYOS`mm|*;$D?;n?QCsyNVT9JXN^3K(ny+|Vn$u)!wTDgB ze~Hlt@kzb9nm69!7`;FK>lim`A8qAmNW}L>S8VmGTt#%j_0-lphf}?J>OhOUY5}lbhmBef+#?QCTIHzrG&gE%LE}Y}-*a0ku~0ji2pL5v$!YM+At&nod}%eNmCZYWCV_H8+SlqiCxa@vA{zcBmP5>LU%nv60FLKjC{V1=}W3E~KSYiyPWMXx#O10IXAEgrCY^#18Fy7F+MuLir`Yg<{svq}^`jwcG zRzGw`eaT=Hse{(Kf%>2&TdqA9tbW>uuN$S^zd#+wdHg7HS)_i1oEy=Z2JI*@1g(q?C<3mKopXvzw87yKZ`krnEe{6$ZCwE|7Azt;6@ zwGHQmJ+*;4aidCM_R14zi(Bis(DEd?V#_~+Zle_w=!Fu#+<9H}#+=sXsz^=efh_>s+-TFC9*Y zLHtb9yL_q`XGVHm(+Ula`j0xnV95H#u-L2(yRgHaI|6c-eCTu`FMpfMJjJVD<}9-6#} zK23wsNTNpEafzZaN){2)m>G+PWOxhqK|{z6v?+A z5Ep2gCM^`ex1f2_LV*t|5Yq`MbK@n4#J#ev3Hd1a@R;bUYeGGWe|t=PPas9X;CVuv zLGohwx)b6R0U3Yqq_`3N@Z*!>V!WAUS}}sRczH3lq?&rr8F7Z-%fCG%W|+gh&tvY& zV4iHqB$uM|1#69x`;8k(LC{zI7)2FksX}5+MFXh{_?6g3@^tW2!l$+v7~e$ z|Eg4ciq#D{H;__7G}rzt;=OC>Zjfql)MY@J2qVAyYT(*Vi+-*p&PgVL#z~4@xFF0Sa}>iR}uYo=QQHu8MDJW%~;F5n;kg%OITSvvltT>O}lGd8g1p*U60 zL*+xU6{#4&T^@-JW?9-)ime0(-#2CX+6G2HvB(nr6qOHUS@0BFD*)It(L{1h5c^Dw zC1obQ>zP>8Op5h3F#CCPDG-_STwLd1YAOW}e<4;fhrBnjS8AY3jX21mtQm4kjW`t^ z)QJkPS~1e0nVc}97ER0qH)_Q%Tw~qp>uQL%=3I^1-C_;>SOeL0;xLlt${*E<$#^Ry z#0zv0sWiehfvzLPMm~{HeAFm_j~1zIGqI9UEJ~XhPqGcqq12v`{C@Bsi3X6g{%}pA zElF8FcrDQ!l3;?*WIA7k&I+AF^7})kg6S&z^Zg24BXnt^Lr1DDtlD%6v-;|##nxtR z(mqG3`7Aq{gtvtEz8EDbe6{T5KWG9L-G&X`+B$fA1n} zP_nEVx-6mnRhYhnPH@N?{ziSLOT2OkJt>gvkx;mdE+tu`AbdGiWf)9YPW?&QNWOMC z%_XF21hidA<4M5?ShJGOBMBp+dL`XSQbs_|D(a7lejEYG8UgoL(Y2&x6ra1A{zvO< zdat20vJ@S{P(|Yloi=0ZM8fFJbePNkkzj|wi#F3X*sh~_#V2&4pmvEdK-X&=y46|~ zQV`-4%|?OW-A;+%k`>oj$P!B-8wIHS6!kiPGz5G`{T-@CHzYAIq#xvNm(59+J#d3!lYfa19r%;i@H&vGvD`b zT1n6i?b?G4Q!$p`*h6Ckk}ww9eub4;5)XM_ArtB2;L=x^AZskx{)Z-#s(3!!i0&f%0v)WuiA&}sx}Q{fLyybYVENuW=`!uf zP*1fYkb%y0PkX)HF?7l(q={YBU>IOZgLAoE_LTgBA0atHf zd`XL~x3M%C+TKQbdWh^YN!d5CC!i%bC9NzXf6g*zhSW++)l3$_1#lq%SbRx+d3V*-Cx~&`n9*gBba~6MN;b(%M^@$H$m* zx-dC)dSs5WGs^Pi^dy1XySx@FqN~__iCu>XYRD+in!l%_>@?xC@ z0hW8QK%6J;!4OH2p?yc{#GiYy{zj7I0}*etF(~S`x7h(S*Fl|GE0X66b33yxB+Zw9 z)tMcY$lh9>9KjN>!wH28y;wCV359c!tR<-kfhUm+-}C_YC@iud1o}o{&;&Cvi1v}K zVlzYFSQKkdQt4EsKq zf`F9S!3Gs8!(I%w%(t`HyN&$gLh~5JX2Woz4%37VX6KP<$N%cX@U@Rhf4-tG!@jb( zHGI$yc?*F3{a9<9S(Nr;)9~)eKK)gVC~E`JCe{mi+hAg?VQoL=z>7=_Z|dAz3!l8p zGD+rJ;4_eYi$eW85M>(;G#Wt|gd!l7Z^4*o763N}G6&cc&5R^10QN+)nWQoR++(nH ziUN3K4C{h?_`||MEClN)ZxHg~3+D&1EhMcipEQ^e!SQHA)5o=VCJfiu@ddH$DZzBp zhOz!6%OCzb3|n(Fzcq~QM{{k(H;-aR1hplH#Ig6WYdsLhqOePS5r=%Gw*h6RzdR`BmJ>=;S+gBkH`JgM@7v+-;oDewcgu`ECh_Zf@Qh4bXGYyd$G z^8;@o4`yY-vIxZz@l`Un>z7_6R`C%4czg4mVzGN z0ai_9tx1{#-!lXSp2rSi1DjH@hQeWPD(g*372v5XisahDD-|Z$ zLeKfCQYw%%pLHV@w)|i7*=&vGbsgcZi%=J^O??-$@%k`beV2k=J;uVu#prp`bg*wR zYH5KE@62ZbeiaR=hKQT0mNE0d08?9(QXZ0S9**g48k3oc@!m@q6Uo|Y{%$&3i(N`9 zet8uu6L9_UKn5F(U8T5&wQ(SMG7tWQJye+*0?Y+MK(!D(q^p4`z>M%<8?%RXz`i7z zj?g8W1(O0tn4FEOm#&AOvROyeG-Vr0#Kp>#ZEP^9bcFA>Vg2~R!)>bOI)HII%V|DL z-iUj%)V zN%azJ(x9WvTi;|_tzzSjvbmZ~s1Fy8GVBsd+QWup><+1F&*vUzh1d)E@Q`A5h>*Na zaQ`$q)rwBg@(k-ok~+b(GuRE;z^7+W*U~z|tutuq;h;Us+L5A;(BmvCHP>P>bLAoD zSgN4;0So-%Je!X`*y{p&i&S*r{VrfT>0LY5>mPPqUty}xFJg3hUpRk}jqxhz`$p_O ztG=0)PfgnQ67y^G|4m}m&+HB`dpUL1o8Bx8$?^P4EC`LykN>(!Sx&gQwy6*S!>N*j5t(^?nVQDl(IIO#~9XLXKl?!*Y!H{LrU@2Svz!kA6!QR z$6&9Y*?pB6tt=UN@0+Yx5L$rUEf$BX#FKBKnq_t7>u<3iaY+bOwwSfxQ-5XgIMnM5 zKmN|XL*>u-gSFQsbg8dIH1Pm9{s*erXsA#@0Nz)Mp0cb9biKpcklZeO!W}k>2sXU% zE{jn|DAGL^ND4Yb$9w28Gs9urJvL2+r|z+j^{!p(DO(zk&$!R7sr6~$CjKGoCg@7v zc_R@%s`iNW&_%wP(GDIxVw=$!q(8=DZxw+*T;a}N z?4l|%23qj*&sm*0?S(4#L{0L;OZE!oJMs#xM-RWhV$0Asy#E>-+5{V4v+gAO9XRuv zbs+gsQ1=?8!lS)yt5M40-Y}w?MWSABt!AA_QWRbVg}yZ{67)3~T@?vE%rFX)YOt~j zA|b1WC1DvaYmlm`7kJm9r;4d%!>~KwS&L(V^a!|8i=9TgIW7W|j;musNI?Y8ufx$& zgA67jxnr~SfJvf+PlmyVqLe{OdV({R+M_7_s1!^xd%!#@1(AXtu#-w}k<6a_G?k)M zA{-T@y#^EZvXfeo>^?BbPFhGRyTNTcBm#Ht} zRZj`sa>gWnHd2z6rW}rHx^AT!D)+GMvY^h3vFPrjDQl<7f zbs|u_O2SL~w@e02hE$H7&ixE&37XnuNLni;kmHl#v0x~(RGzcGi zyK_pKN-C0g>}e@jgRjZLvU8F*Nt()coRco$5=Iitxgb3uYZGB|iS!LgO5$D@r459X zC-N^ZOLaJINW`U8sU6NH`Hi2YtAb$S`+kvdHMn>R7;a0ea4h6_8+X2T-8wEJC-QFhq_qs+u;$19lscgg znZ{o}k;?5zN+SQYM#{zVU}c>YP12|Ek~-8vQkl%lb#g2tnX_P%i|hw+E^=p*Fjo!q zAVp^A2bC_e5dw^|KLoXqkCEazmb8vW83)YPz(Aus*Gk15ZWv|k=(oDcJxR%IHE~Or z;3~VLt!25$tsn<~6JK+LAKY|BDy1nFk}cfiH6$Tb4Y&b!lY0qq@VA@XoycaK5eB*= zf01|&#YOgn1W!CM_PIL}E1n78yUU(r-E_F^E}Jk{fQQ^lMaOs``Hj;d(Zh`1>miRP z;bvj+B|J~elG#YCCs{omay(^x;b0z4&g3K^OJx|Ju=B!%Rpx|le6^SS65n};Wj=Bk z9zfjdBli}1!BZbuoh=)E<<7zg800Gt#;2Ti_{x4HaXSCrSH2^X++?2DS{^H+pQ3?s zI4PdNdj-n4be53Jd8n-MYcQ`)s(aBwaje|vUMx8NB3AxfgB{_on`L*1Oq4}_Xtt>jZDVQ0D0*i_bNzS&*LQP2f-@K+8C!WjN%Yh{Lkq@=^RaHSWr@{e%Ehor6G z--RoiC@EL~Ln0Jhnpyy}Ba~KX%b%zq778uk7X0wFt(qRzgU{BG|ZE!S#j3@cn89SIQRi2dkBiS`^f0voc8}`&aXft;$F0 z{-Mh@#f2hEK|2)un|~U_?oe9d@L;YQtV)Ay43aIY;jjuz(x7aI;!m>EfaNH2NY+BW zC`XZqeZj(d=I$*v*9g8Z&;Pko$=BheWO%-^NlU60@ViG8Po4UMo>jh((F=cdMTsN_ zSM$eLl!JDpU< zAxOK<)?ih{_*0~FKlDJ&&$v+83CM*G0I2)pS z2OY9wsLlgHI|~?qz^i^gE$6belsk>3x$+gEx?dW29oSu`=O1*}#cEJTZ$uy|Ukf|B zUb^=z0)E{K8Qb1V_t0y-`Gks%P0nxlh>iIZZGkAodJBg~BUKK~0atj@8#y#V_dYrg z@A}=soErlydFpAXHGoT85h$ezKEk93kVPMUx{vNpndG^`x6v4vry^b9akS0_&+Mwd zx31SSXc?n(@@|m#(H09^x=$<+X}enUyIS(EiP1%PHSp5Pn$Fai-o$^6(fKQ0$@Q`h z=xgD3vK1oDWQ(j3qja5!kPQ1O^zQt_INcKwSy$TT`{C^-D8*YV2|B=~1@U$c2?;q54AwmN}M{K23Ed%0eFzSn!sg_5`WF1~Dcw$Whs{E2#|6~m zbr*Ek(!4j;n~Xz_MRsQ^MBZ?BNHr2%ymT*^j!mmy%0MA>rUycZ>zNiz^9L1&&T!A<6#UtD18V2 ztW?k8fWDaVgTDG7J%p7IRfO8mZ31EzP0%ZPp}Pe$b2ehWo~{3{vsVY}vS7}^ITmfW zW`!t42TN+ak6wg9YxH{9vqryMXlubvU8^_1@U{A(xHhI1!;h}jo7}DPao=6~N_XL| z#fQBrB41jr???m-0=)0(4I;*GGRK>PT)C&;e@_?%hc7vLAedlluw?w}k|P?Q1pz@n zIU2p{=WjV5swbZC^KUCeiW3_%F8)c)Xhyih&(|FFFy*eJ3)Ee6H1G%491Co{>Ze&b z_pAr%URfa$YUBX2esk3Ghrc=gD7?WJT=>J$sgV^2>t7w*tnf`%n3`7Rt?xMEyX*}N zN_eZ+mmRg_5do zyn}<`Z+C(-%b-AmyD+P<72Xe2lUfjbTd?6PA7PHgZ-hk~3_K;;FhwJ5v0y3(8y=JJ zM2ju@4l(GtGQ@yyU*W%+R7c}I)L?+|Lk&TAY~75Qry@q4K$|%`)ZirSvS3dmmfH?9 zoEU&sT=JPAq76>CEHq#LfHb=vGdv6>2{YiWXNClvO=dnb1j>=>vncq%|BULL__=2W zG0aPA9X;h#sb{jL2dn=@U>M7f=_Sbbfgn`oeF{RPVOo+ci|J_ zokXIB%>8WoI437(@A^S^&iK|As%ch;)N#PQZ?@A!oT^&0gwAt1Zts23I!@0~uX0vD z=~jqYE~awF6;8_u!C|?1FtK};(+e%ZarVwl$O%F-C#9R5IubQx=A_LQr!Z<qo)? zmTZ%5g-8|$-R68Bc>+=PuhcEGCvO>&zWltPG$D}3bZY~UAsoj;E8svj5U>^*5I^^_GNkxAy%9A-LCJ&FTXvt00?or_^@ zP>2hDTkxO|qZhuv4FeV!LvhHrPz4I?Mxbsb-dJD^QMVXv(-7iTVmB3XiBC&2E>kx< z?=3XqrWI~>K3#+nxe{-=7$ekUCA*dwzfcDc1JaGxP(}P!7#FBJhuc>ezhk&E0%J0b zkJb77yB`=|2yO{h<(Xuu2Acw`2f@Z*6A5waF~2{w-+=k&W$-;4j3Z}h=YDQYr-F}X kD^B2BZPeS&v(6CaWk9!TV`tm4trnFm+sYSJ8@~|$A88LcN&o-= diff --git a/src/ebpf/xdp_filter.bpf.c b/src/ebpf/xdp_filter.bpf.c index ed4933d..2eefcdb 100644 --- a/src/ebpf/xdp_filter.bpf.c +++ b/src/ebpf/xdp_filter.bpf.c @@ -1,28 +1,28 @@ //#include "newvmlinux.h" -#include -#include #include +#include #include #include -#include -#include +#include +#include #include #include #include #include #include -#include -#include -#include #include -#include #include #include #include +#include +#include +#include +#include + #include "../user/xdp_filter.h" #include "../constants/constants.h" -#include "../include/packet_manager.h" +#include "../include/packet/packet_manager.h" char LICENSE[] SEC("license") = "Dual BSD/GPL"; @@ -62,29 +62,27 @@ int xdp_receive(struct xdp_md *ctx) unsigned char *payload; struct tcphdr *tcp; struct iphdr *ip; - - if ((void *)eth + sizeof(*eth) > data_end){ - return XDP_PASS; - } + //Bound checking the packet before operating with it + //Otherwise the bpf verifier will complain if(ethernet_header_bound_check(eth, data_end)<0){ bpf_printk("Bound check fail A"); return XDP_PASS; } ip = data + sizeof(*eth); - if ((void *)ip + sizeof(*ip) > data_end){ + if (ip_header_bound_check(ip, data_end)<0){ bpf_printk("B"); return XDP_PASS; } - if (ip->protocol != IPPROTO_TCP){ + if (get_protocol(data) != IPPROTO_TCP){ bpf_printk("C"); return XDP_PASS; } tcp = (void *)ip + sizeof(*ip); - if ((void *)tcp + sizeof(*tcp) > data_end){ + if (tcp_header_bound_check(tcp, data_end)){ bpf_printk("D"); return XDP_PASS; } @@ -136,3 +134,4 @@ int xdp_receive(struct xdp_md *ctx) + diff --git a/src/include/packet/packet_manager.h b/src/include/packet/packet_manager.h new file mode 100644 index 0000000..d800a22 --- /dev/null +++ b/src/include/packet/packet_manager.h @@ -0,0 +1,47 @@ +#ifndef __PACKET_MANAGER_H__ +#define __PACKET_MANAGER_H__ +#include +#include +#include + +/* BOUND CHECKING*/ + +static __always_inline int ethernet_header_bound_check(struct ethhdr *eth, void* data_end){ + if ((void *)eth + sizeof(struct ethhdr) > data_end){ + return -1; + } + return 0; //OK +} + +static __always_inline int ip_header_bound_check(struct iphdr* ip, void* data_end){ + if ((void *)ip + sizeof(*ip) > data_end){ + return -1; + } + return 0; //OK +} + +static __always_inline int tcp_header_bound_check(struct tcphdr* tcp, void* data_end){ + if ((void *)tcp + sizeof(*tcp) > data_end){ + return -1; + } + return 0; //OK +} + + + +/* UTILITIES */ + +static __always_inline int get_protocol(void* data){ + struct ethhdr *eth = data; + struct iphdr *ip = data + sizeof(*eth); + switch(ip->protocol){ + case IPPROTO_TCP: + return IPPROTO_TCP; + case IPPROTO_UDP: + return IPPROTO_UDP; + default: + return -1; //Unknown and not handled. + } +} + +#endif \ No newline at end of file diff --git a/src/include/packet/tcp_helper.h b/src/include/packet/tcp_helper.h new file mode 100644 index 0000000..e69de29 diff --git a/src/include/packet_manager.h b/src/include/packet_manager.h deleted file mode 100644 index 5412711..0000000 --- a/src/include/packet_manager.h +++ /dev/null @@ -1,13 +0,0 @@ -#ifndef __PACKET_MANAGER_H__ -#define __PACKET_MANAGER_H__ -#include -#include - -static __always_inline int ethernet_header_bound_check(struct ethhdr *eth, void* data_end){ - if ((void *)eth + sizeof(struct ethhdr) > data_end){ - return -1; - } - return 0; //OK -} - -#endif \ No newline at end of file