From e5cdfbba130cc793c4747c855b08e4b9200b7e9d Mon Sep 17 00:00:00 2001 From: mpa216 <123876878+mpa216@users.noreply.github.com> Date: Sun, 12 Nov 2023 14:09:11 +0700 Subject: [PATCH 01/15] Add files via upload --- datapath.drawio.png | Bin 0 -> 92925 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 datapath.drawio.png diff --git a/datapath.drawio.png b/datapath.drawio.png new file mode 100644 index 0000000000000000000000000000000000000000..fc99b0231091e31f5d8572452ecf2dd11dcadc94 GIT binary patch literal 92925 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 Yz&UN{J75(cMu0yZq9Im%#No>S0hr*m Date: Mon, 13 Nov 2023 10:50:20 +0700 Subject: [PATCH 02/15] Delete datapath.drawio.png --- datapath.drawio.png | Bin 92925 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 datapath.drawio.png diff --git a/datapath.drawio.png b/datapath.drawio.png deleted file mode 100644 index fc99b0231091e31f5d8572452ecf2dd11dcadc94..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 92925 zcmeEP2OyQ}|35|>$k&N_OAqgS#;24?N5)sw0DwVWQ8j7+bnQ0J7G>Ae& zNn}f*{?B{Pd3B7szx(^w{iU1h>YR5x>$^YC_j#VMjT_YFFmfhLBEh8he0 z7oeXBuGGED^8x=*d2CWs#-!d`{1$`hyy&T7)?dP@QSY^ec}}pv3K?Gp_dBxX?NPs_* z62j85GFwQ`vmF;dsSVC51&mQ38ezE;g<{9^m5!eeg$A1Y8zZ2A{wU zDNqvf(N{`hIrwL-o0}8f5O1aF0NSA{DK0H6E(I zEAq-Zdv{l7a79&AR8|-iO{`N7XNz-ppeO?A6W$YNN9vE4p|96^l%$Zfm92!3w3w~6keCc!OiWBv(ncCb ztdp{Iv<_!qHFunwy|$|j-U(D><4dYWMp}|ohm9ZUf`lZwQag9FT8ayL4%^A?6D9Y~ z&db3D??HN({Gg|+tCOdL+xUytt}ZTkYciq958~Y25$Y2AOTJ|5>O}4=`GOl5hjC9J z7xb)gU>r&B36nd3TsL&E@w6vj7nPDF^$fY8j(4!LCs!^b1{eb&j1|t>(azn~%Y|H{ zi>nKfIDm(7Xffnodf4LtBa%w~#t@?e?e6LdDx#n-=?3LrM4Hy&oe(;pV~p10>4$a< zaJRjuvlFOOl*s5vive5y{i4YO>GA!d-Ei(>a!78>e^r|}PE^`f)EX}-DIzK+X@f&~ z*c<2MMJAc5o;Ha96ixE6cksmPx#6slXM6ysj_>~1_#+0f3W<)R~;5$$n>s*~& z-HG%Ox0OWx1J^w~-CZ5=6nCVEKVx@LZUN$`Y=iT#C+e)PgH1Ui z5I|Ql|9!vtQ?ThI>dKHBO+j5=F)1e?07NQ*?tZ1Q)HW|fGKe>XJcx<}QGue8ZeU1& zCP(jsPj<+2nm8v10a2i+N#$9&qc{G$E9}x!lc@#Vvql% z311ts(bWNwNK{Em%1mHb89-x%%xF!dfg!(z-1uvoMXKzZRZfx-=?PVO;@s`RA-_r`4d@C zWI~k_P5!iHL9$2wgIJKLZV}xp1VT3v#Brlgz%mkuTSvU`Ee(w5Sc_^}F|Y~VidhR>zfSt14DBuRA|U1 zUs9Z`j46C$RAEqtN$53{NB+^sd`g!O4GSow-^jwjg*1r2@U2@shrbqDnCkm;9FiIr6)P1vXCZI`!{nZr6+0>S#m#7HT~n= zNtuZOoD3PBL93j;rkt#1e~@5(lc9e%9+Vmn_DlSH9+U=pX&i2Wiud&AL2}0^cu<^- z(fyJxjkM$hN=QyycXIMnhrw%%U@F%CXi#Q*lK!^Lu|4dLMcI-R-_;RI<<-1pq%;?`Nq`eI#*`|Sx3wJ z_svwwqSgwPT50lVQ%Ei9*HKFCM5yq89|np|)|r#E<$o25piu`BhKLB0!U^IG*!e$-Y@?L@%XkD8u;0uVltB#;nYATF$a)=h%zk`4 zA}c8+EKBi2X34PzNRGQZp*hnwRuP+QFaJN1M|$`7pYW7L;k7aL0NI*kJmn{{=mgAF zLS}NU)0Pv_5uGj(i|hm^O#;=~6xJ7ggwpz=*HAY3-&L-{-6z4`Y9{L@va{4MBa$x&|*#BQ+ z0w-W+U^M}$>nKC~1Rg}aU6cn!Csa9od2sSP*e^Z%JK6ss3(@p5epAhY{mta;Zy^-Q zI8Pu9%2C71kq=o7lA#MO^eT ze#y<(>tK$+4p|y!4LoQh-CY?;*Kq)=xYm+yI6K(bAS<7Ut3yGq~ym36q95}90hSu zd7ZwpGnMNzVaAhUO2yg<=i%XC4U|8{dfM^pzow^M``3!kBv$_M;xo|&oK)rXm7X6v zE%HZnCamxNix>g*n*Nyul#{H0#mXO^w27`>PfE)6?vHU0o^#@cr>gIAFUX(uJ?fRY8i*Pued4MGt?o zKx-m)FEw!{@5fs^*}u{f(^q22N!35d*rB{XepU6iQ8*#=*2E>+|DLdC!ZH#mG@}WP z;D0L_dy`vm~atO*1KZ6S=B!P@= z!hzN~eYtS*Y&e>uMBxbiIuoXo$&ZqTBF;rQgmNwny@pckf1e8`In{Ldw_(G-@<9LC zv+pUBDK*JNdnP#{)%a&<5>#8E+H2w*?ex_of0kl?-cC<7xl13z!u+Mu~HO2`UXsjEV3Z2b0oerwm<_Z z0r~RvHR3m9%)hJcNZ!DA^1V)WG7TPw#I+jyHip> zHbx~$-@jn04&6@$RiWs2lp%h+Pd{;mx-=TxqE${?mmZbh?`d(6)J;sY^#nWh8F@-6Yl0g>hPu_1t7Cp!UWuX7PJ(r&BNui4ZJlt?#8^I~IxUeQ2#DMJV?`~%$ z0DKhW=oR#z~SvSB9X1)z{^PdB}C4EN1h)`f=BOxQ*MB7LMm*mtHif}9JzSdf=;3} zffGuIWdh%jcytO<9=RGHS9hE74I3*<$Omub=-??tER&R@FGTh(kpjk^`+6dZ&;&Y) zA;-cXl%)JXrY5me8@#ovJ5k_-JnbE<9bNDqNaqx6Ni8S$9GDv{5;=9jLG-up% zwoa}%^2m_^TTqgXgNK_F4#*&>SSJVMTo(~82WK}|cTd0_#34lYWC0vaJZ=K8C~5f& zSj|M@ZqoHh9xT!YP{LmP!J$?F)tX}N!(wvs`EZB$#KyOdD`9w>12 zYX=_EQw1I*YW`7Fe-srsMCPj^p7x3gDB^#+qC(G3ntqCkjFwSg;|Ls}M?RYim?wKz zJ69K+lgiht%BZtVxu$LW`h~CWX}P+(0Sp4MI9q|M;zu??I4@6EaEW381m#v1qz$3Q zpb}w;ubbR{11=%HP2t-UF_d3FCyxSr`noFQo2Hf$`kAz=E;*g?FHs*fn)?5vKL2sX zI06>_^*M3ing8|_uqoF)qL>Ut*rqZ=dn^0|R?mG}Vn9*h`CznJo$xHa$Xn6hR$l z$^L})e=tZg82Kl(*ZbzF$^TCb@_(hhP?7%)v==%bG){X>h=?eH(!a_%{`DhlG^n7& zDkz|augBsVlTixd&2OL#-;B)v!KjRor|mqq?4K2>-*HF(|9I6eEjdyX(=~p)FUB1I|ctOo`onofSjb=zpJbk7l<0t3&Il z7ycn!h1~fH7E|tz_TQ^%S#q|=Z>FXv?c5@RE+R#_{U^9jGGs3U)zc_Ej#fE+_4HJG zPXC#P{xc2zXBzrvFNOJ4rlHZfTuRS^jOdT^Dkh-(zkpBiCjpSWMC{KpzCX+OkW+?` z!+ZXIBKm)^jPHM?yU=rTP(N(i>Ml`qw&~v;5Fu-Gh`X8~F%Y^?hqx08aTk-Rk9_}T zNJR3&zk^(f{+`H{G>TM_#X@o-jP&CpqA@&zT;-$*plKTsiHiKmpZN~V^_!sy{|nKX zAgxkpUg)$36GXw`;lxa!f3;Ejrg{3!L}%iO=9BpNCs>`|Sakkm0FYfk(k^#kFChw- zkcg506qgX4K=~t_f4R1LEQ1?-m@0`IwPUDDhz4iBfnEC#W;1{L)bwZ={W`(ngkXfwb|jdxoG}R}ptSn_`9?mmuk#Qz?C7ZsU2 zcc|@Z1GXfakhu8YA(HD98a$Fe7$}k{n{>YrhgXrkW0!K#Jeq zNR6$@8v_xI0Uk)si~BhaB$*R_GY3*;LZ~GpGQlMM1S^PURiLtnI+Uo8O4D}!O+$K2h42?@nWK)=kyU0TJ( ziPr8r!5T5h`?ngr$s#E(D?Aa7`0;iP*ic~*0Z5{zc06DyO>BdR#F(We3Gnn6Sk$Mc zh!jX&`-)nM{jqjpVnny=KiLBanK)9zyE@~60syfKMXZ8qc}kcKz4p&+LnMnDeX{}|r?br~hmgG5;6y9g=CRU#z~PudNi9P5$-4$?DIZW1plMphNS*(`w61dAx~ z^DUy(gb7lKiOO{PMt>-iQ0UTpT^V6m`mf ze0VK`%F$Sr6P8;}W35N_zW(iU_SJJ4m)R=(b?@MBxGw0n5kwaUO!XKeF3s54(O+Ns zG22Fnijke3-(9FDrlJwb(fVwKZas3*_Z8d*%M=w2Gl$v}yNy1Epe%yfzE zCr`;4Pjh0RsXx0$>a(Aq zLMQL+C@wxBv3eS7(aDn<{||hV@|36VBKSWL-jqR4dnKDVF*IVMP^02gtj?Kee18Qs zIvL(HvT(=SO(&x^ff^E1P-B{a&EiwV%g(Mg(})_f6R062OP=$hkd0|V4HVy{a4}Hl zh$64&Kg&!YQE&?Q{0FKfDbzBN)e=a7WzCnJ$)&beg3@J{3^@(r{h7+R!uhsW8?6N+HMyz}0@3H*j6~f~y7jm{FNf4M4!&a!hbiZ&oR9$0bEiKokIthtF znMZ^D%g*t}+<$pWeZO9IsGf7p)k9F^7x5!kno>JDDo^@fzEanjAO9wx$)-!TY;m9X zs&~WtWa~_+&3Tll$-nn!P`!obWgWmUpuYl8J%f4>E$R0fq=c=RFJ%i+F>?}sPZ2Da zkv@UHZQ&Rd*s%U+82M@SAZS+r`l|Y=mDH?QGn_Ra`BhG;aQZ>C9M0fW`i-#X?xZqz#4rndAn4Q1&wd9fdcD7w!8%lmdu#p zz#T^)-&8wrzW&&?#~yPFfAQT)@k0D!3Vgt<@RYuz#Oey;B$OVV$xgeDT4ZbUZH3V!^5LUN9RZLZ;cE# zNLvVa^0=f-iYB!Ido*eBNUZz9U&{2uBWIIn9}V8!~~w>#zs-Y$<=Q^`xktR54T zEKGOb0&d#yDE*9RIKA3Nt^SGYtCSIz-0n<`8AH{LwyedVCP(B4etv=Y+n3p$gWbGnyh%28LKYgq?b75fM3!u^Y7X9;4!Xi!T~ zn*pV%zCp<#fhs+Yu;#?m37=R)eQthX?0!q7>FMxDEaf8l6}OtkpW-82YspQ zD>de1cm)SR5P!Ge5n6RlGte1!j9f&y#e*vywoy=N6pNlg1Q63J4Tr991vfBld=y3X zbcW?&!qe1b9h#v9K?78#vn+QJo<3d4$%-w6s({FVZmC~hYXOA*B@bD{Il>9gI@+8uhBPudaA1eSkvkfv^Z_fZ ze`M;3vhx+td0b(4 zF#dp2Ji^&$t1|&5nOQa(m{g>TLmjFvT~$K|2~UsLr=JNH;n-%XbyI}#dHKFO6*^#q zMx4tz4k&ek0n*1<%;-KqsAu7j&*w&+{iD2y{RsKms>pA8Jm{>{#x@%|Mz(jLOS{V+dc~q zMjQ!zefQYPfkSXy%rQ+(Fe2I7YGoRyBwf3(cpuQleKOX0xdm{0S|tmQ#(9%el=e#gON~q!PXBo`vdzMcF$rrXAdXP_4bCevV{P4 z7i|bOKcLhO$ht{weFz3vM^~tqPWhrVC}4Z8qN4>46focA>EaYN7OW<0qp>eFz3r>| zQ9ltRZ$5N?-8^lhZ2Ow{Dk7PHnv+(J@PN(A(318Tn@4r52So>htp;wZo{r;^RthLNBA{U;`Y}n9})gFS0oWaP#TPxz zGdV{nFJx%LFuYm^WNO)agH>17!lsMD>0MGU+27EE^|NutLdvRzk0CHeCTL>w9<_S3%&2NF6;BOF}!WVip4uge$t{g z1NvoW=o4W&w|!v@@hmkn)NS9Yb9!$GJ$H`Krhch_K>(^~^zJ`NTLARs9gHw0eR0WF zOlrM*rBLi>r|Zt)Yq4B>e8F=8-P#|hAb%d8OS_o750k!|pp{v1p*`n$OI_aCmTj9s-%#PRW^z(ai6r7P2DQx+GfbBYEJ<%ZA=( zUH4jMUF~()YaX*6TeGrOkbge)a|J>T#$`sjX0~GDv7VXOo=5g?xu2Tg(lABm zv0~#Eo$onGzf|hcv4wg=ET;(FcAH->1~hjmF5sFw~&%iQP7yNI1I-m=Q@1 zCHYG$n&WEL)z1(JhY~SSO6=;K^FYu2Hl_t0Qz$b}X;;En!!}z7?&xRj0ix_wx8>1_ zr}la28t3*qU3sXxQb}lqi5E8GU26V|oJN;-^$&;N=dXHSH2j`3uCQi^d)Y^Npghwo z(+USm&!2D!S6ddq>hsKtJ@x7f#*xn-igW3W5~>Cso6M^-^_X+__T}8B@R~Df)^BTL z_6ai77Iy`7-FReZ5v3E@dnnyQR=A+MbYD@7XmA99{??71nUGTo2jS5==J}YI&%qv-^qvaAz)!|28acuh)_t-PZ$loy{mI{Lr*WarjB~uKg*3 zP(z^{H{a5G^g0_l=~~`FVukyx(;2bA_|Dk{Lb2A^KHcc#^=ij`?MbBhKpD+$2SgyNCb zRYo~Z3#IBUX-)$B2~@<{5rQ0>A6 zDF?jnx;ub*Fu)YVY1eP=QW3lzwW#ic@Im|KHwM?P8R@~;y)t55p_Ot)pIVV|!%?4WUqhjz$wCX@UztZU}ZkFh(iW7QT114m(Yqf?f4v*D_O zZsqjFIR8aXU)G%=$h?dcPj3z!#+8OLTz_5pWwiOroZ9-C)qT~9ioPQrR~~InDIj$F z`OK^iYa6wB?*8CIPsOdJDxvdq&+`J8>q4b0HdV(?LaK2^%B5X%q@Oa$b!O{zx1EpM zX^9Q*d09rMV_9z<-=iKHMz6WE^Ge-JJ2g`vuh;WfzI^WbvJ~bQ+=P3xL0_Kvx^-HF zJQdQDtu0pjq0+qq4-P76fY@QsEZh4LQL=xo0Ixg+Mr;aII|92c!&wVg;{_BSmODM+OrZy zozfk8)f7Kr`8J#+6n`1*3SiJus&67()JvNA2Cm<By`UzK$545WNkuyuNjN%&OqffWZD5HM(JbwpHef1s&G_g}3(8Y68K#>z=@!`xmlL zAeCUg4hrD$dtq+#v5%eDwxyS?cGj@oFF#lU995>1AG#ZxKeK)5S@s1BFMrYX(4H4c z3`yxY`c7c0E;|-C;IzYM55Z0L3}@f2O6}${19pE_tO9)O2<>|KR0Wg>S8bF9rZ~Lu zEK+6H*M4EaZ~;3VW*QYnXnD49$LcdOQEw1leLTji%peRF(6x>!e{_^!^!(XE-ehIG znOEN1Vg07b&lrRgUPv85n&3ay1V&iNKxc;AIYL2g+vZ0J_XIYIKdhLa;A8iYQETmr zcc8XykH$)(#v=aEd(*isC$Ap8@JSXsW9yzRd8IyftoeCnE}s-6-NvL<3B)Qk7rL-z-0(Po@YlvKNC2v)}JACb5&#?15Oqd<~-F=ZYbi?0o#OIvkXyR zs9^a0YYy||t#YsG=A^h(a*Sf`9+&fZuW0Vyc}3hcuaylbwc+LSb|khU?YTQuQG_Ew^VNMo@Lc_*)HDi_45<1MSgUE zv9i@wo&wJWI1iSc?MTm`kb7QrI4Id=R*Mp*IK3INstG%9D9F5RVURdg2gXtnlZ#n^ zQ|8gLn`KqN#f&pI*0-&An&(kx$&<(#rOzcjMUPqNxtX}-7=nREQ)Ry#HmIK2{m$N) z$78RDASVD_j)YM6U|OsiE$<|WyE`3aWUoR-c-y!U7UySD;cigjx*LYLMdm^wHgikP zUlIaS~=jubd`6A1V+CX~cX4H%qfj)9o; z$M=y|(nkTGCe8dRf1#NDg~A%^V(w}$^*8I7=>Z!0uw;xg$zd|M8%~(&T@_e^BiY8K z_u0Z*E+U9lnqxXnD;<>3zw`7}M%@&5gT0|rsj??JF9*sLKVt_U_==9^!{u~9?gnXF z0GC`0rqIWhI(CBQ1->tU<5c%19)ymDFI~ET$0z3kY>u217CY}L2qou91e)*dN1pL1 zXxTMu*R{ISMb8HJ0%bo^*yZ0m+%){LdgteBxEp&Grtw0VXL)WU_PQW^&4~&P&qgr- zjRax_ANUAu$+j=EO9=4h#b#Wexo8bj(}K+x@Y=P_b1he;_-eN|dhN7d0H`$MI14i3 z@2`(q%u&eAp|Asox()unjn8!+nn9J<`st?PJDnH+?AenTrH_Z|e*0+cB#M z<&1r}n0F^shd0{`=$~JKsDcVoleQelMo{KHOouQO0p(hC9YetDylW}RAyoDL0(`eR z^IqGn1`s7x?48UGud`ns@gMM3^ad(Nw={5mIAI>mP{LIs`vJeC6`NpB=w?^Sh7x?{ zrPVZ#(?)1(-T3_#~oME}Y(|ML<0YPxi?h+f!evFYEGkeB`-H)=ns$!E@V@f12 z)>L;H>#9Q3;TtE!JM*_enU_K@00dPA>vl{qZnh|v;gvdPXJ7~DBvdxDE2nMaf;BXj z{1^`_>Cc5!Yvx+cV!y)5?Xna0mA@oPD+*u_|Yq z_Z>5d3?ukcMb71>Yn~~BE!oJzCVJYd)D>keg8|-r?~3*44PFM5<3n|O+F9$cEZk z%;oXOYlZBB!L$dl>iNqMt)c$dHt*FwI8 z4_|L$a7n#;F3;G09{p9VBl2z`DhHGxYKITjh}8-^E|_q44rH|;2!OHkTt8husKTye zS1`NfHJ^^1+j8y%Tic8BJS}3zgZGyJ=L#P@;(lyRWAtv&3%j8r=h{gj@FhZAvp^`%mT~^Z|WoNcmB~yM^Kr|?B5Gk%< z9TZf`Lhhl!j@(lrzymjC0nCy$7(A%Kxg4$O?B&}d;MO^Q(7q!@2QMkLqO{R3GRfEl zZp9&8j&thvXD&aX)G%5PG#uP?`Cc!8^4yWPUccvA!U+%sGJ|Y=C}i-c=`t0TA+Qh3 zUirp?E@*7#+31OOK&5N`@=r<0EKQG?Sh35k&Rt|=0?k^vQG4_07ib|Xnl8S0bcS$2 z*E%cN9P~$XRfv`rwJa04L*=JW_pLYxL92QNbK8*aCe{Uijz$|7^=XL;9K~_MU;qNm z+rH4o3a|@$bMBlt!)OpDN89D8AgyOBoZG)2t#<3fE&*uk!+Kc*0|Uj`EmoMptslkA z5?G_>RK5}k;0;!#My$zJk|sK`Mo0y|vnZYReM&nQX2T4TE41%ZTM`K)7n~FxSTGY< z+<-w~@*w&j*{>XyL+hJ@c-<6Pv3tV^VGPJrAYcl_rk4?IM$N&ba|8iDnj<9v2BT2W z4eIU6MVRUO0y+U0NTg;7bT>$U&p9| z=TBv{S+&v=i|Is**#niDzw~ptlcM}#*7{SikTUQo+{_6t)?#j`yo$E9*Y^?$V!@d5 zK$VQ)`(2`eI3bFcnq&lp{I;l)#>>K>7}H{p%^<+Gv0%P2Jr}@K%KBa=m@`yb_I%7> zHph{XLzs!!L$ZkggyF{Wx|T3sZC;11*(4FV3nv^jO7+xACnB_ML72eWWr-2bh}1Fi zL5Fo=7;)%FH^Pz3pwl+nch~Io!+2xv=bpq0dyH&>*=|9s52zMbwnl252)*sWN2FZM zWXi1xvfj=Gy^twwyJ3ULDZu&j-o9OwYkyM%GxrQZU@d=Qgc-5w1!Gl{8Kc+`3{eO# zBQ^s+3q(ek65u25StI~7erTjW;03=nD=XpJJJLKB%Na-N4Sl?umMt>*Qmw7)@SE}V=* z*ulixJYwljw`G(uH0-sXg%x#qdNp+O(ZYqn4iC-;Ly4vVA>dD^iff7rk)?^6RRIQg zU~O;Z2JG{)6#9z>16hN<=RikyjVqBDjzbWaP;mzz1R%w%*jDCfxe<49ud(^G7Biyc zZYGJqCYa}JYit}uKYOzlnhQ|6-w?Y=4`w|*zipivv90wa&t^R~`oIwj?{IoWa~1W= z$q7{5^8tzGOp;&Sa6)MINTwb<)U!glT@`ye8G_FF?Yc-m`z;NFCs9tV8%f^b*C#7h zUP-=(On;|Q*UOAJM-%igCmCA~LA_-KBi4C58`+7?W*gsZ&{T6U7BUz;s(zYoOwb3a z1=N;a7@crJVa^F;WNs66hA`58UmvxU!n<~}uo=>rnT9tU_jC#calZZh znOp;E$IULrXT8A{^&3Yp<_x#i?Zil#cU);vtZr01qC@S)iSYXK7OONdz@hs^WFYqt zejXO4W*WB*JW#3h=O?pv@a(Vh;{l9te^65s&}(JX!{lq{2qSmujwCOg(ISVL zd8=1}6IwQKm!C3>G_+FH+T)Axxy1F?x@ipEV6;c(0=Az3#Vu%K>Dr&T#h3v2&WSpIbmYF4y0e z@MR=ok!wMZd98tJFjNq~xei={b z{*pwqKp5H|ik)S$;%%ciR+5$*t6)~U%J~=!*V{Q6-%TB=tp^DY9Rh9La>KKBo+JqN zorwEZNXRvI~kiMj7sR&ek_DX_Co*@_KzZeS+}Y*c?F!dKxOnQ4*TIhmYeuYjhs2S&VAy zmwmJ<-EqsJI`qm^LSu3O`1LX$pm-7M_RRiR1yI!eEYWXP`<+gHNwruIS|@j|^#dT# zTV{knhuf^u4nn1d>JnHiABUjCqLEui_Y#a;3kNKBV$FS@@4gC38*T_F38FeGhG$gW zzcdP<5Nv&~tKQY~-&@mnmow@Khr$k-J#!ZA5x*xxQ+cFtxGX)!tLGNGb?>V?z8#__ zk3YY``z83k2%BHwFlemCe@%TO8@9&iimlEt>`>aJpnKCE23Z0-;>GY4y(~IwdIlux zO#6JXc^MJsZP>shn?eCuw1=HNN`|gVXIWr{6*&eeFgDvn?Muxo}(3VtdyDKMa1fXm4 znQotoBh+tycUd%W#P_6o#qxkeo)!K#=1AWJ1xDm~yh&y4NhjQXeZqAqES-6+f)6Ss zJW|GJOTWm8u*cuJU*;l*#XdPEYJGdr8P%xmUM(fTd^|3_8Py1u`h-XvUm%mcP^p3X zP*7A-=Wc>8K*M+OMsCIu%zU2B&wb|I$Y?-V<&|v$MnD7#776&&f9k191lwgEXgfAa z-~@rdaq5^6y<)y#!=*;&ot0t<5rp*Kd270rBGwmVKHlOu>Ko_vID>bebY_1<4)FJ$ zA~yb+VBv|1TjoMAd_);?#NwoTSM7K{OK3)@3iJ65ap8J8@>g6HL&7j}Dju)Oqp#at z2ClXA@y>k0YGc+>K#GQdHxD!#&k1D^(yik=1DL~4z=0GCT*w@$5`ed5mF_9u94N^cu^F;Dq%CEv z5p>hpo0&0ga0`!fV*wo6^)@MLRI$iUY=@}91AhO5y&7`G`w4^!g`t*^ZLKkeMb~a~ zIGQTDwJ7;hv9AK$carG$n0jR7D)S`bdb2V=Ej8#{UN3n$`LiOXk;XUaPIaS@g6omT zZ?Zr-z-)}1M%U}J_`C7)!u zx?|6aTT8gH8Y*xWzx>ISZ3jf`u+P2hjc>?e1N=em!QnTO`nd<}R6Mz%OXdKUym|MS zxW({YJB2LI`={2Hg_ox-J|3$9w8ti*!?L{gmiZY%oBuv}!Sc7d+4UAyc2q-rK}l3F zi(T_|xu|<7?PXLu7M84tS4@%8aP@K+^b>FFqDmJIGNdYaZ9K?0_&&d@C@^8<6@Ng( zt>w;HN#Y&n0|p)$-UwChuTN50qGjp?*e*avw|@n*t^pP|=djAdii^)Zv>sk25KI+1 z(r>uknr~Q81jg{LsdbcON4nHFL)x_7AF|S1uz9nam35Nx2?BkknDFdYHg|F3Ez)5t z(+W0aMZ!0$!|Vq`RkIf5IcH}VzmV$;Q|Ab~(C)7Ku=zndcie3q-6EY8(50n7yNPo3 zR5bZ_jov-AHe??b>%V0;(QzPB?5SHuofZt&5R~YzF0O8bVK`}EATGBBQr)p4R<%LG zh1s|(%zlm2itsh?F!$WmZJdj@-NXjGQH7fqC2W97YwI7dOE>wxWTe}o;*^(>X^st( zfZ>Ne`xHLeBdG|kvloc8C}T7FHv58nA{!!5{&H7Dp)FMEeQ>9gVA~tvvOWO6c$6C2 zvu}ZomKHj`R~7n|y!vkv^wr-65M4{xqyW)E2P_!dYc#CHDD)`x>=Ua!x?Z zpUpjy9CAS21cpcL?;aH$lxgdIwArL;P|d8Rw)p5C5Thm#{mSHs!XfT>Hp%o@YGYO| zU)cliWWV6qu^OT96P3_M&pwzfD3r0U7+JBN2jcKFU}uhlL*tybx_;Qvc6zVd(DS`7 zK^lTezB;@kv%xAtNW_1zBQ^(2mnhCzD0VZEdEQ4YTP>4$)KUqX&z-j}+t>L~RtpKm zii8Jut-pP5IQPq7X9yvnslO1LaYu4H&Y<5@)!~Tv3#I%#4gIz7P&lJ2b!5`>jLFztvr z7PeC76l0%5Ki$U5Fx={YUTsFeZrEUTAzflTuTUc4LgoQ`erVt7b^$@-Oj=}~)F~~p z(6KdqWoij9>o1=zQy98FZ)VzpW?&GOneQAO=rj%6rxWDIzUk%cId(_-<*k+tpK)^{ zB)Pqb(Z?%X$%}v>DSGSu0q^hIII*R2^TjFd*dTameUeUvV8n>Ze5}EIW(CL!nM^vy zJ5O=MtxkLAr?*Kjcg+&^^?zhwC~pjR=(?FRFob#x*kf3f^#bT-?s-9-WBTl^a~8w1 zw$=UyuOAe=7LIMDOSru)qpnYKQ3B&(E@y+)0a)WzM(LP!d*>ED-ux7^X6fggosA6V z2J?H8>Jl1pPJ>yPk|i^``Crt`-}@$E=jY4^8{|4S`X{V^8Dq->xePx@_$(1PbYodj zHkdDMq;f0R#CN}A&MjSRs(;fa?~9l7lJ6#gJg5#y-c>0p;))1W-6xtyW`cB`zJb%O zI#ePxj{JKXx^5>FC^WN{@I7CCd1u(i)^|Fq+8?JzYJ&PccAA6{vIk*_L2-Za&KI{L zVpFs3tzH*iPgmKYmt?=rmnUC^k8l3Dc!Og)U<#x5%=#8Jq*uCcB$)z?hu)v*xze1{ zZ>$hklRTFd`y|_C=;p~dwuTQ&V|_KM%ncKw_yaemh$Xz1^vM%c9Lgp{$P3#IF*zU1 zSrMnewMQ!x6qA2ZYknxqkFAM}c*h;jihb6f+;S&xj!+U|sLL|o!yP$)cbDC{9E z9zIRy5>i(5IhcFIBIxlWQtSpCPxZ=G{^m3_)s;KX3+EpIS)DnpS$EhO>HSY!GL!b? z<|&Oj60mpXo?%W^>IGboW>!yue+sB6E9)c@CNqyK=LrnU5S(j2Y>&FSET&^q(#Q9+ z4OiuztcgFI{C?43(k)?S$h+IZtx0D`pUsf+&H0JUshtl~JXx`K)bl~;zn(ltLJFbq zAnkySnH3v2nq_z~pNV&Qp9ea_=%qKs*R}YZURsj`FtZc{mf)ofkp?rv37L!x z;q=9ypHx09QcjF5I%mwL0*f7=++uNTjgy{Hhe&o>L!-4xOzl;L#Z4WZ=REo_BUc}t zami3?eT^BC!}wnr2#b4sxH3m=7gUfTQ5#C#Enj>C*6wLC-NAr&hA8Fps7$Zg`z=9D=?` zx%Hf?PzLQgN0+_f<>YoXvS3Y0Mb6wXGk?Jv0oT74YdqKVp}}9gc1SD0GjUl^ga9O{^^+yWRbsJ z;)zjSX>>`Ht7K$TkUBQntP3RN-pg69oJf4LH_&X+EaIE#Z2NuZ&a~8I3K(8!YT@wo z1y-kVQAUPP7-p!h`%%+im*fri4u{#QkXSp&n0Xs?IsCwdiX9-F-%y;oJ0{ul6C}0y zrBbAj^wIo)VNR$&3 zUF34ii&G2E5zEmxr^z4)Zhy|Qtfyl}t5c;wKJv)%x~HwZ61#Qgd1jO)iSHmtX_&-p zNMKsW_auPM%IT#|f4|DpH045WP8Lgss7BbU-Bz=2!_{GbgxdeC;GEUou1aahv zeic}GOW>2`(1QY3!dZZQpPLS4LfKqXS!~glaD03v_u` zbStw;0~;Ng_U$g8rG3_?=Fe^A4-LBH!Y^F%o-PNb?)i#9c&1QgA(bqjbge@=56$2UyFSnC8)b+17ro<{~Nnz z%mNOa)5-1a7q75m!z{%;^r)ly-Ud<8xPdU|CCFuRTCo7+0Lq(!bkusE=73>{RWnw2 z&ZjpZUn6qeJb4MGLO$ht3d2rX$0ZmZB=eyT_C?*!X>{`YO%*%(O|`Bq2b)t z6Vk3rwQep3fp5Kcqw}_>+sbgjNnKmyjg3Z}8xSPcd1S;Mx9Zt;X+1#TGaai6W?Fem zuE=TihO9tDJ@hb1VYlMQ^LZClpu4XJ>c9jjDCa}VW)tTtCK+$<=bJOxpVZOjsn>3F z8DaalwE#dGT5CW;$Mvcvh!w=;r6AxE_3M4rQbxO*fhNLgO>a5(QJHO4-L92B!2f;$ z;-$IpE;EoPw(~$!;-cuw0DV|Sx5RT}cL0w-;?5JUw$*_g+>l?D8Db>8JxSoJ#ufk( zVj69#9XV|c&-4qWw8Pj8?xQRgaS(R1(w54Fbjx<6k9vJ<=Wx8VZL}nqrucZhAIAk+ zsyg+XgN?4sI>OS+OGZBSh3r(5_F`Gg7M$M9c8B27&!;R%y$z%kSYaGQ`>{FEcD?QP^)$O=S>WgsW$n$uAC z^HrCD%T^XvzVo%_fphF(LGR*;c{ZAC79h3ngev6p5-*3X5oE?KhBEFi2qP%$Ph?|@ zvG-{OP8o1m8ph$ML@jt%+DiaxqVAp>lzXGOXQx_%ZphBylkNM>wL? zpaLbzV|8!h%9i-d9#pFzxUuXrlaAu3gw~~cF>@a1ZWEFNCy(`38D4(%8gRs^NrvgpQe~96E2`bC5hh+PsU>Z6k77d%9M$JS&#OoO}k_08hOGWct)S{27KUYg4>%X5_oc{K&U+)I)?xty|0klgCoK&o&zCow`-mft!4VW zGo*X=EV(l1Lu+IcvxfN=a}UGgeN^1oJHx?;z~TyiEi>KlU=qEwt4cv zIwz&}t$%1`%F%+EiLr-d`8Rmfs;`5!j*3tr`3kWEUCm!;v3XK!$SPt_>l~9$KVz;LVcTA8@3qEQVRhxVA_1T)sgmk<2{MyI+Hx~zvZeYgxbMvO{!rJpA zMftCOxe4P7?EQZ@rRaDm-~tcH8kodjMQ$on}`ZKl%d698}vod!c(IVa-W#YPK$o zQ{{;B0spTtlFL(jv-p zAEeIe9N4F%3j%B;MkSListmYVOP}|y;7bc`Yqhx-_TZ$%mM}t|o;QN|1J1 z1*R1m{aNqnyl^z`OWrzy*VmQw&i$}HJNZy@V8y;e?{8_Q9CQ;pPWJ17NGf5YZEXBr zU0$E`;evbh!PlVF&DU8O*L&0wA_zz-ZqA*~R*)|R@1d+L# zT)`c9cj4`A%31tu`d%2sZxg&mpnqp=r=Gn=EipD~bIeDHw7iv7A3Yo~#RF)OEx_o2#{i@5j)>OCmfLB`a@4*&-kC3(Fv8&w7Sqvk{v2C0K}F;| zjm+a(uhsr*4fsR%Dmc(Y3VtqT1nZj$mVCY$p|!=_O{ZOduXOVck7xMGBe*kBQY+v_ zpLZ~sY2e(;UB^I*D$7x|ULgB>Bl7sQJ!-*B0Y9Hh<{iHL)SQN`gRfQ1xq|tk=}l5) zq$5RO{?+@U5*fE)vEg)bVynYf)6z*(4b_Qk!97{63h7_z(Mq`VdFRnW-&rLE-DM+{ z$(JtdA9zv>pbCpMz$kRrYOad8_667(qW0;(FbhPCbgNO39y}Xew6`_4UKytKUy4~g zqlF#nRUg_Hc3b@>73N4i-(6e(<)x!6!JMLtR8GabsZ}L0aP}J-cKPAlE(q+#M3tUuGA7Q3(1% zBeJN3HzR-54ZtX&fcRyaYeB$7uqc`9#mS4%|*Ef%L%JNOTBNTJaSj9w@sk8 zxac%ji^eU9V07Y2!SS#;23P7NTunD~Jr^s_a^%{=ha?#V6FYf@4V$s3d=w)U34w($ z0WYJ&HZR!?LHS${RpHr$&~--JIR#d$u#|dB*4$?|VBEdC(4nUpGn-08EOWlf1&k@{ z5xdb>v=}*zOl_he<{r&`u}v{c;(UbiXZKzTI28bfv}nX#nFo_z_a?Aa3&XUl8VrcM_=s?Y3?Y&<^N64)NW->3&9lo*Rod{8 z7|mifiUR8d_TH2$vvV=}=iSlQbn>hr*14nQ zT0!hCGmFMwKUA?aT|Oa#UI^l7eD_S;e})1@5HqQ%q5x?iB69N{iBbGReM8N&I(n63 z5e*AD4I{5;7YqnS5s&&`>c7j4V_Li5@&my=mr6A~!50~L23)bQ_Zqj|w3*7==4TNs z&r2Pj`L^=9It-S(2vpSmtiaoq7M`)pS3Cmahqqb|z>V;V!VS0+cc!Yyu2u)D{43ph zVPkFTz)x1A*Al1`qNvwj&5~m#^1#Z`po?rd@gmYUMDttowcu)HVz@>COGF-l|3t_VfkwbhpI%ig93x(vl>O|hk1f%3dUda7=DP+6w1 zk~H+rI=yFrv6Ku|{$)R8w)#h&a_*C`+De9rv<|-?Xp8CzQ4&d|4dVrWGqQVEx4tW0 zb;U2)8}A#SA448`F&sWSKzfm9zn@6Jkh{1I*$^i(3_ak0(=Zs#|yoN#e)Cd{Jd=j)Yv z_Cwwn79^R?57Aj}=^+P;N)a|9I#aRQi@HO(vYt?SmI>4eV@UUZ4u9_rIic9M$7X2y zyPsAy+LWl6^IR@BnDr%!9D+<_-5fcKqc{f7+1okeM62mVg)8h~lGn{eF?W9XJ`abLGcI(fbq?+H}D5Ct@CZns=-=?eW zl(ir4RJ2EKsUOCYWuHLKF7-dZ#?KfA&M3NzG#TEH&ZsXf@2o$V z;+RQH-J2?7(5xO6{xU{oY~Tl}K<|lk%vbm1MIq~!gUFt%J+8NPhck=@p+QN+So*J7 zI4z6b+QPI8F}Xk2pRO{R_T%-vXZdyaOnlDPZqwZr+fy}lT)Foafr%qZ<6jO@DT_Zp zr7)E=t;Omutajguhdixz`2XQK6Ri1?p~{gQZ?wsGZ++;!(Q&=yO*T6wrPzIWC(XuN zRY5uWi~Y+t$jP=1x`siy>Qr%>;TA1a^(=S@=?~;K0Wmlksj{6*a_c#JM9A^znRl=6 zp2XSX&F>$;?SubiW|0}FmuI4>dSM70^q@m<-t(FyB>#&v1ZUUq&IGI}156$(^gN)U z;Gmh%bV9Y1G2dT;fOih3jhg{4Koil3{O+_&>k4Ui3GkO?X*H0J7;63h_ME=E&vz`Hc6(fv*1mF z3o{Vnr5B23GoA9$bby%R)9s!}ZSIyVo6UEO4)*?K4h=il6+&PjlYW0nKxn9o6Icw~)g;+z!Cn+Mvav~ZZy=@M~q>=a}mU9wsabgr|8aW7T)ogSz{<&{B=AhXqSECx?Ky&-; zO%8aqoMeOigQD%5eF2n+V7b5Jf}k;5PUkT6fs8SZpF-9SF}WOV#D{6Sp)M2G2nF?< z@32&P&s+oeAS8t=;ZBh&-ReV<^pa%5Rnoqljj|HxEmoH?E*#RQIA&1SLmKpR&8 z1DkeKXwhZv#!=MI%v#yq)diYcW;jKRDi*Ov?^JgZ6~y_eufKNB`YP{qdz3T50>mTcN8$sVVn zfG?#W+pic8kK8+3IZVN?UXq{a%79 z^zCP7zXWXqAg+(g6rhmR2tOjr`BuBAn1rh5j#0ik!u8@!BZC5=OySE%-sNaF-?a39 zpG24;WVsoI8!Q#jtfHY4BQ~FVi}Z)dKqdA@Db(+9LFKRdK-xXaTZ!0@pp-cJ$J8C> zx(_c)rn>70%F-5H+7nt$6k)5nSbOX<&cl%;-Saf&#cuf7#=iQ;7gcvQ@}W+#V$1EM zzlVqf-4+cyMdg9o%GtH}mz5$n0bt?xdBRoVWc1^pLd{z0!~&OSzgqH8k7)3p-@ENa z%SAc9w3NO5V_l~#2Xbzj>HbMaM*Ij||0((R2!|w4@lPK$1=`Qy1p4xt-ST-8D=v#& z`ChLIJfU+Jhha#f*~UpJ`?oAcl2pIZ_m|00_fhfBeQasmiTdf=9eR^(gR7F9?FYlo zNpGV`I{f*A=g>+}`zdR-HsG_JG>vwsYr);6|FYlxW={kfGY(x$uIi`%6xCMH0kAME zn|upNL3d})NtXZFvkW&t%88rxX29@S_igT2WglTJ>{%Bx{l1lOgNt%?D@}EdVNIt6 zV0U;0ncqu>Rl3L@EU<79HOFhOECBybAYq>cR}2SxneUH&1^qO0kV+F)~)vyfnZjyhwcXkP{$$orjurp1>~&*Qc3_}%}6^d0^bwM zsH4eV6!x@un6L|>?CLLM3bZpzT8jjbrI$^#U-e;_={VkBiWSUFi)Q`Q&MX?`Nr#=36B#zT8bkFLra>1lW~8 z1ozyZNM9q3m^6OsXaNfuiK0pQj@jo#fjInwgphs&Df zi-*zUV>#QI&AQni=s!;;*(7CIo)V=w5bUcOs!nc;uJj#fZ7-T3JBT=aw41<>CU5U; zw+Q+j!2IpW7vzvKsQm$eq>B`dw}2qRLtdCw`{(FG%({^g^bRQxg`t}h(jV!0LJ<0u zm4~ULnUwhBIaqi#3)VsjVDQ4{jbU-3t=~j$0(MAN-i0+nuo9{$TJTO0QwR_5`=dWcDUV%9DZR<_c^yxxhG%yA>jjTzmFpmSef;Ri)I zZ&(da&r}}O!J+N&QfPm6=JSzlBgQrZ!gp5YwTHFH#OSn`4VMj zG*S=R{<)AbU&5p4nIys0G`I@nV&1Q!hl3LGQ`P?TQgumb` zR*WQLxx1vw-?KWLUx7<5IDSlREhJ6 zy`liOsiHZr)MSTxIQau$yd zCCU;LUfms}+x#i3rhx<5elki&JIj?GG6D-FVZRB#gjTc%@(K0y4j&e*{It+Z{m1&G zNYFcsOt8ne?Gw-OF~Vvn5LGTwy|HLnxnv$Crxe&DT+XY78kV-v5>kzF3QxsP?jV%V zt`d28<-3tQSCO1cX9*srG_;30cqg)awgqnvkvAo5y7&4du-=2PSIP2pxkqDHE^%I{ z`EmE2_})6Np9`_fC)#UvSMBKWGlV{FkL!B;hec2^r5QPCEws*y#CWVoiTb(DN3ZiM<;E%2is#royFJz) z6Iwu$Q(J6M^<@5bMhpGY@6mHtmWX-WfJFOqNS2-#4DCB|xKx#}{(0BNjg5D!!^$d` zyA#3rIn&wOZvLpeKA~?H3$wUu@j`@d!P;(;LtgJecYrW#yrxlb80utfBoqu(fGe$! zrz(5#LEiJj!!+c?c5VO2J9;OIPKO|6jKp54fbGN&KaK|c%oUC{A7J~uLD(6setO6q ztctJu!F-`G4)6%tIihkU*`|dd*OEf=y>u)$+P2%J-bo}UT1GEZ5Bf=s6RZ6EAHRml z$`Rz0nVDj&)?{}rRe7peUw7$G#I2mn4s*5Ra6~EKLTCw7Kh%$qiHU2B1a&Byf?FK; zJv(9+qeZoRR?+4|B4J$khZBE4RNzJuqW&k0 zkViyEkNWpF$ML2L3teT0MnYQ9(ugkVE?>b39(20OR*(<{o+&sz!%nURp+Cra; zfy1+}@_+aXH&AOHFZehp8X4$&sNHVa88|}|c(mm( zgFyIHM&R~c>jTfP@HY@8mEQ#|Yd9p!l}?A>sSw?=eqKbu`|)Dy4HPg+pi2ZHZDW_h z3pCcIGItHQoj1Xh3O?W#jpIyZZ$Ud7?z22llS-5dgC3(NqP>YCGoKFmPa8vNyE;=2 zBZWj-Ie_U2oF6&EumUwShiF)3T>T?49P|f3##nM#D1v9K6tcm>ww?1W_hs`1kjx3) z$j?1uHw#Fm{Ogd944%vej-VE8tgh2NhJFZN8m3Ka#oBfPvrPY2O9f}h#&Ra~#1|Yy66bN45*&vKFE$Ad z+^J6*sE?>2l~#_hQ|#u?;Kc0tV4x@RngZNE;}*`Oowb$rBAK+uX7(c29#??6QjAqjlM>YVP1DxEWAT2(-t@Yw?TR1S|$pCsGlL%LM@HFhs!WK5nxw(l?@I!aV`{ zPbmrXIJ|0`1r^lw1gTAA8OMz9wYzEo*b`8%8udDX>XMN zk(-$B zlA3|8UB)SiaDd%#06XdQ(7g`3rM1hCN^U^|evxrpj8tzsDX=X7crWEPX?izbw-}ov zzx1y2gIkeE5*@L5#c1G@{;-~-o|FZ-P1sJLNvI5;c7kwAM_W(^R;loy9Q>{KK=>X6 zpZGQze1mP{#|Z4U7`RQ(m6+b7fsuT9K;uRql;N6T7mf;BlNe8ABr}d-BbO(R#rF+G!R>7GV!j#K4DG<`Yb z3@PcP!qZAk_|2)!sj^3msZtO=WQzU!VJ)f9=AR!LW2Gz{(Ll*6h~akQFhk5vb((OL zx8k)0w}L%8h#(1(xK)bAoaL?E9ZWPc*M$>(^1<2RpXBySsRquoY`IER&x7s9-P8W-|2Y&IcEK@g0`3 zKW&0&tw^N8eu!;dr}t)H9T^WiQwzaO?)pjF>r}xxFID!-8ovoXq-|AG~%~TaW>^vtPrNLK7xU#1cvSPnG8l zk5z3A)Iyg$b|u>2yDqNReL5Rz|mH|ZZ5~0?K`1exm;cs3r0NBFYyIw3gWH`}fov){#BS2Srp-*e; zHx5LHsb5x|i2WW)+Y3?nLPi=hTh2y)v`02(H(aI;m)R*poS<*)z6=C-uQ3)Dkt1Bt za%;Xm$T44adg2KII4Xj(VAvMK7?4y;$ZcQTO`#WrIr4isxEUoYr@WvKZ#M)A4b&c^ z=$4uh@%aa|xu0ns^KY2@oQ616-ojh(6k9rlFkpyh=rZEhCo zN&HqPFPn`DtMLZlm)Ok>szbhxMu^GtjHjvqNX(IeQ(#pcu~K1ng&sg0!{x7$NG9=c z?HnEDPFc7c+YuwpwMc5d`rD2G_^)N}9@h!NQqY{OrJYA`ly)n?sbyyYFyg=-2`LW* zc|<8GO+&PHDifeEJnpBTmh_Uw;!Q1ACNI#bjB)u8XxGk40^VqT#*QjT#Q2@%LjI>Q zxcP^EB=K! z08%p7hXl9=?KL#3NNneZ1=er$tZWA{oOo={COM?>I3fRUS`es-uQvBXPQ0(1Vk-Nem_ncj%(C&OeZ~-WzN(^(Hol=Hdcj9_NbIA zt-fw;r?(k6K3euajPpf{uyF#L;b?2N(1Gjoe4TGCMfAERodHu#X#vS$3dc|nqh-Sn z^^Yi;nm1v`3*Doa>PFgn#x?n)LEBPU(1o$^;FW}a0%6A({zd?><0ImveNUmO8HRn> z`nXA4eP*$n-S*wKFCB_%6(8sc+=Eu!^=los$B2!fHv9YUyn{U^0QR=nPA+m=zPoAV zZnViV{7BQrMQVM1r>;i$NB9i~VxWqG@aD!T! zRO<=(ExC-Y1UZuco={;LPsg{gu=%*~h|5RNqYXz+3j8h^`F6|)j(S}37 zCW2w{RAJf#ka|)g^+nLCKONe8VBZl0Nl#uo4^<%p?kOPzIo`%M#>V>F>{(Cw2+cmi zoV_I!e%_cf9N`g_Z~Pd2ONnDt1RqR`y1D>lP>osDj1Bo89MnfDS6Y840=y*0_760V zcka0sq#kWdzbZwaw5}+Wi9Fgn&zLsY@?gbIYu=^wIz?(ejm4|UjkfaLppG=Zx`t{GdNhGCxudg4V znIrqUw!~9eQi8fab)s{s(vEv|B)1Dq=#7~+b3Flf-v{L&uDh%EeANQhb*FyM6?OW$ zNG>UgA~lD)If#Pwn!#&+M2wHoPOvkoM3El66|aX3m+<{`FiJyv_eCPFJTNk3g3ul#0Ob-Q02sM5fRpu%Ze^=A=sUCvw}-p8rkb*O*{cdjFfocPu7( zX8w1L-`9LKz0=L7NIwW3a?r9oK*xbR^zbuJ25q*Rs?E-!hwI2sx|FY4cwaLCz zud2aT_ctvqt-1|NP98o zw@Rl6rI0fJ&pp&$R)!dU74Pp#zYKd@-`qX^4q(sUyxPpN^H+<~ta%^!CuS!Sze7Pt zp&E_ZC^P=nh$UYFz!ezxA%MTW>H@&sAM4y#)2_upJt^GytB{z_GfTp@^nt%0{B`JmoZ0hfitwq ztfCmrMtz}lDC8I362AiX@r>&oDFaZ+dQdK89F zgpiU%eUHO|NR?MwWDVo-(OUoU%FA-eFVYoP3;j}`RvvgjW( z1keU8?n4X?7c5)nxZI8VDrnNUFDparn($|fL)5@j|4Im?-Jn9Y?3!c7S@4k98f=#p z*znK+m17;K9P5m%Ir9~}NTR0S2O@S|zVIainpA$|O?b$9;^506i_nCy@EKhi_3rQ} zOG8E`HIXvns!!DJS!M^Z(5L89VR|mjxDCOArd088PGuFQFr?f^yN|1}kDz}cx?1$s z>ph_9t1mzLluPmzZSkk-E;%acZjojv*FCJj=NkQn^OrNkgRDOkKbq5h)|W9b;F4rp z>hSc6in)F8cc?PH<-O$`38P=%@&0p@OOZs;f&bnvr`jS$D0Ik^Vr2nIoRtfE`=;Ygk>}U`cP)hj$JefKg8@4c=7}PyVcEx zpl*f%_9Zxq?Sg$hO4}$)pbwO|jiFbjkGNI1h%^nqpyvfW+j!C(ca7TOa6wBJL<8?k z9OVL?)3DS?#}c%hyX&``d!js_)fm(g$<9^w8opztbXcFMs$!)a;A`+HOY4@dgJ)W* z{y;*wYFn8)LGOniAwX<(od#PM&-oSNQwBNC((_@y`-Nk|4)asVg>y%U!0^il_Zn`c zjx2b_{5C=rgqiJ%>b?*AH2huwY{tdQKSs~n^NF1;TLct+jvo-u8U`_Kj{pR$8up^P zOc_ZUuvuQ%WQt8%=Urnh)Q|R+6FB(Vf|4LB42^Gz&hPT7q(g=%B)mpy0>mrAAVoox z`G?=bGkCxEw_c-$K!CO=t=J!(K#o`>R53W1a0R|u>9k4j%=V2W?Z~Ro#z~`n6(`L; zP3%y@ttW3#P=yZx$|0}`%IEt1cyj@#)?n0d*_O{evCOSIhx`1nmr7vCb)o>e=y2`= zL*qI&IjA(0tqdNoM9rhnc`RkN8IJjc|{u-jvUK_1D8 zqziMkQyYN*5Tn_!oIYQ9?y2{}hv%`+o5}2p@Mgfo!k>mG6*R>~YRjvCCZ35ogkR6A z+kRX`BQ!EgD#|)MsQ4&s{U{a=qBVd#jccv#-PZ-~-# z#ri0p|4_E--oz3{sYm+HX__MPgy@fCrbpCT%%5WKda{3NEb!2V>-AdwxxkDc7cakJ z`tdxl>!9n968s4YNFgmPEdWft-Tb~~SYl%0o|lemef|CK>%JCyuv3~{IM#no3Ey4X z{$e!+U1AkQMMj-@fpfZrfcII6w_D2YkM| ze^Imk?%fwretTNvOe7^G%hnG%jMkll*Ah&UMA3{lfXDtu&2LgWaIPhRuta0ov?3iX zlOeh@N5h89XrgGf1)TT`;KaXpb_C&_BAR)N9x?Or_V8GrU6^SYX0}UY!UlT|dz$7s@)d#N+U0Ru03nmFMF1uwcuPG{eR6D$=-}7DllhY$LXKob8zpp*zB#PRyIqvlwt^3}&y7(cJ zox&%(8nJh?D0)BL#TFJ8hWp|y38>R~1^*}K%%BTk63}qxIk>q)KDJSWb*3nHJy2<( z5(`xN6u>Xd9(mnAGBVli*1G%H`%gZ-yGC?K?AG_I#(*WoVB$ zrYr3Bu4}rm#;W3!V_%UO!}9WSM4o9-_~zp%`o=R+msW&z2PllCg;J9KH}q?zA6!2fMMAk_W|2c&=*8* z(y@v(@`1Q?S2z6Nqujf9KU)A;RoB4)>F=p~Prau*#D128gJT?Eom|(yeO5HV##VB; z9U~8u8IP-2Z3V7yqjH5N>Q}-|yt5mb>PkQG@Z8t_`heWRLLXtR=*Dm+_Cv2;ykMH? z)$Q%m)Wz!B6!zdkS_4Wu&Piqe?HRO_`%(UG&>`%EfL_r}4w;;bZ!dH@hj@QTe7@2A z!ywvq-hOWC#bv|M?G6Rp_f^Rzg6P&B9`&2qabAXkQ77>yxkOk^aeBxZU^CZ`7FU~! zHhm9gqPcbPX58?af_%jAj%PLMqG+_OivfOwz*}N0$BC1NWFxb&3x_H4L+n}DLNe|p z((D4aBrXCpROVytShk5x#8&u-hw4BQz;TL;cmZ`RQT~#Mow4&aUHVx3H*Aaq2v}UK zvB2hjptic<+#I}D0U8}NZzw&j21HkO&WzD#sI8LOkkEVvIiejq(wHyr0#48ZKnQ;( z%yCf|9v3E3XB+>|G2t@Ka*47>v}tQ(^kMS2JZx2imIgO?ERcrYCfjp|x&aA9Z8L81 z1qt|>KHaH#us6!ztZ$C*;?~edk4Z^R(dUVI(k;Qq__|UJ?u2(#Jbf(Iq!_;q!-pFK zZ!Rt(gq0HUIErsfJDxQ2Es>2PFqcME%zNN{DTAHum@}8jejw96McwC&x|nLAf*AD} zMewCmN40q-Wus*WM9~9Y`IvLW0apm)2+|ZJkoFT=0ZPvAte^(DtxM<#xo!LTF5q7c zT0^!)xzGkq%285#3PH3f#Y9!h80|TnAdg$DMo}t3iP)#QZJgv$No3Gn5yl?b56^B9 znD#xulGT32kb+VR)0m9WG~PQW=|xciQ{Fh7;x^P1OeN;^xD;y77?RrzQ{nd$U4YI6 z1G|ehO-_g*YujNra%6(swniy}mgvl)TIg=X{mhM?HAb^p28TnTu7quyUZW_(Nb|O5 z_3EFwl`f2)%p;4wYK^$}g@xv^FgjlwHeiVA&s3S91l{n| z+{kqZpxxBC4I=Wp8lpN(*fP^U^uYC+?exQ_}wQ#XQn4 z2{F2rhl6|v9wPSH1iAd*MMw0NRpS^Bq(4m{S;{sH+$`PZvm|GV)gRs6 zML(3;MM}S1xT&<$eCyDIea&=3amPY3eFcaLQb;^0JOBtAYjA_g`O$FUjf)UMm)u&# zS;oT!Y}qL_KMCVs3H6rb>B8oLEzR6MqG@xhfdqAfn$lZR2$+p=AEx6FwIprBPm)Ij z-70*%GU|xzS;srJAB;H;+;I$vwP$y%h}q?*%c?GRxamuCDxpf;hTTyLiKR*2 z=5YFrZ1JRSc+}OzM^sYQQMHW*vNq-a63MT5Y=i~W>HJ@oN)pAHkq*m?{9pK@?=;~z zvDvP6KWi4|JjI&*ADl`gZ0KS$zYeJAhRep%z(2!HdB9FNQ1xW6vzUwWJhux?`B}?G z*(N&w+!%fA+D^i0I({2`AvKQ3wjZ_(Q5pnYEa0~O|6P({fujD-pX4^D96vD)vhS(* z8$ersV;6l~ZTRZoL)Y&{^=z(3HqU|JRi^x3!AmnoFB9O+!!iqRcwq+_+>gOO|7K$y zG?BIjXG4C`rljW}KS^GW$6z@opxZhKlaX!gCax6y-!^3J>$iTKlt9K5T`=mD2Gl80 zRNY@dnwADebXWL?V5N7-U7VIgjo1UMPy< zmc7JE5&Ct+0Z{%ziVF)Z-`=y3J+$qC?Qsd@@_yYE29Tg}rZm-aU#4W?vK$Ow>tG6! zmmX&e!#$4Lsf+{hnVIUz+8gRLpgOnUn_PgP^`{H~KU;vDMEwfj09@cma4aW|4|$Zd zh-U`*6F1PLBCVK zRu}*DKM6d4`DIlc9ccG=Jk*(z8(|e0_!}8J)Ao9p%f@Od+FWPEUwVQC|g`!fv}mrtn|w2!C?$^i)6%)5p^O`H}siw4M= zfY3R^P`0PJS821;0)|M5)FP(8BF9H~{kOvHIz%-`h>&zQU12JgR*7@DAVZ$`8Fy-JV|A1a8!t zrlaG8LH4F8N5^ZZ^#bjeNupglN5TXjw~ z=*R2_sDf;G9){})yrUs$kaB~iEuM|B5i)hm{L0$^bZboyToP|CiaI^vaR2c<%=yVC zeGsUlf?`O(3D*--_JXMR%vTB_W0Ntj7}>aQI5jo3nuS+EWC~CX_38#!XlgwN6{PL! zcYOc;JsHYB;IA=(B#X3)=G4^ioc+}KG?G*5bx%)^i`Kbw=L(=~?t~QjN@TQlx2C$@`{Yd#9_thN~RjHPunWXnXMneEiQN=LJZSV87Gw!rbOZF`2js~EK2mIiMDhEk z(y>o|xHT1p+a5KcA1`3K$F*n^RKb^BR9#h7HMc|AbAVHf!SFx4ak~Or;pKXZ0>yy& zvEWOP>kSC*GD7KII{TM^-=bXjMcO2k1Xb2{)C5i=5`&tRQaIBCg6i^IJ;2eRB^sE z2{YZPD?=MbuIlrinH@LOA%@fT<;$0nVylWzf zvQxbKul)7x1i#V`=`=$wns)pV(|gv2Vxb4z=0m#Sq~vYRp2z!A_t-sNUH@9rP(K_- zmu|oO!pC)Ab@K!4&D*z`^%K|mxuV)$rMZ3}-C*>Er9+PfWN(t8VZqMAqPi0Pd|ZzQ z2D5~3OG>7E9+3m|lLG&ZUu!;G92_GF6lYCUCQ&pm#>EPB{)U(@Xs36@HnmHMX7|j` zB^Rc$XopzL*#_9UI2S}hz04V9aq$96Y$o;KNS$^lTQ|{n1oRz1aKhUpK80U)0Z6S@ zS*p&NjvZmwuU~%!t@q`|*v7%L71z&->0q=I-;YR$=D&ZG7hsWU#b-?0*wOO6t$96Z4w3gkot)_s7 z@N){r+4*KrC7?XnPOu;!qc8W;zYQu_8mt3I*Kqxl`d?Wfyt9q$;om@L^MfoyzXsDQ)} zNsh)WxG+0=!aicV!0A}csZTUvpb;zeGt}19f3D1~moiN76ONgSO1}EEruO`5k&?8I|j0r0~51$P64>k;w zKdAEc9x@ChEe78ba9xKtI0}p&IU2b=Jo@CUo-mCr2Gt5m_@RWSgccPI*rwGG6A7ui z2Ky^~@tyh}4P~3SVb8OYkA-JP-4DZguv{aQjk0O_Q0gtViHhrT0{HhBx4=-wstNUK zlE~+i9c{Ru#d?}Ho@89Da`(LiqT`4^3;|mTTLI5VP3+&-A9yVo1NIj6%pQWfR#8AX z)kwGPfYCl#uAdXr4Yxn=>@iHL-8e-L9x|ANaZW-mn{Fw;`V+cwRpjD}sXOvdM8I3Q zMc?9xPpd)uCn@wQ7R^m@eIY#pvrWv&-V?^Bu0*uq`u|<|1Uxw{pdk}_;^aNfS9FDJ zl*CHWjz)JO4YKxD^Ue4@2(EeB6aKB+2`mJjL_y>pjWol8I>DSUAc!(F8Ohjig4OOb zGN%SJd4Lp?XHaRZzbAT0?2wlV(q-IqFrne84lpoGC25!Hak;SW~usx}M>0w}uB Yz&UN{J75(cMu0yZq9Im%#No>S0hr*m Date: Mon, 13 Nov 2023 17:34:59 +0700 Subject: [PATCH 03/15] Add files via upload --- mux3216.vhd | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) create mode 100644 mux3216.vhd diff --git a/mux3216.vhd b/mux3216.vhd new file mode 100644 index 0000000..b21e56b --- /dev/null +++ b/mux3216.vhd @@ -0,0 +1,26 @@ +library IEEE; +use IEEE.std_logic_1164.all; +use IEEE.std_logic_arith.all; +use IEEE.std_logic_unsigned.all; + +entity mux3216 is + port( rst, selektor: in std_logic; + input1: in std_logic_vector(31 downto 0); + input2: in std_logic_vector(15 downto 0); + output: out std_logic_vector(31 downto 0) + ); +end mux3216; + +architecture mux_arc of mux3216 is +begin + process(rst, selektor, input1, input2) + begin + if(rst = '1') then + output <= "00000000000000000000000000000000"; + elsif selektor = '0' then + output <= input1; + else + output <= "0000000000000000" & input2; + end if; + end process; +end mux_arc; \ No newline at end of file From 7b5304a225a37c56df171cdd5731a432d757db24 Mon Sep 17 00:00:00 2001 From: mpa216 <123876878+mpa216@users.noreply.github.com> Date: Mon, 13 Nov 2023 17:40:44 +0700 Subject: [PATCH 04/15] Add files via upload --- mux.vhd | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) create mode 100644 mux.vhd diff --git a/mux.vhd b/mux.vhd new file mode 100644 index 0000000..3880072 --- /dev/null +++ b/mux.vhd @@ -0,0 +1,26 @@ +library IEEE; +use IEEE.std_logic_1164.all; +use IEEE.std_logic_arith.all; +use IEEE.std_logic_unsigned.all; + +entity mux is + port( rst, selektor: in std_logic; + input1: in std_logic_vector(15 downto 0); + input2: in std_logic_vector(15 downto 0); + output: out std_logic_vector(15 downto 0) + ); +end mux; + +architecture mux_arc of mux is +begin + process(rst, selektor, input1, input2) + begin + if(rst = '1') then + output <= "0000000000000000"; + elsif selektor = '0' then + output <= input1; + else + output <= input2; + end if; + end process; +end mux_arc; \ No newline at end of file From 47cc58482c3da50199b5fbdc4b4461409b6e8d9f Mon Sep 17 00:00:00 2001 From: mpa216 <123876878+mpa216@users.noreply.github.com> Date: Thu, 16 Nov 2023 03:55:38 +0700 Subject: [PATCH 05/15] Add files via upload --- fsm.vhd | 58 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 58 insertions(+) create mode 100644 fsm.vhd diff --git a/fsm.vhd b/fsm.vhd new file mode 100644 index 0000000..6c1234d --- /dev/null +++ b/fsm.vhd @@ -0,0 +1,58 @@ +library ieee; +use ieee.std_logic_1164.all; +use ieee.numeric_std.all; + +entity fsm is + port( + clk, rst, op, comp : in std_logic; + enable, sel : out std_logic + ); +end fsm; + +architecture Behavioral of fsm is + type state is (A, B, C, D); + signal current_state, next_state : state; + +begin + process(rst, clk) + begin + if rst = '1' then + current_state <= A; + elsif (clk'event and clk = '1') then + current_state <= next_state; + end if; + end process; + + process(current_state, comp, op) + begin + case current_state is + when A => + enable <= '0'; + sel <= '0'; + if (op = '1') then + next_state <= B; + else + next_state <= C; + end if; + + when B => + enable <= '0'; + sel <= '0'; + next_state <= D; + + when D => + enable <= '0'; + sel <= '1'; + if (comp = '1') then + next_state <= D; + else + next_state <= C; + end if; + + when C => + enable <= '1'; + sel <= '1'; + next_state <= A; + end case; + end process; +end Behavioral; \ No newline at end of file From d57093f196d8ae3f040d8b0e9855c34fa59f3d50 Mon Sep 17 00:00:00 2001 From: mpa216 <123876878+mpa216@users.noreply.github.com> Date: Thu, 16 Nov 2023 03:57:46 +0700 Subject: [PATCH 06/15] Update fsm.vhd --- fsm.vhd | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/fsm.vhd b/fsm.vhd index 6c1234d..e75e172 100644 --- a/fsm.vhd +++ b/fsm.vhd @@ -19,7 +19,7 @@ begin if rst = '1' then current_state <= A; elsif (clk'event and clk = '1') then - current_state <= next_state; + current_state <= next_state; end if; end process; @@ -27,32 +27,32 @@ begin begin case current_state is when A => - enable <= '0'; - sel <= '0'; + enable <= '0'; + sel <= '0'; if (op = '1') then next_state <= B; else - next_state <= C; + next_state <= C; end if; when B => - enable <= '0'; - sel <= '0'; - next_state <= D; + enable <= '0'; + sel <= '0'; + next_state <= D; when D => - enable <= '0'; - sel <= '1'; + enable <= '0'; + sel <= '1'; if (comp = '1') then next_state <= D; else - next_state <= C; + next_state <= C; end if; when C => - enable <= '1'; - sel <= '1'; - next_state <= A; + enable <= '1'; + sel <= '1'; + next_state <= A; end case; end process; -end Behavioral; \ No newline at end of file +end Behavioral; From ed8c92330bfe7c26e7fa438a46580f065467ee6b Mon Sep 17 00:00:00 2001 From: mpa216 <123876878+mpa216@users.noreply.github.com> Date: Thu, 16 Nov 2023 03:58:23 +0700 Subject: [PATCH 07/15] Update fsm.vhd --- fsm.vhd | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/fsm.vhd b/fsm.vhd index e75e172..8122456 100644 --- a/fsm.vhd +++ b/fsm.vhd @@ -19,7 +19,7 @@ begin if rst = '1' then current_state <= A; elsif (clk'event and clk = '1') then - current_state <= next_state; + current_state <= next_state; end if; end process; From ed7dc1b869a909ce3a30f7fea37c0d8ac6b0a9d6 Mon Sep 17 00:00:00 2001 From: mpa216 <123876878+mpa216@users.noreply.github.com> Date: Wed, 22 Nov 2023 21:46:12 +0700 Subject: [PATCH 08/15] Delete fsm.vhd --- fsm.vhd | 58 --------------------------------------------------------- 1 file changed, 58 deletions(-) delete mode 100644 fsm.vhd diff --git a/fsm.vhd b/fsm.vhd deleted file mode 100644 index 8122456..0000000 --- a/fsm.vhd +++ /dev/null @@ -1,58 +0,0 @@ -library ieee; -use ieee.std_logic_1164.all; -use ieee.numeric_std.all; - -entity fsm is - port( - clk, rst, op, comp : in std_logic; - enable, sel : out std_logic - ); -end fsm; - -architecture Behavioral of fsm is - type state is (A, B, C, D); - signal current_state, next_state : state; - -begin - process(rst, clk) - begin - if rst = '1' then - current_state <= A; - elsif (clk'event and clk = '1') then - current_state <= next_state; - end if; - end process; - - process(current_state, comp, op) - begin - case current_state is - when A => - enable <= '0'; - sel <= '0'; - if (op = '1') then - next_state <= B; - else - next_state <= C; - end if; - - when B => - enable <= '0'; - sel <= '0'; - next_state <= D; - - when D => - enable <= '0'; - sel <= '1'; - if (comp = '1') then - next_state <= D; - else - next_state <= C; - end if; - - when C => - enable <= '1'; - sel <= '1'; - next_state <= A; - end case; - end process; -end Behavioral; From 23ff5959a755cab1a9b7eb09bd47eb1bf1ef4da6 Mon Sep 17 00:00:00 2001 From: mpa216 <123876878+mpa216@users.noreply.github.com> Date: Wed, 22 Nov 2023 21:46:39 +0700 Subject: [PATCH 09/15] Delete galois_multiplus.vhd --- galois_multiplus.vhd | 42 ------------------------------------------ 1 file changed, 42 deletions(-) delete mode 100644 galois_multiplus.vhd diff --git a/galois_multiplus.vhd b/galois_multiplus.vhd deleted file mode 100644 index 6bddac1..0000000 --- a/galois_multiplus.vhd +++ /dev/null @@ -1,42 +0,0 @@ -LIBRARY ieee; -USE ieee.std_logic_1164.all; -USE ieee.numeric_std.all; -USE ieee.std_logic_unsigned.all; -use work.all; - -entity galois_multiply is port ( - A, B : in integer range 0 to 65536; - mode : in std_logic_vector(0 downto 0); - res : out integer range 0 to 131072); -end galois_multiply; - -architecture behavioral of galois_multiply is - signal num_A : std_logic_vector(31 downto 0); - signal num_B : std_logic_vector(31 downto 0); - signal op : integer; - signal result : std_logic_vector(31 downto 0); -begin -num_B <= std_logic_vector(to_unsigned(B,32)); -op <= to_integer(unsigned(mode)); -process (num_B, op) -variable num_1 : std_logic_vector(31 downto 0); -variable temp : std_logic_vector(31 downto 0):= "00000000000000000000000000000000"; -begin - num_1 := std_logic_vector(to_unsigned(A,32)); - if op = 1 then - --Operasi Perkalian - for i in 0 to 15 loop - for j in 0 to 15 loop - if num_B(j) = '1' then - temp(j+i) := temp(j+i) XOR num_1(i); - end if; - end loop; - end loop; - result <= temp; - else - result <= num_1 XOR num_B; - end if; -end process; -num_A <= result; -res <= to_integer(unsigned(num_A)); -end behavioral; \ No newline at end of file From 60ea21f8921dafeb9f654ef50696a9fceb13f405 Mon Sep 17 00:00:00 2001 From: mpa216 <123876878+mpa216@users.noreply.github.com> Date: Wed, 22 Nov 2023 21:46:52 +0700 Subject: [PATCH 10/15] Delete mux.vhd --- mux.vhd | 26 -------------------------- 1 file changed, 26 deletions(-) delete mode 100644 mux.vhd diff --git a/mux.vhd b/mux.vhd deleted file mode 100644 index 3880072..0000000 --- a/mux.vhd +++ /dev/null @@ -1,26 +0,0 @@ -library IEEE; -use IEEE.std_logic_1164.all; -use IEEE.std_logic_arith.all; -use IEEE.std_logic_unsigned.all; - -entity mux is - port( rst, selektor: in std_logic; - input1: in std_logic_vector(15 downto 0); - input2: in std_logic_vector(15 downto 0); - output: out std_logic_vector(15 downto 0) - ); -end mux; - -architecture mux_arc of mux is -begin - process(rst, selektor, input1, input2) - begin - if(rst = '1') then - output <= "0000000000000000"; - elsif selektor = '0' then - output <= input1; - else - output <= input2; - end if; - end process; -end mux_arc; \ No newline at end of file From 61b6bbebf6563b005635e228908a85cda02d21a1 Mon Sep 17 00:00:00 2001 From: mpa216 <123876878+mpa216@users.noreply.github.com> Date: Wed, 22 Nov 2023 21:47:01 +0700 Subject: [PATCH 11/15] Delete mux3216.vhd --- mux3216.vhd | 26 -------------------------- 1 file changed, 26 deletions(-) delete mode 100644 mux3216.vhd diff --git a/mux3216.vhd b/mux3216.vhd deleted file mode 100644 index b21e56b..0000000 --- a/mux3216.vhd +++ /dev/null @@ -1,26 +0,0 @@ -library IEEE; -use IEEE.std_logic_1164.all; -use IEEE.std_logic_arith.all; -use IEEE.std_logic_unsigned.all; - -entity mux3216 is - port( rst, selektor: in std_logic; - input1: in std_logic_vector(31 downto 0); - input2: in std_logic_vector(15 downto 0); - output: out std_logic_vector(31 downto 0) - ); -end mux3216; - -architecture mux_arc of mux3216 is -begin - process(rst, selektor, input1, input2) - begin - if(rst = '1') then - output <= "00000000000000000000000000000000"; - elsif selektor = '0' then - output <= input1; - else - output <= "0000000000000000" & input2; - end if; - end process; -end mux_arc; \ No newline at end of file From c345b3d30490ad9c47677a98ec52437335931645 Mon Sep 17 00:00:00 2001 From: mpa216 <123876878+mpa216@users.noreply.github.com> Date: Wed, 22 Nov 2023 21:47:22 +0700 Subject: [PATCH 12/15] Add files via upload --- New Compressed (zipped) Folder.zip | Bin 0 -> 4881 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 New Compressed (zipped) Folder.zip diff --git a/New Compressed (zipped) Folder.zip b/New Compressed (zipped) Folder.zip new file mode 100644 index 0000000000000000000000000000000000000000..096d1e163e0188454a49e4d423058260c5a7823b GIT binary patch literal 4881 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 literal 0 HcmV?d00001 From 95dd91a4fbdeab5ab3b61ae3c87cd5978b05e208 Mon Sep 17 00:00:00 2001 From: mpa216 <123876878+mpa216@users.noreply.github.com> Date: Wed, 22 Nov 2023 21:47:40 +0700 Subject: [PATCH 13/15] Delete New Compressed (zipped) Folder.zip --- New Compressed (zipped) Folder.zip | Bin 4881 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 New Compressed (zipped) Folder.zip diff --git a/New Compressed (zipped) Folder.zip b/New Compressed (zipped) Folder.zip deleted file mode 100644 index 096d1e163e0188454a49e4d423058260c5a7823b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4881 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 From 75f0a9433a54886508d340742d69995a24db2efa Mon Sep 17 00:00:00 2001 From: mpa216 <123876878+mpa216@users.noreply.github.com> Date: Wed, 22 Nov 2023 21:49:15 +0700 Subject: [PATCH 14/15] Add files via upload --- cek_prima.vhd | 47 +++++++++++++++++++ comparator_fsm.vhd | 22 +++++++++ demux.vhd | 27 +++++++++++ fsm.vhd | 60 +++++++++++++++++++++++++ galois_modulo.vhd | 68 ++++++++++++++++++++++++++++ galois_multiplus.vhd | 53 ++++++++++++++++++++++ mux.vhd | 27 +++++++++++ mux3216.vhd | 26 +++++++++++ top.vhd | 105 +++++++++++++++++++++++++++++++++++++++++++ 9 files changed, 435 insertions(+) create mode 100644 cek_prima.vhd create mode 100644 comparator_fsm.vhd create mode 100644 demux.vhd create mode 100644 fsm.vhd create mode 100644 galois_modulo.vhd create mode 100644 galois_multiplus.vhd create mode 100644 mux.vhd create mode 100644 mux3216.vhd create mode 100644 top.vhd diff --git a/cek_prima.vhd b/cek_prima.vhd new file mode 100644 index 0000000..68934f7 --- /dev/null +++ b/cek_prima.vhd @@ -0,0 +1,47 @@ +LIBRARY ieee; +USE ieee.std_logic_1164.all; +USE ieee.numeric_std.all; +USE ieee.std_logic_unsigned.all; +use IEEE.MATH_REAL.ALL; +use work.all; + +entity cek_prima is + Port ( clk : in STD_LOGIC; + rst : in STD_LOGIC; + input_number : in integer range 0 to 131071; + is_prime : out STD_LOGIC); +end cek_prima; + +architecture Behavioral of cek_prima is + signal n : integer:=2; + signal remainder : integer; + signal prime : std_logic := '1'; + +begin + process(clk, rst) + begin + if rst = '1' then + n <= 2; + prime <= '1'; + elsif rising_edge(clk) then + if n < input_number and prime = '1' then + remainder <= (input_number) mod n; + if remainder = 0 then + prime <= '0'; -- Input is not prime + else + prime <= '1'; -- Input is prime + end if; + if n = 2 then + n <= n+1; + else + n <= n+2; + end if; + end if; + + if input_number = 1 or input_number = 0 then + is_prime <= '0'; + else + is_prime <= prime; + end if; + end process; +end Behavioral; diff --git a/comparator_fsm.vhd b/comparator_fsm.vhd new file mode 100644 index 0000000..c7084ff --- /dev/null +++ b/comparator_fsm.vhd @@ -0,0 +1,22 @@ +library IEEE; +use IEEE.STD_LOGIC_1164.ALL; +use IEEE.STD_LOGIC_ARITH.ALL; +use IEEE.STD_LOGIC_UNSIGNED.ALL; + +entity comparator_fsm is port ( + A : in integer range 0 to 2147483646; + m : in integer range 0 to 131071; + comp : out std_logic_vector(0 downto 0)); +end comparator_fsm; + +architecture behavioral of comparator_fsm is + begin + process(A, m) + begin + if A >= m then + comp <= "1"; + else + comp <= "0"; + end if; + end process; +end behavioral; \ No newline at end of file diff --git a/demux.vhd b/demux.vhd new file mode 100644 index 0000000..8eb40ed --- /dev/null +++ b/demux.vhd @@ -0,0 +1,27 @@ +library IEEE; +use IEEE.std_logic_1164.all; +use IEEE.std_logic_arith.all; +use IEEE.std_logic_unsigned.all; + +entity demux is + port( rst, selektor: in std_logic; + input1: in integer range 0 to 65536; + output1: out integer range 0 to 65536; + output2: out integer range 0 to 65536 + ); +end demux; + +architecture demux_arc of demux is +begin + process(rst, selektor, input1) + begin + if(rst = '1') then + output1 <= 0; + output2 <= 0; + elsif selektor = '0' then + output1 <= input1; + else + output2 <= input1; + end if; + end process; +end demux_arc; \ No newline at end of file diff --git a/fsm.vhd b/fsm.vhd new file mode 100644 index 0000000..5dc6dbb --- /dev/null +++ b/fsm.vhd @@ -0,0 +1,60 @@ +library ieee; +use ieee.std_logic_1164.all; +use ieee.numeric_std.all; + +entity fsm is + port( + clk, rst: in std_logic; + operation : in std_logic_vector(0 downto 0); + comp : in std_logic_vector(0 downto 0); + enable, sel : out std_logic + ); +end fsm; + +architecture Behavioral of fsm is + type state is (A, B, C, D); + signal current_state, next_state : state; + +begin + process(rst, clk) + begin + if rst = '1' then + current_state <= A; + elsif (clk'event and clk = '1') then + current_state <= next_state; + end if; + end process; + + process(current_state, comp, operation) + begin + case current_state is + when A => + enable <= '0'; + sel <= '0'; + if (operation = "1") then + next_state <= B; + else + next_state <= C; + end if; + + when B => + enable <= '0'; + sel <= '0'; + next_state <= D; + + when D => + enable <= '0'; + sel <= '1'; + if (comp = "1") then + next_state <= D; + else + next_state <= C; + end if; + + when C => + enable <= '1'; + sel <= '1'; + next_state <= A; + end case; + end process; +end Behavioral; diff --git a/galois_modulo.vhd b/galois_modulo.vhd new file mode 100644 index 0000000..b6b768b --- /dev/null +++ b/galois_modulo.vhd @@ -0,0 +1,68 @@ +LIBRARY ieee; +USE ieee.std_logic_1164.all; +USE ieee.numeric_std.all; +USE ieee.std_logic_unsigned.all; +use work.all; + +entity galois_modulo is port ( + A : in integer range 0 to 2147483647; + P : in integer range 0 to 131072; + comp : in std_logic_vector(0 downto 0); + res : out integer range 0 to 65536 + ); +end galois_modulo; + +architecture Behavioral of galois_modulo is + type states is (s1, s2, s3); + signal temp_A : std_logic_vector(31 downto 0); + signal temp_P : std_logic_vector(31 downto 0); + signal temp_result, temp_shift : std_logic_vector(31 downto 0); + signal difference, msb_A, msb_P : integer; +begin +temp_A <= std_logic_vector(to_unsigned(A,32)); +temp_P <= std_logic_vector(to_unsigned(P,32)); + +--Mencari selisih MSB +process(temp_A, temp_P) +begin + if comp = "1" then + for i in 31 downto 0 loop + msb_A <= i; + if temp_A(i) = '1' then + exit; + end if; + end loop; + for j in 31 downto 0 loop + msb_P <= j; + if temp_P(j) = '1' then + exit; + end if; + end loop; + else + msb_A <= 0; + msb_P <= 0; + end if; +end process; +difference <= (msb_A - msb_P); + +--Left Shift Modulo and Modulo +process(temp_A, temp_P, difference, temp_result, temp_shift) + variable k : integer := 0; + variable counter : integer := 0; +begin + if comp = "1" then + if difference > 0 then + for j in 0 to 16 loop + exit when j = difference; + temp_shift <= temp_P(30 downto 0) & '0'; + end loop; + temp_result <= temp_A xor temp_shift; + elsif (difference <= 0) then + temp_result <= temp_A xor temp_P; + end if; + else + temp_result <= temp_A; + end if; +end process; +res <= to_integer(unsigned(temp_result)); +end Behavioral; diff --git a/galois_multiplus.vhd b/galois_multiplus.vhd new file mode 100644 index 0000000..c8a9336 --- /dev/null +++ b/galois_multiplus.vhd @@ -0,0 +1,53 @@ +LIBRARY ieee; +USE ieee.std_logic_1164.all; +USE ieee.numeric_std.all; +USE ieee.std_logic_unsigned.all; +use work.all; + +entity galois_multiplus is port ( + clk : in std_logic; + A, B : in integer range 0 to 65535; + mode : in std_logic_vector(0 downto 0); + res_addition : out integer range 0 to 65535; + res_multiply : out integer range 0 to 131071 + ); +end galois_multiplus; + +architecture behavioral of galois_multiplus is + signal num_B : std_logic_vector(31 downto 0); + signal op : integer; + signal result_add : std_logic_vector(31 downto 0); + signal result_mult : std_logic_vector(31 downto 0); + signal num_A_mult : std_logic_vector(31 downto 0); + signal num_A_add : std_logic_vector(31 downto 0); +begin +num_B <= std_logic_vector(to_unsigned(B,32)); +op <= to_integer(unsigned(mode)); +process (num_B, op, result_add, result_mult, clk) +variable num_1 : std_logic_vector(31 downto 0); +variable temp : std_logic_vector(31 downto 0):= "00000000000000000000000000000000"; +variable i : integer:= 0; +begin + num_1 := std_logic_vector(to_unsigned(A,32)); + if op = 1 then + --Operasi Perkalian + if rising_edge(clk) then + for j in 0 to 15 loop + if num_B(j) = '1' then + temp(j+i) := temp(j+i) XOR num_1(i); + end if; + end loop; + i := i + 1; + end if; + result_mult <= temp; + result_add <= "00000000000000000000000000000000"; + else + result_mult <= "00000000000000000000000000000000"; + result_add <= num_1 XOR num_B; + end if; +end process; +num_A_mult <= result_mult; +num_A_add <= result_add; +res_addition <= to_integer(unsigned(num_A_add)); +res_multiply <= to_integer(unsigned(num_A_mult)); +end behavioral; \ No newline at end of file diff --git a/mux.vhd b/mux.vhd new file mode 100644 index 0000000..fcdf179 --- /dev/null +++ b/mux.vhd @@ -0,0 +1,27 @@ +library IEEE; +use IEEE.std_logic_1164.all; +use IEEE.std_logic_arith.all; +use IEEE.std_logic_unsigned.all; + +entity mux is + port( rst: in std_logic; + selektor: in std_logic_vector(0 downto 0); + input1: in integer range 0 to 65536; + input2: in integer range 0 to 65536; + output: out integer range 0 to 65536 + ); +end mux; + +architecture mux_arc of mux is +begin + process(rst, selektor, input1, input2) + begin + if(rst = '1') then + output <= 0; + elsif selektor = "0" then + output <= input1; + else + output <= input2; + end if; + end process; +end mux_arc; \ No newline at end of file diff --git a/mux3216.vhd b/mux3216.vhd new file mode 100644 index 0000000..cf1e010 --- /dev/null +++ b/mux3216.vhd @@ -0,0 +1,26 @@ +library IEEE; +use IEEE.std_logic_1164.all; +use IEEE.std_logic_arith.all; +use IEEE.std_logic_unsigned.all; + +entity mux3216 is + port( rst, selektor: in std_logic; + input1: in integer range 0 to 131071; + input2: in integer range 0 to 65535; + output: out integer range 0 to 131072 + ); +end mux3216; + +architecture mux_arc of mux3216 is +begin + process(rst, selektor, input1, input2) + begin + if(rst = '1') then + output <= 0; + elsif selektor = '0' then + output <= input1; + else + output <= input2; + end if; + end process; +end mux_arc; \ No newline at end of file diff --git a/top.vhd b/top.vhd new file mode 100644 index 0000000..cd815a0 --- /dev/null +++ b/top.vhd @@ -0,0 +1,105 @@ +library IEEE; +use IEEE.std_logic_1164.all; +use IEEE.std_logic_arith.all; +use IEEE.std_logic_unsigned.all; +use work.all; +entity top is + port( + A, B: in integer range 0 to 65535; + rst, clk: in std_logic; + Op: in std_logic_vector(0 downto 0); + P: in integer range 0 to 131072; + m: in integer range 0 to 131071; + res : out integer range 0 to 65536 + ); +end top; + +architecture behavioral of top is +-- blok komparator +component comparator_fsm is + port( + A : in integer range 0 to 2147483646; + m : in integer range 0 to 131071; + comp : out std_logic_vector(0 downto 0) + ); +end component; +-- blok fsm +component fsm is + port( + clk, rst: in std_logic; + operation : in std_logic_vector(0 downto 0); + comp : in std_logic_vector(0 downto 0); + enable, sel : out std_logic + ); +end component; +-- blok modulo +component galois_modulo is + port( + A : in integer range 0 to 2147483647; + P : in integer range 0 to 131072; + comp : in std_logic_vector(0 downto 0); + res : out integer range 0 to 65536 + ); +end component; +-- blok perkalian dan pertambahan +component galois_multiplus is + port( + clk : in std_logic; + A, B : in integer range 0 to 65535; + mode : in std_logic_vector(0 downto 0); + res_addition : out integer range 0 to 65535; + res_multiply : out integer range 0 to 131071 + ); +end component; +-- blok mux bagian atas +component mux3216 is + port( + rst, selektor: in std_logic; + input1: in integer range 0 to 131071; + input2: in integer range 0 to 65535; + output: out integer range 0 to 131072 + ); +end component; +-- blok mux bawah +component mux is + port( + rst: in std_logic; + selektor: in std_logic_vector(0 downto 0); + input1: in integer range 0 to 65536; + input2: in integer range 0 to 65536; + output: out integer range 0 to 65536 + ); +end component; +-- blok demux +component demux is + port( + rst, selektor: in std_logic; + input1: in integer range 0 to 65536; + output1: out integer range 0 to 65536; + output2: out integer range 0 to 65536 + ); +end component; + +signal r_mux3216: integer range 0 to 131072; +signal r_com: std_logic_vector(0 downto 0); +signal r_add: integer range 0 to 65535; +signal r_mult: integer range 0 to 131071; +signal r_sel: std_logic; +signal r_demux1: integer range 0 to 65536; +signal r_muxatas: integer range 0 to 131072; +signal r_enable: std_logic; +signal r_mod: integer range 0 to 65536; +signal r_demux2: integer range 0 to 65536; +signal r_mux: integer range 0 to 65536; +begin + -- alur data + X_COM: comparator_fsm port map(r_mux, m, r_com); + X_MULT: galois_multiplus port map(clk, A, B, Op, r_add, r_mult); + X_MUX3216: mux3216 port map(rst, r_sel, r_mult, r_demux1, r_muxatas); + X_FSM: fsm port map(clk, rst, Op, r_com, r_enable, r_sel); + X_MOD: galois_modulo port map (r_muxatas, P, r_com, r_mod); + X_DEMUX: demux port map (rst, r_enable, r_mod, r_demux1, r_demux2); + X_MUX: mux port map(rst, Op, r_add, r_demux2, r_mux); + -- hasil + res <= r_mux; +end behavioral; \ No newline at end of file From 3b05a68c90be213350385b5073b2dab7cd9107d9 Mon Sep 17 00:00:00 2001 From: mpa216 <123876878+mpa216@users.noreply.github.com> Date: Wed, 22 Nov 2023 23:24:27 +0700 Subject: [PATCH 15/15] Update top.vhd --- top.vhd | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/top.vhd b/top.vhd index cd815a0..5d96332 100644 --- a/top.vhd +++ b/top.vhd @@ -93,7 +93,7 @@ signal r_demux2: integer range 0 to 65536; signal r_mux: integer range 0 to 65536; begin -- alur data - X_COM: comparator_fsm port map(r_mux, m, r_com); + X_COM: comparator_fsm port map(r_muxatas, m, r_com); X_MULT: galois_multiplus port map(clk, A, B, Op, r_add, r_mult); X_MUX3216: mux3216 port map(rst, r_sel, r_mult, r_demux1, r_muxatas); X_FSM: fsm port map(clk, rst, Op, r_com, r_enable, r_sel); @@ -102,4 +102,4 @@ begin X_MUX: mux port map(rst, Op, r_add, r_demux2, r_mux); -- hasil res <= r_mux; -end behavioral; \ No newline at end of file +end behavioral;