From 156fd4dcc6248a695d368a81385bf5c92cfa885f Mon Sep 17 00:00:00 2001 From: Henry <Henry> Date: Mon, 9 Feb 2015 18:06:35 +0000 Subject: [PATCH] Doxygen: Updated scripts and css files to process OpenFOAM header files more robustly and generate cleaner HTML files. Thanks to Bruno Santos for various fixes and improvements. Resolves bug reports: http://www.openfoam.org/mantisbt/view.php?id=1516 http://www.openfoam.org/mantisbt/view.php?id=1016 http://www.openfoam.org/mantisbt/view.php?id=1512 --- bin/tools/doxyFilter | 17 ++- bin/tools/doxyFilter.sed | 8 +- doc/Doxygen/Allwmake | 33 +++++ doc/Doxygen/_Header | 2 + doc/Doxygen/css/cfdLayout.css | 7 +- doc/Doxygen/css/cfdNav.css | 6 +- doc/Doxygen/css/doxygen.css | 199 ++++++++++++++++++++++++++- doc/Doxygen/css/img/OpenFOAMlogo.png | Bin 6630 -> 6140 bytes 8 files changed, 252 insertions(+), 20 deletions(-) diff --git a/bin/tools/doxyFilter b/bin/tools/doxyFilter index 2e370383e5d..061c72e526a 100755 --- a/bin/tools/doxyFilter +++ b/bin/tools/doxyFilter @@ -1,11 +1,11 @@ -#!/bin/sh +#!/bin/bash #------------------------------------------------------------------------------ # ========= | # \\ / F ield | OpenFOAM: The Open Source CFD Toolbox # \\ / O peration | -# \\ / A nd | Copyright (C) 2011 OpenFOAM Foundation +# \\ / A nd | Copyright (C) 2011-2015 OpenFOAM Foundation # \\/ M anipulation | -#------------------------------------------------------------------------------- +#------------------------------------------------------------------------------ # License # This file is part of OpenFOAM. # @@ -38,7 +38,15 @@ if [ "$#" -gt 0 ] then - filePath=$(echo $1 | sed -e s@^$WM_PROJECT_DIR@../../..@ ) + + realFilePath=$(echo $1 | sed -e s@^$WM_PROJECT_DIR@../../..@ ) + if [ -n "$FOAM_ONLINE_REPO" ] + then + filePath=$(echo $1 | sed -e s@^$WM_PROJECT_DIR@$FOAM_ONLINE_REPO@ ) + else + filePath=$realFilePath + fi + # dirName=$(echo "$filePath" | sed -e 's@/[^/]*$@@' ) dirName=${filePath%/[^/]*} fileName=${filePath##*/} @@ -57,6 +65,7 @@ then awk -f $WM_PROJECT_DIR/bin/tools/doxyFilter-table.awk $1 | \ awk -f $awkScript | \ sed -f $WM_PROJECT_DIR/bin/tools/doxyFilter.sed \ + -e s@%realFilePath%@$realFilePath@g \ -e s@%filePath%@$filePath@g \ -e s@%fileName%@$fileName@g \ -e s@%dirName%@$dirName@g diff --git a/bin/tools/doxyFilter.sed b/bin/tools/doxyFilter.sed index 084049a4a27..e2aecb8b8d4 100644 --- a/bin/tools/doxyFilter.sed +++ b/bin/tools/doxyFilter.sed @@ -11,7 +11,7 @@ /^License/,/\*\//{ /^License/,\%http://www.gnu.org/licenses%{ s?^License.*?\*\/\ -\/\*! \\file %filePath%\ +\/\*! \\file %realFilePath%\ <b>Original source file</b> <a href="%filePath%">%fileName%</a>\ \ \ @@ -64,12 +64,14 @@ s/^ /\\relates / # => # \\class Foam::namespaceName::className # -/^Class *$/,/^[^ ]/{ +/^Class *$/{ N +:loop /.*:: *$/{ N -s/Class *\n *\(.*\) *\n *\(.*\) */\\class \1\2/ +s/^ *\(.*\) *\n *\(.*\) */\1\2/ } +t loop s/Class *\n *\(.*\) */\\class \1/ } diff --git a/doc/Doxygen/Allwmake b/doc/Doxygen/Allwmake index a349ee4fc17..227bd01b727 100755 --- a/doc/Doxygen/Allwmake +++ b/doc/Doxygen/Allwmake @@ -8,6 +8,39 @@ cd ${0%/*} || exit 1 # Run from this directory exit 1 } +usage() { + exec 1>&2 + while [ "$#" -ge 1 ]; do echo "$1"; shift; done + cat<<USAGE + +usage: ${0##*/} [OPTION] +options: + -online use the links to the Github repositories instead of the local source code + -help + +USAGE + exit 1 +} + +# parse options +while [ "$#" -gt 0 ] +do + case "$1" in + -h | -help) + usage + ;; + -online) + export FOAM_ONLINE_REPO="https://github.com/$WM_PROJECT/$WM_PROJECT-$WM_PROJECT_VERSION/tree/master" + shift + ;; + *) + usage "unknown option/argument: '$*'" + ;; + esac +done + +#------------------------------------------------------------------------------ + set -x rm -rf latex man diff --git a/doc/Doxygen/_Header b/doc/Doxygen/_Header index 2b4b441decc..985c43d52c3 100644 --- a/doc/Doxygen/_Header +++ b/doc/Doxygen/_Header @@ -9,6 +9,8 @@ <link href="search/search.css" rel="stylesheet" type="text/css" /> <link href="../css/openfoam.css" rel="stylesheet" type="text/css" /> <script type="text/javaScript" src="search/search.js"></script> +<script type="text/javascript" src="jquery.js"></script> +<script type="text/javascript" src="dynsections.js"></script> <!-- meta info --> <meta diff --git a/doc/Doxygen/css/cfdLayout.css b/doc/Doxygen/css/cfdLayout.css index f803ce8802b..b00bd68da4d 100644 --- a/doc/Doxygen/css/cfdLayout.css +++ b/doc/Doxygen/css/cfdLayout.css @@ -71,7 +71,7 @@ p:after { border:3px solid rgb(175,175,175); border-bottom-width: 0; margin-top:10px; - background:#d5e1f0; + background:#e1f0e1; overflow:visible !important /*Firefox*/; overflow:hidden /*IE6*/; } @@ -265,12 +265,12 @@ p:after { } div.contents a { - color:rgb(70,122,167); + color:rgb(85,144,112); font-weight:bold; text-decoration:none; } div.contents a:hover { - color:rgb(42,90,138); + color:rgb(56,94,73); text-decoration:underline; } /* @@ -342,4 +342,3 @@ div.crosslinks { } } /* end media print */ - diff --git a/doc/Doxygen/css/cfdNav.css b/doc/Doxygen/css/cfdNav.css index 9c590e8695c..662442034fc 100644 --- a/doc/Doxygen/css/cfdNav.css +++ b/doc/Doxygen/css/cfdNav.css @@ -271,7 +271,7 @@ nav3-bullet padding:0 0 0 10px; background:url(img/bg_bullet_full_1.gif) no-repeat 0px 50%; text-decoration:none; - color:rgb(70,122,167); + color:rgb(56,94,73); font-weight:bold; font-size:120%; } @@ -282,7 +282,7 @@ nav3-bullet padding:0 0 0 10px; background:url(img/bg_bullet_half_1.gif) no-repeat 0px 50%; text-decoration:none; - color:rgb(70,122,167); + color:rgb(56,94,73); font-weight:normal; font-size:120%; } @@ -570,5 +570,3 @@ div.navpath, div.summary { background-color:#d5e1f0 !important; } - - diff --git a/doc/Doxygen/css/doxygen.css b/doc/Doxygen/css/doxygen.css index 18537810378..4958570ce30 100644 --- a/doc/Doxygen/css/doxygen.css +++ b/doc/Doxygen/css/doxygen.css @@ -86,13 +86,13 @@ div.navtab { /* @group Link Styling */ a { - color: #153788; + color: rgb(85,144,112); font-weight: normal; text-decoration: none; } .contents a:visited { - color: #1b77c5; + color: rgb(85,144,112); } a:hover { @@ -398,12 +398,12 @@ hr.footer { background-color: #d5e1e8; font-weight: bold; /* firefox specific markup */ - background-image: -moz-linear-gradient(rgba(228, 233, 245, 1.0) 0%, rgba(193, 205, 232, 1.0) 100%); + background-image: -moz-linear-gradient(rgba(225, 244, 238, 1.0) 0%, rgba(191, 223, 191, 1.0) 100%); -moz-box-shadow: rgba(0, 0, 0, 0.15) 5px 5px 5px; -moz-border-radius-topright: 8px; -moz-border-radius-topleft: 8px; /* webkit specific markup */ - background-image: -webkit-gradient(linear, 0% 0%, 0% 100%, from(rgba(228, 233, 245, 1.0)), to(rgba(193, 205, 232, 1.0))); + background-image: -webkit-gradient(linear, 0% 0%, 0% 100%, from(rgba(225, 244, 238, 1.0)), to(rgba(191, 223, 191, 1.0))); -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); -webkit-border-top-right-radius: 8px; -webkit-border-top-left-radius: 8px; @@ -546,7 +546,7 @@ table.doxtable { } table.doxtable td, table.doxtable th { - border: 1px solid #153788; + border: 1px solid rgb(85,144,112); padding: 3px 7px 2px; } @@ -559,3 +559,192 @@ table.doxtable th { text-align:left; } +/* tooltip related style info */ + +.ttc { + position: absolute; + display: none; +} + +#powerTip { + cursor: default; + white-space: nowrap; + background-color: white; + border: 1px solid gray; + border-radius: 4px 4px 4px 4px; + box-shadow: 1px 1px 7px gray; + display: none; + font-size: smaller; + max-width: 80%; + opacity: 0.9; + padding: 1ex 1em 1em; + position: absolute; + z-index: 2147483647; +} + +#powerTip div.ttdoc { + color: grey; + font-style: italic; +} + +#powerTip div.ttname a { + font-weight: bold; +} + +#powerTip div.ttname { + font-weight: bold; +} + +#powerTip div.ttdeci { + color: #006318; +} + +#powerTip div { + margin: 0px; + padding: 0px; + font: 12px/16px Roboto,sans-serif; +} + +#powerTip:before, #powerTip:after { + content: ""; + position: absolute; + margin: 0px; +} + +#powerTip.n:after, #powerTip.n:before, +#powerTip.s:after, #powerTip.s:before, +#powerTip.w:after, #powerTip.w:before, +#powerTip.e:after, #powerTip.e:before, +#powerTip.ne:after, #powerTip.ne:before, +#powerTip.se:after, #powerTip.se:before, +#powerTip.nw:after, #powerTip.nw:before, +#powerTip.sw:after, #powerTip.sw:before { + border: solid transparent; + content: " "; + height: 0; + width: 0; + position: absolute; +} + +#powerTip.n:after, #powerTip.s:after, +#powerTip.w:after, #powerTip.e:after, +#powerTip.nw:after, #powerTip.ne:after, +#powerTip.sw:after, #powerTip.se:after { + border-color: rgba(255, 255, 255, 0); +} + +#powerTip.n:before, #powerTip.s:before, +#powerTip.w:before, #powerTip.e:before, +#powerTip.nw:before, #powerTip.ne:before, +#powerTip.sw:before, #powerTip.se:before { + border-color: rgba(128, 128, 128, 0); +} + +#powerTip.n:after, #powerTip.n:before, +#powerTip.ne:after, #powerTip.ne:before, +#powerTip.nw:after, #powerTip.nw:before { + top: 100%; +} + +#powerTip.n:after, #powerTip.ne:after, #powerTip.nw:after { + border-top-color: #ffffff; + border-width: 10px; + margin: 0px -10px; +} +#powerTip.n:before { + border-top-color: #808080; + border-width: 11px; + margin: 0px -11px; +} +#powerTip.n:after, #powerTip.n:before { + left: 50%; +} + +#powerTip.nw:after, #powerTip.nw:before { + right: 14px; +} + +#powerTip.ne:after, #powerTip.ne:before { + left: 14px; +} + +#powerTip.s:after, #powerTip.s:before, +#powerTip.se:after, #powerTip.se:before, +#powerTip.sw:after, #powerTip.sw:before { + bottom: 100%; +} + +#powerTip.s:after, #powerTip.se:after, #powerTip.sw:after { + border-bottom-color: #ffffff; + border-width: 10px; + margin: 0px -10px; +} + +#powerTip.s:before, #powerTip.se:before, #powerTip.sw:before { + border-bottom-color: #808080; + border-width: 11px; + margin: 0px -11px; +} + +#powerTip.s:after, #powerTip.s:before { + left: 50%; +} + +#powerTip.sw:after, #powerTip.sw:before { + right: 14px; +} + +#powerTip.se:after, #powerTip.se:before { + left: 14px; +} + +#powerTip.e:after, #powerTip.e:before { + left: 100%; +} +#powerTip.e:after { + border-left-color: #ffffff; + border-width: 10px; + top: 50%; + margin-top: -10px; +} +#powerTip.e:before { + border-left-color: #808080; + border-width: 11px; + top: 50%; + margin-top: -11px; +} + +#powerTip.w:after, #powerTip.w:before { + right: 100%; +} +#powerTip.w:after { + border-right-color: #ffffff; + border-width: 10px; + top: 50%; + margin-top: -10px; +} +#powerTip.w:before { + border-right-color: #808080; + border-width: 11px; + top: 50%; + margin-top: -11px; +} + +@media print +{ + #top { display: none; } + #side-nav { display: none; } + #nav-path { display: none; } + body { overflow:visible; } + h1, h2, h3, h4, h5, h6 { page-break-after: avoid; } + .summary { display: none; } + .memitem { page-break-inside: avoid; } + #doc-content + { + margin-left:0 !important; + height:auto !important; + width:auto !important; + overflow:inherit; + display:inline; + } +} diff --git a/doc/Doxygen/css/img/OpenFOAMlogo.png b/doc/Doxygen/css/img/OpenFOAMlogo.png index aae8387f5ea2b443ea550f52e8bab62c4f19883e..6d9e2f698b4052636fad0c08cb0fbcb539fd2202 100644 GIT binary patch delta 6081 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 delta 6573 zcmV;e8B*r_FXl6lBnkm@Qb$4nuFf3kks&Y&+6V;+GBCWSaY&I{Cx011Nkl<Zc-rlq zcUTnX+QxtH&K3bdK_u8B*jtVPBQY93yHP|<tZ8aI_E-{4F_F(`EQ!%*6469GmKe_w zdn{NGbHsoVTkHi;i7kqvfWX4m`TkfLSZTYU-$_n*u4}G~-JO}YKIOijX9jWZYMM;B zI3yz5O7blM$jGwzkAL+;rGl#dqI^OAAfhgx0>|a2s0xf9?}8**u~@`^M0sQxs#b;l zM<0|g$R9*h<x}9ebnIos-`}P{sz+u{h$nmGwjs-cL4%BFr1AiwT#5dK;;OSUVY~ql z%Eq>dExdb@2Y}TIo}Mzp#^qqLl!tTW;oP54^ad4O`x@~N(|_^XZvu@*#$;0Q*3cYA zjm#k}O(02+w@s@RTwP`2<F$+!;l{9G23%aM=ndue?+=5O%ZUZ&L?g*WY|t@jk_#G* z6_ZI&r;ddk`?H={n>D>nj2rF2rcGLoT}&@ugz|9i&n+g4;HADcY-BduywQ~_YBsKV za#MNXjFvTPw112lW588sEnkFkCHn91M&rjD9%2=N5Hib_xjwPB=FWAYVnrDCPEL6k z_or8)tXl{}YQ6>jYl7QcZ&b(MirEZmwao9oOKe	y@E6_Pb!q77Y{LF;Lm<KjVd5 zb$LKfWZj0WTjiSLC?<;Ax0#=R{+amrcy8XjNor~;YJatwr=NZrUteE3b?QWLa4;&5 zT7P+LWHt+`RkslJOV(p;<D>CzMD0@(ceY?&=z}q@bN~K*gmB!LsZ=VgRx5#lfxP|U z>|)QY?55%N)r;)dv7Ol1gQTR~<;s;LtX3;tUS9b6`qHFH6MFUPMZ*>y%QV)o&p+bi z$&&!os()3J>0d5)d=qEiWyG+zuvjcel7z)#p>^vv40~s))BSjN!~ilLJW%d4b?Q|7 znzeCWiB87uWZt}a%AksqN|ihqF?<9=CrtfITA`lp-AVdQpjO+Mx*0Pb@ao^KkA;FZ z-iLsIN=%tzV8jG{fl#hhvsz?iWR&XO&p-b>D}Ogc7QHbHseJwA=Y)rcJJd#Ci$G@2 znoZqjT4S;}=Z&-PUZQ2omdJA6brCxv@c-M34qb1!cZI;fK)dhU-Q9^hd)=vioIAXi z0RslueYbk`YMyJ~yV&arP~7upOk(AVm3H4XY}k;1fB@>%tIwS~$^3f!SK<@m$;ikc zJ%9ZHU(TOT<leokS+fR>r{7=78;u)pVA3QP+r|?zOP9LQcSz=A2%)UZo>!5I72%Ch zg<~OicMtS>Jwga7RH%STRdRHmYhkN;S1t0KYv&FzYV;_sUAv}y=i%W&vu4eBJ}3xX zg$kTMf1V2$E|8d*2*9t$e<e6Ln2$dCh<`UnPj)I)T)klfvMl53X2X>^**UCQy^0z0 z9aAD91Uj7#v)PQ*YDJPHGBPqa7QL-R1;`IgA|fJ?Bngd1gVk!qVzHoBmz)K%J0tYn zx7hmQRx}z7CX<QYy?Zlu>{x0v3{nQHH&_6$q+esjiWMwfvJ|7q$eA-|=-IO;dw(ML zf?Kt}7B&jgJ@iI!^QH|Oy;eqVlzv;q+O-;{OtE31w5);(VzpYZSZwRDe*Jp<nzcb> z-$ke^lz4xu#=X$*lP~{D@0WXHG#UZ$^z<Y&G?ebaJ;1FR8cCp0tCW3^@aul&%$dXC z!-tV1iO)a(9D~8Yuy;OjXq<Y3g?}G^{1G7pZCcyHrhQRS{QIYWGs~1wWIqeeg>BQj zxVRw8GG?=xZQHgxtVAY@Ow`^eEEbDhSm-dZppgVy)`YS3$F1meI!q=LvuDrdvxTb_ z1<D<;V$mu+&4*JzBQi1)FE1}7N#gqT>%2W?^j{7ejZ>I9+2)OwxRyzQTz_>|zL@K( zc%i}+=%Ec({;FEl=2>Kys#rDdB_2h|(4j*W1!~%~Dbdl<y!O@@#W0#IvfVyt5ZHm0 z8zLDqW(;Pt8Ld{!f&~k>aAcoDW4(Op0Evl-$g)i5PMzu9`(<PxH8qt@>%O-mHA=#I z03ADaq+Ppq033{sb$HHCAAj7<t=qTo^75i}>(*GUj*~blfQ;lz%$_wHNs=%a41|V; zGVa|EN@k9-OnCb@XVa!l=yW>NYBdKA9AMwp)lP0ip&X^(%;K@!$JstTnm4jBb?P!P zb?LWNgs;^wVM0lHp}hN>Or|oAdC{DYxq9^~k|a^RT6H$<*oV4uZGY0TO1}5R&^Zhm zGzg>7h)Sj6z4za9sLj=@^Y+T$n*WUsUAikF)IZn!(@tR>GC;1b^zLQzKFN2IIsDTW zhpyYYZ7V_ug)GaD&q`FH%5ECM!`G3MlY`Z2rFrw_ygu>+ZlvfPzDYpK){Gi83bWaa z5Q0UE78N)rD>;EfQGc5_6txLqHB#A4gE{Rgv3u4rf98kGnlhdr*Dm4msh^!*{A=eA zv19#mzL++N*`X8IxOx%4ojq9MbqT-j=TOupE}cA(7ZyCYPHg0Q!sh-jGd~{3+T~wy zHZHP6Z&V;}wA8Is-pEyFWo|w%RD51Y*x`aQ(X`nqtXcC<gnvq4u~?WseL5Z<9!`X| zG9S<U8c$D80IpuWO5~Q6#Tp^&gX=^_?tRF})#B+UFF*w^TD5A05Q6ylc+MQ!<J36x zdOhtzUdP47hEsR%-tEwJ(b3V!vP^Jru+wv?PRlY88My}`1hOnMY}ha~l5mP)xsjr0 z$dDl{U%s4-jDHLg6B9{15l#Jo_6k+HdCwj``NS3{ABsD~fjuXgGGz*>si_6-_gu^8 zm_L6$-nE+-+wR3<Kk?aTpL6{9u|j`u*svk*z5hOKy7n*h_i59nar*RWo`3#%A|ku8 zaQ<g}_w9G2+)F8NZv6)JS+HOMb)ISK05+0Kjg9hSA%9n0Ni}khFDG^Qml!fLZ7f{v z+O=uZZGb}_$Zj*K)eIgym~X!M1|bBSH*V&oK7TKgP}sD451E-Z5~f$LUdnH8zVRlp zv9SmtShHpgb6@D@IMbJ%jZY;VEm}NBY-}vi(a|Mdb9Db!l9Q9EpsPSo$5#md$Cplx zTXpa1X@4$UynrmrxVyX4xm!=CDM|p1ryp(GwpFa+p+kohD`YfV(dl$Zl0>CSl~}fP z8DqwbAvHA>e}8}a_US{PK7H`^_6FeC(PMP))}7zuj~3b9o{cN$+qbWxKvle|(7k(i z1`HU0pI>bN;^X5PIbsA$=NArgJv=;+BndAsFMsCDoXX6ZGfBCZLKUwn)U8_=e}8}F z+{A=L`n=MIJ6BFPfQ@pQI_I#FtIo<7UpVT8>^+gAAh;;mw=WOF1PAwU7>hjWjb48F zWi%QMvMh7<{5iYi{G)`z<}I6*{nD>rKjpW!!LQ=!>4_}M{Pfem$x2RexDQsV6|F`h zB!8p_AanQbU4H#}N3qvz-n<zh1TBMFQq$X&oSYn|43+A{i4&MjW&rBet&6PlEF~D0 z2nw>15V9<D=FAy8Wt3$Zi^YOouV>Y&Re)gn^yx%IpJ2vUE1CJ#N`5{TPv3rh6}LQc z)W|~HN<0zGd+)!8BuNM%2o0UW&nGUkcz@-37Jj#qod-^_Y}qoZR;`K<f`tnga{R!y z0-=S;WWr*xaNxiJ=Fk6<>NTpfWXTd@kDOxrzmF3UeS%G!HsR;zhgz++5iYZ4mw=7r zJZyB+hK-!ULg6+n<XClrY-bQ^dY8WR=-l~pdEt4$vrc1?T=A(BK$R+0Y~x8w<A3Vq zi-kuo7Y`G6I1V8M0RaK{)CsWLOTpcPZFF}|He0rAaTw=Hl0;^<iB6q5<LYXgj~zRT zRw7|YCHCM!WLc(X&z_1R7G|i5^uSlHTvk5#`ISD$qc>QnTeq(A`QE*IMRNK8AAI;e z6F-<@hrMJWF=PG;GBYxXjEp2HDSwHLtG?#-;S=o?a`NQKiuIi{XAYAmPv-o!bh3?B zvW>P07%^f5jT$%N<=!uonwrYYnX}m1&Ytef1&`U;*;KDyo$cGUQNM9>yFPX4-isyf z73mS&10e(_ib+7*uu%?^Cb=L#Wa^eJb*0~sEQh?%l(`kDSWzy4kt=*o$A69;i-(5? z7K^3Wm|m;Z@_E<~1-`#|^Jd;Y@b@c|SM&Gx=l1Q}0NhEw!_!R)k~ZtsuLBumWL|ys zRjPVux%<GV?4`j&2D5&{ddy}sYuB!2(3p=Lo{O|B6Rtk>2x=Kb^nqyh@88dK*@7$z zde`Wv-K5^XkGs1&T{?HMV}JS_4(F`-Hm63TDHF3*zkYq?@1&%pJS%Os+F5@;KR@0Y z8(JiJ@#&|ZqE@RBLa<@|20H~xJP}QNd^`Znn>VNDYoj@Tt>EJU=dY#H`i0iK@#Y)I zvP@!PBF7JGFWjEXGDC+BEucWTc&}EYRs;qHBFi$FnHk)_cBVw8&VORg%^RuNyjoQv zQ<ulc8J(`w7D5mk8_TX;yNHa8WY3;GMIPI?Z%59!VSl}Bv16ljT3s3Fd5L=U>gBE1 zr9>*bX$sBB0C;(N5%S8biUQ?I%|_4Dpg{v0adhn(Cu4Ux-IpFAJpf2aN#RIz;oc}> zX9PkBf`Wq3R`Dk}HGkV_VnL<VX`e{`<k61gE|M(E^zPle*qGbBS|ge^X^Je%BqSz~ zc{^VDZU6rL%HP9=4Wr4^m2lCjsO#%$cT}mUMv^4nc>N6}?2Czsu`?36eUv1LHf`Dz z%Sh&0XM@4Og9i_a^+ppOVk23$VWTBWT#Cg;xmd`}%~32=(0>SMG#a#8ZHb46hX*RP zy^_d6aws$ZxFl}h7H-_IDRP%CUGS?_Fgf3_rUwHD4pcrbUAENecG|UThnt%lvMd)G z(peu|CnhEaS(fP@++9&{r`fsuAj&FROGPT=w>r7vTg^9bW2se2$5bj6ZQHgjG3IXE zq%o&XpTc6XaDO}bHuZcPDr7;f0-QQ^im*jtWb3n0sUB5Ykkk_CY3aDSx{{TZMOs=~ zq2tqPwN%U3-$K2N(PS5Q7ne8c`Uq2(n>Q+osmsMejxlnDD^YlOIE@-LB0IZqOPb5R zs#Gdumx3if`SVQ9BpM3~>n~r<g9tTi)-1sCg|Azyuzz`N|EDcU$yu0Ee^bIJS(Zt# zRwF1V2%S!c!C>H*g9k~yeiqMK%^dEF+fxk)Y!OIoOstLV%NNpVBtb+}6d4&A`1tq` z+^a7#6k^;<)(3U%+O?Grw{P7plN-N$DR1(sSF2uxhXNlTpAzyef|e~?vTofvWLf4? z;w2gfwtvTDkrfLjgkZ&r6;Ac>`0?XKZbFmEjMhQVT2dm;zNRj(ilH!U^e7f8?eju@ zetu{x*Fw0L&ItPY`YJf~_N`lXK;K!pa^;Hhcdc6X75*8&UnF{eG(reeDixujp_o4W zu+YdwrBWfwGHSINv)RnQ{`D^=hR$)=&}$??aDVq;Vt$SxIXRi52O^X*Ad^LA_wL;Y zA?VPd1G3gesA<)zA{o#k!?{+iTA_YuSx=ohRU{?phy^-&^oa7gdGqFlhHSC}bgV|L zvI{TrpRd#D6p!ZT=SRJI^{897Zm~z5I(6{#^DD5R#f6_`5&P$j^1RXJ9|~flvS6Y7 z3xAxGlT+#_LL&*9H*c=YK}_tyQc>JstG&xr#>$l|Q>SsDT{}B>?Zj+0qf)6b8jYl< zr=!>F$;!&IJM?-znVFdwjYcJjzh%o7r^aZq$aL;(W9ftt?A*CCZ%?IP<H(UCwghXB z;4<an)KzN#jiybTar(?@GBY#TyK5U=UVnMZ>B+M`xK4C*UgrOW7hWhlWP8ZSl%$X+ zPT2A>LM3R>pn)=ZxeBGzRbb1OE$FJ$;g2Y}RSXmJRd_G?&V{~%v+TXl7Zshz3l+V< z&N51mZnk#q+p%`7EzH`zdlzFT&n{IovSsrYOePaT2%0u+idAy4YiIqs^-3uB_J7-N z<Lm3IoL`i2`}W&!Nls2CIXRiwJ?nX~+d#+r<Wrv(Em{y06T^W62M|^xmE7I<Zuth% z)6?;(>ceyGdOKvOid3S?ZW=;*hH&ciDTEM&g@rk-L^Zu#nY!Q~WMyR`guvh5pL)-> zD>8Jtlz54!>I4>h&)<Ig&9*s&3V&bUJiOAhX;V&~JV{noCZ|uIre%jZ4qMx@;Jwm# zqpp38)LEn>Dajri^&28T7A)k*0y`=%zBCYT?@;dDyGK$|5<hMGfg!_2J5~Obons_? zUAXe#-z%@YVmI&S4)0ZP^E1yp!>l>;xu0PuG>kHut>_IFYI?hJ=gwUgEq@9FY_)dI zC=tMGufIl2j4h=5DPlb#{oi8O&YiYUu2V;c4ONlhTw0ciH%3fSs(>$FzRb6CLmf`s zX(YkngV8Kox)ilqjV#NIA3wfW5FE8{Ux_tUCr+F|2!WrUAMVu}DQz`rl9zPYx^-KL z{X2g+ib*2|GVO!WP8Y^L4u5YnZrmeP3`^V)vP?~HGjry+lo1O(UZXH}>{tbZ%$PBQ z#0#gLy8hG2Z!4i(ty;C{-ha5A;R+8ASMX#=j}UI8=+PT2=nWRqvP^bIZWMDPMNj|! z{gm+j&@YF$aq);#{c7KRpi&JJcPNhZ+m|_Y>NK(})9Yb^wJe58m48cd&YL$6S(edi zwJct|n9n{f`AJouN;;Cx#?iljf6QhJX0w?tUAoY<&(I>TktB)TyLOTGdwh{zZPm(E zq^GCb2HC5Zl4mekY+2=s72Q#(R76DV;8x->d@2>4*I4lN0wVWD5*{92Xr11Z_C^J< zk;J-{GB;AxtXrooC4Uxr{GJG4z~3hl6cmKnY$hcog}#0J@Zk3g1@b(F$-HUrvVQ$~ zv|24ztF=H8vh~4r_U_%Q?13&_yExo0Z@=aQ1O(U^Mr6Xn|K${BlZ8Z^7uz6&;OMcV zEMLAHi^W3qYSnr6#U5pzH^uz5?C>&U-yVn2XhfsY@WtFOcz<VjKf7A7{2kA@b&=2y z-=RlH4>B?`F`LcQsZ)oAOMfV~K}nLx%*<r$*s%rf39#}Xi&+@95FrHK-rkHH|Dhd4 zTEVL}BSs8YXxNb>M{?oJ(LyKn>scRg=$AvNR4V-a{pmmS-TxRi%6*fm5Hf4lxHEBt z4o}arF>;UF6Mq3LUc6Yb+E=e$qjTpj{P2&32&++v2J%M{rw;Do^<M4y{`>EdBnhL@ z$doCe1;Y7VyLKtzew#LJs9dwDQ~k<KnhPP=wrxAvY0fdpAt52ivdopsS6IG$1wsfq zcIx<89-Fbtu)RHb7Fw-_ufF~YfPGQ>*cY{rCQX{qxPNhDYS(_6yLVGKbM_1uFI==M z)N9e=IaaU!-VR6>Cb^H?9zA-LPC<?6KcGLIJ9p;h?>E`{<5tC50etn<R|W28vd9d7 zcN#~I9O2->gIu|Cg>El(qeqV(bZFm!>NTo!?AS5(?AgPyW5*P7BJ5#IZD&DLDkMp= z<$X$+%YWQ+on`VK%^L{;Nl7Y_k}5EDYH6`ho<Wix^D9?fed-gjGlIc`29uDGKvq^J zAAkHY^XAQ?L4yVa1U!pctsx;HfeRNd*gZn75-L9VbQ=BMno!`r;o;%R)1rO)^l=)a zcJ1C9kEx%a*Xv13OJnDbt@Il-8oj|*=9D`ZMSl@2Z94VF)AK_fJa~ZFY%|LJ`}Z%j z54ra%l@b9ApE!-yFScgh+<6>1Vv9Y`pFhv}^XCf>>3n<`J!&)qhfi{-L5s!0#EBER zc<~~;ckd=FER3))`wi~x?ah~8eo5f}6dkWFTf37_CJkfr=FRB!dNyv{$i|Hu3x<a^ zYk%_1H(%r5tl;zdnVFebEEck|vPw)aW@Tk5%%It9E;UmpsjUy^P3G0%WqXfYdV0Fj zr?OUY=NEV1M*J9cgm34D^1}~5kdcwW{rmTci;E*JF0RmP+O}=Wj2SbiQ9rQ2#ylGr zsl4<?tI_aMw-BdE9<{3%At50OgSceL5`TgRj8Mj|*XxyaD%5AIw6uDm6}xxYo-e9V zqeh|RmsYJJCnralPe&ehEVS06Ny{#*+SrA&aeIl5-p_@L7r1f#2KVpZN3B-l=jTVY z>ecDosS}+-1|qARD;;|3sizqJ?lju`a}j$Z_j2ysIV4G<Zr!>B1qCs3)M$s^(|<5y z!3u^B9m=Lnn@C7V;PU0m7z_rgR;^0y+O_H0wJSXajx3sydhtcPy}i+DwYa&u728&e z=UQMe*q9_QFRxNDb$$ygaP=z4vWnru%jSguUV7;z?%%&}+xYJ8JZ^b^>Kuj)8A5b) zG%+zT+`W63OP4Mwugt1ZqXx~IHh-mOuU^z@+)9ZQ9+m6YuhXGJ2LJ+|4Z!N+T`C&> z%{SlV)~#CzA+TDl81E;c_43EX&4aF8yJ9k#2nZ-TNj!MaU~;l;(Nni>g+HToC*459 zh7Fbe=4XbBM5fNXi(3>?3F}DyVEy-t`RF5CCGPa;(-|`Qy;7IkKZ!p6e}71Hgod$W zU8z+I_Qd{q-l_d)==Es%%>QTV;EyOyRUJOA&8bqUo`?cH&OSZ~X&+)DvVJB{`B?r` zo8(a?$v?+`bp>)-iJqi&`>ROJh8D`@ze~#Bj$SV1@@G*Z`^x9?5TIPjmB@L(FUtQt fV!8Zx%KrhhV87K|@rjNA015yANkvXXu0mjfCxiWC -- GitLab