From e72e85a6105d400bc2312b3838c93bb35cdb3c2d Mon Sep 17 00:00:00 2001 From: Marc Pouget Date: Tue, 21 Feb 2006 12:47:39 +0000 Subject: [PATCH] initial --- .gitattributes | 6 + Ridges_3/doc_tex/Ridges_3/Ridges_3_user.tex | 158 +++ .../doc_tex/Ridges_3/ellipsoid_ridges.eps | 592 ++++++++++ .../doc_tex/Ridges_3/ellipsoid_ridges.pdf | Bin 0 -> 2404 bytes .../Ridges_3/ellipsoid_ridges_mesh.eps | 1016 +++++++++++++++++ .../Ridges_3/ellipsoid_ridges_mesh.jpg | Bin 0 -> 49681 bytes .../Ridges_3/ellipsoid_ridges_mesh.pdf | Bin 0 -> 39619 bytes Ridges_3/doc_tex/Ridges_3/main.tex | 8 + Ridges_3/include/CGAL/PolyhedralSurf.h | 226 ++++ Ridges_3/include/CGAL/algo.C | 379 ++++++ Ridges_3/maintainer | 2 + 11 files changed, 2387 insertions(+) create mode 100644 Ridges_3/doc_tex/Ridges_3/Ridges_3_user.tex create mode 100644 Ridges_3/doc_tex/Ridges_3/ellipsoid_ridges.eps create mode 100644 Ridges_3/doc_tex/Ridges_3/ellipsoid_ridges.pdf create mode 100644 Ridges_3/doc_tex/Ridges_3/ellipsoid_ridges_mesh.eps create mode 100644 Ridges_3/doc_tex/Ridges_3/ellipsoid_ridges_mesh.jpg create mode 100644 Ridges_3/doc_tex/Ridges_3/ellipsoid_ridges_mesh.pdf create mode 100644 Ridges_3/doc_tex/Ridges_3/main.tex create mode 100644 Ridges_3/include/CGAL/PolyhedralSurf.h create mode 100644 Ridges_3/include/CGAL/algo.C create mode 100644 Ridges_3/maintainer diff --git a/.gitattributes b/.gitattributes index 384c8eef94e..8ec8d89f1a0 100644 --- a/.gitattributes +++ b/.gitattributes @@ -1247,6 +1247,12 @@ Qt_widget/doc_tex/Qt_widget/triangulation.gif -text svneol=unset#unset Qt_widget/doc_tex/Qt_widget/triangulation.pdf -text svneol=unset#unset Qt_widget/src/CGALQt/CGALQt.sln -text Qt_widget/src/CGALQt/CGALQt.vcproj -text +Ridges_3/doc_tex/Ridges_3/ellipsoid_ridges.eps -text +Ridges_3/doc_tex/Ridges_3/ellipsoid_ridges.pdf -text +Ridges_3/doc_tex/Ridges_3/ellipsoid_ridges_mesh.eps -text +Ridges_3/doc_tex/Ridges_3/ellipsoid_ridges_mesh.jpg -text +Ridges_3/doc_tex/Ridges_3/ellipsoid_ridges_mesh.pdf -text +Ridges_3/include/CGAL/algo.C -text Robustness/demo/Robustness/robustness.vcproj -text SearchStructures/doc_tex/SearchStructures/d-range.eps -text SearchStructures/doc_tex/SearchStructures/d-range.gif -text svneol=unset#unset diff --git a/Ridges_3/doc_tex/Ridges_3/Ridges_3_user.tex b/Ridges_3/doc_tex/Ridges_3/Ridges_3_user.tex new file mode 100644 index 00000000000..38e439aba00 --- /dev/null +++ b/Ridges_3/doc_tex/Ridges_3/Ridges_3_user.tex @@ -0,0 +1,158 @@ +This chapter describes the \cgal's package for the extraction of +ridges on meshes. Given a smooth surface, a ridge is a curve along +which one of the principal curvatures has an extremum along its +curvature line. Ridges are curves of {\em extremal} curvature and +therefore encode important informations used in segmentation, +registration, matching and surface analysis. Based on the results of +the article \cite{rr}, we propose several algorithms to identify and +extract different parts of this singular ridge curve and some of its +singularites on a surface given as a mesh. + + +\subsection{Overview} +%%%%%%%%%%%%%%%%%%%%%% + +2 main versions + +\begin{itemize} +\item +non-topologically oriented: we output several lists of ridges which +are polylines, each list associated to a type: crest min/max, +ellip/hyper, red/blue. + +each line has a weight enabling interactive filtering for the visu + +\item +topologically oriented : we output a list of umbilics and some lists +of ridges outside umbilic patches, turning points? +\end{itemize} + + +%%%%%%%%%%%%%%%%%%%%%%% +\section{Introduction} +\label{sec:intro} +%%%%%%%%%%%%%%%%%%%%%%% + +\subsection{Ridges of a smooth surface} +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +A comprehensive description of ridges can be found in +\cite{ip-nss-71,hgyg-ttdpf-99,ip-gd-01}, and in the sequel, we just +introduce the basic notions so as to explain our algorithms. +Consider a smooth embedded surface, and denote $k_1$ and $k_2$ the +principal curvatures, with $k_1\geq k_2$. Umbilics are the points +where $k_1=k_2$. For any non umbilical point, the corresponding +principal directions of curvature are well defined, and we denote them +$d_1$ and $d_2$. In local coordinates, we denote $\langle , \rangle$ +the inner product induced by the ambient Euclidean space, and $dk_1$, +$dk_2$ the gradients of the principal curvatures. Ridges, illustrated +on Figs \ref{pict:ellipsoid_ridges} and \ref{fig:ridges_ellipsoid}, +are defined by: +%% +\begin{definition} +\label{def:ridge-extrema} +A non umbilical point is called +\begin{itemize} +\item +%a blue ridge point if $\langle dk_1,d_1 \rangle=0$, +a blue ridge point if the {\em extremality coefficient} $b_0=\langle +dk_1,d_1 \rangle$ vanishes, i.e. $b_0=0$. + +\item +%a red ridge point if $\langle dk_2,d_2 \rangle=0$. +a red ridge point if the {\em extremality coefficient} $b_3=\langle +dk_2,d_2 \rangle$ vanishes, i.e. $b_3=0$. + +\end{itemize} +\end{definition} +%We denote $b_0=\langle dk_1,d_1 \rangle$ and $b_3=\langle dk_2,d_2 +%\rangle$, and we call these functions the {\em extremality +%coefficients}. +%% +Notice that, as the principal curvatures are not differentiable at +umbilics, the extremality coefficients are not defined at such +points. In addition, the sign of the extremality coefficients is not +defined since the principal directions can be oriented by two opposite +unit vectors. Apart from umbilics, special points on ridges are {\em +purple} points, which correspond to intersections between red and a +blue ridges. The previous characterization of ridges involves +third-order differential properties. Using fourth-order differential +quantities, a ridge point can further be qualified as {\em elliptic} +if it corresponds to a maximum of $k_1$ or a minimum of $k_2$, or {\em +hyperbolic} otherwise. Ridges of a given color change from elliptic to +hyperbolic at special points called {\em turning} points. + +The calculation of ridges poses difficult problems, which are of three +kinds. + +\paragraph{Topological difficulties.} +Ridges of a smooth surface form a singular curve on the surface, with +self-intersections at umbilics (more precisely at so-called 3-ridges +umbilics), and purple points. Moreover, ridges have complex +interactions with curvature lines at turning points. From the +application standpoint, reporting ridges of a surface faithfully +requires reporting umbilics, purple points and turning points. + +\paragraph{Numerical difficulties.} +As pointed out above, ridges are characterized and qualified through +third and fourth order derivatives of the surface. Estimating them +depends on the particular type of surface processed ---implicitly +defined, parameterized, discretized by a mesh--- and is numerically a +difficult task. + +\paragraph{Orientation difficulties.} +Since coefficients $b_0$ and $b_3$ depend on a given orientation of +the principal directions, their sign is not well defined. +Practically, tracking the sign change of functions whose sign depends +on the particular orientation of the frame in which they are expressed +poses a problem. In particular, tracking a zero-crossing of $b_0$ or +$b_3$ from sign changes along a curve segment on the surface imposes +to find a coherent orientation of the principal frame at the +endpoints. Given two principal directions at these endpoints, one way +to find a local orientation consists of choosing two vectors so that +they make an acute angle, whence the name {\em Acute Rule}. +%% + +\begin{minipage}[c]{.45\linewidth} +\begin{figure}[H] +\centerline{ +\includegraphics[height=5cm]{Ridges_3/ellipsoid_ridges_mesh}} +\caption{Umbilics, ridges, and principal blue foliation on the +ellipsoid (10k points)} +\label{pict:ellipsoid_ridges} +\end{figure} +\end{minipage} +%% +\hfill +%% +\begin{minipage}[c]{.45\linewidth} +\begin{figure}[H] +\centerline{ +\includegraphics[height=5cm]{Ridges_3/ellipsoid_ridges}} +\caption{Schematic view of the umbilics and the ridges. Max of $k_1$: +blue; Min of $k_1$: green; Min of $k_2$: red; Max of $k_2$: yellow} +\label{fig:ridges_ellipsoid} +\end{figure} +\end{minipage} + + + +%%%%%%%%%%%%%%%%%%%%%%% +\section{Software Design} +%%%%%%%%%%%%%%%%%%%%%%% + + +\subsection{Options and interface specifications} +%%%%%%%%%%%%%%%%%%%%% + +\subsection{Template parameters} +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +\subsection{Output} +%%%%%%%%%%%%%%%%%%%% + + + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\section{Examples} +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/Ridges_3/doc_tex/Ridges_3/ellipsoid_ridges.eps b/Ridges_3/doc_tex/Ridges_3/ellipsoid_ridges.eps new file mode 100644 index 00000000000..4af13852994 --- /dev/null +++ b/Ridges_3/doc_tex/Ridges_3/ellipsoid_ridges.eps @@ -0,0 +1,592 @@ +%!PS-Adobe-2.0 EPSF-2.0 +%%Creator: dvips(k) 5.94a Copyright 2003 Radical Eye Software +%%Title: 28549.dvi +%%BoundingBox: 80 530 339 721 +%%EndComments +%DVIPSWebPage: (www.radicaleye.com) +%DVIPSCommandLine: dvips -E -o ridges_ellipsoid.eps 28549.dvi +%DVIPSParameters: dpi=600 +%DVIPSSource: TeX output 2004.09.02:1750 +%%BeginProcSet: tex.pro 0 0 +%! +/TeXDict 300 dict def TeXDict begin/N{def}def/B{bind def}N/S{exch}N/X{S +N}B/A{dup}B/TR{translate}N/isls false N/vsize 11 72 mul N/hsize 8.5 72 +mul N/landplus90{false}def/@rigin{isls{[0 landplus90{1 -1}{-1 1}ifelse 0 +0 0]concat}if 72 Resolution div 72 VResolution div neg scale isls{ +landplus90{VResolution 72 div vsize mul 0 exch}{Resolution -72 div hsize +mul 0}ifelse TR}if Resolution VResolution vsize -72 div 1 add mul TR[ +matrix currentmatrix{A A round sub abs 0.00001 lt{round}if}forall round +exch round exch]setmatrix}N/@landscape{/isls true N}B/@manualfeed{ +statusdict/manualfeed true put}B/@copies{/#copies X}B/FMat[1 0 0 -1 0 0] +N/FBB[0 0 0 0]N/nn 0 N/IEn 0 N/ctr 0 N/df-tail{/nn 8 dict N nn begin +/FontType 3 N/FontMatrix fntrx N/FontBBox FBB N string/base X array +/BitMaps X/BuildChar{CharBuilder}N/Encoding IEn N end A{/foo setfont}2 +array copy cvx N load 0 nn put/ctr 0 N[}B/sf 0 N/df{/sf 1 N/fntrx FMat N +df-tail}B/dfs{div/sf X/fntrx[sf 0 0 sf neg 0 0]N df-tail}B/E{pop nn A +definefont setfont}B/Cw{Cd A length 5 sub get}B/Ch{Cd A length 4 sub get +}B/Cx{128 Cd A length 3 sub get sub}B/Cy{Cd A length 2 sub get 127 sub} +B/Cdx{Cd A length 1 sub get}B/Ci{Cd A type/stringtype ne{ctr get/ctr ctr +1 add N}if}B/CharBuilder{save 3 1 roll S A/base get 2 index get S +/BitMaps get S get/Cd X pop/ctr 0 N Cdx 0 Cx Cy Ch sub Cx Cw add Cy +setcachedevice Cw Ch true[1 0 0 -1 -.1 Cx sub Cy .1 sub]{Ci}imagemask +restore}B/D{/cc X A type/stringtype ne{]}if nn/base get cc ctr put nn +/BitMaps get S ctr S sf 1 ne{A A length 1 sub A 2 index S get sf div put +}if put/ctr ctr 1 add N}B/I{cc 1 add D}B/bop{userdict/bop-hook known{ +bop-hook}if/SI save N @rigin 0 0 moveto/V matrix currentmatrix A 1 get A +mul exch 0 get A mul add .99 lt{/QV}{/RV}ifelse load def pop pop}N/eop{ +SI restore userdict/eop-hook known{eop-hook}if showpage}N/@start{ +userdict/start-hook known{start-hook}if pop/VResolution X/Resolution X +1000 div/DVImag X/IEn 256 array N 2 string 0 1 255{IEn S A 360 add 36 4 +index cvrs cvn put}for pop 65781.76 div/vsize X 65781.76 div/hsize X}N +/p{show}N/RMat[1 0 0 -1 0 0]N/BDot 260 string N/Rx 0 N/Ry 0 N/V{}B/RV/v{ +/Ry X/Rx X V}B statusdict begin/product where{pop false[(Display)(NeXT) +(LaserWriter 16/600)]{A length product length le{A length product exch 0 +exch getinterval eq{pop true exit}if}{pop}ifelse}forall}{false}ifelse +end{{gsave TR -.1 .1 TR 1 1 scale Rx Ry false RMat{BDot}imagemask +grestore}}{{gsave TR -.1 .1 TR Rx Ry scale 1 1 false RMat{BDot} +imagemask grestore}}ifelse B/QV{gsave newpath transform round exch round +exch itransform moveto Rx 0 rlineto 0 Ry neg rlineto Rx neg 0 rlineto +fill grestore}B/a{moveto}B/delta 0 N/tail{A/delta X 0 rmoveto}B/M{S p +delta add tail}B/b{S p tail}B/c{-4 M}B/d{-3 M}B/e{-2 M}B/f{-1 M}B/g{0 M} +B/h{1 M}B/i{2 M}B/j{3 M}B/k{4 M}B/w{0 rmoveto}B/l{p -4 w}B/m{p -3 w}B/n{ +p -2 w}B/o{p -1 w}B/q{p 1 w}B/r{p 2 w}B/s{p 3 w}B/t{p 4 w}B/x{0 S +rmoveto}B/y{3 2 roll p a}B/bos{/SS save N}B/eos{SS restore}B end + +%%EndProcSet +%%BeginProcSet: special.pro 0 0 +%! +TeXDict begin/SDict 200 dict N SDict begin/@SpecialDefaults{/hs 612 N +/vs 792 N/ho 0 N/vo 0 N/hsc 1 N/vsc 1 N/ang 0 N/CLIP 0 N/rwiSeen false N +/rhiSeen false N/letter{}N/note{}N/a4{}N/legal{}N}B/@scaleunit 100 N +/@hscale{@scaleunit div/hsc X}B/@vscale{@scaleunit div/vsc X}B/@hsize{ +/hs X/CLIP 1 N}B/@vsize{/vs X/CLIP 1 N}B/@clip{/CLIP 2 N}B/@hoffset{/ho +X}B/@voffset{/vo X}B/@angle{/ang X}B/@rwi{10 div/rwi X/rwiSeen true N}B +/@rhi{10 div/rhi X/rhiSeen true N}B/@llx{/llx X}B/@lly{/lly X}B/@urx{ +/urx X}B/@ury{/ury X}B/magscale true def end/@MacSetUp{userdict/md known +{userdict/md get type/dicttype eq{userdict begin md length 10 add md +maxlength ge{/md md dup length 20 add dict copy def}if end md begin +/letter{}N/note{}N/legal{}N/od{txpose 1 0 mtx defaultmatrix dtransform S +atan/pa X newpath clippath mark{transform{itransform moveto}}{transform{ +itransform lineto}}{6 -2 roll transform 6 -2 roll transform 6 -2 roll +transform{itransform 6 2 roll itransform 6 2 roll itransform 6 2 roll +curveto}}{{closepath}}pathforall newpath counttomark array astore/gc xdf +pop ct 39 0 put 10 fz 0 fs 2 F/|______Courier fnt invertflag{PaintBlack} +if}N/txpose{pxs pys scale ppr aload pop por{noflips{pop S neg S TR pop 1 +-1 scale}if xflip yflip and{pop S neg S TR 180 rotate 1 -1 scale ppr 3 +get ppr 1 get neg sub neg ppr 2 get ppr 0 get neg sub neg TR}if xflip +yflip not and{pop S neg S TR pop 180 rotate ppr 3 get ppr 1 get neg sub +neg 0 TR}if yflip xflip not and{ppr 1 get neg ppr 0 get neg TR}if}{ +noflips{TR pop pop 270 rotate 1 -1 scale}if xflip yflip and{TR pop pop +90 rotate 1 -1 scale ppr 3 get ppr 1 get neg sub neg ppr 2 get ppr 0 get +neg sub neg TR}if xflip yflip not and{TR pop pop 90 rotate ppr 3 get ppr +1 get neg sub neg 0 TR}if yflip xflip not and{TR pop pop 270 rotate ppr +2 get ppr 0 get neg sub neg 0 S TR}if}ifelse scaleby96{ppr aload pop 4 +-1 roll add 2 div 3 1 roll add 2 div 2 copy TR .96 dup scale neg S neg S +TR}if}N/cp{pop pop showpage pm restore}N end}if}if}N/normalscale{ +Resolution 72 div VResolution 72 div neg scale magscale{DVImag dup scale +}if 0 setgray}N/psfts{S 65781.76 div N}N/startTexFig{/psf$SavedState +save N userdict maxlength dict begin/magscale true def normalscale +currentpoint TR/psf$ury psfts/psf$urx psfts/psf$lly psfts/psf$llx psfts +/psf$y psfts/psf$x psfts currentpoint/psf$cy X/psf$cx X/psf$sx psf$x +psf$urx psf$llx sub div N/psf$sy psf$y psf$ury psf$lly sub div N psf$sx +psf$sy scale psf$cx psf$sx div psf$llx sub psf$cy psf$sy div psf$ury sub +TR/showpage{}N/erasepage{}N/copypage{}N/p 3 def @MacSetUp}N/doclip{ +psf$llx psf$lly psf$urx psf$ury currentpoint 6 2 roll newpath 4 copy 4 2 +roll moveto 6 -1 roll S lineto S lineto S lineto closepath clip newpath +moveto}N/endTexFig{end psf$SavedState restore}N/@beginspecial{SDict +begin/SpecialSave save N gsave normalscale currentpoint TR +@SpecialDefaults count/ocount X/dcount countdictstack N}N/@setspecial{ +CLIP 1 eq{newpath 0 0 moveto hs 0 rlineto 0 vs rlineto hs neg 0 rlineto +closepath clip}if ho vo TR hsc vsc scale ang rotate rwiSeen{rwi urx llx +sub div rhiSeen{rhi ury lly sub div}{dup}ifelse scale llx neg lly neg TR +}{rhiSeen{rhi ury lly sub div dup scale llx neg lly neg TR}if}ifelse +CLIP 2 eq{newpath llx lly moveto urx lly lineto urx ury lineto llx ury +lineto closepath clip}if/showpage{}N/erasepage{}N/copypage{}N newpath}N +/@endspecial{count ocount sub{pop}repeat countdictstack dcount sub{end} +repeat grestore SpecialSave restore end}N/@defspecial{SDict begin}N +/@fedspecial{end}B/li{lineto}B/rl{rlineto}B/rc{rcurveto}B/np{/SaveX +currentpoint/SaveY X N 1 setlinecap newpath}N/st{stroke SaveX SaveY +moveto}N/fil{fill SaveX SaveY moveto}N/ellipse{/endangle X/startangle X +/yrad X/xrad X/savematrix matrix currentmatrix N TR xrad yrad scale 0 0 +1 startangle endangle arc savematrix setmatrix}N end + +%%EndProcSet +%%BeginProcSet: color.pro 0 0 +%! +TeXDict begin/setcmykcolor where{pop}{/setcmykcolor{dup 10 eq{pop +setrgbcolor}{1 sub 4 1 roll 3{3 index add neg dup 0 lt{pop 0}if 3 1 roll +}repeat setrgbcolor pop}ifelse}B}ifelse/TeXcolorcmyk{setcmykcolor}def +/TeXcolorrgb{setrgbcolor}def/TeXcolorgrey{setgray}def/TeXcolorgray{ +setgray}def/TeXcolorhsb{sethsbcolor}def/currentcmykcolor where{pop}{ +/currentcmykcolor{currentrgbcolor 10}B}ifelse/DC{exch dup userdict exch +known{pop pop}{X}ifelse}B/GreenYellow{0.15 0 0.69 0 setcmykcolor}DC +/Yellow{0 0 1 0 setcmykcolor}DC/Goldenrod{0 0.10 0.84 0 setcmykcolor}DC +/Dandelion{0 0.29 0.84 0 setcmykcolor}DC/Apricot{0 0.32 0.52 0 +setcmykcolor}DC/Peach{0 0.50 0.70 0 setcmykcolor}DC/Melon{0 0.46 0.50 0 +setcmykcolor}DC/YellowOrange{0 0.42 1 0 setcmykcolor}DC/Orange{0 0.61 +0.87 0 setcmykcolor}DC/BurntOrange{0 0.51 1 0 setcmykcolor}DC +/Bittersweet{0 0.75 1 0.24 setcmykcolor}DC/RedOrange{0 0.77 0.87 0 +setcmykcolor}DC/Mahogany{0 0.85 0.87 0.35 setcmykcolor}DC/Maroon{0 0.87 +0.68 0.32 setcmykcolor}DC/BrickRed{0 0.89 0.94 0.28 setcmykcolor}DC/Red{ +0 1 1 0 setcmykcolor}DC/OrangeRed{0 1 0.50 0 setcmykcolor}DC/RubineRed{ +0 1 0.13 0 setcmykcolor}DC/WildStrawberry{0 0.96 0.39 0 setcmykcolor}DC +/Salmon{0 0.53 0.38 0 setcmykcolor}DC/CarnationPink{0 0.63 0 0 +setcmykcolor}DC/Magenta{0 1 0 0 setcmykcolor}DC/VioletRed{0 0.81 0 0 +setcmykcolor}DC/Rhodamine{0 0.82 0 0 setcmykcolor}DC/Mulberry{0.34 0.90 +0 0.02 setcmykcolor}DC/RedViolet{0.07 0.90 0 0.34 setcmykcolor}DC +/Fuchsia{0.47 0.91 0 0.08 setcmykcolor}DC/Lavender{0 0.48 0 0 +setcmykcolor}DC/Thistle{0.12 0.59 0 0 setcmykcolor}DC/Orchid{0.32 0.64 0 +0 setcmykcolor}DC/DarkOrchid{0.40 0.80 0.20 0 setcmykcolor}DC/Purple{ +0.45 0.86 0 0 setcmykcolor}DC/Plum{0.50 1 0 0 setcmykcolor}DC/Violet{ +0.79 0.88 0 0 setcmykcolor}DC/RoyalPurple{0.75 0.90 0 0 setcmykcolor}DC +/BlueViolet{0.86 0.91 0 0.04 setcmykcolor}DC/Periwinkle{0.57 0.55 0 0 +setcmykcolor}DC/CadetBlue{0.62 0.57 0.23 0 setcmykcolor}DC +/CornflowerBlue{0.65 0.13 0 0 setcmykcolor}DC/MidnightBlue{0.98 0.13 0 +0.43 setcmykcolor}DC/NavyBlue{0.94 0.54 0 0 setcmykcolor}DC/RoyalBlue{1 +0.50 0 0 setcmykcolor}DC/Blue{1 1 0 0 setcmykcolor}DC/Cerulean{0.94 0.11 +0 0 setcmykcolor}DC/Cyan{1 0 0 0 setcmykcolor}DC/ProcessBlue{0.96 0 0 0 +setcmykcolor}DC/SkyBlue{0.62 0 0.12 0 setcmykcolor}DC/Turquoise{0.85 0 +0.20 0 setcmykcolor}DC/TealBlue{0.86 0 0.34 0.02 setcmykcolor}DC +/Aquamarine{0.82 0 0.30 0 setcmykcolor}DC/BlueGreen{0.85 0 0.33 0 +setcmykcolor}DC/Emerald{1 0 0.50 0 setcmykcolor}DC/JungleGreen{0.99 0 +0.52 0 setcmykcolor}DC/SeaGreen{0.69 0 0.50 0 setcmykcolor}DC/Green{1 0 +1 0 setcmykcolor}DC/ForestGreen{0.91 0 0.88 0.12 setcmykcolor}DC +/PineGreen{0.92 0 0.59 0.25 setcmykcolor}DC/LimeGreen{0.50 0 1 0 +setcmykcolor}DC/YellowGreen{0.44 0 0.74 0 setcmykcolor}DC/SpringGreen{ +0.26 0 0.76 0 setcmykcolor}DC/OliveGreen{0.64 0 0.95 0.40 setcmykcolor} +DC/RawSienna{0 0.72 1 0.45 setcmykcolor}DC/Sepia{0 0.83 1 0.70 +setcmykcolor}DC/Brown{0 0.81 1 0.60 setcmykcolor}DC/Tan{0.14 0.42 0.56 0 +setcmykcolor}DC/Gray{0 0 0 0.50 setcmykcolor}DC/Black{0 0 0 1 +setcmykcolor}DC/White{0 0 0 0 setcmykcolor}DC end + +%%EndProcSet +TeXDict begin 40258437 52099154 1000 600 600 (28549.dvi) +@start end +%%EndProlog +%%BeginSetup +%%Feature: *Resolution 600dpi +TeXDict begin + end +%%EndSetup +TeXDict begin 1 0 bop White 0 3 2215 4 v 0 1474 4 1471 +v Black -1407 4072 a @beginspecial 100 @hscale 100 @vscale +@setspecial +%%BeginDocument: ridges_ellipsoid.ipe +%!PS-Adobe-2.0 EPSF-1.2 +%%Creator: Ipe 5.0 +%%BoundingBox: 171 313 428 486 +%%EndComments +{\catcode37=9\def\IPEdummy{({{)}} pop +%%}\makeatletter\let\@notdefinable\relax +%%\def\IPEc#1[#2]#3{\newcommand{#1}[#2]{#3}\ignorespaces}\@ifundefined +%%{selectfont}{\let\selectfont\relax\def\fontsize#1#2{}}{}\makeatother +%%\IPEc\IPEput[4]{\put(0,0){\special{psfile=\IPEfile}}} +%%\IPEc\IPEmp[2]{\minipage[t]{#1bp}#2\special{color pop}\endminipage} +%%\IPEc\IPEtext[1]{\makebox(0,0)[lb]{#1\special{color pop}}} +%%\IPEc\IPEfs[1]{\IPEcolfs{0 0 0}{#1}} +%%\IPEc\IPEcolfs[2]{\dimen0=#2pt\fontsize{#2}{1.2\dimen0}\selectfont +%%\special{color push rgb #1}} +%%\IPEc\IPEsize[2]{\unitlength1bp\ignorespaces} +%%\IPEsize{255.607}{170.52} +%%\begin{picture}(255.607,170.52)(172.196,314.74) +%%\IPEput{171}{313}{428}{486} +%%\end{picture}\endinput} +%% Ipe postscript prologue + +/IpeDict 60 dict def +IpeDict begin +/origmatrix matrix currentmatrix def + +/sg {setgray} bind def +/sc {setrgbcolor} bind def +/ss {0 setdash setlinewidth} bind def +/sk {stroke} bind def +/fi {fill} bind def +/sfi {gsave fill grestore} bind def +/mt {moveto} bind def +/lt {lineto} bind def +/np {newpath} bind def +/cl {closepath} bind def +/N {moveto} bind def +/L {lineto} bind def +/E {lineto} bind def +/C {lineto closepath} bind def +%%%% +%% x y size dx dy -> ar -> x y [ draws arrowhead, computes new vertex ] +/smallarrow {gsave exch atan 4 2 roll translate rotate dup scale +newpath 0 0 moveto -1 0.3 lineto -1 -0.3 lineto closepath fill +-1 0 moveto currentpoint transform grestore itransform} bind def +/ar {gsave exch atan 4 2 roll translate rotate dup scale +newpath 0 0 moveto -1 0.3 lineto -1 -0.3 lineto closepath +gsave origmatrix setmatrix [] 0 setdash stroke grestore fill +0 0 moveto currentpoint transform grestore itransform} bind def +%%%% +/af {ar moveto} bind def +/at {ar lineto} bind def +%% x y size dx dy -> arw -> [ draws arrowhead ] +/arw {ar pop pop} bind def +%%%% +/ci {0 360 arc} bind def +/el {gsave concat 0 exch 0 exch 0 360 newpath arc origmatrix +setmatrix} bind def +/gs {gsave} bind def +/gr {grestore} bind def +/gsts {gsave translate scale } bind def +%% +/marker {gsave translate 0 setlinewidth [] 0 setdash newpath} bind def +/m1 {marker 0 exch 0 exch 0 360 arc stroke grestore} bind def +/m2 {marker 0 exch 0 exch 0 360 arc fill grestore} bind def +/m3 {marker dup dup moveto dup dup neg lineto dup neg dup lineto dup +neg exch lineto closepath stroke grestore} bind def +/m4 {marker dup dup moveto dup dup neg lineto dup neg dup lineto dup +neg exch lineto closepath fill grestore} bind def +/m5 {marker dup dup moveto dup neg dup lineto dup dup neg moveto dup +neg exch lineto closepath stroke grestore} bind def + +%% splines +systemdict /setpacking known {/savepacking currentpacking def false + setpacking} if +/q0 {0 0} def +/q1 {0 0} def +/q2 {0 0} def +/q3 {0 0} def +/p0 {0 0} def +/p1 {0 0} def +/p2 {0 0} def +/p3 {0 0} def +systemdict /setpacking known {savepacking setpacking} if + +%% x y /qi -> defp -> [/qi [x y] def] +/defp {dup 4 1 roll load astore def} bind def + +/midpoint { exch 4 3 roll add 2 div 3 1 roll add 2 div } bind def +/thirdpoint { exch 4 3 roll 2 mul add 3 div 3 1 roll exch 2 mul add 3 +div } bind def + +/prespl {/p3 defp /p2 defp /p1 defp /p0 defp +p1 p2 thirdpoint /q1 defp +p2 p1 thirdpoint /q2 defp +p1 p0 thirdpoint q1 midpoint /q0 defp +p2 p3 thirdpoint q2 midpoint /q3 defp } bind def +/postspl { q1 q2 q3 curveto p1 p2 p3 } bind def +/fspl { prespl q0 moveto postspl } bind def +/spl { prespl postspl } bind def +/xspl { pop pop pop pop pop pop } bind def + +/qspl { /p2 defp /p1 defp /p0 defp +p1 p0 midpoint /q0 defp +p1 p2 midpoint /q3 defp +p1 q0 thirdpoint /q1 defp +p1 q3 thirdpoint /q2 defp q0 moveto q1 q2 q3 curveto } bind def + +/cqspl { /p2 defp /p1 defp /p0 defp +p1 p0 midpoint /q0 defp +p1 p2 midpoint /q3 defp +p1 q0 thirdpoint /q1 defp +p1 q3 thirdpoint /q2 defp q0 moveto q1 q2 q3 curveto +p2 p1 midpoint /q0 defp +p2 p0 midpoint /q3 defp +p2 q0 thirdpoint /q1 defp +p2 q3 thirdpoint /q2 defp q1 q2 q3 curveto +p0 p2 midpoint /q0 defp +p0 p1 midpoint /q3 defp +p0 q0 thirdpoint /q1 defp +p0 q3 thirdpoint /q2 defp q1 q2 q3 curveto } bind def + +%% bitmaps +/pix { /picstr exch string def } def +%% wd ht -> preimg -> ..stuff for image.. +/preimg { 8 [ 3 index 0 0 5 index neg 0 7 index ] + {currentfile picstr readhexstring pop} } def +/img { preimg image } bind def +/kimg { preimg false 3 colorimage } bind def +%% +end +%% Ipe prologue end + +IpeDict begin 382.926 440.438 translate + +% Preamble 1 +%%\documentclass[a4paper]{article} +% Group + +% Circle +% ss 0 +0.4 [] ss +% r +124.152 [ % tfm +1 0 0 0.248985 % xy +-84.7696 -39.4605 ] el +% skc +1 0 0 sc sk +gr +% End + +% Arc +% ss 0 +0.4 [] ss +% xy +-80.9748 -160.776 % r +202.695 % ang +62.7902 116.96 np arc +% skc +1 0.647059 0 sc sk +% End + +% Arc +% ss 0 +0.4 [] ss +% xy +-79.9992 78.9264 % r +201.387 % ang +-115.849 -63.5295 np arc +% skc +1 0.647059 0 sc sk +% End + +% Arc +% ss 0 +1.2 [] ss +% xy +-140.486 -39.9504 % r +67.369 % ang +121.422 241.36 np arc +% skc +0 1 0 sc sk +% End + +% Arc +% ss 0 +0.4 [] ss +% xy +-33.1704 -39.9504 % r +73.7024 % ang +-52.4898 51.8582 np arc +% skc +0 1 0 sc sk +% End + +% Spline +% ss 0 +1.2 [] ss +np % # 24 +-79.9992 38.976 +-79.9992 38.976 +-79.9992 38.976 +-76.0968 38.976 fspl +-64.3896 34.104 spl +-54.6336 24.36 spl +-48.78 11.6928 spl +-44.8776 -0.9744 spl +-42.9264 -8.7696 spl +-40.9752 -20.4624 spl +-39.9996 -31.1808 spl +-40.9752 -44.8224 spl +-40.9752 -59.4384 spl +-41.9508 -70.1568 spl +-45.8532 -83.7984 spl +-49.7556 -94.5168 spl +-55.6092 -107.184 spl +-59.5116 -111.082 spl +-65.3652 -115.954 spl +-68.292 -117.902 spl +-77.0724 -122.774 spl +-82.926 -122.774 spl +-82.926 -122.774 spl +-82.926 -122.774 spl +xspl +% skc +0 0 1 sc sk +% End + +% Spline +% ss 3855 +1.2 [ 4 ] ss +np % # 21 +-83.9016 -123.749 +-83.9016 -123.749 +-83.9016 -123.749 +-89.7552 -119.851 fspl +-99.5112 -111.082 spl +-106.34 -100.363 spl +-110.243 -90.6192 spl +-114.145 -80.8752 spl +-117.072 -70.1568 spl +-118.048 -54.5664 spl +-117.072 -38.976 spl +-119.023 -26.3088 spl +-118.048 -13.6416 spl +-113.17 0.9744 spl +-106.34 14.616 spl +-100.487 25.3344 spl +-94.6332 34.104 spl +-88.7796 38.0016 spl +-81.9504 38.976 spl +-81.9504 38.976 spl +-81.9504 38.976 spl +xspl +% skc +0 0 1 sc sk +% End + +% Line +% ss 3855 +1.2 [ 4 ] ss +np % # 4 +-82.926 44.8224 mt +-76.0968 44.8224 lt +-76.0968 37.0272 lt +-82.926 37.0272 lt +cl % cl +% fic +1 0 1 sc sfi +% skc +1 0 1 sc sk +% End + +% Line +% ss 3855 +1.2 [ 4 ] ss +np % # 4 +-85.8528 -117.902 mt +-79.0236 -117.902 lt +-79.0236 -125.698 lt +-85.8528 -125.698 lt +cl % cl +% fic +1 0 1 sc sfi +% skc +1 0 1 sc sk +% End + +% Line +% ss 3855 +1.2 [ 4 ] ss +np % # 4 +38.0484 -35.0784 mt +44.8776 -35.0784 lt +44.8776 -42.8736 lt +38.0484 -42.8736 lt +cl % cl +% fic +1 0 1 sc sfi +% skc +1 0 1 sc sk +% End + +% Line +% ss 3855 +1.2 [ 4 ] ss +np % # 4 +-210.73 -37.0272 mt +-203.9 -37.0272 lt +-203.9 -44.8224 lt +-210.73 -44.8224 lt +cl % cl +% fic +1 0 1 sc sfi +% skc +1 0 1 sc sk +% End + +% Line +% ss 3855 +1.2 [ 4 ] ss +np % # 4 +-177.559 21.4368 mt +-170.73 21.4368 lt +-170.73 13.6416 lt +-177.559 13.6416 lt +cl % cl +% fi +0 sg sfi +% sk +0 sg sk +% End + +% Line +% ss 3855 +1.2 [ 4 ] ss +np % # 4 +8.7804 21.4368 mt +15.6096 21.4368 lt +15.6096 13.6416 lt +8.7804 13.6416 lt +cl % cl +% fi +0 sg sfi +% sk +0 sg sk +% End + +% Line +% ss 3855 +1.2 [ 4 ] ss +np % # 4 +7.8048 -97.44 mt +14.634 -97.44 lt +14.634 -105.235 lt +7.8048 -105.235 lt +cl % cl +% fi +0 sg sfi +% sk +0 sg sk +% End + +% Line +% ss 3855 +1.2 [ 4 ] ss +np % # 4 +-174.632 -97.44 mt +-167.803 -97.44 lt +-167.803 -105.235 lt +-174.632 -105.235 lt +cl % cl +% fi +0 sg sfi +% sk +0 sg sk +% End + +% Line +% ss 3855 +1.2 [ 4 ] ss +np % # 4 +-119.999 -4.872 mt +-113.17 -4.872 lt +-113.17 -12.6672 lt +-119.999 -12.6672 lt +cl % cl +% fic +1 0 1 sc sfi +% skc +1 0 1 sc sk +% End + +% Line +% ss 3855 +1.2 [ 4 ] ss +np % # 4 +-44.8776 -63.336 mt +-38.0484 -63.336 lt +-38.0484 -71.1312 lt +-44.8776 -71.1312 lt +cl % cl +% fic +1 0 1 sc sfi +% skc +1 0 1 sc sk +% End + +% End + +end %% of Ipe figure + +%%EndDocument + @endspecial White 2211 1474 V 0 1477 2215 4 v Black +eop end +%%Trailer + +userdict /end-hook known{end-hook}if +%%EOF diff --git a/Ridges_3/doc_tex/Ridges_3/ellipsoid_ridges.pdf b/Ridges_3/doc_tex/Ridges_3/ellipsoid_ridges.pdf new file mode 100644 index 0000000000000000000000000000000000000000..a0700b5c50fcd4dd1f271a17753829f2f9ae625a GIT binary patch literal 2404 zcmai0dpuO>8&@fuD0JDSa3q?Vm>D_4WZaoy%WWv-+8Afdh#5O`MkZ;qZA+ptwdv-X z2(?ydke;lH>0hUmNe-T^aQ%tg`iw!T!2@;fo{uuJ|+8k}HRn z1+Hw|lA$+oOyu8RjAUHiII;P0tOT~PDZ&?>z)D{p_+j1XOf)T3I4)p@VSj5s?%MER z-RS}6i~heeO$3HH;Snj34Gs90^~|WYCQ*BdaoYs2&UI*|(zlX)1tPiV)N2g~KIftV z6xLNc@s2>v$Pw2_uQa9-#|zW0uCSOl>NFx~>v7w4<=W`*i3$JBbg8xGN#+Hk^uD7s z(Gz}dlhXG3Y8ADCXDy+b$tPYzJA+!Am!>{?l1qK~Yjw#Hc<4@Vps%A>g1ZaRJ*Qum zzo@mmBy^yx#8-q_Ql^u;&YH}svVFKnE9rcqd7;;|^gh|R>8vB}P48$-Zj@$ryX%9S zd4pkgP*cEN1Do>kJjD(34J%#_7~%>i-`QYGd}1ztym3(BMbD9VYACnrdzIv!XA$pc z@%25)D-6=2emr_68DMX&2(*{hJ3YDF@y5u(Z-sYfOU+^hO@5@FVT{-~Nl{ZfXf@a& zHfh&3$g0{pm@c&JZ@@L`DPCf}RdXi~ls0&lH&@bA54I~3Nhvz32OSV2O3d68N`944UheFc9+#%r&XdT)ziNe)_u^Fc+G(CW$~^^O0Hh)j=xs5=gfpz#$w^M z9@TY8DZ}2eU0b#6R|Bo{$N?k7X|?3Mb4ea5zDb%3m+A}D+rGKu#lL*up=vAzxUGC> z`J|EIdA`%BLzNiM`ERn%+n#HVc9uPssW^taaP#}Oi&U8U4$8KV7P=ZoR;W;{OjuS` zKNU8g(+X{ya$p`%FoJj4vlIIFr=fx6D{TDwGM-_*2v?T^JbPIPK#PcqHIU2fFx z+ubMDDJzIq^!5DN*z+(CEI^k3R5aWL#J$_LAvRZ7dS|{w0;7yG{RvH! zKP{I?6~}zKYpaTtcK9Ili#Flcip!x3U2$MVXU(l;w*LDP?5dp8{WR6CGlD%hPgThS zwYA6FwQJV+>I{a)$D7z|fM82-xyy1lq8h$qTvF4bfwhdZY8K3YA^mQ73nnjpLF^OD znS6b%7*@t!`v_aD@o$@ndz%BE4|@!02TfYLs+XjkXBgl93(WS#8#1 z>6}-kobJxUY30%Cg^gA#(+|9-G1elDWi{oC$@ybNcFK;sUkmDsjoig0(HLpU^Hg!X z$EE@XDGGz_bFfpQTz4@Dd=q@cp{L{RuB%Fk>C4vSl{pcD?Xw~b%*+)NNB-Ja+q|a! z6zd)qqdq#cS1-ZSzf5%4+*mzEJe+ZuJIJkTIFdd6_WoUW&LeEXrNYPs-z>r;TqwAv z`h3s6%)saM2QQ`sOe!3WeB3V_nj(*+c}T5lasy(fIsQY_!_~5u*2Rg=&Uw1j-$b1f zNAr0ty|=1lO7~_S>1XP0V?DaLi*QJYJ374{7xhxY4?SBn~D zyKkF?n4Ji$MEY(CrIse-xP`J0w|f&Ot@~m#eX>TQe}6D78OdApG48>~;r)p|?oO6j zt!XUDp17%^Ca)Rw?tY)<<(T2IDUG~L<($BXKdRq1F1?aDIjz*0U-}B>gv@@{(Kopj z$PGaLB$!!1z$|7qXA|DSNEqiq4~22Aa0r`j&y5EC@aVQFL;?vULI8kn@?Z`EZju`b zfTO{Du7JmY`KZNs@VE>w81ciQCWHn$MI%%%1T`3t^eGl~7@Px_gP?3aD0e25?!e&Vv#w0D z0OSd1XnH^{fHoIpIv0gDHblUHc^InOHjv8V@)16R$Bslma}zwYUfxBRj&OOHkSKN} z-ygHve?179kj&_y12OK%5tQFO1d( p;%HnhIy&<1gE$uslMBjQPm_-lAEEP*PhBu2m=Xa)Lnn6%@HgU=?(_fv literal 0 HcmV?d00001 diff --git a/Ridges_3/doc_tex/Ridges_3/ellipsoid_ridges_mesh.eps b/Ridges_3/doc_tex/Ridges_3/ellipsoid_ridges_mesh.eps new file mode 100644 index 00000000000..de269bf528d --- /dev/null +++ b/Ridges_3/doc_tex/Ridges_3/ellipsoid_ridges_mesh.eps @@ -0,0 +1,1016 @@ +%!PS-Adobe-3.0 EPSF-3.0 +%%Creator: jpeg2ps V1.8 by Thomas Merz +%%Title: ellipsoid_ridges.jpg +%%CreationDate: Tue Mar 2 10:29:42 2004 +%%BoundingBox: 20 20 575 415 +%%DocumentData: Clean7Bit +%%LanguageLevel: 2 +%%EndComments +%%BeginProlog +%%EndProlog +%%Page: 1 1 +/languagelevel where {pop languagelevel 2 lt}{true} ifelse { + (JPEG file 'ellipsoid_ridges.jpg' needs PostScript Level 2!\n) dup print flush + /Helvetica findfont 20 scalefont setfont 100 100 moveto show showpage stop +} if +save +/RawData currentfile /ASCII85Decode filter def +/Data RawData << >> /DCTDecode filter def +20 20 translate +555.00 394.24 scale +/DeviceRGB setcolorspace +{ << /ImageType 1 + /Width 435 + /Height 309 + /ImageMatrix [ 435 0 0 -309 0 309 ] + /DataSource Data + /BitsPerComponent 8 + /Decode [0 1 0 1 0 1] + >> image + Data closefile + RawData flushfile + showpage + restore +} exec +s4IA0!"_al8O`[\!<<*#!!*'"s8E!g6W-?=<)6CQ+BVYe9#R:S>#mgkE$ks-Z$O[@\&ebci*?$"@*?#n;+=&Qe+%;)SAnPdkC3+K>G'A1VH@pm)L51SAMNX0fQ'Rc(R@9kFUnsrd +W2Zf&Za@-K\%&u[_Sa=2`lH0Bb0nbge^i@)g"PEEj5f=akNM0qnac;Dp%J.Tq>1- +0!$;4A!s&E'!/9Ll%"PPE_>u +Q^F20U8+N\VPgAlWj8t<[C3QS\[oYq`5Ta:aN;TQe'uq!f@\d1ioB+]k3(smlLOQ +=p%J.Tq>1-F!"8r1!!3`7&HG#qp\H;4J-m^!J-m^!J-m^!J-m^!J-m^!J-m^!J-m +^!J-m^!J-m^!J-mb6bM,`PeaBWDTshCj)s3_WLq,J_-\9AAnZ6N@*;E^WqV'6X?d +mG=L#4!@JP`sGK$6DY"\9c@)mdP">')7DrZ#/7=4g6D\^42YXM5Bq*u('@rOE?/@ +Yn]fi('%I$R10?k_;Yt@K->EC#NF +q)74>[%u^GfMPL.a:C@+%d*8>8i-\o0jt:6#gnKZV!JM4b5Qqj!5Qq +j!5Qqj!5Qqj!5Qqj!5Qqj!5Qqj!5Qqj!5Qqj!5Qqj!5Qqj!5Qqj!5Qqj!5Qqj!5Q +qj!5Qqj!5Qqj!5Qqj!5Qqj!5Qqj&2S%hl"2eeIYH(l2\5<0'5%S:QBHf0s,<=fpa +3`AcV`L"&Jo13bM6s`MBWiZ4IQCWIZH&YQ'A\pT!p8_BEG$.Y<>fEPF+^]Jf,Wh* +e:&`h_cDr[.5_EKiH_jK2#,!W.Y9rUqtui95% +(I*=6+pScHPRc:3uk#&3M&B=OETC"bo?AMOg$EB#uA,O]g@C/JQ,&j"%"Bd>4jjK +:co3ueY?7h)i`NcHYu_I9YcC7NcOlV?0t^?ogNp?QQqk"\Wo*TGBVh>!#]_VX>?E +]'(3+d1g-\L%S,EK4us_XF#djrE=?*0!EeYO+93LJi1,2I.KkAO):(/t[AWr7.?c0]_,+u1n44iq0nKp +&l(1?K9m[Js4cC2]C=2V:HbYcRI^d"cY'cR^Qj[O`(6'S@8n#;,/;9S9h>mia2E* +$q#9KNVJ+cX4-*"b`cPeT2*'oEK]4`gpmc9'>k]!2.,-;5T'hPpAe.Mu\&:q(^1Tf7VO0cTLq:"abUNmR#sfCkGo>YNHN*t+ZXkGY[g_a&R\W$R)e:1N!$Ri;1ls8mjrZ&j#Q/ +)Xk%Dd'7*cM`P6T\hUh1sZu'Q[FkJKr2]YahBsF%&@8Pri8OY^h#<6^ccQJ*]\l, +X/5_4Jo1@#=5?MNAQiLR[HOkno/;'ipR.lFEN)*H,61#$CI":bntl-hYpgC(?/+. +j5%hIeq#@n>,Vk8uTB"-:*E;-`mq@rSEtN;94:mpAT=mafh;ZaWRdYiEnY/9>H!; +()3&n@K;,(Gg'dS1bnp;G3ck/EB?PN#'WA:-]hd,<`)Nqau*Do*fZcC9f@GQ&LB; +d8T-,FW\TB39s>h+?&(RO6kH%1@?mmL,U^AJBFc0GHGTAof8]08N.pGWAi5nFRS; +Zq$GMU8s]=n[A=&4e,2XaCMJ`!5ke2BX-8`t#TTA,`7F(?j6mcJcnl;YVW)EU+Uk +Dl_!hlYiS,A4i,q$F<0B49_rf9[AB1!H\6&8XrQn\umJ2X)[.t-8m^fr:Vfu)BNl +M,@J#.EMXE820>*%8.D;5'GEVsa'bp+0DDHm$PnZA@X;*D=HoRf6&Ra+?Cam63sI +[C4gcSa3UI!^gp)c6%K`O2YjR3Zu?A$6k\=VMjG&%jWef::^<(Qd%d'1a)_-q7Tn +V*W(3Mc_)@jg^4$TX8n\hY@*NG_+?U#uO@U +6A1Dn]NeMZOCl)+>*GAVn1B@t^8bZ[f\?Q"*;Fbjf4! +,W5k34HV33+,39A+P4*O95NGo`r%VIQ^"!Y-XeHMQp`jZ%"G`nWFX(iD1ii2E:$R +]]nNXY.^#s:MW2dq5lnGaW>XpJs$*gQIru2hj=i +4)*#lYp!b=u9!['r+(id=\p8&O1%o<$G>W9OtL#1h:VZ%-^;J%D!q5od,p[ ++CN:LW<^MnP_PE0A/2Q_gRfQjiS?I[G.aJ7KA'pa!Ff>=>lUi:onH:1IQIY^j]7C +!BA3VgpSoLO-c&:XXjVo?M/Ndq^oO#J%Eh0g@41[a%``79(?N'Y6%CdY+q`ue(ca^sXk-1SM+2D]kDWC)tkVe@G+S$nId49cY_LF'*3 +O&$Oqq,-MMK0d$X6"\.EViWoDnp+)73Al(fr;1=.g:pCcg>+irWp.VObcHtpdUL3 +l,dCrmE&j,k!uj]aQH)UtM&jd71I3;8(tqP5O@UU)\18`nc>lp9/:Lr0eNQ^dF[. +TfFRqM"0dHdhjTgUX#9CoGkGDt*(3^PVDmYf$@e0mY]hi%G(ml=l=dTm%)6d"H@rD +Lq__@usGZ?RXqp?8L1NagVh=bq.5GZJK,;(+A0r%c0tB@S]:KWBRl4%6:P^8J)pt +8EO872A8ds,tDuUG2SAda&"I2<8;<>e^M7HQed%u>@.mkmNbTaN +ZA%[C_3)X]%_'<[WN/WY3e@\"eASiEUE,19(Q-YdB4.HobPCbL+jn/#5HIk_>@bS +sr=rH_0!=E\VfV&R1q3@2)Xk:/KI=[M]/%9roD)?+9c@duY!XK_N*>E-64)dFiNn +kOWFaPd;(O.R$26p9>pTs=(os82O.Rl6uKR1)MH(*/!!_10[W'c>`)$N3R6dlq8[ +!!S`jbDN4ii#=dDm6e:_.#>51\\Hj]dl85*D3u0X +*+R_N&](D35MC56KL7W(bZX+cmLes)#1Y8,&m0/"Ip1F#)P(OjiL@.0.:1b9D.OL +V=20/`JOubR'&;5F`8tTk2nP5H[#\]BWok8:np:jsi*c(V)U]S@'6ut3i3O9]L^^ +OO9![Wj3TKYS=I'8g8L96c+H@+hL.7.H.(JF`=G=bCrfom@X"`o11TXKR&L9-e59 +g<4N'QX>TYUDo*\VuL;iL/kkC$[+,b!OnFM!gC%AI!n'l@m:2kBsKB8jb$,766RH +M6Z&hCYS1)<\PD=K0;O4bmSr"TB-Z(tl$IC$(RMU>1l+<]48Eqk+PN!dVat>L#fR +D5FRa,T%BJRT:CL5\2f8P,hJZ=0g]-/$??u/NmS:%?[57@($IQG?!LXINR^J6$Fo`^(Yc +>gg3'*OTBrfND!l3mAEU/ZRb?`b;Q?6lXVG[omepIY9@7OXg'a1QF!<9D=X#s]** +`8kW#M>inCtH8iI/!Q5LkGi*O&:`mn],%?)AXFRNr$%Op'kG!4p@Di:\#cCO3=MWHt!\HeY#hqrthc +rrCt'[Y>IJ`uK>g8F4*9#ad%'Z/B,Uao;A,=')0p;=SR[(/UHXC9\Rd.B!H8.q*H +cDVr6.`cgoJ44ZF$P2bNHN[\?P,7N]c3e>qSh_&p#*QNK0EG*".OK'V"N.UVP]T_ ++j&p)>oYHK=N(l1q%3/M].g30n$-#N(=8NXOioL.C)4o<.S(q_T*8@J85^6<\i#e +V9J?NdT9!QG=)[bTqOAE(5R-]7$lkCQ[!),r_=7_tA>N.M>nJihT)%r?^@'V!imX +p_HrPJL^'35?C(ijH-('l1Mq\IrS"Z3VLFRpo'Q8b[P1j!5rZ/f5'R.upc26DfuY +BS\] +J9Wo6GKWU!$-!8pmIZJ.422md.$7MXZ`Y;9=!#/:!!#/:!!#/:!!#/:!!#/:!!#/ +:!!#/:!!#/:!!#8")eo]^P_6:7NfPN4,5PC!r +gAduS?&n"]QicW8Y_Ru:S.Q!oX*bg/CIL!#5hPI97c`Ull+7"uOP;ARmO_S[k8m]mQ:T"Zq9R=?GAImI`uF)se +oM;E;+T'j(\8q_YSfF;ZB(@sSY-CCE2S;5Y'27/hUhAJ[J+jql.aA:=[QZ+An"YT +m*.0KJ-":YNJj":(gb-$LEe.%OsmEYKL9W8/\FNimR6+ki"B5oO>:hjFp9n_+ir-LtXZ.:4f?KE-cNfVf\0/[tM2"D9!Z#+@)^TQ +om1D>m*8XXDA4'ZR":EKC/o*"Ath*Q'.^-^$GB/hU;97;oreHlPJe=tq#XPJB._/ +d]kJ#$Acb`XA*WglA'EG=;>0a9)r(Olhet(;N(Vm2FGo>.pK!q>QGsCMU;nQ!h%^ +X4bA(;j`Y=_!H<1KCYlp5Qm7[0"DD$(_n9TU-uK"f^IrY>JMr@87Ml;8A%FIp!-@ +U6ZiTGMJIJT&G]20ZUFqIcHak@A7-?&"!,DbARrUZ*4do18$Q]/J<+@2ZR,tL1E8 +Y.>c'Ra86dqB2!!H*rVlfs^&J)J]t-;+J4XYtUp7AM>Eec'"]4Y=!FPpfD9!p_I& +4&$C;$tiio^`34i(\BTEMoC[rQc(/\/mKL13<,A#OG_M\Kk>#gs\/a6sl(Nn"B)N +VnqF,<-m?M#">>ZkH6t/puno:RHOA5u?29,\.I_%bC&`#gQ\\f73*jBXR*&Vf]jA:?@Ei'f2`bAV*4,F18)&t'PW0Z.G*%#6g +Y$:dCuX+g7M7hr/K7fjm78g<'=NJ3FZTEQ]\#V$[6)gJ6Rg(rdZCN/>oqabF4E6G +rB(Nrl6*";D9jkpfXBe:QJl_grb]l,K?MNNY#BHXe$R:?a9//$ed+FM>4K-9KmN# +Z5G3>Aao:D+KPZo\nCBi8Z_`'.UgoR*58-NJ/5#Jk9$Eb4qp#nlt+rGM=m%2tuif +E`F@a5.X;V1o;FGpe=SN!Z='?!TLMi$d +fLUVN)hhKUKAGko]1Sb`[SB/nPdH(lO'^XrB=,'8^O)A[G28OJUt^JT1E%ne3f\5 +N,+g>ga_mG$?.t,enI5$%S%Q(d3i`=o*:Ci)!U7Wi/5#u(;1[]EAn"HQD2T9TXqW +[P(E)\n(`hp&[,8O.]r^Y)pXac\DVHa4Ai)EsO^./f0^j:^;)A4PW_#M7!g5_J!u +]BFqiOj#4V9=6oc(.4RcZF/ST]71bIUdr#eZrYI-m14#D+o`-Il8Nk2 +DT:DL0ua%+L^2apf$P>Q90A(Ot4P>oi^?Bc[j(;[`.n!*BEepTo,BWm9qSFp1sTrkid +qM31h!>5'Zm.PU*&2KF'0d.-CicBig#V44o?0mOE"rU$[oCrUX]`NVipK9,1uRSK +rU+S+HZhIY33;B"uV@gjUG:?LYepE=hSl\b=GLSK['/56kR\rs]"HDdcLn'/$f1l +Ja:=gN#\l$o,_\LE8m4SOX:4apBscO*H-+Eli)n2/R!9HHH/69nna4CiNRbf:1AY +bt1lFVs`D=RHLK[:Or_*OUPOAm3@;ZqAYRD`#k,-Jju+*':fOJ0F\%Lt#/ +X/bp:\;dqpb$:,8M_N+\btUq7Pm$`0@/.S94 +`Y8KUj4"?8gf!Q:PA9G@.EA0@b(=&jLl[hD>3'I0.Bun`u^/U3/b+ga%Tc!=HDCe +!o::.^1TUM%Q?/"scBXR*ZYZg0qlW(9$D07Y.I!Lg[>V_rLHaiV@W[bKEEL$DHZ: +)mH:&?C?_]ouq'g:a<2[SFh8.:^$_A:lP>ee9pXi$1*_>qQ&K +D"-tZbb0Ft>^(NIdNN^2X<o +m5qsS4mYa'5W5WWSfdG1:cY5St-+s*qdtV;rT^Mi3c3[*\4o]=M%\[d/c=u@t!Dt +*p]+>BdTe%C;C7MODU(r@f(ub!)Lk0@jd=UHI%c&?b5RoEhHh2h2V\an!;9_KkX$ +l$BX>IduS/+fmLBp[*t@@j)'jT]IDm#&&pNADOGRSFksd[@]M6a5ho?!! +2>?!!2>?!!2>?!!2>?!!2>?!!3\HRa2F?ekjC9W%o3q[\X&5EDGo('"cc%iJN1[m +&D>02VZYp#`CY+H7ttSt6H1OX6!#%FIrP5'E$$]%"u6]V?@/PPg:UQ4\iorqY)?>9 +oqh8RQC8T_a)ZUe[`O>6@@8_O0a$,OD^j!D*_Z^Kkf,0_=CR6)oL%$fe_Ocd%B!$ +0#=ig)*?AQsM^=ft*9[Q)=agD1=F6-(>MmEL:X7L@5GKOPfFo,V.-\]R5"a:!8uA +X'>UYOQ6cja#/%)V;)h;ff^sn?^kbDh#+I`$DEc[F/\m#:UKM%+3/8Pn"+#,\.O/ +\b!>k4;'P2m$?!)DIYJHF+Tm%o.Hu)VT/5?:-+Hk"@$kU#$P)ZKH>D9I]Wfff +6U_3`F!-0uZ8c,9[:'hE!9/pCdAX#gEHJ15b,L>qCns7B[2G7S#aZ.OQX&eDi^WW +g-n%-uUS%aN\.VuW&1L8;26pM]q8b8Dg6jEjK"QP'!@Rs@d24l'cWtB&%7jO6?qb +g">AW?;C'i,hWO.2)@/WOJJQ>(1Kp@:a`'85$O8/W((#6+\_,a$Q9J9nVj?Jk-'# +SG$rq2qBtGHuk.3<8U["qT(#d]oc3-M5kP=-r_ueZHD.1h=`\;Dc(AniLMg+`D;- +/EC]pm_S0Z?^)tT^c6>@$0G6NGE-oN)KI'^@k$7odhcg:L&A=3TD%f +f=X8]h*lW:RA?\N5@rc@6QquB +TX:o;DD6-s.\q)KlR(CsM'I!0.8,qdeI!Kl\?VA^$N0;-c:[W=3>c.E.V8r=,eB* +T`>RHB\S[0/;!LXS5.P0^LZ+$h#c!D]Nd$cVQJ"P5S_eII]?uWQE23VJfn*!_n7C +pdgJ>TS]=+1,^d>>tf+K3<\p2#M4Fd`C4!?,9^iEN>.Q8frh"'R3NZTn%"$CNTrR +&K?)Jso@EW@*qa:>i(4`T6\q]iJ%I +$T^G5&@8Y/r.ZfL;rS36,;1jGKNYd,Eh0"G5Jj$?`2&iI\8UYE36L(UQ#R8cgn)* +'F*X-:e)C"ER,bf.ROU_I-ctPm,^0$o'U[c7Z+_Y4L*%?Pt3kWo88V\Kg]q'\nVe +2:urbVYr`UEQecX@QfV,DEhab@Ob;+-,iYn+p +T#C&Els9E^R&YBKi_[?.?NS['ui.QStL(CW1E"<:J^4io[2otgAM1`I(:H2%2cYa +qq2l3iV^Ou!!:g\%oGe)KBL=TV9sd6s!gEf_+joE-gu_s]7-:M +OteNFje3[A(%hL2#c&+5.#HP"H/QPLW1p2(%sRDqXP(]`.t+.f#3raXs$^fVaGL8 +)SBM0Ik"%:#kKt$PE)SS8P^*g=HodYo@sK6^#?Y2e:qhCHC!U:,\S=:>>!>hePGV +Xo-mHBjY@(`>W+^NQ9bUA;`*'lNnaTnqBQag2MBNQLE84?$eiINc`dXXZ#/C,`,n +11)+.^g5&Kib@G\O,8KIhi=#Esm\XJ9g!U()Z':oB!I>3R:(B##4\m(K9%2btUbY +!d>V+I+i^b7*&7Js-K$;"2fI1!+,q^pfA^^:PWg?@(g6U>oBX_;OB_T2&4K#$9!A +9)_Pd_I\G8as^Jf,0;_mT?(V8dcua#uT+&AtCDNoD/IULT.BaX,0mV4(_Y,6VOiB +ftGH!WYT2&5;8%+Elup/ +hu)L40%hGCfJL)0/$q8D;b]l+tARrr?fsD,-WQ2_+R0F%u%tS_`"3:\;%*-%M-S9Ctupe1:YUh@HoD=$GO0K/_],_-(Y4L;1 +NDVb0Z>Z$Oo@UT#^-o\So[skd[RRnm494#:^pFEeRVL1T)@(4VcZ\<9.9I(2l1i? +Rh#TWH^5.,\iL6>$fT3n$aN,.2kF$[k9,L]T"ZOq[r:=YNfo1; +r2nC9r/;:nH60D"XdbDt0XL-lD$(.qG/npT/"\cg(E-!*G,:G$aVpQVC_,hk8Ju/ +M)"mHo,P9$*Cj13S]qC:XbJB+&hr:/M6BJ)7r%^UAE3'1t0#lFsWBt&O6e=+B#F0!MXPEha)>@hfq+K6WKaPcQ'WstEc%11( +A'Uj>^9jO[2Xp_/!S#qNgV#J^"D-VH?en2K,';di\5BL)k6-oGB?3bq)kW]L!hhP +Cj=)h=M4'=qfdO3`2)b()BQ#NDSYj7mUhZQ+rnIj\AplbnI"8'\"J"I@ONVkGXX^"N$`uIq +!B`M9'cq:>_1qCEK6+g[Og#U"bO#U"Xd=K?2j0FB5&J-m^!J-m^!J-m^ +!J-m^!J-tj3Ld)O2Gp`%CMWl[uYEnni<_0'Hic)[JaTNAG)l?WA_Vq?dOmruc>g& +gC6#Cr\:G2)h-;0QH@)g?6"6RE_8B1iT.amt2Tb'jA]V]D.jNJ#d5o:Ut#?-eqi+ +$K;Y07=l`'.ODM,Z:cl;)b+BO7PG1"5#o\kc5.i1k.tbH +?8u4jAb./<=+1DuETNm12F&k+G2dNK)&WNK-lP=T1]dD[ngZK*O&3/9Hm;:.R,)&fk^cT25tL+Z"?&BN3R?M+4%L(7ZZfGcYKrqH4 +hWMGRY\:j(?L"gE$LA'GOfUHQnR/n7n19ABfqJ5`\Z,H/=+lk8@_9Z4M9KG*PP4g +$P=#K=HS2VSFsaX[T2UV`2Rm-jh`@47$u9m)o.1ZVn3#KQ5M56H+rJ:mGQX`2Z2$^54aRJh9;`5C:Kl2j3 +.n8=S$Ij5e(>],nNDjR=jt]Ml^[N3F0H,&OLE6Trr/+KCrmQk2#m[6g"k;mt2B%$ +i^)>fdtoEbuAqTcr)/i%Q=b3+)_m:,9@2'O"5>p9@.h4%i\LbJ`8M<:6cc5>If#Nf_>Ka[f +@$ui5qgU+62Z("N=.C/5pK/&m6G*.@0$"h0]8NAdRSZT%pFW]jc[D/iW*h$=_R/Y +QPZ-.&BMUE31eRqtSpCR?)]Hi-F`_[:%jC+AhgT@g,E<8l.X40fo&Wdb@=;5o`E" +"otQHAq/@_&YS03h7ZYfS.cm=Tg^^H`Q +I*!*u7Phh07StCU>-#\8\U*Fi*s585:!c!Y)&K-riCj@.8#YDJlp9Ri(u!_(2g +D\/g9`13-n%Vjr^FgYNgF870QQ^#(Y[ZC?2CfK0M?h6BU5)hI7n(k\>jP&7f_?f1 +j4Rb+bP95u0n]W%d;_25nSkAJL\/%"mFTK.IpaUCJS,4F7Q'so=X(NN#/a3L^G&f +H4:^G')IOn&o&8'(kFP;T2T_;A_:S>"pFa>\VT$3IX<.GdA,)&11;o)s7-=B`TbO +?@G>f8n3,c<;nUbe^WUKHtFXe'[UUp&"UOI_$oV#buK5m3@J[j[g[]AW]_*PAhf[ +40HB60Pk8%[iA;k[aIi$,l:$Z9][7s9#J"R#3*-)Od3cAO32af7YD[3e\XqEENPk +% +cQnKdMn,4Z_sUsB,QjR9lbWC;DqJ_eElLN=7h+NTEP/n$,:"ns/:d-b`9kPK0nY[ +N58BXFnCM`\WkOC5olkT6CSfRaKgl]%,F^_bBA@?@d@/s'Or9icn$d2f(B_oY40d +,9c=sjqP`95WqJEX/_^&[n26^kH>STe\E!GD++QjU7""(U5K1+02Q>%IYlQ&V5nb;gq]Wm.ga"@!`B&g#fgE! +4FW7QcXoRjVt#W-Y6l$;/NiqDP*6H\guIQCF1WgKl:!Vo\8JNDj[)JjX2,u!uN&) +Q9OH56(hq\>JUHjaRL,&QFNHTYUfW>kIKN7qGoKJLik?sk+:QO)fIBZR4Nn_;A4S +^"p"fjhrO=r=gP0Mf+D94H#kg)#ti(3--5DX6&ZRBRE>@WOr8.UM/HFs6B#8B0:( +nH9Ab6CY'OmB?[:B*!,6-?+7\cV>^V=LO.:^4HM$m3I7M8^c+4973M^o_MfVM7J1 +fc(%'CNdj9+_nE"=br(tmY6e-dhe./P:UIi,D5tj +kQ^,AiFT\9Zh7O&.*P8`8bRh]Z[ajsO&,KtY=Fl!Cfc>>q7AYud\?sGY/E^UsFV7 +6H,`e8-;VQgDkFl,\E�&E-N?S.":$j_QGI=Vi?MDpNlt7b=]ibKLD"jQcu6b%^RFASbf_W:@*?GdN)>rC?k6Eo55JXJmHP(;fB:WgQYGQ +?[bPC^\lib?o[<0[d/F).hbb1:=p[Bm9Mdb!eVW@O3Mj12Ed)6Dn\YlH>!NA9nJm +rj9WFjIH'%(>`^g`(MYPO]uCD#8cJh0^^Gk^>tP`7B,:?.Q1g^=FY?Y2Q^NSY;8M +Q>H6?#H/Jt:VBE--J#YLcK@+[5'!h,%-Ib+#CnPF4\]ui:/R9Ila?D8,lR/>oBi< +Wr/+D:r^H'uGjZ=.@aB#sG2iUa6:fls`d/R2;>="diJ<'pTO9`W?n-\h20?P/]!8'Z#.gr)$Co +hHMWM^$[Gkr@qBRkE;dcrSpB.NIlahkmJG(00C9Bk1<1>_>S9Lgc+nnUF3rGf>ro +gW49c,QgfeEc\8]ScEK?KYEc^g_`k.b8k^3%u>?%(dFPXqc5;_,@&_B>>6$@_LnJ +hX]Od,#3%X/N\KCl1m/=+lPf\[i4J!?ME*icuX4'$tJ[ur]URRTB6aiQYVq8[ruh +(#b8\mVd7EtJD9qi[WO/@EG53Afh>GJ1,U]@f@FYHM4=1F6b;h59cbfV@RVM1f`X +G!QSLY8PXj\rA6"=,=4['&h:8e2!=+L\H<39*LCskF?q8ir^@tcYS[fI@^_0N]7, +S5>hYtZq(e(nr-8W0bGkTi,A_n<+9NLERae7dSl$OQ24de43,rWhrHWU(Ndu8nF+ +:/2P5K"WXg]MO^8EbS-rJ4H:-8)g,nN6a<26cYK]>%k7qNH478Z?>'Mng +!'Mng8Qc'CMJ&3k4rrAh.2&iWn[Sq-M@ri^H"34_=i/H8l?T@hq`^du$N3"j_).o +";$TTIfUl-'@bE0#`g]9OqN1W_!7TC`Q0Qr\q%e&Jd4^>#u$-lY1b4Or`esc;9pO +D7F3b0ahW%?/l1^ghog;e)[?D&#ncU6&eqU\EL2UKK],f-/`,,ATk!f[-Z+U?15I +F8^3pitl^WG0r'fL@2nQH:7$\H)[[1BQWt2W4kuc,u':f&`Dmp/a-`9Oj;Wji%_s +NrTciar"b:D?k.+2\*@$DK_r$$;IJ<,d%!Y[^+cY90;G,p%*/_M;i;C[9nedrrCZ +JaKhCCbkDmI"S62]JTm/ofFH7R#6tEji,i?DK24CgLj\GR`$0^bR5;.9ib-K.\8l +crOp=<#16re5$j+B*OdtNk5!e+p&an;r!1F"g#a* +gl+"ADWi%R.6*!/0\gBS%rX@*iOVgFo!@2qgA=[>I^!T]l`]-3"\#6f-%!NP6"9/ +CI:P2fAO@d)f#;DZ@]b(e]M:][qbG(P%J:W2":>5g1)Rsjq^BEWA#$mKDgOd3<8$ +Q[diM\K($./AE6"3=BpGhg)Y'i/Z.f;-0!]mk:gRO'&G#Rc!bWW)siY?GpMgT5R; +>"`]aR_^*!Xc!5u'pnZGNoJe_c+(eAPK56gb<<:F5$Zglatd2Aac7Ob*JfXpV;$U +B*VLW,&kb[l>K`bSgq#,,X/*pWD(9t&$WA(Z[!:E37RF73MD9VlF4^m%PEi/lhF, +\&FX)RN/Ng,365<$BOf2MD"3\RR4-)!"3Zu?6Q>!$r-/9]4dr&[4Q3$g,5<Qk6 +DhLepNUfb)7\oCZe_)G,#Yf"!.CA2?n+7?m\Gge366;X=P7<4$qJ^R9"TNB,9(1+:g6>""L0'V:Zb9#L++]Ja+(m.;`lS/h^Z1//uS7QMU6 +8fE<]-9Fed=c8MgtYRS[M>7h3>FXo;3>J"+S?b]7Bos<0M:$@HcU?"k%CNhNhmT? +V`8=2HKb@dBAYsO*a\6k=+'5lMC[bKkH6P;1c_G2%&<3m4J:r&F=j>"L+12Bm3@A +d;F2=@5ZEH&)o)&34Pb=3HF?kIuiP"p1TC_[s+Q)AU9=i_^$l +j:Jlhn=7icR"I=C$"uX7,>DEdT^LhYJ4WBom6Kf?"WG#K>NdX7R+=nMW6.jTFlY: +r7TB4:HU9U[P>cWF/*Y^U?IQ\*&7DcPs`X1I'9o)]9r.[*=8fOql?#cDKS*.`!IQ +"U:/qj"#s:(=L=#Y!s^!0!)S")]1B#\7])BMD&?5\Ej:4A,;Gj=ofEK+`OjB[S:WN49C8FR'uP'FZR +.aROD?Im^=5Lr`N?F5p/;YpB(Hm-"j/k+!F12G3R6%I7;lXJ=;#C0P1=#\A%B6d* +0qibFiu;7*.h;Q35DIn-(/UVcGjQ-ZEr8m_]*9Q,c8G/D?MC3EuF#P8N#jC1;"A7 +04>!Pqcg\.dWai^b1>/>3pu,Z2"d+T-+cfPRc[P!5n1.0SE(*X^f!_d$S3fH,=]"RpK%#$7 +b6lNK63\e)>Sk)9M\?/WkQK:aJ\+b5,fEfitrFr0<^Y72!Pj.3+K-_"1e ++7OCIS:g4+#>iE9SpRV.kd\XXinls0.X3i5pN`BCUN5u2Y#WVDiAU\N<`_":rRmC +g4aM!&'ei9A8*8Xn7#ANlD/RPmjlcIL2:9&`;BbOsq?S%o]q[%B#.)S +=[0^99F07k#hf-K`.GqnKnMZ&$\lXM=,=Bik25m9a-7,c^MZ^%?m0ID?kGF\Lp-- +4LT]+f=]LFbU+hb80EW(>6sC?!qGgq5bi#.!$0j-kt8"7]VP;6md0YTr9\h_]'b+ +aChK&,>G3UZJs6L)BXIn@4G1#@m!aJETt_Rt(ajp`eQqViJdI(t\@XgB8\c/U@rF +g[6LEg;i7X.M8@8_t/#Z]CFpk+,$4,S*-Y^@)]nafBDY^=0*\2Am=&Q;Zk#j;_Si +Jp;!Q\a:p`'COa!6_k;i5U>ZFul'>0V6)NG50>UO'0'DZ%fbpq+k*4'G:-`M1BE3 +% +bFC\He8+J\^pngqdiBDp?3Y&MEV9/_gML-t1N.Jod*$&\pEQ8mWjmU"/PmAs,G+M +Kt+"Z%\$p1.Lg8_#joQJ\aI+_!mr$,VmDWUI?Ke/!C[#5EgU-)FAo@&-^hiaQ\:l +frrY]_(8!(M$;'TQVQ+LmQE^1ReJ+GLIfnPW"![\2k9d$o;[+beooS7/o1[aKD05[o@mMAp7'64[EB?/:rT/ggF%u86^+(O+9R7TT&)91T=HQ*DZ3\bf% +&Ti1i1Xj?Rj@T=QPO*e2)A32Cs;s+"F82ai6ML*hK*oG;,*'FLXtUO(a\LR+TH>E +K$/#am'DAm8cW<:DAk.1bUUm)Bep>*.?qi)$c[Bo\ec.0aVGp=t-8!.:sHK9UkT> +NPI.\O:OKG3UP8"8mKu6Xa.%Uo%)"9C[A,XMq_DM7sgY7RUn+0(#u6Wj!S=)`]kF +MOY,"(M5RZ[`!;XlORaR@YJsYl^5_K^As!?jXl'2f3to9pj8k4"SUD +88:Ung\JKs/U5'$m/*O398Ed/HAI4IprZ>%S>HJ\U:RoWfQf>pMm\nM4"Ku,SSbZ +Yd$7m$bWalBgYS;O4c%$F7(gh'SU:jeNZN8L,)pZ)q@'kF57E?nIUEX>!72%6ahj +6ju&'D_LpknI#_EGT0?GodfpjCAZl"W/I347gcC52;+H_+Kkc5F.U`05KnLCtSJ4 +8oCe]G..B:'g'.VMW)7_=8LH,DB_PpXWb)oaWYM5;VtBb!Sb0P>#N/XEjEXo;,i\ +oAmCO`pHIgeStu,SWg=:8D8_UTDZi/rb*N^>aX7tIC]]$1lWVc.2Rt*?HR7QTdV_ +k'mnY)gQ)BdH?Q_b2<]GNKm201-huh#;.Nc!m;7`c;(aWZtJ?\3tY9!/Q4_j$2`a +\Ptg9S$P1;JbURHM;/-_A)46#dm'?'uYnALJaeja]M1^`NLUrF&OX/>5ekFnN?7X +h/@ke3-M$P^0?N%Mt3C-]WNP4Y&",g(m2Qbk9JHPD6ubjE>gk3P!VIp +[j:tR.\UgR+AbD0;?F,d2)(@JP(V4Yh%s%nmCiG,YV_fup-49Q4eG]>-n]n>5B=Y +^Z!*rK/4`;,5l?,i>]d/ZYE&5aG2pH.qJ$f:b_YOnQpTP1ORn%q+]%'Sq\$CbL\= +_Z-pM`IlcZm3lFJM!2UaZ?FD!p]Vfq+3^J""/9jd#s;+1_/;+20!;+20"aa?V0T1 +&0rnjC@i1+g.L`j.6X//_Y7JuZ_^l79]FSpbAQiS?)=Yp,nnECUFaJ_m5h2.#IL3 +=8(9/(-U<)lY3h5@U!_>!gY/H*mBTaME%`MukmIr9bYfTBKio[;2N->tPcEntJ?& +!Mis/E([YpiN-$qalHW`$GLOlR2V70]ICHLE.hP(F:2JNW\6F6[NNthn)2XEs_8oUn!;r2aN ++KQX!pb];ZEnfJp=RdX&B?K@3,)toER1SM4ESmd`s_(T$.LQ.@Y@6aBSHpb`C.4c +OG)cs#gUs<_[fUCl5/&1E1KTLRI"@dSp;PhYd9=JJ:]^/a-k\Bj#F08V^dNp>rJ7 +^:"_[U?*-7YV1fg@6YRI1 +a`Je3-lk$]Fg2g/Tpla6Y_*(#b&m"T2`ld\V"heCNR&ja_P!i+Z$Y-'sD2[!HGfF +otp);E$F_`BWU1kTmc;OkC=cZ=RQ>WL+\Sc^1/E$DBUgRGUUJEtf164-FWsiQt!! +86ft$BW"Oe?Q9lRTZJY6kQb737mSmJpGWs=Q_'9i!tI1QPk[YKnGqAW26B&H +7O4*Dnf>qN*Ms/;L*SBXH6Sc6Y/AX&U+>&B6,g'UZ7R4Rt!ej,BcWla.^V%1iWei +hT"6D0s4>$.CGLW!-4ki+#YfM8q:m2]d)4pE4jZ@WY%n1\H?LIPEWd&CG@[SMhs& +\X>ATVY8j9@JWV.A:dUjmaEF^?6K*rDH-_j>pn>VCZOm8!O@&Gm=!o'5$U$P1rGb':a'2c."j@LK0?B(h]0);<%canm +`t5rpbLgVrU_#=9fZ[C<`2Q4tE%2T2`D4\qA1p>Bm#XPV<)U0u``m[j`heSIX&19 +SmsL>Dmng9pRF]h@M#i71omP"/n:`E3+V@a9$m:b^86`IG-f/enuGB+=XTo?X3iO8H3K7Sto36uY@M@1j*QXb*O;0Y98Bs>StjKHWY0VsR7N:tB8c?.H/'^AFtuXnM'r+q(3TdZW>Lnp>)I=g@\67V.R@0Z.] +ME":D?.YS*1PFRhQXi+g@]"Nf,BiE//`NZ9m_Qd]\`Ng;13q:NsU1BE; +[Y-@u6;i1B_)0#SBDOkcOr1qlK7I.&g`hm:Uj\ddLkcFbT3Z74]E)qP2%XQ8f5H[ +!r\fe$+0p:f;9@?;`B/X`uS/`ar$MIjJY8IUIR8dg_O3T7\`qUB-/;k>srgSj'9b +SLikADF9ACls+NUb4nln'4JK=cQP4,Fq_:?t$Y"QmXY.N!TrQ]3?6ij:(XiA5mO% +=sg.'g.'ZA.rMm0gB:`4^lV^Ar8_C\Q+/313Md\PFfqbE!.4=Op>4PA#&C':qJof +8lU!%<4LC1VdRX[CaXdOYcZ\(E,\uRN +:8eP=d?aMD0>Q1`JR>3[obD]ODnH@0#%-($k3$P0:lHeXR32,k2YN41DYuZ&.[o_ +ME;kX3TPcXjnFnRDrb3I(7tAhb7%:m6p$e9!"-.PL2tpDT20dU8eR;qmcrLboD/? +emB*sYXZc$FrrC2qj'/:C9.R'!it7W>gJN+fa4$t.dcN'IVVi9>%$0fU^H=(lm[^EdFlD4+c%[R+p@q[^H( +7cK&>"cB,6A.XcPjL"=B.;+:iK.ec\XEM+Q@!8oV'\b#A@V[DcUAuZ&-+((8aF]K +PO6t'E\c<<$X5Rp)t\9A55Ts\AN`Ke$1$=K<5C67]/8*eYF"h",&$QB*F!Sm';!k +pmuCkYPEU,%]BO`^o%SSqRS(i-U@KhWNfl9TOP.G/fS6qKgedYnGSrg!4,;1*XqP +$Ke$O$,a/PK)BJ.&K&j'Zj3>I8hG;J1F"SUb5Y3"*ccWN1?bGW;Q,Kl-&"I_^KN, +L<>G2jX8SE'C:8%dDpQ$K$RA[QS4Pm\HN<<-T1b)N4g`m^(d]aUqR)E$NN.me!sk +L3YlcV(AVOY^'FAb^/9ZaYqI/?H5A5[eRo=-af1J2[E-H]Z9-pSZf[`Oa)Hf=$dq +TO0^TLl@kqL>R^2D!1>kHc"LGgU-!RVSnU&g[%9$P51&FaZ1;,QJ7Q(n-2B?dOYs +I/=.Gj8%nJKR3YU^14'3imdr*O)=2.*)2EHOnqBMET9I$&XmLK(GHX#uW`!Pf<`EZc@SGj%bI$-,0ua;N9J`XNe`%meN$XlXe!5q>/Mle:63:G"6*doEpmXRY(MgHt +8"&"@r"-K%,Cc2lkrcYpe"3A-ZmJ`2HPR.IaOg$?=UVm-*r;sn(:[TK>b0-TE#BD +]ULSeY04ICSJiOSMO1XEPsVLb`/!OaaYXe( +Yq>Q#QfYOp#(Cr4N-"Acfh?j2;;@LGGKh8bk,/;'-qkV3gh.W`>"8(q>.(qel`I8 +\=6k&':AZ4UXKa^5PEYh%XrY +.PZPt_[$>Hat?+6@m%RoF!&#WOtn*:\Uk#Gu7COXMi+(2akD`u#lT>lHU/jD:HRE_b.O_ +]\?mc2If/^IiMqf`+p#3>N=5f&CMTr7jV^]mqH_+t:K=6Vg?^DZoi2 +]'?=@82'Mng!'Mo%\IhZO[q"mq6q7MuK7iR3\E(2-WV+B@(-(Y-H.Cj2 +`c-Y`o04*rPW"IMHMT3Z%RVHik*ID7Ra]N\cQUb@L?<4MN]=nc0Lb$ub6tjDi2j" +-!3HK,LM9P#82iY;P43g@s&smGEBUctCu(=@L]lYK(]ccPC4OOt=nJO^0:doE^@K&1'e`cf+k6mX*&,tBloM0%(hY2O>ipE5hj?[*PC>#hl5sqPrhalCTl +R'GJ3rNS_P?qq]tne[kTDj>qCf;0;N9X7jB:\Cie@6%QV4<1m:XUNrqeS8g?eg,o +[T.%Q\0YpZ5+8">bt';W9REl*(Im%_UQC&:!]hP>l%/+U4h$ru>7:6_1nJK +X`um^r)&N@c875:g@%7W@(aRY16N'NIif$T=XH/aH4QRl:8"6J<-=IoLT$us6n[ +F6u\3&5"&bei[(HBR&nmJ`N[6%Ssh*ZP!Bl6MEcQT5+5'rR_Y+'onqBMREHs9Yfi)NdaBjm2J%L?`=6D.fj#EaZ*>:^=AM`j]2Ap_ +JtD-3lSjT$nF8'Fs*AS,A2%g;$?/>X8Q^6.NA0#WJ]A98.h$scPr+7Bl6TR]+c.4 +cUO[!&i_3l]WEO*?f]Bhj-NGu$"Yk9QQ2c`^N=-"eVj5*s$bf10\D]%Y44G8I#L( +G2@4SKSnO\5>V?d[Q'I2hJDHJ:^r!q!2[";`dT>6:u$%JG +'eS\#V&+G(Hlo>n]Ik-HZ=_^2AJ@&p,][$*\:jog[Q2p(1#+cnW]N"ANCpoAmSqe +a8qdV1J<_KF((pK:V6"8@qPR1M(>NMis)4MO^6Bfb'VlZ$%[LJ\t!35_7sX1ROT_ +8b<,%/&m">#1;7>rM,Xe!BCo[`bTac-ug\mBFc[OVIC7[uSsLNclp8AN]=LE(:b+ +cuQm6H*-G9-V,0(#aSs'[aIr,a;!TuR"jBUlC3htcOWV('e&g9/2sY)UpcSp87N' +"b;h2bq1]1_\/d<>=fmTsa`D+lk==3E+&J5'09gR7AI7(3Jet]\RN"i_Ve>)(;V- +&>qBao42LE'7/u"g-/]ot\Ga:03*.5TP8.!R20Krim>B6&pAXXQ2D<7=Qq=dT)j^ +F=pl5><_^`6i(?icTi%Gg%!gYM,F'3^Yb>.it8KH-q51#YWMjfj/K4$pK?AXcINk +\=Rl[b9p9Es,u5/3C<"!?5!\4\dJ,2WEl$me$)=FSG[Hrn?F^m/]tqC4QGRSj=a9.4)d`kaXuR +tL'aMeUNS2t&LsME]p4.h`OP1;3?/NE3q#gu47VBGee&:ugF^9I28&?u\Up&NZ,5 +r+_`0[:RNVRlYF9[Io@EI'e,CpY.'?3595EXtkr3H[ +]jIKM;H%k>)jr:NO%m0J&>!V5>=QDjSAnC=&2[*ZUo9E5U&\+6T7mD#%+qP!1h=p!ddjg7CHE +'7^(o2U<"B/1>jgSgos6QC@TXP83"`U>*f^m;b%[kbZOEu[2J-eg0f^jHS4r*VGOL +mqq,bAZ:YbT?^aP$[Q*/nATD]%Dn6$Q9hl"5[d51%\im3F0:4TZB:DSr^r+,+d-4 +4>II_m\1&8c/BI#r:0B)[^m>akaG1(sa3+08?W5qaS$/=^4a9K#g5(_28F>J?=Bm +Ym^j^PM;e7G8pP7Ju+C?]Y2F4[C9/N?CI9Ph33oDgN_^^812r8Km5:EaWN"6O99$ +I)nL*AN0$*kQSVmRi]B,bN(5XKXO4#ghug6:HCQ#^+%gYH25S6N.pBatd_q8+$$f +dG*0*%p!-Q::GSm;`gU6.[7m4L?frK.V_AncHS`#glF-!n-F4fWf.&broVV9e67q +B>^pYOKQ?UCg>,0#d2o!;e.6r")-)nHTsUuQY<7Qu?R:Pdapn3i+P>bNS:7jASCO +peMST\u@04fTZ;f($A[`PTdEZ"lXKnuH7_L+6^UG]L=W*$4eg*p1_CB[RiVUY8?. +a;jTh_RCE.3$Tg:H91-kj42Wp$MJ8sG0Q()g%p"urWgSMXYHR6@mfCMh;1<7 +)WBI$u("$A58Sk0m40@\NQh(m.nElE!OSKos%I'\mGZjoU),Th>\^QiX,5moioU0 +qTMU9YO7mVE'JpZ2Y9lh?.d-7Q:&mE:Pm8/gQQqF:h>;Tr>G\`/d +sHVeTLXq,r^qH$/d!4FN:b0LqMqsWYno-qcN.D\D'LepI_90MUl9dqY[Np>+p]c0 +o)UM'\1CE9(gQ-Gbs^j[&M:R>8ll2#7KGXPqCXtGfVH41ds_+9,/fk[KN.;b' +l,[;)=[1"F'Veu`5jIUA?X[;nCQGM@Lj<'eV4H\OUO/6$Em8a]:Yt^kqq:c,l!,s +uZGjEX0:2h/heQ7*LQ4#;""m5Itj+\]n4NNduLFese%T+jV +/6OVdZ7:LW?j$[9*,]_%/:&e0aEB6Xb>P1dtR-TsIlA?"+Y"gd<=)qsaVT;1.>hp +#c6i%VR*7,msLRP2eU2lu%o9:5.ub!_W(Yqlq*JWL6OSjDq2#Et.\#&<8$Zg(@jR +;H>gdS]_MH!OroLg@dtUlF-A[KQ:ai8U_=q7kVPgdub""sB'8@Yp/5]11hg)s/aD +&-i3#i/u)AN+YNXGS&ib&S1-EYK +3bSr-XAmEB5e%0T`jYU#Pd,^^=VAl,93S/,KK+QK8CirYfp#DtTg(Wj7CFck6W>Q +M25aDmE/gVI9Di8Xt-`h`DRbpREm(Oj*-o6ON,c8=PB-Y.m%dQ9F2"tM2k"3/0qA +p08GEX#PM)^n'%i342\[9af1bFN$:DIc:LNE9YGFC6PIRffE*Ok6/!d],_>ri33X +[&\=eAh&26'r,($(_1N(8AXM5O5aU>CeprlY*Eu9Oh#L>b`*BWY9+mKN(6"kKm]j +IBd#GWJ+)om1jkP[[s+iup.OLs6ct>*j(>*VKdC?Cb@gBQet[&H@?+!YK&Y>>N5n +)e#*Bb*#\:`on4j>K[W'-)J@@^XV2"-\m7^3IL&cJZ;H3&eF.JtS6-%65)Zld-Fk +nC>B!*GO*QAsQ'$AiG=i""Y^^[+"38fFs5\TuA>H8-F^>:OiJkM.U#A$4iV#q1c6 +K$h4^]t*%kpT'g.pLIu.mBPCV2ne7;-^A,7<57EbBYX5rQGmM-_KKr*0I:4.Gs8G +jU+;ja3]Dmg8mSa#MY!)\s*l`_%(+3R7u]>\8i:CURlp>*Q&`X?>]*OkNu([[um( +gQ"G_TZtRe[9!BGHm".e/Ig@@#4/S2#iPiJ(n\(M7iJJ@M\B)`fnh(GHI&o&o8E1 +KQ2fC;J!6s3k[[oi7a)Q2R-C3,u'#A^1\'1H'=840;5L9ki3sgW;]\g.hi>(rIBIi +8fIHD\fH!\qq^L=%dL9B5#t-fMXJFW-LBJVKg/aN9$FlP4tdlG%nSQg"ibpiIK5& +lu\_$G18@^)CQkEfEI;Z>KYkG]7pY^80)Y1*h:b\L;R*,PBq"FpD\/t1q-:NUgO` +@Y`,4K8I(D7f!KQMgY7/(g$+i)0%#ig8*(Fck5_PRK]@]9ldsT9m@'hI`7hi7_`G +BA(:n%rAK="d6S*d!+G8:p#H!a]ja!h?p@k&CV3V&\)[Y8.oTADs.36-lCB_W`\_ +hU\0:@tp,:+=lmSC8NXS*jmb-JbO9X%mMZ'H`"gO;mee-7)+'?54Vm23kfVR4cng +ZV>8afR%Ig-k\%OIZ7iJ]Bp"<:]:?2HH"@!+T8CjgkBkM1j>_TtiW-ad'sm,\Q=c +Th^hZ/,6d/?T-]S"fQ0'WhlM2>,Ck[XK8EeHU2Y;4Cl3g!6Os8FiSeHg(_'Gm$R' +:95K-8]\+#j"7JjtKlTeHPiVbq`X+N$(>pG=V22_Cc6>"Gr28tBh_-rOmc0@JPs2 +1Ef]oekYJ`+agH[Z<:C7BQ!RF%,,G%IK2q&XCPifMbG1H<$i0)Q=8,*PhNe?[Zg; +eCiSD3Gm@1g2[.-Nr=1@H(\iCG3JT`bek;G0Zr;(O@X/IG%eWJ_^o"3Zi4"#>;bP +Cp@>\fUUBe>0TOZU2:9[k&R\;=3$^!.qAaQ_sk8`d1SV))[2TNO5a%7(@@CL%L<, +7udj?G93N6!$$-`.J#m#f%[%i7o.FfEaj?g0(%Js9r=O6Q>[*4(ki]$N"DtS7Sl) +-!0P=*0+m&hMA>`X>C_5pnh6@l^71O[L+XL2Z3CR%`]RVfaWZ>L +"@?TW_f#<3T4)=,U?Co92(*>_V-!Zh"K8K@3,G;'/V*_,4\$m*&ZSL1+K)rG51UN +USDIRCVP4I6g!]-=l#8JF8.Vb3'V(upf&@&0A?)d9 +S:.ifoq"J^rY]I9g3cGA<0Ub:87HcJo-\,=!gjSM*2_L02 +Jk:!>a8M9NE37%)dYGBRlCDpBqDRkL$rP=4Dd=hZIk#&NU0oV6deSfLH)*G>7'G0 +FE,j0a(E\KS!*I5XFSB7\SQHo`tg*L^DjmK9]6%acp1)945pHZjBq.ht/<.de(X` +X4$XmEcKgImT9QBhuXgKt]D@t7:_pDSJ54,u4^TnI09)!#(pH@]62,6$eqBb@+n" +aO33!.(O/P#'62k6I#CCANU0Hrk$)I:Tf#"8dp"Y^)fo\2Z%5Lc^G9n^lE^P31E^ +.;hPZ7r3Wu:h5GQaSC*^;Rk$qKD6$[;JpZBmZZt?CKXrTpAY,C$UUu8UNX*Y>/=a +QE(BA@q9'D@",2h)GRR:5M_1!IsL0'#g/Bn3'@c262Z%0Q9lmL_DlI;kp$JcYei+3q(d0;OE8E,/p +KD;;=*6l.X"O)f?WdMQV2)l=C8S%S(R'\,=l4INXQ;@(?&7e@g&!_a?TtI_=OV%IsZ7H$jRcPSG""`=fjjLfdVpKJrNQF>U,U\X"M7\k7MD($2TXDqAL,i5i]0 +J;FX=bA%%3$7#RnPsI((k%t#V0+m&3K9IJq'5[$@N8ouT#\Q[o0gsFrb_SJ3)iq. +/8T79#l-t9Ok1g@#AU@37<'$MKO2aiYKXjBKXkG[_QHK&+,%_G0m,S;UL%N+*AUAMsG1XL*qOq&`?^B,!KLKs=2_UI:F^d,(E$Y^XhB`?HOcQfS1&dY8b>NO[p5C&k=j +:FJ*#--Nb#q_s9k&YBV]GQO:L.O'Z7c">)60Ld.Vfb`iG#?rcfDYs2;&IK=N/S_e;jHN/.M20^KXHYFKLRj^Ldhko\'*^i"4VH6C$c_+,0Uh +f)+9'GN"m38jhkTi@>3$*_mVN>?d#pBr>=G\7c+f1bQiW&JkfMm&Y=>k'Wi.a3[L +Nchk-1i\**o?HXnadZa#59bV=l#4*\je^DP:'UGU)[.h]jEAdfJjmb.om&_eNmo8 +dXP=&bDR[p`;[2b(PEK]&@?jICaF`_J=YUsh]8rqbhg-o)*<7L8#laNnjh1/:=rj +% +[\@-NnTDL.6`?BnC@A.bTBb/`\f$naU_^R+-;6Ks3_G4ZaRK#CG4geUPA9 +mr%T&go0XC%,g2ab4PDj]k(IXN8qB7>&qh/LrN$M:J?*55G.7EG=MYkG9h0*(c]h +/2Y-kJ5@(DGmUno>IqKsHia>=8g>I8fhUf?jc9JYi6iR,mY,6mpci27"X;D+@o-; +=,N08Wf%Rr-s3TK>gH%k'lG40OFl.t`D\nti0ed?6idR8\?P)ZY># +^cjXeN<2rr=^=L%=qtH,tf3n^q?1em]g(LKCYc5dL/6$S/Ie87+b;5Y)49RhL&L"PT#[a4j7LIOZ.*6I][8:'AKENZXb&<" +is-IuJ+gZ"ZYn]fL8C^0T'/0'1&[X'jcZf=r?_gZZDS:?'De@L?PQNAeB +&8.Z6OUH8Yk*^3ss35W3R*@jJ$Lk=JV6&5`dRaj_:&6u795l_WFB9jB$!6M6a7R^ +Z9cL@dBOIqrq^-DZ.a,a07a#B/X&g6Z*h*S..OHR."(!09Jb'n/>,EChbcE(Ln8m +acsfB;`hIWA8CPdX$%ejpS1fe+#:7P#cs_3,paS +=`@m'A)3A3j;]4oE\]A>o:.EqkeF9s;P\,m\kdP'[F<65pE"H*]Q0!8Y]5V-dVi4 +?[F<6I:,sBTG[;9[e1D2dpo)jiq53Cq!Pc*\Y+1au? +WhVW60[i,1[8DJi*I7^t8,9.f7r_,OHik07BKX+Rl41,C,.aW#LJOB6DT/_MK*4( +#=#IA5Wf$"Q56Otm>?*$0*bq2XH"k9TK!;G3<:Y.JIf^Ae2"IJ\>#Db[h!gG))Tq +dfRNp1.6A]V09T#6=-OqjW*t1*-L'q9A"oD0$M]!mK&poEPVA&dTW=>I`Sm1'eLH +^%7%M\+5FY(oqOS)fiI7bYR[kClEbV.s"PB256qC\s$@Q>e;OX7,(M)9"1+Ins0E +Oj,Lm#*N;P.P5bMH_mbuYAd(9nHT@mj/!?"Z&jroWs@^H\d4bPR3AoUoA7A7S5*Q&dM)4&DN"]ug'H!Z*3VC"e-;hHaf&P#fu\C1 +\Khs^c"h/ALm!=>9*AqGJ5d/-?j>RT((4@dS'N;8lH\O+'dK152\81"H!&L%ODRq +N8)L<72d8VMdJLo)_7#Sa!$e[j0f99".'inb2*!Dl[F\fYL. +-_b@!-(dkiS3VUOsU)p>jfTNk]\8n-jF!A+pD$E%jg'IX3jX%fD1V+e4/=rriiZB +^Qoq`+b1!%Ajt*.)cJHW\d?3HTTi[,+-57#HRf@Zi^*j,h39>uarfEV#B[a)%8A[ +FjekUiW%&WNG6@@n^#ALZ-*5rHe!u5IDWuN_ShN] +Ejam0]:VM+V$VO\7%r(aG(2uneY`m7e,=s38=HgkfJWb:@%oH//Qfe +qQEFd1sHXW_KkR%?A$TFgG_p@)8M\ork,^ofV*Bd?\F8StE2T[$;YO4Q6u)\".7: +Qk6):[I8-1E;:Y9?1iEqirV<3]8h4.MTq:(EK8l>oA8d,[K^R\FGY4__C=@/jG] +`S",0KAq1/P85ihR;(O*%lmus^Fa%s$TeF&(J32(_i&6mCn36,D3?F6D$;Kdu[mZ +[&")!UWZ\RKt"jY(MSFNHAO)(/;j_bJrF:F):`"!-1f1"/.^6ucp;6Z[Wc]Y4XpH +arFcb2XeQLt%NsmF.q(4I`ToFL7>AT +Nfg@jCXrF0Ik3m$u45LiHGniNi/*h8\O[C(?19JJ%TWEoL6f2>6grg:UdjhUli?J +XjT.E3-L +2R0I>A@%bWk1m$/N`Rig,a>E+o("e?AIC3?W$S)Z@5Y/l%g +i!jfIdbMmirG)YNP#boV/D-f?Agd"qg3Z]ElchsgoplB_PYl[QKJA>7#G1d($F(a +Xs7s3`84+d'@?ZWV^14d)1LQVBt_Wo-Rq]1sWG0t3\#OW5^"$%JHBfY7)!@47gY/M^+je? +$4g9S^i;./VPEX2L%jiIX52];M5W3,/cBiYEtigp66R?8]#/0\s;6_csUP[*10Ye9j-8EWYp9%cB(+jg)a +#kgEX.*g+Y,$en,!p62`;u?f1UQ0^!.&kSOuqd6L#]YI\74hR/?`opYj8ZO4-&IF +3'@.S!s7a+4n?B9NdI^r2Htp*C:R:;7">iZDP9SLN)o^9:Xs4"XEKNjdqs8D9>.` +]/52h_XCCrSlGcOB2HrnbOle)>93c?RL-B_s4;H.:GU2h(C`A;bmNhZt[]i*bd6Z +oleh1+\F4$LSN?!(?g=KVW217P3o]pq,.W4cC2O3E,25I\kb +01`[*bK?r#L2/G7X_f@-GpdT,E8rP!kTBtM\"gg^rN,/qYO4lC"!CJP3+9iP`BmP +:ucLS!2nXN8E^&qW1$@6'A1-G^1.t@0H7K3B-C"V,)Q:?&M7nph.PR" +o&kL1.r\DABdA.@Y;fIs5B@9oeVMiVtMC@j;&O[=$c3MKMSo@H`J]AutrG&YX\Kuu#[Z(?= +8Gc%jA.?>Q>W+U_5F!ZT4/S=7g0OXT1qoG^kTR5mU92#>EB"q.(u2qklB")Nlp0W +YeThRS4J\ODOEG#_OE(jk^`4Dd8Ej/$OlB378D`?%\;]/C^_t/qj1g&NST-lUWfJ +lc'i-R&#!fsH.EUTfc7u^*2!Iq])Wb:o?N1"XDpto2)mGJ+.f#ZOU:(7ulsn058L +$4X"/5JOX+Cag@n@4AlnEbK^TN'XE,"j`E +8[<*a_e%6OcOLS?e26!h:s('q=`Q9gMWTd"j5W^<0 +*PY?cJIqj,4"32HH;ptPEJ.&+5e.&)S!o:LtfCiai1gK+\)T22sn*<8'Z65>`:_h +-W'!0BJ(!lT@P;Dl_+B?HFaN/%]B^bTIs,l[l%6\%c+9mmW5D(#4)_]#,4&dNcaB +9#2=AH[Z,N-I>"@,q`TA92*6BidrHO`)l;85^9\.G]M?!!#:cZ;1g%G=%IpLYHUF +p:fFDp\A0/FDEoPUJZ-bf?!:U20ish]#>T`:BL^'4pqA&5r\j&"p[0P^=Bi3WAN! +fno0HV,<7U)B"*hs>(>(^qaO&<4loT(3(E[QPa+Mjggjte$pa#rN0./5FgMfVCML/tllFJE7 +Zd*M-\C)B#&lO%O?"1O*P/Ueg,OQ1B,BuF&*8LG"9gl5+ktHKAO4-^0eM?9'qP-. +SRmM-3/iJ@BR]g9A2rLY7WXNk=]W5W`Ao3PmJ,F_g&D%RHg.gm&kV+f=Y1k4D5C^ +iUnsAW%WWD)49`jL*"Y/@BNDYX*aQ_4M.L*JdUQn3W<4#Ej!,EZ`u2ZL`r#ubBG:>qdc*Y*p59ll_WK_>g-@D(.D%\a\l +8%W"ChQjBj5pkmsT?Mr;2FCT%ciLRc +Vj7\[O1;#Z.PFFka!RBUg=F@TJuB'_A%`1tJJ_c=K:X$42QH6M>l-DRkj?uMqX4+ +FUI%ZicCZ"hN`K_53XqN?ks\b$3+"N.bh.+W1#V+ZUZrONNE"2> +jK*QQKjeGm&>7dm>,qPoQqm(iZQ1_3oa^_f:@2d['lZIHbONHhH:#<+heofYF4Z6,D6RfUS?TQ6!F5V:"6YX^mKLi+kn6#dp +^6HpJ*8o8+!1.hdr>A=haO;XeqmYi,rn&rrtGOjn[P$M-b-Ftg]1o5&$)gGCCX=k +ss][pj=fm<1rG0"uPamJQ9?#o(0Ti0UW)CtqtO)]-$QBZ@G]4Po[E#*&@:+K&h?b?c`rd\/A."pff&?;CY/ZO!bN7[qp.<>r& +H1r+.-%@J]:AT>6t==r.4*O3D`_-/mp:k8d>XoAF)Q=TG1,4(gfbs)5qTLPb-\5d +G4@[S7Kn9q7kK[@JPp2CN*#aeelOe.C$*f*[%>EOaTmS73#f0)3&r?(cWnY1rf_` +t2!`C5k!iKbPfEe`.\(=!;Z$r`V->$`n8M]<(c;Dp2OP>S3phs__$"O9.tbGh8Dk +% +N4:G_D6cl?lVe8`bHkT_jf[\%0#/ic?EKgGk;(RM`\t^]X/ITTV$lf/X]&N"T0[PaZ@OY +-Le"T"TGbpB6H0bDe_mZn^2[Of\@V.m-a8.jALD2[]=C5i^IbJSm<(-gaapg2sce +*3!U.H&<@T!1eoJJ4\sMm!5SmnHYD)!*^t>Z]PVPT4GM(']k'-#Y=4c2^/]/k!refG*hY/"!)QQ; +*a0N3Bp^1P)SIdjnC$ej3!.]C0GM/qoeA%b>.He>[54=^h&m]#N]"7ju^1>ZrkK\ +b-IWkQ;g#S>-+@.[]-2EYh@.>+S%^njS&,s0t +E%alLn;GI_e5>)8gjE-#aE(M"u&B(r]'^FZ%JE!&h^Rf5<>+1hV$]@lI22FeVlS) +uYc_\Pp9&rrCu&"cC^HVWu_]'>V(2`5-i5\B?W]*,ZAu_6A!EaTjup2u>[-(TVI% +L+VCdG!qbW\(\b%GQG8nJ58l8j-nD3qo2aHkk@B75`?tO+-pU5*!=PD6qJ44q)I;Sc=j`;[.l1PmI`%lfk)e_9-YmFNpO:V1@@.M3'C +% +pFbIcrTBt.lAelg(LN-3]r;=;_6%B9e#'!W'LA&aLO%Zmbq[c(&$qqsO3QN\O0QM +ERkFBtYKUP]gFfq9@Xm'ua0H-:dGEXl7g;InJlpaNVNKb(2ADiueh +DbU^:CW[hIMdpgV"9Jrm!S>b_E)0&.G2MENV#GZEUj&.Hu.#\R-hp_2-*KTno>Vm:&]G0m#*E:FTX1/@8Lo9+,h%m9a=JYnkJ*h@:\'#(CrV,ki)bGg.3HZ`,OMi!l0/%9fFSCa1&2CgK' +bKo[C;k?fAJc_o4Cc=A'@IKX!(^2[<@+!i']SlkoQ'c$-Wtrr?aBk33I_.RI^*>e +77eN(Ga_j:6g4i+)l(j,MT!ZlUqnV4.D;iT?.d&;_`E4CaKuH=RF(!\ao!FaA_LB +eQ*!\sc%WH%p"h@#>.J.]4b9cRM$Nc$^@I5AaG\BW$,ECn:%[S5[m20@nmFe'U!S +Sp#6j<8L$olfL;9&11..[j2O*N-qP&ldD`kpJA\!Xg+mjQ8u$=a#8#:/45@+]\r> +J.VN`PDW$5CeE2m%rUWba$H!)uj=!mAj`i!Mqpo`$7p./;e%U?#TroR90/9dBg%g +nh?5pEW,6SEfa/)+s\r:IWGdhR_b20=;m<-r(7a[skS!5HVAX5KZ_D#JYA/r'("s +2H6EK5*?'X2doZ/9Yd&uWrd<89NiE%j8f$(Q[1H.,=X;'EaOqEn,k"X\HAf2r42P(-RNL +R,A]qkNS\'"Ali"r#fqL`n]r>/mHG=Jgo;Q'h-.WGKI@0_:LgbqaiPC[Nh"OO2$l +I-VapK%\#$LaD(j\XaCVq9'WeO.A7BaY37naXi"4R(!M"W^=oidk$<:Hr0,`Rh!+ +EG>S;s6S^r8@m5MAc:,dP@inOBd6E-T3/S7gRo_<]g>]B-RHhBn^7WaVH,^s5_AP +LuBH:FDu:KOl6Jfin>]kH9`GOmK8eJA][J=Us%Fh38Z1`WcsO)9u#q`i79?\\ge@ +T9(j>PNkF"1[F;RT0N0A2QGQP#Q^?tUYgXEj.>&detJLo*$)dDN%`BK:J:eJp8W+ +0C?k8^lFuDgHTT2[[()!RE(ZH*:YopYa/(!\MD(VH.,M>:ofM$`;]odjLm,YuG^lgg0>5AlEMr +86,7L&R:C8/HRM66\=Mk%GmXs*Q0QEA1ldc)8SC,jPXO5>au/PSTR4jE`^Z +elW*n/R,TL88lK"/B:3M.A$M%=\WAS%5b!\)i:5EZ]Q9/hSq_rQ`4AF9't`03DX[ +/(\WH5rVk(G[Gg9CF4Q'2Mc1dF#gKPA#\I425b'E7JI\SmDbVr@peZ?K1Gn=DYfR +UV?N^(0;*-LS+n->#?@HI/A9e/roqVBlW\*)sN$">,L!i]8P'cV2ZB72(:euHp.i +FB9U8-JG'hH60-36PfOccf@;$_.aqkI""Cj"O04Z'ICh<]0[k2IV]i>6KYrg^\A8 +!sG=Y1c[4_[.8+:QL`EgP29*2@5Ws+ +WSo]kKDu^r].Z]ieen_&[][&q]LK#b7C._-o:?et0q/e5\&SpN3/E!,NjtA&j<,M +\R3.1\c4,CpR:I5n`&ZfOZ2KuC+>XZ_D=k0>M<'],.*.5s2,WAYV5Jl'L0nq-!rr +BE!0U3J!?@8Lni,!cL@JXINa;Dg2X-$XALbs>F34Vq(*RluLmW"5^#>hqG(cYDb3 +QUI:PrntoCAiI)4"m)b/u?b-EtQ"h51W_+ZN,5e]W!"eSY:?0E^6SkL%1IN +P2=da:6ILE"uaO,hn+Uh,i!Y*TED@^N*Y5MXRO75d3D8h7hhG[PpA!53*k3B'fZ2 +Wo6e;2GZ_?MCU%XK=u7#c.tfT$>N6uI!!3:>H!hKq$b5QY=e.NXoY:;G/Q:DBp]/ +K@Hjl>3bG?/YI@hn\IHn%n*"YY=5q4V[K,YZJM]l][:!@.\b$JMhr<]%U +/tJ8Jt"J,m*\M!&lc=lI+t^G3XBJStR\B?JafHjY/\6[Y?*&I!sE_Jl8o>"gq`XS`"#+ +cH"7`m^1bVuOt`s=Uf[+n"HLN-[p,)*)2e"6&fdcuGol$Sk@:_@B\H8)E#9q&"cV +fOW*-71pXtBt5ul(C5UD2WRopGHSPtoLq^XH>g@IWuS"L5&0WMa(8,#a6KN +1O4RSqAS5#qQ)@MDNH7g+o?Ur@a#9]\eaG;q(h0GTrkBb!U.F,8go$u)>H +^UC\\ZaQ'AQLJ,rX^-\e+\7H^lgl.0IGPbsP%lGQeX'LorDSbPNAeC^"PSRVrm9- +]Y:MOoo>\pcZ'%HW9Z%8YTa0$Tat]E<0QBG)mn&ZU4==0qhV../F$Y.)g<0A?73d +u*."X`883T[I]_Q/#nQ>!@lPJ>DA,.uKL:X^]I,4k +-`./<0P%@/&'I(aI4;<>Z79+1rI;Gi3/4;mPIYVqUN$hq>@#lE.5U0@Y+?NKPe0r +)Gn4:>Tf,gk[)8'.bgM8Af9l])mFYK@_kc_l2@mJ^PlHZ&MXHhesuW!.k;3Pp']] +% +RU<6NcS!%=&?E6\t;`L`r?%]OG$WEBO($u7oG+QKB6>Oc:L)Y<^cenLMed*MVqan +lPD:10Z3UB8"Ho8]?#pq+KCdKTZ1\EV(QP^?JUcm2edD%B:opcI;gZgO +?bRZ0,q`N=`C`r:lM&J+1(E5hijRPQr=nQ^<&+isK]6Q^lM>["*Gg!PU&L46ialn +$7=`N.ugbH3:f<$\D>A0VjmElCM"e?ne7skR8a?3E8l'G4>D'#IGg3A/MZCAXlXK +a1q<%BI>_k4WW4`eq$$BuP/kH@;(ZsBjf>JgKUg@2!m".5?rnG[=!c6`m#Ab4#X(2kDNe&4]Oc\3>/b#;W)kN_VU82:_Y[IbSub^1&dWm(-HJ[CF%iY2"*IN:oA7E2_Pt34.H?! +#*+QRVU1J!0HTt7+ZNs. +e;+pW(:EcJq@$KiNA3NDck*OL$qhFjX.p2e'B-1'\?4+RjNCdHOIF4Bi\$u((fOf +8%6FkcorX?Ypso\b,@^n(Pn:hQSZ()Un[D$JE(Sl$&Z8>$Bek8EFfVaVm.<79N)6ZTM#CNh>\rrD>XNLaQa-s +r6ALr[[78s]3@CKVp)N?M2s-'Ch+4H,UP#3-eN8^;VM8p7#c^)O +2h9/s!=QFC),m_a+j/aeY(i^iOA%&esp>DXS*@K^EHDib%2,H0k!C@Dr1Kon4c)V@^roW+BteJ"=upZ(f +N(c#$Z,H52/Ro3U0'PN2Yj0(g&h`=NP!3qhZc">CEdOOP6pJYdO-)4d` +/K33aA50MgAMQnq&"Lq/b.D+jf_K^N4QA$8ccr(sL3-'7#n"^dR8EV]UQ9mFL=-C +oe.6FHEu8"*GjM36+Z:Z2pfunLT9oWMltS9mAD9M.>Rf-($"YK +B\tlHYGM32W*6`PLn'mhY5b'CN@M4S9uimHe"os5eP7eXloGYLc,YtV>>9=N:Fl1gXkL*uWt06 +Y`.2BNq":CL[^Nm#TM)8\Nn?(#?7o6fJH5Tl4KE`\RtJ0mkE&,U'Zd%O@ +7ZWf<)B7"Q>@(0E_6!fe*G>X"UM'0L02)VYncG*?YS:DU5H:I.&)S!.LX?@35Bme!&aln@BQ?!BB@7`\GeH-"8;#DO4?_85&eb$a$DP\'jp0( +/@4\nb$'>Mf3Z?#-R'-S<"H/1d.)o^bjbaaM4&fNg:NhO@&F55%>s@R&1Dp#)9B5 +-8n%1tGid-7BE\\E=3$0-6m\W50Om/do"+,6M_V.2'SZ.a,V88B:p[F?GV(W@50d +["]GdP/Ilq,`Tt^mIM=Yncj0,5UWEp>(iHC(MRZ_:J\ZRQF\/2J]1NaV+SC=$!R; +XT'PIjdMpr/T5C_FJ0fokh%]183)I./ +13V^? +-0+W6E&8mtk\G2628VKlX-2#U/uTM;QcptA:X/^?/aE$Ptp=!6QQ3IKti9-dA)3! +SP>=33B/YbL*Ifs#ZEk66bt);_nc\.Z:*([UI/2P2;3@Ngl-.C)[RI*/:BA%)PR+ +QIb'c3;KubI?@%l`L0e$%.8E5piFM;Yo!:]XHN=RNa[R\_=2b,S;.M&Fq']$?17. +[S;$_BXXeWr7-Xo45LjM0=]sLO8He?*0e5Y%-&(/mMN*=-KdnjUm#U*1eaFX>b!S +_XAe4Yaat#h@C`:Y2:T#bRP-^>BGLHE*J(<3*[19,t^bX\#,]\#A_ +(3deCHCFX^Nth50]@L)G)gNWTj$Gf7$A2f<4rNRn]NN&,;r'Cth9XOe8#aVJq4NP +kbrb>aQr&jGds%cF1mA./H"J3hm_'2PL.W3]2C>MVcl!kXeU-7fI&"QH$?%RQUF`)=q0ka@,[thbD>%;cl:t=tP?Rdcah-H*f(XMCC^F2r +X_,7^H[FL?4.C@hmm!2],]\E)kgO8"I2Fpg-_@,ln\"DGUYU05<76Fn&i$7hXHCL +1B7H/)"!,TW*a'?%1g)gMP2*%;jM-ZN"qjX +T'Dj,S?WmT3YsrnVFfVd&cKCAuhS6F!/.#+['ZjS/?`f/#tb*&<"P9-Yl_O.>gS@ +'0dh%Ls#En)ChUd8ni*bA6/mW(H$u*`c;^=,lA\,kJJ_!,pqV0MLd6XEr*OF*4+] +Y+l&nI&H,F@:NffYHd?C=-HdD;,Rc0VVC^`Ap=>:49XC9@iXq0XIWM5V11)apGWh +(XS_]3N6=@(cP1F+FFb9cj,I84BN[XV0nt(0b7[8K5sDiX;Z/H62KAME_j8IZ'el +bu^kY%3^39fBX&)p9VlJQ+L@!L]>_O)@N3]E)HZP#5ggGI,EGFTI(DE.IBHijAA! +SeLLkZ"GhH?^bh(='\!1n)U>&I4q^V@\e3Om,A;bbP#TE]\2GV7 +Z@'Y$h].Ff1CkVh@H5uq`&,I\DTo2AETUJT%-c +&V_;[0P(1X@]"MC>]3/9TA/jfG:MHRpFW9(,R_iu!D8j[\nAq29Zu,E&aCqJ7F0fj(#J!ZO:,A):<2cqB;Ji8=W`j)F\neJ&g +U=1tFsg>@V.8X>Q*:8XXRh`;i:K]Nj4?KNBpSp%>Bmf;Co!IoAIfFua>,df`2=L> +h"juj6$X\#=5&pc>R`tESi/u9Iju1ujT(@ +SFu53*"4(f\ek;3p,hJ2VD*KPcHX2+1HSCI#8U'tal*`\/]BiRfb[].mH$DGok<@ +P[/`OKqQ"5K`5oC9R,XJ0Z&Hct[L;jK9!9!Cr'inOu*A,jjioWekQhR9BG>=;&X> +0J%39>08a3&gUN8E7B(eq(mXkE:O9nm:Z\79Mk+^'%,3?t&Sk-j?M,hFQuqnJZ3Y +MD:LAbQPq][n'a1Bk(n)e9&fOO721Qs/V@srCf>\J/t-RMt;`;oKO@'r6&86#gB(*'B +D,V<5lt#2njl5u9g0!9u6f:C3Gmo]rXNK.C1UQ;]"G=TB9V";0+8PPdc_-]3S$H6 +fddI3l`\XQf9X*]FeeY+Qh:&:8I +13,J=Yk!U;RQCEqb9#QT;KUdrSbEHAOLf\jWMS.ZTJWX]9VDlnB?4WIHn39J<1'^ +>P1O_;!PLah@;Q`/k?umhKn_=eB7=<87_`#8dcR>]=10a`uB7S36r_-I\9c.7/Ja +_GCG,k:]X)WOcFGf3Sg3T[=_gH*_pX%2_R=C>AEQ^f(iS'L`'7JFkt>PFV2XpN$3 +Xr*TWAc$t,46k6I^e$\VK)@CM416E&rWJ^f9-OjaGpH\s`rN`b7`NB'iecKrBn!s +/7YSa]?C?#u<'-$EkW_$UH4GQp,0,P+fd_q")" +*H[F2Ie=o^s5D'\01G-IEb,-@C4&6-l=Aq,6Jbg(QH+Sk;hOo,dK.)o)P7B.]HrG +f:6?U*D"KZ$EZ.Flae\&J0eLM#Hut"a/1l;DR:b@[J@MKXei.sQFkPt4!5C;,%DO +EJg]MS"s&_L4Ee_-qTrr>:H'pUnn7aMI\9g +#>;\E*W(SD34o7]ZW&g&UD0U(I'ihO^0YlRO8uGI$cX9tN"!Cb:YFlGh)%cK5JE^ +`L86nZSg=&U7aVm65B%l5#7]V%MH4$t:7flt<(5@j@`/E7O-d$iC6@Xu4J;b]d0I +% +6`3".Y0l-+p9=5N^FfI%"%#!7E#s[6BK)'`tW8'&I&t8huF!J?="hMY?K6T;V%Qe@J!Dc#DNpi70"$!70"$!70#3mA4B' +caM&0kRN/j +ToJIJV8#kTu-R=!5F"\9ki%Rpu<\K(mHI\oRU9?7=A%ArHTN-,5.PHM.`3O\,iGcH-= +WuXL'k(Y=`R(7Z8ikK!uiuMK.LF+07=c*-'ZH8q$_s5PIHf>A7P[8GoU\PM/,5Gk +jIt3=62aT9FfbT*hWP*K7UufY.LWH1]AikT;9J+_WV]?l^%B#%4oG,&YLCfb['Ol'i5Be[a)"^HYXi;<:=;c$ahj% +;!iC6*!'-rnYuol6#p[FC1_IahUjs-_8d*GeJ.>C`OKI_;_R%"_MC#lMl-W+r(DF ++PWOUqH39U]'h"a/p_\0tr-'=-f,$:r/SRER[">"2HCL@kWPm-p?I/IUp-]^h_Dg +j:Mp"*QbpX\/LmEZ!53E),peXGaT^Mdf3QBE\60"uTL97*OX0)8cMf\TR2`q7.;( +P0L'h&Q/Ub$3Ml\i\UGNan=F,3R*e]DrfPmT(I=!!9GD/B4=E6`3TN2,3SBPe1%- +bWDR*^b4Pi.X*h>L&_ +c4W$3Q!@6\)433/%'^+AsBTr&oVX"J@;Oi]3.BiJ +]@=( +-9Kk6ZFAO3E#s9Zr$dVu2c+^.T2'.#]_aRgb7!Pd4LBoo`5Xsf_2pY6Q1G=G:RKc +tq\uE'q0FBp]=.G)CO[tkmP)&^d]IX-Za7BZSoo/h,0;^rWVMc/Z/-_g,k@kp)<. +&5e27C++P/HYBjq`*_$#SV4Rh:1iO7pZi:O'o,6$_JM'VsE\AKle8?F*YmZ_t=J] +ZscGTN`M2>eDj\'u"U2\&BAh2Gec#Wpq._:lqm3$8g)[&Q3e_c^^-:Y4S(FL@Uj< +[-$:JdXR"e8?qf$S-5296m@6OIQBj,8gen\`B7b,a6=ZnuX:ILj<18gI2dsZ[JQi +A+O`;G6qE^aNBX*LR_=Ep2"%SRqQ]HosIk'[,UVr"GDEN#kr>&lbOIZXB/&5rO.g +f!,'NBo)drP\$Jat5&;Zkh=GJ[]fFDTnSrdI<8H*]O%&VHHYL1[PHYgWU+EBFg?G +'.e[hM>o?hC-#kD]DY%?*6$YNT4gg[g"FUK00(#j# +:g!e4Mh^f2G1""NrUV +oXiO#@;K'T%0VQ.[,nkj!T&!T4r`pF;$L7QL*n@]oBBJ+cN4`P2!(*>i[5"MVr#e +_&SK*eJi?X`ogpPjbBBhgcOW4ZC3*lf.FXu3^5!p=8iAFl0OP6G.NCp\q4%V0M5P +/mjN2Va$G`_X1bC9M_oEh0s\RLP']IB-NJ9i%.$*hZk?Gtn5+)ZP)SBY2Kf2.CfMcP*BVCnN3>^HSZF84e!*g +t-Jg$,fCghG><:.R'eMbGU#LT>!Jmi+PTf +:__dusML@P)@#GEpb$3#"cJ=#D*"6o.14;0]A@7G>ZdJ76b=>\Pa_nAa(LSp_(3TO'#TOHo2qSU`Z +00qm94PU123jBIALhm[3Y5803d]n"Hr"#DK0a!bEX=5]COrO#HlYK`pCQBt-.:b2=+Q9#Ea4,+>"EZL>b5o+.5mHJ@*d"EU9&W'4q86hJ?t5/hW_tn8gj(P:R<]>f:E[ +]D$@4US*mN;T52"1V0tT"9<7!$=D%?qh%!/&.B:l*^=\:E#;/XX^mj6HFqs9ZP__ +QU,%F"Zco1sHN\&rMm_35gn>Xu;IkYESSWH`9_/G-J:c/da"BDK3KA7a_@NPGY:3 +9-o8Sh0Z&A6)%,&G:"]p_sKC):_0-'DCP9D/mCE+lZ3T./(F8:9m9M#7eSRe.S6n" +]A-8KlB`^i8,p,McL$Ck`DVV[<1FRO#1Y@i=_oL>pP];dZmU)u#m=UhU96 +IF]WO)\Bgl9;dWqt"10C%M"$%aW]fY2^_[Fd%>9-%PT$lIbgC;c!Y. ++IqOBkYTb(^cZEO=7,!IR&[p!$EGE:&K!;1Efm`ob*B0413QafhYE2#C!"b +q/3udb`Xb'T+W!?-HE$3t.=gi,fr?%-p6UAPF`p>3i<`Isp\W^Ma%cZ^+h;m.=4&it*tN(*l2#d3+\kZO>"7r(H^"F/?iV]HMCTs8<_&WWUoI# +3DXHl/MC>>e;+20!;+20!;+20!;+20!=-*8VpfuFq5D]4t#oCW8H"R]/g-&t4rr> +2F8+C^D2r=68/#*Q1SfV.ag$%$W^TY35[1cV*5I\:s$/Q&Gjbe:nfd(II=\.J&%j +M=Xl4;u[Z!TnZd_pW]^ofuG(ZPLSJ\.T$*gu8!e+!h)AY4om)O69G@B:Z7A_E$:3Dspi4,fc,)lms!d!0)S8?rt +m(0M.uJ/Ef^;?q#^*.gpG(b\Y@?d-UIQ5d8tk]Zr248'OLTcMgO!*73+0]#CT`,Y +qjR<[Q0*,ZVcXCXsur7\@?kJ'Nmm@d@HT[]_&dAM1s,5mg3-YQa67#duLi0%2m6, +DKgIY5VdWNGlho.E[n9-r>\LT`?GLaTi3;:rRM;`s&<=P/:[fj +[!r'prCXLAQp#Q>7.RNSsTTt9r_o+9I%0:Xi,'+XHKa;LiNtN;1oeMEXjh\VRjAT +p(<"g[[u!g`P0pDA;EbV)0l==*CCSaM6?\ng,3_OIjW^tRX]AN9':t1PtFg%,1iu +Ok*d5[mq05PcX,DX7b`WO8$W/a32)OEN_Cc9$^*i,\I,0Z*/[g%-IcY=%.N+)6J1')(*dU>Y+W=g4]3eeh6@X:1od@AI +)/s\;9hXU*n]Jj6L8u`[g10efKcu'D4-7R<(.1RS.KbWmodk8k1%8s_l5p6Fh!H& +dG@>4L#Au1#9?=4::0IMA%RcZaaFgq[sU8@6mR?a4>:#JjJ`6Yic6J?o%i."h6"* +!daQ``IjRbLh0lG//FG-$L=-/@ZB>iPBa/O(klt?O`^05Bo?B!HlYO!8RkCOjb<; +uEbBu"ZJA,MKW6Ws2-Ns)7.d\RVDt[t!Vs4hMpGL]Ze +5I9hH@t9\%PWG`"_^@Jh5s\mm2if1/!,Gn\(.OrT'R$OX0%#RoP4--Bd314Ng0QZBUD\l?:a4QclLPJ\K3g_56:>r]0N27hE$J?`Q%;Z`i<)io^C +@uRY:,RWRGaK-O#p4_"ZgZ:u>O5(,&\Y!L&]Zs=_)i&VY1OW-o"5.Xua+3K0/nG2SZ2Y=o@7* +-A1m?;G8s$b^T4OpQa%&S-iC``7Q7%pT_2:RYK\VKm$TT'c(N/Zmt4Gi7V,"/TAT +j%6p:T$jr\rr=D-?Tj#8/R@5VVah@98[H$Vf.Z6:l'>9u3oc`RlVG0[b>17V/-pd +hIbf[K#41rtoHLRd/<';2\u"u=*s6U+EhPHP/6ADRG2nIBY:c][#0L.#M/ksT\:b ++9"$O?^9+I:6Q*kqIFedXU*`])g^R%3r-,Nn\d>*V-k%L,AOJ._CaM;&9jP]2(&] +_/Vo.$gc3A$u8Kif3\PtaO34N9N)&F)2]rmop)f&b +f_ST^VtDFhV]V&'+2kS#[.Jj?VVaO=M'eXI-*eJ]L["ToVq9@rbrHX^F4W7!95q^ +V7W$0Gp*:(,-b]aXQ>p,%k2&Wea#;KgmDdE.O#Z1tCH@aF68i[d?U_$kCB":W:ID +T!QWM+/8Qm^Bbk+Qkpm!&3\@dtY16KZ47"fR,SiqPeY=n@D_^W5aE1)`5D)GI,QL +W>a:`hc/,[d.A"HF993T(oBLYiKBp%[nH4]X:OU'VlSU'.RL.Xpdi#/h[G5Bqb!1 +)dk"#U6^/3$=&%L*[-GEMul+!rr<\!"RQ$=]OThe$o'Pg\mtX7IJp^<-PEE(BmO^ +_oJ?eH+oVKW;PE%o1Z3\kk]a^@P"n@AB](hAO/i38i:_hZ,k1+H.9p*eQKL%fH4TeSrs4hcoHtRb.&oXgZurBU# +ZBa`c.Qfj!CSr[ +Jp6-r:JfN=OIp1#q80npKAJVg*O[lA2!i(\<1bT2I#8F*0.QW":nfee&D!>ghM`1 +Nl]WK1;*;+CuA]`l0^%$?7T8ufc/-MZLQ!Np4bP(h!tYi5gQQ7>Kt8$8OLJZ-n?i +"lnOHF($V6sH@tHe;p/nH?7Ekh?iCQ8!%[jdeNP+p.UL,sV]/gf92A>ZR;P5&:(C +ie2B,kS-$"7N4Q(A.f@ucklZQ&,;$RkW,5ctDjWOrcMuob"@,j6,Z)ibZ[uq04D) +&h+$Rh3YaX:l4$0/3Kirc!NQI6Qe[e!;?:kH1Zhr_s#j$/N6l!j/1EG7utPPnS?H +g6eU4f1l2plq`#bMJ?Y6bJ@:Q';C[FBj>#:(J0S6SW2b=";X;APLOVbB1S<%%c?O[-=bAQ>kH +\[*Y#ID<-CC0=fl3JEtO\+%kgY2E$e87E$kNI4jm"Fjo/>n2[(33N0SJ=O-5CoiJ +HLI+M;j\[Ykb-\t,uW_!Vpq#uB:(cVa^^2B\n*Vr^kF_f`IWAN*o5J%Q<[MujTGEX=!O"?.Qe3dV4E*TSR:aT^848`$odll9tbJ +A)iKV]M5kEQ$hsXJDrH[]e*CV7+.Vl[QT;gtZL<8:ceD;H +k&E[Q6,u+qh^G.7o*!,u9gLG1j'&1(Y*S>_+g$j(01\,VSOiPnWPj-BJ92;qnh5$ +>)UASoS(Ddm#\NH%#qTQ4b-Dt\FR;#,!0DB\l[g\=*44/5Ul7r_ZW88i=$5q^W6A +GgCfGejWj0,?pQM4^*P#RTBKRa\;p2.V4O:OPNW(`Q;8GCGJaBRf[!<`qPrr6L9E"t9n\*V?m4EHcMJ,9$8FB8buXG"-,)b +FRR_)uAl5Q-)8=rVF9[=YkH=*N9q_A!n5c$VUU3rY:[\ +YhT+j8sLDC)/juM?WYDM!"V_Vfk`dF<&7iONpK;nFqiu-]=%gjna#G.L!jLqm35W +#Hu8G-Kd,iAj.'M*H?@CFcGCnXaFnWFq#fs(XOD4m>cQ-38TYKc9I4W_TfMkJU?> +B66#"jqe'4ps2W"#>:j,;'mcIk-(hVW":Qe_E^BCu0OS[IIh)!1u=]-%riP7"^eT +p2i:k"Zuh!^IrC_/VM0Q!;il]oTj#C5/0(1a3TJIu]5tVS)O5M=1.acPrLMK +JNNUh!he%#ho%[h#-VBo"qUsWlfmVjCd#p3VOpJnEaoNQs`E&/\7"t-BO&NNXqi9;:0X%p +kk=at`)!*CXU!D,K3ID<& +!P2?Nea^&AlJa9C8R(.sgSXl8[J^DVXK)ROYghK1B<:gkAs[B,BmQ;GXHtunWFr) +AFtZ#-b![YYJB%d635E?X,`H,pd_3Q6T*HpSonQW=9QAtTmY&!CKmS&b!!%sdfF3 +`;hKT0Ra1LiUKJ[$@C$fW0gA+'0VJ0=o8LX`AYs4)\_LbM_c#2*-XVr8K(,jUd:Z +?g$2:kVW6dNa6(n>7/V59`g2#Y!\-rU5Aq!U5Aq!U5Aq!U5Aq!U5Aq!U +5Aq!U5Aq!U5Aq!U5Aq!U5Ar&o#fEY[IT@=e^gW`HJpHLY7t%#@5W]=58-AcS"(,]e"BR9K"S!bAb,$ +AD71?>p@"Jml&_anX`1I0[0ruVCVCUm)N9/7!Q]6i0:1GZ%!$DFp#((k(HBH6VX' +=:18)7pgqsEM6>G\bajc\9c3;!^I$pd]_AF_d54id2o,/&r&g-YdJIFTUJ*:cI,, +ic=]X/#24_7pcL$J-&U-EV#'J2V[.WoO=11,G,aiHJc:-Nb`KQ*)^9P2>I?L00h= +O[u<@2K1r&NcHYML))W[p3NdO\A.eZS___.D/252.rKIDg&WE.-':[amTbbg36#o +-i%TX!;5cL79Tm-?h3'HaYfRjX&Wr.5`H0F5.Zd0)"<7t:^$9T^$O8'B!s+0qTK0 +u"lsgiL:S1onMosZ'IC)mDh;%3,<;CLV*nKpceX.nGh3b@qgi;4.po`UR,_BfVQ: +3D>,AUqeYeW7^3n=hqJu]SIE^H>#T9OL=N.)hU,Zf#)?_"B$jg'&^dhqB-M6*NW. +W/.1G&;Q>lZ]5?MXJAVVkL?cW]&:*AXS3[=[$.P,um]Z:Td@?*I??so"A&'hGO$G@h1 +$EhuelZ`7`GC;<_gf1Vm/QfDZ#n-K2CYrcG9PQ6j(S&ej-,Fl +SZ1?)E*.%_alS;+ij<::dR2b9.W5nluBn"nU@jPB?k\q'^ig[dDl+niJ:V06d>5R +Q,rr<%aO34@Z3gaNlPb#BiWq6,4&Eo4g;*u%2^u[nBVs6@n0S9I^8F;V"0od9Mr] +0#Jj]!;hfP&fbsfQ9L"ntUOK*;\ +$19rldl]ej4_bW]EpMGT2J?(u6#+,MKH=Dl*%J2V#i7cuC0>]qK68Zt/b;,41p;% +6Y.:sjVYs7.\^isO<#nJ?V3RdWgYK.tC#kRl@ca(A&kUF71L:"\L;"%?ZX&_#0't +m/XW*Rpm,>b*#SH6Cm\FAA39i7LkW]N(4n-LG*@B5l`;<`88aW_&oD)rEgn*[=WQ]%7ClIa@l`WG+2[>0cpZ/_ai;Jk'gQPt0'2N,i$@HXeGeMC[)/D2O@:I* +9c@rr>4Y^:d'Zid?H0nFsrV>jDj>LG._/]CTe[T"$&)DN?#)Fj +nQ4G*h/&1j^H&3MUX0bnoI#^B^9?$M(\f@VS5""^lW%>^0lC.u`_#9%.LG:@1\k* +8Hgi,npNKM0'UkSgDi?sbl;;L^(KPF"nkW3=MX-!U""3V24a-`VGCGjh[C!AuSlm +-q2:@d:Z'$ec']m"i2WX9%rr=TO\EY0B[[e_[D)]BLmk?U:XS +TQ^:p^\huT`)5.@\sALLTt$Hh!0,Ob2thCDjCqAeY$"s0O"=L%e*cOmgU:V$9]me#/#m[.6D( +k<=mpP`>L(i7^H]7BX*mbg2b/B9Nd]/0Y-HN5n&[HT"86h:qn=H\l)/\(!6CE.hm +;(RVJ6U0e?3EFH0:kMXsNen+_BLV5Sj'%]rj3D`rTq_gt'hPSd$$2E*B +G)go2CBP$T965-M8]^^WGIZh+oZ%tf[ZqgYQ!%R(Q'R=to\HZc[_"WsOJO;2M`fC +7a\GAL*f#X+dC_!2lT3eb<]YX"C+6d=JUg*'hA^`L!oWUj*0<5@]rsd$TBr]CJph +]AHaF-^-*=P'>*m;VGEPO(UO]0'3>LlRelJ)CGM-hAK?og[Qcb7?R3Qita&Y/;-^ +rtoR-"*%(Pc>JU:]Q6,lKRI48o&F-r+"1Nt]pUB9aN3Rb#%!Z'sOl0)Y+k,Q7iDS +tk/Sh$`1#K6.eH1mG_DCF`,/qr6:Fnu(OOE&&+I%s+>rMX`4Z\@UQ3m(4i5>$00N +M@(c+]]-ec.%gX!.%gX!.%gX!.%gX!.%gX!.%gX!.%gX!.%gX!.%gX!.%gX!.%gX +!.%gX!.%gX!.%gX!.%gX!.%gX!.%gX!.%gX!.%gX!.%gX!.%gX!.%gX!.%gX!.%g +X!.%gX!.%gX!.%gX!.%gX!.%gX!.%gX!.%gX!.%gX!.%gX!.%gX!.%gX!.%h+Nf` +~> +%%EOF diff --git a/Ridges_3/doc_tex/Ridges_3/ellipsoid_ridges_mesh.jpg b/Ridges_3/doc_tex/Ridges_3/ellipsoid_ridges_mesh.jpg new file mode 100644 index 0000000000000000000000000000000000000000..ef67fb68b95f54e7efbe0326ddde078c1e8a1d7b GIT binary patch literal 49681 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 literal 0 HcmV?d00001 diff --git a/Ridges_3/doc_tex/Ridges_3/ellipsoid_ridges_mesh.pdf b/Ridges_3/doc_tex/Ridges_3/ellipsoid_ridges_mesh.pdf new file mode 100644 index 0000000000000000000000000000000000000000..000c230301822609e8f7beaa7f6a79f44b8ceead GIT binary patch literal 39619 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 EFZ}yl$N&HU literal 0 HcmV?d00001 diff --git a/Ridges_3/doc_tex/Ridges_3/main.tex b/Ridges_3/doc_tex/Ridges_3/main.tex new file mode 100644 index 00000000000..a5809fdb14f --- /dev/null +++ b/Ridges_3/doc_tex/Ridges_3/main.tex @@ -0,0 +1,8 @@ +\chapter{Ridge extraction on meshes} +\label{chap:Ridges_3} +\ccChapterAuthor{Marc Pouget and Frédéric Cazals} + +\minitoc + +\input{Ridges_3/Ridges_3_user.tex} + \ No newline at end of file diff --git a/Ridges_3/include/CGAL/PolyhedralSurf.h b/Ridges_3/include/CGAL/PolyhedralSurf.h new file mode 100644 index 00000000000..b2b3a769fe3 --- /dev/null +++ b/Ridges_3/include/CGAL/PolyhedralSurf.h @@ -0,0 +1,226 @@ +#ifndef _POLYHEDRALSURF_H_ +#define _POLYHEDRALSURF_H_ + +#include +#include +#include + +#include +#include +#include + +#include +#include + +#include "PolyhedralSurf_operations.h" + +//---------------------------------------------------------------- +// A redefined items class for the Polyhedron_3 with a refined vertex +// class that contains a member for the mesh normal vector and a refined +// facet with a normal vector instead of the plane equation (this is +// an alternative solution instead of using Polyhedron_traits_with_normals_3). +//---------------------------------------------------------------- +// in addition vertices contains monge info +// some tags.... +template < class Refs, class Tag, class Pt, class FGeomTraits > +class My_vertex:public CGAL::HalfedgeDS_vertex_base < Refs, Tag, Pt > +{ + protected: + typedef typename Refs::Vertex Vertex; + typedef typename Refs::Halfedge Halfedge; + typedef typename Refs::Face Facet; + + typedef typename FGeomTraits::FT FT; + typedef typename FGeomTraits::Point_3 Point_3; + typedef typename FGeomTraits::Vector_3 Vector_3; + + protected: + //monge info + Vector_3 d1; //max ppal dir + Vector_3 d2; //min ppal dir; monge normal is then n_m=d1^d2, should be so that n_m.n_mesh>0 + FT k1, k2; //max/min ppal curv + FT b0, b3; //blue/red extremalities + FT P1, P2; //if fourth order quantities + + //this is for collecting i-th ring neighbours + char ring_tag; + int ring_index; + + public: + //monge info + const Vector _3 d1() const { return d1; } + Vector_3& d1() { return d1; } + const Vector _3 d2() const { return d2; } + Vector_3& d2() { return d2; } + const FT k1() const { return k1; } + FT& k1() { return k1; } + const FT k2() const { return k2; } + FT& k2() { return k2; } + const FT b0() const { return b0; } + FT& b0() { return b0; } + const FT b3() const { return b3; } + FT& b3() { return b3; } + const FT P1() const { return P1; } + FT& P1() { return P1; } + const FT P2() const { return P2; } + FT& P2() { return P2; } + + //this is for collecting i-th ring neighbours + void setRingIndex(int i) { ring_index = i; } + int getRingIndex() { return ring_index; } + void resetRingIndex() { ring_index = -1; } + void setRingTag() { ring_tag = 1; } + char getRingTag() { return ring_tag; } + + My_vertex(const Point_3 & pt): + CGAL::HalfedgeDS_vertex_base < Refs, Tag, Point_3 > (pt), + ring_tag(0), ring_index(-1) {} + My_vertex() {} +}; + +//---------------------------------------------------------------- +// Facet with normal and possibly more types. types are recovered +//from the FGeomTraits template arg +//---------------------------------------------------------------- +template < class Refs, class Tag, class FGeomTraits > +class My_facet:public CGAL::HalfedgeDS_face_base < Refs, Tag > +{ + //protected: +public: + typedef typename Refs::Vertex Vertex; + typedef typename Refs::Vertex_handle Vertex_handle; + typedef typename Refs::Halfedge Halfedge; + typedef typename Refs::Halfedge_handle Halfedge_handle; + + typedef typename FGeomTraits::Vector_3 Vector_3; + typedef typename FGeomTraits::Point_3 Point_3; + +public: + Vector_3 normal; + +public: + My_facet(): ring_index(-1) {} + Vector_3 & getUnitNormal() { return normal; } + void setNormal(Vector_3 & n) { normal = n; } + + //this is for collecting i-th ring neighbours +protected: + int ring_index; +public: + void setRingIndex(int i) { ring_index = i; } + int getRingIndex() { return ring_index; } + void resetRingIndex() { ring_index = -1; } +}; + +//---------------------------------------------------------------- +// Halfedge +//---------------------------------------------------------------- +template < class Refs, class Tprev, class Tvertex, class Tface, class FGeomTraits > +class My_halfedge:public CGAL::HalfedgeDS_halfedge_base < Refs, Tprev, Tvertex, Tface > +{ +protected: + typedef typename FGeomTraits::Point_3 Point_3; + typedef typename FGeomTraits::Vector_3 Vector_3; + +protected: + int ring_index; + double len; +public: + void setRingIndex(int i) { ring_index = i; } + int getRingIndex() {return ring_index; } + void resetRingIndex() {ring_index = -1; } +public: + My_halfedge(): ring_index(-1) {} + void setLength(double l) { len = l; } + double getLength() { return len; } +}; + +//------------------------------------------------ +// Wrappers [Vertex, Face, Halfedge] +//------------------------------------------------ +struct Wrappers_VFH:public CGAL::Polyhedron_items_3 { + // wrap vertex + template < class Refs, class Traits > struct Vertex_wrapper { + typedef struct { + public: + typedef typename Traits::Point_3 Point_3; + typedef typename Traits::Vector_3 Vector_3; + typedef typename Traits::Plane_3 Plane_3; + } FGeomTraits; + typedef typename Traits::Point_3 Point_3; + typedef My_vertex < Refs, CGAL::Tag_true, Point_3, FGeomTraits > Vertex; + }; + + // wrap face + //NOTE: [HDS, Face] renamed [Polyhedron, Facet] + template < class Refs, class Traits > struct Face_wrapper { + //typedef typename Traits::Vector_3 Vector_3; + //all types needed by the facet... + typedef struct { + public: + typedef typename Traits::Point_3 Point_3; + typedef typename Traits::Vector_3 Vector_3; + typedef typename Traits::Plane_3 Plane_3; + } FGeomTraits; + //custom type instantiated... + typedef My_facet < Refs, CGAL::Tag_true, FGeomTraits > Face; + }; + + // wrap halfedge + template < class Refs, class Traits > struct Halfedge_wrapper { + typedef struct { + public: + typedef typename Traits::Point_3 Point_3; + typedef typename Traits::Vector_3 Vector_3; + typedef typename Traits::Plane_3 Plane_3; + } FGeomTraits; + typedef My_halfedge < Refs, + CGAL::Tag_true, + CGAL::Tag_true, CGAL::Tag_true, FGeomTraits > Halfedge; + }; +}; + +//------------------------------------------------ +// Polyhedron +//------------------------------------------------ +//using standard Cartesian kernel +typedef double DFT; +typedef CGAL::Cartesian Data_Kernel; + +typedef CGAL::Polyhedron_3 < Data_Kernel, Wrappers_VFH > Polyhedron; +typedef Polyhedron::Vertex Vertex; +typedef Polyhedron::Vertex_handle Vertex_handle; +typedef Polyhedron::Halfedge Halfedge; +typedef Polyhedron::Halfedge_handle Halfedge_handle; + +typedef Polyhedron::Vertex_iterator Vertex_iterator; +typedef Polyhedron::Halfedge_iterator Halfedge_iterator; +typedef Polyhedron:: +Halfedge_around_vertex_circulator Halfedge_around_vertex_circulator; +typedef Polyhedron:: +Halfedge_around_facet_circulator Halfedge_around_facet_circulator; +typedef Polyhedron::Facet_iterator Facet_iterator; + +typedef Data_Kernel::Point_3 DPoint; +typedef Data_Kernel::Vector_3 Vector_3; +typedef Data_Kernel::Plane_3 Plane_3; +typedef Data_Kernel::Sphere_3 Sphere_3; + +/////////////////////class PolyhedralSurf/////////////////////////// +class PolyhedralSurf:public Polyhedron { +public: + typedef Data_Kernel::Point_3 DPoint; + typedef Data_Kernel::Vector_3 Vector_3; + typedef Data_Kernel::Plane_3 Plane_3; + +public: + static Vector_3 getHalfedge_vector(Halfedge * h); + + PolyhedralSurf() {} + void compute_edges_length(); + double compute_mean_edges_length_around_vertex(Vertex * v); + void compute_facets_normals(); + Vector_3 computeFacetsAverageUnitNormal(Vertex * v); +}; + +#endif diff --git a/Ridges_3/include/CGAL/algo.C b/Ridges_3/include/CGAL/algo.C new file mode 100644 index 00000000000..935371fd659 --- /dev/null +++ b/Ridges_3/include/CGAL/algo.C @@ -0,0 +1,379 @@ +#ifndef _RIDGE_3_H_ +#define _RIDGE_3_H_ + +#include + + +//Orient monge normal according to mesh normals. + +CGAL_BEGIN_NAMESPACE + + +enum Ridge_type {NONE=0, BLUE, RED, CREST, BE, BH, BC, RE, RH, RC}; + + +//--------------------------------------- +//Ridge_line : a connected sequence of edges crossed by a ridge, with type and weigths +//--------------------------------------- +template < class Poly > class Ridge_line +{ +public: + typedef typename Poly::Traits::FT FT; + typedef typename Poly::Vertex_handle Vertex_handle; + typedef typename Poly::Halfedge_handle Halfedge_handle; + typedef typename Poly::Facet_handle Facet_handle; + typedef std::pair ridge_he; + +protected: + Ridge_type line_type + std::list line; + FT strength; + FT sharpness; + +public: + const FT weight() const {return weight;} + const FT sharpness() const {return sharpness;} + std::list* line() { return &line;} + + //constructor + Ridge_line( Halfedge_handle h1, Halfedge_handle h2, Ridge_type r_type) : + line_type(r_type), strength(0.) + {}; + + //compute the barycentric coordinate of the xing point (blue or red) + //for he: p->q coord is st xing_point = coord*p + (1-coord)*q + FT bary_coord(Halfedge_handle he); + void compute_weight(char color); + void compute_sharpness(char color); + //When the line is extended with a he, the bary coord of the + //crossing point is computed, the pair (he,coord) is added and the + //weigths are updated + void addback( Halfedge_handle he); + void addfront( Halfedge_handle he); + +}; + +// IMPLEMENTATION OF Ridge_line members +////////////////////////////////////////////////////////////////////////////// + +//constructor +template < class Poly > +Ridge_line( Halfedge_handle h1, Halfedge_handle h2, Ridge_type r_type) : + line_type(r_type), strength(0.) +{ + line.push_back(h1); + addback(h2); +} + +template < class Poly > +void Ridge_line:: +addback( Halfedge_handle he) +{ + Halfedge_handle he_cur = ( --(line.end()) )->first; + FT coord = bary_coord(he); + FT coord_cur = bary_coord(he_cur); + Vertex_handle v_p = he->opposite()->vertex(), v_q = he->vertex(), + v_p_cur = he_cur->opposite()->vertex(), v_q_cur = he->vertex(); // he: p->q + FT k; + if ( (line_type == BE) || (line_type == BH) || (line_type == BC) ) { + k =( std::fabs(v_p->k1) * coord + std::fabs(v_q->k1) * (1-coord) )/2; + } + if ( (line_type == RE) || (line_type == RH) || (line_type == RC) ) { + k =( std::fabs(v_p->k2) * coord + std::fabs(v_q->k2) * (1-coord) )/2; + } + Vector_3 segment = (v_p->point()-ORIGIN)*coord + (v_q->point()-ORIGIN)*(1-coord) - + ((v_p_cur->point()-ORIGIN)*coord_cur + (v_q_cur->point()-ORIGIN)*(1-coord_cur)); + strength += k * CGAL::sqrt(segment * segment); + + line.push_back( pair(he, coord)); +} + +template < class Poly > +void Ridge_line:: +addfront( Halfedge_handle he) +{ + Halfedge_handle he_cur = ( line.begin() )->first; + FT coord = bary_coord(he); + FT coord_cur = bary_coord(he_cur); + Vertex_handle v_p = he->opposite()->vertex(), v_q = he->vertex(), + v_p_cur = he_cur->opposite()->vertex(), v_q_cur = he->vertex(); // he: p->q + FT k; + if ( (line_type == BE) || (line_type == BH) || (line_type == BC) ) { + k =( std::fabs(v_p->k1) * coord + std::fabs(v_q->k1) * (1-coord) )/2; + } + if ( (line_type == RE) || (line_type == RH) || (line_type == RC) ) { + k =( std::fabs(v_p->k2) * coord + std::fabs(v_q->k2) * (1-coord) )/2; + } + Vector_3 segment = (v_p->point()-ORIGIN)*coord + (v_q->point()-ORIGIN)*(1-coord) - + ((v_p_cur->point()-ORIGIN)*coord_cur + (v_q_cur->point()-ORIGIN)*(1-coord_cur)); + strength += k * CGAL::sqrt(segment * segment); + + line.push_front( pair(he, coord)); +} + + +template < class Poly > +FT Ridge_line:: +bary_coord(Halfedge_handle he) +{ + FT b_p, b_q; // extremalities at p and q for he: p->q + if ( (line_type == BE) || (line_type == BH) || (line_type == BC) ) { + b_p = he->opposite()->vertex()->b0(); + b_q = he->vertex()->b0(); + } + if ( (line_type == RE) || (line_type == RH) || (line_type == RC) ) { + b_p = he->opposite()->vertex()->b3(); + b_q = he->vertex()->b3(); + } + return std::fabs(b_q) / ( std::fabs(b_q) + std::fabs(b_p) ); +} + + +/////////Ridge_approximation////////////////////////////////////////// + +//Find BLUE ridges (Elliptic or Hyperbolic) +//do the same for RED and CREST +//iterate on P facets, find a non-visited, regular, 2BXing triangle, +//follow non-visited, regular, 2BXing triangles in both sens to create +//a Ridge line. +//Each time a edge is added the strength of the current line is updated +// + length(edge)*|k| +void +compute_ridges(Ridge_type r_type) +{ + //set all facets non visited + + + Facet_iterator itb = P.facets_begin(), ite = P.facets_end(); + for(;itb!=ite;itb++) + { + Facet_handle f= &(*itb); + if (f->is_visited()) continue; + f->set_visited(true); + Halfedge_handle h1, h2, curhe1, curhe2, curhe; + + //h1 h2 are the hedges crossed if any, r_type should be BLUE, + //RED or CREST ; cur_ridge_type should be BE, BH, BC, RE, RH, RC or NONE + Ridge_type cur_ridge_type = facet_ridge_type(f,h1,h2,r_type) + if ( cur_ridge_type == NONE ) continue; + + //When a he is inserted in a Ridge_line, a pair + //is created and the weight(s) are updated + Ridge_line *cur_ridge_line = new Ridge_line(h1,h2,cur_ridge_type); + *ridge_lines_it++ = cur_ridge_line; + + //next triangle adjacent to h1 (push_front) + if ( !(h1->is_border_edge()) ) + { + f = h1->opposite()->facet(); + curhe = h1; + while (cur_ridge_type == facet_ridge_type(f,curhe1,curhe2,r_type)) + { + //follow the ridge from curhe + if (f->is_visited()) break; + f->set_visited(true); + if (curhe->opposite() == curhe1) curhe = curhe2; + else curhe = curhe1; + cur_ridge_line->addfront(curhe); + if ( !(curhe->is_border_edge()) ) f = + curhe->opposite()->facet(); + else break; + } + //exit from the while if + //1. border + //2. not same type, then do not set visisted cause a BE + // follows a BH + } + + //next triangle adjacent to h2 (push_back) + if ( !(h2->is_border_edge()) ) + { + f = h2->opposite()->facet(); + curhe = h2; + while (cur_ridge_type == facet_ridge_type(f,curhe1,curhe2,r_type)) + { + //follow the ridge from curhe + if (f->is_visitedB()) break; + f->set_visitedB(true); + if (curhe->opposite() == curhe1) curhe = curhe2; + else curhe = curhe1; + cur_ridge_line->addback(curhe); + if ( !(curhe->is_border_edge()) ) f = + curhe->opposite()->facet(); + else break; + } + } + } +} + + +Ridge_type +facet_ridge_type(Facet_handle f, Halfedge_handle& he1, Halfedge_handle& + he2, Ridge_type r_type) +{ + //polyhedral data + //we have v1--h1-->v2--h2-->v3--h3-->v1 + Halfedge_handle h1 = f->halfedge(), h2, h3; + Vertex_handle v1, v2, v3; + v2 = h1->vertex(); + h2 = h1->next(); + v3 = h2->vertex(); + h3 = h2->next(); + v1 = h3->vertex(); + + //check for regular facet + if ( v1->d1()*v2->d1() * v1->d1()*v3->d1() * v2->d1()*v3->d1() < 0 ) return NONE; + + //determine potential crest color + Ridge_type crest_color = NONE; + if (r_type == CREST) + { + if ( std::fabs(v1->k1()+v2->k1()+v3->k1()) > std::fabs(v1->k2()+v2->k2()+v3->k2()) ) + crest_color = BC; + if ( std::fabs(v1->k1()+v2->k1()+v3->k1()) < std::fabs(v1->k2()+v2->k2()+v3->k2()) ) + crest_color = RC; + if ( std::fabs(v1->k1()+v2->k1()+v3->k1()) = std::fabs(v1->k2()+v2->k2()+v3->k2()) ) + return NONE; + } + + //compute Xing on the 3 edges + bool h1_is_crossed, h2_is_crossed, h3_is_crossed; + if ( r_type == BLUE || crest_color == BC ) + { + xing_on_edge(h1, h1_is_crossed, BLUE); + xing_on_edge(h2, h2_is_crossed, BLUE); + xing_on_edge(h3, h3_is_crossed, BLUE); + } + if ( r_type == RED || crest_color == RC ) + { + xing_on_edge(h1, h1_is_crossed, RED); + xing_on_edge(h2, h2_is_crossed, RED); + xing_on_edge(h3, h3_is_crossed, RED); + } + + //test of 2Xing + if ( !(h1_is_crossed && h2_is_crossed && !h3_is_crossed) && + !(h1_is_crossed && !h2_is_crossed && h3_is_crossed) && + (!h1_is_crossed && h2_is_crossed && h3_is_crossed) ) + return NONE; + if (h1_is_crossed && h2_is_crossed && !h3_is_crossed) + { + he1 = h1; + he2 = h2; + } + if (h1_is_crossed && !h2_is_crossed && h3_is_crossed) + { + he1 = h1; + he2 = h3; + } + if (!h1_is_crossed && h2_is_crossed && h3_is_crossed) + { + he1 = h2; + he2 = h3; + } + + Vertex_handle v_p1 = he1->opposite()->vertex(), v_q1 = he1->vertex(), + v_p2 = he2->opposite()->vertex(), v_q2 = he2->vertex(); // he1: p1->q1 + + if ( r_type == BLUE || crest_color == BC ) + { + FT coord1 = std::fabs(v_q1->b0()) / ( std::fabs(v_p1->b0()) + std::fabs(v_q1->b0()) ), + coord2 = std::fabs(v_q2->b0()) / ( std::fabs(v_p2->b0()) + std::fabs(v_q2->b0()) ); + Vector_3 r1 = (v_p1->point()-ORIGIN)*coord1 + (v_q1->point()-ORIGIN)*(1-coord1), + r2 = (v_p2->point()-ORIGIN)*coord2 + (v_q2->point()-ORIGIN)*(1-coord2); + int b_sign = b_sign_pointing_to_ridge(v1, v2, v3, r1, r2, BLUE); + if (b_sign == 1) { if (r_type == BLUE) return BE; else return BC;} + if (b_sign == -1) return BH; + } + if ( r_type == RED || crest_color == RC ) + { + FT coord1 = std::fabs(v_q1->b3()) / ( std::fabs(v_p1->b3()) + std::fabs(v_q1->b3()) ), + coord2 = std::fabs(v_q2->b3()) / ( std::fabs(v_p2->b3()) + std::fabs(v_q2->b3()) ); + Vector_3 r1 = (v_p1->point()-ORIGIN)*coord1 + (v_q1->point()-ORIGIN)*(1-coord1), + r2 = (v_p2->point()-ORIGIN)*coord2 + (v_q2->point()-ORIGIN)*(1-coord2); + int b_sign = b_sign_pointing_to_ridge(v1, v2, v3, r1, r2, RED); + if (b_sign == -1) { if (r_type == RED) return RE; else return RC;} + if (b_sign == 1) return BH; + } + assert(0); +} + +void +xing_on_edge(Halfedge_handle he, bool& is_crossed, Ridge_type color) +{ + is_crossed = false; + FT sign; + FT b_p, b_q; // extremalities at p and q for he: p->q + Vector_3 d_p = he->opposite()->vertex()->d1(), + d_q = he->vertex()->d1(); //ppal dir + if ( color == BLUE ) { + b_p = he->opposite()->vertex()->b0(); + b_q = he->vertex()->b0(); + } + else { + b_p = he->opposite()->vertex()->b3(); + b_q = he->vertex()->b3(); + } + if ( b_p == 0 && b_q == 0 ) return; + if ( b_p == 0 && b_q !=0 ) sign = d_p*d_q * b_q; + if ( b_p != 0 && b_q ==0 ) sign = d_p*d_q * b_p; + if ( b_p != 0 && b_q !=0 ) sign = d_p*d_q * b_p * b_q; + if ( sign < 0 ) is_crossed = true; +} + + + +//for a ridge segment in a triangle [r1,r2], let r = r2 - r1 and normalize, +//the projection of a point p on the line (r1,r2) is pp=r1+tr, with t=(p-r1)*r +//then the vector v starting at p is pointing to the ridge line (r1,r2) if +//(pp-p)*v >0 +int +b_sign_pointing_to_ridge(Vertex_handle v1, Vertex_handle v2, Vertex_handle v3, + Vector_3 r1, Vector_3 r2, Ridge_type color) +{ + Vector_3 r = r2 - r1, dv1, dv2, dv3; + FT bv1, bv2, bv3; + if ( color == BLUE ) { + bv1 = v1->b0(); + bv2 = v2->b0(); + bv3 = v3->b0(); + dv1 = v1->d1(); + dv2 = v2->d1(); + dv3 = v3->d1(); + } + else { + bv1 = v1->b3(); + bv2 = v2->b3(); + bv3 = v3->b3(); + dv1 = v1->d2(); + dv2 = v2->d2(); + dv3 = v3->d2(); + } + if ( r !=0 ) r = r/CGAL::sqrt(r*r); + FT sign1, sign2, sign3; + sign1 = (r1 - (v1->point()-ORIGIN) + (((v1->point()-ORIGIN)-r1)*r)*r )*dv1; + sign2 = (r1 - (v2->point()-ORIGIN) + (((v2->point()-ORIGIN)-r1)*r)*r )*dv2; + sign3 = (r1 - (v3->point()-ORIGIN) + (((v3->point()-ORIGIN)-r1)*r)*r )*dv3; + + int compt = 0; + if ( sign1 > 0 ) compt++; else if (sign1 < 0) compt--; + if ( sign2 > 0 ) compt++; else if (sign2 < 0) compt--; + if ( sign3 > 0 ) compt++; else if (sign3 < 0) compt--; + + if (compt > 0) return 1; else return -1; +} + + + + + + + + + + + + +CGAL_END_NAMESPACE + +#endif diff --git a/Ridges_3/maintainer b/Ridges_3/maintainer new file mode 100644 index 00000000000..3c9a7df9f51 --- /dev/null +++ b/Ridges_3/maintainer @@ -0,0 +1,2 @@ +Marc Pouget +Frédéric Cazals \ No newline at end of file