From 79ddfa02ac5e6e2ea54a1524c81d267824433c68 Mon Sep 17 00:00:00 2001
From: shootsecond <2782457525@qq.com>
Date: Sun, 21 May 2023 16:16:32 +0800
Subject: [PATCH 1/3] =?UTF-8?q?feat:=20=E6=B7=BB=E5=8A=A0makefile=E2=80=9C?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 Makefile                              |   5 +-
 RREADME.md                            |   5 ++
 client/Makefile                       |  19 ++++++
 client/cos_client                     | Bin 0 -> 70912 bytes
 {exp => client}/cos_client.cpp        |  28 ++++++---
 client/cos_client.o                   | Bin 0 -> 129264 bytes
 {exp => client}/simple_client.cpp     |   7 ++-
 exp/cos_client                        | Bin 68976 -> 0 bytes
 exp/shm_4039                          | Bin 4096 -> 0 bytes
 exp/shm_4702                          | Bin 4096 -> 0 bytes
 exp/simple_client                     | Bin 36136 -> 0 bytes
 lib/cos_thread.h                      |   4 +-
 {lib => sched}/cos_agent.bpf.cpp      |   0
 {lib => sched}/example_agent_main.cpp |   0
 scx_example_userland.c                |  84 +++++++++++++-------------
 15 files changed, 95 insertions(+), 57 deletions(-)
 create mode 100644 RREADME.md
 create mode 100644 client/Makefile
 create mode 100755 client/cos_client
 rename {exp => client}/cos_client.cpp (70%)
 create mode 100644 client/cos_client.o
 rename {exp => client}/simple_client.cpp (89%)
 delete mode 100755 exp/cos_client
 delete mode 100644 exp/shm_4039
 delete mode 100644 exp/shm_4702
 delete mode 100755 exp/simple_client
 rename {lib => sched}/cos_agent.bpf.cpp (100%)
 rename {lib => sched}/example_agent_main.cpp (100%)

diff --git a/Makefile b/Makefile
index fa0922e..a4870a3 100644
--- a/Makefile
+++ b/Makefile
@@ -180,7 +180,10 @@ clean:
 	rm -f *.o *.bpf.o *.skel.h *.subskel.h
 	rm -f scx_example_userland
 
-.PHONY: all clean
+install:
+	sudo mkdir /etc/cos/shm
+
+.PHONY: all clean install
 
 # delete failed targets
 .DELETE_ON_ERROR:
diff --git a/RREADME.md b/RREADME.md
new file mode 100644
index 0000000..7d538d7
--- /dev/null
+++ b/RREADME.md
@@ -0,0 +1,5 @@
+# COS
+
+```
+make install to install cos client
+```
\ No newline at end of file
diff --git a/client/Makefile b/client/Makefile
new file mode 100644
index 0000000..78857a8
--- /dev/null
+++ b/client/Makefile
@@ -0,0 +1,19 @@
+CC = g++
+CFLAGS = -std=c++11 -Wall
+LDFLAGS = 
+
+TARGET = cos_client 
+SRCS = cos_client.cpp 
+OBJS = $(SRCS:.cpp=.o)
+
+all: $(TARGET)
+
+$(TARGET): $(OBJS)
+	$(CC) $(CFLAGS) $(LDFLAGS) $^ -o $@
+
+%.o: %.cpp
+	$(CC) $(CFLAGS) $(LDFLAGS) -c $< -o $@
+
+clean:
+	rm -rf $(TARGET) $(OBJS) shm*
+
diff --git a/client/cos_client b/client/cos_client
new file mode 100755
index 0000000000000000000000000000000000000000..8786a2c27aa539b29a4899d34164db5c5f61a4b7
GIT binary patch
literal 70912
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

literal 0
HcmV?d00001

diff --git a/exp/cos_client.cpp b/client/cos_client.cpp
similarity index 70%
rename from exp/cos_client.cpp
rename to client/cos_client.cpp
index ad6d538..3b0361f 100644
--- a/exp/cos_client.cpp
+++ b/client/cos_client.cpp
@@ -1,5 +1,5 @@
 #include "../../../include/uapi/linux/sched.h"
-//#include <sched.h>
+// #include <sched.h>
 #include <unistd.h>
 #include <vector>
 #include <stdio.h>
