From 0634a6d0e240c9fe459cfb66ee72e2415782bdec Mon Sep 17 00:00:00 2001 From: Moritz Martinius Date: Mon, 14 Mar 2022 08:47:38 +0100 Subject: [PATCH] add pipeline graph --- pipeline/pipeline.dot | 193 ++++++++++++++++++++++++++++++++++++++++++ pipeline/pipeline.pdf | Bin 0 -> 22180 bytes 2 files changed, 193 insertions(+) create mode 100644 pipeline/pipeline.dot create mode 100644 pipeline/pipeline.pdf diff --git a/pipeline/pipeline.dot b/pipeline/pipeline.dot new file mode 100644 index 0000000..a7d9f1d --- /dev/null +++ b/pipeline/pipeline.dot @@ -0,0 +1,193 @@ +digraph pipeline { + rankdir=LR; + fontname="sans"; + fontsize="10"; + labelloc=t; + nodesep=.1; + ranksep=.2; + label="\npeekpipeline\n[0]"; + node [style="filled,rounded", shape=box, fontsize="9", fontname="sans", margin="0.0,0.0"]; + edge [labelfontsize="6", fontsize="9", fontname="monospace"]; + + legend [ + pos="0,0!", + margin="0.05,0.05", + style="filled", + label="Legend\lElement-States: [~] void-pending, [0] null, [-] ready, [=] paused, [>] playing\lPad-Activation: [-] none, [>] push, [<] pull\lPad-Flags: [b]locked, [f]lushing, [b]locking, [E]OS; upper-case is set\lPad-Task: [T] has started task, [t] has paused task\l", + ]; + subgraph cluster_videosink_0x55ef7a30c020 { + fontname="Bitstream Vera Sans"; + fontsize="8"; + style="filled,rounded"; + color=black; + label="GstAutoVideoSink\nvideosink\n[0]\nfilter-caps=video/x-raw"; + subgraph cluster_videosink_0x55ef7a30c020_sink { + label=""; + style="invis"; + _proxypad1_0x55ef7a2fe320 [color=black, fillcolor="#ddddff", label="proxypad1\n[-][bfb]", height="0.2", style="filled,solid"]; + videosink_0x55ef7a30c020_sink_0x55ef7a2fa2c0 -> _proxypad1_0x55ef7a2fe320 [style=dashed, minlen=0] + videosink_0x55ef7a30c020_sink_0x55ef7a2fa2c0 [color=black, fillcolor="#ddddff", label="sink\n[-][bFb]", height="0.2", style="filled,solid"]; + } + + fillcolor="#ffffff"; + subgraph cluster_fake_video_sink_0x55ef7a30e020 { + fontname="Bitstream Vera Sans"; + fontsize="8"; + style="filled,rounded"; + color=black; + label="GstFakeSink\nfake-video-sink\n[0]"; + subgraph cluster_fake_video_sink_0x55ef7a30e020_sink { + label=""; + style="invis"; + fake_video_sink_0x55ef7a30e020_sink_0x55ef7a2e95a0 [color=black, fillcolor="#aaaaff", label="sink\n[-][bFb]", height="0.2", style="filled,solid"]; + } + + fillcolor="#aaaaff"; + } + + _proxypad1_0x55ef7a2fe320 -> fake_video_sink_0x55ef7a30e020_sink_0x55ef7a2e95a0 [label="ANY"] + } + + subgraph cluster_appsink_0x55ef7a309fa0 { + fontname="Bitstream Vera Sans"; + fontsize="8"; + style="filled,rounded"; + color=black; + label="GstAppSink\nappsink\n[0]\ncaps=video/x-raw\nemit-signals=TRUE"; + subgraph cluster_appsink_0x55ef7a309fa0_sink { + label=""; + style="invis"; + appsink_0x55ef7a309fa0_sink_0x55ef7a2e9350 [color=black, fillcolor="#aaaaff", label="sink\n[-][bFb]", height="0.2", style="filled,solid"]; + } + + fillcolor="#aaaaff"; + } + + subgraph cluster_videoqueue_0x55ef7a3044a0 { + fontname="Bitstream Vera Sans"; + fontsize="8"; + style="filled,rounded"; + color=black; + label="GstQueue\nvideoqueue\n[0]"; + subgraph cluster_videoqueue_0x55ef7a3044a0_sink { + label=""; + style="invis"; + videoqueue_0x55ef7a3044a0_sink_0x55ef7a2e8eb0 [color=black, fillcolor="#aaaaff", label="sink\n[-][bFb]", height="0.2", style="filled,solid"]; + } + + subgraph cluster_videoqueue_0x55ef7a3044a0_src { + label=""; + style="invis"; + videoqueue_0x55ef7a3044a0_src_0x55ef7a2e9100 [color=black, fillcolor="#ffaaaa", label="src\n[-][bFb]", height="0.2", style="filled,solid"]; + } + + videoqueue_0x55ef7a3044a0_sink_0x55ef7a2e8eb0 -> videoqueue_0x55ef7a3044a0_src_0x55ef7a2e9100 [style="invis"]; + fillcolor="#aaffaa"; + } + + videoqueue_0x55ef7a3044a0_src_0x55ef7a2e9100 -> videosink_0x55ef7a30c020_sink_0x55ef7a2fa2c0 [label="ANY"] + subgraph cluster_appqueue_0x55ef7a3041a0 { + fontname="Bitstream Vera Sans"; + fontsize="8"; + style="filled,rounded"; + color=black; + label="GstQueue\nappqueue\n[0]"; + subgraph cluster_appqueue_0x55ef7a3041a0_sink { + label=""; + style="invis"; + appqueue_0x55ef7a3041a0_sink_0x55ef7a2e8a10 [color=black, fillcolor="#aaaaff", label="sink\n[-][bFb]", height="0.2", style="filled,solid"]; + } + + subgraph cluster_appqueue_0x55ef7a3041a0_src { + label=""; + style="invis"; + appqueue_0x55ef7a3041a0_src_0x55ef7a2e8c60 [color=black, fillcolor="#ffaaaa", label="src\n[-][bFb]", height="0.2", style="filled,solid"]; + } + + appqueue_0x55ef7a3041a0_sink_0x55ef7a2e8a10 -> appqueue_0x55ef7a3041a0_src_0x55ef7a2e8c60 [style="invis"]; + fillcolor="#aaffaa"; + } + + appqueue_0x55ef7a3041a0_src_0x55ef7a2e8c60 -> appsink_0x55ef7a309fa0_sink_0x55ef7a2e9350 [label="ANY"] + subgraph cluster_tee_0x55ef7a301000 { + fontname="Bitstream Vera Sans"; + fontsize="8"; + style="filled,rounded"; + color=black; + label="GstTee\ntee\n[0]\nnum-src-pads=2"; + subgraph cluster_tee_0x55ef7a301000_sink { + label=""; + style="invis"; + tee_0x55ef7a301000_sink_0x55ef7a2e87c0 [color=black, fillcolor="#aaaaff", label="sink\n[-][bFb]", height="0.2", style="filled,solid"]; + } + + subgraph cluster_tee_0x55ef7a301000_src { + label=""; + style="invis"; + tee_0x55ef7a301000_src_0_0x55ef7a2fe570 [color=black, fillcolor="#ffaaaa", label="src_0\n[-][bFb]", height="0.2", style="filled,dashed"]; + tee_0x55ef7a301000_src_1_0x55ef7a2fe7d0 [color=black, fillcolor="#ffaaaa", label="src_1\n[-][bFb]", height="0.2", style="filled,dashed"]; + } + + tee_0x55ef7a301000_sink_0x55ef7a2e87c0 -> tee_0x55ef7a301000_src_0_0x55ef7a2fe570 [style="invis"]; + fillcolor="#aaffaa"; + } + + tee_0x55ef7a301000_src_0_0x55ef7a2fe570 -> appqueue_0x55ef7a3041a0_sink_0x55ef7a2e8a10 [label="ANY"] + tee_0x55ef7a301000_src_1_0x55ef7a2fe7d0 -> videoqueue_0x55ef7a3044a0_sink_0x55ef7a2e8eb0 [label="ANY"] + subgraph cluster_decode_0x55ef7a2f20c0 { + fontname="Bitstream Vera Sans"; + fontsize="8"; + style="filled,rounded"; + color=black; + label="GstDecodeBin\ndecode\n[0]\ncaps=video/x-raw(ANY); audio/x-raw(ANY); text/x-raw(ANY); subpicture/x-dvd; subpictur…"; + subgraph cluster_decode_0x55ef7a2f20c0_sink { + label=""; + style="invis"; + _proxypad0_0x55ef7a2fe0c0 [color=black, fillcolor="#ddddff", label="proxypad0\n[>][bfb]", height="0.2", style="filled,solid"]; + decode_0x55ef7a2f20c0_sink_0x55ef7a2fa050 -> _proxypad0_0x55ef7a2fe0c0 [style=dashed, minlen=0] + decode_0x55ef7a2f20c0_sink_0x55ef7a2fa050 [color=black, fillcolor="#ddddff", label="sink\n[>][bfb]", height="0.2", style="filled,solid"]; + } + + fillcolor="#ffffff"; + subgraph cluster_typefind_0x55ef7a2f5060 { + fontname="Bitstream Vera Sans"; + fontsize="8"; + style="filled,rounded"; + color=black; + label="GstTypeFindElement\ntypefind\n[0]"; + subgraph cluster_typefind_0x55ef7a2f5060_sink { + label=""; + style="invis"; + typefind_0x55ef7a2f5060_sink_0x55ef7a2e8320 [color=black, fillcolor="#aaaaff", label="sink\n[-][bFb]", height="0.2", style="filled,solid"]; + } + + subgraph cluster_typefind_0x55ef7a2f5060_src { + label=""; + style="invis"; + typefind_0x55ef7a2f5060_src_0x55ef7a2e8570 [color=black, fillcolor="#ffaaaa", label="src\n[-][bFb]", height="0.2", style="filled,solid"]; + } + + typefind_0x55ef7a2f5060_sink_0x55ef7a2e8320 -> typefind_0x55ef7a2f5060_src_0x55ef7a2e8570 [style="invis"]; + fillcolor="#aaffaa"; + } + + _proxypad0_0x55ef7a2fe0c0 -> typefind_0x55ef7a2f5060_sink_0x55ef7a2e8320 [label="ANY"] + } + + subgraph cluster_src_0x55ef7a2e6110 { + fontname="Bitstream Vera Sans"; + fontsize="8"; + style="filled,rounded"; + color=black; + label="GstFileSrc\nsrc\n[0]\nlocation=\"/home/moritz/Downloads/Big_Buck_Bunny_1080_10s_10MB.mp4\""; + subgraph cluster_src_0x55ef7a2e6110_src { + label=""; + style="invis"; + src_0x55ef7a2e6110_src_0x55ef7a2e80d0 [color=black, fillcolor="#ffaaaa", label="src\n[-][bFb]", height="0.2", style="filled,solid"]; + } + + fillcolor="#ffaaaa"; + } + + src_0x55ef7a2e6110_src_0x55ef7a2e80d0 -> decode_0x55ef7a2f20c0_sink_0x55ef7a2fa050 [label="ANY"] +} diff --git a/pipeline/pipeline.pdf b/pipeline/pipeline.pdf new file mode 100644 index 0000000000000000000000000000000000000000..b1bc132df144eb899731983a5f83764c6ead3ebf GIT binary patch literal 22180 zcmd43by%FswmujF!2=<9u*Th?ad&sO;O>oEkl^kP!QI{60t9yp?(RB}efGKg+`0ER z^UPmEQ(aZ-TUE7ceO2Gn@9MXjSXNM&nx2Lkmbmt)>;aYuKnJkaGlS*i1kg$vS{Z{( z0L-rK+}yDCAUi`{OIYXBWpzvIr9PzRQ60X^ zNu*u52jOD|TL@Jb@ZdZty;|Pi7~Xd5^Wnt3au%e=0ngXmzlNjx-6qduKhO|#v)DJM z&Zngr8yh7UOZa-(heY)C+Sw{RYGRl+yJ@FuCZ6BX_RhPEPixKg=1u1ZSmV0{#_h25 z4o)u(OPT(>C|=(?lw)=>y(Z>fK1>*LsAid7@}HkoVsuk;;c?TNH>xYyZcEd;Xl7bb z25$9D?$6)pz$$R~wnI)9Q)3LDJbqpfnYh0z+OIjwv@3FO$egiKI8u@4!zjjM~|N&=@A$Ma!|G)uS<^J{g=3J1~KVB1Kd z8-`Lhz7Ivx{gG9+Bg&>HQyWm7MQ1#}SV>l1)!+W~x$ZfbR`ve8e|@idVk)nNs)W4# zUVyeE26fZ>N)Z`F7GD*wE%)2FZ?Q+hd*P)n_XtOGh6TJ0#?h7cf#mg%iXT`WjK81I zo>gRMDcdtqjbj_hoI+HpS8Sm1<9wAuQMalarPS2gT~PjgU)DuP$pt)!f-$)$gs9FEya`8=oWaS0nMt_!aF3czv=E zj+?dl>9h!4i957(QUE|NeC0!s#Zc~8iCl?ojN2Co@)QP#iEL~WId8U6h$Z+s*a^KiXKouAe1&w0gH9VH^8Whz?)Rk&z-7g3s_->@}cy8cYT{AaBCdXq@ zN_YvS{xR069`@v;+NWK0r?Gx}9VomfN07#c&$Cd`R(Ny%bn8JJ)o8-s3{}T-OEFqn zT-acBQ=C0$z>CGuLmfW4l@71BB-dA4k53OjdnZP$Z(dNhETHQ3J6lEuz7H->@iymZ z7DivovKa^XGYc1P_YZp$=z)=00H$dWq2=bl}epqbinXFwWQQe*sn2Eai<55>-DB7F2hMLAM_ZK6d$nJG72A>I<}ajU?skK z3hCHk1PNvj_a=Fn&4l`~q@@Yp`T*jGO@m4Dni8DuYNh*eW8}L_}F>Bpu z^g=?(9m#+}HO}#$gbO#%(!sya%C1$uu8GKdvJeO%L$UYX4A>SzXkSy^p@6XDz{Qfh z*ZnU4w%>n{8PERm+IPGzppSr_$@l^G9e-xwqJt?ldX(30rR^w!3A#y_l6)s{nbO8X z08LNSWKuVhwfnw1zw~|szX)~}rTWAu?#Pb%ie>*!Wy^R~$>LEJ!8ey`nK`PH~naiMf)*l!B7B27mFz^=FgTW+}5#4_9CZJoVrTg)LleiGBz3( zk7hBNU!-^F?yIxPT);&xmK$l)`Ovq8PFS;oa9c}ew`0kDO=}%r4_e)EipL8}= zVc+tw_h)hGFQTHa)|N4|iOl+b-B!i0?u%o{%C4F16oWh9+9?ml%HgR_kC z+)0%J`d~r`M`(Yj6lCQa>e@;>xYgrfYN6>U>SE7oI1k;iKx36#a=>lL8rF`Us@*(9 z@bC)U&*gs}S~dGia>W&Kco1zMbaPI;1AhsrVHe zb3GJH*Fm$c`eZAWY9txYpsRdr!SXtHzSIaat;G-8qh|uaw{5zQ3nGy*HyciN~s}|7k66LqOvzReQv) z{mznazZ{j%cOImQXU*vL6Xee3^Zl`~97#{BC+lZ3ilRKr@UNlZxs)N|O|`7kpiNEF zhJkR9SO8gt;BXyYr4d=TZHaMMYcR0NU5BKM$R+WMDuZ(nFE3I zBesmkizc(`A72m|f;LPS?6go#wFnFdl|MUeg1l)Uf*5w)9K(p=IIqNbRI^LV+3-{Ge^9AIHCw_+b5yv6qKGA4W;UT!Ka8Em zA@A}suD5EA2nc}Kd=F6TXt6w2E}M!1>Glm!xy71hyW`xnC+&aRmF;4-ge))m)D5hA zaj}NM8O3<^K@7_kw#Vp=60K}H#Cd)cmTv{ z#QdQ0un~Mmt?zgqLN`3m0#$mDn(xqgR4bj}FelypkU7xKvz5#Ug}7bN+Gnix(0^uf`+K0IErMZ(=yhbvQ|suA|I@?n={|~1OASj zh-<8OL4KJ~Ovpr}ykK{To`%J*_1wBBm@?`#E$ZbBahXHv(V6~Cc`LP(8x0@)u;F`w z`y= zLX<@Wx5M5w`&ECsGLyEYBrnLY7NOr#zKDQHK;#WN4OAOH@1J5jdF;qW@hf{M(84dsGD3;tLMb9tmr~;{- zaG~XldG!&|WWz%JwpJvCWgzY`eSEvA%xcStw0V4HikygZdIs1O3LIiZ{$RN9UN)^_7S@{7re)J!7zRhJD6$U^j_1%_*yW zGHD}P227_dT4Z+&W&IK2FrhM=NK_Xs6e&P;PDa$+f!_Zv>^H3{0nsBa>p6M6>WY7I z`^m-?=hxw%0(Gj}SAF`VHbnWnq(t>w*Wd9c`Nwd<2lZQn_Ce7s*=!Rj*G?BCKsGPN zy_f{092Nl_7rw>uU#dVVOkC)^D8SSydUQz_^^irzH5;zNzQZC-n(NkQlA`x8wEFzwabCAkB3!ZU#wv1%7!w#!(dyE@RsggDd;od?t-kK-`zwrkz3|sNt+2Hf z=pWif)O6Hz0N~#+?5%@05j}wAKSlJfTC9JIUb}kz|CdP&|27FgtLS252%weKH8ung z1L*&lD64B{_&Or}-)(873=K?m`K_G+8m}Tc06iTeJ%E{k1)%juUEtNcSABcH8(91c z8H(6hJJ|fg-k=~~&_ybY%B^0!zF0J3v1{JSRbswHUXXsT~0FT(#O z{Fg`M4ehNR?DP%o0dL-w|HstWUhDr2u+qQT{J$gCH~;+wZRr8@j6f#3|HQCvZXm2# zmz`E8Nbok^^^cKj`rq(x--|{;=zJ!JeSeFx8cX&*NANw-RXo*DwB?|<1zXu;ranhh zYOQ%cclfN88}Q7CY`QYd3aeI1qdawrySZ$3p1pG2qK^9@72CS`ph*jEX*CV(wu0#7 znC;12?BjNdTYKY;8xIW`KMX$GCN@$arx#V@ZD+{p9;sj*a#!B=2`8~raQZv^HX(i! zo0oNOeft!<6H>uDApV^TRCxNl&bF%|8l`(gWR)+}4Ke!A6gn8oBUqpME$@oqMv8Nr z|IWE@zjWI3eaM{?(gc}aYfEU?Xm48Dl{RbJn))>n zX9WEfUW}y9r;IrzS#u)h-{N0kLZP9cvty+`_wANI2Zn#ri-ji`g9zcX`@oM@-g{E( zY`n`@m~UdgFXedUDiKJ%<{|!NkUW0mvmn8Qq4!wdx7F1{Ck%Kh4kf72Zo`O5r$EVtZc8HyIyho}a@3CiUKFTGTt{YXfKNv>z}Pl0kU;9QxXhSt z%Bs$fL}CToZ~j!#IkyxP$tmjU{9)1wm0A2}VhGKXm}VBHmdd*^FAZCx-WxJuJ=#s# z8=`6DdO*cTA`dzHH9=E*I zeismdYaA*P{k~I`;_! zfJraEUa?q$R!vSTL148HOil&k$=MbSnaX0Suk**o574XRFpY2Ri(TC;+xv)sKrZ!* zv$}ASOgLgxqIygPdl#2L$~al{wlb$^ps&7R-;S#4uFzOz{9ERUbGDj}dKUBd7Ry ztB6V+SMlI8h4s6eSspzrDNkfdBW1)z`%mAo@4T5)Fa_CJGtqpqJ`=Y15`73ldVj%) z0Wv&)im-2L@l(hqwAES-L`H1Zlol5cNrUw>rx}2XL)afsN9C;7?%f0N9^tDL@^+Np8^X+*DM?VIRwQD3P>XU-pW%DB?S}&rx zreaDyGKLs4Fr;bX(nqrV_#nKNw}bpzS#j+A_-=cOMa`XwNnU|#f!(?P`kIhy@jh&d zpChS!L)GizvSftapca%K)_=UWk9Ba6y!Pyec+T(u&sT27Tk1b$kKdjxfWgHN(0>** zy2`)BQy(7QMDPQYBS19%4pKjdtwLMFS(`*dERL9N86WpJK{-BZMR zY3T{VZ4wP-Q?*gbcIl_fjFcDtgst5n>{1ab`sj5Vd?p{S3w2kY&j{7JA-#IrSQr%q zI&m{P&2=@GsWufSu5sHEA1fL)uUUEoVa3!M5*3D8b>+|-aGQSqe1g^STga`6IJdE^ z$R}hq7_mD*Jm$8yo9qmlbjmvp3J-I1iU=3ldyb*)eSX|hpp|~!Yj1V_og$;zV8a*V z@OudRE?+5`ZLo{;+Ms&wf=(-U9+ls(SE-=}bhKb~t-ZPM-M&{NKCAt+o7??Ou-~*ic=g*luh5$(yY*)o|sogzc1-Q zwwWTBt@P#Lbce^7rxjPvza)8~rONTATc!(yogLtLZeWe_eX8BG(MJM(`0Jp#G{5Bo znzf&XuE)&)Sn~OWv*T>PKCeYq9&O!O7VvIO#)#wFC|( z1|AkRHr^_q)DEr1i`nBNOI=3TFI*mO4!6sKJeD?k2Dm}O6&q7Di*y76_Ri6XvWQ=t z(Z-d5HqI1e`~&`yD-#oD`jv5oaY-kMX~Nl)kDRnYbJL0vHllL==6hJhkE*&82-1VoC4Ha@5Qtei16v(^y)#GThT{Z15)esvu+Aw0F}lE%wR0H8dRDu8Vt)q|_VT5r z=2L;L+Vme}R)LY*uM$MatouF*{Y?1%Gc#Zz@Oa!m=vcI+zMf?#DmPc;pe0YXvw61q z-u>#y&3G72M0%J6A>X`EM()5vjk@;MOGRS2WMZRtDqq40ba)eoH_yqgywL99dJ+#l ze%)B4_p+I1qGCE5Zy8g|lgwqod;&yw08(B}(^%{6Y*%JZvKu&Btte{i{01?f49vZI z!uFKyuvOVRlZOsL5f z^Q5Y$>rl%uAfMTIr!&e*;p<~uhDOCtH-*y6XC~T78Qx8Mc&qA!t1^wc`_PdD*6LFi zA||=f3@k#(3wcU~m_VNuGacf)SBs5;M_l?jL8_|&5;eVNwj;CmPrSG|OD>=_@_F7z z2<0#@#fCiY4C%iY_>7)uT~TM&$$lowDlV78#H3_1sRQKJ7rIUT$pUm6Dxbl3X{ugja z{L6};h$%4rYF-8f2eKf=c z9>x1CSrAzvUKx~=97|GJn3-Bmw+^Y!Pw2%ErL}JxQT!V5qt0TOn$Bq0dETQQVfNLI zh{n*yF#8CS!cYB`LxTWm?%yXuD#RBKL`^0H%IphNQY&gO(rK3OL;%kjMej~(R;(0Q zMWL;?poQ$Aj8mrg!HbkhLcgICd=UaUCsPm?Ow1fQVA#~k3DUX7ajz~usI;~=Y1^OL zsvcm%bxYHvIC#_R!^Toz$aplRZ138BI#D}Yfpw=y5IMJi5p*9fE>SKPDn|B;EM_J; z{le$6bM-wpU`OZW;yawoumWXVnYPrE{eJyPTk)h1fh1iOzo5dcsT`OEIdW;l#~|0_ zDik!eCCC_3UL;n4vp$Kz0YWh!r)vPjch6NnK~nV#WH|JEr_BW+x#1C(QIhLTc0oCt z&5x2E2k({@xz<79Q#sFsoDbc+B|Q^!`#BDUFKbxT?veR6_K?c z&N|FGqvI34C%j8#hz-*YxPA~(xICLmnM%0-(9CYHbS^igX_90d1y)m$sYYF%Am|IgZPKN|9Ti6YNKiwP%%Z+~1#~P7 z|AgaC2V|@^*0ic?9A+N;Y8YUm#fkUED>)a(|gH=Xq2@EOC5cJQ=>Dl0?)FT%~Z`a-*X{)?lmW2rTa!2|w zdO5XO`FnTMQa`N)nOx;0?Y%#u?HooMgTLfG^A2O~_R{qOhr z9Yo;C$VgJbkuWISJ@3Ga0E7}E(DX2O85l#Gbfw_MfF%fr;b~brLIR)fn!;j2E^538 zD2*d`jq|5n^6JS(Q>bP_t$ts<5A%f}{osiw`R% zn5%L=4d;*+cDlR?J;E?(E81Tn9py{f{kKNX&e8DDoQEg1mJ~z@OT>Ci7utR|cHxhb zCwoT3r3W%jKqDgZl-v$O$E0(+@w*uJzD0Lb%lM{Qpu-KEgb15eW#jy9CyhdqwG-XC79d@<>eTb!BS%AXvNHhB%%_5 zX$PzvZqHGLt&D?%w>uoi`_J22m!yUMgFW8#_p?o*3~gx=ML&#|>t`N-irmfHYfbhp zt(b^T&U>VV$jJ$mg&C7Zw|7w8luOrjWrs%A*&>z5Nf2F1nd;vjD}IAlBuhHfC>ta^ zP}VKhHu#qf=Bvtu^0Ji;?Wz_O`W!gox0wu2r!jniFDJ6E5U!=5`1rZ*9XyP8~URVf)=9(mY^Os9#_Y4T4S z-a$nM&0v624|u{WR|JI0SSh=Mb8C>B0@46lcHC7$@*Gw`TKnu z?LvrGFSb9+D(|mLx9plHDri@LEQ@w>njFY(%0J=IN;A}|lWR*`Jx|Pdx-D1tnDpFu z8QiXEr`la#cI}&u@mf#9iLS=8%Ug!Z!ny5tHg?L}OAU3}xR-nqVSWW^{XQZaM+*2I z0xd)^DJ{=vH4q_hd?hHWXizIFze#x>@4O@}@uRk)LvVO1wRJySScKf(1Y#akEsq^u zqeD@1?H%AoQ2WHZBlBFYbGWy_=CQ+KTJ> z`1nlegFNc}z5AFsL0tvruS+m^Jd$o{EFS5~PF#LJXiXvAir|ZjW#|Xr0`Ge*5 zDr)QP5`Aqije%+?OK#rQaExvG>UX zIcZRPDnb;{&2x!%70eFr4S!a#agt4jB&A2H(5tm1Bt&M*HqmJXC%=e)557QQ)0<&Sxx=GN zzw1xeJm1^Vqwg-A`_Xs!>1(3SWiU_`i`?y zzGrZckr0ja1n;CqpaoeX^g@K1r;?6f&eVHGU!Df@BYj{HXyVb=B;O|LhU$Psfc6U^ zt`wiWJ%!#r%A?{~=3$QqA~|?OTEh6Doj^Txdnbxbou-IjB!?IqmK-5_;MXF&I&+B^ zdL_-`MSK-dR#Qp-`#`9Xyt)e6UX&V7rG*yP!_25)%~t{gGw&hsnrdRk{HL_%uR3ch zgrx2A%S!W8tMR)gM@sBNDXwlS3-nVwOe==rplT;Q4)EWQDcOzry8B~od;V=C=6ixU z4w*&ujpM5YiD_xnVIze_dB?{ydB+5W4LmpjAD+`9d>;a+1I+9u+ys50YjYO`p=?zx z&`5c{`03_>GjI|cj1v_=UoPT>_%vKRKCIWS24N-MYB;*h{}?Gm65LWzd$~fpH=Fdl zyWdE*TC3jdKb_a)$}97%R65>ZH`PLa_rPFV-m9a&FH$l2IOrWgaXnk$any3Wj)V3& zXCM7RL7(;&z!w|ofmaUQXpP7SGxh@18p%oYt%gp2z0-O7os?9x6>vu z2uIsO$Lp0O?>RqpQu_f;-nw);>gAmpW{o%?O+r=g$ZwDr{+^uBk@qe!HOq4C#anKy zIYP1$5fl2Aj@HEy9=|B1O0RL3M*b6!a1IBPpJr>27kap3H0F&5N> z`?ApBBmDi-^I7j0s`3md(7{rGuf_{X-J z29ReeXLc^bjM)*4^CW&1{FZXY3(+Pd+I6jKJVkl3UuVHSM*a(uWHG_{R~60L+=4L( zkoZkBYEul!o~bKhYsYhRE3L}F)j8Uon>Jn*5+CU)Cr&=huop9zb@$`;^qs~_<_zFu zGJmgr&;Hhf`{^O!)jvSm zr~Z5|*u@foFoT{2Pu~mt*45P$(GzOmoj_|(lM1(n+cqJ_!B;KH4BZyQ_OzTBTq3+u z&IpR&)r`J}q%#KfI`8n+9P;08Pb94>9G<>JqUOrS-iw|ErIQVIq+dNsFFD;}xPO&Z z5-GcKN`pzSe@Y= zr&ktZ&I~JHVcph6tshcI2}7J`(2Ogid?!&wSf3%MGB)-OPlkw&;Gz*5q1L8=__tWk zhAm=F?zYg55(BP6&~*ZuHfQ!V?Uw8w?>RGL(hf#B=71(=TV!Z4)2E1hw!oioYa&5C z=1KyxkRP&mVA4a!#}myI3C!X@dqbXzXDP=q*$R9<@2aw;A-E75EfXQl@G6=QI(C_s z-RLz?)Q(Q5n6+!|M1%?J{hXb?>CBne(`u{s@g!7tw0kR>Bv+Xka{AC@?eqI2k}E1s z3ZxI)S%T3NDU0P3E}yc#n43)>W)2sQKxq&p#oWP~u_En|1<`~pq^{*2x_>?jpK@0D zNXpVM9(jJLWb%$ku+x?QSX(|?voN_LD1cHhjtjsbK&)6y)O<-TS?{bx-LKJ8-M4U` zaPIp>AVJDSaJP>Jw->A28wnjE0rNl^JzA@_hz(j%O&KnWGze>MKfz1Wph;xW2m$$QV+3{wMEpdbZA&}g@~>#81<$b z*J})w!lZgXmCY4%2LsJuY!ZA;h2r6E12FL@9Qe_FyqM~Sd!alDCC2FLm}i|)TjIUB z?m4|aqz{X%ujQa$-spj{tE_%>8S-1eZlWrQ?GP)LCD&o|RfXQxQRb<~1um6tcRxzP zO41OJYCANON5_T<5+KolacrB|&8MTv;=wq(e@Z~+WPe{u7 zjzXVVZ z7b_?W>Y(CzvFhpR93&LUYNSj1v6jF5T;iq#4U)=b3V~)Cy(w%m*qzhcJY{Uypc+Xo zhF-G8Zk{F7=y!tpD-k~YFiUH7-Y{i%L;6+^!63iat>D&CoU;|ZZKMS8^vPSm$xV^) z)J7w1;XUoDZO9oImB~iShrvyEg9_kywnNbci_9kR00vI-oHbD+l2idzJ z@5(jeqOef#F=0o$RPA@otO!sfugTFK8$lA1mJm%CtoNPV$6zR01rH0@NN(WB8Ck%! z4d=&&pJz-a{u`!aRIAlkygny`-bAZ0;P&n^2*dWN-0$G91Hd0%`?-GY2YYOH|2;@H zJ47IWsfiV&`dScqD=5Ae`risE!sr3v0)05eu$oipQ*<53>5LAVc z#CNkeutKP@2Sp@^h{U)k5gi+)>-bHwf@A{L*$1bu_bk=G=Q>8N<6{GQl^frJE`yJg zdL>#XN9k~c19$)RulFqcMZ3(Q%#rLZlfp7l*hcuuo#J*$NDn=t-lq?$DedSzOO`}~ z&+(FA(y$~|N?0d=t3w`rcbHo~`Ce}DrLGqhSn^z#oY3HfHe{cW%W)K{8}h2ONr_eB zxXabjoKw%#NlH$in+s9AuTVcVzGK;zZ@c9hR>94(mC$V5!zi!#9^ml%SqmiRL(`*d zbS3^q4*XJa3DuB^NZ1$JG03ptnjUGvQ6|K17jAdA!7e4L%|^4f1-5$0jejTAK$qe5 zJ@UP1`I->_ugu8C+uj@x^s&o54=a*nF$T#s@YSJc4$`z2qbI-aa? z=q3MyZAVc$K}L)Seq6xC1+>fxczF~{-}v@ezpU@xp1W-l2I23ekedu5xBh{d1q=D? zusOUT_B01N^YEj1M^U6o`r@U;w3zgJe~`3#>~$2^dcjEwO_~~&B}8o zp}v&!ax$SN^@23F)~YQb_9v6h<>W~MvQ+*;Nm_t@q{$h3edd--X5#E@(i;v)gNh(Tn4t|@S+-i~sM6^u5a-BK|#Hq*! z(sJR4XT`LkwT08;=&>)PO-YPECgbd^)1m*ma~+=jg!T0&rrPj;jj-_cXd)Q>&6tro zVQa2+EbAtQ&HD?;JtZ0Gh?c{A5guyuN_n_DWl)v1^u5f8@G+`+jXdE=diQd5s5KH# zG+rmmCPw4S@IeFX36>9PSDDx0whe7=S+4sh1H8(h$yA;;%!8^f2~RJu#47~k|6#%X zP3C#!u`n|*{CmCq7wzb8j?Wv7NYKz;-_FzqWNr7xruoAxlGe3+B>+jOh{}nmQ%YNd ztQB5aIn?ro#ts&`|D`3YYiVlX0w8-+0K93C|J8wouJJ1ghvDD7@&82=q6RY11E?8U z*#HczbZ?9y;NNT^F_5l>sXm{Tv4tUk?oTs5d;LFjBRU}4pZc4PZvtutHpV{!0bLtW zLsMguS4z@rKYv6DAVW)K0P9~Jyj4X1uDs3i^DxL5yY@0i-zg9J=;?f!Oyr0&1!^o)Pm|DTS3B^mvD z+Y4E}9-1+=G6vA9m|F2!*_-|?_%ptWsR78u{*`pa0DPk`G10xTx&D4JzPj}-y}cNK ztgnMJ{FSpX0GR)g=>F9H(tDHtrTy08Keb*NWsGb9AoH6h3*&1mW*~r>o(;gl@L!`c zGcW2_c{b|GU$_)el%PwZ%o6ld#aQ}X1VtONqF#}(9 z=$QdbtgoZK=FC7Q0ORYGw=$5P6~Ms!HYPJ8)1ML><6qLZ(f-nSZTad%CKfgTmbU&ms8eFihJ{59i$&i*e63mg4kytUVDVXb6k`gUpw@aO6L&$UATX6E0E zpS*fa&4R$Z8Cl?1taYkHCv?FoSnM`^AXJHOXtQTDi z-E!la&%$+TKY_z@eJgRwbzmHU8K1!JZ0R7X{aBSYd5PI<0QK0eIkNPHibDB{dNgd2 z3Zke)=y(Mv0e%EZm2oE{B?g0Dg^HC53(xnh<;|;ZPxn_QVxQy))ABKLNwnShjweR2 zqkvLGhYAY$zrw6d+IUgiG76Yo?hhsMwcTFo6X@1=#=Pu|s^qn@S6+zantd!5F`=WY zgYdGvP@f!(M_cLAL?=+Q!inw+tA9x<(xErtP>#!F6idpOswlh&dJ*2+?KchGh+j!?RU3941;YMi6PjkjE-5h$P16l_FR-6EB#WEL1%{5qGdO6(@!@v%q~j^O06Z zs$4DRSiRLXBHzQPOg-oq#YMzynHksRm3#Q_c?q{DydL|}{F;cJ_NkdsFSd-PAHJKE zr2&Qu8Q$g7SN&(969vG)%HF$jt4p=_^O-=V7t~F}jd`Kw9?T~8mlbyk3$NfaxN~N` z5e5$Ka*Zx?4{aTDQrr}aah?|~xgYJ{FD#P1kXVz8%VxPhpO|Ktp$mO_cd+3ptP*Cm>@>TnaAi*V*%DRWz7LMA6x^o>|3N0krM`Wr>g zTFnnq>Qbt4$EhS+8kSmU_gbi>h2=7CHWW?9ZB-$gn9jnu>X%I{bx+C@Q@^X1S8_FV z6`o|0%&v-|tfopc9f3B^g{VnQk{*Xi%PrWHx@XklheMyTMEzM9dT{1i^wZ%0LP0q< znUcKqWOvwgd>xH6c!C^w3sDA7SOhNXT@sYQHL3rSXP^s!$Sy^Nf*Pu1=QQ;AWHYmFV75b|&X zcE0Uuxw1R4U7OBLM}pF=KAWd@uO$rJK>3+!`4`r)hHXrSEZ{_DKDP4T+`E{LQ**GgQQ z*kXEj+ej9ztAHiboDFTF*N#FQizl}S0$wiYxy7u8SYr{k9`q%F)0ZOFBQG|9-#q0o zsZZH1MB2-d-ZuGYD=0S92#GCmt?R0aYNiC%+6=>j!9^gJNq5sHZce?J0flv1h7km&(t@J6A1&hZnc{^DOCrwi-yKGZ+gii7 zDmLgGC6b{+3K2jetE$yD8>&%COovx&DFtx3&cR*oN487XN~%w~Oq)jFUJ4@$@iW4? z7?a5?f;lvZv}9&?D`l-0Tw~+0<-{Y`oT^<1kZz4*oF&lII;D^KS!~7eY3UlUvQ$>#i&1|w=RI0# z3T11hvf$l$M8P3y)4YK2r9n#{Dr{-n!W{p3h>UO|9$R)DhMU^OkXFu-nj#}C_KtX{ zO=!zLN`4_{!OrOtS=!@MajryU(-E9hq$nFU_kMpWgO6!l zt*PkcE0)^~Rk*o+9v+ph-@4}UGE=n-D`oA?|hKVT328DeQWBf_*5Eq z!O#-1E)f2q>Eqcq@cMeZfZQssa@-22Ca4RuhnFmZN>X00Pa1++t#-WOHe$RcH#260 zGtg#%0U?M==qwYC_zb3k&QNA53Hy*zB5X$=P5Gj+rw_MD%)#SheVKb755&0CN24M@?$$DAurz%Fd98{cZ$V~tZsIHAB z)!94hYLBH3I7rLF^&7t9q*$CeSBz3Pr+hcI{VM9hN zRu_DyiG(8J-(0LFh{pL4Y|x)bih*OS9hm-AJ5ZXAR*=+Xgn&0`)kcpxV_8R$PD0uYTdD&onfODjAUDdXUiIOLGr~@PrcI6rNySl;ln+Xhe z*e*oY4gw&z;qZ~TLoI2ATzIe?e!n~sirm{F9JoBuH%L1*gGjQ$_mOn|xU?K{(TaP` ze~(BoaLMwTLNL@wTQK=ZrU(Z7>JO8)Pe+t7w?oT%gKzU;49A@8ige|BXX5hEX%0Bg zPMDMFJkM^t9-j>s*V@UDHdfVlV{S7X11v9c+qK_D7^rI#XLL+)dl#Fh^vyFo<5`C-9GKq3zX)fRXk)zidzwKUY=&L*kRxJ!0#} zk(5%gb%Jm&*%vzhS*IUBBGcr%U|jm`z)Y;MW3Xv*lv>wKOoG19Bg4= zdBuAFIz>YNPeAqeXXJmMLHU3DbpWl%UuNBO@O>wqusDkXwv+bIp~unP&tn#dYjbu+ zCI;E80WD7kEFd~>Y9bGw3$^=&_G=V|U72vl4tVZJea-bDG~FKZNHdx>pAk1DYmSth znvU)|gH*S3xmxPo6!?T;ENpE}?6ZP*yj~Ro2uz*7AJ{q7yOSqyjC0_PrybVDe%f1; zw5DM4soYL+Bn7mjK|Cn9Tf+R7KiJkC6b_JJK${=)E8>y>jkyL%<2QO;qvL_%E>je{#`lGX)p>*LZ=Lm67#Zk8kI$USl1muaUOb=my{Gi7mrFk&QPrCu3(| zX!nNB$;1p^0}`enmw#VUaImqlFtmINQ~ZfR{OerOe@FUnH&^~IEDzA2dqwhZ$QVe+ z0MOF<$C;(SSH_zy|J!`uc6+>!Yjys zweqjCT>pT?Z@c@Sw}s&iKmWZ_|Fzv;gFJsv@PGO-kbgpAW~SFC$3H`wN2*#DD6^>C zPDYN7^nK2)b>39pn?o%Fon}~V0g%{qjLnXL0($U7jJ#jtwZKgQwq#PNUgsJ%$werrP#vqyjRG+(lGt{^TAi?e*mEHXaWm>23 za_by|AFl!;xb1d#y-z$LK9=)wdm7Yej-+clCX-!I^v&RP^6op`E9}1DKGhNSONY`z z@4mm!$X<26^cGJN<&l|6A z)!x=4Lb=yHEZLUQ?1WFBaQkFDnsQF63V%=JodIvhHa>&w&Sb{r*(04B_r zZ>=Ofk$H8`nyqD~bfgfA^kd`KrWN42?90j06>*@5-MwAagkv#{E;CC@F+@%(crM)~ z4~zYBVS?|no^6HhA~o?~)3h=EW3-s#y`fL-H+u9r2R@RU67tJes}DYP?O)s{FM9;S52uGL9b$gd0p6;uE!?95{dOw^9SRT$_p z!6&BHrg%dL^VBRuvv$RK`7R&#N-&VXHf5$ZF$Y+Nhjw0|=WbxKE3Sxd_3%|4Xe}5kEshaX_9mEx@WYUzBHbMqaCC>Z>&Sn z4_kohKqtH-SO_o=^kvH<9dHS*B#qof$J@ zi>#GBL?vpnjC~lAwZ&S-6!D7CM_x<_N z7D5MW(EhE<)7Cl6gu!kVZp;-{yzM7_h*q&_QNPrZ@vbD00%%#CAUM)l2mo zS+Ix9^kSWNEXACAEYr#=o~02>=w9MZ@YTMF&QLQ-#if!xlocthki=2;R@?zNgdsl7 zzE@yg%p!!FPtG}Q`~?18{-LhPa)i2>S(>lMNxr>)2YRk)xn>$0+r1!5R1OGH-d#;h znz_#}_{>PPmw5Yl?guhpSDT99CC=ZUwDUp12lp)OFMuA8CA#+R1R$r(p4%TvomWH7 z1gPSjGkr_$+1HuK)s5`=LJ=VawuPt6Eol>hH~xXUzFZ++gvZPk4iN7GFg)I^DLzwWETa6 z#bi8Y`*TVIG0D6>78t{W_QEA2o?~{XX7%Mcf~k-bn@{Nw z-_brj7P~1brg9C^R+B>jN-^@7xP9~E5h zX@k-@ETL4QEu7TaA66OJ5$2t=BO7Q$dW}izCDc$(Hk-KJ@~JzrKWOIi?$q0|-O9SW z!(0vORcEvk#6otrIg)xg@7ItWjhboWk%WF*uM7{rq`mwv?WTd6X`GT=*-H4{17()zFbR-t zzovKnSd56iY|B_*Bw7(u8fK`gM)3&FDSWcs8jZe@XKm)K%&n8qIsEmJJ0#<5T?#JI z;|*CvWkELB-E$X#;Wx#5XWjd+E|yvnz$0j}v{Dc}zrI*HU0{2*2;I{MRLDh& z`$F7OMW2dH4Ik=v$s+lXxW{K1_k^e^v^bs~wZiXQM(~}w@$Ff>=q`aq_7CzGG%#_y zWkgxEqEe^gqwg-sqbNAbktIcYyh566UtNABQC8U?C-;cq;ILg5>d~c&^-d{G zT{!F!8!79A%$BCZ3NAP8(T5ZqQxb%dCJOFPC0uFNzujSDo^2Q(3$Klp9J(r`^Ty( z>hRvA0V@j`e96~Xg}bG2GS|$`=08PRq}^2~kMLmJ56ie$zLvh5S5obND*o{dsZKB93RF91dGtE5vs%Pe^g*8#Z zbj=y#?U390BLia>X$)JrBdz;Q%pkI5ad+qSv50cMMK24N!-YwOC)LYG=>#9aDdn|e zEIGvtuN(~7S?HJ<{$Ny^I>ttbpwrx^6c7I+53j)N1rMvSY(%@21neTUZkxNJ8SKBD zchieDr@NwnBPY(xVMdlQv~kI|jt$YQ5$8|N?hZ?}lCxG0Relr23tKrpk;x{A7vT`R zDZ+7=?&8PnDzQ{6&C8OZda8UH>8gZy#1lBw=1C!VcnrD5cYXHn#81f9MZO)pCemSu zwj;PHhU&##6XCEb664Xv7B@5+@ZYg|a`Qlp+Te?<&W!f{(B~Mz?vM!~CjG=$vq6Rf z4EW`5YR6VME=^f2HgVtVXXUx{eHM>N7t~FU_}q$^trh-e$Z#!JXO^pfrzh{t>nnNvnI^)V@?lUZ*Okb)%;S(GXHg)?e+G_ z{(as9T!T*v+q`PKT#-HdAvNbQP6Of5JxR`oDC+v1M}dp%eLU(#TOpIx!{^%szHZltI&(bm zN|sETD?KX{>Qs7JMQfJsb*0LgCXMPqZS<#q5vT63%{-`n3;n3#ky~cr3@>&>#hF36 zT79haRC6P4&%lh8Z)e;wm1bWNnEcF7^8jp26+zoKuaQBN0&U`}5gtNkICZXm9eRDs zA*hz}jP1i#x_VT>Q58M6#d7B5j=c0wLGVy!!h~YpMDKg82j++N)k~@@#Ez?AkHoG( zRZ4>0hyfKxU~R*M3{98Ai{D0lk+Cmo1@+A9IdngvG||*M>mf^YW>xoM=q* zK0|q$*cOk8U->m`P4EUu2MqpmM%N2@KgrcU z@@oTwW12^FfADL4tSk2STDUN^*zW{!FkC_t#Gy1n90m%NtCZ{i6U4!GR*CU{A&Ao$ z+N0gCo^!mAhz3I|1f+EroKzc2ufK!9-%>SrA$N3~CF!~lS* zyKltcaQV%3p>Tj2$JkH~ilW*aHexV90R=uOHk1S4C=@vK4Hy(G_$vmYzm!8!ALg6t zqNp~9jTjt(+B^;@m~3WqUqB2@th1>u5=FI8Y-|sSLVz!ejTj2}wJu5yv{7s<2QC8G z=COeo)%vlaJs5yQZtgRP$^SB^P`Lc&aloJmstIJRJx?4O^yJ`Zd1Or-d~K=gg&G|) n#$r7|+sco7pBk0}O&_##+M5lH^Q5gXussBvNmNwJP@C!BU{cat literal 0 HcmV?d00001