From a7cc499934375b94c1ca58f41fd8f42f8e02530b Mon Sep 17 00:00:00 2001 From: Ebrahim Bharmal <31911615+ebrahimbharmal007@users.noreply.github.com> Date: Sun, 26 Jul 2020 08:06:29 +0000 Subject: [PATCH] Adding guide for forward and reverse proxy servers (#185) * Add files via upload * Update forward&reverse_proxy.md * Update forward&reverse_proxy.md * Update forward&reverse_proxy.md Checking links * Update forward&reverse_proxy.md Updated all links. Now images show up properly * Update forward&reverse_proxy.md Updated headings. Made changes to the format. * Update forward&reverse_proxy.md Changes made againnnnnn * Update forward&reverse_proxy.md Updated structure. Added more content. * Update forward&reverse_proxy.md * Update forward&reverse_proxy.md Added table of contents * Update forward&reverse_proxy.md Corrected some lines * Update forward&reverse_proxy.md Updated final version: Fixed spelling mistakes and errors * Added picture of ebrahimbharmal007 Contributing to guides: forward&reverse_proxy.md * Updated authors.json: add author ebrahimbharmal007 Added ebrahimbharmal007 in authors.json for submitting guide forward&reverse_proxy.md * Updated guides.json Added meta data for guide forward&reverse_proxy.md by ebrahimbharmal007 --- content/authors.json | 7 ++++ content/guides.json | 10 +++++ content/guides/forward&reverse_proxy.md | 48 ++++++++++++++++++++++++ public/authors/ebrahimbharmal007.png | Bin 0 -> 26958 bytes 4 files changed, 65 insertions(+) create mode 100644 content/guides/forward&reverse_proxy.md create mode 100644 public/authors/ebrahimbharmal007.png diff --git a/content/authors.json b/content/authors.json index f757f72fb..34b0e0250 100644 --- a/content/authors.json +++ b/content/authors.json @@ -26,5 +26,12 @@ "twitter": "spekulatius1984", "picture": "/authors/spekulatius.jpg", "bio": "Developer building side-projects for fun, lover of the web and open source" + }, + { + "username": "ebrahimbharmal007", + "name": "Ebrahim Bharmal", + "twitter": "BharmalEbrahim", + "picture": "/authors/ebrahimbharmal007.png", + "bio": "Love building projects using tools completely new to me. Python forever. Senior at University of Texas at Arlington (2021)" } ] diff --git a/content/guides.json b/content/guides.json index d1661f98b..6f3ae721e 100644 --- a/content/guides.json +++ b/content/guides.json @@ -250,5 +250,15 @@ "author": "kamranahmedse", "createdAt": "2017-10-28T17:00:00.860Z", "updatedAt": "2017-10-28T17:00:00.860Z" + }, + { + "title": "Forward and Reverse Proxy Servers", + "description": "How do proxy servers work and what are forward & reverse proxies", + "url": "/guides/forward&reverse_proxy", + "fileName": "forward&reverse_proxy", + "featured": true, + "author": "ebrahimbharmal007", + "createdAt": "2020-07-24T12:40:18", + "updatedAt": "2020-07-24T12:40:18" } ] diff --git a/content/guides/forward&reverse_proxy.md b/content/guides/forward&reverse_proxy.md new file mode 100644 index 000000000..38e37cda1 --- /dev/null +++ b/content/guides/forward&reverse_proxy.md @@ -0,0 +1,48 @@ +Internet has connected people across the world using social media and audio/video calling features along with providing an overabundance of knowledge and tools. All this comes with an inherent danger of security and privacy breaches. In this guide we will talk about **proxies** which play a vital role in mitigating these risks. We will cover the following topics in this guide: + +- [**Proxy Server**](#proxy-server) +- [**Forward Proxy Server**](#forward-proxy-server) +- [**Reverse Proxy Server**](#reverse-proxy-server) +- [**Summary**](#summary) + + + +### **Proxy Server** + +***Every web request which is sent from the client to a web server goes through some type of proxy server.*** A proxy server acts as a gateway between client *(you)* and the internet and separates end-users from the websites you browse. It replaces the source IP address of the web request with the proxy server's IP address and then forwards it to the web server. The web server is unaware of the client, it only sees the proxy server. + + +![Proxy Server Description](https://github.com/ebrahimbharmal007/my-images/blob/master/proxyserver_example.png) +> NOTE: This is not an accurate description rather just an illustration. + +Proxy servers serve as a single point of control making it easier to enforce security policies. It also provides caching mechanism which stores the requested web pages on the proxy server to improve performance. If the requested web-page is available in cache memory then instead of forwarding the request to the web-server it will send the cached webpage back to the client. This **saves big companies thousands of dollars** by reducing load on their servers as their website is visited by millions of users every day. + +### **Forward Proxy Server** + +A forward proxy is generally implemented on the client side and **sits in front of multiple clients** or client sources. Forward proxy servers are mainly used by companies to **manage internet usage** of their employees and **restrict content**. It is also used as a **firewall** to secure company's network by blocking any request which would pose threat to the companies's network. Proxy servers are also used to **bypass geo-restriction** and browse content which might be blocked in user's country. It enables users to **browse anonymously**, as the proxy server masks their details from the website's servers. + +![Forward Proxy Description](https://github.com/ebrahimbharmal007/my-images/blob/master/forward_proxy.png) +> NOTE: This is not an accurate description rather just an illustration + +### **Reverse Proxy Server** + +Reverse proxy servers are implemented on the **server side** instead of the client side. It **sits in front of multiple webservers** and manages the incoming requests by forwarding them to the web servers. It provides anonymity for the **back-end web servers and not the client**. Reverse proxy servers are generally used to perform tasks such as **authentication, content caching, and encryption/decryption** on behalf of the web server. These tasks would **hog CPU cycles** on the web server and degrade performance of the website by introducing high amount of delay in loading the webpage. Reverse proxies are also used as **load balancers** to distribute the incoming traffic efficiently among the web servers but it is **not optimized** for this task. In essence, reverse proxy server is a gateway to a web-server or group of web-servers. + +![Reverse Proxy Description](https://github.com/ebrahimbharmal007/my-images/blob/master/reverse_proxy.png) +> NOTE: This is not an accurate description rather just an illustration. Red lines represent server's response and black lines represent initial request from client(s). + +### **Summary** + +A proxy server acts as a gateway between client *(you)* and the internet and separates end-users from the websites you browse. ***The position of the proxy server on the network determines whether it is a forward or a reverse proxy server***. Forward proxy is implemented on the client side and **sits in front of multiple clients** or client sources and forwards requests to the web server. Reverse proxy servers are implemented on the **server side** it **sits in front of multiple webservers** and manages the incoming requests by forwarding them to the web servers. + +If all this was too much to take in, I have a simple analogy for you. + +At a restaurant the waiter/waitress takes your order and gives it to the kitchen head chef. The head chef then calls out the order and assigns tasks to everyone in the kitchen. + +In this analogy: + +* **You are the client** +* **Your order is the web request** +* **Waiter/Waitress is your forward proxy server** +* **Kitchen head chef is the reverse proxy server** +* **Other chefs working in the kitchen are the web servers** diff --git a/public/authors/ebrahimbharmal007.png b/public/authors/ebrahimbharmal007.png new file mode 100644 index 0000000000000000000000000000000000000000..148e9f2be1e026b311a6a097bc3d7e0244df1367 GIT binary patch literal 26958 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�W^^5T-N>jA?Mq9|wNObF8Nm^ETFIa51JMwnNdCu9kqj<;iU`5qbSXYQ1F3DV)%uqr0l6D;)9H_hSJU`v=_{F94v}pT% zA>qB=O6!%5;i#OO-HEl9rm9)CjkHtfV`30sJgPXOn-~E|330-rEk>F4(sN^&+VW&0 z1=n_R0n|#SsWY#Z#^I`}SuR>Rd>DmQr9;e5qQ1t6jEi;(NkX43+9}7RndhbmOzWLx z`e3TWY>gmEQ?&N<#VO|(JC^M!uid%Dc6-jXbq&REa(=Rcl~m#2@QCMU8+>!hE3e+-`1TEHKr$7%7@Tp`b&c~DYYH(3Hr->scznVq51!F3 zTDmcbG-}C8G}gj+o+vMQE;blEhAc&I>u?TiRnLX!oReU(Da{3af&Y-#cVZeTQkRS| zVtl2yR64s<%Vq}VvsL}PC>enuPg0o7xzLXT>(zo3BV!!#6PRv{)k^;aJ27)wOEHYY zp5rRL1*mE2vRQI9E%*35MgNHP;VU^!>;;UVlX#eciBFtk@1C$A@b%wu7|5xxwg*(kVMu)T z`Ir3bAAiLC$Itn_-+Y%(AHHDQU4rI~K{W%dNlIxErlGhWEnA9f!#Yb-d)CVqRL5Y} z-Zs+iE~;IEK|AM&G0wPm=)1XPUdn?h`;tZN`TgH~hwpyt>-4Kvxc3MD zQh<;c=*N-TR~#&tb8S|;&$aaBp(L%-3fSIi@2a+5;Zzqv8t?Yq(<1Z~CHPa!b}9g7 z?b(#3XDzK|txx*B>hmNoGt0pmqgsL}FU#Vmd{R_{wYolYS+qU9l)1yJX&Wv#8?GN6 z;QdP5@U$;8BZ$Om#jxvmadO6TQE|9jaC&w^3<2v~)xOEvm?Q?lSxd;O;cg5u39W)$ z2r10Ukg34YwHv(s_PhM@i(m4!Yil9EtAwT}`6Y9njGQ<#AwGF#nk1d(+z4!t2#rO|hc+9)*jzN+bO>xz(Mt*WXbg$PZpYoGB` zRGKyPm-5V>9wOpP@+B+hxp{QJjpHK@)(f0HD6qzx6hEUVEF5*2k=Nm%MhoV)?DF@%iJI z+<*R(lng#6V&C!V@rv)g`5Ld^I_A!e1FE{>@Rhgu+V_8(J|w9W`eD=tR-@daKul6am}EqA9@z~eZ-3|e z_{ExU{^q~K&;Hrp9z@XuK-8X5yl-LUO;`>MnZcn~*htDEoLeQxr9??mf$>&QpMtheij$|VDp4e%2$L@->|Xj>nRuYYWXK^9 zW0df>NU0@j$`Hm#*9~$?HGs+my1r+zY*{Wv5>z%pnBKW$oU^PC4wZ8#XhuqsKjtKz zS{V_(u*OQ+Nqx#N1h%8$)~(kW`<^>*f1hvu?%$#tGmR0*?bhJ|U%z?GTeq+A)+^U} z_4=BlWlil3!5{GbfA@b(y*k2Lc=y}y(hZR(XB#coWri`Tsz{mhZw6I*b{LiOv2)PmG)kU0w<#xL zN>lAWtI~#;@JV37luX++D#9eLRU~7QNU-HA!b-lvSck7FQJ8Wv(LhA;B_f{8SJTKT z&bg2hT<&&UbUV5b>Bh*A662^h7bsa8P0zkmLTw8JL*@s4T#ATc;a2wY@uyQxei?Ju0Yzid0!I4Y)=5pOdQLWAuZx%{gO;WQK9%{==u-x_N^tCl<8gPpgVeKhO=4i`~F>Ostk` z>ZTShxUqyB`R-r&?+_CF=pX$*I9@oGtuO~_@2~}Wv*54)t^bh2SKcCp9(+Y8aR1?b zP3kSXA@k+aGgfUy1+14|bn8-*#NI$Z4l_$Hgh18Q09owL~$h@1FFPm`Um>3j4r0{f?%HGFcXKn9mbC%rNsyO3oCmupg{f zQc21CaTHBmb9B(swlz6P@@g&QA&KgLjM7G)v>l-oF{d$;%P5^*3UC#q_3oWFUt`<# z(idqG+aa;J9N6^(VCj2lPVKs$F(%q9phm$HW8^pg`hS=8@hyJx&;C9xZCTb8DP(%P z}xXF%)u1c;^{n;pwB7)ZTOZ+LD{4!ckZ?mA2B0&rDHR z0tKWaydTK3$bO!4%!x-_kbE*_(LlO7z9VZBP)=FX8KHyBU=Gr8z#sW>k}lk%McDQA36VZL>xc;UXv+T$F=QRFvUrz({cYE7c2*vTSLpp?>-;A{oQ zjY-rft;zGhFPGw%&WFg$&A?^|Y=%L!3&uc7!f}xnb}It_oJ7ahZ`>w~QF*n@3t@dl z-*-HG@|5rX&HsRVAO4iT`rrH89NvCaf;i{3+gPeIU)+7b^B2!CR@%rX>S0}ZYH#R= zp3W3vk)Gs>G2o10;SD&?fy*o!p?`#!C|1(0l%~l`h7toQc%Y@*b#i#sEm;L?QW2tb z%1KCd3X?ix_1}b_H3lKaX#k82t}$3FTEWCl`J^!_$w`@6kFyqzhRW7j+NKs=13Sqa zD%&i}L;zu^a6ci+ad7<)Vu9N_4Bil&)V+?I#j~;J)M7X=78FZ@kASD2$YO zCNqGB*fKIAl8V)OpU?~wlP;W|l&N7v;jiO^B~M>m5MpAHGJSyi=RN0_1HXLm9>$3H zFq&VHr`9!XSkjx4lKk6l*O5!%)mL97WohEA>za}Zi$%lV`9J)h_`CnN|11CBKmAiS zXQ%Wr5Obzptob|t+y6B&Fh|}g!UrGz60u5R(ww4CQCly(b5yP&Q5fQg-5Hi`g*CE9 zn^^cq|LRXzG!1KCxUpVpzerJORSS&-V*AuYZsi2P=bWTUgPkf~(nwW##xN?RxUX8J z7%`Q{R~2pB>SoG%#hCB~LmZQcD5z9R(L&=KYFnXg^kX1IRqFB{Q_GtOQWP;UkyF%G zKskZ6v-CsYM;|?4D2}#~xs$O(k%2*SR8tBTM>3+2_58(imdiC&RWS@w^ftzFbac#O zy<*pQTsuC(REAGJ`GlYS^yhrzjn~<9JC1JLrVb-t``WkofBnOM&iB6aP5$Hm>Hmb? z&XF9PzdYytU;dP~t%+IYY@sGtm;;V6Mk?t8VvLEQ40sDdN|amVoFx@_@bZ%TPfobD z^xQnCCGPNk4pxS4P`NnGxwZYkqPp{1Ey+0%Vx*zbGFT-XBs2AeN?KDebh|;NUFAQ) zjFG};24$&FS3%L*yL(0QyJTtY6E06Py#RNgzTnx#Ru!(q zl$M+^C1Oj)*a&p4y=_%7>p`-!8da=e9OXWp4>e-7k{#XC$f5zYW z&;E1XeDw~OmoItkt?%*t@vlkYjQ{`mPyIfwpB<2jp(S<-Lkct%9 zU!I<^*>!A(ftD37SCR1RFPLZgnm1rh)U5#ihf=Z>b zZNC_Luv9E`+FhR7A-;;NY%VY6plH_x*6VAeVmN(ysyJ`r;^h|)S$$NkL9^d-j5BTJhkHnm*5@jiw!^1VpRjYlFvZ$4FqHp-N-}X&hC_OSwL3<|)!e=B*IA z>blY%*bLTV9Q2#r{P{{wG;J%A!ox7o)Izcq)#WMp(TYmiFZ8v8mKax38P`RQieWmS za>9GfN!l1rPR}^M+)_7<_(lz`to3t5CsDe*xlVckO+pD%PS~WPsXNqS8`iB=Q&{t+O;uiz#Q~n>D&ErC=)~;zQ#Q6_qeE z|0F9NVvKo>x!Gl2ja99EI0Zgrh%eu(@;B47z155>aEO-!>B$}q|C-~AjVO@ zILH(S2}V+aoW;as{kNPGmz#5`^XUTj{Xnw>)x`JFFZIRTLkE*ViL_s8QlD0niw}LGx zv1k{7B?g^(Q$!R((gGD~C{t)ZkpL`N=T}a{X(R~}lbo^u)2A03f$?${7I~R`PauSm zzV8_Zxd~FCm=bjvA}-C#nPNnmxbHiG3bW|xY%Vucw&HNT;_v-8e;-pFak)KV95c(~ zSNZ(zJrSdKl8-)kaGzbb6)`F^bv`qnatz|vaC6(ceofNU@LI(6gpe49L2h0z5~XLC z`x)NWhxNcs%E*4RRLWC+(gl%VJK8i&G9BHvkq!<`_=}?=<0{}K9 zIeock-@FmN&$N-HNDec9BhA&$H#^R^J3(SJ9}N>OJB;$@6gb=Lq=c1KCOb&K;uNCG z46IJ)kPYMcn!;m^Wf%f|Kd?SH;Daw7^N;_Cu#+df9fd3VVZd6c7s`UEWeI_p##!(xD!AScgM23EIlJ77 zW{+GM&Ed^ld736W$YxeFwR8|L$?c$e2TZq4*?kJpq$H95#3znX;+hZwHlcGQV-&|5 z0{z%a{-TtHq-?dE5+O=$@6pqjeDLuXbX`wQkutFcVq&}9%8eTXXPd1CIC480|O>n3&>GJQX& z;F7eicl}7A5aLKe4)J!oRrX%iU{e7Tt>H>6n`!ELo}PaiA1K zNTNU%a>jaJ6IDVjXBm7J0pTbf*R#~^vTo!Uf{e*1g>g*MJd|XR=oq9hnkH?!7}#|k z;~2Qu4P0z@3e1nQtZ5Cf5V-Z~_t|!VfAIhQe-d)y?!C`>@$5O?*4W~tD4=kdL1uf6 zW6)AnA|;`{j6+bSgccmKn8~i|q+!^3a+cE6mbfetfF~vDw7Mi8h zhjZT3H1(pYqM6+zb6N;V1%eXbu!fimDT5t{kzL=h9S62Uk2RLcdNLA*XFWv%D;Z+S zjImJHHSc`mbr!7?smx+jD?gKIiDQZ{e+HeQ=#|I48xP4?p^pC(j=9@y8#KbHdna zreO&6NWUK{^WtmKNGXvqj5>f$nT|-5DxWoLABdsvIu`AMl(V$l8JRpGYykDY1s%Yn z0d3B6ebW1C#$RRP(w@Cx5Uw&th+d1;3hSJ5fuvAYB;b-$()9z~FtAuOD&AC>Mlht9 z2r0^(5?%atyI@u82u4YiXevL87L{Ch`r=F~a#oNHD5MnRzbquJq7gC0kis;%PlB*m z3S-I)#b~r!*!4YQkf^v)v-7i``~lm|2Im&E?Sk#eeGaeRX6P;9DP61j}^O%C)BGWnuFWCeDG^-z4;qF`rk&2`YLDRB9$1@V-rtXLBOe!JLy6!X|UoKaaoawq9 z6cOT($wdfFMCWqqxK={Ss@W^3m=MQ`1Tjv!>vD>MrWs`Jnbo=_GW=j1CGf1Q3>m1M z!-gQ-6srVZL1|RhBkDT!&%MTX9moQXwl#Jzi8;H!#K41Krb;r$P>cFE9PLJAmb8M`gp z%X8}GikuTCFQ1EeKU1m^2{B18C3c3(W=2IyqGFw=gQv1)MJgMT(qxv)B^0>0xX|f; zf(p%%j42qWL^u_C8iRrdipi!do2z3$rHRXk`iiqEb0@DTem>`UB!)0KRT{P%0)5xB z+iquNs8pm@IrRtb1&V~`w`?jFiyE2nl{F}kX+&6&4SR8RPSDh*YHH!Qq&x>fSEJgQ z_#6W%jtqS#Q}9aEVQHe36N~)$-u=(zJt@3+{(|%K6Kv%;fBpb#iulRzGXGjzA zikvgsZbvtaj6tUS35h$aGMly%IICkT#dS>Jg^O!|NK2}z45LzHl-j+DU*4>lJ07p)0s5dEzI#K|K&6^N$Ql)? zHd$i~wQBkdgUmOcqr1uMlp-BR1%@H=^yQh5b<6Z!_c>t6iI6hS&o=_=CBZb;2kV(q zBE!Pd9B^Rm+;B8SbW>hRj+)R=WAjN zG|M&p7@{Wz_nJ>k;!PgKWI7Sgl0rWgI84 zKyq+v4Ax5%@1#4JlzwB4mo|0^iHWN`Nv4bDV42dBtkUY5(ke-aECnt=`OPP2=C1tv9Ag4q(CeAKjzRy93C7<{Vq?D zUYuzn#YlyJYJr>ZS_#7RD=UBW{QQLH&!6I~<1P;*eSlNYjZDN?6#Um_pFHKs@>~JMTe&?Nl~&$M5ElZ4Obn56 zjB`82{JzS0oeBtExkyQw?9<^fNaxXHRjjXsBV{L|HCW?u)?>S|$Cx7B&}3w`bDlS} zFrgK)=uPGM<{Pgm<)M(H2o_FJsxb%wY8*wlNX_Qv@={Zd$p_1GV^op;BBOw(&6E_N z%+l6mLn@+)&DCYH3+9wRU##wC>DxTn1o&DXzEsSL}M6Kv!Q7kQh|PqlW>U~3SG%O zMKWoWs*I)>BBfU7`T=X40tGsqLODVp6w92XUuPPtEUBNtIxD7awOF#Kh3YY#*{eQn z7)B;_%gQ;%6gj=zaB{h&ALBe`!ce%_bUMv-uUR{eLQtx8#>Yh7+M5^imH&V_;++S$ zOejsteEH?)4Bd`L4?oBHnyPAe`RG%Q?|h4kmk-HlpgF$5=IkNP8?6&e0o#CIyq1Q@0FF7!B$W!cgs~^*k)~a;TwP~-`dDa`6AFSXoH6oRyM8BF=tN~KLe@^XFbt7# z2n_uwL0gLKx*gVgs=6WS0p9I)IU|+Ka=n6`lz%ECEIaW|mSGI?!4xXAPTB@AXthSd?G)Y2IxyiUo|6qL=}+|DEg-i4mpSCk|g z>M=*G&HJQZ04~OHV2pt=B-n1KtdWh2Bc&wP>jMrB4(ax;#LaSRxf*lsr>+~kG8Jem9H zJ*RXh7lGTfl8TPahx2tD1j6xMke!(yB%7&5>R6t1xZ>g@LtATY`0r=BO>Ue z`aD$L?_o_fu~J@(3dYMNiQ3F-ouzU*{@Cuj?VL08eJ6%j&FoZ#(18e3EidA|$fAge z&@N)dOgFoZYK)*L{>jBT2g{b`%518aXBTu))Jt}|j>Td@U1d9qrRo|sBja{~kfGLG;*K7Ky9~dE5`_;jrB&E)>S}lY@SJG7H zpN^{Lm;>DqRLd??`3i5P=R`o}#LJ6I4H(eAk;F9cCad3ZPKJVqaUj<&QU3oD$wnV32zqVlA7? zt+d%Go8PI5bS^mEE6rW%aE z(i0vUr8Sm)2PBvH7v5fjlYn%ppc4qfyE5Jt> z2a!52(pF%#v8m)pDuIwjyz{JMKv% zEVOW~nugv>@ji>bf`IW;G-0r>ef_Pu*)x?g-v(2_!I;$SEKi=Oj~j)P^x7*#sV z8ceows*BDV%lpAM6Fdfj+)z~_pr{kuOEDPZvA)7($stXSG_GMR6VpVHW^WzfFlMBx zt`WkP-N_@a-+GM{HrhC>`LTiBwv))!?~CtN=_6(eDg^bWX#Y%zkzpLLWj|kZ97V*! z`wDM+k^ZiPOg8z%QZmLhggEROd-^`sIL2Yb`GToyw%e_=Fjx_zkmowk;M3}ym8_aW ziA*s?%)I&q``%A}JV#b3PwEF$Rb-ikFhfMoMbd$*ioTCefsb)tSxKL&+nU72E9# zO0oEAO}9IhI9w|r2GrCmI%RcsiwqCBg0vJO6IVEqv&>zQxuH&zd|AMzs&(){VHkRL z-A)PwS%M>HoN8ssL7J*iVu^%8BZ04qe5lTkH2+FX(@z?F%H)YtzFHI#)!U9W*e~zi zQ^Y}QmnrK88U>~%-V3x%#r4Aj+PY%b4Lm=+U>F03t0i$5lv7jGKg^v;GaidkVWgtG z6=StXtc^E037IR!IbAY}kjUh~NM@p625gELEi8lT_N7RSBjj-p;%ohK7zF&6-nW7R zg-ldXN}}We(n!vun11!^(h)7+OZ-|=KPDRTISJDsgrNN*a(E^`ITe$Qf+17T;_Y5y zrj)FlV52-DRdJaaU_}QA>1WVEHdD)=fA;cJ+6Cs(P@cMq3_<#VMfgu%Y}wY-zUK6B z&C`=J`XN%+LG){ep380^lc~Lc(jqkEFlj#zB&DRT|$V6)9%=zSqFU$xt@c$|)t0i3mNl zV6aRbTq%q1%caObRxPrdt9bFG2apTHIDoaHyfO^}WqFXBfSsog*?W3DraVdWf&wjFf-CL-7|shtol~LI>pZm6Te8_n={5+ zt$s}Fqxo~5R8=HTwARv(f!z>@S=#y=TalCK{Y)lYTK8oBW-ib)4X@m;IXqafUbe)b zg?%H6X0GyVhfd70`gUJ=)oUo&RqGkYI7_CH#muUzwKBlKn8M489iKgT&Wp24tT9|a zT(Vv?G~RJzy~bgPF$u9NXBk$es0_g6WDsOT1ioWmg-eIk@7dDLy=#FD22h~aBqbcAN>&&K1z-w)WRUa3lf~%7+ z)gOb^oYP~F-1Dj==`f5WZQ1bF;?2YZ6j-v9tV%5c(3F&DYtL%6z$$QF*YZ4xxSePq z7&(N_NiS$7gGt!q!!?r#qPJ2*tGyRFF%`*oQ+JnloL_Euadt_;(0I%B^@7)KUgOnk zhtfrzkizmXP=Z9KDJ6Eh9bpuuNALXXVenGHKf5og)mr_(fwVQh?h3l&k+=eO=CkoRkAK-6Xz3C7IZS(>yd|oXr1HlbEs) z-vnI~_MBrXW(p4LRsIE}ady30v0OHix5tdLp1NtZZw6fD=76Xm5~fz?U0Vxw!V)WI z=g4&u@SD_;t&v$&*N)b_dg~aA6j4E(e^Ij2E@oYitb7=St%k_Z3B_WXn^LA^UcXd| zqby)CUy++eWmg~!9VQn@ksNxA^`vCzwr3n2-IRu(oGIC`+inSchcOc7%WQ@M zsu5y}fo!ypT;|PH1Fw;%Dl%WG?~2aeAT>+{P>gjrFGG4#E*u@KY1@WnE0g|QC4jwj zR(re^jfV-#HDux_^5)H=p=}%GJqg@MfuZYUTAwqtbxrL&4w=5-r*VfEqad(R1&qn3 zpgM1caqM{W)myZ6!;|Nym`PBf^2Au^hbZWc7pD1SGN;0?jFWI=BPTtZLgPgTeT;!B z7qZLRDwtF#Sg0GI6nrZ~PhGXtW?dPryxZ>Z^^zDnC~G8mPV9EwjJ_BO6?yiTOu3(d zDWa8-pSh+wefEiYZraoQ~GoWVO^OLanTLewiPOg-()HPUcuFf3}% z?Q1JJAzm6lZOQaQrW;2Ymg1_ps5;R`oRhg8Si>;HStVn+Y{&`+mXs+@@=Fo+GfL>1 z%#(@?he8Ykhet=k<{SE%`)f?1Y8wiLZnL2j0pg)xP1ZncjI3a*B~r&8BECB-(bNjX#-^BYoFX-MEG|l1EB4s1mxR-b(Ks2g_F4CyZt2 zdtwO6#1qq6RhCT`WZsF+eyOW!mb&qka{{kvwCTK4sB9l;iL!bt5k)=Qi_(J47AHu2Ec@=>q!#%y7Kg6z@Vv2mSNa2WsIp5!4X|sQ{+H-U(t0t znzoUVPB}~6GwoO|Rur=0sXf+T?K?M$ND2REhRV>JIblUpFq8x^u-3?=+X>`X0i>KW zB{E~s)>#$#cY2%6e5h+{NZC?sq4kcUK~Ysz#3DVJAqJev33v<3Mux`;=pZ8h!#K5Q zc)@e43Q`ugm~$Y8I4AMwX%w@gA97lcoN2wqV_0a1)70O8u^Y5xlf{3i9h=5SI4^zw zlUV{ixw_8AFthbi5kx2yLo|+po83Updq`}%+0fPvi)JBgfWF5W$RV)1yqLwRfW0Pc z7R4|D;L)gZLVBf!D%y=gREsJjcd%YEDP;S~(=J+?MMG6rIA2LuR+gG(41r=~)W@P- zNIlX!31FO+mI5o4TL*Xwu1KHeFa~i4mD99jf4E96+Ww)L$KJu?D}(>{|GmG-q7q1I zv)y5^qDX~dv1sK5;>b6?{tAn_!8J99))GtNvg^qODw8?e?Z{RVTVpLHiLgRU@?W_E z5=b;VN*T>sdgaOphz}0MCUYV?#a`vEs1KFb8v2gic0;pRO2co-IPdAUGRr)MV|BhhhH%M{*8+f^Fp_kqdW z-KKeEfw`)q55ZZ>s2y)HMC@!u<`cm%^jusRmdhpWVolR5gwS22Z*?4{tzb-rda>Y* zH`g>yluZ_kCA)qgt4@$JhB%HiZ8J}f7rmrHT{qY)3SKE^tZ!t5F`2IKWM+#s)V8J{ z2mJr;zxcm^6^g^*a>1>`HEpBGurU}5+b(gw>FGvMtUBLru?ALc!{NaagXI?=d@UAS^?dE_4$`Pd3gqkT~00LDJ9L#M5>}#ZG*$i=+UIfdU0_+ z-}s^LWd?THo1hunggKZmrPSaSU9$ag(N9DEq+B zwhf!jmN#C%!~f`S|1FB~lsE{AqXe!A750i<`&u-Jikf}zCH1bSx}!@#bK)J-LRX*Y1b9XZ`}Z2N(64D=~#uSt?2HACX*G8V)L@H$x@VNm~Geb`GXy~Sgg0oZIv2j&X!Un0k_r?qAUT(f_dxc!-xSy zSI^89`}t?`HKl+xbL5z{;xJV+=9WEeDW4FjY4byhoL^o_p`c_cS4nDBV7uLrQsVaQ zThbAx!AdUh;Nc^F`HNqWWXL*rzScKnqN*FoCy>V!H781IVL|pj-xOGa-lfHXUVl^90x8hFU6WU zaTPHH?mj%>pa0=67{-wl18rMt+x!Gdh|PBv8efy9ijx8n&Ked?gLB}#Q6_|)t%;Nn zRX^Vu{NZW=M(1zf)R#;qM-pGMbQlkzXFCM?KCtV0`q3~1xq-(=*Q8IyFpmbzN!2il zr9{yxC%M7l=EV0NzG&5liPjCCGs6K&JX6^uzqEQKUrP$?Jl zM)TDlYxeIi6b{i$n6w6_&Ab{xmf4R>;a-N(Sa!Rew#JK&&&!KT-uv}kDAIFz^LWj& zmEwI&)2tZ7s%HW)gEft7wA}zok=b42Fp55V7%)Y& z6H=C(Y}q#KhA_!$;E}0!#!ph%1@9&Jv6JZ0mF=ipMRG}IuNd*ABHCzlBA+Ds6all# zgsdw#;OB1SsbDT0YclfDUO{s7rxZ0129p&;X&yqk}aeiB3>XnYt3!l{2I7F9*# z9J?&y`?E;{)$q#-r4@`RUkPINTT*6tZ_;J(x*+o-ue4cCK5{w_6BBN_wLvYy#2(Cu zLKbS$$kQL?VAXZaV$sY|d&wdQH5JsIa~!T$dI*a+PHV|n>eiF3q&$_gqy)ue#vF-J zCf_zyg=?Xy9JV;B%CTrI-g@4C?KUsYE;+f}vg-n42>5Bj5T+2aG`3;|9x_HIn3p7) z1|gMMR3RjB^dS|-F=B^-v{)+0Ed^kaA`7!G3Yz8^V6|vu(Q~ID!$id|3M@+vRMHF; zVN%~_{=#K(c3*z7*6ueuPm%1TDYCznbK?y{u#!nXd)lKhQcS-3UI3G9tJRWRvygIL z&< z4_A1TsVd0D(G3BH#KmRD+2sz5AWwdxPZ*4#C&thXBYhr7QS7?_%8{aTH^MkdB_su& zo?e3U#2~U`ZBtRo#3&dfS94ST6r{UAxuDx&(Eblu_{ruKB*2-J!@QT#R9A20L^3p5 zbDe#gnIE)APRjm}Oq7SY1;WVGqo6H#PHzv!2=k!qabY=a`*9TGSQv(pqoX6Nrc1u) zc;TEmTs8cqZ@(!F2UjbVGLTDQy=+-8YpSZ^{CrC+h4W3vW=ISnQdzjz?ifc;Hw;`q zSm2yYMRXVeA&4v*$H8hXdb4$_@?IGk(v~vo#X?dD9p50+>m&!Nou||_p$Uv(q^{1v z2ytrY2Xc*&1S0i#M4rrBav-IE%Gehrv`c1~lEQIftLkrEK0; zL>Z^`*VGHUH_>9!1-=UkBZ3gyjN1o*Unxdgji{}iA;0tUbC$~`P1DQ)m^Gfh>oGaa zRj2v;IZv%QwG`x~nBBBBt1Ku{h=I1QSS^>*?oQ!gxyE`aQ;J-i;pk|A!BAOgrT72j z4}MBhHB{cv4ief~wtXDGWoWD$<=UKj&nZ_8XPHbpSii3~jN@)aLD{k`b+ zPaQOd{p9*wRJKJMd`3;urwM#=o3({qsT=@t;^A6px0~c-`mtl_E9%O#Tu3j;G(2`P zI1b*-L zeuqE$^Y?jvy1_dI1dN|e;N+{k_l)B}ReOwgT&>g#`%X4cphEMN_x{SybO^KvApn1w z!Se!N>C_TUTh&sy`Z6VB@bllDpXe;3FdMv=CZch`tZJHt%rvQi+EwbWMdtvZtvzjh zpc1S-z7oG&xr#+o3ou_*T9FdiwP@g$G#_qUi}enFeC?PVqlm-1X+XH3KjS#cq;_NJ zf`t69UO%Goiu9zGlWic3+TpD95AQwGu3eicIn5l=FjsQ1Ib z!Y$^AcQR=cjnlEuC-)0~B??xTStdIR!Yt4ZH0#{#5<&`Jd7a55m+3&T&pGFyYo?N@ zu5Qj;US5!^n)g5c6*&$Rrl~^EHZ=xx4r#^nlXGI0##|^Y7XmH_-`G)G!`pA(;r@ds zv~5EOBa60Sxe&h_W5zem(}h4&)wH#v_7&b$WDOW51{ucChlsB$7R`e7D&m4L->ns* zQO+_R(PZK541?4mMMYUUq$gr;Ka8TEnlmmlo1IdaC#7QwV+?}4#6T6K-1KkUy9s~2 zLK6GRM(%e-kQcT3S=-I6VzU%xVWv{hv}n3TdA8goO9{<@PLCIaYWj{sGm-Bzc7dbS zf{-er){KoQBBPE78awZ(ni^ZcClMO1YpImD?7&$TmB*PP-D%e0s)}~esuqPzBJ@Yg z1tklLQdb^l9joPn5C(Ep5u>0mRaHaTkc%i|)XsCc3wsWX3Or4;{fcHjg~Gp)FX1as z3Ptv#)&Rs_p;yZ~f5{6ly`{A>R}I@=Aqd zB5O_V5RNi5|r7jS?2q`w23omN%v&*`sSi>*|Y0hdJ zQGqrx-D$aKXzPlDWkXXp7~8OD8X7O+i%nf)m&-;9$cvWs;Q<+tHc1sSGNQxkoX1%C zV3}PgZ1LqeTF1OvjKT#K~6loMPh8a#nb45{^Rw!^< zSY2GnGwr<5UjZ4el&@xS#WE?IC^l=*2tLi+rOEVPm6_ScS6BS=RSQs1vny?UhsQ@a zYiOKsohn~ZInT0{@x;!_#@9_nQ+XCmC535YsH<8x%+pjAl^4{ksU5Aawb{uko6_Pb z1!o=GZKo-U_z>qr5^Nk3t`xknViKHa>I^}|f$h|vX)F`ROm18j(ITZ!Ok#hvx2#tS z9zA->$=SJ9GA0xzD&9Joth@(o^e~KJl=50#&%P?>LdFVto3AeRerTNn1e$+Z=d~=i zk8$_iX+{GX)hW6f1DPpr)lIV+culhBrObG*w~nR~>Z(Ysc`mvglOm-&OddBOMmcA) z&9l&!wT2KQwRcdaDY?R)th@*%)@@BU4EU^x^KK`sfkiFRqs;Aah%{$Ls{KOja!SLD zDxYbcBjz&S3R#GKpT#8UO)ea-SJai`;fqrd!?;5207M`H@uAiloYwb>ZfGi*eiWGt zU&)5fgy}N1neSimYE*4sOKNHJ136}O& zN~JN1hzHAjWqTz}kPYpIo+@j&u7O7kLHqyxY)+@VvKXUdeD}K|6B{DdI@-lTfsv_N zBoC6PHGTDJvJbG#BsyhfR?AG?G=--2`-UT96}4fG(5G=3g{-$yHqmIy`_#K>3^d+J lD~6p~HuMk~?Rm-Y{{xmc36ypw#gPC2002ovPDHLkV1lnOgN6VA literal 0 HcmV?d00001