@@ -29,27 +29,37 @@ struct option get_options_from_args(int argc, char** argv){
 
 int main(int argc, char** argv){
     struct option op = get_options_from_args(argc,argv);
-    printf("%d:你好,我是信息线程(\n",getpid());
+    printf("%d:aaaaaaa laotan\n",getpid());
 
     // TODO:修改路径;检查参数
-    char buf[32];
-    sprintf(buf,"shm_%d",getpid());
+    char buf[128];
+    sprintf(buf,"/etc/cos/shm/shm_%d",getpid());
     int shm_fd = open(buf, O_RDWR | O_CREAT | O_TRUNC,0644);
-    void* shm = (struct entry*)mmap(NULL, SHM_SIZE,PROT_READ|PROT_WRITE, MAP_SHARED,shm_fd,0);
+    struct entry* shm = (struct entry*)mmap(NULL, SHM_SIZE,PROT_READ|PROT_WRITE, MAP_SHARED,shm_fd,0);
     ftruncate(shm_fd, SHM_SIZE); 
     memset(shm,0,SHM_SIZE);
-    LFHashTable<int32_t> hashtable((void*)shm, SHM_SIZE, 0);
 
+    LFHashTable<int32_t> hashtable((void*)shm, SHM_SIZE, 0);
     std::vector<std::unique_ptr<CosThread>> workers;
     for(int i=0;i<op.worker_size;i++){
         workers.emplace_back(new CosThread(CosThread::KernelSchedulerType::kExt, []{
             while(true){ // do some work
                 printf("%d:working...\n",gettid());
-                // sleep(2);
+                sleep(1);
             }
         }));
+        // workers.back()->WaitUntilInitComplete();
+        // int tid = workers.back()->tid();
+        // hashtable.Add(tid, tid);
+        // // 设置调度类
+        // struct sched_param param = { .sched_priority = 0 }; 
+        // sched_setscheduler(tid, SCHED_EXT, &param); 
+
+        // printf("%d:唤醒了%d\n",getpid(),tid);
+        // // 唤醒
+        // workers.back()->NotifyWork();
     }
-    // 填信息、设置调度类、唤醒
+    //填信息、设置调度类、唤醒
     for (auto& t : workers) {
         t->WaitUntilInitComplete();
         int tid = t->tid();
@@ -57,7 +67,7 @@ int main(int argc, char** argv){
         // 设置调度类
         struct sched_param param = { .sched_priority = 0 }; 
         sched_setscheduler(tid, SCHED_EXT, &param); 
-        
+
         printf("%d:唤醒了%d\n",getpid(),tid);
         // 唤醒
         t->NotifyWork();
diff --git a/client/cos_client.o b/client/cos_client.o
new file mode 100644
index 0000000000000000000000000000000000000000..4e463cb8e206154f5d5de964fa03903d7b36e437
GIT binary patch
literal 129264
zcmd3P3w%|@@&AE<BBDeKijQiDU{Nt9Awa-acwD@J0Fi)D6)z#VkVsx8H$1FXEMiFm
z{?KBJRV!NBqNOdhwo;!_QBYA+wTf@FR8df))tXwW|Cv3rd*<xf&Ao>N`#&GZ?)~o0
z&g|^$?BhK4sz}j<?%ldM^6KWC<9NR$>NuO~JhVW-1<t_k8Ql@x3jZ<OM&XkbJ_X^^
z6yHwaGZa1x;d2ykh48Nwe;&dYDE=aZf1~(I6uu1M4vN15;j0vX4Z_zc{sx3^Qv59l
zcf$X->GwMj{+;5xAp8f#-=*+92zOKbeF{IIa1VrgDgGgZA5r{c2-_(BDTM!|_-7P;
zPT{{G{DR``6#g5+FDd>X2=`I^zZ8B2;nx&LC1X>eu2J!66z>6HPl_J|;lUK|1>qqS
z?+xLh6z>D!VH7`{!oC!yLwE$mkA(1B6z@l2e+ZAF_|X&&fbbZK9}D4e6h9uqZ&UmP
z2v4MV2807Co(bVe6dwfPV2Ym%;ddxL1j17&ekz2gQG6(br&BzO!ZRq$hA@ZXxfBkA
zFpuKHDI5XeNQ&n}IEvz<DLfOxvnYNxh38OsE`$XXA4B0-2**);JcJR7Pk`_|ibo+V
zr1(S%Cs9~L;baJ>P<$$c#S}ju!f6yQfp9v-XFzxX#b-h|i{jsf@Is1T1mVRLpAF$9
z6pukThvKCW&ZT%6gyj^ELpYD(^C7IDcqN3FQhWh~RTQs=u!iEb5Tg5lf6is_r=H>s
z5GE+z2;oACFQRZUg-am3oZ{bu@Cu4w3E}rCeiejEDSkDCKcM(B2(O{|atN=b_zxjm
zLGdOCe?;+S3Rgn7isIKn_<s~%4dL|^zk$LZL%4?GH$wOmivJYCwG_Vz!k<z6W(aSg
z_^lBBoZ`1ZxQ^ntQ+Nl2zo7Vf2!BcOUqSe5if@4MPKw_J;cqCuk;30n_&W-J58)<?
z|AE50A^ao7?}6}76#p}Y_d>Xt;(vkgK8oKD;R6(Zkiv&3d>FzOia!G3qZEG(!Yvek
z9Kt6kz7@i46n_%Jrzrk3h1)572Eu14{v3p@6#pxP&r|#b2w$Z5-za>E!j~c3LGf28
zd=<jiDE>NyZ$S7a#ovN(C&k~U@Er*MPVrq3{)6K0LiirVcSHC-#Xq2M4}^Ou{vm`P
zQT$^H+bH~m!cQUmC&fRb@N)?NMe#2vY=`jQ6#o*!|G@u!@c+MrIo+WT;(r`JC`^N}
z2gQ3rco4-8hOigK523I(gojeR4}^zN{BQ{SQal~PBPf0(gx{igKMIeAZ~*-OXWtXP
zoDpsMN7I%2nj`yedgOzC-C75K-4`5vYjkb&k=@;AKgO~|n;P4q_kq~X*KkD#wnh)z
zo#r@Ak485m*c<*w4{4qK7?v1awl_W6bY(k^;!e{O(N#S$5^dTlvI-OpQ;hP?o>wH7
zG1E(;SMM!`l%@waeg#aL{<IE)@@R99!9zp=k=;2h(dHWwZC>tXd8uiuC@|WzydB^U
zSh`7%MprGLgEd%nm@Cw?KDj9MKJ4fZjRh_FQk#}<7Oe5_n7<(Xn5Gu&i_U$Z3+Evx
z-Ekg9Sc=rDvWqk+Yx8nUxDT^GgxP_KOVRu%OaLJ=Kt#bnWK!v?mZSRR&#lYvf!tWY
zo`&eE8(Un`0+Hh-%yd6gplH=E5qWq3WFxU2D{6WNJp}N5i=bP#3E~^wfVhY<uy_#2
zE!7osnc&;4S!jHe_|bRe_mHiWZ}|=^uGtM_<(ifY2?Hqdd>?0-KrV841Z{3HB2cK*
z)p8TuwEO{}X}(eXU4?&1n@!lzqPAO?Zvxn@*Nqr$7BmkX3=m}z`I;Va6Pg|cT7wNk
z{Y(<*wOA#U>efvu^_rHx%X|BjwiBgoUM>PvTd6b+MWyXIOXt<Je79SM2vixQF-^U8
z!5V*kzpEafxi#&GHqY2y9zCs}=#Gi$dnRMoEo|B%?Wm~f?|TkLEZX!Kh{kP(<BqUU
z5(-M?N{?Q>1wFt;V=ngl65)TEBkfUK>VT<iE$BrdbRzhTNwU5oTLBt8;%$hJgZMQq
ziL>PIv6$BMs7ofA<QzA5dvsO*a*<d(K%}nfe}(%qef5*BcLUFc<FG>l!cWX-6j$(m
zNmQ5fx)Z3OG}ILLm##EhcRwl^ZrzP5BbKcM{OS<!tGhuLJDX;_-W+*-c}wEpW$oP(
z$L`4oVn~oJ-5*Gyg6VrkNF4nVHcNA4CuX}u{7l<(RP&72qs^0dy4ge@`8^~FPaSQZ
z-A;8Tk4~*1s`a(7G^X~ZCp@n%b+v47hLD(q!*y1)323OfdVn5T4duWglW`e`!r~Im
zD^ZLsG7F?Qu8aotENf3o)We^vE??H(JrRXJSJinci@S9WsBE&tSBi#HDmzX5Oxtrh
zqzfG$s~Q$GFN~-Gq}g+rr2h$uZPO$(SkJD2QW}!ktcdDW!FlWM>)OBmT2~AX)MWM9
zAb{V>hoVSYn^Kt*S(2GKD_Phyt3p(3{M9DA1_sbp-0ETO(bU+!?8<%J8qd7?N~nzE
zH0FA~)*YOr>xH44CK69Xo8^>3WML-s5SHQE;g3N{vmZmIgUd%Rs;ys8Su;N?E2}sD
zEOoDps?yp-X-#kEjCi8#jI!E>Ga4$Y@qcV^IcEFEn)UBrd&92#t{q&CGaPZvt*x!f
zD4Gy0ZK#-DI=3o**7WH3!YLD`o-=y%nDX)=l{JZBxv|9141!O|xM)#jqC)=6I6DJ!
zoQZ!hoBMONla+NwRps0>DxlD;3THulNyfmlGqRn9@v=m1{piuL$+7x)X;oEiS*)_A
zAzq&VNlv{mue!9dCNiUHVI-zzb2#skz0{k)2~^mY(!Oe9g~&dR&Dva$9)+HA0vcoy
z{%D>oI<1)JM8#M-=Id6_``2H0^Yiwo`>tsTN<jX5HA~@q$$^2Z?y0w|at^K;DtE8)
z!svvS4+(0F#h-qQ^YjzQ%&Z7_WuV{UbI*2|d#-Xv6SM=-$6!1J%a1mX7Q!xT>jpBk
zdn2S<2PS}OoEfOiw&<uwg_1lC8gv0-sdV&l15hxahW`Tu+oo|n+@Hc%l5CLb|GBKC
zml_^O%d1@nuS!=M7D{yeBIoW)XXWucC}9OixS^?WeY9!DTCPDcdyj00E^7f7PHwk3
zvf&A#%ni*m);AURf|_iA5uydcwJK8+bbWvXORsHL&A<lP>~HQ3(N)FiF8oBa>1ClH
z_owvpP>@&u2+n8R<wauno-FJOV(#K)5(06F^$Cj@B%vD|y0lwQSVw={4P2A4Pq9L{
z#-vvFxYh#v+WY?50b9DJrSZenzMRx&pK!Vv`j3ykpqpF3UMxUKBk2peVF8|$gf|!T
z;Aj$ClyalMN~6qHZRwz@%(+p=`Jj8x=MHxM+r8)g2RpZ>VSG=I|8{%tU}sq`&>-aM
zR|MfjJz<|^S+}0Bd+|WGlLU@w>OUYi5AJsCnHR$5Q`)(2_2{-YZ3yh6^c?tNPv_m9
zPyo)<#Koz;zWJDLeJgq{>UMp%-mn++TWm9#QE5xgU0}Awtr-0PpKD=1gRV?-0%V2L
zWYPV)gXM|25}`X?6#88Ry#(2v(Mv!M<|3(qlC%!<gy_O)0^79p>*q~Yq|c<W8MhXQ
z*|fpBXiQ0Q{tfDo+(oFA03x0PwTE;ZPq4d#_PRxz&c}|AROzUjXp;!rq&y;Rt2?7-
z_KdzJ3ch9=2-m`!$aORTQ=i`&+3B_b>()(=J&e;M*FiLGjW)drC2f}eVn?*O5j>0Z
z8I$36WSiLja0fpxpV^lb>=`9}NwX}~a~v{hRb+?a;ibA|3%8<d5e)#xy`~wvn<noP
zI>OPeNvNxN#;zuz=H0Mulcpwo!kL1WF<)`IsZE8dsg5k}vz9PkKsH}<uV_<i^ptJU
zN7|J*fC(0A8SegcxhLZ&>(m@|OF^r#6(n`$jg`=Wf!S`?-Y|su%&14jVsNLYe_WtJ
zn&7b8Up$iZf`O%%$O5C(o@|IQT3jOl4XLu}5%=e-td!Nku{Hw-a&ET5vw-UmPQx4L
zM91iGT49;3piC%q*z$s!lQnA|;Hx(@!>Gsl-U$8>7m9)L1Ut8@G%#LasX><pd6IZF
zHhxh(n;LgD&Dgo@%3V(55Va<F<i3H>oz+ja>nQpY^bu?nZ)(^S*(X{FY!<dZamRCK
zTC`hhv$MRV@pQ@!*1!|Np*$j%b8UV9a0E=;+#weC6u?0AVn#)FH4ZW)Jqm`?G`5G>
zLD=)1)qA?F2KLKZx`6~@*qGSMbu(Xl0(}UCeE$Mi#xNbIp+MTXX`BVgOeFpmTIFsM
zh+c{A!AlL(=cWJS?Vp5Rv#;5pJ>HpM-sWyg8v0B+^ciqz<{5`pF6)u1s?bT%5TRep
z!p_XPaB{A4-60&R>Yi*oQZ11*CrUa5s<H!QU_$`f5&m~@?RAPj&F^B+0V;_Fk-INO
zD(lELe7;s{lXlfmv2th4jR)ofK%v<R`Y|;+MVDRK<|K{=k)WAy8Z;S3ALXh|yqQmM
z`?ptCa6!klO|o}H&rF~R{5!}ZOoz+ERi!y&8i+e`y|fW13&D1+0CjAD!Fru-`QsWR
zZNSSR17;?;^1*hEY;&V9<TOQEMO^ydrpTt~su}P<0;MYxgluR?Kn*J*AB^MPPDtJi
z;aYEe!l7<QbXA|nX;!o|+6{*+kXmUbx-}wPozMZy+Aed`rMR%Yiz3j^=4@b%ytYM~
zUQsBrT^8Bgt3yf$C_%c$R*iB`ZHHuC&rnoUc=SZ3pEVi|HUm`7Q;(}|Q2Dg<=xH-x
zrt@VQWHV#|^{0#Su%7M$7nZI4nCh`LK=m+1gNU~t?RyRGAHKg5{-Aj&wJy7Ivm-_p
zXhB0U$}094s)2R@0_oKN+k+io4;H#`nLg%rg4AZGVy1$%g)ZzLQA~X`;LCkO)@~T(
zQ6J3(17H+vj_f*3jMBj|((C`4{|`T|NWZP@+8bxUOu>=iJpkF)mA4nwb$dd}sdjz1
zGPL0c&^Owg9$oe*bf6=l^@FQ8|CBz%=Z2;4?a<#T3ZtX#a6aJGRE}l4!RLVy%|KVQ
zLs_ewF+TBdFEC^>CRl2@`T~ph%^b0;C`bkUsIdjg+RQz&zN!;9Gax59p;I1<HoXeG
zTX0wHh8FNyec%`LIq9UZ15;chMgQsUCV}9p1EDkS1_1OJ(fNsXRAguUkvg*QaE|Qh
z0l$EX-z}57J6K<7LYl#{(MqaK$_{;HM-*<%<ATb+GL&;Iv>P$@_6OeWuDPnJ?CB|-
zxyKpw?6;RDyaj~+am<FIj7A-7>L%eCq1m}&cY8m#LV>MN7^v~DxQJ_d(=`Em9gL<Z
z6=v#l&`hSer|d`2g+yK40Jjj41NJJfrCG1mnk2jrVTxnLnglmV&8RzQEcCOaaT5=y
z`krHW3(Cwe9JfRL!9324v^Bor+Z*I|ggJ!2QwC&VBg#silhsO!!fHppFe<i#kTW!m
z+&%D|yXUJg3$|t(cF<9eHXMX;(dGD-nXf+X#82P9VKVGjcc4zxm23ERaD33V&<RC{
zqzSappBl7Hb|bC51FK+-U@Czni&jmwq>j2KQ?Px&V~jhpGLnbO=Gv$>CTD}8?BK%&
z?y78tH8fs*!JC7BW8)KU-L3+MunL{8GIz8r<DDFDOf*%<?^0RCqN5^heSg~0_s=ab
zuET~23{J-?p-#lqh3@!3-Vubt?Fg!~r$&54iZ(&iXzRLQaImfm#>X*y3tRuf5q3J8
zVNuca2s{I%yz#Ov8RCHpuXeom`1Y`+H}y9aDjoFaj{i?YzQ+4tJKXUE^~y|Fnu{Dt
zAeXN-uyx@70bK!m`ZT#^sF|k+>6>VE&D@dH5NqX*%k4PT$F(zMqr}o1(AZ~ill~g2
z?!oF8uy1U!eC%9MJQxtHd737-Kx;u5*}Z49za2HB!__6s=WzUwHa+JW`Lf84UN9i-
z#sO&u3`nhw4?qmsp3jhk*9R4Qf(6BpB8-Gith#~ws0-MhoS3LNr!SY_zY3-(f>iZ?
zxb=273bW@-v{zM#m>gk+RYp-2H&0-tq|I$jw#IBCpl@G(%e_NX#sJm#nrH8fE`KeN
zF89x5xLVVx(Y$;X!B-X?3#MF@M{g(|blEPo==U5Ttbap~_dY{OOk?_(&1Oa7egWQL
z@_8Tl*(RlM?<jzMsHQZ@B{~v}4nlmDQ|zvK^_3NXZnmGh-EMycae-9|0(CSy(<}m4
z`?3d6pG<8f=CeN4$kKbuM)SI*0Wq|m&&x@@h4rl_gVaY}*70%shFVaKL#(ZJg)vH0
zn5RFu)3FBpo!L8i)*x$bHXUI}*vz=3*JdtmS4e6Ln!wf-ick2IcZXU30zGp-AS=eY
zGV7}-)ez;0^j!e?++m8gCoKc-4Fyfk(>3M;eI=DLScXE3wNk0d)NrFT#Y+*(qSeg@
z5H?*H0DE>u{HFfp>m8Dsshj5o)u(t(DM^e-RKVk7<vBUAl0<1D9;>Xbt16sQ63dSj
z)-0@D5U(#RNeoXk)>Xv|Ctf&Z)VSJ)>4IQfUSvwiuvpHhN%8uccvVSRMZCPRDqcT*
zNnJcrlE|OeSW}j$tgR`WuyA1{;y#H6AzWS?@p`a&C#!3+bkD81?v3^6)LfA)fEhd&
zRe8-|@rG<&T}X#^ciy;hqceugnA=#BXw1mT$r_fGeR@u#_?h$l+}y0}ysVs4C;@Dw
z2mHsoIPi#zbKaC0_zFr3VrlRnuYPXebh~_-(`|8jx8wR8+-o&F40Al-_#dyM@K5CM
z^lQ71JM5szkO6*T+F6LhbtL|g>4jeU#fZaYOUJZsmlqca&IjL&KaZ3AGvLP{MBu`Q
zvr%TnqtWBhf;e14Rw+Y?m%dY^I?k~e%JlQSbot=V5S||M(lhA6Abez8(J%4R3n=|m
zo?hyu&!P00JiYrAkpX31O6eIqeWpjhj?&@bCy)PyUV00qpUBfMaMLpY+ezuOd3t17
zTKB158TkGYUZyfo#zB;Bk^$QY-wVSFp1t+A6Y}}Q<5Sf^Iml-vrJsU@$+nu~(Ql-5
zn>}u)bX!~OrSzkD`EFAP`{_fSLfjdb{EIyPLn(b2r@z!oFQRmt9;=e1uk0Xw0Px(%
z`H!Lg2spMuF{K>?9mUsICaz3d)+6np9v~*_xQ+5Hfw<Cf_c~DtOivfY_CA}PB)yo@
zNAdFA;)RauC_Rg($2}dcru18QdiNiT41)m6r}PgXE~2uX(AHk}%Gp8rrufQ<sCu?j
z`e{6Uu17xr9VT3+w#)#$h3L<RxKEDmQBery*+qGxdY-F1K1+$u4Uor?ZQ6a6Dq|g`
z--_wHuK(wiv4!#!@jTtfi454LyC}Wbmwui~?{N?&IL^8Fhw-=!av=R6N*~12FY@@0
zr*vDtDW~)kIQ<Nd{u)Zh_dyi@?*CEpt*3O`II@M(2lDb~dFAg)Lf_+HB!qY6@sF(k
zbdP=zrJHO4^)o(6dU*%w89?8M(nmtvXG>tyl^_Q4*pQ@*ZInI(@~S#upKzO5^u4{5
z$K)R~fNTv*_sK!y8Rp5x!5^*){3CUReAt*Yo$}c9m7w%oUItbaeq&wNP&&Mg>hYN1
zrQbv8HXrjMrQ7V~GfKDlpniuSV|b?)|HwW$(c_;->4)=lHt(5E={Y>T%A-$E`gbs0
z>hKabJp-UMlztUYM;&8_1Ppbwney1`xP#Kq=4B*2`gTem!PBd~^Z~swfpj2cq&7f5
z&_eY8f-%)+D<Egu?(U)>lyeT1W9yqsDcx3&b(C)N9W9h@tH(}C$G)X>4Km7p<s6C$
zj$@<GpmZDmf+Xp4DBV`SrIdaK3L*78&ufQuly2(_EtH<i=~-XeN$IEZbT&VA`d|W#
ztN2ISdV|M5gVImq=}f)?N;lcEXn#t#>2E2ei}|_aPh&#{@LWgfzvBF{FWlnExP|ge
z!aP!kkmpLsk^#^zO8;0(@BX$|MlbO~ID9)q%Y#b|tj7>a_t{a6M<1nhlO1IMeFde@
z)XMM9{KiVkV{5C8ly2)w+bO+(^H}7`xR=s>b)deG0W@nU9sRbiPt$q=^^h%`p5xfs
zvp7k59i`jsWi_SS{MIH)H`xoy*GlOkkoLrM+?FIgU34_~CJvOP`UCl9QGZIe`SxN;
zKaSHg{nb&rsf{y$W&lg~wE^q1_fVdbk%zSR*<L%pNa;2me@5wNaC+9K`-#Us9Vd&Y
zvpISmrJHOWbu^vQi#R=-k0vO6I8SHe;~GjAZ6NE%<`?%+y3Gb(q;%o4Bt4tkf0l&4
z-w`O7-Ny4M-R9G$Q@VBjL+LgfT|?<MpL`Fc+xozZlx}OE&nUeTD=GEU-Cby7`}GqQ
zv#$a3D81ZA?=A>30Gm$f^LhGtxDM?ub~cd5V#;$m&r|N%@LEbY*+>S^Y^L-IPLJaP
zvy;~;kIhc@QM#?2j{g=GZr?jPi_&f7U)(`@29(=_(mV3E>pCa{_1KameJ7>c`nucz
z#Qg<j3v6#FgEk0-s-&%uKg|G=0!nY>^w<vby|ygxpo~F4*N4(KL)_={u$;TRayC*v
zo4&Vqzz21;m(p#1rB8pXgyZ;Z4rIWpApKBExA8Bcbm3m5u4vAT^i`B@(j}&^Oj7<v
zO1Js7?MdkOCQ0ve6bJ#=MfgX`-+h{B08xKRAIj6qy!I)gbZk>a&-MwbC|!sl%V+y*
zD=FPHHX{FxNz%7d`gxo`v>$HQBK=-Ux3yoNqmj_=_l71(FQRmtKdGX0+g|iaO1H_k
zF$w?elx~|l?WOdyu#!^$pdXyZqJH`aC(uFtDLtRl*RuAfbX)sXQTjwq5B#qn{wpcn
zT7OEn^{?$o==V~(X`LYIe+&xdI5ztnO6j)#TSV!?<x2gseS<1Wx7BZDlJYkuq2Hc_
zelMll?4yq`O!&40DnZK6=AA<+{Q{oe-Mt}%`YWPzn}4mMbX)&eN$Iw+Y9poF^uL|b
zZS&&2lx~|B_YsqJ`@C-`rQ7I>lF(OCx=sF-lrEY{>c80SU#N1^g<GaQoKL<srKLHK
znqav1_qYXrB7oymxtrtR$WLBr;>)x0mmA{Pg!yGY85R&uw_sE{Ql*J6*J8|nr8!Uf
z0s58ZJY~V3w&2?>_%jy#Sqt83!JoI_FIw=IEcnY7{1prSngxHug1=?K-?rfISnypI
z{9OzFo&|s3f`1UeCj-)r*{!rI%$Vlv3FLS24=wn|0sLY>x<h{vz768TD92@l-ytTZ
zj&lRy7^FF$uwPy@&H2>(!D4C7XY7|3O>;i?ey~`Y^Dp+xi>5j4-VYW_bN<bKdC@fI
zKi&@(OLP9qetFR}=PU0Ai=|-`7_Ky@y9F0_bbJ&y!!Ojcu21wxi09G0Dlx_bb}W>P
z_&CC8`^Nb$;pY>cLtOCNshIx<gbQB{Y4~kU#P1~hD$0*RnsX4O2Cp=ymj&-_!TVV7
z!!3AU3!ZMlkF?<ZEO>tlezXN2V8O8!f>)YzyahkOf@fIpObb59f}d=`hgk4aE%;Ci
zo@K$$u;AGiJlBE`3*fV0U_|>Ia*(U%d{Xx|!sif<<11drLTAMM&4f!kze9A=uT=T8
z)#dz=^50GQX)5HrP55@gf8`c0{-!y@RXGfX{xZUX=Ued67W_;LezpZa$AX`0!N*we
zu@-#11)pHSqZWLk1)pTWi!AtL3qCb~7sB|2_E3MY+fuT97ZbjcaOpqS5&km`-$}T<
z-+U5l_%!GI0N+92Pm%A_RF3q+R};REaGKhZU6lmN!Gttth6SH#!EqD_UTMxn7JRk^
zk6G|i3tncy;}(3r1+TQ=3oLlG1+NX@ACUf!rhDD8-A{vlj_oy=aOr1mCHxY?rTw6G
z)5KTfO?qw!@OASyTJS{{e6a;zV!^*>!LPL7S6T3@E%-7EzTATU(1JHv@Ma6X(t=-S
z!SPAW;FadwV8MTE!EdzSKegaDS@4@J_^lTFHVb~c1;4|Bueadv^*F<o=4`OwcUka_
z7W}ss{C5`o_ZA#a0SI1c&fOLqXSu;E&B4<Gf>)YzuLb{$1;5{dKWM?l=S%{O)7($7
z8t_Lf<>1K#!3*{)EI6K65WHaDz=A(*!M9uRXDs-0793AN2wrK<3l{uu793AX2wrK<
z%NG0<3;wDF#}gKUSDN#N1%Jzeziq+avEaKb_`4Q-w*~*eg72~5A6oE_EqI#+#}grf
z7p(U!IGz>}ykNa=!N0KJUs`ZHUBZ7o1>-pGzwIDcj{Eo%*7bq>uhF=_n8tm%|KaAx
z(<y>inu8}*1g|s)Ppt@EY0e=Q98a_eUTIDr3yvpU1g|s)PrV3UX%3!%5xmkIJPpHt
z9SZYQoEJSydZ4Xx=Oi(Ig-Nk?oh@)so_3utaPh~NGFL$KAQDSy5IAooH_@H1%UuwU
z;02LiuIfDea3MF{;PGImM&JV&;znBpE^Fx}A9@JJ#T^O{gxFw#i=BHPK1SdfJ`8`{
zCh&m){62wa2JmBhBg9u5ZkCw>9~8)cr@#jX@XrJ;S0P?<pF=U8>j4z261d#$^OBzy
zc%BDP>_pLo!vpxW0v{2;KN9%J0G>DuAvyc@lHV5iC=a06X~INC2k<I^pBcdK6!=*I
z{BU7X;tr56ZLYv4_%Qt8K1(z)fR7d?I4OWH6L@g|e_7zT%j&-d9)Z7S`$71%Lg1GK
z@K%AB1@PfVB2*s07YV#3fVT*|A%J%iH}4h)@M3{q9>ALfenkL(R^V3#@NVK6grxy|
zjKG@%c!|KT3*a{i{Q3a?s=(I<@RP(%&6@&vOyEBc;I|0;wgA3W;J*yuhaQE{uLAgZ
zf&V&yFBkZo0sJw6|1N;13D<T{0RKMVne0B4ActJn3VfT&FPa;E-68NN1Ng%Ne@fx!
zQ0x`J2X@C(liW+VO^EIUT$r>>pzw1`IeozeXFA(e?&B$zBk*SwF4x@=3;tb!KdbT&
zq1dGYe^KExDYgu7lbk=cl(Syot*V@{6uVd8&nx^?iajInPZhp|Vhdqt$#h;)cm~C;
z1KcFfu`sS33FEK4<VbLvDCcDfyYJ(`uT2*G5rMy=@=MQh2q@OXHy!Xy=Y5qQnonGL
z0^g<ZQz%v<@Xr-4?dm52|Cho?QEZdIUsJdoL7%kX?+E-2m0#-N6xcw^bb@%Dz~55&
zzoyu41pb-ArJNrM{ND<{g<^+*L1wc1L>~}7A8?c27K;2qzJCz-JF0vs{}YySUbW!w
zigMmn<;Z^B{o5$#dkU9!c#6QK)btDo<T@L0v@0pcFrvIj<lm#pk?nH7z`gri5^uNU
zp9NE;Ovk&=DD&SX@UK+)r%|joWH9BwSl}P4{IZ;1TkxJ4=63lM@|)VL9dOh`6LG-z
z1o8T>C4Y|$b2)u1_z@QTC<~rp!M_7|Cc7^=#c{8(mi$qX{~)!lxs~#76nHO%7ZLs+
zf%jH;G2zjH$hWV;#V`kH_X^y*9|z4Uu1^Ghq{`oeVtq2rdOH#DOvk$qIEczwCGb9~
zoO2036bv@gk)^_?tqH#Xa8vuv7WuvVfU>{eV#)uY$lp$-(zD+1>tzf6iNJ$?<1na5
zrqf@^KaffsBJlsH@@3DwR^Ugg{8G+;3w)5mXAtF8FvZVwhA3S2_a^~2>EXnaG5@J5
ze+88@N8tZe@<_Y-p1_0s^fiGGRpmf85!Zn4VENwt!Cb<x6!;k`zg)TfRp3E?aySg!
zne4v#`BcsvfoH37<T&z}C4YYym`rvuN8q`t9I5BW1wKsSS;Th$C^nPb@00m25V&{0
z?`+Edq`=Qq<=}f@cwGpNF4H+%;R9XR*)DMJ{+%rUoS~TiT$Nw;ugd{9weJd%e~ijM
zg3AAez`gs|;I74Wzone#E%`qXxOcx>w)@1>QO+QKm%zRI;4=Rqpx8`ye_Y}f0zW~?
zFYyN~c={Pwj(6XDB-Lw?z`gsJ5`V*ze|$EUlNsQ<(SrBO!TiDg_%px<il-@DLBK4<
z)ekyCrgO3?U-r|h1wLNkvb~<N<R1wGw5h*eE%0E!epKKSRQb|=4$H%Gq5=H70-vaG
zX@|E8e3HUJjpBMv;6)1WOZZ8{vHYNam?Q9@e|TKrLH}?JC?wOFtjY(qi0k_TpQ>=F
z&nE=#-G`O+{aoNBD*q%ZCk}>@>3H|$A)B}!7WinDU)C!>AM?*p_{Wt0#{!?J@Nt9>
z0tb~Tp2l$jX@^$}{34ZK^4%ry*$SUY<y<)0+~2DJ&varcztqEDE&1QF;2(=}f_|y=
zOf0`tl|PW=`K7?U`?<1Sea^!C!G2dSaPK~^?AP}RJZS%E;7Bta@BXiB$9jP;Q1VFp
zQGo~T@ThaJoNARHh8uA$7I>|~fm~cK3%o($QlH11i{&&b9ELw}RSA5N!e#mQ18(xq
zuZaBK{ao3PJ{GulKUa=BlM9gV_f+}PPM#C^l?pF%#c?K#!TeV#9J-ab9uxT03Ww>6
zxCW2K{NDXssn6>K?%l^Pp!_>5cqSNprW3S>CV>ar{jUP|?ib7X|FPq-9PfUylxLa1
zz5B%y|5V`3s$SAxofE-wRx12Nl7E@NFH^W|-`xVgPT^9|r%b?dg88o#c+gH-1%87n
zN6IteJS=Cm!YfIh)dK&q!pjN&NZ>ard_Lh*qFByP6%NCzxNa4=ci&mI`=N!H|7MlH
zg7S|S_^k?;`uw%PZ&SF`+g^d+uJB{2oD(Nv`N4Lq5cnM`zbyYgfv*qXCxS!Hbbh69
z$u}nO4GNd#+#&E_d;MMDcLnl~few=CY*e`HcQXb4TZO}RjkxXw+|++xv*4eJa(<`E
zk?meE8TtNR;f+-O9Rd%w<0k_DgUT<<nLY)}xm)3zshrmY9&F!!Q!&4HA6)8fmcYIH
z;IjNR0{8BBOZ$09;P)%OvYbPTvHS-W-k0Q=D)6BFtPyz7ezpqSyFV`FNrMT0Cc8f_
z`JONEpq*SV@JEz9r;$9*3*5VJF3TA;4a<LA<(K%40{8BlUqt1!3w*oE-=FXaC0Nd1
z6%O52TsH~)X@w6W{9S>2_uq#Se%5p>=LMBt%5#mt?^U?;+dr}38wCD0m0#-f4S@&S
z>!caT*SnuC^VbXfWmS&skG~hVcRyYFfma0{)c<i8VEM1Aa%8=(5V&`rUGjZX;BTn>
za$GKkiBP8Vmcn7$Ag*5t{27HyfBvz+-&Huc9dTvP!g7N7mk9hhm0y<gCky_Gz~5H+
zrTjC#i{<ZDxUBC30{=kavcG&O@SvVYUWnxc^*mSLdsI2H{EY(tP~qSP#dRDQa3&nP
zNk83px8O&Wz~51LK4sV>@J|%}EyCL@`SUKu@^`8HQg783{8s{RQ~9Oddd|jjg6%ay
z;Ge4evcA6%cu=2j3*39IK$hSC5-dMhuNeaWJW&440{=qcvYdASABeZY=^8-c#W5`Z
zOO^j@!e17+_Z))M&$Kz1-+O*Q_Uq>b9xP{asd+q#TkvKJeh=USo$gBhg(PRzTyyym
z3qBihRSFdX!KIe`OD*_X3;s*MGud+#(*GP*hPd|}#Tmr<Hi3K3QONc>9wt<oj`tje
zoVVXDaPK*a?@&3Jam?>MM{xq-w+q~>vCKbU9_II+qmcQR3fy~+LdxU7G1{@Rs>*mx
zBCD*f&WT-Ek|@d<RaY4=i!Z8dh{wumYZ?;ujb#Z+8YT|5E`@`xW2N=;U2sI@{F>VO
zxcehN7OSkStf@o-I`n$VBysF@Syf~qfbfY^?OUYdatitJ*zk4IsncWToVnJVIeD=O
z^o7&d+|q`4&al{62x8TxHKp_6qp6%jBsT{R>8`0w#NyR;i6t@hY1EROSR^uc+9big
zBr$ScZT+Is`f@)p2saHXku#z`UR}E|4u^fui`U0%%HoAco|nMyt-8{Ok|}36$b^b>
z#i@nwyrMJ<r<Ei|#m3YuiItZoN|j=AMtaq)D6J`n550;HyZWj*N|cBnjg3s3#ET*E
zQYj-R8ww#MMtrhBk;C8{wK@5*$*zuLwRQ3OQvAm3epDZ2ErSo=CR{ZJ>kXVn!a?lu
z`Sqn$u347WBnsyi&CP)?*b1`>r|vvpI6t0<)q%Ap;`Kod0mE!CX7SP8SbgEbX<WAx
zBk;A|#He@;o+=-!oL4xjp&q{78;e0(#0n>Z?Nm0z7S>jl7fz4C*LOj*7ywvU8B!EZ
z&yGzTUpF0FI1(AYu(YZXKGHi}n$Ogd{Mh)qsU@SZ8%+0^pIcSWB2aIoWo7Y(hQeYl
zU?ehadW`y8IK}L5gZnIuiKR&eoeRYRo#cSF%FF9P^xAoalYH5Vp^ug1V(nQk^fdtb
z2wOMIm3nmf3{$NrzNH*!$mwXs*g$Sm*Cs0B^;4mNpar0TT!n{IVW2BRU+Jhbhw)va
zLzc(EE7vaZcSxv3M?HjV(y#3fR5^^P5}jTcNm-Y+)jx^I*u|9ZvzwG_QPWGf2|=^v
zfq^x^H?%9ugkP;Jt*X3SxF^v`g$iL{19uh6uB>!o=M_yIJEjOo8t29eV?bU}+E4*F
zj#zrV#}Aid8GWuhx3YYkjs-G#IkXXwat1!<o$}Ybr-%_&GGreG9}aFR)l#Ucxv>l4
zWjMg&FbW?V&&h7Asl2Q)9;-{#7kWjbQp)4=N*k*ZvGRCTTsrQO(!!EFaBDfL9PD*c
zG@w#==gRk#IbxxZcmGB8iqhNJOVL^k5~f0zc2!0;Fm8BZpapYMRlfT{_K6X9_Jgh`
zTa=!YQ#2t8hB#de8<i1YT)ePanq?R1(rXiJD^+P|$uO;-je}X&H?&t`ryH6T<$h&<
zg!_?wRbw3Tqww{8*Y=C5vm=2P%?{V1MRT)#O38^$$8Yz$pY=xu!H@Wd<iLx!9t`mR
zMVZh+CgLOq=WJr$7C}4rccPSzImivy20pX=#?My}wayoP!>cXK_G9Q)(W#1=Jsj~M
zkA5Jd6w^k7hgI4eS2!H{Cof3MZ@?|V#5@uyR{qK7!Bge~uBH$Q0*BP;l2pIjACJO1
zXIHtqk#dMbg$eabCZl4p`8AEPvc-#YhSkIu#nf^)oGXMGsMjr7nImJc?5wYb6-*_p
zIdB<WSRBg7V!>c2a>N@R!{HXXR0IbGm}QNS^VI|4XV4&!m+G@Y;|pV5%C4A#I<0hS
z$bj2U*<-j<DJW(tOk-$DbU+4$fHtM`E>2yE*hiH=kW*4$tKhCdl35#!+o}wkPsxtK
zatu9zJ1Yrgvp6rn%I3PhM3oRU(Qq|4)>pW|j%TT^JiIQ$#7543c1f{@2YZ38A<ZS_
z2{VeKoFlG?eUpQn2y7$-X4ygOaC^U8?CZvAP^y@eP)~v4l;I`Uo5A2bB32W>5ILr?
z%uo+8De&ad^#PNmVvn0aHDH~7UGTv%Y)?QBFl_&tRCo_Xn^LQK_43!iugL5OQ-Icr
z`>!p}(}lAH?jpISQ}2UZ!@h~P(PEg6l30ql=P-IPUV7ZW@kt?dm6}D>#nf+28y&8P
zvuvy>_owa2jL(IX@iVhvUpfnBGm96;U|Y7Kwg$F8V6S^&HaRJsDn~KX7s0T>>u!`w
zj%?2Zd5IkohEYjsJ}U%*Oi&NXm47L0y5fRXP{Sq<OoplfNyPo7jn|7REdiUOK1pTe
zH7qKvgN-mmOA_K2n@hvKOtPI?*tEr40XV?}BZggCakyHns&WBr(}F)KN#y1LDuxJk
zJERgfabdQFjxArNmNqoNtq`$L$0W6}yO8b*Oarv!JXg^8WuE^-A;rLo+f`)?Vr3Nz
zV)IHXt9+Urr>lCLtDH{Ebl80v*a=TmmLo&2ljP)2sZCVQTT%!&CC1glOd0lg+~#I^
zhRrOkOw6cBR94NbtzSUxnTN_Mgz2b$t0yuQYHhf40(y3DoJ^$|Y>?D?`$(EsfEig2
zuaY<<FXU8^%I|bBWXqoJphZJ%&VhBidJWVx1+~h_iN24O1071=$AbHD%nXFiI=PQE
zqh?Vh+!&b_Z)mK>8-=|1oN!uTq<Is;jkp%6TuUCh7Qh<t{KMFi%6OG-)!D99D|2N9
z=H@7C?#SqeL01uMb93+xQf(b>A~(e5)z?<zUD1Zh;^H#5?|K_+o!jj6%E7T!S^WMi
zrxkIR?Zj%rDWC1(ovXa(`MRn^uN+h-Ia2gYU9`dAm8e$gVK!26MIpD*y~=mKC~TRA
zs(8H4sV=Roalm%#z~?vA)x#aoc@EsYt#PWWOY59@aL2!<3`S$8I$qrn$6NVR0{hT8
zavvJzFs`w8TELuKxF26tS{8@x*RlnL6LH@OM$v_Qmr(9}?5{qD&yCM#PNTEM4U5;f
zu3*X}wu^B9w|UBG2!;XDx2@+5E07SlF@x)(x`gX0^_Cnqro21?H^5wv3C%4ccyz3A
z)ZT{J0jyPBohzHC!<u-P?Tq0Q9XQY$<ewgc+bq!8CdfHuXYGOJ9OYGFTCYZI|6DJH
z;aY4x!ORn8q;RLAb`kW5a`l`_tPHj#<#Jz}$9w)lpT>JmNuLAcsyTpR+O=@5+cau~
z9S0BLuraeMrU(2kf1vEJw=O!kn+=n4{(KItAYkGA4IQ-%PdZJ6M?1i$F_-4+#-5=h
zxeE}1vh>|~Ss#4-09F$93A7!!n}v%MeiIiuL$cC~@swzq!}v+%8ZKE0a_y$O8!*rV
zegji3mG)<T#5zzH%?7~nT;SeO$JvH^yMZM1{9PB^Zs<&{Wovca9OwYdGlzj)m&fUr
zOdK|F^I|mh=&FgEr-n{XW)498@d+4Qa7?fB?n?>h3=6{8c=wT@kfWxUYQp0h3*jNC
z5%A1aDL$Eo9iKfd#I_t$ed<cA^3}bwSfU;_2^tD<PV4tX9nV_C>@PA(ZMxutC2CSQ
z4fflMr;CTQ<Q;`hw;A-*$?!a<5FDNvYKYe-yjkcJ)>#cx3A9GB>!VzIvixCG(ZPMc
z9Phs0H#7&$!}XjyD+oUg9R?PRv@zH%1O2LvE`6L3k6%UTK^Gd?Xv`rOJ^g~<Xh|y(
z|I;1bid5fC@9bp5eY!(BUT9F?CU#dnJ>to)-Ad@1r$;>T4@mJ!dU<o9vr32AlM=ZL
z%RB&b!c^J*z>DF2P3JWO9R0WGyG}u3^7=n|dPlW4If4WAl#sFkIhFqAmIi1lzNG<o
zZ{OS!MNazp{XB8!H0Wzh8x1gIvu6o%Aqy`^+!!=GpA^WGGP4LSC)5VEkJ)}pos*)}
z`?oH_9@<4uRjFR#tG7^c>IxhIQyzE-O)m1ag<`6!y&SO<?mh?XmZkPS49_2=umR%U
zufXYrzL^!QS_JM5Nh4sBuFgM8Bo!QT-s(PupnOSJEly19NMh2Jwf5FPIU~Ag3ZIkB
zmTh9<PD{7WEnH~T;?DU@_s<K9!GK2L8(A=$pI7U>6VsLY;_H*)xIPgN|1IqDwFx}y
z7i)w!+Uny~@Dh={6${&Po!zs{83iT7EpV~Vs7i;P*U{S~;%<JYIp>1&fg5#j&$}vK
z6R9qqB<`Dety5hYay@HbCyBd^hIN~}1)MXyymB7B#}^Z?@WI{d@pQKyJWiMOVSMvY
z?O=4-jT4xrcy=LHq9bD^BVj!++-ON+7`)yD52eA4eDM|x+!=MBc$)|99$#D*uS>*A
zLuy*=9JtS);_Du;Z2(&c`GTu>YYLvBEscqrEwEjkD662&#IABFBk2_=_hl1!OH%9x
zz_JqA*2jf0(=WJ1<B8zemg#;#mpzP|%NFIP=|smHA2@&n#^nRCv<xg44$PtiwyJ&4
z4a-G|VQOF)@ZGzBu>4RnOEp>P%)}9HV7e1W=pL{qQ7B%<2qTer{cxE3v=F=iRShpu
z7tVqwS-b}-;SEnQ7jSPnOmpAoL~qgwx#|5sd>Dr&ZOo)QKjk?96AItxUksMuZQ9bN
zWvsMuF|;ncDFbzp9XniK#5W$`R<ZCw<ZAf*Jb8b^`zgLBlws=7>7g~hx^!`@q4IKX
zx2)4e=BeV~_8`2V><-&7e9li)#Nze!we{{O3RVrw3#-8qfl_kuUl+UJd^L`t_wBN=
z47O2Y<+Zlq3_4Fo(-Nq4ZVcX6UjT3Z<IDM#Y=l$KcS9Me+lCnD5;=iK#A(ojX&$H*
zngZDRN7%C3x+O5G0<!>Z82(~5i4P8f2XzNon6Bl!TlF9twrN*70B>AHkBzffQ9b4%
zlXoRBIdpPiT;n9D5-<vEfQ5Wk4|W6SVdhSkgb&6Y;1@u;WLV5K42!{i+%V%BZLdQM
zf=%Q7riyqKJVGo6NJBZMcNE+qdm7j)d@{m6r@#>sH$~~|2i&^gscl2~P=LM#K*fhO
zGI#tH0<kX-!0&M0AOf92&8)o}Z{f?K-lb0n!oH|bXx?TEzOoaTbtLb~VtY;AU-L~{
zLQ84hRtrj*dSl?+3TLqTu-#>gHR}ymXtGWZ<hZ8`BNfdLV7cjTd3B{T_eN+~TH^yl
zV588d<r=@s*L>nr37s14aI}R-Tj*sf5H~+KsCL<q%Ewbs4)()v#z$Lau2ywV>2)rn
zhZG9~n45u%#9dCG%XWQa9`lhXn=eaIwfP+vv`pXKPn;H$M;8^;mXQXB>%Lbc_dWxB
z@hz+%7m&~FrM<__^a_M52=C2T;L}XX_Xfr%<6A>PStIcEo({$)P48;4>NTjTvZ6gx
zTcjp0NMHQ#kLSkqt@7Mmwe8|9Xr#l!bw*`PV4cAqMd<XZ6f6fnLdBL+FyV$Tjk#+d
zd^EDOzP@xx4ByyxS3>0MV84&$se+AD&kMq4Se!m`5^kv}d=#vy#JkpL3f!Z{a=LgQ
zt*d-$uJWn$7Ri28I{Di>VipfQ4p*iI&n;XFe435Y;5%M*OFHe&aU~WJ_fFmQ(b!nY
z7`fIB>CZi<7ml!_+h1O9PvN$gyW%k2_F~0|+g++_Yr{f{FUfk|bdqhEld3m$-^KJ)
zrwJ5hobv9O=}*!ah8%aC3Qyuy-Fv@x|7B*S$>n0G5hKO*o7epI!N+X^-*#pSWZ}0l
z-A>-69^M;Q$U(z2SWQ!F=UxiW&$@dlsrO5<aRZx4umyu20vB7wINPFcx?vyd{8Y8v
z-Pwb(vSZ`qw=%;&<v3A^h))lyuHAY0=*5bXMCkV^#3%=EP6X8i3wY1L?#Il;u!B9W
zwqd$>R9!yV<=HK}9UbrqUM}GayskLO+wJrdh4X1P-x8`6Pb$yRrsQtC+9jF7dl^%h
zx_g<SWdl=on#GD6ERb&40P^TNSk_=a19D$AgNqvVhzMj2*RN9;Nk_^lKvzwD`F(zP
z4q5bA{7k9;G31g&{IdO+0pdGKpareNTYFmA%@^DjRo|o7k1i|rRgDFNl?1m{RY9pY
zy1UiW30lRMJ=ne<W@rECC~TLjcZ<{zj60fMhXH=(4!6HUFjl~~o;NxsPXPC;Yiu{b
z*FkMt3XERt&EN=a+)D5=>Qgg~Pv|)+dCsof8{^#>9^1j&EAAx08-Wcyaz7SL>}h#u
zul>`6=zns0sh44%V0(?>jvlPr?WYX<j!3vEF1wWyicoQ6BSne@i0MlT!-QP0`u4WP
zBb1&3ZT%Luwn(dxLmw)Wb;XYNpoVFCfBVzTZL^o)M}*iEMcpOVj3gB!Q|dtP5T2e%
z;f)aC-J4#_boMzIkm?(H)svp1{>Gmp_omC=JnL-vT+TPn8uv@#n+5+f{&Lx(Z@v=_
zkMhGnjbD{4om;su2cJAEtAh8R#FK{Zqp2{aYPoO=t)bGGvBcZc{$?$j_a*rPusa*b
zudHnlU(L-EUrrIeCsy828*@)5P@mVHI$=Ud1fIDZGqxx~Gju<xYrx_$K6uD=u{cP=
ztL_1M@x%ML5Si`);)6F7-OtPyPQ>TUaLOUZj>4Mq_+t0VQ-u>}HPpe(UmR;-82AED
zHiY~(4-}kyA6IOks%b3D*8*I_zLxJY4e?CKRCkjB9}$;2>#Pv&sSP;P%VQnjgG5yc
z_{<j`#(--K`4y^>_+qL1Op0M_@BE8>9gqGa*ys=J^#csLKn-yFLfp9M@XP~k2=5Xr
zV5778R;_<>(|P4;n?ZP^hAudkM_fJNFP^fx?`!v}BD_0<m`3o|O9)5o0+xRn!)G%5
zDTYsG_)84`F2mm<T=G4fe(z=ZIp0qh&dccrW#T2v8R-6WjvyT6zmV}ggW(r3d^W=`
zX81yeV;-ru|6}+i4F5gDV+@xk>!Ca|7%or9LVOOx<;hBjPhj|Wu%d7wUdr$h3_pkA
zRSciY@E<T7PZyQ-x|QMO4F4m;@pMs{|9*x~V)#=G=lP#!IGz$K%lVw)^B6uLO;lIZ
z7f&yh`M=F@ZV%anV{xdX;V!vzHp|cLs)*rS&gl%tQ<x>+GKN<${0fHSX}L20?F{Go
zzn9@$|Iaa;>;E4N=W>3?@behoeGKPv_D7|_g#nlIbcSEb%9+aW1q{EG;oRPSz;Is9
zDuzc`IX5tT7{mX@@EV4{+*61z<o^xB-y|H{eFyxP`Y$@j%b&^ef0y9{8U6&rdH&u9
zd*yJxM-Z;_y_V%aiIrd2%PWVMe*wd}JoOCc`EMZ{`C?Pc`mSgBM?s>*f5Y;RX84~N
z&dYh2a6BjPES7&OEB|bU%k%fJ*@m+E4us!$A$~f;j~A$m^ZbJu&hyK25wV<XR?bN*
ze-6Xtxp0{ORECdc`EwZ#$CHW+^K(1o_2T6m!}9a-RGxQ=<&0wGbH1Y)K9QAkCc~#O
z{49oZc?L0@>y!7#VXT}HEdMNqk7alb!^biFYKD(z_*#bJ*edO9J;SpYzKP)l4F8)2
z{|Cc)Ic*H*{^WCp^LFI=i88+OTup4R!W3|>|EVlL$ER8F^BK<Vq>AC^F!?zS$Hs~a
z<>Yt+!+CwVJVRLd16lrRhRbu~v3%}tOIZHPSblk4F6QU`qJZUZVEN%VWpQDCKF@(;
zNEM!7`Q^M6^EWd58kQgDX42kPGkg)l?`Ak3zaC^bx1Uyq^KxEeIM2V6;WqtW&g2=y
z@_&!vyuGeqIJbwZ7|#7hF~fN|KVZ0=2cbTfF?<Y@=lcxLW%xA=FJky|hI7Bc^IysG
z^Lfq<48N9@lf`g6eO|Wj1cq}xb2)i_t{<NN+pL@wtbA_I9OwFMV)^Acs4xVIu}$hl
z$}jQTiC;d268}B@E}#(G<wvZ1J{~nQoXf-ewLHfd%U=cg`%t+&KlisB$F+>qGsmxI
z_&_En@7G*!KVkWKIcpfs^}mwgvR|P5Hv=x^Ki9&Sx9?9`Ieb2Fs|Ei#!}&OVJHvT@
zxr5>3nLNK>_%w#EXE@ixFB#75_D+WLdCOf4&tT>A{xyQ(8(Drn-u;f@*(^Wr7xMgG
zX`h=Z-&rg_u5G2AlrelR!!Kv}CWc?n@INs8PKNV(J<D+JXSg5!Eh}da%g_DZmkj6q
zIvr^7!hUx*D`zmnc{zCu=jBXfI4=kH5b(nCc{w-+;e|La=W2%k5#mzM*r)K)%RyU`
zI4|dZhVyc^Fr4e{WrlM(KV&!`FXYL~C=VZx=A+@jh4?){E9GC!@INv9=M3k3?_oIS
z`!vHj-&ThInU()K!|!GIdkl{-d@sX!zu^7%FD(B+QCqjZ4Gic0@IHp~{`dgHhp=+E
z|KWTeV);4#FvIzL@)3q}fA}cFc{!O3AIRk4{gL~_fh>Ok%l{a|xt~GXllH*<`Qr?a
zv2vbZ_yUIW{M^rQoco!rtejt4%J~b!xtvd1aK0YlcEZOs-XFO=aQswO{x&8j*V~f}
z=j-C97@o(<;W(dfKh5%Ud)Ur!ZV%5ed=x8x9K#1P+-CpJvHZOJ=PmdP7W_qqXE45e
zJ}=LENB{FTmj7gy|0RZVJ?yaHuP~g;{~E)&Jg+mH_v<$p&fE7*hRb;)%KsL_ZS!6^
zUSs~9EI;=%Z!?_B|BeO!JHrPtz3pN+FXvqg{+<Qr@^CqKv;16d?=zhHpFIpOVsh?f
zIG>;JewxAZ;}|FXQX#`XV)zt>f6VYp7|z$TeE!zP^7DBb$0Mv9j$g>|PgprzZ~tUC
zw};Od&gZu_eg2E(AJ6!H!EipmZD%;Qhksk}FD>|gE%;X!9B=Z-_TqfIS@7-*=lbFP
zfv>MQ&i6giSUG&0?ZNQTOmDm#-o8Cqe!jjth~bs29J~i4>w6W$`TXhzhV%8pPZ`eV
zMZaJ;pBMd(;e1}i_1ufe!|jmo%Vn~1db9j|yyJeGmwzbB&+)@7_~8ua{;Ds-c{xW|
zaP9{(nEXew{Jj5ui{WEge%|hUzwS@Wp82@bkCnsmqb&H*4CnKWV;P>q<l*zQvlxC1
z%g^<5oCQDLf}hCn3|2muhwCka<>&GbWH_HMah&VtB$l7!nG7Gu<iUHUvLEsCPiA;N
z%g_BJ*Uu>|KgUmFIOogtz{fA%E(MIQtzAxM<#WDS45!;N4w#yA2H^5arwHQN4435~
zp2P4AmOq!_a-SR_zCXkJ^-WNi)H84QJRp*|<csqblt<#c|8oC8;)r?;hy1cWyuMi0
z4w;cctQX!BH{~A*xV&UK=Few1_iyI_F6HF%pKHMj7@k3lP{uI~=kuJg4Cm#KV>mB|
z&$oGgj`RHESvfp^#Dd$(8Ohq0motHtL)8`S1+eq1Y$!@VJ)ew!=*plF^U|$XffO+O
z5Q<|khvJyOH^nh%ra0n*S^4W2ekjE;ko!)UzYoK=P#p2Y7`}_)hcmnf@xuIl89s>N
z(#9}(Jj0J*`O6u8B*U*^xa@<Nyq@96TV7ij-cN!M?qYa<hU1uy7Y0X(nEPi4!;fZo
zl;P3_F!_9j%Q+|Fbqqfi0lHQ*{5T0hxQXGi4`OmF!{yk4cpJmz8W8dHH2mw<>qIvy
z{_^KTkW`Kz#Vr3omcNeSnG9dea9IW>Z(=x>e*w{K*YGC7|Hg2+R>h>x7%tZoi1$NB
z0vDDoeF*-}WB4fu&^4Xm(pO_rg5h#bi})Ib%dryidl-H?0(3pdaFk!x;dO?~wJnnD
zW4N4?BYu2O{Oi^$+l`99XE9vPZ7?CiaO5fH@pBk1_t-IiCBrfQSOnp^hT*8wJ4n9u
z43~Q#n136?<(wb!-3&hy0lIn}<VLV;IR`^z2*b~IvxvV@hRZr(LIuO+9vb2+7+!z?
zT^kraMuHG-W4P1-ChunWIF`TH!R`-~e>}s7Fg(KWD8nZ(yn^B9F?<EXqYS^E;U@zw
z%i75BLY99!!zVJljp36Ro=)Qu)~kr&$1oiE%ChnpF89`uY!<`iUIF5Z89o&Oy4Eth
zSb`94X1H7%V)71#%QZOS?F^S|Rm2Azf`8q9gmud!yUf?{afHv(@bd{@tl>W(e65Dx
zN%#W{mwOi|$LkEg2m!kGG5lf)LU=q4>L~kchM&doOBfzuIJTG6X*t8?-ZGM1!|*u>
z(6yf7r4od23&ZC!d>6yZ7~X>>87O}_!v`@u&hYUJpU3cWhR<jCH4Lv{_<Dv{GJFfe
zFJ<^HhA&`v51I_2{P=&!L2lw84WC2!cnxnRyqw{6to&;jj^*D?`PXascEYzYyn&Uo
zo8bwD_n}D}mfgtkp$uQh@FIpUVt5t97c+b{!<R686T>fOcq_xd$M80WU%~Knnp~p%
zS2Fw<hMx?$lqrwl-)H%!GhFT+VRC}uOIiLk48NM;_b?n~swaQ?qK2;|{4)*z8R7kC
za*So*{|$uaY53EGPuK8$geMrjoXNR{;ny<!R)(YAq^>tJ{D&<64u-E_css+J7(O7~
z{egA*5ySHt-pue>3}4Cc#SCA?@U;xTj^Udb{(lVL!SK}#Z)f=R3?D#?5R_l;C1P?u
z!+*^3&tmu*hA(C~mUT3ZPir-NFyWgu{1U=<F#JYVemlc|!tepKSVEq1&l8jL8NQa~
zpT+Q-7=8uAf5z}z7=AOuA7J<`4ByG{TN&=q;tl2eIm0s;ejCFJ7`~3-a~OU*!<RDr
z4u&@|9PNK8rLAZ9FIfI93}4UiT@3#v!+X#o6YKRWh7V%+uNgj`;TsrU!SFj7zJlR*
zG5mUlW4*4Sv`q~E4a?uk@Qn;_WB6|wo=%Hotk>@tp3U&zGrXALn;2fl@INqoHN)>_
z_$G$`k>RZjzlY&%4F40u(`hk}^8cCP*$lsz;l&K!%<wvf|ApbJ8GawbH!=KvhPN{O
z0fx6R{6U7N)20K;{}98o8U8TCiy7X+@H&P+!tm7$f0W^y82%W;TN%EE;cX0moZ;yM
z+#e|a6AaI0_*RA&GkhDv>lpqd!&fu>DTZ%i_|pt;W%zc6w=w(~hNmCn{y_PkWq3Bj
zpJRA2!&@0%$MC;0d^N+LXZR+DzrgTThQG-0HirL=;pxY^KT!Uc7@o~=Oj}IjPBFt@
zW%=tE{u;wqGyHXiZ({fx3~y!ln+$Jb_*)E5KhFJuGVWw}HpAa$crnA@VR#+G|IYB$
z3`ZVnpEj#uNp+%hu9MY}sCUB(8H3M~m1e=4$q6S5KYrt6&24CKvg&KyADEC8yRc?a
zHJku0vcWHSf7x_A5xlOha=^Dnl4TKZY))vbDN9t=)`)kl#p~r+^UKO&bchRxS`~L0
z>c@Y(c}YAxy+_ZG5AP<&tLqX=xLE3i_T0*H@!gm#RehHYy)W&SZcZyLfzM>bKt)n<
zKFYj?MWuD{O;<ewNGRXMzO=To1}nw{!_O>vZ-s+!5&YJvg+);Cz#Fuwe`kKujH-nZ
zcq<=;(Q2ffs~*%zC)f(E!4mmF?78BIqfwLM^)>OT5;#_=ys;`?KOIiLf+I;Z*&L(Q
zc%M80mBA_DIjI)rQ-oJa-b84*fTFzgoMAKJVBi@wiOQ;(we<^F`?7lFWKXG0RL)x>
zb69xg=BTp77YJ(MtZg_W#ZqRzTW0c{!xCUy!KQ}Kz0jH7couH>5B|xo5_;v}H)jm(
z3;nc<SOt3lcA(B4;pLX9yC8qpfR7kpCuiSb!43-smKYTm9UG46D4f+$58}YFz;Id<
z9EFKdIFl@fs>S#9;aeGv(4euZ$^~(FUmrgBn#j!oRGjjmPKd4qFHwl6FauS-Oob0^
zRL&QCL{cO&d|_!-BUlE#?LQ4q*EkQn2RTRf%>}L3r10Sc_=tO;9B^gf3xb!{{r)9b
zitB`=OAmT<V~cB&K%S|143eLh^1bkR{eaU7`MrsWplCcdoW83iwKGLO@EIg2URYfj
zkff{Z-zx{Znn^eNbIjub?Xt$gJKbduOsP4!FnOpdEsMj<q-=qAY&tf(!Mr-_cZQ3j
z<qV#=)9M)p=fwre^}ak8`a`N697zZteZ*1LdMaV0WP;~T_%S~Qif~`1vkN7@7^^xd
z|H$tFWLhr9Y2V0>Gt_Y3hpfYM<^6t4_c6o9l$S>;!N=&X-anU2!Oz3T`24I4?s?%{
z6iBfeIj^>UQE7d7(4&U^mJakN@yW;$^>H!&)yL`RN-@CEXDI#RDUVK{Z8G^k{cDn4
z^d%OfztO)B*Cij9F>;b03=E88VYTiaJFly?>xzf5)_7XH&QUIlVudveYZt)5Ox}Tm
zfjZ`<I){&l1qOT@%BVwP`OST7Oz46ghpy|u_qj&#4O*`U%MX*`gs40|uN1!U1cwUZ
zVxSNYj#8&cj<Xz`1m6h6(*(uokO98jC8f+#oKoZ+`rSo^np$dqrZBE6VAIGhT5y=o
ztHw{%OOMD0v`!xpVp2wzEuG*CT$90s)Om+^!fv%!4=}W@Qkmt%DWAo3?$B)fZZ#g0
zIl?_c5I%aQD#AXE%)VNTb9dWl1Jel0Xwzk9hx70B!e_U!SAv()zPs(y4|dDWPA|c~
z1WwylcH0%@hd*<>>+6W$Vykzp8a{~E5U)>o({|oDjT1jOSpnAB5t`mh@8QjpO|#mr
znxlfpg3qPn3R&{~hUTgATh9Kr2tQTD<21P^)aR*r6{QUo5yM*eKzx!9kI=)fUz^rx
zzHwH37CFqIXBk5SAD~aYOz&VUe-mhnh13hwPwtTxr8a>K2hXIiJYd^E?q0h#5eW(y
zf!!Q;${}r<^`%Y^kLKxqR~?PuJK<TJh~N&8d_mW_QHzEwZOvuAXHr-U9dc9x_PxQY
z&8x+;-eUT~uq$=TM=1D`d@-Cof+JM1x8=q4facKo;VBnfH|+42Ex_~6B5=B6nWh@A
zg4LBF&!e#K4TyUJhS31N=L_?QoZ;n_^JpO|zHE$6dc3=}>eE0M&X@3DI5jPUDVfHn
z^NPkpI-$_oGWZxV^iLS|M&dtl2BD7|d@L6Zg7cqw7C3^sG-OlYTnBu!yjuWThM8Nw
z5CD%c@(BPgrOPH=-YL*9TU3)RjUNts0axzb+=0}<@(Vw)YjNR$rEAJ7*C}G@3LZ`z
z*c{Nw0r|RYM`Nbk5ipD#CY^}+ER?6#rTQ)w{|s}OGQ*!LGRk05fff!9UA9_j2R->)
z#&b|PogUqM<4-Ykn4l+s725bX+`_MgGuay#gR<e{+aN-@i-qi#xIF;fLi9zgQ)qo6
z?D063EeU=~vR{qBk8epN?|x{x-hs*f!n$H;;wQPu$yAq&d3g<$m&e(p8M*}=3F<$1
z)L$LYO;^ouypxpC^9RkV^8*cxEV1%h+gJlt8ChAAh|jMtt%6fCYZ?-zHHpHx;^;-c
z1%g`OD3a>Z1#$P@XyrV(k4le+;EAWDiCWw-3}H255DJ`4g=1j^Pf&(=jxIqiNZ=m{
z@t{xl06*=BtME(02;Q!R^@=+f!a6$N-N^tk{c`XnY^Pm}HzMLvNu1p7Gd7=-PTmV)
zYJ}r;h|l4}Tnf&r@$tkGf(ybhLqu>{07dF2*}!=*L7#6t{7npH9h|H@Tz%KxR}ZB-
zJT5E93PcJ_BwS8mRak-p94)Ve?qa3o<@ND~hT3`IyF>&G-!u)(mjlgy6dANDtYTmY
zPHtb&u;TP*pPo^*o!%HToLVncDptDR<W6Xp_HfU|!*WVnFS@-#t^>f4g>zfNgNB&K
zcgjbKt^w^2KGN?lpc45(uZ&jODSl$Li+h30A^RDl4Tqbg1b6e@7JzLtI0L?_4sLqk
z@hNPV+USpPxdEOQ1QVw#`h2B+9Hrh<bkAx&01LYmoG=c@(#yL}z|r-pavKLL?>oiH
z=uf?qJCg~5hvx;^0vEHBWCv~-3_|zy##76J+#(&HUy^6`^H7dj8zpyPc+<?fCW4~&
z$1Pgco>*F!%@ox+^<Z;s8xW_fl{MOQRoV#OzV7r?1uS<mOaK?d=~3E*8He_+IQHIW
zqG);Su;$WOP8WMeHDDj$gX?{@0+aaPpJA^{6w-?(-`n<jVG4WNfk$3E>Y%?i?s|I!
z?ryi?k!{`WqPO$NOkPendC$v<<LuRp1PJ`jH&q8GR#yA%$USlJu-ia0`UWD~v8!N#
z!J&l}9B2-xt5$G|%5$s9w@%fJJjD{iZ#4zhGF|EdeVY*eisitrkDADJ{mJsawmuNY
zu5;7w)Vxj16Sb%Pz=S$qX1Um<;ab;6>#)0GbbPf>w^(MlNhO%MIIh)KjBpU+a6_fO
zu`CgO$>yE|ZoSz9#qY=JP2V_`(*z-G6egSE?H_##tQ~tc3AXvvYFB8>Hwz8r2*bG@
z^HkaM;wep$z3i5$F(^Zyy{5V%zy$%2`@CgfJ)loJQ2DTYx~wrCt4q`udh$VndFq|~
zm_<0G-e-;2OkFh*<+mkm=hgd|ABdytrMF^_7VU=~?GGTqW}NK-Bwy>|YB8mWgm4mu
zp*7sX#d0fZKU{&uY2gDT(EoA6tYbrTm%wOOVfGruR-@JH7+r@a20LZmXJ079{xwQR
z?x!p7Bk?X{Iul-6vzXj=exOuO69rvOismN9@D!%*INM^)skK6C{@OTp>K-_mX>`1A
z;GKHTrS(tXeLh|r^2CUzPdvg`mYEyQ-kIY3q9m)VSVL%q3F&bDgIxpO8qUH;3##Ca
zSUCMzP57akd}GIy>s|C4f7IKscKjbGVmuyR?&^ZIP7uMCVlOg&vn?gwF-HmhM+boa
z&uzs!=iMU80Xnza__{aslmo;v<Wb?$OR47;y}j1JlQkh<;DqUV@|i3g818ElzJm}D
zAoQCzf`5n!j5s@7ljnbWjJPI?Vdc_UC3QTqdMAqOl6>=ri~A%nPYOG$j7WqHyZkwE
zTzvSJ!Cmx@o5oIz@|CdF9xJV{FI}P!Bkq_#ekN#QUREqNfAQiN+|p{OttqXlOe~2l
z%yzQMYOAZ`HSmoQcnLn9b>5U2r^6#3Wee!{{F=tBy82omO31?F6|s5srPXoxvO|4s
zV;%d*NhhKYjCUOR<e0CN0{TUtjd4zZkEh`G+<Oo%LmPe6K#%7yNje$Y=!*^XCxxJ&
zMfCLfL?Qn_0F!)WXyadQ;6Ee;|0)ChyCL`|h@Q*;UI_Z72KqBX$iLD+pB;jJt$}`M
z2>SIz&+RWa1pP(>|J{Jec9)^8{Wlxv@w@PnPKGx6Ee87cL-3d1mg4RIK?r*Jt)_I6
z1N-lu5cGSAj`Ke+ME%<h^mrb$)SC=#`s)FC@#5`|XAnv{8QSRk5IvWFQV9A12L7W$
z&}SIvi$c(&ufdDUk8L9BEkj%V^9=MKhM+Gn(0>$y9_xx1mp=zEDYp!5^3NiA-u`1l
z(9bc@pBaL_g6O&YXN90o82En-`jGXOp{@Q`82Gn^pkHC2|0D$c8iV|whM>R2!2h2i
z=r<VXKMO&RXGh`1+wXJuE%h!#oBmr2^#2M$zuiDz3Yg?8LmPiQs}C<O|J)Gt@*E6K
zUlxKM&uG*6SB9Y9NA$e^VxN-rmZ7cwc;*;hoW48+eIKId^^b?3A7G%L7lM9}LH?=`
z^g|8&FAG60&-mf`!}D&W-eqXhe}RGj7tkJ(PKGx6A_G0n2_&5iZS=DY^#2Y)Uv8lP
zG6a2{f&M=s=&vx)?+Zb{!a)Du5cF#d^k0RbUuU5IIt2Yj1HBW%{x%!vyM>_NLiF7J
zyN96PZlF&KLI0vbemu`v+Pw^I_P^7>{|6!HcN_RG3qk*xf&Voj==T};FAqWAD-Dbd
zF7Cg78-l(c(ew7l^Wml5WoXm?@dp0ahM*r};E!t>$ybIp{@Dh4oYP4<8QSRc4e~dI
zpdWAG-yDLz$iTm62>MwD`h!BymmBDB4?!=_!{YXLM+o{W4Ep;;2>NRb^y@>=uQbpf
z9D;t0L4S9KpkHU8$8%ey-OA8rzZ(tozX?IV*+9QB1pO8R{qIB2w;Jd-g`j`kK>vpj
z^t%o8cZZ;t=dyA8|6>Sx+0dLG&xe)mE<;=U_n{1&{x2cu2N>vkg`gi~pg$x8eYSzV
zcL@5k4D=6$ppP2p9}Yn;&(q`je<TF`90UJHL(o?l=noA+zt}+ECj|X92Kp@_=vNax
zpMN|af_|-merpK&bq4vjg`nSPpnoz1{bmFGQz7WL80eo4LEmbi$2}Q>RcP}+@?1x5
z|IdV=-)-Q3SP1&h4D>IApm%x(=g%*OpzlNU+<x)g?^N~I&%pns5cC-a`olxe4>i!g
z9)dpKQ2*CL&=(l^zY&7I$Uy&Q2>MwD`o1CP%MJ89L(tb5=+i^cUtyqsCj|Wp1N{*p
z=+_WExBnwU(BER<|85BS4F>x6LeSr1p#N3~`W6HI`yuGJ8|e3hpx;6CT>pDR(C;+R
ze;9&Zo^#9j<DPh`{;$nY|4%~D?=#5%&k*!I4hs7J&qC0r8|eQPg8q1-=lc611pOcb
z|9&Cpvkmm^A?VLC(EmFGebi9@{vqg#4fOvFK|jkN|5qXC%MJ8Lg`lr9(07A9!BqRt
z6$bk5A?Q~a=+i>buQAXc9D;rw(R2GhC<Ofm13lgoOI3fH4DufxqWvB)(Bm@^sq)`u
zpzj$%{ud4Oy+Y9MBzms@LqpK-Hqajyg1*fl|1lx-x6i=;*bwwR4i5VNBSOfZPV`)V
zM~0vuVBr6)5cGo#^!-B6XB*@{HUxdXf&XzK^grG}e|!k~VgvoRL(pGrpg%4|{pC6K
zy!}rI!N1PH|HKgduQ1SOgrHwR^j!XdA?Q~d=)V(!eyxH2#1Q&hXQ=-vA^2}J@INgC
z{XGW$r-z_#G4Rg{LBGww|K<?-dy(k-xo%KA|C<qlez$@D86o8V%uxT4A?W2f;C%ln
zHw1kzGJH;dP6+yb2KsYD&}R@m?|=AANviXQAqM_qLeS?K=*NbjFEG%L3qfCGpdTNC
zewKkg5`w;*=qV8PKOqEtm4W|YL;uNu{spi@(-rD%-g&d{NdYJYMDSgBJS*Bnfe&?@
z7JOI`t~pdNKEM1Z{FcQH5UGxHGK9#VZg&ytI5E>p4U|`9g2+(#k7e5Ev21?nzjGiF
zF}+@Mi2u8s7~)cX36FvZ(&O5IUlZtjbvia$CF%UngA^0}#Y9hmqSx3sl@|J%6zNx5
z=$8`xIf}Cz(fMyAdR*J_>mj0-{z9hd_1^&rrusih^v6p=3N<!@*hK#((bKWTsuZ0b
z$8-~YJJAnOlx{?)mvegbjr_{Mht=T9b_3CW@qB7&Khpm3nPwCJjBmMwV~Jh{8XIQ>
z5R3k&B@`3?C=p`+!*>#N{@=CmpG*8tm5eFW*f`TI{MQnHSx@Buyn+Aa7XB-V|I8%(
z8!h}d8S0PcaqIQJ$-@8d#6Lsh57~X!0~Y!oG;ul6mpkZZ?zPC@ZqVP$P?jz~K4*+F
z>HcRB@t>W9zq}`<+iyBPED6_QHxTyw3dD8(I43pn|3QlNKN;vv_Pc`kbNhMCz<;WR
z{~g5tB$8hSkllApwD4bN;E(5|>-E3g!v6{4kI!84OXq)!h5u&akIy{dh5ZN5UDx@)
zL;Q9B`*?pr=Ja&~^_PlMzw=<=G_~K0M4wE5X8^sa{aWy0S-5!ny#v2>`KMd>w-f(U
zL@C}MsIKptYT>`bz<(D|>im~j_-E3<t&iV2e|%2Lq`!P3Oy)mtw#eURkpDe{{LfhU
z&n5mx`?MAGKVMkrFDH6x233k)|D&MsP4!<*^vV3+5kPOUpI-Q|G+f+%@clQv{jRp~
z-;^T%D=hpo4E*u^E1mzF7XGa%@_)s`Ki|L~-#^m%p8@xoQ2%<nv=RSxkj5`y=es5l
zy*_@dCc|0c%kA>w&={b{GWGGJnB<>BnbCiJ3UOWj&n^59p@yev7?l#_e>SWyO!jwN
ziuBDE`YfWy`8~gMJzop-ruuK9`t$kUzn~z!{=c#CuOR+eoH@jG{;d}JpAh{mN$8)p
z$iLGd|Gy3Le_`RDdyLB%-+ASiF8`+%{^|I#16&!{xNxEU;E<^6?;_ZzF}45k#|koM
ziW{iEI{&LJ^p_I-X^PT~==8YHX=?v$8u)qpW0iFI_geV>g!m`(pYK`t&msO~210+R
zD4jp<vzYYvXX1Z;lKP(k^rreRHq^hnf&cXu{=JTK8Ap@wUuogLf%r>$v>$waAF_)}
z>IL^VO!Y4&{<kLK|Bi)!8}VOE^vEBdf7kh6aEO`zN5sD<3IFqf-lYEuQ7ixY6X%jT
z|4kPDqmOqP7boHW8w>xn2LAZ`tj@nzZ*%>BMEuXy_+wk~D-GyP_1|XTkI#?l{8w7|
zKSlfpab^(L`@eIjS^kfRKH2=~atnQrZ@Y|7NW#An=uP!+r}|4fNBhI)xAgiyY~i0t
z{ISpQORxWZ7XIn@vKL(3{_*)Mo&Qb?|C6cW$;SUv`<V5gPxJ%1@DSJK9}M&+{jDJR
zx&H9^4_*FA7XIH&QT`__^i@Pp&7f+b%fH1U|2l*Gc>iCQf3JoAkBI+?inANh`M+o3
zzuCYa_sVqsGY>Pj-(4y4p9b`%_G>lp$NRTB|3@tRpGuMc0~Y?f4gB%`tIj{;aC7}X
zApRqh=>IsNH`U+4!4@t)|Hv@#zrn&klNvr*`>(R_&nEu7|705Y_k;}!lvH1Tj3vf1
zL@m5Oy8Yn>hpGNi;y;H-(f<uH@c)U0|61aIs>fQybpF>{_-`=O|6~LI!_&?6e>6q@
zhXB2){w)UnLk#@OEd2Kp|B58_zr@0She7|R8u<U-!hd>(%b3JaQt0}>%fde&U-pHI
z+uu+F|4%La6B&Zs$#nzuSLZ()?h_#=-F|<S;gW!P_%5CP0So<~GhDJ{>(6_E-qilZ
zhWck4>OU9;Sd;v1#9tqOb@^|!(03o`%Ae&1>M!!**J_|Q$zNfRf0#l3k1YJNiN7wt
z&VMBA^CPCW-&mqQn+pqZojw=nP4X`#`Ll^0{SV%&(f$9QEc~w`{v(p`-(=yx$-qC~
zz`sB2Q)8X<`u~ae>-LLz`E`?pehbn6OEVblr?Up=P5Rp@+aLBP@k0IKy)s>Y*)YLI
znRNN@8zjga62tuge|7#FEcCAvy>34`{b1N<Gx7h3=xG?Y^3MQzQ~ld<u?QFUU*`g(
z*MGi+f1klFOWl5S`Bz!!#}a+A`Ns;2{OS0zGF;sL#~S4S%EJHh6y^W7g@1v8|9Auc
zX|T_UlIr%eiTEdLzsW#vYQH+-&)aW;f&T^z|7TO={|gKM6$buM1OG2A{Pz-n-TqNm
z{2C7xH0kdvqCbOYhPZBjS6Jw?PId`(|D)5tW}!cu=yNsxy8JHzy{Y}y8T2>Vpub75
z&uOZEE%Ddqk2?PeKyTu|*}#9Qf&b4f{C`ILliBZ07XGaU{^uL`@38RSO#CNl`q$g<
z1q=V(#6L>(=>JO${7Yb;5_PKg-yYv_2|rH4e+tl>^q);PUfUS|83z7;vGD&V@gJx0
zM_KuGkA;5*zN`)x_n$Kj{Aa*EA?DQUKVpa=cSgE_`m5_7_c=}VFDCxbJ;a6j$7e<K
z@#jGc|7zktLUDE@Zmm3UvxR?!f&WDY{-?n{o2mZ4ApSEwRwAbJKN;vv^<PT-qePGO
zpKaj3(Zc^r;-9Sl|JuTTo1y+O1OMY;gUD3>L8rKa57g?fxBt;VZ>s-J1OHM3{{<HQ
z6NrC768`fn{M!xu%MAQmEc~w}{>kkBehdF}+^mL+_rJJ-e=ay!%&GUkhlqc&_3P<C
zZ_<AO@#p<-zJdR83;#EWzwZCtT8XNOKT9qAXBqfc8u)*0;lIzqU$?(6E&S^Y{1+Jb
zUkD1uI_dg9mO37}VO3$B{|ulv>3@ZRf3<=CRtx_z#Q$u?*^QvA{K9=66aRI@pW9!p
zfqzbhx&GfL{<{Cs>pv9eP5fI8^}o!(|8@)i4Jq=!#lnBLfq#R6|3?=7&l7)|hB)%l
z>;Jxmzk?qufs5-OpEc|yP;Xs!-axbd+lhZN`@6+Lf8uE_BYpntN<~6I@Suf$3ehLq
zf7uN5ruNUK`g8xY1eojfKRMG}|0{@pvhjZ)(3|*24g9}n;QvPp|GSBQk*6vVgCcy_
z?=1Z17~20z1OMSCnd|=*@gMHv=H}&4Hqe{uzuHj$s|@@fwD8Xx>T-c(-__ms%W*ba
z_-`=qzuLh6)IsL@&m{iI#-G7JZ>oQbf&VfC|DRj<FC_ld464?8{cp1H-(hI~<p%zr
zTKM0dV*Nj~@b85;tKs7P?}rBd^I)BgIrZ`H;S~9o0(}plFVGZ|Vc_3n;QyM1{~N?V
z+5SN;IB1jn9}_(ckG>1@^6PY<H_4xGkbk8?{vTNQAAY*aMfYEtnw%>w{ELY{A3v@$
z@PF3Ae?0N8<ducEUjHX8{Ff5{DAD8kWwn8S77S2WrfxsKBmR2(>Gi+OLf=C4<(m9D
z{m+2j)PCDY{y9wk9~<QFHN-6cAR74QYy5Tnr2)N({}BAx6I^q|Uw8lcMg#u_3;&hG
zpVUC51oyvcEc{mxf8PIpYT*Bjh5uiOf3opsn}z>61Aly1q8HUf%7yDZ)Rb;N9})iw
zRdY9@xBnQRH|c+~LH{=!`2Wbl{{osgB^!U1Tlf#ak5$1X>xup6Rs;Wb3;zW1*Zr4X
z|9@KeXB+t6X5c>#=9ws|uKzW}AGVi#m(Krc3;pj>)ZZ0AZ)(4&LH;`o^1o@}zdc3%
zuUPocG4Nk+;E(fUlm0$PvHc2x-c<j^2L8V?@W08zzc&pWy8Y_yx5mPMwSoTz1ON9d
z{D)ZhqptY%j)ngQ1OK}W{3pRUk7eriJAwF9Gboli|M?brIH5~ivj55gbp1VJp}&sk
z_3=;VKL{MWN&a<2-zXVVsMDVa^d|dhA^k;(4*d^)zgG9ZD=qx{=eUH)<p0t_{~e;=
zoJ9W5E%NumkJZ7|M)W8@e!n&#Ka3NYQ*ZyB#6Ow+{}AX+`fDftvi*_&JqG?SS@?gI
zqW-=O25OQ&J=d*xvh~*hpf|~%jt^_X#pTC$1$F(6w(!p*{`&Z@+y8J2{~^Sm%vjui
z|BHctt%ZLj@z>kWt(B`A{ClZ||13lO?>F#ovG89({QG*WL`<)LAE+S8q}$(5iT+59
zUYEbbLVst9^`8RtruMHh)c;{a{Wn_pZzKNTo_&{I|6g19uQ0U#BL@EM7XJTCvHt(G
z@ZW5x|6>OJmqI_qHqqPf$YE}^b^Fun9|wAq{#y<FA2;y-tA&3y@xREYeOFcvZMX2>
zP5kFjX7pcM4gAjqJ)7#^O#EpXtyp4SevJltQ~jeyxH-B1dD6iDW()t##D5TH260{g
zA6e*MC;I+L=+A?Eruu(M^e{d2T{{1<kk3^AIfnW_W2(P}|M7V)+hqKIV&T8o!2dY|
z|933>ClLShe6<hS-y0VGtBF6KfBe<JzX14{^nV@kPuBm=gnTCb?=aN=1p|NNW8%M&
z_#c_1{!d!yA4-w_Bp6^#{9B1W+4}DUpf}aO%~1cB4fUUA;onC5ldb=5vC#Jh95227
zu&(_2sYU)?__7CF+<&}kkUtGJ*f6K=zlRY2WbIdHp&w23$?m@`0D6=DGe~|Ip2UUz
z_YH&mA6ob?BK~I)y$oEf$X|}L+rq!t!2c}+|3bLIZPMQ#Q`FyP3;h#BpYMq(V!HqQ
zBhZ`lx75)7?-=Ai7#Nu3|BCo0^Pk;;-o$^cf&VT8|4A19L!e#on&<}VuU`KN7XF)v
zKlh*S8u<Uz!oQyQC+mMVSopUa>c88-zsD%E{#O(KWb^0A7W&&#ls^jeruIw!7Fvbh
zf9x^He}{$tL&SfQYB@Kex8JQ6{zHgAZ@&)>{Er@O)?aUW@T7kd{xuf*6Nx^V|9ing
zpG)-LO2YqyGtKfxh(4M99Ru{H_Nz0r-=_xsU2WlCmSX)|EcA^j%74E_{uKuKKR3wV
z2OK=Wf${6dDawBd(c`y``L%)Qhj0+$y|mxo1$vYI*OB~lC_j#0?FRYVEb_M!e|`Ma
z#B}yp_&fNqZ@75>`O?6DAuurM?{M&IcqQ}ymjS)0{!!x3$M1ax{`-i3n#)f8%_sip
z3UMR4{=bm?wS0>W{PFwUl70Z?Kl~iG{(AdIiNDMzi<k8B_aQ)Us{aOq{&Ddo>1DY$
z5`X>sL34=zLdl524DI*v=bGE^C8AHZ|8+Fbo8)gJ`K6p_zo;W!{$E@8e@Xn4&A;!k
z@bA?ht<pdK;P<a}{>K)W>wheaD|o^7l<$Hfd{_ShbNw@jf0S}#{qg(dI{&+Y-qe2z
ziGQ;3WAqp^{Y69%x0ijFs}&C#4)mt>t04J#|Lbj#|0xUqtBF6{9`;>2|Hm!-*Bbcu
zG4Q`&thxRhh<~#2?|h&))qk78ehxSA-)Z6hM2hu)&BA}Dq5kOx{&UBf>;GYj^`8y&
zruwJjVFPgS{)^uq*X_5}!v9d1*Wi`Re#eh@oWmhsn#k?_$sl^kPo~J<GCUXPh5RxD
zg+mPT_czEt1L(1)y8j-Mgui50Ecrv({3<Z;Kia_mYT_^ZnJgol_`~fD-zEEx41YxQ
zzD)4r5~9~}Nhk520sX=7LlfVbL-ZLkBZX4$626=G>-0;Be#3DxryJ_@zXkdpkW}E$
z=FB4ft)>Y$`p@IxzoeITiS^NWV^Kpca0}c(>j?bz`9R35(;ouablXG9*8jI2i2j#p
a5E@3Jho2x&0-OF9+7Ok8f&N1V==uRVL2sh~

literal 0
HcmV?d00001

diff --git a/exp/simple_client.cpp b/client/simple_client.cpp
similarity index 89%
rename from exp/simple_client.cpp
rename to client/simple_client.cpp
index be361e5..085d38c 100644
--- a/exp/simple_client.cpp
+++ b/client/simple_client.cpp
@@ -15,11 +15,12 @@
 
 int main(int argc, char** argv){
     char buf[32];
-    sprintf(buf,"shm_%d",getpid());
-    int shm_fd = open(buf, O_RDWR | O_CREAT | O_TRUNC,0644);
+    sprintf(buf, "shm_%d", getpid());
+    int shm_fd = open(buf, O_RDWR | O_CREAT | O_TRUNC, 0644);
     ftruncate(shm_fd, SHM_SIZE); 
     int* shm = (int*)mmap(NULL, SHM_SIZE,PROT_READ|PROT_WRITE, MAP_SHARED,shm_fd,0);
     memset(shm,0,SHM_SIZE);
+
     LFHashTable<int32_t> hashtable((void*)shm, SHM_SIZE, 0);
     std::vector<std::thread> workers(500);
     int baba = 500;
@@ -31,7 +32,7 @@ int main(int argc, char** argv){
             printf("调度类为:%d\n",sched_getscheduler(gettid()));
             while(true){ 
                 printf("%d working...\n", gettid());
-                // sleep(10);
+                sleep(1);
             }
         });
     }
diff --git a/exp/cos_client b/exp/cos_client
deleted file mode 100755
index 004b5735e8d7db891c5ba63ba782c409e4d2b9da..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 68976
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

diff --git a/exp/shm_4039 b/exp/shm_4039
deleted file mode 100644
index 46947445a1e4fd41be75ba8b6f52975c9c379a86..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 4096
zcmcK5gOV5s6hzU9otcSk+qP}nwr$(CZDWntwrx9myQ+U-U)8Dm2d@Ky0s;aM!a`CB
zWud8rv9MIaS$HZDEFzUi7MV&Ei%KQXf~W*rG%C?829=l=i%M*ZLnW@oqY~c|P)TTs
zs3f)|RFYaUD#<Mcm6Vo>N@`0(C9S2SlHM{<$!M9VWVS3+vRXDO*)0c^oR*79Zp%X@
zujQkX-wIGEXoaX0wjxxDS}`ictpt^lR*Fh#D?_EMm7`MLDp09tm8ev<DpaakH7eDu
z29=sti%M;)L#3|Oqf*}*P-$q5s5G`FRGL~dD$T70m6q0uN^5IFrLDE2(%w2y>1ds(
zbha*3x>`3X-K__ep4N*>Z|g&)ul1wS-v&?_XoIK>wjor8+Au1^Z3LB(Hj2t<8$)HR
zjiWN&CQzAZlc-F#DO9G~G%C|=29=pMi^^=9LuIbbqcYzXP+4e;s4TW6RF>K@D$8vJ
zm6f)N%4%CfWv#8FvfegO*=U=nY_=^_w%Rr-+ieGxowke0Zrej;ukE9<-wseYXunYT
z)qbP$yZu4sPy36?-}Vocf9(*J!*+zqQ9DNExSgPK(oRu1ZD**QwR2R?+XX5Y?GlyC
zc7@7SyGG@@-Jo*QZc({ycc|R8dsOb*11b;g5tYaGgvwKUM&-G^pz_jQQF(1|sJyjz
zRNmVMDj)3=mCyEt%2)eF<-7f$^3wu>*?)wvkW@lhXewbWER}E;o=OCZNF|a*rV_=X
zQVFymD!~?wN_2}sC8ouq65HZXiEHtw#J2=g5?UfEi7g40q?U|Ia!WxarKO^h+R{)-
zYw4(@w+vJ=S|%!)Een;bmW@hw%Rwcl<)V_?@=(cZ`KaW#0#piGAu5Hf2$iB%j7o7U
zL8YXXqEgz*P$_HWsFb$~R4Q5}DwVAYm8w>aN_DG2rKZ)QQrqfKscZG9)VBsy8d@VN
zjjailrq+x~b8A7RrM05c+S*WQYwf7Cw+>V~S|=)<tqYZ|){RPc>p`Wb^`g?-`cUa>
z{iyV}0aOOsAS#1x2$i8WjLL8uL1m<kqB7dXP#J6EsEoG>R3_RaDwAyrm8mw3%5<AS
zWv0!dGTY`*nQQZ?%(n$p7TO{zi){&&rM8U9a$7-VrLCf}+SX86YwM`2w+&P_+9oQS
zZ3~sHwvEbm+d*Zg?V_^V_E6bt`>5<UzWe`rhXUDu9JV7=j@mIQ$L$1_lXi;AX*)yZ
ztevBB-Y!tNXqTv5wkuSw+BGWI?FN;bc8khwyF=x!-J^2f9#DB`kElGhCsdx=Gb+#R
n1(lcfippzyL*=c#qw?N9Q2A(|sC>3BRKD6bD&Oq~m7n$>YjrDw

diff --git a/exp/shm_4702 b/exp/shm_4702
deleted file mode 100644
index 4fb8e35c63a1487e09ecc112344715afb4c174a1..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 4096
zcmcJ=gRUhA00hxHw%*vbZQEFLY}>YN+qP}nwry5t`xmy7lM2KL1Of<V!MTL6kX%Ap
zXf9zaESGQ=o=XIa$R(0R<`TuCa*1X^T%ubHE-@_@m)I7EOI(Y`CB7x#lF$-yNo+~D
zB(-E*l3NNcDJ>P3)Ru-zT1&?zy=CB%(K2z#Y+1NuwQO9nTMjNcEf<&EmWNAT%f}_Z
z72s0P3UMiHMYt5TVqA(_2`(kA6qnLghD%v1$ECbg;8M{laj9%oxKy=jT>kH>2L%FB
z!)kJ=Wwp7~vASI9S$!@ItRa_1)|g8ZYs#gWHRsa8T5@S+t+}+Zwp`j-doCTUBbQFr
znM)Vz%B7oi=hDM^a_MEgx%9EVT>4pmE(2^Jmq9j|%McsNWta`;GQvi38D*onjIps?
z#@To-6Ko=vNj90w6r0LrnoZ|2!)9`sWwW`=vAJC4*?cYwY$2CLwwTKjTgqjbE$6br
zR&rTotGTSPwOrQOdM+DmBbQCKnadX2%4M5v=d#0ga@l3Ox$LpMT=v<1E(h!&mqT`#
z%Mm-u<(M7ka>7n>Ic2B0oUyZ9&e?e`7wjUJOLm#d6}!sinqB8|!)|i9Ww*K9vAbOE
z*?le#>>-y&_L$2Pd&=dRJ?HYmUUGS5uerRjw_M)YdoCaBBbQJ1nadaZ%H^AV=Msqi
zpI}^qTL>;8Efkl~7KTe$3&$nAMc@+AB5{dqQMg34Xk3CUI+qw0lS?d%%_WY-<r2^0
zb4g$cxg@g0T#{H)F3Bu8mlT$gODapvC5@%!lFrg|$zU0|WU|a$vRGCw*(^Jk9F~(y
zF3Zg&kLBf(&+>CAU<J7pvcg=7SWzy;tT>kvR+398E6t^hmE}^-%5$k;6}eQh%3P{g
zRW8-+CoVtRFI;}L-?;p4e{lKJ{^Iht{ln#7tInl{)#OskYICV$b-C2D`dk`VLoSW1
zF_$LRluI*f&ZUL5<kHGob7^C3xwNzPTsl}sE}g71moC<oOE>GzrHA$8(#v{t>0^Dl
z^t1k42G~F@gKRLDAvToDFdNQggpK4f%0_b;V`I6Dv+-Oe*hDUqY%-TAHkHdXo6cp1
z&Ezu6W^<WibGgj3`CJy*LN1GJF_$H_l*=+(&SizI<g&_Eb6I0+xvaDGTsGK7E}LvK
zmo2uH%QoB2WrywLvdeaJ*<*XT?6dt`4%k61hwLzyBX*R_F+0xXgq`Ga%1(1RV`sUX
zv-4ao*hMav>@t@tc9qLDyUyi?-Q;r1ZgaU~ce&iN`&=H_LoSc(F_$Oyl*==F&gF%@
h<nqd1b9rNLxxBOYTt3)GE}!f(moN5}%QySZ<p-ZLKW_j4

diff --git a/exp/simple_client b/exp/simple_client
deleted file mode 100755
index 472296a5c9b316006837a48feb8c7279378d547f..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 36136
zcmeHwe|!|xx%VU_5)mO<un|xfD+&T@HU#8{Xn-tiFhC?h5wVjcyO5R54>ubKRxKK_
zZbN$0zV_;EuUC3MZM9db@xIuitr$fKTHA}3w)C}Xw4j?pYfSM<m74o~&Uwzv*~w0b
z(9e7SVKh8*o?quV&w0*s&dkot`KrHkVP-~#p^hQO)drP{z92D0Oi13tCjdppOyg|)
zJKpdZXP}%VaFSjm0jTmgkeLc|7(WD%<nrhw4IC%YhJwmMf+Xj5w2hP$1&v%;Cb?`n
z<+2lQI$!cBsOVOG`I2rp;IrpQyn?zM`6f^*>4DX$a38n(07E55?jpG^mg{0U1#{V-
z3Mzk+Pv~zZ>vKYf*@jcDn&q6Z7&_@tkm{hL{7^h}GWC_QT(M8;al$EVhk~lU>mWyd
z8SJ6Dc{$hT)(<<mJ_S{rT@j6}nNfH}G&D6DscmeU+B9><)ER}|hB|M7FoEpy;E!Tz
z(b5$Lx}}3~tj@^XEXztC(MB<y_<uIG@1@=U{&;ip7ms%@s`$;gJJ#Oz8u5_bBttxO
zkUs8mQKs|p_#+<akGqTj;{c3(;a}Cfzq0ZnI!|{@hk|p{5F#%4dQ`+Ao+4H4!v7k$
z(&?uZlMcVY1;5Zm&uW)?N4wywT<~9V!GG7qo`4JgS6u8|;llr%i~e_9^whiP83R4(
z`sFSc{t+(tmt5@m)CGT&3;t^^c#3Ba{+!2~F8nPnc7i>vo+&Q)Zs60!+Yu<b*l7&P
zA^eRu@{DbqZzn1q(_B|mS8F!JgR!`28fHnw5;GKzh1W$I;^A1uk_FMa+Hgg1O*AZN
z=_#wq;|2Mq8Ly7jZ8W3d+I8`2GaQT6#mcU&GR##K*Do!P&j2+X49zgh<H2~?544T+
zO*faY4U)@W9{1%p)<$k^44d`wSjp0IQwf4n7z(cqHb&#HG#ZYFOUiww-(R+H!v@k?
z9-jrvYa+F%Wdq8gXxWAuS=-D=U4ywM*bpu(sg1;oeSV@t-<8VrHNlV>j7ICKhybg7
zXjD~GQ*cdWgO3{65HYKw!G;DizNtQJMrzmArM81@EG{6;=DMaPvpyVasH+V|Bk@h<
zhJ4bBwhZWt!dvPhwQO0z%oNLFvEU}NHmqDsM%Hdj+qMOwZ7XUwMruRm@^C|A4f+pF
z37Tu+m}um-u+dOe9S)fd;kY<yjD};zx^TQc5&|Qd7)Cs-4Mw6UVXmm+-l+*jYFQG@
zwxrYzk2gi)q$UnEHQ^d)H|pxc5UGzvYU69643So~-mI!#FSW0Y#~N#^AZXOo1nUh{
z)esL=O`c3s(F`iCt3usW@=>Wu;ukGgU{3Sq8;eRy<}X;e66b|ppU=SQy!j=j&pS;!
z_0CFRD@ZA(k_u$eEbtauXVbVAAg9^b0`GK;piKNX1b<ohZwUUVoQXN}4E#I97z#{|
zai%d$V2L`+I14k|aGYh}Kf<W_l*$hyH>iA4cIl?G3~>GwI65+*vyJKXC<l){fYMpU
zbBz1-6YDWm4>Nwn<xQ_W0r?!`_o^)T&oJKOa(vRautdr-KH_pr(1#cqY!F%ZW2RC4
zqau;B4YVZ}bh5GioBxdId8jdl%R59l+nB)R#xapI$v^q5PpuEty39k11sr9Zj}-pb
zV<dj11K-8#^=b!xFPG~b_~Us}Pm=?GIj@5^JMis{-{-&^ypGGMl=_sNs;ug#{7p?F
z-_UV@^$?z2An<!l0mRy7ygU{E?$hwYHT(e$KUTwcY4{5@d{V<-q~Uusyhp?5R>}g|
z$u1BGHBZp`?_$X!{>@=MLs23bb>wPzgpGCNX?R-ysl%h;#dQl4CTe)O{*#1!4NrBe
zW2S~zeM7V&4Ua&yj(~<AW?>PB8Xg13I#z0U3;^q>)bJxLtYK7Zc)nB<)OroCVuT1y
z8eU)TY}WAlJb#~t=OH2Vw`us%0we!<P{W_6;kRk{FKYNlH9QX?L2cLYJVXV4r-mP=
z>FLn$7ijqZ-=}{adEqC4<|8?Qmh9J-;c|6LM?AA{U!eKLoZZ5dzUi+oHH_ZA3BLvy
zd67Z<)kNv-ey6XmuT7LG(0jXIv&t0Uz1`1SWg6hU-A`I&3iRIY?^$IE@ZRokT4f6C
z-tN1sG6i&R_pMf$0=c(4Xq72|d%Lf*$`rW0-Sez61#EA(&ni;_>FpkGl__w0yU(%8
z6tKPB8CIDBwYU4j&s2LUK+%4yOo55^TV)DJwBIUIAfo+NnGzw|Z<Q$^(SEB;fr$27
zWePyFUzO1tXN%q_Hbj4*Ja-B8j$NMaC{J~iCpgL%ILf0P<+B~-Y)AR;xLu*w|B<8o
zXGi&vqx`0${2NF4myYsFj`FjP@>7oTj~(S7ILZ$>%HMXBTOH*sdfE5qlEiCY4kX?U
zG#~6KtML0ed@l!D=iY*0(KmWMIFGLNj=bm|bRq^=>)h`F6KKu;4uM(6;-fM2meM(f
z-kE(}BQM%ae7hNf|5m|2{T2d~J_{sz0?+^Dn!xkNh6FP91YY|rJ_-shU<EmSU28=@
zD0v#6o99ji*=U@+BG5ed^=ok&NF0g}546lZ1Nh{R{@&M@3?bO}WM`wCaWiDC`boZf
zBaMU=5Smv}j%48pB<?s63bbTRm?(7llfI5Xi~m5NB`<juf^=Tu#bhC1apK*?o<QR5
z<P#X6o&JMhHj-mONIV~C^&bo*Uf4w=JMmx14L~L{h|-z79Ogi*HTy2i=Yd4$P9b&)
z8Tqy%ZPH0+0(<z6WGI<f9=PiWi6ovah1G$?Q$+v{W0UWZq8DI9N1*lWIYQa5tg2o<
z4mpsX`93;u*L);1i*zB$ZK;ID7V+;cTF=1ddx4jjc~6tM^Aa6TQ&N0}GM`|2j?l?n
z;0q+SG?8U30z5++b`cSkB>#=7Zh1=3Tm9RFF2O;>50MrFty}6vvpSRc@Lizw+oIU&
z-@NN6DkQd*0&lTRLa}oTbuTe=Zdr*ls_yVQv~e4ZsV04`-<E*IeoKmotwrz$s`i0-
zb08t`&r$^mc#oOU#lK4)%OY#6TAxR;S;%Hc6?23Mx3_d|S*;AXtVNusDz6mEJCkvE
zqFK<PfJ9iqFQg%z$q(QS5gLJ(70FOw@+c9E@r8%4p-2cMc5Bv5AkQTZP@|?muf;%3
z>P-H?rj7tL`J+#%6K+2C@@^6H6!8H>{N6yKvBMEaffhf|ok_ZT80hqOkz;}DAlzeg
zp4j~yO%}=Nq%+YONW2A2JCm;yt(8Vh<4)qe1T$8kbqUJ;z0ZIKL5j!ZTc1$hfDh-F
zgQpD))L1$4;{L-|b6a*%ErAxOeuG40TZ>Ss-BzLG5Jn<XF9tRFEOCpr(%6A*$56wu
zo9&k80hdI}yTFwMt&2?AM<FAJ_A1m1t5UqB$@n4LnfyB@>_F>ix`|8;2qba^XkCeA
zhtzndt?_Q04xrJtVzDhl3j$pRU6v~vlW6Qg6+L9cSYmHkfd;|@nQiD@@{MS=;%*&%
z^8#VwF=-+|XYx<SU{5-3IEv^$5qkZ{WETK&<KO!FUf!)MPuy`l(Ri%+j^i1PbMCqW
z`jCtZkl`L&NWIaSTn7mhn?w-<EBmYBY!4E9DYLvdkQL1xIiv<-&LB%u+Qe24M5E;i
z$<y@>!D&)YYDA<{I+X=Fkk($_osQ#&BH?u=X^9Kd(y>ecDLo~^!gs?xF2c0ZWMM0I
zmFIVnpXq+9k*veia<knf#LAK3z>>E*ApvVOii!{RWfREvbi}ihPyDwqOjYQJIuRW-
z@e1B%@FM&u96=C?^bF9bm>Mj0+@>(!MmD8zdT40s3F#Q7;Z_;!m&u?+Z7VR`5J<B{
z?>6^j&=9cGWp?ssuuD^GxrPP`bj^BU<oz8ft`OByMsQXwMs{a%4^5af#vsk3`~M0Q
zED=Lb+4zveBC~)wvyD7qr?%|m#pw-8tVkx793*DpO_55DwX8UpD9Zyf8F)T9geE89
z<ub}I%vY8>K#yJmQ)uM$>q()eGdapZr#WGwl^GK&4#@0Ckn)-6-4Dck{5&uR$RJAS
zZzt*YJnTlBDGds~OEGsGzL09BNsFCGx2-r&-}Vs&4kcJO>n76d!)<N}aGQY<Q^*BG
z<Yq)<Gb}w;XOok1!G)z|7nYU#`geGu@nB*_SMwbQjmC*cP@{2)6G%M&%y<gn*6f=^
zkrr*HIO|Lv{3}*OE2y86vYES4cfx;MG_a*Cw*{vUa&0ZfmX5}$%pGV6=)}FKMNIQO
zBcD76p@;~+r=#(z^lE1L4>n$shV%k@B{4s1C*^{}m$e<vXhZeQ9T~8I#z)KI969NJ
z{9z!m4@P!hkKv>FyI*RdF^X`q<3*O0V^w&d;~V$s!$d5USI}bWeXaLpu`}6Doj%Kd
zVB`Z>ybwocay?SuJ#WNE!n5b%Dw9yR^in*~+Cg9UWG8zCexNv^)vF%m%1lHe=64ar
zh{_g3vFx%PWKU|a{tl>q!Mc@_ja+j4(lWyKjh;Qx^ROM!mIF@*ChZlMF)DOr<jSz!
zE9wR(T08~%b-UB$*-I!8l_FTZ1arQK|DCcCP&7YB&!7GKR9@JC5o-oy8MK@d7|LRp
zQnpH!Phw0^u(cHBA!b_q2Pcb|?jKRwXrfwMM_)OI980PxDfRc1oSWb!SRiXJan!DS
z+Mn|Y>8$>tDDqHeat`?;LH$gB;;M5J&JU2I=L(vYgi5JM$yr>)m5CCBcz*1clkzbt
zQZ5T=KH3R$=ora$ih2sA4LyNYG_VyaWg~@YsLwG&o!>))(Zx$CeKZMr^*&1RQVJ(|
zN%lZza_FF?MhX{TW=v!XVUaUYQuB<KLe&hEn`)1TGKUpm&3E(|@h?hM6mVA1(yyZf
z38seTJK)x`m3ylXrK+XzpJ&ZtJoEH{2VL6*tI#i<NxF9yNaVH2?(W|UJhi-^-Ug;7
zQ>p33UasXCnuc&MWF$>V%`fBxTF!+XeXpnbL$b5_NBXPh<(-_?Fp`j1UuZZ3jp{j^
zMGkk2NwBAkM7EG)UGz|A5nW}#HyF2_MRdKDc8y3Ci+;s@9dO!1*aIUEXN$QkrL$5)
zLSzrbfoPdXVCO+Dwe2J!a`qm7AB`67E0LxyNOgr43y05_N;{MD!9!hJO0d~~3@(PH
zbNoGxZ?>T(*FL_gpCu{15D-<nN-q**m6xm>E*jdIl*0X}q8p_<^y}gRr!I#R5xT9T
zUgGZR;q>zS;gm^TrhDN>v>(ua?C^!kMHf*|!$nI`QJ}e|D?|FJ`Hn85@eN|qy3jqE
zxotbJ78=N}<ERqm&Bu9aZ>RWpva{i7sCEyKWmW>#BEH{DM^jN}@<mFDv-~|HALtnQ
zlMal*k>BpXwaXYw$3;Zlke$5jPq=mPLbphva>)qk<v<S9%KNc2aBbP1=V)*xSJCo8
z&M#!plQ76tq%*mShM*p=siPJHx?eo8m#=`N)`M!4F!f8RRA|*zov^zxN$AQgesQlJ
zai3%Vx&qGA$7v6o_P}Wmoc6$J5Bx89AOp`J4Rj>in-4wn!}p*3*}<L9eDL${Ob87#
zCWJg2>tgF8wd=fI?=YjGy2hLkQaaYu)kQs}3j@K1YVlCyRTY8alBElmT|ImDyijN&
zo^hL2V8*9-7(K~z)5b`=S`|HWJ>Zx_{}7uj-fVci^f>kv)lllKHr9tXdB)H6<clh+
zg0;1EaZeSVoQ#J(cr<SI><!_ncwNjB4aU}mW1e_*u+~!(Y{H|7w}mH8Qg$kMx&5%A
z&nKU}G$S?jQF@?qrdd+Ep>BORR#G0H9&fCVhD#Q&Dx@d;{41gx{CK324*X&|cE}vM
z2S-l$!&`lQt8pIf!i^ii+X4R-@c29UJrwZ0cl-M8$IbXHf9&hq5BUEM_4Vc8M(|7T
z_4RGTZ(sWXy8v_E@9WFLnrIbZJ$|(L24Fs}#dZQ#;Q5620ONq8lh6kk1>6DH2Dl$^
zJK#~k-vN%o^9zRn3jv2>)m8y`Iba;H81R0;b$~kn?*iNp_)maG0Usqi?A}FqzypK_
zG_cwm1^ed%76L{AD*$%`#sU8bcpPvw7Tx3Ue8+zPUIq9H;A+4>0p1Q+eWb7N`+)6$
zdja<YCIJup8SRB%{sdSC_z7S=;F*8Hk`S;Ba0g&J;C{gKK0tkd)qo!OZ#!TS;4Z*Q
zz$1X00WZeQgbu(Wz=`nhEr0>Q`vIeX#{t^_*M8X7*ACbQxDRj-U=N@NE7V-{$Blsb
zfcFBH0k#9S0UiNt2ONeq|31KpfIWb-0dw&SUIZ{7@N0l&fIk7O2Ydyv4e&T%JK(gV
zkOvF{_5gkhFc<y553mgI1Hd@o2;3dMA8-ob4#35L`vIE(j{^P}aMW<a_;0{Mz#QCF
zuK=6~7zZo|ydUsZz#V{XfcpU-1w0Bk;$z64Z5UGl3jr$uD*!hG#sR+rct7Ayz#V|U
z1>6sK2=FN2$AF^{hokZPRUsfh)@Wqhw%o{Q%FP%%d}vM^E@}u*&quXm{9FoX6b}`b
z*q7k65PwZ?z(3$KM&vFWk+*o{SsQaU8`q4PefhLYE(TV}(<6mle}JC|!3XJ$<L?0Q
zn@OGzs%tC$j$r(W=f3<Sa_`MtaP}EXU=Z*`-;Td`K_3HXDEf6a{Z*j<0Qy9oZrb!C
zz#jyCzE0m{(}%;JGcevS*Xco<J_Yn#&~MP`nM(x&*+<v!i$M42^c!sXDCmpf&xeUV
zkK4Cs>yT!QOOmG}<F>L=(Gx?zn+-e0s{SCq)8CIEUx6tiYZ`({`5@3dWXOU{%Z~l1
z=WVoe6Dd?Yne`T(9z2){JC~-={T7{mU0Dk{U36RW*W2x&+l6j)vXT0M=yw8U{Q!eS
z+2C&;!e$sA(2nBo=imzvU#rIVRlBZjsH+P+q}S4OlTGgc{UGRBXp=?H{8TWI%u3*2
zc^eO;;5=(8>QH_sTi&tt<RFJ`Lk`E!CAOXtn@;n|w?Ib<w&@FPdI0phUFaT&RD*si
z=wH+2$p$U{wt{Crc+&Zu+CsmI5j~9atR^He-LD*H9?<AM@wu2^t|PwH8ee8W7)-Ht
z40RQOrx@p!p0C*L$;-n03A&p<W`ce_=w4kuY|F1?`58LB#-=xcegXOgDah^<&EF4#
zz6$!qvzV%#6;j><5qeJh2*v{aHlB4mGKAKz5wH=@AE4tnc*qYrJ#&$52fZ+si+V8D
zY(Mar_W<=E>KViItUT1CY|(g%p~C~7YF!8Q?JB#TYVeRhBRWrJrC^}`xDWKlUF;zG
zqoD5u-OZnSLH`x#bPvX|F;gZ-l23x3gSEmeoi0;?$UU^?84vnYogT97p9s1a^mKkA
z{Q=P5eN*;_?rZ7`qE~~S2YLL`V%rBFQAiN|KF|w67te+(AFr_Me-!kB0qA={&j;Nt
zUX!3-4Ehy%{cCOgIaq`E2GBnd^eYCC4}g9(==AJ{<^RRD{%X+4{sNs&&OuqUA9Py#
zU8&P+ZTh32-!y>yUeIemck90-=(mABSJxl6_2<Bl>oF%!BDxw&-2Wb+w!wc*kf+>~
zH44F``be7>N};0xJZ^nR>$%tf^sS)R4?y1zdM)T~Ip<Z-ZwH;;bg}G<+HE`n`Zqx@
z(dn5*f`R&A_?dV@5OlW~ngaTE(9`8-k}qZYWL^InyZ$KXKZU%Tf3|}D)ByDDpzi=Z
zPuIW9*8eKkAJ*xatF87O0ljws`-fwC{19}?sh0n4vGq>@Jqy<nuI*>K+xjdD`ey^Q
zZ!74>2cT~U{S(mL=HORB?*`qi|BitE#sK<<V@dV<0pzEEzWVp>W2_YPTR?ZqF;UPr
zfquR2-%Po{rTEzjdOPS}(&^e9vK{mtpyT;idyH!1?^Twctkbm|cLemGLEdf79X=fE
zOVBUY<!{#dAN0qReJV$M*`}9*{y6BO{}o-!;Ze{Z9YB67>vxmi4*Cxu?`Hq2p#LAx
z>A5*8e#@kNgzD?dI4^|Mbzf%o*Rzb*GVjiKEX(*|7TgWW@X4sQJbRVV01lMt?+XE(
z-;n+98OB$$U&t_?&5*1)v$N+Jt86yKPIa6<PJ7_A2Tpt7v<FUm;Is!$d*HMOPJ7^g
z!vh|=(T+oXpFn+&Kw=F;eFs2&cR+n-Kz&z0@trdCrD~wtv~<w7A?Q$L`j&)Vrf)gW
zfhD~>_(uf%gdvXTBnib@AE$xUvMjERaH@WD5Z4kYtM4<=brv1C6(Ej}KI^NalXl$a
zqXVmYad>dQgbv*H5XS+g;}TLFS8*AaRN@fV<T%scWhVl&89iSXYz8;WDB=_DCWEUp
z)Vu9v+)#zTk1JAk?`6l~l3pCDesOOB7{!N|%0&CXE>NFw`B82Np6C*E%T6w@X8PZ_
ztm@(F{$W6UN6o1)pF2=K*op5QaJiCUJ;Tim+Zb+R*v_zn;Xa0440{-=k2dAvX?{99
z4D%TlF)U+P$*`W`W`=DHw=tC3PX6DV%2Zi=KxVdQ;)*qmwed!e4<C&2=1=uCilXn%
zf&y<oz9%z@38|8)B?_A?<HNpGEPW}3#$uL1zd_L95&s$n-Oo(NPjQxM<Qnzjh9@%v
zco@IUfv0;)#P7^QCBSFk4rpE_PH>QYbgaN%21bJ#w*rZOZpR<#QTa{b@54!kah{b2
z6#fyMq_h8N!9UJ8zfy9ldiSD8`Y-2!`LHA#Z!-Qu9-xOAKNNz*@5K8Ue<lx1anAxW
z^^7lN{B^7cw-<z-JjRp1==g~7|K`A7hWtVGI{8;I-l=~(@EQ1?Rwd`jiBi4M%lxmi
z{z;6d@8S@@nkSfStOuUzRr7|p-wc`mWW1V3#62+J|HgPVuY8I1`|;aMIz3x~&!8`b
z`6S~4=6{{}Z{&n8?xBH}iG)ph_A_4P{~3($Vf<v)b3fz9^2DI}<xR#<V*JI-@5KZ_
z`mbfYvi~cLuVp*~V-Mr+bMT*uL{54hbMVh){7Z~i_QV*k=5KC>>v+5u{2BPwedRnh
zTm$Li|9<e(=vLo*RP2ukJ?9(FyxcDEW2|{h@$Ug%+;3F~hKGQ^80}p<ULwTrcsL!4
zM3avH@610=++4PKuEMNEdhX?py`1$gXZ+7El?ZXqAE)#i0`ZUF3R#`;J;rZme1P@5
z$oOr%Fj&g?w}DTW%CliV>HiD!EB#|!+T~^b7bi-^Do%oo-_L<2e%AxbLySMp{AxbW
z#C)92pJN#R<4dG|#b3twcJ`ZiW&tb_;B$?!R=$-|$V<$>oc*cvbTEFqM{*Xkz%k&{
z_2Ve4Q^?Ltu2;49uLxid>NP4^0fUL)KZi8sO9Y0wIId(pAF@3qjQ=|0ALqEbobmLG
z4b{7x{igcm5b){j9EOD@@gHTzFzcDc`2CDmdTwR>#tD+KfcYP1{3q;xHSN8{_<J07
zUW;`d)q5xNt2}uJ<Nt%>LAC3j1)eL@z>~nIYu5qRGiQ=yR{eOF7^k_$%RH~qGbD6e
zii9Klz=>^+L>qOCKfv}^Grpbi&hhdK#xLb|sd~RSQtH2z`$f%b*D&5Wjw*mp*RDI6
zKcDSU<K<sm__qUp4uUYJk_~6@H0vq7Od?eO{ucOj-<v$n{39IwJ`3x|bas{lPyTd{
z>wf}%JnYG3dve&G$C%$4w?Aiml<l0%{MkrK=VqQ`sOuj_8)p$-6*M@`1wRXTvhx>?
zI9$f~VH^*uSl8EG^w4*fNl%pZC>t_xLiiBtnZ<gpV!SgCn~Zmkmsc5o8Ry$gtfvtJ
zjr6bbNW^uFe;9a(^gDJkzq21dV*D5$FX(P@%)vNGr)L}RqP>oO>2~4&l=;0JXiEQO
zxKJcLM;+ttW8}$mfiHqxba47J>Y3l!-tRE}EgoNL+#LZvo&BFNe;zZ6=cZ84`R7S{
z>K*xi3FC`6{>AeN;J=&k53&7I$ygjO0-vtl-!uPFo_{%9jN^=V=JSPEXOn*(U_YyN
zJpp_={jU%{6G<22MnCoePkA7(Qpe)iAl5(4(cWvZ(4~5paDRP`#qMGJ5w=Io7tb($
zD95LV`Dr~(dYt+53+P`AnSRG2;EDfgN1QY;-phWwlO?~)_;F(;g1g_?&iL;$Lglv)
zfv0)js7$T;Gl3sxcpUg4n7GsV`F!BXPUm<r89$2ssp@^i1^<DIesq=4-{X;XDjTk0
zymMVw0er4@{is@3$^6dwl)hA@bShqg4>7-U-v15boqm3g@y>o3fjA)lIM)?(8Gi)r
zrUPLw4nOee><KY{G3udXz68cb7ybvBe?P}3!cQFk<-*^~{6)Oph%o;ph%*nL>!1ku
zbavhVJhk_?oFC@0&^KK8A7*~%diZt5=R4L97hvF%eu@h^*nNhN@!#Nh^GdR@j`25g
zK36vXgz?UG+Ix(j&3;q-!w|q!?<9wwg^YKOuNKBT$L~*p_pog`*u(r!alJ4@9Me7N
z`IiAN{J`rU)!y3}@0?$L$oN+{KdbfR9>)KO`%C5RPk~o$H}s>tDi-&7>*yQHYa(Vm
zxXu8gA>O!lt+&dsKfG<mYw)G%y4r99I74;jx@g^+VAKrZ&5s5%*w|!L)!{7;eET|t
zuOO%8pbtGq%%J#WbhtJi+hnYb1#7})sIjJI6GXHUK4cw<r?58AJ0f9N5P_(-s=i))
zC%Y71qmJO?)cC}+xr*NuS$eH_SEMQ`zF2L)ZL+{uqQ6VB*uTN=Ushoj*DtHc$7ja1
zZ+|Z+7?`s>e&yP_*v4Qil)^{amZLu3j99p)ZbR6Nh1cS{<+WAvbKr&ah3?dkbD!J`
zFlfl)@@e!k4B5`6r+-}rEm>TiZ~9Bu_{3j|2x_mOcWmVAH>EZCe#gr;kS1Yjm-LTI
zC1j6VCH#%`lWZxOpVCtOyX_~ZlY0Q)Q4iqT@8a9*CDe93HcHpz`~9h{*FTbeN)?}y
zL-+&nc2J+3DaHAYv2k*0X5bU~_*VKqM3?+P{i=%cQ*9gdZ=p|o)jb}m5{V>2pO+8D
zBiL0Sh>y>Q!VUPudzC2XM<OXhe-Lk=^-C;+keLNfMZ~LZC5tK8aBM)LD8Tz}p>UJQ
zuez;lsIQ=54U5X-g_J@{mb<<Pw=8|8fdZLmmX%MZQCl9LhL7Ki2zQKbp<tS*+Qg;>
zHOQ+aD<N*zSX__H2zwj~Dd)<z=woKF-%l1zS43pL25g8>QeiG;JxWah<y;JFVI6#6
z!a%b+9L2^2{YE0RE{73t142~GR%Ga6Y_b5=w9|rAHO;D9yimBoVO|B^HuM!*JazHv
zaEx+4Wl<kzxYSzG<isn{lhsHZ{^h70)l!>Jm`WT%i%OTxpI3?yZCqoPm|_D1(_FZG
z-V(gwxU`t|yfCpFjp+|CGEltSFpF<oI&VqI0>fnKWeXRU`zy?fdGkyCW||EUio{L?
z*du^82GD0W-VtJf*b%}GG<)0?L_)~<Ck(GbZaycp!iJ5(dU!=(XQ5MT8)>5o-!$4C
zLhN7>#8Lq-b~3-;mmdl<KI|`pH|4ewL5)RAck&%mn^q1!3Qo=&OMO1=9oUkHAKOh}
zlMNc&dgfL;c1Y*&HVp*@!asV&!a2M{M1M#2>+mw$d8!7ULR4-<m|rj6l9dyV<ptFY
zn@*t%<CkA6;|t;C93ej1ip06$NPi3b1CO0TZS3?DmYa2m;GSXiof(e>Bk_h3vf1iI
z|4j9&uVwPmYc29j+Bt-_Y9T*_L&12EhYZpL?WICHsi?Pql}hEoG>wEy{D>P2LAlLJ
zOu2W4TX+=s1hd?mh1Q8;E(rT6)>5`*(IZ0I$Z?9%AiYtt3_FE{BDH2?Ll`@fkaG&K
zO$(Y~sinC^R#j{IN<;|wkS!&PO)Dw098}}S7%nd~ttF^qkD0+bg%&H*Osr^WAf?!E
zjq`MS%Jgrw9f-6mjor~IP@%3y#U?y(B6gcjacz%h--*I1B|A{AEyHjZ8DcQG1y;hy
z0`>$=N>;Q{5T@Di#wFUUh4X?EA6RrnVvd1fVu7mMj?f>>(8L--Nu-P>Iq>OnBxPru
z{wauqlgA1rLA@)zoYEYVW@(KNljfid^!v3rOJ(~0&F_~u(xoObYSA*Q#m<eC1{>rm
zeEQ}30+s72B2zbM8mw-gk5(aiS|L^Dg1TC{ShPn1(&~n?l<P)4A9Cg#VD~A#qiCc$
zTT@71UGPVEv!c|lH$x3|Ccdu_qRp?6z-F4ow3w~iWSb|915v+HQYlrh+K!PEO-)y-
zsf!}sr12vgsqe{@YNnVtPNdeNiy2Q0SfsAv8@#w|_PT6UWyc%)nL0dWVJMbtY3AcJ
zVK3qmmw7aa(5(rvFH~wnoEuG9RBXH?*4Eh6tE2|G21&et{-+K_RaV>5CsCy0C8qp>
z2IiEySa6-1kxsC^R%!>%5;pLKLYg)YVi6~<5e8%NG%=5A>ov~Cn91DcUNv0d4?S<5
zbOJ7LC`y-raot4gP%XiW)ht>#D=ZcwW@K&2%7z%s#{Di_4B`d@o#K-wCdLpM8o^#_
z;<iXMvObK<7e8`Zfe%=5Pp3*Hga}qOCFL{dddW9aQL#%|WSyu-ko^AX8-meBtbX_!
zYB>bT7Y#B>r2oW3Ah$8IqR(2=4<gWb*=dhmx$dVvPrYs#?6Q)kL>@I1>pT;|bN`tA
z@=`-wF3nGQjMLt8at}DmhuB38V|9>=3EJ0=Jf_F72tV5aD#wD$xi*&*ASNlC3@$;a
zs~RXfwd|(N;$o;{b3Wa{WQ}wFnTF2>`Q>eqYX{>V`vO3D=|tI&*5p<ukt^|mR?<Oz
zy-XK<BH4<&0>Kix{6{OqmWoC8ZhP2bPxP2;a*8yGYXC6}Xl-ci>Zk(xg#GDDU2&tU
zoEK{O{xnHB-2zO`L<8LDm~LOJIkqdb;u#Z?ybo?xELouLBc$B^Nn?y#u=>S)?9Xv?
zXnFZ84sBPDW6~?fE{kF8wMd52rkvWP#GoS04w|xSDcH*6;alwyNSPktAv^vgmx1aw
z<e)a%)Z&dQ9ZVDKf$i!i#}yXmS8XzNWQ5PLrk86Sv4o>Ais4t2aBax2cD%HL$(~?N
zWsZ=$nWBT#?*^YI0&zuaU3{s_{FBl{7vk#I4>1d1L(w!1JyFu4Tex(IP*JaPSDm{3
zps)XB2b*iKBP)9t6Nk<qFHKdLrtberi&|%T7J21!+&j`DOm1AOA>3AKsQ2?+)a&e+
zP|7x>*}1j9hdGdg<^E-KlQ7L*w2tvKsM!be;}YCLm0z1val%#czO}kXX;0RHCk7}i
zw-xfOj)C?dPTA77NbLhFD#47v*Jtz#sk|YCEFpe?z%`qF8wi(_;x>@ja<;$g94oc7
z^NPITXbrhjS*p<QI=C_C@Fv{|v)7I%x_>j%%GGr9M&8;zr4^^Pl9Bf#29s_Psp>wE
zSW20}Pzb+EG}NutE|_sKKfulWG&xJSTC+#|ltC+rQ^?HRaf4|TUl*kAl5NlQm=Ds}
z{12Y#X+XGcylvl=up^w-Z4~1L@HJL#C=GVXq@)O5{bq-)mURkxfn1%ZyBn(wwHj;r
zC=)?y1}5L?`2ycWYS>g053T`>$0V#)XZUDlI96|Xaq$@T;`a`3eGFSm$Ksnb)SAXf
zG&B`^PfIRr20fJ?u@LNZqsQ=uHr1jE3F9$I*?>K|@pENL!2~T9js{79&+4Ob!z)&O
zUYvT@)uBiy4dE)oi=D4g6gM`!u{v?@-5ajvr!1;N(56bL23uN(o2tU~aXbJ*JF5$=
z@&OE~L!FZzG6O1w$-$Zk>XO<q=^0);20}k2>Q9)Q)Hyv4lz~5fjM>N=BGo8}$D2|P
z;?)m&EM_SFl>AJVS1?~^#<_Z4SD|O%M3<-UyV0SbdcIL&=^dohqXb1=UcGmvpeL2R
zpZpD=<CBne%6|3!qJrvqz%y8n)BYgvcr@N>{{gmNLHeE@9b_Z<PRXn1%IJA9Vo~*b
zh!KZ^>itNGl{(Zp!CUc1?;a|7^}eBk3z=EjulN+a6Lfl)QI*yEj0$$KJefsyD*G92
zwBm&NM9Hi7D-~4lSE~AzylVdgEI*$Ws`oV&EMmnZPtUA5<-Z3U`Bmx1qh|78$d9`*
zvVZ*iD=50WhvgI$-{!QW?Z;wOHIF#t+xekX1r?uCp~?!jJLEf9Uct>|oOUQV1)l~@
zw_iQ)tl(tzfF$csa!TcM4te!Fyn=WQBIR(7zn55E^}l-mM8O3P`#mYz4C9v$dG#KZ
zf>U_>C^2XKZ#d-Z3niz5NAM`KeyI3SxI;K06P5j|=Shl!LB+_>(H!Gr;PJ|a7#qZ*
z-k%PXQpt`NS+e6-*)aqP=~;HwO!c1TN|slAZt^1`Pc|ue^<H8n%WqbK3_XrA?a@JF
zN6D-A)w-1Z>=;f<*7#F#^cZCI`qlf{JxgUpIYiVB)gA>WfUe6MmCRfwp~@3Vg_2Wc
z+Bk%8%Kp4cNy%e*C%?lSBcJQfR|**_dG%bUA}e_vs@PFH1Or@ufFB0MW2(j#_*3?%
ocAW{FvK^<^(Y8jOUNqi9i4#??!cw|OC;vpV<e23Ua1@RI0ip2Wh5!Hn

diff --git a/lib/cos_thread.h b/lib/cos_thread.h
index 1371bdd..aa8dc31 100644
--- a/lib/cos_thread.h
+++ b/lib/cos_thread.h
@@ -16,9 +16,9 @@ class CosThread {
         tid_ = gettid();
         NotifyInitComplete();
 
-        if (ksched_ == KernelSchedulerType::kExt) {
+        // if (ksched_ == KernelSchedulerType::kExt) {
           WaitUntilWork();
-        }
+        //}
 
         std::move(w)();
     });
diff --git a/lib/cos_agent.bpf.cpp b/sched/cos_agent.bpf.cpp
similarity index 100%
rename from lib/cos_agent.bpf.cpp
rename to sched/cos_agent.bpf.cpp
diff --git a/lib/example_agent_main.cpp b/sched/example_agent_main.cpp
similarity index 100%
rename from lib/example_agent_main.cpp
rename to sched/example_agent_main.cpp
diff --git a/scx_example_userland.c b/scx_example_userland.c
index eb8d5bd..feb66a9 100644
--- a/scx_example_userland.c
+++ b/scx_example_userland.c
@@ -208,7 +208,7 @@ static void drain_enqueued_map(void)
 			printf("%dagent 调度 线程%d 所属进程%d\n",getpid(),task.pid, tgid);
 			if (gtid2hashtable.count(tgid) == 0) { 
 				char buf[128];
-				sprintf(buf,"exp/shm_%d",tgid);
+				sprintf(buf,"/etc/cos/shm/shm_%d",tgid);
 				int shm_fd = open(buf,O_RDWR);
 				void* shm = (struct entry*)mmap(NULL, SHM_SIZE,PROT_READ|PROT_WRITE, MAP_SHARED,shm_fd,0);
 				gtid2hashtable[tgid] = LFHashTable<int32_t>((void*)shm, SHM_SIZE, 0);
@@ -263,47 +263,47 @@ static void dispatch_batch(void)
 static void *run_stats_printer(void *arg)
 {
 	while (!exit_req) {
-		__u64 nr_failed_enqueues, nr_kernel_enqueues, nr_user_enqueues, total;
-
-		nr_failed_enqueues = skel->bss->nr_failed_enqueues;
-		nr_kernel_enqueues = skel->bss->nr_kernel_enqueues;
-		nr_user_enqueues = skel->bss->nr_user_enqueues;
-		total = nr_failed_enqueues + nr_kernel_enqueues + nr_user_enqueues;
-
-		printf("o-----------------------o\n");
-		printf("| BPF ENQUEUES          |\n");
-		printf("|-----------------------|\n");
-		printf("|  kern:     %10llu |\n", nr_kernel_enqueues);
-		printf("|  user:     %10llu |\n", nr_user_enqueues);
-		printf("|  failed:   %10llu |\n", nr_failed_enqueues);
-		printf("|  -------------------- |\n");
-		printf("|  total:    %10llu |\n", total);
-		printf("|                       |\n");
-		printf("|-----------------------|\n");
-		printf("| VRUNTIME / USER       |\n");
-		printf("|-----------------------|\n");
-		printf("|  enq:      %10llu |\n", nr_vruntime_enqueues);
-		printf("|  disp:     %10llu |\n", nr_vruntime_dispatches);
-		printf("o-----------------------o\n");
-		printf("%d\n",getpid());
-		printf("\n\n");
-
-		printf("o-----------------------o\n");
-		printf("| BPF ENQUEUES          |\n");
-		printf("|-----------------------|\n");
-		printf("|  kern:     %10llu |\n", nr_kernel_enqueues);
-		printf("|  user:     %10llu |\n", nr_user_enqueues);
-		printf("|  failed:   %10llu |\n", nr_failed_enqueues);
-		printf("|  -------------------- |\n");
-		printf("|  total:    %10llu |\n", total);
-		printf("|                       |\n");
-		printf("|-----------------------|\n");
-		printf("| VRUNTIME / USER       |\n");
-		printf("|-----------------------|\n");
-		printf("|  enq:      %10llu |\n", nr_vruntime_enqueues);
-		printf("|  disp:     %10llu |\n", nr_vruntime_dispatches);
-		printf("o-----------------------o\n");
-		printf("\n\n");
+		// __u64 nr_failed_enqueues, nr_kernel_enqueues, nr_user_enqueues, total;
+
+		// nr_failed_enqueues = skel->bss->nr_failed_enqueues;
+		// nr_kernel_enqueues = skel->bss->nr_kernel_enqueues;
+		// nr_user_enqueues = skel->bss->nr_user_enqueues;
+		// total = nr_failed_enqueues + nr_kernel_enqueues + nr_user_enqueues;
+
+		// printf("o-----------------------o\n");
+		// printf("| BPF ENQUEUES          |\n");
+		// printf("|-----------------------|\n");
+		// printf("|  kern:     %10llu |\n", nr_kernel_enqueues);
+		// printf("|  user:     %10llu |\n", nr_user_enqueues);
+		// printf("|  failed:   %10llu |\n", nr_failed_enqueues);
+		// printf("|  -------------------- |\n");
+		// printf("|  total:    %10llu |\n", total);
+		// printf("|                       |\n");
+		// printf("|-----------------------|\n");
+		// printf("| VRUNTIME / USER       |\n");
+		// printf("|-----------------------|\n");
+		// printf("|  enq:      %10llu |\n", nr_vruntime_enqueues);
+		// printf("|  disp:     %10llu |\n", nr_vruntime_dispatches);
+		// printf("o-----------------------o\n");
+		// printf("%d\n",getpid());
+		// printf("\n\n");
+
+		// printf("o-----------------------o\n");
+		// printf("| BPF ENQUEUES          |\n");
+		// printf("|-----------------------|\n");
+		// printf("|  kern:     %10llu |\n", nr_kernel_enqueues);
+		// printf("|  user:     %10llu |\n", nr_user_enqueues);
+		// printf("|  failed:   %10llu |\n", nr_failed_enqueues);
+		// printf("|  -------------------- |\n");
+		// printf("|  total:    %10llu |\n", total);
+		// printf("|                       |\n");
+		// printf("|-----------------------|\n");
+		// printf("| VRUNTIME / USER       |\n");
+		// printf("|-----------------------|\n");
+		// printf("|  enq:      %10llu |\n", nr_vruntime_enqueues);
+		// printf("|  disp:     %10llu |\n", nr_vruntime_dispatches);
+		// printf("o-----------------------o\n");
+		// printf("\n\n");
 		sleep(1);
 	}
 
-- 
GitLab


From 4db791ee642b25f81bbdc31d3a29cf4378d51368 Mon Sep 17 00:00:00 2001
From: shootsecond <2782457525@qq.com>
Date: Sun, 21 May 2023 20:29:23 +0800
Subject: [PATCH 2/3] =?UTF-8?q?refactor=20:=20=E5=BF=85=E8=A6=81=E7=9A=84?=
 =?UTF-8?q?=E5=88=A0=E9=99=A4?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 Makefile                                      |   8 +-
 client/Makefile                               |   4 +-
 client/cos_client                             | Bin 70912 -> 0 bytes
 client/cos_client.cpp                         |  17 +-
 client/cos_client.o                           | Bin 129264 -> 0 bytes
 client/simple_client.cpp                      |  18 +-
 lib/cos.h                                     |   5 -
 lib/cos_agent.h                               | 260 ------------------
 lib/cos_thread.h                              |   2 +-
 lib/hash.h                                    |   2 +-
 lib/task.h                                    |   7 -
 lib/userland_agent.h                          |  99 -------
 sched/cos_agent.bpf.cpp                       | 208 --------------
 sched/example_agent_main.cpp                  |   8 -
 scx_example_userland.bpf.c => scx_sjf.bpf.c   |   2 +-
 scx_example_userland.c => scx_sjf.c           |  51 ++--
 ...mple_userland_common.h => scx_sjf_common.h |   2 +-
 17 files changed, 50 insertions(+), 643 deletions(-)
 delete mode 100755 client/cos_client
 delete mode 100644 client/cos_client.o
 delete mode 100644 lib/cos_agent.h
 delete mode 100644 lib/task.h
 delete mode 100644 lib/userland_agent.h
 delete mode 100644 sched/cos_agent.bpf.cpp
 delete mode 100644 sched/example_agent_main.cpp
 rename scx_example_userland.bpf.c => scx_sjf.bpf.c (99%)
 rename scx_example_userland.c => scx_sjf.c (90%)
 rename scx_example_userland_common.h => scx_sjf_common.h (94%)

diff --git a/Makefile b/Makefile
index a4870a3..86959bf 100644
--- a/Makefile
+++ b/Makefile
@@ -118,7 +118,7 @@ BPF_CFLAGS = -g -D__TARGET_ARCH_$(SRCARCH)					\
 	     -Wall -Wno-compare-distinct-pointer-types				\
 	     -O2 -mcpu=v3
 
-all: scx_example_userland
+all: scx_sjf
 
 # sort removes libbpf duplicates when not cross-building
 MAKE_DIRS := $(sort $(BUILD_DIR)/libbpf $(HOST_BUILD_DIR)/libbpf		\
@@ -169,8 +169,8 @@ endif
 	$(Q)$(BPFTOOL) gen skeleton $(<:.o=.linked3.o) name $(<:.bpf.o=) > $@
 	$(Q)$(BPFTOOL) gen subskeleton $(<:.o=.linked3.o) name $(<:.bpf.o=) > $(@:.skel.h=.subskel.h)
 
-scx_example_userland: scx_example_userland.c scx_example_userland.skel.h	\
-		      scx_example_userland_common.h user_exit_info.h
+scx_sjf: scx_sjf.c scx_sjf.skel.h	\
+		      scx_sjf_common.h user_exit_info.h
 	$(CC) $(CFLAGS) -c $< -o $@.o
 	$(CC) -o $@ $@.o $(HOST_BPFOBJ) $(LDFLAGS)
 
@@ -178,7 +178,7 @@ scx_example_userland: scx_example_userland.c scx_example_userland.skel.h	\
 clean:
 	rm -rf $(SCRATCH_DIR) $(HOST_SCRATCH_DIR)
 	rm -f *.o *.bpf.o *.skel.h *.subskel.h
-	rm -f scx_example_userland
+	rm -f scx_sjf
 
 install:
 	sudo mkdir /etc/cos/shm
diff --git a/client/Makefile b/client/Makefile
index 78857a8..1e467cd 100644
--- a/client/Makefile
+++ b/client/Makefile
@@ -2,8 +2,8 @@ CC = g++
 CFLAGS = -std=c++11 -Wall
 LDFLAGS = 
 
-TARGET = cos_client 
-SRCS = cos_client.cpp 
+TARGET = tmp 
+SRCS = tmp.cpp 
 OBJS = $(SRCS:.cpp=.o)
 
 all: $(TARGET)
diff --git a/client/cos_client b/client/cos_client
deleted file mode 100755
index 8786a2c27aa539b29a4899d34164db5c5f61a4b7..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 70912
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

diff --git a/client/cos_client.cpp b/client/cos_client.cpp
index 3b0361f..d811b80 100644
--- a/client/cos_client.cpp
+++ b/client/cos_client.cpp
@@ -24,7 +24,7 @@ struct option{
 
 // TODO:获取用户输入参数,填入struct option
 struct option get_options_from_args(int argc, char** argv){
-    return {1000,10}; // 目前只创建一个worker线程
+    return {1000, 10}; // 目前只创建一个worker线程
 }
 
 int main(int argc, char** argv){
@@ -44,27 +44,16 @@ int main(int argc, char** argv){
     for(int i=0;i<op.worker_size;i++){
         workers.emplace_back(new CosThread(CosThread::KernelSchedulerType::kExt, []{
             while(true){ // do some work
-                printf("%d:working...\n",gettid());
+                printf("%d:working...%d\n",gettid(),sched_getscheduler(gettid()));
                 sleep(1);
             }
         }));
-        // workers.back()->WaitUntilInitComplete();
-        // int tid = workers.back()->tid();
-        // hashtable.Add(tid, tid);
-        // // 设置调度类
-        // struct sched_param param = { .sched_priority = 0 }; 
-        // sched_setscheduler(tid, SCHED_EXT, &param); 
-
-        // printf("%d:唤醒了%d\n",getpid(),tid);
-        // // 唤醒
-        // workers.back()->NotifyWork();
     }
-    //填信息、设置调度类、唤醒
+    // 填信息、设置调度类、唤醒
     for (auto& t : workers) {
         t->WaitUntilInitComplete();
         int tid = t->tid();
         hashtable.Add(tid, tid);
-        // 设置调度类
         struct sched_param param = { .sched_priority = 0 }; 
         sched_setscheduler(tid, SCHED_EXT, &param); 
 
diff --git a/client/cos_client.o b/client/cos_client.o
deleted file mode 100644
index 4e463cb8e206154f5d5de964fa03903d7b36e437..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 129264
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
a5E@3Jho2x&0-OF9+7Ok8f&N1V==uRVL2sh~

diff --git a/client/simple_client.cpp b/client/simple_client.cpp
index 085d38c..10e0473 100644
--- a/client/simple_client.cpp
+++ b/client/simple_client.cpp
@@ -13,23 +13,29 @@
 #define SHM_SIZE 4096
 
 
-int main(int argc, char** argv){
+int main(int argc, char** argv) {
+
     char buf[32];
-    sprintf(buf, "shm_%d", getpid());
+    sprintf(buf, "/etc/cos/shm/shm_%d", getpid());
     int shm_fd = open(buf, O_RDWR | O_CREAT | O_TRUNC, 0644);
     ftruncate(shm_fd, SHM_SIZE); 
-    int* shm = (int*)mmap(NULL, SHM_SIZE,PROT_READ|PROT_WRITE, MAP_SHARED,shm_fd,0);
-    memset(shm,0,SHM_SIZE);
+    int* shm = (int*)mmap(NULL, SHM_SIZE, PROT_READ | PROT_WRITE, MAP_SHARED, shm_fd, 0);
+    memset(shm, 0, SHM_SIZE);
 
-    LFHashTable<int32_t> hashtable((void*)shm, SHM_SIZE, 0);
-    std::vector<std::thread> workers(500);
     int baba = 500;
+    LFHashTable<int32_t> hashtable((void*)shm, SHM_SIZE, 0);
+    std::vector<std::thread> workers(baba);
+
     for (int i = 0 ; i < baba; i++) {
         workers[i] = std::thread ([&hashtable] { 
+
             hashtable.Add(gettid(), gettid());
+
             struct sched_param param = { .sched_priority = 0 }; 
             sched_setscheduler(gettid(),SCHED_EXT,&param); 
+
             printf("调度类为:%d\n",sched_getscheduler(gettid()));
+            
             while(true){ 
                 printf("%d working...\n", gettid());
                 sleep(1);
diff --git a/lib/cos.h b/lib/cos.h
index ee117c5..22772d3 100644
--- a/lib/cos.h
+++ b/lib/cos.h
@@ -8,9 +8,4 @@ struct entry;
 // shm的最大entry数
 #define MAX_ENTRY_NUMS SHM_SIZE / sizeof(struct entry)
 
-// TODO: 线性探测
-// 目前只随便取了个余
-int hash(__s32 pid){
-    return pid % MAX_ENTRY_NUMS;
-}
 
diff --git a/lib/cos_agent.h b/lib/cos_agent.h
deleted file mode 100644
index 39077bf..0000000
--- a/lib/cos_agent.h
+++ /dev/null
@@ -1,260 +0,0 @@
-#include <stdio.h>
-#include <unistd.h>
-#include <sched.h>
-#include <signal.h>
-#include <assert.h>
-#include <libgen.h>
-#include <pthread.h>
-#include <bpf/bpf.h>
-#include <sys/mman.h>
-#include <sys/syscall.h>
-#include <fcntl.h> // for O_RDWR and open
-#include <map>
-
-#include "user_exit_info.h"
-// orders matter
-#include "task.h"
-#include "cos.h"
-#include "cos_agent.skel.h"
-
-class CosAgentProcess {
-
-  public:
-    virtual struct enqueued_task; //由子类定义
-    explicit CosAgentProcess(){
-        printf("进入\n");
-        int err;
-
-        err = bootstrap(argc, argv);
-        if (err) {
-            fprintf(stderr, "Failed to bootstrap scheduler: %s\n", strerror(err));
-            return err;
-        }
-
-        printf("main loop开始\n");
-        sched_main_loop();
-
-        exit_req_ = 1;
-        bpf_link__destroy(ops_link_);
-        uei_print(&skel_->bss->uei);
-        cos_agent__destroy(skel_);
-
-        NotifyExit();
-    }
-
-    // call by main
-    void WaitUntilExit(){
-        while(!exit_){
-
-        }
-    }
-
-    void NotifyExit(){
-        exit_ = true;
-    }
-  private:
-    virtual struct enqueued_task PickNextTask();
-    virtual bool RemoveTaskFromRq(struct enqueued_task task);
-    virtual bool Enqueue(struct enqueued_task* task);
-
-    void sched_main_loop(void)
-    {
-        while (!exit_req_) {
-            drain_enqueued_map();
-            dispatch_batch();
-            sched_yield();
-        }
-    }
-
-    int dispatch_task(s32 pid)
-    {
-        int err;
-        
-        err = bpf_map_update_elem(dispatched_fd, NULL, &pid, 0);
-        if (err) {
-            fprintf(stderr, "Failed to dispatch task %d\n", pid);
-            exit_req_ = 1;
-        }
-
-        return err;
-    }
-
-    // 把vruntime sorted list的batch个task dispatch到kernel中
-    void dispatch_batch(void)
-    {
-        __u32 i;
-
-        for (i = 0; i < batch_size_; i++) {
-            /*
-            The data structure containing tasks that are enqueued in user space. 
-                struct enqueued_task {
-            */
-            struct enqueued_task *task; //@ !!!注意,这个enqueued_task就是用户自己编写的agent需要定义的
-            int err;
-            __s32 pid;
-
-            task = PickNextTask();
-            if (!task)
-                return;
-
-            // min_vruntime = task->vruntime;//@
-            pid = task_pid(task);
-            RemoveTaskFromRq(task);
-            err = dispatch_task(pid);
-            if (err) {
-                fprintf(stderr, "Failed to dispatch task %d in %u\n",
-                    pid, i);
-                return;
-            }
-        }
-    }
-
-    int bootstrap(int argc, char **argv)
-    {
-        // 1.设置调度类为EXT
-        int err;
-        //__u32 opt;
-        int opt;
-        struct sched_param sched_param = {
-            .sched_priority = sched_get_priority_max(SCHED_EXT),
-        };
-        bool switch_partial = false;
-
-        signal(SIGINT, sigint_handler);
-        signal(SIGTERM, sigint_handler);
-        libbpf_set_strict_mode(LIBBPF_STRICT_ALL);
-
-        err = syscall(__NR_sched_setscheduler, getpid(), SCHED_EXT, &sched_param);
-        if (err) {
-            fprintf(stderr, "Failed to set scheduler to SCHED_EXT: %s\n", strerror(err));
-            return err;
-        }
-
-        // 2. 处理参数
-        while ((opt = getopt(argc, argv, "b:ph")) != -1) {
-            switch (opt) {
-            case 'b':
-                batch_size_ = strtoul(optarg, NULL, 0);
-                break;
-            case 'p':
-                switch_partial = true;
-                break;
-            default:
-                fprintf(stderr, help_fmt_, basename(argv[0]));
-                exit(opt != 'h');
-            }
-        }
-
-        // 3.做一些bpf程序的初始化工作
-
-        err = mlockall(MCL_CURRENT | MCL_FUTURE);
-        if (err) {
-            fprintf(stderr, "Failed to prefault and lock address space: %s\n",
-                strerror(err));
-            return err;
-        }
-
-        // open bpf程序
-        skel_ = scx_example_userland__open();
-        if (!skel_) {
-            fprintf(stderr, "Failed to open scheduler: %s\n", strerror(errno));
-            return errno;
-        }
-        skel_->rodata->num_possible_cpus = libbpf_num_possible_cpus();
-        assert(skel_->rodata->num_possible_cpus > 0);
-        skel_->rodata->usersched_pid = getpid();
-        assert(skel_->rodata->usersched_pid > 0);
-        skel_->rodata->switch_partial = switch_partial;
-
-        err = scx_example_userland__load(skel_);
-        if (err) {
-            fprintf(stderr, "Failed to load scheduler: %s\n", strerror(err));
-            goto destroy_skel_;
-        }
-
-        enqueued_fd = bpf_map__fd(skel_->maps.enqueued);
-        dispatched_fd = bpf_map__fd(skel_->maps.dispatched);
-        assert(enqueued_fd > 0);
-        assert(dispatched_fd > 0);
-
-        ops_link_ = bpf_map__attach_struct_ops(skel_->maps.userland_ops);
-        if (!ops_link_) {
-            fprintf(stderr, "Failed to attach struct ops: %s\n", strerror(errno));
-            err = errno;
-            goto destroy_skel_;
-        }
-
-        return 0;
-
-    destroy_skel_:
-        scx_example_userland__destroy(skel_);
-        exit_req_ = 1;
-        return err;
-    }
-
-    void drain_enqueued_map(void)
-    {
-        while (1) {
-            struct scx_userland_enqueued_task task;
-            bool err;
-            if (bpf_map_lookup_and_delete_elem(enqueued_fd, NULL, &task)){
-                return;
-            }	
-
-            __s32 tgid = task.tgid; // 获取task所属进程的pid
-
-            if(tgid != getpid()){
-                printf("%d:agent得到了工作线程,其tid为%d, 所属进程的pid为 %d\n",getpid(),task.pid,tgid);
-
-                struct entry* arr = NULL;
-                if (offsets_.count(tgid) == 0) { // 第一次访问
-                    // printf("%d:agent第一次访问\n",getpid());
-                    char buf[128];
-                    sprintf(buf,"shm_%d",tgid);
-                    int shm_fd = open(buf,O_RDWR);
-                    arr = (struct entry*)mmap(NULL, SHM_SIZE,PROT_READ|PROT_WRITE, MAP_SHARED,shm_fd,0);
-                    offsets_[tgid] = (unsigned long long) arr;
-                }
-                else{
-                    // printf("%d:agent第二次以后访问\n",getpid());
-                    size_t off = offsets_[tgid];
-                    arr = reinterpret_cast<struct entry*>(off);
-                }
-                task.ddl = (arr[hash(task.pid)]).ddl;
-                // printf("%d:agent设置了ddl=%d\n",getpid(),task.ddl);
-            }
-
-            err = Enqueue(&task);//@
-            if (!err) {
-                printf("Failed to enqueue task %d\n",task.pid);
-                exit_req_ = 1;
-                return;
-            }
-        }
-    }
-
-    void sigint_handler(int userland)
-    {
-        exit_req_ = 1;
-    }
-
-    /* Number of tasks to batch when dispatching to user space. */
-    __u32 batch_size_ = 8;
-
-    volatile int exit_req_;
-
-    struct cos_agent *skel_;
-    struct bpf_link *ops_link_;
-    std::map<__s32,unsigned long long> offsets_; // key为client进程的pid,value为其对应的shm offset。maybevalue为size_t之类的会好些?
-    char help_fmt_[] =
-    "A minimal userland sched_ext scheduler.\n"
-    "\n"
-    "See the top-level comment in .bpf.c for more details.\n"
-    "\n"
-    "Usage: %s [-b BATCH] [-p]\n"
-    "\n"
-    "  -b BATCH      The number of tasks to batch when dispatching (default: 8)\n"
-    "  -p            Don't switch all, switch only tasks on SCHED_EXT policy\n"
-    "  -h            Display this help and exit\n";
-    volatile bool exit_ = false;
-}
\ No newline at end of file
diff --git a/lib/cos_thread.h b/lib/cos_thread.h
index aa8dc31..5572eeb 100644
--- a/lib/cos_thread.h
+++ b/lib/cos_thread.h
@@ -18,7 +18,7 @@ class CosThread {
 
         // if (ksched_ == KernelSchedulerType::kExt) {
           WaitUntilWork();
-        //}
+        // }
 
         std::move(w)();
     });
diff --git a/lib/hash.h b/lib/hash.h
index a0b3db0..4cd6cc5 100644
--- a/lib/hash.h
+++ b/lib/hash.h
@@ -49,7 +49,7 @@ public:
         assert(key != 0);
         for (int idx = hash(key); ; idx = (idx + 1) % capacity_) {
             if (table_[idx].key == 0) {
-                return -1;
+                return 0;
             }
             if (table_[idx].key != key) {
                 continue;
diff --git a/lib/task.h b/lib/task.h
deleted file mode 100644
index 76666f3..0000000
--- a/lib/task.h
+++ /dev/null
@@ -1,7 +0,0 @@
-#include "cos_client.h"
-
-struct scx_userland_enqueued_task {
-    __s32 pid; // 线程id
-    __s32 tgid; // 线程所属的进程的pid
-    struct entry client_data;// 存疑
-}
\ No newline at end of file
diff --git a/lib/userland_agent.h b/lib/userland_agent.h
deleted file mode 100644
index 7daf5ec..0000000
--- a/lib/userland_agent.h
+++ /dev/null
@@ -1,99 +0,0 @@
-#include "cos_agent.h"
-#include <sys/queue.h>
-
-class UserlandAgentProcess : CosAgentProcess {
-  public:
-    struct enqueued_task {
-        LIST_ENTRY(enqueued_task) entries;
-        __u64 sum_exec_runtime;
-        double vruntime;
-    };
-    explicit UserlandAgentProcess() : CosAgentProcess() {}
-
-  private:
-    __u32 task_pid(const struct enqueued_task *task)
-    {
-        return ((uintptr_t)task - (uintptr_t)tasks) / sizeof(*task);
-    }
-
-    struct enqueued_task *get_enqueued_task(__s32 pid)
-    {
-        if (pid >= 20000) // 你这tmd啥逻辑?如果当前进程id为10000就不行是吗?这个太离谱了
-            return NULL;
-
-        return &tasks[pid];
-    }
-
-    double calc_vruntime_delta(__u64 weight, __u64 delta)
-    {
-        double weight_f = (double)weight / 100.0;
-        double delta_f = (double)delta;
-
-        return delta_f / weight_f;
-    }
-
-    void update_enqueued(struct enqueued_task *enqueued, const struct scx_userland_enqueued_task *bpf_task)
-    {
-        __u64 delta;
-
-        delta = bpf_task->sum_exec_runtime - enqueued->sum_exec_runtime;
-
-        enqueued->vruntime += calc_vruntime_delta(bpf_task->weight, delta);
-        if (min_vruntime > enqueued->vruntime)
-            enqueued->vruntime = min_vruntime;
-        enqueued->sum_exec_runtime = bpf_task->sum_exec_runtime;
-    }
-
-    int vruntime_enqueue(const struct scx_userland_enqueued_task *bpf_task)
-    {
-        struct enqueued_task *curr, *enqueued, *prev;
-
-        curr = get_enqueued_task(bpf_task->pid);
-        if (!curr)
-            return ENOENT;
-
-        update_enqueued(curr, bpf_task);
-        nr_vruntime_enqueues++;
-
-        /*
-        * Enqueue the task in a vruntime-sorted list. A more optimal data
-        * structure such as an rbtree could easily be used as well. We elect
-        * to use a list here simply because it's less code, and thus the
-        * example is less convoluted and better serves to illustrate what a
-        * user space scheduler could look like.
-        */
-
-        if (LIST_EMPTY(&vruntime_head)) {
-            LIST_INSERT_HEAD(&vruntime_head, curr, entries);
-            return 0;
-        }
-
-        LIST_FOREACH(enqueued, &vruntime_head, entries) {
-            if (curr->vruntime <= enqueued->vruntime) {
-                LIST_INSERT_BEFORE(enqueued, curr, entries);
-                return 0;
-            }
-            prev = enqueued;
-        }
-
-        LIST_INSERT_AFTER(prev, curr, entries);
-
-        return 0;
-    }
-
-    LIST_HEAD(listhead, enqueued_task);
-    struct listhead vruntime_head = LIST_HEAD_INITIALIZER(vruntime_head);
-    double min_vruntime;
-    struct enqueued_task tasks[20000];
-
-    struct enqueued_task PickNextTask() override {
-        return LIST_FIRST(&vruntime_head);
-    }
-    virtual bool RemoveTaskFromRq(struct enqueued_task task) override {
-        LIST_REMOVE(task, entries);
-        return true;
-    }
-    virtual bool Enqueue(struct enqueued_task* task) override {
-        vruntime_enqueue(task);
-    }
-}
\ No newline at end of file
diff --git a/sched/cos_agent.bpf.cpp b/sched/cos_agent.bpf.cpp
deleted file mode 100644
index f608cf5..0000000
--- a/sched/cos_agent.bpf.cpp
+++ /dev/null
@@ -1,208 +0,0 @@
-#include <string.h>
-#include "../scx_common.bpf.h"
-#include "task.h"
-
-char _license[] SEC("license") = "GPL";
-
-const volatile bool switch_partial;
-const volatile s32 usersched_pid;
-
-const volatile u32 num_possible_cpus = 64;
-
-u64 nr_failed_enqueues, nr_kernel_enqueues, nr_user_enqueues;
-
-struct user_exit_info uei;
-
-static bool usersched_needed;
-
-
-struct {
-	__uint(type, BPF_MAP_TYPE_QUEUE);
-	__uint(max_entries, USERLAND_MAX_TASKS);
-	__type(value, struct scx_userland_enqueued_task);/* 此处可以自定义一个结构体 */
-} enqueued SEC(".maps");
-
-struct {
-	__uint(type, BPF_MAP_TYPE_QUEUE);
-	__uint(max_entries, USERLAND_MAX_TASKS);
-	__type(value, s32);
-} dispatched SEC(".maps");
-
-struct task_ctx {
-	bool force_local; 
-};
-
-struct {
-	__uint(type, BPF_MAP_TYPE_TASK_STORAGE);
-	__uint(map_flags, BPF_F_NO_PREALLOC);
-	__type(key, int);
-	__type(value, struct task_ctx);
-} task_ctx_stor SEC(".maps");
-
-static bool is_usersched_task(const struct task_struct *p)
-{
-	return p->pid == usersched_pid;
-}
-
-static bool keep_in_kernel(const struct task_struct *p)
-{
-	return p->nr_cpus_allowed < num_possible_cpus;
-}
-
-static struct task_struct *usersched_task(void)
-{
-	struct task_struct *p;
-
-	p = bpf_task_from_pid(usersched_pid);
-	if (!p)
-		scx_bpf_error("Failed to find usersched task %d", usersched_pid);
-
-	return p;
-}
-
-s32 BPF_STRUCT_OPS(userland_select_cpu, struct task_struct *p,
-		   s32 prev_cpu, u64 wake_flags)
-{
-	if (keep_in_kernel(p)) {
-		s32 cpu;
-		struct task_ctx *tctx;
-
-		tctx = bpf_task_storage_get(&task_ctx_stor, p, 0, 0);
-		if (!tctx) {
-			scx_bpf_error("Failed to look up task-local storage for %s", p->comm);
-			return -ESRCH;
-		}
-
-		if (p->nr_cpus_allowed == 1 ||
-		    scx_bpf_test_and_clear_cpu_idle(prev_cpu)) {
-			tctx->force_local = true;
-			return prev_cpu;
-		}
-
-		cpu = scx_bpf_pick_idle_cpu(p->cpus_ptr);
-		if (cpu >= 0) {
-			tctx->force_local = true;
-			return cpu;
-		}
-	}
-
-	return prev_cpu;
-}
-
-static void dispatch_user_scheduler(void)
-{
-	struct task_struct *p;
-
-	usersched_needed = false;
-	p = usersched_task();
-	if (p) {
-		scx_bpf_dispatch(p, SCX_DSQ_GLOBAL, SCX_SLICE_DFL, 0);
-		bpf_task_release(p);
-	}
-}
-
-static void enqueue_task_in_user_space(struct task_struct *p, u64 enq_flags)
-{
-	struct scx_userland_enqueued_task task;
-
-	memset(&task, 0, sizeof(task));
-	task.pid = p->pid;
-	task.tgid = p->tgid;
-
-	if (bpf_map_push_elem(&enqueued, &task, 0)) {
-		__sync_fetch_and_add(&nr_failed_enqueues, 1);
-		scx_bpf_dispatch(p, SCX_DSQ_GLOBAL, SCX_SLICE_DFL, enq_flags);
-	} else {
-		__sync_fetch_and_add(&nr_user_enqueues, 1);
-		usersched_needed = true;
-	}
-}
-
-void BPF_STRUCT_OPS(userland_enqueue, struct task_struct *p, u64 enq_flags)
-{
-	if (keep_in_kernel(p)) {
-		u64 dsq_id = SCX_DSQ_GLOBAL;
-		struct task_ctx *tctx;
-		tctx = bpf_task_storage_get(&task_ctx_stor, p, 0, 0);
-		if (!tctx) {
-			scx_bpf_error("Failed to lookup task ctx for %s", p->comm);
-			return;
-		}
-
-		if (tctx->force_local)
-			dsq_id = SCX_DSQ_LOCAL;
-		tctx->force_local = false;// 重置标记位
-		scx_bpf_dispatch(p, dsq_id, SCX_SLICE_DFL, enq_flags);
-		__sync_fetch_and_add(&nr_kernel_enqueues, 1);
-		return;
-	} else if (!is_usersched_task(p)) {
-		enqueue_task_in_user_space(p, enq_flags);
-	}
-}
-
-void BPF_STRUCT_OPS(userland_dispatch, s32 cpu, struct task_struct *prev)
-{
-	if (usersched_needed)
-		dispatch_user_scheduler();
-
-	bpf_repeat(4096) {
-		s32 pid;
-		struct task_struct *p;
-
-		if (bpf_map_pop_elem(&dispatched, &pid))
-			break;
-
-		p = bpf_task_from_pid(pid);
-		if (!p)
-			continue;
-
-		scx_bpf_dispatch(p, SCX_DSQ_GLOBAL, SCX_SLICE_DFL, 0);
-		bpf_task_release(p);
-	}
-}
-
-s32 BPF_STRUCT_OPS(userland_prep_enable, struct task_struct *p,
-		   struct scx_enable_args *args)
-{
-	if (bpf_task_storage_get(&task_ctx_stor, p, 0,
-				 BPF_LOCAL_STORAGE_GET_F_CREATE))
-		return 0;
-	else
-		return -ENOMEM;
-}
-
-s32 BPF_STRUCT_OPS(userland_init)
-{
-	if (num_possible_cpus == 0) {
-		scx_bpf_error("User scheduler # CPUs uninitialized (%d)",
-			      num_possible_cpus);
-		return -EINVAL;
-	}
-
-	if (usersched_pid <= 0) {
-		scx_bpf_error("User scheduler pid uninitialized (%d)",
-			      usersched_pid);
-		return -EINVAL;
-	}
-
-	if (!switch_partial)
-		scx_bpf_switch_all();
-	return 0;
-}
-
-void BPF_STRUCT_OPS(userland_exit, struct scx_exit_info *ei)
-{
-	uei_record(&uei, ei);
-}
-
-SEC(".struct_ops")
-struct sched_ext_ops userland_ops = {
-	.select_cpu		= (void *)userland_select_cpu,
-	.enqueue		= (void *)userland_enqueue,
-	.dispatch		= (void *)userland_dispatch,
-	.prep_enable		= (void *)userland_prep_enable,
-	.init			= (void *)userland_init,
-	.exit			= (void *)userland_exit,
-	.timeout_ms		= 3000,
-	.name			= "userland",
-};
diff --git a/sched/example_agent_main.cpp b/sched/example_agent_main.cpp
deleted file mode 100644
index c11c1aa..0000000
--- a/sched/example_agent_main.cpp
+++ /dev/null
@@ -1,8 +0,0 @@
-#include "userland_agent.h"
-
-int main(int argc, char **argv)
-{
-    auto a = new UserlandAgentProcess();
-    a.WaitUntilExit();
-	return 0;
-}
\ No newline at end of file
diff --git a/scx_example_userland.bpf.c b/scx_sjf.bpf.c
similarity index 99%
rename from scx_example_userland.bpf.c
rename to scx_sjf.bpf.c
index 079b26a..7c514fa 100644
--- a/scx_example_userland.bpf.c
+++ b/scx_sjf.bpf.c
@@ -22,7 +22,7 @@
  */
 #include <string.h>
 #include "scx_common.bpf.h"
-#include "scx_example_userland_common.h"
+#include "scx_sjf_common.h"
 
 char _license[] SEC("license") = "GPL";
 
diff --git a/scx_example_userland.c b/scx_sjf.c
similarity index 90%
rename from scx_example_userland.c
rename to scx_sjf.c
index feb66a9..3ba6036 100644
--- a/scx_example_userland.c
+++ b/scx_sjf.c
@@ -30,8 +30,8 @@
 #include <map>
 
 #include "user_exit_info.h"
-#include "scx_example_userland_common.h"
-#include "scx_example_userland.skel.h"
+#include "scx_sjf_common.h"
+#include "scx_sjf.skel.h"
 
 #include "lib/hash.h"
 
@@ -55,7 +55,7 @@ static __u32 batch_size = 8;
 static volatile int exit_req;
 static int enqueued_fd, dispatched_fd;
 
-static struct scx_example_userland *skel;
+static struct scx_sjf *skel;
 static struct bpf_link *ops_link;
 
 /* Stats collected in user space. */
@@ -108,7 +108,6 @@ static int dispatch_task(s32 pid)
 {
 	int err;
 	
-	// 把task从userland的队列中弄进bpf的
 	err = bpf_map_update_elem(dispatched_fd, NULL, &pid, 0);
 	if (err) {
 		fprintf(stderr, "Failed to dispatch task %d\n", pid);
@@ -122,7 +121,7 @@ static int dispatch_task(s32 pid)
 
 static struct enqueued_task *get_enqueued_task(__s32 pid)
 {
-	if (pid >= USERLAND_MAX_TASKS) // 你这tmd啥逻辑?如果当前进程id为10000就不行是吗?这个太离谱了
+	if (pid >= USERLAND_MAX_TASKS) 
 		return NULL;
 
 	return &tasks[pid];
@@ -191,7 +190,7 @@ static int vruntime_enqueue(const struct scx_userland_enqueued_task *bpf_task)
 #define SHM_SIZE 4096
 
 
-std::map<__s32, LFHashTable<int32_t>> gtid2hashtable; 
+std::map<__s32, LFHashTable<int32_t>> tgid2hashtable; 
 
 static void drain_enqueued_map(void)
 {
@@ -201,31 +200,36 @@ static void drain_enqueued_map(void)
 		if (bpf_map_lookup_and_delete_elem(enqueued_fd, NULL, &task)){
 			return;
 		}	
-		/* 新增 */
 
-		__s32 tgid = task.tgid; // 获取task所属进程的pid
+
+		/* do scheduler */
+		__s32 tgid = task.tgid; 
+
 		if(tgid != getpid()){
 			printf("%dagent 调度 线程%d 所属进程%d\n",getpid(),task.pid, tgid);
-			if (gtid2hashtable.count(tgid) == 0) { 
+
+			if (tgid2hashtable.count(tgid) == 0) { 
 				char buf[128];
-				sprintf(buf,"/etc/cos/shm/shm_%d",tgid);
-				int shm_fd = open(buf,O_RDWR);
-				void* shm = (struct entry*)mmap(NULL, SHM_SIZE,PROT_READ|PROT_WRITE, MAP_SHARED,shm_fd,0);
-				gtid2hashtable[tgid] = LFHashTable<int32_t>((void*)shm, SHM_SIZE, 0);
+				sprintf(buf, "/etc/cos/shm/shm_%d", tgid);
+				int shm_fd = open(buf, O_RDWR);
+				void* shm = (struct entry*)mmap(NULL, SHM_SIZE, PROT_READ | PROT_WRITE, MAP_SHARED, shm_fd, 0);
+				tgid2hashtable[tgid] = LFHashTable<int32_t>((void*)shm, SHM_SIZE, 0);
 			}
-			task.ddl = gtid2hashtable[tgid].Get(task.pid);
-			printf("thread %d ddl=%d\n",task.pid,task.ddl);
-		}
 
+			task.ddl = tgid2hashtable[tgid].Get(task.pid);
+			printf("thread %d ddl=%d\n", task.pid, task.ddl);
+
+		}
 		err = vruntime_enqueue(&task);
 		if (err) {
-			printf("return 2\n");
 			fprintf(stderr, "Failed to enqueue task %d: %s\n",
 				task.pid, strerror(err));
 			exit_req = 1;
 
 			return;
 		}
+
+
 	}
 }
 
@@ -243,7 +247,6 @@ static void dispatch_batch(void)
 		int err;
 		__s32 pid;
 
-		// 每次从队列头弹出
 		task = LIST_FIRST(&vruntime_head);
 		if (!task)
 			return;
@@ -319,7 +322,6 @@ static int spawn_stats_thread(void)
 
 static int bootstrap(int argc, char **argv)
 {
-	// 1.设置调度类为EXT
 	int err;
 	//__u32 opt;
 	int opt;
@@ -345,7 +347,6 @@ static int bootstrap(int argc, char **argv)
 		return err;
 	}
 
-	// 2. 处理参数
 	while ((opt = getopt(argc, argv, "b:ph")) != -1) {
 		switch (opt) {
 		case 'b':
@@ -360,7 +361,6 @@ static int bootstrap(int argc, char **argv)
 		}
 	}
 
-	// 3.做一些bpf程序的初始化工作
 
 	/*
 	 * It's not always safe to allocate in a user space scheduler, as an
@@ -374,8 +374,7 @@ static int bootstrap(int argc, char **argv)
 		return err;
 	}
 
-	// open bpf程序
-	skel = scx_example_userland__open();
+	skel = scx_sjf__open();
 	if (!skel) {
 		fprintf(stderr, "Failed to open scheduler: %s\n", strerror(errno));
 		return errno;
@@ -386,7 +385,7 @@ static int bootstrap(int argc, char **argv)
 	assert(skel->rodata->usersched_pid > 0);
 	skel->rodata->switch_partial = switch_partial;
 
-	err = scx_example_userland__load(skel);
+	err = scx_sjf__load(skel);
 	if (err) {
 		fprintf(stderr, "Failed to load scheduler: %s\n", strerror(err));
 		goto destroy_skel;
@@ -413,7 +412,7 @@ static int bootstrap(int argc, char **argv)
 	return 0;
 
 destroy_skel:
-	scx_example_userland__destroy(skel);
+	scx_sjf__destroy(skel);
 	exit_req = 1;
 	return err;
 }
@@ -442,6 +441,6 @@ int main(int argc, char **argv)
 	exit_req = 1;
 	bpf_link__destroy(ops_link);
 	uei_print(&skel->bss->uei);
-	scx_example_userland__destroy(skel);
+	scx_sjf__destroy(skel);
 	return 0;
 }
diff --git a/scx_example_userland_common.h b/scx_sjf_common.h
similarity index 94%
rename from scx_example_userland_common.h
rename to scx_sjf_common.h
index 4596987..0d7b20c 100644
--- a/scx_example_userland_common.h
+++ b/scx_sjf_common.h
@@ -4,7 +4,7 @@
 #ifndef __SCX_USERLAND_COMMON_H
 #define __SCX_USERLAND_COMMON_H
 
-#define USERLAND_MAX_TASKS 30000
+#define USERLAND_MAX_TASKS 60000
 
 /*
  * An instance of a task that has been enqueued by the kernel for consumption
-- 
GitLab


From 97fc67f869fd69c4e8b2f40cfdb3889e49879bbb Mon Sep 17 00:00:00 2001
From: shootsecond <2782457525@qq.com>
Date: Sun, 21 May 2023 20:52:53 +0800
Subject: [PATCH 3/3] =?UTF-8?q?feat=EF=BC=9A=E9=87=8D=E5=91=BD=E5=90=8Dsjf?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 RREADME.md               | 5 -----
 client/Makefile          | 4 ++--
 client/simple_client.cpp | 4 ++--
 lib/cos_thread.h         | 2 +-
 4 files changed, 5 insertions(+), 10 deletions(-)
 delete mode 100644 RREADME.md

diff --git a/RREADME.md b/RREADME.md
deleted file mode 100644
index 7d538d7..0000000
--- a/RREADME.md
+++ /dev/null
@@ -1,5 +0,0 @@
-# COS
-
-```
-make install to install cos client
-```
\ No newline at end of file
diff --git a/client/Makefile b/client/Makefile
index 1e467cd..22f6a6c 100644
--- a/client/Makefile
+++ b/client/Makefile
@@ -2,8 +2,8 @@ CC = g++
 CFLAGS = -std=c++11 -Wall
 LDFLAGS = 
 
-TARGET = tmp 
-SRCS = tmp.cpp 
+TARGET = simple_client
+SRCS = simple_client.cpp 
 OBJS = $(SRCS:.cpp=.o)
 
 all: $(TARGET)
diff --git a/client/simple_client.cpp b/client/simple_client.cpp
index 10e0473..e85e51f 100644
--- a/client/simple_client.cpp
+++ b/client/simple_client.cpp
@@ -22,7 +22,7 @@ int main(int argc, char** argv) {
     int* shm = (int*)mmap(NULL, SHM_SIZE, PROT_READ | PROT_WRITE, MAP_SHARED, shm_fd, 0);
     memset(shm, 0, SHM_SIZE);
 
-    int baba = 500;
+    int baba = 10;
     LFHashTable<int32_t> hashtable((void*)shm, SHM_SIZE, 0);
     std::vector<std::thread> workers(baba);
 
@@ -38,7 +38,7 @@ int main(int argc, char** argv) {
             
             while(true){ 
                 printf("%d working...\n", gettid());
-                sleep(1);
+                // sleep(1);
             }
         });
     }
diff --git a/lib/cos_thread.h b/lib/cos_thread.h
index 5572eeb..41f7e3a 100644
--- a/lib/cos_thread.h
+++ b/lib/cos_thread.h
@@ -9,7 +9,7 @@ class CosThread {
     kExt,
   };
 
-  explicit CosThread(KernelSchedulerType ksched, std::function<void()> work) {
+  explicit CosThread(KernelSchedulerType ksched, std::function<void()>& work) {
     work_start_ = false;
     ksched_ = ksched;
     thread_ = std::thread([this, w = std::move(work)] {
-- 
GitLab