diff --git a/ipol/ipol_style_201905.zip b/ipol/ipol_style_201905.zip new file mode 100644 index 0000000000000000000000000000000000000000..2db5f23723823986bc9dedeed150a987bcd897ba Binary files /dev/null and b/ipol/ipol_style_201905.zip differ diff --git a/ipol/ipol_style_201905/README.txt b/ipol/ipol_style_201905/README.txt new file mode 100644 index 0000000000000000000000000000000000000000..1d6fd1243695833f349711d80df920c079d258d7 --- /dev/null +++ b/ipol/ipol_style_201905/README.txt @@ -0,0 +1,65 @@ +LaTeX Class and Example for IPOL Articles +========================================= + +Rafael Grompone von Gioi <grompone@cmla.ens-cachan.fr> +Nicolas Limare <nicolas.limare@cmla.ens-cachan.fr> +José-Luis Lisani Roca <joseluis.lisani@uib.es> + + +Files +----- + +README.txt This file +ipol_style_guide.pdf IPOL LaTeX style guide and example +ipol_style_guide.tex IPOL LaTeX source style guide and example +ipol.cls IPOL LaTeX class +article.bib BibTeX bibliography for the style guide +siam.bst BibTeX style +ipol_class_manual.pdf IPOL LaTeX class manual +ipol_class_manual.tex IPOL LaTeX class manual source +ipol_logo.eps IPOL logo needed when using ipol.cls with latex +ipol_logo.pdf IPOL logo needed when using ipol.cls with pdflatex +siims_logo.eps Logo needed for SIIMS companion article with latex +siims_logo.jpg Logo needed for SIIMS companion article with pdflatex + + +Getting Started +--------------- + +There is no need for installation to use this class, just two files need to be +copied to the same directory were the LaTeX source files are. These files are +the class itself, 'ipol.cls', and the logo file, that can be either +'ipol_logo.eps' if you compile with LaTeX, or 'ipol_logo.pdf' if you compile +with pdfLaTeX. If not sure, just copy the three of these files. You may also +need 'siims_logo.eps' or 'siims_logo.jpg' when preparing a SIIMS companion +article. + +The minimal example of use of this class is as follows: + +\documentclass{ipol} +\begin{document} +\end{document} + +It will only generate the IPOL header, including its logo, the words 'title' +and 'authors' where the title and authors should be placed, and a red +'PREPRINT' label including the compilation date. This example is useless but +can be used to test your system. The LaTeX source file 'ipol_style_guide.tex' +uses the IPOL class and provides an example of how to use it. + +IPOL class is based on the standard 'article' class of LaTeX and it is used +essentially in the same way. There are two main restrictions: the layout must +not be changed and the title is not generated with the usual '\title', +'\author', '\date' and '\maketitle' commands; special IPOL commands must be +used instead. + +For more information, IPOL authors should read and use the IPOL Style +Guide and Example, ipol_style_guide.pdf + +For explanations about the class itself, see the IPOL LaTeX Class Manual, +ipol_class_manual.pdf + + +Thanks +------ + +Comments about errors, omission or suggestions are warmly appreciated. diff --git a/ipol/ipol_style_201905/algorithm2e.sty b/ipol/ipol_style_201905/algorithm2e.sty new file mode 100644 index 0000000000000000000000000000000000000000..4377fa87fdf98e8c425dc0ffad4d5c8583a661b0 --- /dev/null +++ b/ipol/ipol_style_201905/algorithm2e.sty @@ -0,0 +1,2636 @@ +% algorithm2e.sty --- style file for algorithms +% almost everything can be customized by users. See the document for more explanations +%% Copyright 1996-2008 Christophe Fiorio +% +% This program may be distributed and/or modified under the +% conditions of the LaTeX Project Public License, either version 1.2 +% of this license or (at your option) any later version. +% The latest version of this license is in +% http://www.latex-project.org/lppl.txt +% and version 1.2 or later is part of all distributions of LaTeX +% version 1999/12/01 or later. +% +% This program consists of the files algorithm2e.sty and algorithm2e.tex and algorithm2e-compatibility.sty +% +% Report bugs and comments to: +% - algorithm2e-announce@lirmm.fr mailing list for announcement about releases^^J% +% - algorithm2e-discussion@lirmm.fr mailing list for discussion about package^^J% +% subscribe by emailing sympa@lirmm.fr with 'subscribe <list> <firstname name>'^^J% +% +% $Id: algorithm2e.sty,v 4.1 2009/12/15 08:54:08 cfiorio Exp $ +% +% PACKAGES REQUIRED: +% +% - float (in contrib/supported/float) +% - ifthen (in base) +% - xspace (in packages/tools) +% - relsize (in contrib/misc/relsize.sty) +% +%%%%%%%%%%%%%%% Release 4.01 +% +% Package options: +% --------------- +% - oldcommands : to use old command names +% - french, english, german, +% portuguese, czech, italiano, +% slovak : for the name of the algorithm and some keyword code +% - onelanguage : to simply switch keyword from one language to another without changing +% keyword commands +% - boxed, boxruled, ruled, tworuled, +% algoruled, plain : layout of the algorithm +% - algo2e : environment is algorithm2e instead of algorithms and \listofalgorithmes +% instead of \listofalgorithms +% - slide : to use when making slides +% - noline,lined,vlined : how block are designed. +% - shortend, longend, noend : short or long end keyword as endif for e.g. +% - linesnumbered : auto numbering of the algorithm's lines +% - linesnumberedhidden : to hide autonumbered lines (show number on a line with \ShowLn +% - commentsnumbered, inoutnumbered : to autonumber comments and inout keywords (by defaut not numbered) +% - rightnl : to have line number on the right instead of on the left as default +% - algonl : line numbers preceded by algo number +% - scright, scleft : right or left justified side comments +% - fillcomment, nofillcomment : end mark of comment is flushed to the right so comments fill the line +% - dotocloa : add an entry in the toc for list of algorithms (require tocbibind package) +% - endfloat : add algoendfloat environment pushing algorithm so written to the end of document +% - resetcount, noresetcount : start value of line numbers. +% - algopart,algochapter,algosection : algo numbering within part, chapter or section +% - titlenumbered,titlenotnumbered : numbering of title set by \Titleofalgo +% - figure : algorithms are figures, numbered as figures, and put in the list of figures. +% - procnumbered : procedure or function are numbered as algorithm +% - nokwfunc : procedure or function name doens't become a command +% - norelsize : don't use relsize package (useful if it breaks the compatibily) +% +% defaults are; english,plain,resetcount,titlenotnumbered +% +%%%%%%%%%%%%%% +% +% Short summary +% ------------- +% +% algorithm is an environment for writing algorithm in LaTeX2e. +% Almost all is customizable. You can add keywords, change style, change the layout, ... +% It provide macros that allow you to create differents sorts of key words, therefore a set of predefined key +% word is gived. +% +% IT should be used as follows +% +% \begin{algorithm} +% ... +% ... +% \end{algorithm} +% +% +% IMPORTANT : each line MUST end with \; +% +% Note that if you define macros outside algorithm environment they +% are avaible in all the document and particulary you can use then +% inside all algorithms without re-define them. +% +% an example: +% +% \begin{algorithm} +% \SetAlgoLined +% \KwIn{this text} +% \KwOut{how to write algorithm with \LaTeX2e } +% +% initialization\; +% \While{not at end of this document}{ +% read current section\; +% \eIf{understand}{ +% go to next section\; +% current section becomes this one\; +% }{ +% go back to the beginning of current section\; +% } +% } +% \caption{How to write algorithm} +% \end{algorithm} +% +% +%%%%%%%%%%%%%% predefined keywords +% +% \KwIn{input} +% \KwOut{output} +% \KwData{input} +% \KwResult{output} +% \KwTo % a simple keyword +% \KwFrom % a simple keyword +% \KwRet{[value]} +% \Return{[value]} +% \Begin{block inside} +% \eIf{condition}{Then Block}{Else block} % in blocks +% \If{condition}{Then block} % in a block +% \uIf{condition}{Then block} % in a block unended +% \lIf{condition}{Else text} % on the same line +% \Else{inside Else} % in a block +% \lElse{Else text} % on the same line +% \uElse{Else text} % in a block unended +% \ElseIf{inside Elseif} % in a block +% \lElseIf{Elseif text} % on the same line +% \uElseIf{Elseif text} % in a block unended +% \Switch{Condition}{Switch block} +% \Case{a case}{case block} % in a block +% \lCase{a case}{case text} % on the same line +% \Other{otherwise block} % in a block +% \lOther{otherwise block} % on the same line +% \For{condition}{text loop} % in a block +% \lFor{condition}{text} % on the same line +% \ForEach{condition}{text loop} % in a block +% \lForEach{condition}{text} % on the same line +% \ForPar{condition}{text loop} % in a block +% \lForPar{condition}{text} % on the same line +% \While{condition}{text loop} % in a block +% \lWhile{condition}{text loop} % on the same line +% \Repeat{End condition}{text loop} % in a block +% \lRepeat{condition}{text} % on the same line +% +%%%%%%%%%%%%%% +% +% History: +% +% - december 14 2009 - revision 4.01 +% * ADD : new command \SetKwHangingKw{Name}{text} (hanging indent with keyword): This creates a +% hanging indent much like \texttt{SetKwInput}, except that it removes the trailing `:' +% and does not reset numbering. +% +% - november 17 2009 - revision 4.00 - +% +% * CHANGE : IMPORTANT : some commands have been renamed to have consistent naming (CamlCase +% syntax) and old commands are no more available. If you doesn't want to change +% your mind or use old latex files, you can use oldcommands option to enable old +% commands back. +% text. Here are these commands: +% - \SetNoLine becomes \SetAlgoNoLine +% - \SetVline becomes \SetAlgoVlined +% - \Setvlineskip becomes \SetVlineSkip +% - \SetLine becomes \SetAlgoLined +% - \dontprintsemicolon becomes \DontPrintSemicolon +% - \printsemicolon becomes \PrintSemicolon +% - \incmargin becomes \IncMargin +% - \decmargin becomes \DecMargin +% - \setnlskip becomes \SetNlSkip +% - \Setnlskip becomes \SetNlSkip +% - \setalcapskip becomes \SetAlCapSkip +% - \setalcaphskip becomes \SetAlCapHSkip +% - \nlSty becomes \NlSty +% - \Setnlsty becomes \SetNlSty +% - \linesnumbered becomes \LinesNumbered +% - \linesnotnumbered becomes \LinesNotNumbered +% - \linesnumberedhidden becomes \LinesNumberedHidden +% - \showln becomes \ShowLn +% - \showlnlabel becomes \ShowLnLabel +% - \nocaptionofalgo becomes \NoCaptionOfAlgo +% - \restorecaptionofalgo becomes \RestoreCaptionOfAlgo +% - \restylealgo becomes \RestyleAlgo +% - gIf macros and so on do no more exist +% * NEW: - Compatibily with other packages improven by changing name of internal +% macros. Algorithm2e can now be used with arabtex for example, if this last is +% loaded after algorithm2e package. +% * ADD: - OPTION endfloat: endfloat packages doesn't allow float environment inside other +% environment. So using it with figure option of algorithm2e makes error. This +% option enables a new environment algoendfloat to be used instead of algorithm +% environment that put algorithm at the end. algoendfloat environment make +% algorithm acting as endfloat figures. This option requires endfloat packages. +% * ADD: - OPTION norelsize: starting from this release (v4.00), algorithm2e package uses +% relsize package in order to get relative size for lines numbers; but it seems +% that some rare classes (such as inform1.cls) are not compatible with relsize; to +% have algorithm2e working, this option makes algorithm2e not to load relsize +% package and go back to previous definition by using \scriptsize font for lines +% numbers. +% * ADD: - OPTION onelanguage: allow, if using standard keywords listed below, to switch +% from one language to another without changing keywords by using appropriate +% language option : +% . KwIn, KwOut, KwData, KwResult +% . KwTo KwFrom +% . KwRet, Return +% . Begin +% . Repeat +% . If, ElseIf, Else +% . Switch, Case, Other +% . For, ForPar, ForEach, ForAll, While +% . +% * ADD: - OPTION rightnl: put lines numbers to the right of the algorithm instead of left. +% * ADD: new commands \setRightLinesNumbers and \setLeftLinesNumbers which sets the lines +% numbers to the right or to the left of the algorithm. +% * ADD: - new kind of keywords : KwArray used to define arrays: +% \SetKwArray{Kw}{array} defines an array keywords Kw called array and printed in +% DataSty style when call with \Kw. It can be used with one argument which +% denotes the element index: \Kw{n} prints array[n] with array in DataSty and n in +% ArgSty. +% * ADD/FIX: rules of ruled, algoruled, tworuled styles used rules of different sizes! This +% is now fixed. Moreover size of the rules is now controlled by a length and so +% can be customized by the user. +% \algoheightrule is the height of the rules and can be changed via \setlength +% \algoheightruledefault is the default height of he rules (0.8pt) +% \algotitleheightrule is the height of the rule that comes just after the +% caption in ruled and algoruled style; it can be changed via \setlength +% \algotitleheightruledefault is the default height of this rules (0.8pt) +% Thanks to Philippe Dumas who reports the bug and make the suggestion. +% * ADD: - \SetAlgoCaptionSeparator which sets the separator between Algorithm 1 and the +% title. By default it's ':' and caption looks like "Algorithm 2: title" but now +% you can change it by using for example \SetAlgoCaptionSeparator{.} which will +% give "Algorithm 3. title" +% * ADD: - \SetAlgoLongEnd and \SetAlgoShortEnd and \SetAlgoNoEnd commands which act as +% corresponding package options +% * ADD: - OPTIONS italiano and slovak as new language (thanks to Roberto Posenato and +% Miroslav Binas) +% * CHANGE: - Fnt and Sty macro to have consistent use and naming (see below) +% * ADD: - \AlCapSty, \AlCapNameSty, \AlCapFnt, \AlCapNameFnt, \ProcSty, \ProcFnt, +% \ProcNameSty, \ProcNameFnt, \ProcArgSty, ProcArgFnt and corresponding "set macro" +% \SetAlCapSty, \SetAlCapNameSty, \SetAlCapFnt, \SetAlCapNameFnt, \SetProcSty, +% \SetProcFnt, \SetProcNameSty, \SetProcNameFnt, \SetProcArgSty, \SetProcArgFnt which +% control the way caption is printed. Sty macro use command taking one parameter as +% argument, Fnt macros use directly command. In Fact caption is printed as follow : +% \AlCapSty{\AlCapFnt Algorithm 1:}\AlCapNameSty{\AlCapNameFnt my algorithm} +% By default, \AlCapSty is textbf and \AlCapFnt is nothing. \AlCapNameSty keep text +% as it is, and \AlCapNameFnt do nothing also. +% You can redefine \AlCapFnt and \AlCapNameFnt by giving macro to \Set commands. For +% example, you can do \SetAlCapFnt{\large} to see Algorithm printed in \large font. +% You can redefine \AlCapSty, \AlCapFnt, \AlCapNameSty and \AlCapNameFnt with the +% corresponding \Set command. For the Sty commands, you have to give in parameter +% name of a macro (whithout \) which takes one argument. For example, +% \SetAlCapFnt{textbf} defines the default behaviour. If you want to do more +% complicated thing, you should define your own macro and give it to \SetAlCapFnt or +% \SetAlCapNameFnt. Here are two examples: +% - \newcommand{\mycapsty}[1]{\tiny #1}\SetAlCapNameSty{mycapsty} +% - \newcommand{\mycapsty}[1]{\textsl{\small #1}}\SetAlCapNameSty{mycapsty} +% Or you can combine the two, for the last example you can also do: +% \SetAlCapNameSty{textsl}\SetAlCapNameFnt{\small} +% Thanks to Jan Stilhammer who gives me the idea of \AlCapNameFnt. +% * CHANGE \AlTitleFnt to match definition of all other Fnt macros and add a \AlTitleSty +% macro (see below) . Now you set \AlTitleFnt by calling \SetAlTitleFnt with +% directly a macro without parameter in argument: +% Example: \SetAlTitleFnt{\small} to set title in small font. +% * ADD: - \AlTitleSty and \SetAlTitleSty commands to set a style for title. These commands +% are defined from a macro taking the text in argument, as \textbf for example. +% To set the TitleSty you have to give name of the macro (without the '\') +% to \SetAlTitleSty. For example \SetAlTitleSty{textbf} to set \textbf style. +% * ADD: - new command \SetAlgorithmName{algorithmname}{list of algorithms name} which +% redefines name of the algorithms and the sentence list of algorithms. Second +% argument is the name that \autoref, from hyperref package, will use. Example: +% \SetAlgorithmName{Protocol}{List of protocols} if you prefer protocol than +% algorithm. +% * ADD: - new \SetAlgoRefName{QXY} which change the default ref (number of the algorithm) by +% the name given in parameter (QXY in the example). +% * ADD: - new command \SetAlgoRefRelativeSize{-2} which sets the output size of refs, defined +% by \SetAlgoRefName, used in list of algorithms. +% * ADD: - two dimensions to control the layout of caption in ruled, algoruled and boxruled +% algorithms: +% - interspacetitleruled (2pt by defaut) which controls the vertical space between +% rules and title in ruled and algoruled algorithms. +% - interspaceboxruled (2\lineskip by default) which controls the vertical space +% between rules and title in boxruled algorithms. +% These two dimensions can be changed by using \setlength command. +% * ADD: - With the fix (see below) of procedure and function environments, a new feature has +% been added: the name of the procedure or function set in caption is automatically +% defined as a KwFunction and so can be used as a macro. For example, if inside a +% procedure environment you set \caption{myproc()}, you can use \myproc macro in you +% main text. Beware that the macro is only defined after the \caption! +% * ADD: - OPTION nokwfunc to unable the new feature described above in function and +% procedure environment. Useful if you use name of procedure or function that cannot +% be a command name as a math display for example. +% * ADD: - \SetAlgoNlRelativeSize{number} command which sets the relative size of line +% numbers. By default, line numbers are two size smaller than algorithm text. Use +% this macro to change this behavior. For example, \SetAlgoNlRelativeSize{0} sets it +% to the same size, \SetAlgoNlRelativeSize{-1} to one size smaller and +% \SetAlgoNlRelativeSize{1} to one size bigger +% * ADD: - \SetAlgoProcName{aname} command which sets the name of Procedure printed by +% procedure environment (the environment prints Procedure by default). Second +% argument is the name that \autoref, from hyperref package, will use. +% * ADD: - \SetAlgoFuncName{aname} command which sets the name of Function printed by +% procedure environment (the environment prints Function by default). Second +% argument is the name that \autoref, from hyperref package, will use. +% * ADD: - \SetAlgoCaptionLayout{style} command which sets style of the caption; style must +% be the name of a macro taking one argument (the text of the caption). Examples +% below show how to use it: +% . \SetAlgoCaptionLayout{centerline} to have centered caption +% . \SetAlgoCaptionLayout{textbf} to have bold caption +% If you want to apply two styles in the same time, such as centered bold, you have +% to define you own macro and then use \SetAlgoCaptionLayout with its name. +% * ADD: - OPTION procnumbered: which makes the procedure and function to be numbered as +% algorithm +% * ADD: - OPTIONS tworuled and boxruled +% these are two new layouts: tworuled acts like ruled but doesn't put a line after +% caption ; boxruled surround algorithm by a box, puts caption above and add a line +% after caption. +% * REMOVE: - SetKwInParam has been deleted since not useful itself because of different +% macros which can do the same in a better and a more consistent way as +% SetKwFunction or SetKw. +% * FIX: - line number is now correctly vertically aligned with math display. +% * FIX: - references with hyperref. No more same identifier or missing name error. BUT now +% you must NOT use naturalnames option of hyperref packages if you do PdfLaTeX +% * FIX: - autoref with hyperref package (thanks to Jörg Sommer who notices the problem). +% * FIX: - titlenumbered was not working! fixed. +% * FIX: - Else(){} acted like uElse. Corrected. +% * FIX: - noend management: when a block was inside another and end of block was following +% each other, a blank line was added: it's now corrected. +% * FIX: - Function and Procedure environment was no more working as defined originally: the +% label was no more name of the procedure, it acts always as if procumbered option +% has been used. +% * FIX: - line numbers had a fixed size which can be bigger than algorithm text accordingly +% to \AlFnt set (see also new command \SetAlgoNlRelativeSize above) +% * FIX: - semicolon in comments when dontprintsemicolon is used. +% * FIX: - listofalgorithms adds a vertical space before first algo of a chapter as for +% listoffigures or listoftables +% * FIX: - listofalgorithms with twocolumns mode and some classes which don't allow onecolumn +% and so don't define \if@restonecol as prescribed in LaTeX (sig-alternate for +% example) +% * FIX: - algorithm2e now works with elsart cls and some more classes. +% * FIX: - blocks defined by SetKwBlock act now as other blocks (if for instance) and don't +% write end in vlined mode, instead they print a small horizontal line as required +% by the option. +% * FIX: - underfull hbox warning at each end of algorithm environment removed. +% +% * INTERNAL CHANGE: - short end keyword are deduce from long end keyword by keeping the +% first one. Allows to avoid double definition. +% * INTERNAL CHANGE: - procedure, function and algorithm are now resolved by the same +% environment to avoid code duplication. +% +% - October 04 2005 - revision 3.9 - +% * ADD: - \setalcaphskip command which sets the horizontal skip before Algorithm: in caption +% when used in ruled algorithm. +% * ADD: - \SetAlgoInsideSkip command which allows to add an extra vertical space before and +% after the core of the algorithm (ie: \SetAlgoInsideSkip{bigskip}) +% * CHANGE: - caption, when used with figure option, is no more controlled by algorithm2e +% package and so follows the exact behaviour of figures. The drawback is that you +% cannot change the typo with AlTitleFnt or CapFnt. The avantage is that if you +% use caption package, it works. +% * FIX: - problem with numbering line and pdflatex +% * FIX: - error when algorithm2e package was used with beamer and listings together +% - February 12 2005 - revision 3.8 - +% * FIX: - extra line with noend option. +% - February 10 2005 - revision 3.7 - +% * ADD: - sidecomment: different macros allowing to put text right after code on the same +% line. They are defined in the same time comment macros are defined with a star +% after the macro name. By default comments are right justified but this can be +% change with appropriate option in the macro. Ex: +% . default: \tcc*{side comment} +% . same as previous: \tcc*[r]{side comment} +% . left justify: \tcc*[l]{side comment} +% . here: \tcc*[h]{side comment} don't put the end of line mark before +% comment (; by default) and don't end the line. +% . flushed: \tcc*[f]{side comment} same as the precedent but right +% justified +% * ADD: - OPTION scright (default): right justified side comments (side comments +% are flushed to the righr) +% * ADD: - OPTION scleft: left justified side comments (side comments are put right after the +% code line) +% * ADD: - \SetSideCommentLeft acts as scleft option +% * ADD: - \SetSideCommentRight acts as scright option +% * ADD: - block like macro side text: all macro defining a block allows now to put text right +% after key words by putting text into (). Done to be used with sidecomment macros, +% but all text can be used. +% Ex: \eIf(\tcc*[f]{then comment}){test}{then text}(else side text){else text} +% * ADD: - OPTION fillcomment (default): end mark of comment is flushed to the right so +% comments fill all the width of text. +% * ADD: - OPTION nofillcomment: end mark of comment is put right after the comment. +% * ADD: - \SetNoFillComment acts as nofillcomment option. +% * ADD: - \SetFillComment acts as fillcomment option. +% * ADD: - OPTION dotocloa: which adds an entry in the toc for the list of algorithms. This +% option load package tocbibind if not already done and so list of figures and list +% of tables are also added in the toc. If you want to control which ones of the lists +% will be added in the toc, please load package tocbibind before package algorithm +% and give it the options you want. +% * FIX: - vertical spacing for uif macro with noend option +% * FIX: - all the compatibility problems between caption and other packages +% * FIX: - typographical differences between list of algorithms and other lists when in +% report or book +% +% - January 24 2005 - revision 3.6 - +% * FIX: - vertical spacing and space characters at the beginning or end of comments. +% line numbers of comments not in the NlSty. +% Thanks to Arnaud Giersch for his comments and suggestions. +% * FIX: - Set*Sty macro: the styles defined was not protected and was modified by surrounding +% context. For example KwTo in a \For{}{} was in bold AND italic instead of just in +% bold. +% * FIX: - line number misplacement after \Indp +% +% - January 21 2005 - revision 3.5 - +% * ADD: - hidden numbering of the lines. Lines are auto-numbered but numbers are shown only +% on lines you specify: +% * linesnumberedhidden option or \LinesNumberedHidden macro activate this +% functionnality. +% * \ShowLn and \ShowLnLabel{lab} macros make the number visible on the +% line. \ShowLnLabel{lab} allows to set a label for this line. +% Thanks to Samson de Jager who makes this suggestion and provides the macros. +% * ADD: - \AlCapFnt and \SetAlCapFnt which allow to have a different font for +% caption. Works like \AlFnt and \SetAlFnt and by default is the same. +% * ADD: - \AlCapSkip skip length. This vertical space is added before caption in plain ou +% boxed mode. It allows to change distance between text and caption. +% * FIX: - caption compatible with IEEEtran class. +% * FIX: - some vertical spacing error with \uIf macros (Thanks to Arnaud Giersch) +% * FIX: - Procedure and Function: lines are also numbered like algorithms +% * FIX: - CommentSty was not used for Comments +% +% - January 10 2005 - revision 3.4 - +% * FIX: - caption compatible with new release of Beamer class. +% +% - June 16 2004 - revision 3.3 - +% * FIX: - Hyperlink references of Hyperref package works now if compiled with pdflatex +% and [naturalnames] option of hyperref package is used. +% * FIX: - algorithm[H] had problem in an list environment - corrected +% * FIX: - interline was not so regular in nested blocks - corrected +% * ADD - \SetVlineSkip macro which sets the vertical skip after the little horizontal +% rule which closes a block in Vlined mode. By default 0.8ex +% +% - June 11 2004 - revision 3.2 - AUTO NUMBERING LINES !!! +% * ADD: auto numbering of the lines (the so asked and so long awaiting feature) +% this feature is managed by 3 options and 3 commands: +% - linesnumbered option: lines of the algo are numbered except for comments and +% input/output (KwInput and KwInOut) +% - commentsnumbered option: makes comments be numbered +% - inoutnumbered option: makes data input/output be numbered +% - \nllabel{lab} labels the line so you can cite with \ref{lab} +% - \LinesNumbered make the following algorithms having auto-numbered lines +% - \linesnotnumbered make the following algorithms having no auto-numbered lines +% * Change: algo2e option renames listofalgorithms in listofalgorithmes +% * FIX: new solution for compatibility with color package, more robust and not tricky. +% Many thanks to David Carlisle for his advices +% +% - June 09 2004 - revision 3.1 - +% * Change: \SetKwSwitch command defines an additionnal macro \uCase and \Case prints end +% * Change: now macros SetKw* do a renewcommand if the keyword is already defined. So you can +% redefine default definition at your own convenience or change your definition +% without introducing a new macro and changing your text. +% * ADD: new macro \SetKwIF which do \SetKwIf and +% \SetKwIfElseIf.The following default definition has been added: +% \SetKwIF{If}{ElseIf}{Else}{if}{then}{else if}{else}{endif} +% and so you get the macros; +% \If \eIf \lIf \uIf \ElseIf \uElseIf \lElseIf \Else \uElse \lElse +% * ADD: new macro \SetAlgoSkip which allow to fix the vertical skip before and after the +% algorithms. Default is smallskip, do \SetAlgoSkip{} if you don't want an extra space +% or \SetAlgoSkip{medskip} or \SetAlgoSkip{bigskip} if you want bigger space. +% * ADD: macro \SetKwIf defines in addition a new macro \uElse (depending on wat name you +% have given in #2 arg). +% * ADD: macro \SetKwIfElseIf defines in addition a new macro \uElse and \ugElseIf (depending +% on what name you have given in #2 and #3 arg). +% * Change: baseline of algorithm is now top, so two algorithms can be put side by side. +% * FIX: Compatibility with color package solved. The problem was due to a redefinition of +% standard macros by color package. This solves compatibility problem with other +% packages as pstcol or colortbl. (notified by Dirk Fressmann, Antti Tarvainen and Koby +% Crammer) +% * Fix: extra little shift to the right with boxed style algorithm removed (notified by +% P. Tanovski) +% * Fix: algoln option was buggy (notified bye Jiaying Shen) +% * Fix: german and portuges option didn't work due to bad typo (notified by Martin Sievers, +% Thorsten Vitt and Jeronimo Pellegrini) +% +% - February 13 2004 - revision 3.0 - +% * Major revision which makes the package independent from float.sty, so now +% - algorithm* works better, in particular can be used in multicols environments +% - (known bug corrected) +% [H] works now for all sort of environment but is handled differently for classic +% environment and star environment (algorithm, figure, procedure and function). For star +% environment, H acts like for classical figure environment, so it doesn't stay here +% absolutely. +% - (known bug corrected) +% you can use now floatflt package with algorithm package and even with figure +% option. Beware that if you want to put an algorithm inside a floatingfigure, it cannot +% be floating, so [H] is required and then figure option should not be used, since +% standard figure[H] are still floating with LaTeX. +% * boxruled: a new style added. Possible now since no style no more defined by the float +% package. +% * nocaptionofalgo: dosen't print Algorithm #: in the caption for algorithm in ruled or +% algoruled style. +% note: this is just documentation of a macro which was already in the package. +% - December 14 2003 - revision 2.52 - +% * output message shorter +% * french keyword macro \PourTous was missing for longend option, it has been added. +% * TitleofAlgo prints Function or Procedure in corresponding environments. +% +% - October 27 2003 - revision 2.51 - Revision submitted to CTAN archive +% * correction of a minor which make caption in procedure +% and function to be blanck with pdfscreen package +% (thanks to Joel Gossens for the notification) +% * add two internal definition to avoid some errors when +% used with Hyperref package (Hyperref package need to +% define new counter macro from existing ones, and +% don't do it for algorithm2e package, so we do it) +% +% - October 17 2003 - revision 2.50 - first revision for CTAN archive +% * add \AlFnt and \SetAlFnt{font} macros: \AlFnt is used at the beginning of the caption and +% the body of algorithm in order to define the fonts used for typesetting algorithms. You +% can use it elsewhere you want to typeset text as algorithm. For example you can do +% \SetAlFnt{\small\sf} to have algorithms typeset in small sf font. Default is nothing so +% algorithm is typeset as the text of the document. +% * add \AlTitleFnt{text} and \SetAlTitleFnt{font} macros: The {Algorithm: } in the caption is +% typeset with \AlTitleFnt{Algorithm:}. You can use it to have text typeset as {Algorithm:} +% of captions. Default is textbf. Default can be redefined by \SetAlTitleFnt{font}, for +% example you can do \SetAlTitleFnt{emph} +% * add CommentSty typo for text comment. +% * add some compatibility with hyperref package (still an error on multiply defined refs but +% pdf correctly generated) +% * flush text to left in order to have correct indentation even with class as amsart which +% center all figures +% * add german, portugues and czech options for title of algorithms and typo. +% * add portuguese translation of predefined keywords * add czech translation of some +% predefined keywords +% +% - December 23 2002 - revision 2.40 +% * add some french keyword missing +% * add function* and procedure* environment like algorithme* environment: print in one column +% even if twocolumn option is specified for the document. +% * add a new macro \SetKwComment to define macro which writes comments in the text. First +% argument is the name of the macro, second is the text put before the comment, third is the +% text put at the end of the comment.Default are \tcc and \tcp +% * add new options to change the way algo are numbered: +% [algopart] algo are numbered within part (counter must exist) +% [algochapter] algo are numbered within chapter +% [algosection] algo are numbered within section +% +% - March 27 2002 - revision 2.39 +% * Gilles Geeraerts: added the \SetKwIfElseIf to manage +% if (c) +% i; +% else if (c) +% i; +% ... +% else +% i; +% end +% * Also added \gIf \gElseIf \gElse. +% +% - January 02 2001 - revision 2.38 +% * bugs related to the caption in procedure and function +% environment are corrected. +% * bug related to option noend (extra vertical space added +% after block command as If or For) is corrected. +% * czech option language added (thanks to Libor Bus: l.bus@sh.cvut.cz). +% +% - October 16 2000 - revision 2.37 +% * option algo2e added: change the name of environment +% algorithm into algorithm2e. So allow to use the package +% with some journal style which already define an algorithm +% environment. +% +% - September 13 2000 - revision 2.36 +% * option slide added: require package color +% * Hack for slide class in order to have correct +% margins +% +% - November 25 1999 - revision 2.35 +% * revision number match RCS number +% * Thanks to David A. Bader, a new option is added: +% noend: no end keywords are printed. +% +% - November 19 1999 - revision 2.32 +% * minor bug on longend option corrected. +% +% - August 26 1999 - revision 2.31 +% * add an option : figure +% this option makes algorithms be figure and so are numbered +% as figures, have Figure as caption and are put in +% the \listoffigures +% +% - January 21 1999 - revision 2.3 beta +% add 2 new environments: procedure and function. +% These environments works like algorithm environment but: +% - the ruled (or algoruled) style is imperative. +% - the caption now writes Procedure name.... +% - the syntax of the \caption command is restricted as +% follow: you MUST put a name followed by 2 braces like +% this ``()''. You can put arguments inside the braces and +% text after. If no argument is given, the braces will be +% removed in the title. +% - label now puts the name (the text before the braces in the +% caption) of the procedure or function as reference (not +% the number like a classic algorithm environment). +% There are also two new styles : ProcNameSty and +% ProcArgSty. These style are by default the same as FuncSty +% and ArgSty but are used in the caption of a procedure or a +% function. +% +% - November 28 1996 - revision 2.22 +% add a new macro \SetKwInParam{arg1}{arg2}{arg3}: +% it defines a macro \arg1{name}{arg} which prints name in keyword +% style followed byt arg surrounded by arg2 and arg3. The main +% application is to a function working as \SetKwInput to be used +% in the head of the algorithm. For example +% \SetKwInParam{Func}{(}{)} allows +% \Func{functionname}{list of arguments} which prints: +% \KwSty{functioname(}list of arguments\KwSty{)} +% +% +% - November 27 1996 - revision 2.21 : +% minor bug in length of InOut boxes fixed. +% add algorithm* environment. +% +% - July 12 1996 - revision 2.2 : \SetArg and \SetKwArg macros removed. +% +% \SetArg has been removed since it never has been +% documented. +% \SetKwArg has been removed since \SetKw can now +% take an argument in order to be consistent with +% \SetKwData and \SetKwFunction macros. +% +% - July 04 1996 - revision 2.1 : still more LaTeX2e! Minor compatibility break +% +% Macros use now \newcommand instead of \def, use of \setlength, +% \newsavebox, ... and other LaTeX2e specific stuff. +% The compatibility break: +% - \SetData becomes \SetKwData to be more consistent. So the old +% \SetKwData becomes \SetKwInput +% - old macros \titleofalgo, \Freetitleofalgo and \freetitleofalgo +% from LaTeX209 version which did print a warning message and call +% \Titleofalgo in version 2.0 are now removed! +% +% - March 13 1996 - revision 2.0: first official major revision. +% +% +%%%%%%%%%%%%%% +% +% Known bugs: +% ----------- +% - no more known bugs... all are corrected! +% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% +% for more complete informations you can see algorithm2e.tex +% +% +%%%%%%%%%%%%%%%%%%%%%%%% Identification Part %%%%%%%%%%%%%%%%%%%%%%%%%%%% +% +\NeedsTeXFormat{LaTeX2e}[1994/12/01] +% +\ProvidesPackage{algorithm2e}[2008/00/00 v3.10 algorithms environments] +% +% +%%%%%%%%%%%%%%%%%%%%%%%%%%% Initial Code %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% +\@makeother\*% some package redefined it as a letter (as color.sty) +\def\@firstword#1 #2\@nil{#1}% an useful fonction +% +% definition of commands which can be redefined in options of the package. +% +\newcounter{AlgoLine}% +\setcounter{AlgoLine}{0}% +% +\newcommand{\algocf@algocfref}{\relax}% +\newcommand{\listalgorithmcfname}{}% +\newcommand{\algorithmcfname}{}% +\@ifundefined{algorithmautorefname}{\newcommand{\algorithmautorefname}{algorithm}}{\renewcommand{\algorithmautorefname}{algorithm}}% +\newcommand{\algorithmcflinename}{}% +\newcommand{\algocf@typo}{}% +\newcommand{\@algocf@procname}{}\newcommand{\procedureautorefname}{}% +\newcommand{\SetAlgoProcName}[2]{\renewcommand{\@algocf@procname}{#1}\renewcommand{\procedureautorefname}{#2}}% +\newcommand{\@algocf@funcname}{}\newcommand{\functionautorefname}{}% +\newcommand{\SetAlgoFuncName}[2]{\renewcommand{\@algocf@funcname}{#1}\renewcommand{\functionautorefname}{#2}}% +\newcommand{\@algocf@titleofalgoname}{\algorithmcfname}% +\newcommand{\@algocf@algotitleofalgo}{% + \renewcommand{\@algocf@titleofalgoname}{\algorithmcfname}}% +\newcommand{\@algocf@proctitleofalgo}{% + \renewcommand{\@algocf@titleofalgoname}{\algocf@procname}}% +% +\newcommand{\algocf@style}{plain}% +\newcommand{\@ResetCounterIfNeeded}{}% +\newcommand{\@titleprefix}{}% +% +\newcommand{\algocf@numbering}[1]{\newcommand{\algocf@within}{#1}}% +% +\newcommand{\defaultsmacros@algo}{\algocf@defaults@shortend}% +% +\newcommand{\algocf@list}{loa}% +\newcommand{\algocf@float}{algocf}% +% +\newcommand{\algocf@envname}{algorithm}% +\newcommand{\algocf@listofalgorithms}{listofalgorithms}% +% +% +%% redefine chapter so that it adds a vspace in the loa as the original does for lof and lot +\let\algocf@original@chapter=\chapter% +\def\chapter{\expandafter\addtocontents{loa}{\protect\addvspace{10\p@}}\algocf@original@chapter}% +% +%% if@restonecol is defined in article and book but some other classes don't define it and we need it, so we do +\ifx\if@restonecol\relax\else\newif\if@restonecol\fi% +% +% +%%%%%%%%%%%%%%%%%%%%%% Declaration of Options %%%%%%%%%%%%%%%%%%%%%%%%%%% +% +\RequirePackage{ifthen}% +% +\newboolean{algocf@nokwfunc}\setboolean{algocf@nokwfunc}{false}% +\DeclareOption{nokwfunc}{% + \setboolean{algocf@nokwfunc}{true}% +}% +% +\newboolean{algocf@oldcommands}\setboolean{algocf@oldcommands}{false}% +\DeclareOption{oldcommands}{% + \setboolean{algocf@oldcommands}{true}% +}% +% +\newboolean{algocf@leftlinenumber}\setboolean{algocf@leftlinenumber}{true}% +\newcommand{\setLeftLinesNumbers}{\setboolean{algocf@leftlinenumber}{true}}% +\newcommand{\setRightLinesNumbers}{\setboolean{algocf@leftlinenumber}{false}}% +\DeclareOption{rightnl}{% + \setRightLinesNumbers% +}% +% +\newboolean{algocf@endfloat}\setboolean{algocf@endfloat}{false}% +\DeclareOption{endfloat}{% + \setboolean{algocf@endfloat}{true}% + \newcounter{postalgo}\setcounter{postalgo}{0}% +}% +% +\newboolean{algocf@procnumbered}\setboolean{algocf@procnumbered}{false}% +\DeclareOption{procnumbered}{% + \setboolean{algocf@procnumbered}{true}% +}% +% +\DeclareOption{algo2e}{% + \renewcommand{\algocf@envname}{algorithm2e}% + \renewcommand{\algocf@listofalgorithms}{listofalgorithmes}% +}% +% +\newboolean{algocf@slide}\setboolean{algocf@slide}{false}% +\DeclareOption{slide}{% + \setboolean{algocf@slide}{true}% +}% +% +\DeclareOption{figure}{% +\renewcommand{\algocf@list}{lof}% +\renewcommand{\algocf@float}{figure}% +}% +% +\newboolean{algocf@optonelanguage}\setboolean{algocf@optonelanguage}{false}% +\DeclareOption{onelanguage}{\setboolean{algocf@optonelanguage}{true}}% +% +\newcommand{\algocf@languagechoosen}{english}% +% +\DeclareOption{english}{% +\renewcommand{\listalgorithmcfname}{List of Algorithms}% +\renewcommand{\algorithmcfname}{Algorithm}% +\renewcommand{\algorithmautorefname}{algorithm}% +\renewcommand{\algorithmcflinename}{line}% +\renewcommand{\algocf@typo}{}% +\renewcommand{\@algocf@procname}{Procedure}% +\renewcommand{\@algocf@funcname}{Function}% +\renewcommand{\procedureautorefname}{procedure}% +\renewcommand{\functionautorefname}{function}% +\renewcommand{\algocf@languagechoosen}{english}% +}% +% +\DeclareOption{french}{% +\renewcommand{\listalgorithmcfname}{Liste des Algorithmes}% +\renewcommand{\algorithmcfname}{Algorithme}% +\renewcommand{\algorithmautorefname}{algorithme}% +\renewcommand{\algorithmcflinename}{ligne}% +\renewcommand{\algocf@typo}{\ }% +\renewcommand{\@algocf@procname}{Procédure}% +\renewcommand{\@algocf@funcname}{Fonction}% +\renewcommand{\procedureautorefname}{procédure}% +\renewcommand{\functionautorefname}{fonction}% +\renewcommand{\algocf@languagechoosen}{french}% +}% +% +\DeclareOption{czech}{% +\renewcommand{\listalgorithmcfname}{Seznam algoritm\v{u}}% +\renewcommand{\algorithmcfname}{Algoritmus}% +\renewcommand{\algorithmautorefname}{\algorithmcfname}% +\renewcommand{\algorithmcflinename}{Radek}% +\renewcommand{\algocf@typo}{}% +\renewcommand{\@algocf@procname}{Procedura}% +\renewcommand{\@algocf@funcname}{Funkce}% +\renewcommand{\procedureautorefname}{\@algocf@procname}% +\renewcommand{\functionautorefname}{\@algocf@funcname}% +\renewcommand{\algocf@languagechoosen}{czech}% +}% +% +\DeclareOption{german}{% +\renewcommand{\listalgorithmcfname}{Liste der Algorithmen}% +\renewcommand{\algorithmcfname}{Algorithmus}% +\renewcommand{\algorithmautorefname}{\algorithmcfname}% +\renewcommand{\algorithmcflinename}{Zeile}% +\renewcommand{\algocf@typo}{\ }% +\renewcommand{\@algocf@procname}{Prozedur}% +\renewcommand{\@algocf@funcname}{Funktion}% +\renewcommand{\procedureautorefname}{\@algocf@procname}% +\renewcommand{\functionautorefname}{\@algocf@funcname}% +\renewcommand{\algocf@languagechoosen}{german}% +}% +% +\DeclareOption{portuguese}{% +\renewcommand{\listalgorithmcfname}{Lista de Algoritmos}% +\renewcommand{\algorithmcfname}{Algoritmo}% +\renewcommand{\algorithmautorefname}{algoritmo}% +\renewcommand{\algorithmcflinename}{linha}% +\renewcommand{\algocf@typo}{}% +\renewcommand{\@algocf@procname}{Procedimento}% +\renewcommand{\@algocf@funcname}{Fun\c{c}\~{a}o}% +\renewcommand{\procedureautorefname}{procedimento}% +\renewcommand{\functionautorefname}{fun\c{c}\~{a}o}% +\renewcommand{\algocf@languagechoosen}{portuguese}% +}% +% +\DeclareOption{italiano}{% +\renewcommand{\listalgorithmcfname}{Elenco degli algoritmi}% +\renewcommand{\algorithmcfname}{Algoritmo}% +\renewcommand{\algorithmautorefname}{algoritmo}% +\renewcommand{\algorithmcflinename}{riga}% +\renewcommand{\algocf@typo}{}% +\renewcommand{\@algocf@procname}{Procedura}% +\renewcommand{\@algocf@funcname}{Funzione}% +\renewcommand{\procedureautorefname}{procedura}% +\renewcommand{\functionautorefname}{funzione}% +\renewcommand{\algocf@languagechoosen}{italiano}% +}% +\DeclareOption{slovak}{% +\renewcommand{\listalgorithmcfname}{Zoznam algoritmov}% +\renewcommand{\algorithmcfname}{Algoritmus}% +\renewcommand{\algorithmautorefname}{\algorithmcfname}% +\renewcommand{\algorithmcflinename}{Radek}% +\renewcommand{\algocf@typo}{}% +\renewcommand{\@algocf@procname}{Proced\'{u}ra}% +\renewcommand{\@algocf@funcname}{Funkcia}% +\renewcommand{\procedureautorefname}{\@algocf@procname}% +\renewcommand{\functionautorefname}{\@algocf@funcname}% +\renewcommand{\algocf@languagechoosen}{slovak}% +}% +% +% OPTIONs plain, boxed, ruled, algoruled & boxruled +% +\newcommand{\algocf@style@plain}{\renewcommand{\algocf@style}{plain}}% +\newcommand{\algocf@style@boxed}{\renewcommand{\algocf@style}{boxed}}% +\newcommand{\algocf@style@ruled}{\renewcommand{\algocf@style}{ruled}}% +\newcommand{\algocf@style@algoruled}{\renewcommand{\algocf@style}{algoruled}}% +\newcommand{\algocf@style@boxruled}{\renewcommand{\algocf@style}{boxruled}}% +\newcommand{\algocf@style@tworuled}{\renewcommand{\algocf@style}{tworuled}}% +\newcommand{\RestyleAlgo}[1]{\csname algocf@style@#1\endcsname}% +\DeclareOption{plain}{\algocf@style@plain}% +\DeclareOption{boxed}{\algocf@style@boxed}% +\DeclareOption{ruled}{\algocf@style@ruled}% +\DeclareOption{algoruled}{\algocf@style@algoruled}% +\DeclareOption{boxruled}{\algocf@style@boxruled}% +\DeclareOption{tworuled}{\algocf@style@tworuled}% +% +% OPTIONs algopart,algochapter & algosection +% +\DeclareOption{algopart}{\algocf@numbering{part}}% %algo part numbered +\DeclareOption{algochapter}{\algocf@numbering{chapter}}% %algo chapter numbered +\DeclareOption{algosection}{\algocf@numbering{section}}% %algo section numbered +% +% OPTIONs resetcount & noresetcount +% +\DeclareOption{resetcount}{\renewcommand{\@ResetCounterIfNeeded}{\setcounter{AlgoLine}{0}}}% +\DeclareOption{noresetcount}{\renewcommand{\@ResetCounterIfNeeded}{}}% +% +% OPTION linesnumbered +% +\newboolean{algocf@linesnumbered}\setboolean{algocf@linesnumbered}{false}% +\newcommand{\algocf@linesnumbered}{\relax}% +\DeclareOption{linesnumbered}{% + \setboolean{algocf@linesnumbered}{true}% + \renewcommand{\algocf@linesnumbered}{\everypar={\nl}}% +}% +% +% OPTION linesnumberedhidden +% +\DeclareOption{linesnumberedhidden}{% + \setboolean{algocf@linesnumbered}{true}% + \renewcommand{\algocf@linesnumbered}{\everypar{\stepcounter{AlgoLine}}}% +}% +% +% OPTION commentsnumbered inoutnumbered +% +\newboolean{algocf@commentsnumbered}\setboolean{algocf@commentsnumbered}{false}% +\DeclareOption{commentsnumbered}{\setboolean{algocf@commentsnumbered}{true}}% +\newboolean{algocf@inoutnumbered}\setboolean{algocf@inoutnumbered}{false}% +\DeclareOption{inoutnumbered}{\setboolean{algocf@inoutnumbered}{true}}% +% +% OPTIONs titlenumbered & titlenotnumbered +% +\DeclareOption{titlenumbered}{% + \renewcommand{\@titleprefix}{% + \refstepcounter{\algocf@float}% + \AlTitleSty{\AlTitleFnt\@algocf@titleofalgoname\ \expandafter\csname the\algocf@float\endcsname\algocf@typo: }% + }% +}% +% +\DeclareOption{titlenotnumbered}{\renewcommand{\@titleprefix}{% + \AlTitleSty{\AlTitleFnt\@algocf@titleofalgoname\algocf@typo: }}% +}% +% +% OPTIONs algonl +% line numbered with the counter of the algorithm +% +\DeclareOption{algonl}{\renewcommand{\theAlgoLine}{\expandafter\csname the\algocf@float\endcsname.\arabic{AlgoLine}}}% +% +% OPTIONs lined, vlined & noline +% +\DeclareOption{lined}{\AtBeginDocument{\SetAlgoLined}}% \SetAlgoLined +\DeclareOption{vlined}{\AtBeginDocument{\SetAlgoVlined}}% \SetAlgoVlined +\DeclareOption{noline}{\AtBeginDocument{\SetAlgoNoLine}}%\SetAlgoNoLine (default) +% +% OPTIONs longend, shotend & noend +% +\DeclareOption{longend}{\AtBeginDocument{\SetAlgoLongEnd}}% \SetAlgoLongEnd +\DeclareOption{shortend}{\AtBeginDocument{\SetAlgoShortEnd}}%\SetAlgoShortEnd +\DeclareOption{noend}{\AtBeginDocument{\SetAlgoNoEnd}}% \SetAlgoNoEnd +% +% OPTION dotoc +% +\newboolean{algocf@dotocloa}\setboolean{algocf@dotocloa}{false}% +\DeclareOption{dotocloa}{% + \setboolean{algocf@dotocloa}{true}% +} +% +% OPTION comments +% +\newboolean{algocf@optfillcomment}\setboolean{algocf@optfillcomment}{true}% +\DeclareOption{nofillcomment}{% + \setboolean{algocf@optfillcomment}{false}% +}% +\DeclareOption{fillcomment}{% + \setboolean{algocf@optfillcomment}{true}% +}% +% +% OPTION sidecommments +% +\newboolean{algocf@scleft}\setboolean{algocf@scleft}{false}% +\DeclareOption{scleft}{% + \setboolean{algocf@scleft}{true}% +}% +\DeclareOption{sright}{% default + \setboolean{algocf@scleft}{false}% +}% +% +% OPTION norelsize +% +\newboolean{algocf@norelsize}\setboolean{algocf@norelsize}{false}% +\DeclareOption{norelsize}{% + \setboolean{algocf@norelsize}{true}% +}% +% +% +%%%%%%%%%%%%%%%%%%%%%%% Execution of Options %%%%%%%%%%%%%%%%%%%%%%%%%%%% +% +\ExecuteOptions{english,plain,resetcount,titlenotnumbered,lined,shortend}% +% +\ProcessOptions% +% +\@algocf@algotitleofalgo% fix name for \TitleOfAlgo to \algorithmcfname by default +% +%%%%%%%%%%%%%%%%%%%%%%%%%% Package Loading %%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% +% +\RequirePackage{xspace}% +% +\ifthenelse{\boolean{algocf@endfloat}}{% + \RequirePackage{endfloat}% +}{\relax}% +% +\ifthenelse{\boolean{algocf@norelsize}}{% + \newcommand{\relsize}[1]{\scriptsize}% +}{% + \RequirePackage{relsize}% +}% +% +\ifthenelse{\boolean{algocf@slide}}{\RequirePackage{color}}{}% +% + +\AtEndOfPackage{% + \ifthenelse{\boolean{algocf@dotocloa}}{% + \renewcommand{\listofalgorithmes}{\tocfile{\listalgorithmcfname}{loa}}% + }{\relax}% +}% +% +% if loa in toc required, load tocbibind package if not already done. +\ifthenelse{\boolean{algocf@dotocloa}}{% + \ifx\@tocextra\undefined% + \RequirePackage{tocbibind}% + \fi% +}% +% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Main Part %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% +\newcommand{\algocf@name}{algorithm2e}% +\newcommand{\algocf@date}{december 14 2009}% +\newcommand{\algocf@version}{Release 4.01}% +\newcommand{\algocf@id}{\algocf@version\space -- \algocf@date\space --}% +\typeout{********************************************************^^JPackage `\algocf@name'\space\algocf@id^^J% + - algorithm2e-announce@lirmm.fr mailing list for announcement about releases^^J% + - algorithm2e-discussion@lirmm.fr mailing list for discussion about package^^J% + subscribe by emailing sympa@lirmm.fr with 'subscribe <list> <firstname name>'^^J% + - Author: Christophe Fiorio (fiorio@lirmm.fr)^^J********************************************************}% +%% +%% +%% +%% +%% +%% +%%%% hyperref compatibility tricks: Hyperref package defines H counters from + % standard counters (i.e \theHpage from \thepage) and check some particular + % counters of some packages, unfortunately it doesn't do the same for + % algorithm2e package but act as Hcounter was defined. To avoid errors we + % defined \theHalgocf ourself +%%%% +% +\@ifundefined{theHalgocf}{\def\theHalgocf{\thealgocf}}{}% +\@ifundefined{theHAlgoLine}{\def\theHAlgoLine{\theAlgoLine}}{}% +\@ifundefined{theHalgocfproc}{\def\theHalgocfproc{0}}{}% +\@ifundefined{theHalgocffunc}{\def\theHalgocffunc{0}}{}% +\@ifundefined{toclevel@algocf}{\def\toclevel@algocf{0}}{}% +% +% autoref from hyperref needs an autorefname, so we give it. +\def\AlgoLineautorefname{\algorithmcflinename}% +\def\algocfautorefname{\algorithmautorefname}% +\def\algocfprocautorefname{\procedureautorefname}% +\def\algocffuncautorefname{\functionautorefname}% +%% +%% +%% +\newcommand{\@defaultskiptotal}{0.5em}% +\newskip\skiptotal\skiptotal=0.5em% +\newskip\skiplinenumber\skiplinenumber=\hsize\advance\skiplinenumber by-\skiptotal% +\newskip\skiprule% +\newskip\skiphlne% +\newskip\skiptext% +\newskip\skiplength% +\newskip\algomargin% +\newskip\skipalgocfslide\skipalgocfslide=1em% +\newdimen\algowidth% +\newdimen\inoutsize% +\newdimen\inoutline% +\newdimen\interspacetitleruled\setlength{\interspacetitleruled}{2pt}% +\newdimen\interspacealgoruled\setlength{\interspacealgoruled}{2pt}% +\newdimen\interspacetitleboxruled\setlength{\interspacetitleboxruled}{2\lineskip}% +% +\newcommand{\@algoskip}{\smallskip}% +\newcommand{\SetAlgoSkip}[1]{\renewcommand{\@algoskip}{\csname#1\endcsname}}% +\newcommand{\@algoinsideskip}{\relax}% +\newcommand{\SetAlgoInsideSkip}[1]{\renewcommand{\@algoinsideskip}{\csname#1\endcsname}}% +% +\newsavebox{\algocf@inoutbox}% +\newsavebox{\algocf@inputbox}% +%% +%% +\newcommand{\arg@e}{}% +\newcommand{\arg@space}{\ }% +\newcommand{\BlankLine}{\vskip 1ex}% +%% +\newcommand{\vespace}{1ex}% +\newcommand{\SetInd}[2]{% +\skiprule=#1% +\skiptext=#2% +\skiplength=\skiptext\advance\skiplength by \skiprule\advance\skiplength by 0.4pt}% +\SetInd{0.5em}{1em} +\algomargin=\leftskip\advance\algomargin by \parindent% +\newcommand{\IncMargin}[1]{\advance\algomargin by #1}% +\newcommand{\DecMargin}[1]{\advance\algomargin by -#1}% +\newcommand{\SetNlSkip}[1]{% + \renewcommand{\@defaultskiptotal}{#1}% + \setlength{\skiptotal}{#1}}% +%% +\newskip\AlCapSkip\AlCapSkip=0ex% +\newskip\AlCapHSkip\AlCapSkip=0ex% +\newcommand{\SetAlCapSkip}[1]{\setlength{\AlCapSkip}{#1}}% +\newcommand{\SetAlCapHSkip}[1]{\setlength{\AlCapHSkip}{#1}}% +\SetAlCapHSkip{.5\algomargin}% +%% +%% +\newcommand{\Indentp}[1]{\advance\leftskip by #1}% +\newcommand{\Indp}{\advance\leftskip by 1em}% +\newcommand{\Indpp}{\advance\leftskip by 0.5em}% +\newcommand{\Indm}{\advance\leftskip by -1em}% +\newcommand{\Indmm}{\advance\leftskip by -0.5em}% +%% +%% +%% Line Numbering +%% +%% +% number line style +\newcommand{\algocf@nlrelsize}{-2}\newcommand{\SetAlgoNlRelativeSize}[1]{\renewcommand{\algocf@nlrelsize}{#1}}% +\newcommand{\NlSty}[1]{\textnormal{\textbf{\relsize{\algocf@nlrelsize}#1}}}% default definition +\newcommand{\SetNlSty}[3]{\renewcommand{\NlSty}[1]{\textnormal{\csname#1\endcsname{\relsize{\algocf@nlrelsize}#2##1#3}}}}% +% +% nl definitions +% +\newsavebox{\algocf@nlbox}% +\newcommand{\algocf@printnl}[1]{% + \ifthenelse{\boolean{algocf@leftlinenumber}}{% + \skiplinenumber=\skiptotal\advance\skiplinenumber by\leftskip% + \strut\raisebox{0pt}{\llap{\NlSty{#1}\kern\skiplinenumber}}\ignorespaces% + }{% + \sbox\algocf@nlbox{\NlSty{#1}}% + \skiplinenumber=\hsize\advance\skiplinenumber by-\leftskip\advance\skiplinenumber by-\skiptext% + \advance\skiplinenumber by\algomargin\advance\skiplinenumber by.3em\advance\skiplinenumber by-\wd\algocf@nlbox% + \strut\raisebox{0pt}{\rlap{\kern\skiplinenumber\NlSty{#1\ignorespaces}}}\ignorespaces% + }% +}% +\newcommand{\algocf@nl@sethref}[1]{% + \renewcommand{\theHAlgoLine}{\thealgocfproc.#1}% + \hyper@refstepcounter{AlgoLine}\gdef\@currentlabel{#1}% +}% +\newcommand{\nl}{% + \@ifundefined{hyper@refstepcounter}{% if not hyperref then do a simple refstepcounter + \refstepcounter{AlgoLine}% + }{% else if hyperref, do the anchor so 2 lines in two differents algorithms cannot have the same href + \stepcounter{AlgoLine}\algocf@nl@sethref{\theAlgoLine}% + }% now we can do the line numbering + \algocf@printnl{\theAlgoLine}% +}% +% +\newcommand{\nllabel}[1]{\label{#1}}% +% +\newcommand{\enl}{% + \@ifundefined{hyper@refstepcounte}{% if not hyperref then do a simple refstepcounter + \refstepcounter{AlgoLine}% + }{% else if hyperref, do the anchor so 2 lines in two differents algorithms cannot have the same href + \stepcounter{AlgoLine}\algocf@nl@sethref{\theAlgoLine}% + }% now we can do the line numbering + \skiplinenumber=\hsize\advance\skiplinenumber by-\leftskip% + \strut\raisebox{0pt}{\rlap{\kern\skiplinenumber\strut\NlSty{\theAlgoLine}}}\ignorespaces% +} +%% nlset +\newcommand{\nlset}[1]{% + \@ifundefined{hyper@refstepcounter}{\protected@edef\@currentlabel{#1}}{\algocf@nl@sethref{#1}}\algocf@printnl{#1}% +}% +% +%% lnl definitions +\newcommand{\lnl}[1]{\nl\label{#1}}% +% +%% lnlset +\newcommand{\lnlset}[2]{\nlset{#2}\label{#1}}% +% +% set char put at end of each line +% +\newcommand{\algocf@endline}{\string;} +\newcommand{\SetEndCharOfAlgoLine}[1]{\renewcommand{\algocf@endline}{#1}} +% +% end of line definition +% +\newcommand{\@endalgocfline}{\algocf@endline}% default definition: printsemicolon +\newcommand{\DontPrintSemicolon}{\renewcommand{\@endalgocfline}{\relax}}% +\newcommand{\PrintSemicolon}{\renewcommand{\@endalgocfline}{\algocf@endline}}% +\newcommand{\@endalgoln}{\@endalgocfline\hfill\strut\par}% +% +% line numbering +% +\newcommand{\LinesNumbered}{\setboolean{algocf@linesnumbered}{true}\renewcommand{\algocf@linesnumbered}{\everypar={\nl}}}% +\newcommand{\LinesNotNumbered}{% + \setboolean{algocf@linesnumbered}{false}% + \renewcommand{\algocf@linesnumbered}{\relax}% +}% +% +\newcommand{\LinesNumberedHidden}{% + \setboolean{algocf@linesnumbered}{true}\renewcommand{\algocf@linesnumbered}{\everypar{\stepcounter{AlgoLine}}}}% +\newcommand{\ShowLn}{\nlset{\theAlgoLine}\ignorespaces}% display the line number on this line (without labelling) +\newcommand{\ShowLnLabel}[1]{\lnlset{#1}{\theAlgoLine}\ignorespaces}% display the line number and label this line +% +%% +% +%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% +% Styling text commands +% +\newcommand{\AlFnt}{\relax}% default definition +\newcommand{\SetAlFnt}[1]{\renewcommand{\AlFnt}{#1}}% +\newcommand{\AlTitleFnt}{\relax}% default definition +\newcommand{\SetAlTitleFnt}[1]{\renewcommand{\AlTitleFnt}{#1}}% +% +\newcommand{\AlCapFnt}{\relax}% default definition +\newcommand{\SetAlCapFnt}[1]{\renewcommand{\AlCapFnt}{#1}}% +\newcommand{\AlCapNameFnt}{\relax}% default definition +\newcommand{\SetAlCapNameFnt}[1]{\renewcommand{\AlCapNameFnt}{#1}}% +% +\newcommand{\ProcFnt}{\relax}% default definition +\newcommand{\SetProcFnt}[1]{\renewcommand{\ProcFnt}{#1}}% +\newcommand{\ProcNameFnt}{\relax}% default definition +\newcommand{\SetProcNameFnt}[1]{\renewcommand{\ProcNameFnt}{#1}}% +\newcommand{\ProcArgFnt}{\relax}% default definition +\newcommand{\SetProcArgFnt}[1]{\renewcommand{\ProcArgFnt}{#1}}% +% +\newcommand{\AlTitleSty}[1]{\textbf{#1}\unskip}% default definition +\newcommand{\SetAlTitleSty}[1]{\renewcommand{\AlTitleSty}[1]{\textnormal{\csname#1\endcsname{##1}}\unskip}}% +\newcommand{\AlCapSty}[1]{\textnormal{\textbf{#1}}\unskip}% default definition +\newcommand{\SetAlCapSty}[1]{\renewcommand{\AlCapSty}[1]{\textnormal{\csname#1\endcsname{##1}}\unskip}}% +\newcommand{\AlCapNameSty}[1]{\textnormal{#1}\unskip}% default definition +\newcommand{\SetAlCapNameSty}[1]{\renewcommand{\AlCapNameSty}[1]{\textnormal{\csname #1\endcsname{##1}}\unskip}}% +% +\newcommand{\ProcSty}[1]{\AlCapSty{#1}}% +\newcommand{\SetProcSty}[1]{\renewcommand{\ProcSty}[1]{\textnormal{\csname#1\endcsname{##1}}\unskip}}% +\newcommand{\ProcNameSty}[1]{\AlCapNameSty{#1}}% +\newcommand{\SetProcNameSty}[1]{\renewcommand{\ProcNameSty}[1]{\textnormal{\csname#1\endcsname{##1}}\unskip}}% +\newcommand{\ProcArgSty}[1]{\AlCapNameSty{#1}}% +\newcommand{\SetProcArgSty}[1]{\renewcommand{\ProcArgSty}[1]{\textnormal{\csname#1\endcsname{##1}}\unskip}}% +% +\newcommand{\KwSty}[1]{\textnormal{\textbf{#1}}\unskip}% default definition +\newcommand{\SetKwSty}[1]{\renewcommand{\KwSty}[1]{\textnormal{\csname#1\endcsname{##1}}\unskip}}% +\newcommand{\ArgSty}[1]{\textnormal{\emph{#1}}\unskip}%\SetArgSty{emph} +\newcommand{\SetArgSty}[1]{\renewcommand{\ArgSty}[1]{\textnormal{\csname#1\endcsname{##1}}\unskip}}% +\newcommand{\FuncSty}[1]{\textnormal{\texttt{#1}}\unskip}%\SetFuncSty{texttt} +\newcommand{\SetFuncSty}[1]{\renewcommand{\FuncSty}[1]{\textnormal{\csname#1\endcsname{##1}}\unskip}}% +\newcommand{\DataSty}[1]{\textnormal{\textsf{#1}}\unskip}%%\SetDataSty{textsf} +\newcommand{\SetDataSty}[1]{\renewcommand{\DataSty}[1]{\textnormal{\csname#1\endcsname{##1}}\unskip}}% +\newcommand{\CommentSty}[1]{\textnormal{\texttt{#1}}\unskip}%%\SetDataSty{texttt} +\newcommand{\SetCommentSty}[1]{\renewcommand{\CommentSty}[1]{\textnormal{\csname#1\endcsname{##1}}\unskip}}% +\newcommand{\TitleSty}[1]{#1\unskip}%\SetTitleSty{}{} +\newcommand{\SetTitleSty}[2]{\renewcommand{\TitleSty}[1]{% +\csname#1\endcsname{\csname#2\endcsname##1}}\unskip}% +% +%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% +% Block basic commands +% +\newcommand{\algocf@push}[1]{\advance\skiptotal by #1\moveright #1}% +\newcommand{\algocf@pop}[1]{\advance\skiptotal by -#1}% +\newcommand{\algocf@addskiptotal}{\advance\skiptotal by 0.4pt\advance\hsize by -0.4pt}% 0.4 pt=width of \vrule +\newcommand{\algocf@subskiptotal}{\advance\skiptotal by -0.4pt\advance\hsize by 0.4pt}% 0.4 pt=width of \vrule +% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% +%% group of instructions definition +% +\skiphlne=.8ex% +\newcommand{\SetVlineSkip}[1]{\skiphlne=#1}% +% +%% block with a vertical line end by a little horizontal line +\newcommand{\algocf@Vline}[1]{% no vskip in between boxes but a strut to separate them, + \strut\par\nointerlineskip% then interblock space stay the same whatever is inside it + \algocf@push{\skiprule}% move to the right before the vertical rule + \hbox{\vrule% + \vtop{\algocf@push{\skiptext}%move the right after the rule + \vtop{\algocf@addskiptotal\advance\hsize by -\skiplength #1}\Hlne}}\vskip\skiphlne% inside the block + \algocf@pop{\skiprule}%\algocf@subskiptotal% restore indentation + \nointerlineskip}% no vskip after +% +%% block with a vertical line +\newcommand{\algocf@Vsline}[1]{% no vskip in between boxes but a strut to separate them, + \strut\par\nointerlineskip% then interblock space stay the same whatever is inside it + \algocf@push{\skiprule}% move to the right before the vertical rule + \hbox{\vrule% the vertical rule + \vtop{\algocf@push{\skiptext}%move the right after the rule + \vtop{\algocf@addskiptotal\advance\hsize by -\skiplength #1}}}% inside the block + \algocf@pop{\skiprule}}% restore indentation +% +\newcommand{\algocf@Hlne}{\hrule height 0.4pt depth 0pt width .5em}% +% +%% block without line +\newcommand{\algocf@Noline}[1]{% no vskip in between boxes but a strut to separate them, + \strut\par\nointerlineskip% then interblock space stay the same whatever is inside it + \algocf@push{\skiprule}% + \hbox{% + \vtop{\algocf@push{\skiptext}% + \vtop{\advance\hsize by -\skiplength #1}}}% inside the block + \algocf@pop{\skiprule}% + % \nointerlineskip% no vskip after +}% +% +%% default=NoLine +% +\newcommand{\algocf@group}[1]{\algocf@Noline{##1}}% group: set of instruction depending from another (ex: then part of the If) +\newcommand{\algocf@@block}[2]{\algocf@Noline{##1}\KwSty{##2}\par}% block: group with a end keyword. +\newcommand{\algocf@block}[2]{\algocf@@block{#1}{#2}}% command that will be used and redefined accordingly to noend option +\newcommand{\algocf@setBlock}{% + \ifthenelse{\boolean{algocf@optnoend}}{% if no end option + \renewcommand{\algocf@block}[2]{\algocf@group{##1}}% block will be a group + }{% else + \renewcommand{\algocf@block}[2]{\algocf@@block{##1}{##2}}% block stays a block + }% +}% +% +\newcommand{\Hlne}{}% little hrizontal line ending a block in vline mode +% +\newcommand{\@algocf@endoption}[1]{#1}% +\newboolean{algocf@optnoend}\setboolean{algocf@optnoend}{false}% +% +\newcommand{\SetAlgoLongEnd}{%%%%%%%%%%%%%%%%%%%%%%%%% Long End + \setboolean{algocf@optnoend}{false}% + \renewcommand{\@algocf@endoption}[1]{##1}% + \algocf@setBlock}% +% +\newcommand{\SetAlgoShortEnd}{%%%%%%%%%%%%%%%%%%%%%%%% ShortEnd + \setboolean{algocf@optnoend}{false}% + \renewcommand{\@algocf@endoption}[1]{\@firstword##1 \@nil}% + \algocf@setBlock}% +% +\newcommand{\SetAlgoNoEnd}{%%%%%%%%%%%%%%%%%%%%%%%%%%% NoEnd + \setboolean{algocf@optnoend}{true}% + \renewcommand{\@algocf@endoption}[1]{}% + \algocf@setBlock}% +% +\newcommand{\SetAlgoNoLine}{%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Noline +\renewcommand{\algocf@@block}[2]{\algocf@Noline{##1}\KwSty{##2}\strut\par}% +\renewcommand{\algocf@group}[1]{\algocf@Noline{##1}}% +\renewcommand{\Hlne}{}}% +% +\newcommand{\SetAlgoVlined}{%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Vline +\renewcommand{\algocf@@block}[2]{\algocf@Vline{##1}}% +\renewcommand{\algocf@group}[1]{\algocf@Vsline{##1}\ifthenelse{\boolean{algocf@optnoend}}{\relax}{\strut\ignorespaces}}% +\renewcommand{\Hlne}{\algocf@Hlne}}% +% +\newcommand{\SetAlgoLined}{%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Line +\renewcommand{\algocf@@block}[2]{\strut\algocf@Vsline{##1}\KwSty{##2}\strut\par}% no skip after a block so garantie at least a line +\renewcommand{\algocf@group}[1]{\algocf@Vsline{##1}\ifthenelse{\boolean{algocf@optnoend}}{\relax}{\strut\ignorespaces}}% +\renewcommand{\Hlne}{}}% +% +\newcommand{\SetNothing}{%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Noline +\renewcommand{\algocf@@block}[2]{\algocf@Noline{##1}\par}% +%\long +\renewcommand{\algocf@group}[1]{\algocf@Noline{##1}}% +\renewcommand{\Hlne}{}}% +% +%% +%% +% +% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% +% ``Input :'''s like command +% +%%% +% text staying at the right of the longer keyword of KwInOut commands +% (text of KwInOut commands are all vertically aligned) +% +\newcommand{\algocf@newinout}{\par\parindent=\wd\algocf@inoutbox}% to put right indentation after a \\ in the KwInOut +\newcommand{\SetKwInOut}[2]{% + \sbox\algocf@inoutbox{\KwSty{#2}\algocf@typo:}% + \expandafter\ifx\csname InOutSizeDefined\endcsname\relax% if first time used + \newcommand\InOutSizeDefined{}\setlength{\inoutsize}{\wd\algocf@inoutbox}% + \else% else keep the larger dimension + \ifdim\wd\algocf@inoutbox>\inoutsize\setlength{\inoutsize}{\wd\algocf@inoutbox}\fi% + \fi% the dimension of the box is now defined. + \@ifundefined{#1}{\let\algocf@mkcmd=\newcommand}{\let\algocf@mkcmd=\renewcommand}% + \expandafter\algocf@mkcmd\csname#1\endcsname[1]{% + \ifthenelse{\boolean{algocf@inoutnumbered}}{\relax}{\everypar={\relax}}% + {\let\\\algocf@newinout\hangindent=\wd\algocf@inoutbox\hangafter=1\parbox[t]{\inoutsize}{\KwSty{#2}\algocf@typo\hfill:}~##1\par}% + \algocf@linesnumbered% reset the numbering of the lines + }}% +% +%% allow to ajust the skip size of InOut +%% +\newcommand{\ResetInOut}[1]{% + \sbox\algocf@inoutbox{\hbox{\KwSty{#1}\algocf@typo:\ }}% + \setlength{\inoutsize}{\wd\algocf@inoutbox}% + }% +% +% +%%% +% text staying at the right of the keyword. +% +\newcommand{\algocf@newinput}{\par\parindent=\wd\algocf@inputbox}% to put right indentation after a \\ in the KwInput +\newcommand{\SetKwInput}[2]{% + \@ifundefined{#1}{\let\algocf@mkcmd=\newcommand}{\let\algocf@mkcmd=\renewcommand}% + \expandafter\algocf@mkcmd\csname#1\endcsname[1]{% + \sbox\algocf@inputbox{\hbox{\KwSty{#2}\algocf@typo: }}% + \ifthenelse{\boolean{algocf@inoutnumbered}}{\relax}{\everypar={\relax}}% + {\let\\\algocf@newinput\hangindent=\wd\algocf@inputbox\hangafter=1\unhbox\algocf@inputbox##1\par}% + \algocf@linesnumbered% reset the numbering of the lines + }}% +\newcommand{\SetKwData}[2]{% + \@ifundefined{#1}{\let\algocf@mkcmd=\newcommand}{\let\algocf@mkcmd=\renewcommand}% + \expandafter\algocf@mkcmd\csname @#1\endcsname[1]{\DataSty{#2(}\ArgSty{##1}\DataSty{)}}% + \expandafter\algocf@mkcmd\csname#1\endcsname{% + \@ifnextchar\bgroup{\csname @#1\endcsname}{\DataSty{#2}\xspace}}% + }% +% +% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% tallent: +% +% Add following macros: +% \SetKwHangingKw: [kw] ------------ <= hanging determined by [kw] +% ------------ +% Should act like a combination of \SetKwInput and \SetKw. +% Based on \SetKwInput: +% - remove ':' at end of keyword +% - do not reset numbering +% - use separate savebox +\newsavebox{\algocf@hangingbox} +\newcommand{\algocf@newhanging}{\par\parindent=\wd\algocf@hangingbox}% to put right indentation after a \\ in the KwInput +\newcommand{\SetKwHangingKw}[2]{% + \@ifundefined{#1}{\let\algocf@mkcmd=\newcommand}{\let\algocf@mkcmd=\renewcommand}% + \expandafter\algocf@mkcmd\csname#1\endcsname[1]{% + \sbox\algocf@hangingbox{\hbox{\KwSty{#2}\algocf@typo\ }}% + {\let\\\algocf@newhanging\hangindent=\wd\algocf@hangingbox\hangafter=1\unhbox\algocf@hangingbox##1\;}% + }% +}% +% +% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% +% Comments macros +% +%%%% +% comment in the text, first argument is the name of the macro, second is +% the text put before the comment, third is the text put at the end of the +% comment. +% +% first side comment justification +\newcommand{\SetSideCommentLeft}{\setboolean{algocf@scleft}{true}}% +\newcommand{\SetSideCommentRight}{\setboolean{algocf@scleft}{false}}% +\newcommand{\SetNoFillComment}{\setboolean{algocf@optfillcomment}{false}}% +\newcommand{\SetFillComment}{\setboolean{algocf@optfillcomment}{true}}% +% +% next comment and side comment +% +\newcommand{\algocf@endmarkcomment}{\relax}% +\newcommand{\algocf@fillcomment}{% + \ifthenelse{\boolean{algocf@optfillcomment}}{\hfill}{\relax}}% +% +\newcommand{\algocf@startcomment}{% + \hangindent=\wd\algocf@inputbox\hangafter=1\usebox\algocf@inputbox}% +\newcommand{\algocf@endcomment}{\algocf@fillcomment\algocf@endmarkcomment\ignorespaces\par}% +\newcommand{\algocf@endstartcomment}{\algocf@endcomment\algocf@startcomment\ignorespaces}% +% +\newboolean{algocf@sidecomment}% +\newboolean{algocf@altsidecomment}\setboolean{algocf@altsidecomment}{false}% +\newcommand{\algocf@scpar}{\ifthenelse{\boolean{algocf@altsidecomment}}{\relax}{\par}}% +\newcommand{\algocf@sclfill}{\ifthenelse{\boolean{algocf@scleft}}{\algocf@fillcomment}{\relax}}% +\newcommand{\algocf@scrfill}{\ifthenelse{\boolean{algocf@scleft}}{\relax}{\hfill}}% +\newcommand{\algocf@startsidecomment}{\usebox\algocf@inputbox}% +\newcommand{\algocf@endsidecomment}{\algocf@endmarkcomment\algocf@scpar}% +\newcommand{\algocf@endstartsidecomment}{% + \algocf@sclfill\algocf@endsidecomment% + \algocf@scrfill\algocf@startsidecomment\ignorespaces}% +% +\newcommand{\SetKwComment}[3]{% + % newcommand or renewcommand ? + \@ifundefined{#1}{\let\algocf@mkcmd=\newcommand}{\let\algocf@mkcmd=\renewcommand}% + %%% comment definition + \expandafter\algocf@mkcmd\csname algocf@#1\endcsname[1]{% + \sbox\algocf@inputbox{\CommentSty{\hbox{#2}}}% + \ifthenelse{\boolean{algocf@commentsnumbered}}{\relax}{\everypar={\relax}}% + {\renewcommand{\algocf@endmarkcomment}{#3}% + \let\\\algocf@endstartcomment% + \algocf@startcomment\CommentSty{% + \strut\ignorespaces##1\strut\algocf@fillcomment#3}\par}% + \algocf@linesnumbered% reset the numbering of the lines + }% + %%% side comment definitions + % option or not? + \expandafter\algocf@mkcmd\csname algocf@#1@star\endcsname{% + \@ifnextchar [{\csname algocf@#1@staropt\endcsname}{\csname algocf@#1@sidecomment\endcsname}% + }% + % manage option + \expandafter\def\csname algocf@#1@staropt\endcsname[##1]##2{% + \ifthenelse{\boolean{algocf@scleft}}{\setboolean{algocf@sidecomment}{true}}{\setboolean{algocf@sidecomment}{false}}% + \ifx##1h\setboolean{algocf@altsidecomment}{true}\SetSideCommentLeft\fi% + \ifx##1f\setboolean{algocf@altsidecomment}{true}\SetSideCommentRight\fi% + \ifx##1l\setboolean{algocf@altsidecomment}{false}\SetSideCommentLeft\fi% + \ifx##1r\setboolean{algocf@altsidecomment}{false}\SetSideCommentRight\fi% + \csname algocf@#1@sidecomment\endcsname{##2}% call sidecomment + \ifthenelse{\boolean{algocf@sidecomment}}{\setboolean{algocf@scleft}{true}}{\setboolean{algocf@scleft}{false}}% + \setboolean{algocf@altsidecomment}{false}% + }% + % side comment + \expandafter\algocf@mkcmd\csname algocf@#1@sidecomment\endcsname[1]{% + \sbox\algocf@inputbox{\CommentSty{\hbox{#2}}}% + \ifthenelse{\boolean{algocf@commentsnumbered}}{\relax}{\everypar={\relax}}% + {% + \renewcommand{\algocf@endmarkcomment}{#3}% + \let\\\algocf@endstartsidecomment% + % here is the comment + %\ifthenelse{\boolean{algocf@altsidecomment}}{\relax}{\algocf@endline\ }% + \ifthenelse{\boolean{algocf@altsidecomment}}{\relax}{\@endalgocfline\ }% + \algocf@scrfill\algocf@startsidecomment\CommentSty{% + \strut\ignorespaces##1\strut\algocf@sclfill#3}\algocf@scpar% + }% + \algocf@linesnumbered% reset the numbering of the lines + } + \expandafter\algocf@mkcmd\csname#1\endcsname{\@ifstar{\csname algocf@#1@star\endcsname}{\csname algocf@#1\endcsname}}% +}% +% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% +% Kw +% +\newcommand{\SetKw}[2]{% + \@ifundefined{#1}{\let\algocf@mkcmd=\newcommand}{\let\algocf@mkcmd=\renewcommand}% + \expandafter\algocf@mkcmd\csname @#1\endcsname[1]{\KwSty{#2} \ArgSty{##1}}% + \expandafter\algocf@mkcmd\csname#1\endcsname{% + \@ifnextchar\bgroup{\csname @#1\endcsname}{\KwSty{#2}\xspace}}% + }% +% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% +% KwFunction +% +\newcommand{\SetKwFunction}[2]{% +%%% use of gdef since newcommand doesn't manage to define the macro when SetKwFunction is used in \algocf@caption@proc + \expandafter\gdef\csname @#1\endcsname##1{\FuncSty{#2(}\ArgSty{##1}\FuncSty{)}}% + \expandafter\gdef\csname#1\endcsname{% + \@ifnextchar\bgroup{\csname @#1\endcsname}{\FuncSty{#2}\xspace}}% +}% +% +% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% +% KwTab +% +\newcommand{\SetKwArray}[2]{% +%%% use of gdef since newcommand doesn't manage to define the macro when SetKwFunction is used in \algocf@caption@proc + \expandafter\gdef\csname @#1\endcsname##1{\DataSty{#2[}\ArgSty{##1}\DataSty{]}}% + \expandafter\gdef\csname#1\endcsname{% + \@ifnextchar\bgroup{\csname @#1\endcsname}{\DataSty{#2}\xspace}}% +}% +% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% +% KwBlock +% +\newcommand{\SetKwBlock}[3]{% +\@ifundefined{algocf@#1}{\let\algocf@mkcmd=\newcommand}{\let\algocf@mkcmd=\renewcommand}% +% side text or not? +\expandafter\def\csname#1\endcsname{%Begin + \@ifnextchar({\csname algocf@#1opt\endcsname}{\csname algocf@#1\endcsname}}% +% with side text +\expandafter\def\csname algocf@#1opt\endcsname(##1)##2{% \Begin(){} + \KwSty{#2} ##1\algocf@block{##2}{\@algocf@endoption{#3}}% + \@ifnextchar({\csname algocf@#1end\endcsname}{\par}}% +% without side text at the beginning +\expandafter\algocf@mkcmd\csname algocf@#1\endcsname[1]{% \Begin{} + \KwSty{#2}\algocf@block{##1}{\@algocf@endoption{#3}}\@ifnextchar({\csname algocf@#1end\endcsname}{\par}}% +% side text at the end +\expandafter\def\csname algocf@#1end\endcsname(##1){% \Begin{} + \ ##1\par}% +}% +% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% +% For Switch +% +\newcommand{\SetKwSwitch}[8]{% #1=\Switch #2=\Case #3=\Other #4=swicth #5=case #6=do #7=otherwise #8=endsw +%%%% Switch +\@ifundefined{algocf@#1}{\let\algocf@mkcmd=\newcommand}{\let\algocf@mkcmd=\renewcommand}% +% side text or not? +\expandafter\def\csname#1\endcsname{%Switch + \@ifnextchar({\csname algocf@#1opt\endcsname}{\csname algocf@#1\endcsname}}% +% with side text +\expandafter\def\csname algocf@#1opt\endcsname(##1)##2##3{% \Switch(){}{} + \KwSty{#4} \ArgSty{##2} \KwSty{#5} ##1\algocf@block{##3}{\@algocf@endoption{#8}}}% +% without side text +\expandafter\algocf@mkcmd\csname algocf@#1\endcsname[2]{% \Switch{}{} + \KwSty{#4} \ArgSty{##1} \KwSty{#5}\algocf@block{##2}{\@algocf@endoption{#8}}}% +% side text at the end +\expandafter\def\csname algocf@#1end\endcsname(##1){% \Switch{}{}() +}% +% +%%%% Case +\@ifundefined{algocf@#2}{\let\algocf@mkcmd=\newcommand}{\let\algocf@mkcmd=\renewcommand}% +% side text or not? +\expandafter\def\csname#2\endcsname{%Case + \@ifnextchar({\csname algocf@#2opt\endcsname}{\csname algocf@#2\endcsname}}% +\expandafter\def\csname u#2\endcsname{%uCase + \@ifnextchar({\csname algocf@u#2opt\endcsname}{\csname algocf@u#2\endcsname}}% +\expandafter\def\csname l#2\endcsname{%lCase + \@ifnextchar({\csname algocf@l#2opt\endcsname}{\csname algocf@l#2\endcsname}}% +% with side text +\expandafter\def\csname algocf@#2opt\endcsname(##1)##2##3{% \Case(){}{} + \KwSty{#6} \ArgSty{##2} ##1\algocf@block{##3}{\@algocf@endoption{#8}}}% +\expandafter\def\csname algocf@u#2opt\endcsname(##1)##2##3{% \uCase(){}{} + \KwSty{#6} \ArgSty{##2} ##1\algocf@group{##3}}% +\expandafter\def\csname algocf@l#2opt\endcsname(##1)##2##3{% \lCase(){}{} + \KwSty{#6} \ArgSty{##2} ##3\algocf@endline\ ##1\par}% +% without side text +\expandafter\algocf@mkcmd\csname algocf@#2\endcsname[2]{% \Case{}{} + \KwSty{#6} \ArgSty{##1}\algocf@block{##2}{\@algocf@endoption{#8}}}% +\expandafter\algocf@mkcmd\csname algocf@u#2\endcsname[2]{% \uCase{}{} + \KwSty{#6} \ArgSty{##1}\algocf@group{##2}}% +\expandafter\algocf@mkcmd\csname algocf@l#2\endcsname[2]{% \lCase{}{} + \KwSty{#6} \ArgSty{##1} ##2}% +%%%% Other +\@ifundefined{algocf@#3}{\let\algocf@mkcmd=\newcommand}{\let\algocf@mkcmd=\renewcommand}% +% side text or not? +\expandafter\def\csname#3\endcsname{%Other + \@ifnextchar({\csname algocf@#3opt\endcsname}{\csname algocf@#3\endcsname}}% +\expandafter\def\csname l#3\endcsname{%Other + \@ifnextchar({\csname algocf@l#3opt\endcsname}{\csname algocf@l#3\endcsname}}% +% with side text +\expandafter\def\csname algocf@#3opt\endcsname(##1)##2{% \Other(){}{} + \KwSty{#7} ##1\algocf@block{##2}{\@algocf@endoption{#8}}}% +\expandafter\def\csname algocf@l#3opt\endcsname(##1)##2{% \Other(){}{} + \KwSty{#7} ##2\algocf@endline\ ##1\par}% +% without side text +\expandafter\algocf@mkcmd\csname algocf@#3\endcsname[1]{% default + \KwSty{#7}\algocf@block{##1}{\@algocf@endoption{#8}}}% +\expandafter\algocf@mkcmd\csname algocf@l#3\endcsname[1]{% ldefault + \KwSty{#7} ##1}% +}% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% +% If macros +% +\newcommand{\SetKwIF}[8]{% #1=\If #2=\ElseIf #3=\Else #4=if #5=then #6=elseif si #7=else #8=endif +% +% common text +\@ifundefined{#1@ifthen}{\let\algocf@mkcmd=\newcommand}{\let\algocf@mkcmd=\renewcommand}% +\expandafter\algocf@mkcmd\csname #1@ifthen\endcsname[1]{% + \KwSty{#4} \ArgSty{##1} \KwSty{#5}}% +\expandafter\algocf@mkcmd\csname #1@endif\endcsname[1]{\algocf@block{##1}{\@algocf@endoption{#8}}}% +\expandafter\algocf@mkcmd\csname #1@noend\endcsname[1]{\algocf@group{##1}}% +\expandafter\algocf@mkcmd\csname #1@else\endcsname[1]{\algocf@group{##1}\KwSty{#7}}% +\@ifundefined{#2@elseif}{\let\algocf@mkcmd=\newcommand}{\let\algocf@mkcmd=\renewcommand}% +\expandafter\algocf@mkcmd\csname #2@elseif\endcsname[1]{% + \KwSty{#6} \ArgSty{##1} \KwSty{#5}}% +\@ifundefined{#3@else}{\let\algocf@mkcmd=\newcommand}{\let\algocf@mkcmd=\renewcommand}% +\expandafter\algocf@mkcmd\csname #3@else\endcsname{\KwSty{#7}}% +%%%% If then { } endif +% +\@ifundefined{algocf@#1}{\let\algocf@mkcmd=\newcommand}{\let\algocf@mkcmd=\renewcommand}% +% side text or not? +\expandafter\def\csname#1\endcsname{% + \@ifnextchar({\csname algocf@#1opt\endcsname}{\csname algocf@#1\endcsname}}% +% with side text +\expandafter\def\csname algocf@#1opt\endcsname(##1)##2##3{% \If(){}{} + \csname #1@ifthen\endcsname{##2} ##1\csname #1@endif\endcsname{##3}}% +% without side text +\expandafter\algocf@mkcmd\csname algocf@#1\endcsname[2]{% \If{}{} + \csname #1@ifthen\endcsname{##1}\csname #1@endif\endcsname{##2}}% +% +%%%% If then {} else {} endif +% +% side text or not? +\expandafter\def\csname e#1\endcsname{% + \@ifnextchar({\csname algocf@e#1thenopt\endcsname}{\csname algocf@e#1then\endcsname}}% +% with side text after if +\expandafter\def\csname algocf@e#1thenopt\endcsname(##1)##2##3{% \eIf() + \csname #1@ifthen\endcsname{##2} ##1\csname #1@else\endcsname{##3}% + \csname algocf@e#1thenelse\endcsname}% +% without side text after if +\expandafter\def\csname algocf@e#1then\endcsname##1##2{% \eIf() + \csname #1@ifthen\endcsname{##1}\csname #1@else\endcsname{##2}% + \csname algocf@e#1thenelse\endcsname}% +% side text after else or not ? +\expandafter\def\csname algocf@e#1thenelse\endcsname{% + \@ifnextchar({\csname algocf@e#1elseopt\endcsname}{\csname algocf@e#1else\endcsname}}% +% else with a side text +\expandafter\def\csname algocf@e#1elseopt\endcsname(##1)##2{% + ##1\csname #1@endif\endcsname{##2}}% +% else without side text +\expandafter\algocf@mkcmd\csname algocf@e#1else\endcsname[1]{% + \csname #1@endif\endcsname{##1}}% +% +%%%% If then +% +% side text or not? +\expandafter\def\csname l#1\endcsname{% lif + \@ifnextchar({\csname algocf@l#1opt\endcsname}{\csname algocf@l#1\endcsname}}% +\expandafter\def\csname u#1\endcsname{% uif + \@ifnextchar({\csname algocf@u#1opt\endcsname}{\csname algocf@u#1\endcsname}}% +% with side text +\expandafter\def\csname algocf@l#1opt\endcsname(##1)##2##3{% \lIf(){}{} + \csname #1@ifthen\endcsname{##2} ##3\algocf@endline\ ##1\par}% +\expandafter\def\csname algocf@u#1opt\endcsname(##1)##2##3{% \uIf(){}{} + \csname #1@ifthen\endcsname{##2} ##1\csname#1@noend\endcsname{##3}}% +% without side text +\expandafter\algocf@mkcmd\csname algocf@l#1\endcsname[2]{% \lIf{}{} + \csname #1@ifthen\endcsname{##1} ##2}% +\expandafter\algocf@mkcmd\csname algocf@u#1\endcsname[2]{% \uIf{}{} + \csname #1@ifthen\endcsname{##1}\csname#1@noend\endcsname{##2}}% +% +%%%% ElseIf {} endif +% +\@ifundefined{algocf@#2}{\let\algocf@mkcmd=\newcommand}{\let\algocf@mkcmd=\renewcommand}% +% side text or not? +\expandafter\def\csname#2\endcsname{% ElseIf + \@ifnextchar({\csname algocf@#2opt\endcsname}{\csname algocf@#2\endcsname}}% +% with side text +\expandafter\def\csname algocf@#2opt\endcsname(##1)##2##3{% \ElseIf(){}{} + \csname #2@elseif\endcsname{##2} ##1\csname #1@endif\endcsname{##3}}% +% without side text +\expandafter\algocf@mkcmd\csname algocf@#2\endcsname[2]{% \ElseIf{}{} + \csname #2@elseif\endcsname{##1}\csname #1@endif\endcsname{##2}}% +% +%%%% ElseIf +% +% side text or not? +\expandafter\def\csname l#2\endcsname{% lElseIf + \@ifnextchar({\csname algocf@l#2opt\endcsname}{\csname algocf@l#2\endcsname}}% +\expandafter\def\csname u#2\endcsname{% uElseIf + \@ifnextchar({\csname algocf@u#2opt\endcsname}{\csname algocf@u#2\endcsname}}% +% with side text +\expandafter\def\csname algocf@l#2opt\endcsname(##1)##2##3{% \lElseIf(){}{} + \csname #2@elseif\endcsname{##2} ##3\algocf@endline\ ##1\par}% +\expandafter\def\csname algocf@u#2opt\endcsname(##1)##2##3{% \uElseIf(){}{} + \csname #2@elseif\endcsname{##2} ##1\csname #1@noend\endcsname{##3}}% +% without side text +\expandafter\algocf@mkcmd\csname algocf@l#2\endcsname[2]{% \lElseIf{}{} + \csname #2@elseif\endcsname{##1} ##2}% +\expandafter\algocf@mkcmd\csname algocf@u#2\endcsname[2]{% \uElseIf{}{} + \csname #2@elseif\endcsname{##1}\csname #1@noend\endcsname{##2}}% +% +%%%% Else {} endif +% +\@ifundefined{algocf@#3}{\let\algocf@mkcmd=\newcommand}{\let\algocf@mkcmd=\renewcommand}% +% side text or not? +\expandafter\def\csname#3\endcsname{% Else + \@ifnextchar({\csname algocf@#3opt\endcsname}{\csname algocf@#3\endcsname}}% +% with side text +\expandafter\def\csname algocf@#3opt\endcsname(##1)##2{% \Else(){} + \csname #3@else\endcsname\ ##1\csname #1@endif\endcsname{##2}}% +% without side text +\expandafter\algocf@mkcmd\csname algocf@#3\endcsname[1]{% \Else{} + \csname #3@else\endcsname\csname #1@endif\endcsname{##1}}% +% +%%%% Else +% +% side text or not? +\expandafter\def\csname l#3\endcsname{% lElse + \@ifnextchar({\csname algocf@l#3opt\endcsname}{\csname algocf@l#3\endcsname}}% +\expandafter\def\csname u#3\endcsname{% uElse + \@ifnextchar({\csname algocf@u#3opt\endcsname}{\csname algocf@u#3\endcsname}}% +% with side text +\expandafter\def\csname algocf@l#3opt\endcsname(##1)##2{% \lElse(){} + \csname #3@else\endcsname\ ##2\algocf@endline\ ##1\par}% +\expandafter\def\csname algocf@u#3opt\endcsname(##1)##2{% \uElse(){} + \csname #3@else\endcsname\ ##1\csname #1@noend\endcsname{##2}}% +% without side text +\expandafter\algocf@mkcmd\csname algocf@l#3\endcsname[1]{% \lElse{} + \csname #3@else\endcsname\ ##1}% +\expandafter\algocf@mkcmd\csname algocf@u#3\endcsname[1]{% \uElse{} + \csname #3@else\endcsname\csname #1@noend\endcsname{##1}}% +}% +% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% +% For macros +% +\newcommand{\SetKwFor}[4]{% +\@ifundefined{algocf@#1}{\let\algocf@mkcmd=\newcommand}{\let\algocf@mkcmd=\renewcommand}% +% side text or not? +\expandafter\def\csname#1\endcsname{%For + \@ifnextchar({\csname algocf@#1opt\endcsname}{\csname algocf@#1\endcsname}}% +\expandafter\def\csname l#1\endcsname{%For + \@ifnextchar({\csname algocf@l#1opt\endcsname}{\csname algocf@l#1\endcsname}}% +% with side text +\expandafter\def\csname algocf@#1opt\endcsname(##1)##2##3{% \For(){}{} + \KwSty{#2} \ArgSty{##2} \KwSty{#3} ##1\algocf@block{##3}{\@algocf@endoption{#4}}}% +\expandafter\def\csname algocf@l#1opt\endcsname(##1)##2##3{% \lFor(){}{} + \KwSty{#2} \ArgSty{##2} \KwSty{#3} ##3\algocf@endline\ ##1\par}% +% without side text +\expandafter\algocf@mkcmd\csname algocf@#1\endcsname[2]{% \For{}{} + \KwSty{#2} \ArgSty{##1} \KwSty{#3}\algocf@block{##2}{\@algocf@endoption{#4}}}% +\expandafter\algocf@mkcmd\csname algocf@l#1\endcsname[2]{% \lFor{}{} + \KwSty{#2} \ArgSty{##1} \KwSty{#3} ##2}% +}% +% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% +% Repeat macros +% +\newcommand{\SetKwRepeat}[3]{% +\@ifundefined{algocf@#1}{\let\algocf@mkcmd=\newcommand}{\let\algocf@mkcmd=\renewcommand}% +% side text or not? +\expandafter\def\csname#1\endcsname{% Repeat + \@ifnextchar({\csname algocf@#1opt\endcsname}{\csname algocf@#1\endcsname}}% +\expandafter\def\csname l#1\endcsname{% lRepeat + \@ifnextchar({\csname algocf@l#1opt\endcsname}{\csname algocf@l#1\endcsname}}% +% with side text +\expandafter\def\csname algocf@#1opt\endcsname(##1)##2##3{% \Repeat(){}{} + \KwSty{#2} ##1\algocf@group{##3}\KwSty{#3} \ArgSty{##2}% + \@ifnextchar({\csname algocf@#1optopt\endcsname}{\@endalgoln}% +}% +\expandafter\def\csname algocf@#1optopt\endcsname(##1){% \Repeat(){}{}() + ##1\@endalgoln}% +\expandafter\def\csname algocf@l#1opt\endcsname(##1)##2##3{% \lRepeat(){}{} + \KwSty{#2} ##3 \KwSty{#3} \ArgSty{##2}\algocf@endline\ ##1\par}% +% without side text +\expandafter\algocf@mkcmd\csname algocf@#1\endcsname[2]{% \Repeat{}{} + \KwSty{#2}\algocf@group{##2}\KwSty{#3} \ArgSty{##1}% + \@ifnextchar({\csname algocf@#1optopt\endcsname}{\@endalgoln}% +}% +\expandafter\algocf@mkcmd\csname algocf@l#1\endcsname[2]{% \lRepeat{}{} + \KwSty{#2} ##2 \KwSty{#3} \ArgSty{##1}}% +}% +% +% +% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%% Environments definitions %%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% +%% +%% Caption management +%% +% for the following macros: +% #1 is given by caption and is equal to fnum@algocf +% #2 is the text given in argument by the user in the \caption macro +% +%%%%% text of caption +\newcommand{\algocf@captionlayout}[1]{#1}% +\newcommand{\SetAlgoCaptionLayout}[1]{% + \renewcommand{\algocf@captionlayout}[1]{\csname #1\endcsname{##1}}}% +\newcommand{\algocf@capseparator}{:}% +\newcommand{\SetAlgoCaptionSeparator}[1]{\renewcommand{\algocf@capseparator}{#1}}% +\newcommand{\algocf@captiontext}[2]{% + \algocf@captionlayout{\AlCapSty{\AlCapFnt #1\algocf@typo\algocf@capseparator}\nobreakspace% + \AlCapNameSty{\AlCapNameFnt{}#2}}}% text of caption +% +%%%%% default caption of algorithm: used if no specific style caption is defined +\newcommand{\algocf@makecaption}[2]{% + \addtolength{\hsize}{\algomargin}% + \sbox\@tempboxa{\algocf@captiontext{#1}{#2}}% + \ifdim\wd\@tempboxa >\hsize% % if caption is longer than a line + \hskip .5\algomargin% + \parbox[t]{\hsize}{\algocf@captiontext{#1}{#2}}% then caption is not centered + \else% + \global\@minipagefalse% + \hbox to\hsize{\hfil\box\@tempboxa\hfil}% else caption is centered + \fi% + \addtolength{\hsize}{-\algomargin}% +}% +% +\newsavebox\algocf@capbox% +\newcommand{\algocf@makecaption@plain}[2]{% + \global\sbox\algocf@capbox{\algocf@makecaption{#1}{#2}}}% +\newcommand{\algocf@makecaption@boxed}[2]{% + \addtolength{\hsize}{-\algomargin}% + \global\sbox\algocf@capbox{\algocf@makecaption{#1}{#2}}% + \addtolength{\hsize}{\algomargin}% + }% +% +\newcommand{\algocf@makecaption@tworuled}[2]{\algocf@makecaption@ruled{#1}{#2}}% +\newcommand{\algocf@makecaption@algoruled}[2]{\algocf@makecaption@ruled{#1}{#2}}% +\newcommand{\algocf@makecaption@boxruled}[2]{\algocf@makecaption@ruled{#1}{#2}}% +\newcommand{\algocf@makecaption@ruled}[2]{% + \global\sbox\algocf@capbox{\hskip\AlCapHSkip% .5\algomargin% + \parbox[t]{\hsize}{\algocf@captiontext{#1}{#2}}}% then caption is not centered +}% +% +\newlength{\algoheightruledefault}\setlength{\algoheightruledefault}{0.8pt}% +\newlength{\algoheightrule}\setlength{\algoheightrule}{\algoheightruledefault}% +\newlength{\algotitleheightruledefault}\setlength{\algotitleheightruledefault}{0.8pt}% +\newlength{\algotitleheightrule}\setlength{\algotitleheightrule}{\algotitleheightruledefault}% +\newcommand{\algocf@caption@plain}{\vskip\AlCapSkip\box\algocf@capbox}% +\newcommand{\algocf@caption@boxed}{\vskip\AlCapSkip\box\algocf@capbox}% +\newcommand{\algocf@caption@ruled}{\box\algocf@capbox\kern\interspacetitleruled\hrule height\algotitleheightrule depth0pt\kern\interspacealgoruled}% +\newcommand{\algocf@caption@tworuled}{\box\algocf@capbox\kern\interspacetitleruled}% +\newcommand{\algocf@caption@algoruled}{\algocf@caption@ruled}% +\newcommand{\algocf@caption@boxruled}{% + \addtolength{\hsize}{-0.8pt}% + \hbox to\hsize{% + \vrule%\hskip-0.35pt% + \vbox{% + \hrule\vskip\interspacetitleboxruled% + \hbox to\hsize{\unhbox\algocf@capbox\hfill}\vskip\interspacetitleboxruled% + }% + %\hskip-0.35pt% + \vrule% + }\nointerlineskip% + \addtolength{\hsize}{0.8pt}% +}% +% +% +%%%% set caption for the environment +\newcommand{\algocf@captionref}{% + \renewcommand{\fnum@algocf}[1]{\AlCapSty{\AlCapFnt\algorithmcfname\nobreakspace\algocf@algocfref}}% + \addtocounter{algocf}{-1}% \caption do a refstepcounter, so we restore the precedent value + \let\old@thealgocf=\thealgocf\renewcommand{\thealgocf}{{\relsize{\algocf@refrelsize}\algocf@algocfref}}% + \gdef\@currentlabel{\algocf@algocfref}% let the label use the new ref +}% +% +% Unfortunatly, we also need our own caption to set some specific stuff for special references. But after these +% settings, we call the original caption. +% +\long\def\algocf@caption@algo#1[#2]#3{% + \ifthenelse{\equal{\algocf@algocfref}{\relax}}{}{\algocf@captionref}% + \@ifundefined{hyper@refstepcounter}{\relax}{% if hyper@refstepcounter undefind, no hyperref, else... + \ifthenelse{\equal{\algocf@algocfref}{\relax}}{\renewcommand{\theHalgocf}{\thealgocf}}{% take algocf as Href + \renewcommand{\theHalgocf}{\algocf@algocfref}}%else if SetAlgoRefName done, take this name as ref. + \hyper@refstepcounter{algocf}%set algocf as category of ref + }% + \algocf@latexcaption{#1}[#2]{#3}% call original caption +}% +% +% beamer define is own caption overrinding latex caption! +% as we need it, we have put here the original definition +% to handle manual ref, unfortunately we have to add one line to handle algocf@algocfref +\long\def\algocf@latexcaption#1[#2]#3{% original definition of caption + \par% + \addcontentsline{\csname ext@#1\endcsname}{#1}% + {\protect\numberline{\csname the#1\endcsname}{\ignorespaces #2}}% + \begingroup% + \@parboxrestore% + \if@minipage% + \@setminipage% + \fi% + \normalsize% + \@makecaption{\csname fnum@#1\endcsname}{\ignorespaces #3}\par% + \endgroup% +}% +% +% \ifx\beamer@makecaption\undefined% +% \else% beamer detected +\ifx\@makecaption\undefined% +\newcommand{\@makecaption}[2]{\relax}% +\fi% +%% + +% +% more and more packages redefine \@caption instead of just \@makecaption which makes algorithm2e +% caption not works since based on standard \@caption. So we force the definition of \@caption to be +% the standard one (the one from LaTeX) inside algorithm environment. +% +% unfortunately, makecaption is called with \ignorespace #3 so +% we can't do the @currentlabel definition inside \algocf@captionproctext +\long\def\algocf@caption@proc#1[#2]#3{% + \ifthenelse{\boolean{algocf@nokwfunc}}{\relax}{% + \SetKwFunction{\algocf@captname#3@}{\algocf@captname#3@}% + }% + % we tell hyperref to use algocfproc as category and to take the appropriate ref. + \ifthenelse{\boolean{algocf@func}}{\def\@proc@func{algocffunc}}{\def\@proc@func{algocfproc}}% + \@ifundefined{hyper@refstepcounter}{\relax}{% if hyper@refstepcounter undefind, no hyperref, else... + \ifthenelse{\boolean{algocf@procnumbered}}{% + \expandafter\def\csname theH\@proc@func\endcsname{\algocf@captname#3@}%if procnumbered, take \thealgocf as ref + }{% + \expandafter\def\csname theH\@proc@func\endcsname{\algocf@captname#3@}%else take procedure or function name + }% + \hyper@refstepcounter{\@proc@func}% + }% + \ifthenelse{\boolean{algocf@procnumbered}}{\relax}{% + \addtocounter{algocf}{-1}% \caption do a refstepcounter, so we restore the precedent value + \gdef\@currentlabel{\algocf@captname#3@}% let the label be the name of the function, not the counter + }% + \ifthenelse{\equal{\algocf@captparam#2@}{\arg@e}}{% if no paramater, we remove the () + \algocf@latexcaption{#1}[\algocf@procname\nobreakspace\algocf@captname#2@]{#3}% + }{% else we give the complete name + \algocf@latexcaption{#1}[\algocf@procname\nobreakspace#2]{#3}% + }% +}% +%% +%%% setcaption +\newcommand{\algocf@setcaption}{% + \ifthenelse{\boolean{algocf@procenvironment}}{% if proc environment, caption text must be changed + \let\algocf@oldcaptiontext=\algocf@captiontext% + \renewcommand{\algocf@captiontext}[2]{% + \algocf@captionproctext{##1}{##2}% + }% + }{}% + \let\algocf@savecaption=\@caption% + \ifthenelse{\boolean{algocf@procenvironment}}{\let\@caption=\algocf@caption@proc}{\let\@caption=\algocf@caption@algo}% + \let\algocf@oldmakecaption=\@makecaption% + \renewcommand{\@makecaption}[2]{% + \expandafter\csname algocf@makecaption@\algocf@style\endcsname{##1}{##2}% + }% +}% +% +%%%%% reset caption +% +% since we have force the LaTeX caption for algorithm environment, we must go back to the caption +% used in the text. +\newcommand{\algocf@resetcaption}{% + \ifthenelse{\boolean{algocf@procenvironment}}{% if proc environment + \let\thealgocf=\old@thealgocf% restore normal counter printing + \let\algocf@captiontext=\algocf@oldcaptiontext% restore normal caption text + }{}% + \let\@caption=\algocf@savecaption% now restore caption outside algo/proc/func environment + \let\@makecaption=\algocf@oldmakecaption% and restore makecaption outside outside algo/proc/func environment + \algocf@resetfnum% +}% +% +%%%%% nocaptionofalgo and restorecaptionofalgo -- +\newcommand{\NoCaptionOfAlgo}{% + \let\@old@algocf@captiontext=\algocf@captiontext% + \renewcommand{\algocf@captiontext}[2]{\AlCapNameSty{\AlCapNameFnt{}##2}}% +}% +\newcommand{\RestoreCaptionOfAlgo}{% + \let\algocf@captiontext=\@old@algocf@captiontext% +}% +% +% ---------------------- algocf environment +% +\newcounter{algocfline}% % new counter to make lines numbers be internally +\setcounter{algocfline}{0}% % different in different algorithms +\newcounter{algocfproc}% counter to count all algo environment (proc, func), just used by hyperref to avoir "same +\setcounter{algocfproc}{0}% identifier" error caused by algocf being set to '-' for procedure or function or not + % changed if no caption is given. +% +\expandafter\ifx\csname algocf@within\endcsname\relax% if \algocf@within doesn't exist +\newcounter{algocf}% % just define a new counter +\renewcommand{\thealgocf}{\@arabic\c@algocf}% and the way it is printed +\else% else +\newcounter{algocf}[\algocf@within]% % counter is numbered within \algocf@within +\renewcommand\thealgocf{\csname the\algocf@within\endcsname.\@arabic\c@algocf}% +\fi% +% +\def\fps@algocf{htbp}% % default +\def\ftype@algocf{10}% % float type +\def\ext@algocf{\algocf@list} % loa by default, lof if figure option used +\newcommand{\fnum@algocf}[1]{\AlCapSty{\AlCapFnt\algorithmcfname\nobreakspace\thealgocf}}% +\newcommand{\algocf@resetfnum}{\renewcommand{\fnum@algocf}[1]{\AlCapSty{\AlCapFnt\algorithmcfname\nobreakspace\thealgocf}}}% +\newenvironment{algocf}% % float environment for algorithms + {\@float{algocf}}% + {\end@float}% +\newenvironment{algocf*}% % float* environment for algorithms + {\@dblfloat{algocf}}% + {\end@dblfloat}% +% +\def\algocf@seclistalgo{}% +\ifx\l@chapter\undefined\let\algocf@seclistalgo=\section\else\let\algocf@seclistalgo=\chapter\fi% +\@ifundefined{if@restonecol}{\newif\if@restonecol}\relax% +\newcommand\listofalgocfs{% + \ifx\algocf@seclistalgo\chapter% + \if@twocolumn\@restonecoltrue\onecolumn\else\@restonecolfalse\fi% + \fi% + \algocf@seclistalgo*{\listalgorithmcfname}% + \@mkboth{\MakeUppercase\listalgorithmcfname}% + {\MakeUppercase\listalgorithmcfname}% + \@starttoc{loa}% + \ifx\algocf@seclistalgo\chapter% + \if@restonecol\twocolumn\fi% + \fi% +} +% +\newcommand*\l@algocf{\@dottedtocline{1}{1em}{2.3em}}% line of the list +% +% ---------------------- algorithm environment +% +%%%%%%% +%% +%% Algorithm environment definition +%% +%%%%%%% +%% +% +\newsavebox\algocf@algoframe% +\def\@algocf@pre@plain{\relax}% action to be done before printing the algo. +\def\@algocf@post@plain{\relax}% action to be done after printing the algo. +\def\@algocf@capt@plain{bottom}% where the caption should be localized. +\def\@algocf@pre@boxed{\noindent\begin{lrbox}{\algocf@algoframe}} +\def\@algocf@post@boxed{\end{lrbox}\framebox[\hsize]{\box\algocf@algoframe}\par}% +\def\@algocf@capt@boxed{under}% +\def\@algocf@pre@ruled{\hrule height\algoheightrule depth0pt\kern\interspacetitleruled}% +\def\@algocf@post@ruled{\kern\interspacealgoruled\hrule height\algoheightrule\relax}% +\def\@algocf@capt@ruled{top}% +\def\@algocf@pre@algoruled{\hrule height\algoheightrule depth0pt\kern\interspacetitleruled}% +\def\@algocf@post@algoruled{\kern\interspacealgoruled\hrule height\algoheightrule \relax}% +\def\@algocf@capt@algoruled{top}% +\def\@algocf@pre@tworuled{\hrule height\algoheightrule depth0pt\kern\interspacetitleruled}% +\def\@algocf@post@tworuled{\kern\interspacealgoruled\hrule height\algoheightrule\relax}% +\def\@algocf@capt@tworuled{top}% +\def\@algocf@pre@boxruled{\noindent\begin{lrbox}{\algocf@algoframe}}% +\def\@algocf@post@boxruled{\end{lrbox}\framebox[\hsize]{\box\algocf@algoframe}\par}% +\def\@algocf@capt@boxruled{above}% +% +\newcommand{\noalgocaption}{\def\@algocf@capt@ruled{none}} +% +%% before algocf or figure environment +\newcommand{\@algocf@init@caption}{% + \ifthenelse{\boolean{algocf@procenvironment}}{% if we are inside a procedure/function environment + \@algocf@proctitleofalgo% set Titleofalgo to Procedure: or Function: + % accordingly to the environment + \let\old@thealgocf=\thealgocf\ifthenelse{\boolean{algocf@procnumbered}}{\relax}{% + \renewcommand{\thealgocf}{-}}% + }{% else inside environment algorithm + \@algocf@algotitleofalgo% fix name for \Titleofalgo to \algorithmcfname + }% + \algocf@setcaption% set caption to our caption style +}% +% +\newcommand{\@algofloatboxreset}{\@setminipage} +\newcommand{\@algocf@init}{% + \refstepcounter{algocfline}% + \stepcounter{algocfproc}%to have a different counter for each environment and being abble to make the difference + %between href of algoline in different algorithms. + \ifthenelse{\boolean{algocf@optnoend}}{% + \renewcommand{\algocf@block}[2]{\algocf@group{##1}}% + }{% + \renewcommand{\algocf@block}[2]{\algocf@@block{##1}{##2}}% + }% +}% +%% after the end of algocf or figure environment +\newcommand{\@algocf@term@caption}{% + \algocf@resetcaption% restore original caption +}% +% +\newcommand{\@algocf@term}{% + \setboolean{algocf@algoH}{false}% no H by default + \ifthenelse{\boolean{algocf@optnoend}}{% + \renewcommand{\algocf@block}[2]{\algocf@@block{##1}{##2}}% + }{% + \renewcommand{\algocf@block}[2]{\algocf@group{##1}}% + }% + \SetAlgoRefName{\relax}% +}% +% +%%%%%%%%%%%%%%%%% +%% makethealgo: macro which print effectively the algo in its box +%% +\newsavebox\algocf@algobox% +\newcommand{\algocf@makethealgo}{% + \vtop{% + % place caption above if needed bye the style + \ifthenelse{\equal{\csname @algocf@capt@\algocf@style\endcsname}{above}}% + {\csname algocf@caption@\algocf@style\endcsname}{}% + % + % precommand according to the style + \csname @algocf@pre@\algocf@style\endcsname% + % place caption at top if needed bye the style + \ifthenelse{\equal{\csname @algocf@capt@\algocf@style\endcsname}{top}}% + {\csname algocf@caption@\algocf@style\endcsname}{}% + % + \box\algocf@algobox% the algo + % place caption at bottom if needed bye the style + \ifthenelse{\equal{\csname @algocf@capt@\algocf@style\endcsname}{bottom}}% + {\csname algocf@caption@\algocf@style\endcsname}{}% + % postcommand according to the style + \csname @algocf@post@\algocf@style\endcsname% + % place caption under if needed bye the style + \ifthenelse{\equal{\csname @algocf@capt@\algocf@style\endcsname}{under}}% + {\csname algocf@caption@\algocf@style\endcsname}{}% + }% +}% +%%%%%%%%%%%%%%%%%%% +% +%% at the beginning of algocf or figure environment +\newcommand{\@algocf@start}{% + \@algoskip% + \begin{lrbox}{\algocf@algobox}% + \setlength{\algowidth}{\hsize}% + \vbox\bgroup% save all the algo in a box + \hbox to\algowidth\bgroup\hbox to \algomargin{\hfill}\vtop\bgroup% + \ifthenelse{\boolean{algocf@slide}}{\parskip 0.5ex\color{black}}{}% + % initialization + \addtolength{\hsize}{-1.5\algomargin}% + \let\@mathsemicolon=\;\def\;{\ifmmode\@mathsemicolon\else\@endalgoln\fi}% + \raggedright\AlFnt{}% + \ifthenelse{\boolean{algocf@slide}}{\IncMargin{\skipalgocfslide}}{}% + \@algoinsideskip% +}% +% +%% at the end of algocf or figure environment +\newcommand{\@algocf@finish}{% + \@algoinsideskip% + \egroup%end of vtop which contain all the text + \hfill\egroup%end of hbox wich contains [margin][vtop] + \ifthenelse{\boolean{algocf@slide}}{\DecMargin{\skipalgocfslide}}{}% + % + \egroup%end of main vbox + \end{lrbox}% + \algocf@makethealgo% print the algo + \@algoskip% + % restore dimension and macros + \setlength{\hsize}{\algowidth}% + \lineskip\normallineskip\setlength{\skiptotal}{\@defaultskiptotal}% + \let\;=\@mathsemicolon% +}% +% +%%%%%%%%%%%%%%%%%%%% +%% basic definition of the environment algorithm +%% +% +\newboolean{algocf@procenvironment}\setboolean{algocf@procenvironment}{false}% +\newboolean{algocf@func}\setboolean{algocf@func}{false}% +\newboolean{algocf@algoH}\setboolean{algocf@algoH}{false}% +\newboolean{algocf@algostar}\setboolean{algocf@algostar}{false}% +% +%%% environment for {algorithm}[H] +\newenvironment{algocf@Here}{\noindent% + \def\@captype{algocf}% if not defined, caption exit with an error + \begin{minipage}{\hsize}% +}{% + \end{minipage}%\par% +}% +%%% real algorithm environment which manages H and * option +% \let\algocf@originalfloatboxreset=\@floatboxreset% +% \let\@floatboxreset=\@algofloatboxreset% +\newenvironment{algocf@algorithm}[1][htbp]{ + \@algocf@init% + \ifthenelse{\equal{\algocf@float}{figure}}{% if option figure set + \ifthenelse{\boolean{algocf@algostar}}{% if algorithm* with figure option + \begin{figure*}[#1]% call figure* + }{% else algorithm environment with figure option + \begin{figure}[#1]% call figure + }% + }{% else normal algorithm environment + \@algocf@init@caption% + \ifthenelse{\equal{#1}{H}}{% if [H] algorithm + \if@twocolumn\@latex@error{[H] in two columns mode is not allowed for algorithms}\fi% TODO: SCREAM if H in two colums! + \setboolean{algocf@algoH}{true}\begin{algocf@Here}% call corresponding environment + }{% else floating algorithm environment + \ifthenelse{\boolean{algocf@algostar}}{% if algorithm* + \begin{algocf*}[#1]% call algocf* + }{% else algorithm environment + \begin{algocf}[#1]% call algcf + }% + }% + }% fin test option figure ou pas + \@algocf@start% + \@ResetCounterIfNeeded% + \algocf@linesnumbered\ignorespaces% +}{% + \@algocf@finish% + \ifthenelse{\equal{\algocf@float}{figure}}{% + \ifthenelse{\boolean{algocf@algostar}}{% if algorithm* with figure option + \end{figure*}% call figure* + }{% else algorithm environment with figure option + \end{figure}% call figure + }% + }{% + \@algocf@term@caption% + \ifthenelse{\boolean{algocf@algoH}}{% if [H] algorithm + \end{algocf@Here}\par% call corresponding environment + }{% else floating algorithm environment + \ifthenelse{\boolean{algocf@algostar}}{% if algorithm* + \end{algocf*}% call algocf* + }{% else algorithm environment + \end{algocf}% call algocf + }% + }% + }% + \@algocf@term\ignorespacesafterend% +}% +% +%%% user algorithm environment +\newenvironment{\algocf@envname}[1][htbp]{% + \setboolean{algocf@algostar}{false}% + \setboolean{algocf@procenvironment}{false}\gdef\algocfautorefname{\algorithmautorefname}% + \begin{algocf@algorithm}[#1]\ignorespaces% +}{% + \end{algocf@algorithm}\ignorespacesafterend% +}% +%%% user algorithm* environment +\newenvironment{\algocf@envname*}[1][htbp]{% + \setboolean{algocf@algostar}{true}% + \setboolean{algocf@procenvironment}{false}\gdef\algocfautorefname{\algorithmautorefname}% + \begin{algocf@algorithm}[#1]\ignorespaces% +}{% + \end{algocf@algorithm}\ignorespacesafterend% +}% +% +%%%%%%%%%%%%%%%%%%%%%%% +%%% +% +\expandafter\newcommand\csname\algocf@listofalgorithms\endcsname{% + \ifthenelse{\equal{\algocf@float}{figure}}{\listoffigures}{\listofalgocfs}% +}% +%%% +%%% +% +% ---------------------- procedure and function environments +% +% +% -- new style (used in particular in the caption of function and procedure environments) +% +% three macros to extract parts of the caption +\gdef\algocf@captname#1(#2)#3@{#1} % keep characters before the first brace +\gdef\algocf@captparam#1(#2)#3@{#2} % keep character in between the braces +\gdef\algocf@captother#1(#2)#3@{#3} % keep character after the braces +% +%%% Text of caption for Procedure or Function +\newcommand{\algocf@captionproctext}[2]{% + {% + \ProcSty{\ProcFnt\algocf@procname\ifthenelse{\boolean{algocf@procnumbered}}{\nobreakspace\thealgocf\algocf@typo\algocf@capseparator}{\relax}}% + \nobreakspace\ProcNameSty{\ProcNameFnt\algocf@captname #2@}% Name of the procedure in ProcName Style. + \ifthenelse{\equal{\algocf@captparam #2@}{\arg@e}}{}{% if no argument, write nothing + \ProcNameSty{\ProcNameFnt(}\ProcArgSty{\ProcArgFnt\algocf@captparam #2@}\ProcNameSty{\ProcNameFnt)}%else put arguments in ProcArgSty: + }% endif + \algocf@captother #2@% + }% +}% +% +% +% -- procedure and function environments are defined from algocf@algorithm environment +% +\newenvironment{procedure}[1][htbp]{% + \setboolean{algocf@algostar}{false}% + \setboolean{algocf@procenvironment}{true}\setboolean{algocf@func}{false}% + \newcommand{\algocf@procname}{\@algocf@procname}\gdef\algocfprocautorefname{\procedureautorefname}% + \begin{algocf@algorithm}[#1]\ignorespaces% +}{% + \end{algocf@algorithm}\ignorespacesafterend% +}% +\newenvironment{function}[1][htbp]{% + \setboolean{algocf@algostar}{false}% + \setboolean{algocf@procenvironment}{true}\setboolean{algocf@func}{true}% + \newcommand{\algocf@procname}{\@algocf@funcname}\gdef\algocffuncautorefname{\functionautorefname}% + \begin{algocf@algorithm}[#1]\ignorespaces% +}{% + \end{algocf@algorithm}\ignorespacesafterend% +}% +% +\newenvironment{procedure*}[1][htbp]{% + \setboolean{algocf@algostar}{true}% + \setboolean{algocf@procenvironment}{true}\setboolean{algocf@func}{false}% + \newcommand{\algocf@procname}{\@algocf@procname}\gdef\algocfprocautorefname{\procedureautorefname}% + \begin{algocf@algorithm}[#1]\ignorespaces% +}{% + \end{algocf@algorithm}\ignorespacesafterend% +}% +\newenvironment{function*}[1][htbp]{% + \setboolean{algocf@algostar}{true}% + \setboolean{algocf@procenvironment}{true}\setboolean{algocf@func}{true}% + \newcommand{\algocf@procname}{\@algocf@funcname}\gdef\algocffuncautorefname{\functionautorefname}% + \begin{algocf@algorithm}[#1]\ignorespaces% +}{% + \end{algocf@algorithm}\ignorespacesafterend% +}% +% +% +%%%%%%%%%%%%%%%%%%%% +%% definition of algondfloat environment +%% +\ifthenelse{\boolean{algocf@endfloat}}{% if endfloat option then +\newcommand{\algoplace}{% macro which is used to writhe algorithm about there + \begin{center}% + [\algorithmcfname~\thepostfig\ about here.]% + \end{center}% +}% +\newcommand{\algoendfloat}{% use as a \begin{algoendfloat} environment to start scanning of line +% \immediate\openout\@mainfff\jobname.fff% + \efloat@condopen{fff} + \efloat@iwrite{fff}{\string\begin{\algocf@envname}}% + \if@domarkers% + \ifthenelse{\equal{\algocf@list}{lof}}{% + \addtocounter{postfig}{1}% + }{% + \addtocounter{postalgo}{1}% + }% + \algoplace% + \fi% + \bgroup% + \let\do\ef@makeinnocent\dospecials% + \ef@makeinnocent\^^L% and whatever other special cases + \endlinechar`\^^M \catcode`\^^M=12 \ef@xalgocfendfloat}% +}{\relax}%%%% end of endfloat option ifthenelse +%% some macros useful for endfloat option that cannot be defined inside the ifthenelse +%scan algoendfloat algorithm and write the text into .fff file +{\catcode`\^^M=12 \endlinechar=-1 % + \gdef\ef@xalgocfendfloat#1^^M{% scan the lines inside algoendfloat environment being read by latex + \def\test{#1}% test is the line being currently scan by latex + \ifx\test\ef@endalgocftest% if it is \end{algoendfloat} + \def\next{% define next as to not continue the scan and write \end{algorithm} into .fff file + \egroup\end{algoendfloat}% + \efloat@iwrite{fff}{\string\end{\algocf@envname}}% + \efloat@iwrite{fff}{\string\efloatseparator}% + \efloat@iwrite{fff}{ }% + }% + \else% else write the current line being scanned by latex and set next to continue the scan + \efloat@iwrite{fff}{#1}% + \let\next\ef@xalgocfendfloat% + \fi% endif + \next}% next is continue if it was else condition, else it does not continue the scan and write end to file +}% +% test if the scan is finish by looking at the string \end{algoendfloat} +{\escapechar=-1% + \xdef\ef@endalgocftest{\string\\end\string\{algoendfloat\string\}}% +}% +% +% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% +% +\newcommand{\TitleOfAlgo}[1]{\@titleprefix\ + \TitleSty{#1}\par\smallskip}% +% +\newcommand{\SetAlgorithmName}[3]{% + \renewcommand{\listalgorithmcfname}{#3}% + \renewcommand{\algorithmcfname}{#1}% + \renewcommand{\algorithmautorefname}{#2}% +}% +% +\newcommand{\algocf@refrelsize}{-2}\newcommand{\SetAlgoRefRelativeSize}[1]{\renewcommand{\algocf@refrelsize}{#1}}% +\newcommand{\SetAlgoRefName}[1]{% + \renewcommand{\algocf@algocfref}{#1}% +}% +% +% +% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% +% +% ------------------------- Default Definitions +% +%% +%% +% +\SetKwComment{tcc}{/* }{ */}% +\SetKwComment{tcp}{// }{}% +% +%\newcommand{\algocf@defaults@common}{ +% +% +% french keywords +% +%\SetKwInOut{AlgDonnees}{Donn\'ees}\SetKwInOut{AlgRes}{R\'esultat} +\SetKwInput{Donnees}{Donn\'ees}% +\SetKwInput{Res}{R\'esultat}% +\SetKwInput{Entree}{Entr\'ees}% +\SetKwInput{Sortie}{Sorties}% +\SetKw{KwA}{\`a}% +\SetKw{Retour}{retourner}% +\SetKwBlock{Deb}{d\'ebut}{fin}% +\SetKwRepeat{Repeter}{r\'ep\'eter}{jusqu'\`a}% +% +\SetKwIF{Si}{SinonSi}{Sinon}{si}{alors}{sinon si}{sinon}{fin si}% +\SetKwSwitch{Suivant}{Cas}{Autre}{suivant}{faire}{cas o\`u}{autres cas}{fin d'alternative}% +\SetKwFor{Pour}{pour}{faire}{fin pour}% +\SetKwFor{PourPar}{pour}{faire en parallèle}{fin pour}% +\SetKwFor{PourCh}{pour chaque}{faire}{fin pour chaque}% +\SetKwFor{PourTous}{pour tous les}{faire}{fin pour tous}% +\SetKwFor{Tq}{tant que}{faire}{fin tq}% +% +% english keywords +% +\SetKwInput{KwIn}{Input}% +\SetKwInput{KwOut}{Output}% +\SetKwInput{KwData}{Data}% +\SetKwInput{KwResult}{Result}% +\SetKw{KwTo}{to} +\SetKw{KwRet}{return}% +\SetKw{Return}{return}% +\SetKwBlock{Begin}{begin}{end}% +\SetKwRepeat{Repeat}{repeat}{until}% +% +\SetKwIF{If}{ElseIf}{Else}{if}{then}{else if}{else}{end if}% +\SetKwSwitch{Switch}{Case}{Other}{switch}{do}{case}{otherwise}{end switch}% +\SetKwFor{For}{for}{do}{end for}% +\SetKwFor{ForPar}{for}{do in parallel}{end forpar} +\SetKwFor{ForEach}{foreach}{do}{end foreach}% +\SetKwFor{ForAll}{forall the}{do}{end forall}% +\SetKwFor{While}{while}{do}{end while}% +% +% --- German keywords +% +\SetKwInput{Ein}{Eingabe}%KwIn +\SetKwInput{Aus}{Ausgabe}%KwOut +\SetKwInput{Daten}{Daten}%KwData +\SetKwInput{Ergebnis}{Ergebnis}%KwResult +\SetKw{Bis}{bis}%KwTo +\SetKw{KwZurueck}{zur\"uck}%KwRet +\SetKw{Zurueck}{zur\"uck}%Return +\SetKwBlock{Beginn}{Beginn}{Ende}%Begin +\SetKwRepeat{Wiederh}{wiederhole}{bis}%Repeat +% +\SetKwIF{Wenn}{SonstWenn}{Sonst}{wenn}{dann}{sonst wenn}{sonst}{Ende wenn}%gIf +\SetKwSwitch{Unterscheide}{Fall}{Anderes}{unterscheide}{tue}{Fall}{sonst}{Ende Unt.}%Switch +\SetKwFor{Fuer}{f\"ur}{tue}{Ende f\"ur}%For +\SetKwFor{FuerPar}{f\"ur}{tue gleichzeitig}{Ende gleichzeitig}%ForPar +\SetKwFor{FuerJedes}{f\"ur jedes}{tue}{Ende f\"ur}%ForEach +\SetKwFor{FuerAlle}{f\"ur alle}{tue}{Ende f\"ur}%ForAll +\SetKwFor{Solange}{solange}{tue}{Ende solange}%While +% +% --- Czech keywords +% +\SetKwInput{Vst}{Vstup}% +\SetKwInput{Vyst}{V\'{y}stup}% +\SetKwInput{Vysl}{V\'{y}sledek}% +% +% --- Portuguese keywords +% +\SetKwInput{Entrada}{Entrada}% +\SetKwInput{Saida}{Sa\'{i}da}% +\SetKwInput{Dados}{Dados}% +\SetKwInput{Resultado}{Resultado}% +\SetKw{Ate}{at\'{e}} +\SetKw{KwRetorna}{retorna}% +\SetKw{Retorna}{retorna}% +\SetKwBlock{Inicio}{in\'{i}cio}{fim}% +\SetKwRepeat{Repita}{repita}{at\'{e}}% +% +\SetKwIF{Se}{SenaoSe}{Senao}{se}{ent\~{a}o}{sen\~{a}o se}{sen\~{a}o}{fim se}% +\SetKwSwitch{Selec}{Caso}{Outro}{selecione}{fa\c{c}a}{caso}{sen\~{a}o}{fim selec}% +\SetKwFor{Para}{para}{fa\c{c}a}{fim para}% +\SetKwFor{ParaPar}{para}{fa\c{c}a em paralelo}{fim para} +\SetKwFor{ParaCada}{para cada}{fa\c{c}a}{fim para cada}% +\SetKwFor{ParaTodo}{para todo}{fa\c{c}a}{fim para todo}% +\SetKwFor{Enqto}{enquanto}{fa\c{c}a}{fim enqto}% +% +% --- Italian keywords +% +\SetKwInput{KwIng}{Ingresso}% +\SetKwInput{KwUsc}{Uscita}% +\SetKwInput{KwDati}{Dati}% +\SetKwInput{KwRisult}{Risultato}% +\SetKw{KwA}{a}% +\SetKw{KwRitorna}{ritorna}% +\SetKw{Ritorna}{ritorna}% +\SetKwBlock{Inizio}{inizio}{fine}% +\SetKwRepeat{Ripeti}{ripeti}{finché}% +% +\SetKwIF{Sea}{AltSe}{Altrimenti}{se}{allora}{altrimenti se}{allora}{fine se}% +\SetKwSwitch{Switch}{Case}{Other}{switch}{do}{case}{otherwise}{endsw}% +\SetKwFor{Per}{per}{fai}{fine per}% +\SetKwFor{PerPar}{per}{fai in parallelo}{fine per}% +\SetKwFor{PerCiascun}{per ciascun}{fai}{fine per ciascun}% +\SetKwFor{PerTutti}{per tutti i}{fai}{fine per tutti}% +\SetKwFor{Finche}{finché}{fai}{fine finché}% +% +% --- End +%} +% +%\algocf@defaults@common +% +% option onelanguage redefinition +% +\ifthenelse{\boolean{algocf@optonelanguage}\AND\equal{\algocf@languagechoosen}{french}}{% +\SetKwInput{KwIn}{Entr\'ees}% +\SetKwInput{KwOutSortie}{Sorties}% +\SetKwInput{KwData}{Donn\'ees}% +\SetKwInput{KwResult}{R\'esultat}% +\SetKw{KwTo}{\`a}% +\SetKw{KwRet}{retourner}% +\SetKw{Return}{retourner}% +\SetKwBlock{Begin}{d\'ebut}{fin}% +\SetKwRepeat{Repeat}{r\'ep\'eter}{jusqu'\`a}% +% +\SetKwIF{If}{ElseIf}{Else}{si}{alors}{sinon si}{sinon}{fin si}% +\SetKwSwitch{Switch}{Case}{Other}{suivant}{faire}{cas o\`u}{autres cas}{fin d'alternative}% +\SetKwFor{For}{pour}{faire}{fin pour}% +\SetKwFor{ForPar}{pour}{faire en parallèle}{fin pour}% +\SetKwFor{ForEach}{pour chaque}{faire}{fin pour chaque}% +\SetKwFor{ForAll}{pour tous les}{faire}{fin pour tous}% +\SetKwFor{While}{tant que}{faire}{fin tq}% +}{}% +\ifthenelse{\boolean{algocf@optonelanguage}\AND\equal{\algocf@languagechoosen}{german}}{% +\SetKwInput{KwIn}{Eingabe}%KwIn +\SetKwInput{KwOut}{Ausgabe}%KwOut +\SetKwInput{KwData}{Daten}%KwData +\SetKwInput{KwResult}{Ergebnis}%KwResult +\SetKw{KwTo}{bis}%KwTo +\SetKw{KwRet}{zur\"uck}%KwRet +\SetKw{Return}{zur\"uck}%Return +\SetKwBlock{Begin}{Beginn}{Ende}%Begin +\SetKwRepeat{Repeat}{wiederhole}{bis}%Repeat +% +\SetKwIF{If}{ElseIf}{Else}{wenn}{dann}{sonst wenn}{sonst}{Ende wenn}%gIf +\SetKwSwitch{Switch}{Case}{Other}{unterscheide}{tue}{Fall}{sonst}{Ende Unt.}%Switch +\SetKwFor{For}{f\"ur}{tue}{Ende f\"ur}%For +\SetKwFor{ForPar}{f\"ur}{tue gleichzeitig}{Ende gleichzeitig}%ForPar +\SetKwFor{ForEach}{f\"ur jedes}{tue}{Ende f\"ur}%ForEach +\SetKwFor{ForAll}{f\"ur alle}{tue}{Ende f\"ur}%ForAll +\SetKwFor{While}{solange}{tue}{Ende solange}%While +}{}% +\ifthenelse{\boolean{algocf@optonelanguage}\AND\equal{\algocf@languagechoosen}{portugues}}{% +\SetKwInput{KwIn}{Entrada}% +\SetKwInput{KwOut}{Sa\'{i}da}% +\SetKwInput{KwData}{Dados}% +\SetKwInput{KwResult}{Resultado}% +\SetKw{KwTo}{at\'{e}} +\SetKw{KwRet}{retorna}% +\SetKw{Return}{retorna}% +\SetKwBlock{Begin}{in\'{i}cio}{fim}% +\SetKwRepeat{Repeat}{repita}{at\'{e}}% +% +\SetKwIF{If}{ElseIf}{Else}{se}{ent\~{a}o}{sen\~{a}o se}{sen\~{a}o}{fim se}% +\SetKwSwitch{Switch}{Case}{Other}{selecione}{fa\c{c}a}{caso}{sen\~{a}o}{fim selec}% +\SetKwFor{For}{para}{fa\c{c}a}{fim para}% +\SetKwFor{ForPar}{para}{fa\c{c}a em paralelo}{fim para} +\SetKwFor{ForEach}{para cada}{fa\c{c}a}{fim para cada}% +\SetKwFor{ForAll}{para todo}{fa\c{c}a}{fim para todo}% +\SetKwFor{While}{enquanto}{fa\c{c}a}{fim enqto}% +}{}% +\ifthenelse{\boolean{algocf@optonelanguage}\AND\equal{\algocf@languagechoosen}{italiano}}{% +\SetKwInput{KwIn}{Ingresso}% +\SetKwInput{KwOut}{Uscita}% +\SetKwInput{KwData}{Dati}% +\SetKwInput{KwResult}{Risultato}% +\SetKw{KwTo}{a}% +\SetKw{KwRet}{ritorna}% +\SetKw{Return}{ritorna}% +\SetKwBlock{Begin}{inizio}{fine}% +\SetKwRepeat{Repeat}{ripeti}{finché}% +% +\SetKwIF{If}{ElseIf}{Else}{se}{allora}{altrimenti se}{allora}{fine se}% +\SetKwSwitch{Switch}{Case}{Other}{switch}{do}{case}{otherwise}{endsw}% +\SetKwFor{For}{per}{fai}{fine per}% +\SetKwFor{ForPar}{per}{fai in parallelo}{fine per}% +\SetKwFor{ForEach}{per ciascun}{fai}{fine per ciascun}% +\SetKwFor{ForAll}{per tutti i}{fai}{fine per tutti}% +\SetKwFor{While}{finché}{fai}{fine finché}% +}{}% +% +%%%% old commands compatibility +% +\ifthenelse{\boolean{algocf@oldcommands}}{% +\newcommand{\SetNoLine}{\SetAlgoNoLine}% +\newcommand{\SetVline}{\SetAlgoVlined}% +\newcommand{\SetLine}{\SetAlgoLined}% +% +\newcommand{\dontprintsemicolon}{\DontPrintSemicolon}% +\newcommand{\printsemicolon}{\PrintSemicolon}% +\newcommand{\incmargin}[1]{\IncMargin{#1}}% +\newcommand{\decmargin}[1]{\DecMargin{-#1}}% +\newcommand{\setnlskip}[1]{\SetNlSkip{#1}}% +\newcommand{\Setnlskip}[1]{\SetNlSkip{#1}}% +\newcommand{\setalcapskip}[1]{\SetAlCapSkip{#1}}% +\newcommand{\setalcaphskip}[1]{\SetAlCapHSkip{#1}}% +\newcommand{\nlSty}[1]{\NlSty{#1}}% +\newcommand{\Setnlsty}[3]{\SetNlSty{#1}{#2}{#3}}% +\newcommand{\linesnumbered}{\LinesNumbered}% +\newcommand{\linesnotnumbered}{\LinesNotNumbered}% +\newcommand{\linesnumberedhidden}{\LinesNumberedHidden}% +\newcommand{\showln}{\ShowLn}% +\newcommand{\showlnlabel}[1]{\ShowLnLabel{#1}}% +\newcommand{\nocaptionofalgo}{\NoCaptionOfAlgo}% +\newcommand{\restorecaptionofalgo}{\RestoreCaptionOfAlgo}% +\newcommand{\restylealgo}[1]{\RestyleAlgo{#1}}% +% +\newcommand{\Titleofalgo}[1]{\TitleOfAlgo{#1}}% +\SetKwIF{gSi}{gSinonSi}{gSinon}{si}{alors}{sinon si}{sinon}{fin si}% +\SetKwIF{gIf}{gElsIf}{gElse}{if}{then}{else if}{else}{end if}% +\SetKwIF{gIf}{gElseIf}{gElse}{if}{then}{else if}{else}{end if}% +\SetKwIF{gWenn}{gSonstWenn}{gSonst}{wenn}{dann}{sonst wenn}{sonst}{Ende wenn}%gIf +\SetKwIF{gSe}{gSenaoSe}{gSenao}{se}{ent\~{a}o}{sen\~{a}o se}{sen\~{a}o}{fim se}% +\SetKwIF{gSea}{gAltSe}{gAltrimenti}{se}{allora}{altrimenti se}{allora}{fine se}% +}{% + \relax% +}% +% +% +% +%% +%%% +%%%% END \ No newline at end of file diff --git a/ipol/ipol_style_201905/article.bib b/ipol/ipol_style_201905/article.bib new file mode 100644 index 0000000000000000000000000000000000000000..78fdecd536f3630ac9004e699ff18bbc6e495030 --- /dev/null +++ b/ipol/ipol_style_201905/article.bib @@ -0,0 +1,76 @@ +@article{article, +author = {P.~Meer, J.M.~Jolion, and A.~Rosenfeld}, +journal = {IEEE Transactions on Pattern Analysis and Machine + Intelligence}, +number = {2}, +pages = {216--223}, +title = {A fast parallel algorithm for blind estimation of noise + variance}, +volume = {12}, +year = {1990}, +doi = {10.1109/34.44408}, +url = {http://dx.doi.org/10.1109/34.44408}, +} + +@unpublished{preprint, +author = {A.~Ciomaga, L.~Moisan, P.~Monasse, and J.M.~Morel}, +note = {preprint}, +title = {Image Curvature Microscope}, +year = {2010}, +url = {http://www.ipol.im/pub/pre/H4/}, +} + +@inproceedings{conference, +author = {D.~Zoran and Y.~Weiss}, +booktitle = {Proceedings of the 13th International Conference on + Computer Vision (ICCV)}, +note = {\url{http://dx.doi.org/10.1109/ICCV.2011.6126278}}, +pages = {479–486}, +title = {From learning models of natural image patches to whole image + restoration}, +year = {2011}, +} + +@book{book, +author = {D.P.~Bertsekas}, +note = {ISBN~1886529043}, +publisher = {Academic Press}, +title = {Constrained optimization and Lagrange multiplier methods}, +year = {1982}, +} + +@book{turabian, +author = {K.~Turabian}, +edition = {7th}, +note = {ISBN~075698355X}, +publisher = {The University of Chicago Press}, +title = {A Manual for Writers of Research Papers, Theses, and + Dissertations}, +year = {2007}, +} + +@book{merriam-webster, +edition = {11th}, +editor = {Frederick~C.~Mish}, +note = {ISBN~0877798095}, +title = {Merriam-Webster's Collegiate Dictionary}, +year = {2003}, +} + +@book{strunk-white, +author = {W.~Strunk and E.B.~White}, +edition = {4th}, +note = {ISBN~020530902X}, +publisher = {Longman}, +title = {The Elements of Style}, +year = {1999}, +} + +@book{williams, +author = {J.~Williams}, +edition = {3rd}, +note = {ISBN~0205605354}, +publisher = {Pearson Longman}, +title = {Style --- The Basics of Clarity and Grace}, +year = {2008}, +} diff --git a/ipol/ipol_style_201905/images/curve.pdf b/ipol/ipol_style_201905/images/curve.pdf new file mode 100644 index 0000000000000000000000000000000000000000..8154f720e9b207df4c6a0a3e2152b8eba0236408 Binary files /dev/null and b/ipol/ipol_style_201905/images/curve.pdf differ diff --git a/ipol/ipol_style_201905/images/ferrari.png b/ipol/ipol_style_201905/images/ferrari.png new file mode 100644 index 0000000000000000000000000000000000000000..84d4cb3140bc9ab4043ac4d745bbf8ecbd8ef11f Binary files /dev/null and b/ipol/ipol_style_201905/images/ferrari.png differ diff --git a/ipol/ipol_style_201905/images/finger.png b/ipol/ipol_style_201905/images/finger.png new file mode 100644 index 0000000000000000000000000000000000000000..5f729c56f83dd33a5ae39384ce7ba5d96a18e1d4 Binary files /dev/null and b/ipol/ipol_style_201905/images/finger.png differ diff --git a/ipol/ipol_style_201905/images/k19.png b/ipol/ipol_style_201905/images/k19.png new file mode 100644 index 0000000000000000000000000000000000000000..d972d10112efb30ddda0cc4891f9a05c7c233573 Binary files /dev/null and b/ipol/ipol_style_201905/images/k19.png differ diff --git a/ipol/ipol_style_201905/images/lena.png b/ipol/ipol_style_201905/images/lena.png new file mode 100644 index 0000000000000000000000000000000000000000..2c779efb48a42fcf42bc7000a8b83eb58b31669f Binary files /dev/null and b/ipol/ipol_style_201905/images/lena.png differ diff --git a/ipol/ipol_style_201905/images/lily.png b/ipol/ipol_style_201905/images/lily.png new file mode 100644 index 0000000000000000000000000000000000000000..fda008b6222fbc297638ab6f7e60270ace474d8c Binary files /dev/null and b/ipol/ipol_style_201905/images/lily.png differ diff --git a/ipol/ipol_style_201905/ipol.cls b/ipol/ipol_style_201905/ipol.cls new file mode 100644 index 0000000000000000000000000000000000000000..78cbc6cd46f1ee3a574607dd66dc4baf9c0e0431 --- /dev/null +++ b/ipol/ipol_style_201905/ipol.cls @@ -0,0 +1,388 @@ +%------------------------------------------------------------------------------- +% ipol.cls +% LaTeX class for IPOL articles +% +% version 0.5.2 - 2015.11.7 - jose luis lisani +% > change in format of doi links (from http://dx.doi.org to https://doi.org) +% following the indications of the Crossref organization +% version 0.5.1 - 2015.6.16 - rafael grompone von gioi +% > small corrections to page layout to avoid "Overfull \vbox" messages +% due to a zero height of the header +% version 0.5 - 2014.7.1 - rafael grompone von gioi +% > abstract included as PDF metadata +% > vector version of IPOL logo +% version 0.4.3 - 2014.4.29 - rafael grompone von gioi +% > last page reference bug corrected (in some cases, the first page footer +% with the article reference would not print the correct last page number. +% version 0.4.2 - 2014.3.18 - nicolas limare +% > use SIAM style for the standard ipol citation +% > insert custom PDF metatata: IPOL.Volume and IPOL.DOI +% version 0.4.1 - 2014.3.8 - rafael grompone von gioi +% > new command to specify the volume number +% version 0.4 - 2013.7.19 - rafael grompone von gioi +% > the IPOL LaTeX class version label was moved a little so it is +% not cut by the margins of the print area of printers +% > copyediting commands were removed +% version 0.3.2 - 2013.7.4 - rafael grompone von gioi +% > verification added that the right version of package 'hyperref' is +% available. otherwise, the PDF metadata is not generated +% > the IPOL LaTeX class version is added to the PDF 'Creator' metadata +% > when the document is a preprint, its DOI and link is set to +% https://doi.org/10.5201/ipol so it points to the IPOL journal +% > modification so IPOL LaTeX class version is defined only once +% > some minor source code arrangements +% version 0.3.1 - 2013.6.21 - rafael grompone von gioi +% > bug corrected: pages in article reference at footer should not be links +% > bug corrected: article's reference in footer absent if first page even +% version 0.3 - 2013.5.1 - rafael grompone von gioi +% > "\bf" replaced with the more standard one "\bfseries" +% > typo corrected +% > bygone 'pagecolor' option of package 'hyperref' removed +% > copyediting commands added +% > IPOL logo linked to the website +% > the PREPRINT label, when needed, is placed below title and authors +% > \relax added after \ProcessOptions, see The LaTeX Companion 2ed. p.882 +% > release date and version added to the class definition +% > \vbox command replaced by the more standard one \parbox +% > keywords handling added +% > PDF metadata generation +% > article's date replaced by submission, accepted and publication dates +% > submission and accepted dates are printed in the header +% > new command \ipolAuthorMark to set the affiliations markers in a way +% that can be removed when setting the PDF metadata +% > abstract environment renamed to ipolAbstract. This make the naming +% more coherent and allows to use the package "environ" (for some reason +% it is not able to redefine the abstract environment). +% > in ipolAbstract, ipolCode and ipolSupp, the 'quote' environment +% was replace by the 'quotation' environment. This indents the +% paragraphs except for the initial one. +% > SIIMS companion article command added +% > labels added to the first and last page numbers +% > headers added +% > first page footer contains the article citation +% > a command added to force the citation text +% > IPOL LaTeX class version is printed in the upper left side of first page +% version 0.2 - 2012.6.4 - rafael grompone von gioi +% > the logo image is now called "ipol_logo". +% > affiliations command added +% > "DRAFT" label became "PREPRINT" +% > margins copied from "fullpage" without using it +% > "\ipolDraftLink" command became "\ipolPreprintLink" +% > modifications to the paper's header +% > "\href" command was modified in order that links will include a footnote +% with the address, to get the links in printed form too. +% > links' color modified. +% > compilation date added to the Preprint label +% > modifications to the mechainsm that generates the title of the article. +% version 0.1 - 2012.1.27 - rafael grompone von gioi +%------------------------------------------------------------------------------- +\NeedsTeXFormat{LaTeX2e} +\newcommand{\ipolClassVersion}{2015/06/16 v0.5.1 IPOL article class} +\ProvidesClass{ipol}[\ipolClassVersion] +\DeclareOption*{\PassOptionsToClass{\CurrentOption}{article}} +\ProcessOptions\relax +\LoadClass[a4paper,12pt,twoside]{article} + +% Page Layout +\setlength{\textwidth}{\paperwidth} +\addtolength{\textwidth}{-3cm} % margins +\setlength{\oddsidemargin}{1.5cm} +\addtolength{\oddsidemargin}{-1in} % remove default 1 inch offset +\setlength{\evensidemargin}{\oddsidemargin} +\setlength{\topmargin}{0.87cm} +\addtolength{\topmargin}{-1in} % remove default 1 inch offset +\setlength{\headheight}{0.4cm} +\setlength{\headsep}{0.925cm} +\setlength{\textheight}{\paperheight} +\addtolength{\textheight}{-\headheight} +\addtolength{\textheight}{-\headsep} +\addtolength{\textheight}{-\footskip} +\addtolength{\textheight}{-2.37cm} % margins + +% Headers +% Definition of standard ipol citation +\newcommand{\ipolCitation}{% + \textsc{\ipolAuthors}, \emph{\ipolTitle}, + Image Processing On Line, \ipolVolume\ (\ipolPublicationYear), + pp.~\pageref*{ipol:class:first:page}--\pageref*{LastPage}. + \ipolLink} +% Command to force citation +\newcommand{\ipolForceCitation}[1]{\renewcommand{\ipolCitation}{#1}} +% Definition of ipol page style +\newcommand{\ps@ipol}{% + \renewcommand{\@evenhead}{\hfil\scriptsize\textsc{\ipolAuthors}\hfil}% + \renewcommand{\@oddhead}{\hfil\scriptsize\textsc{\ipolTitle}\hfil}% + \renewcommand{\@evenfoot}{\hfil\textrm{\thepage}\hfil}% + \renewcommand{\@oddfoot}{\@evenfoot}} +% Definition of ipolFirstPage page style +\newcommand{\ps@ipolFirstPage}{% + \renewcommand{\@oddhead}{}% + \renewcommand{\@evenhead}{}% + \renewcommand{\@oddfoot}{% + \@ifundefined{ipolIsPreprint}{% + \begin{minipage}[t]{\linewidth} + \sf\scriptsize\ipolCitation + \end{minipage}}{}} + \renewcommand{\@evenfoot}{% + \@ifundefined{ipolIsPreprint}{% + \begin{minipage}[t]{\linewidth} + \sf\scriptsize\ipolCitation + \end{minipage}}{}}} +\pagestyle{ipol} + +% Links package and colors definition +\RequirePackage{color} +\definecolor{link}{rgb}{0.240,0.194,0.431} +\RequirePackage[colorlinks, + linkcolor=link, + anchorcolor=link, + citecolor=link, + filecolor=link, + menucolor=link, + urlcolor=link]{hyperref} +% if hyperref version is old, no PDF metadata will be generated: +\@ifpackagelater{hyperref}{2010/01/11}{}{% + \newcommand{\ipolNoPDFMetadata}{}% + \ClassWarningNoLine{ipol}{hyperref version previous to 2010/01/11, + PDF metadata will not be generated}} +% The following definitions modify the "\href" command to +% also include a footnote with the address, so it is also +% accessible in printed form. The command "\basehref" is +% created in cases where the footnote wants to be avoided. +\newcommand*\basehref[2]{} +\let\basehref\href +\renewcommand*\href[2]{\basehref{#1}{#2}\footnote{\url{#1}}} + +% IPOL environments +% Abstract +% if the 'environ' package is available, use it for pdf abstract metadata +\newcommand{\ipolAbstractText}{} +\IfFileExists{environ.sty}{% + \RequirePackage{environ} + \NewEnviron{ipolAbstract}{\small% + \begin{center}% + {\bfseries Abstract\vspace{-.5em}}% + \end{center}% + \begin{quotation}% + \noindent\ignorespaces\BODY% + \end{quotation}% + \@ifundefined{ipolIsPreprint}{ + \@ifundefined{ipolNoPDFMetadata}{ + \ClassWarningNoLine{ipol}{If an error follows, + the abstract may have many paragraphs. To + work correctly, IPOL class requires the + abstract to be only ONE paragraph}% + \hypersetup{pdfinfo={Subject={\BODY}}}% + }{}% + }{}% + }{}% +}{% + \newenvironment{ipolAbstract}{\small% + \begin{center}% + {\bfseries Abstract\vspace{-.5em}}% + \end{center}% + \begin{quotation}% + \noindent\ignorespaces}{\end{quotation}} +} +% Code section +\newenvironment{ipolCode}{\small% + \begin{center}% + {\bfseries Source Code\vspace{-.5em}}% + \end{center}% + \begin{quotation}% + \noindent\ignorespaces}{\end{quotation}} +% Supplementary material section +\newenvironment{ipolSupp}{\small% + \begin{center}% + {\bfseries Supplementary Material\vspace{-.5em}}% + \end{center}% + \begin{quotation}% + \noindent\ignorespaces}{\end{quotation}} + +% IPOL command to set Keywords +\newcommand{\ipolKeywords}[1]{% + \begin{quote}% + \noindent\ignorespaces\small\textbf{Keywords:} #1% + \end{quote}% + \@ifundefined{ipolNoPDFMetadata}{\hypersetup{pdfinfo={Keywords={#1}}}}{} +} + +% command to declare SIIMS companion article +\newenvironment{ipolSIIMS}{% + \begin{center}% + \begin{minipage}{0.67\linewidth}% + \raisebox{-\height}{% + \basehref{http://www.siam.org/journals/siims.php}% + {\includegraphics[width=0.22\linewidth]{siims_logo}}}% + \hspace{0.01\linewidth}% + \begin{minipage}[t]{0.77\linewidth}\vspace{0pt}% + \scriptsize\sf\noindent\ignorespaces}% + {\end{minipage}\end{minipage}\end{center}\bigskip} + +% IPOL data +\newcommand{\ipolTitle}{title} +\newcommand{\ipolAuthors}{authors} +\newcommand{\ipolAffiliations}{} +\newcommand{\ipolSubmissionYear}{YYYY} +\newcommand{\ipolSubmissionMonth}{MM} +\newcommand{\ipolSubmissionDay}{DD} +\newcommand{\ipolAcceptedYear}{YYYY} +\newcommand{\ipolAcceptedMonth}{MM} +\newcommand{\ipolAcceptedDay}{DD} +\newcommand{\ipolPublicationYear}{YYYY} +\newcommand{\ipolPublicationMonth}{MM} +\newcommand{\ipolPublicationDay}{DD} +\newcommand{\ipolID}{XXXXXXXX} +\newcommand{\ipolVolume}{n} +\newcommand{\ipolDOI}{\@ifundefined{ipolIsPreprint}% + {10.5201/ipol.\ipolPublicationYear.\ipolID}% + {10.5201/ipol}} +\newcommand{\ipolLink}{https://doi.org/\ipolDOI} + +% IPOL data set commands +\newcommand{\ipolSetTitle}[1]{\renewcommand{\ipolTitle}{#1}% + \newcommand{\ipolTitleDefined}{}} +\newcommand{\ipolSetAuthors}[1]{\renewcommand{\ipolAuthors}{#1}% + \newcommand{\ipolAuthorsDefined}{}} +\newcommand{\ipolSetAffiliations}[1]{\renewcommand{\ipolAffiliations}{#1}% + \newcommand{\ipolAffiliationsDefined}{}} +\newcommand{\ipolSetID}[1]{\renewcommand{\ipolID}{#1}% + \newcommand{\ipolVolumeDefined}{}} +\newcommand{\ipolSetVolume}[1]{\renewcommand{\ipolVolume}{#1}% + \newcommand{\ipolIDDefined}{}} +\newcommand{\ipolPreprintLink}[1]{\renewcommand{\ipolLink}{#1}% + \newcommand{\ipolPreprint}{}} +\newcommand{\ipolAuthorMark}[1]{} + +% set submission date commands +\newcommand{\ipolSetSubmissionYear}[1]{\renewcommand{\ipolSubmissionYear}{#1}% + \newcommand{\ipolSubmissionYearDefined}{}} +\newcommand{\ipolSetSubmissionMonth}[1]{\renewcommand{\ipolSubmissionMonth}{#1}% + \newcommand{\ipolSubmissionMonthDefined}{}} +\newcommand{\ipolSetSubmissionDay}[1]{\renewcommand{\ipolSubmissionDay}{#1}% + \newcommand{\ipolSubmissionDayDefined}{}} + +% set accepted date commands +\newcommand{\ipolSetAcceptedYear}[1]{\renewcommand{\ipolAcceptedYear}{#1}% + \newcommand{\ipolAcceptedYearDefined}{}} +\newcommand{\ipolSetAcceptedMonth}[1]{\renewcommand{\ipolAcceptedMonth}{#1}% + \newcommand{\ipolAcceptedMonthDefined}{}} +\newcommand{\ipolSetAcceptedDay}[1]{\renewcommand{\ipolAcceptedDay}{#1}% + \newcommand{\ipolAcceptedDayDefined}{}} + +% set publication date commands +\newcommand{\ipolSetPublicationYear}[1]{\renewcommand{\ipolPublicationYear}{#1}% + \newcommand{\ipolPublicationYearDefined}{}} +\newcommand{\ipolSetPublicationMonth}[1]{\renewcommand{\ipolPublicationMonth}% + {#1}\newcommand{\ipolPublicationMonthDefined}{}} +\newcommand{\ipolSetPublicationDay}[1]{\renewcommand{\ipolPublicationDay}{#1}% + \newcommand{\ipolPublicationDayDefined}{}} + +% Print IPOL Header and Title +\RequirePackage{graphicx} +\AtBeginDocument{% +% Decide between Preprint or Publication mode. This must be done at +% the beginning of the document, when all IPOL definitions were already done. +\@ifundefined{ipolTitleDefined}{\newcommand{\ipolIsPreprint}{}}{% +\@ifundefined{ipolAuthorsDefined}{\newcommand{\ipolIsPreprint}{}}{% +\@ifundefined{ipolSubmissionYearDefined}{\newcommand{\ipolIsPreprint}{}}{% +\@ifundefined{ipolSubmissionMonthDefined}{\newcommand{\ipolIsPreprint}{}}{% +\@ifundefined{ipolSubmissionDayDefined}{\newcommand{\ipolIsPreprint}{}}{% +\@ifundefined{ipolAcceptedYearDefined}{\newcommand{\ipolIsPreprint}{}}{% +\@ifundefined{ipolAcceptedMonthDefined}{\newcommand{\ipolIsPreprint}{}}{% +\@ifundefined{ipolAcceptedDayDefined}{\newcommand{\ipolIsPreprint}{}}{% +\@ifundefined{ipolPublicationYearDefined}{\newcommand{\ipolIsPreprint}{}}{% +\@ifundefined{ipolPublicationMonthDefined}{\newcommand{\ipolIsPreprint}{}}{% +\@ifundefined{ipolPublicationDayDefined}{\newcommand{\ipolIsPreprint}{}}{% +\@ifundefined{ipolIDDefined}{\newcommand{\ipolIsPreprint}{}}{% +\@ifundefined{ipolVolumeDefined}{\newcommand{\ipolIsPreprint}{}}{% +\@ifundefined{ipolPreprint}{}{\newcommand{\ipolIsPreprint}{}}}}}}}}}}}}}}} +% +% print IPOL header +\basehref{https://doi.org/10.5201/ipol}% + {\includegraphics[width=.32\linewidth]{ipol_logo}}% +\hspace{1em}% +\parbox[b]{0.6\linewidth}{\scriptsize\sf\noindent% +Published in \basehref{https://doi.org/10.5201/ipol}{Image Processing On Line} +on % +\@ifundefined{ipolIsPreprint}% + {\ipolPublicationYear--% + \two@digits{\ipolPublicationMonth}--% + \two@digits{\ipolPublicationDay}}% + {YYYY--MM--DD}.\\ +Submitted on % +\@ifundefined{ipolIsPreprint}% + {\ipolSubmissionYear--% + \two@digits{\ipolSubmissionMonth}--% + \two@digits{\ipolSubmissionDay}, }% + {YYYY--MM--DD, }% +accepted on +\@ifundefined{ipolIsPreprint}% + {\ipolAcceptedYear--% + \two@digits{\ipolAcceptedMonth}--% + \two@digits{\ipolAcceptedDay}}% + {YYYY--MM--DD}.\\ +ISSN 2105--1232 \copyright\ \ipolPublicationYear\ IPOL \& the authors +\basehref{http://creativecommons.org/licenses/by-nc-sa/3.0/}{CC--BY--NC--SA}\\ +This article is available online with supplementary materials,\\ +software, datasets and online demo at\\ +\url{\ipolLink}} + +% Print IPOL class version +\RequirePackage{color} +\RequirePackage{rotating} +\definecolor{ipolVersion}{gray}{0.8} +\hspace{-16mm} +\begin{rotate}{90} +{\color{ipolVersion}\tiny\ipolClassVersion} +\end{rotate} +\medskip +\bigskip +% print title & authors +\begin{center} +\Large\textbf{\ipolTitle}\\ +\bigskip +\renewcommand{\ipolAuthorMark}[1]{$^{#1}$} +\large\ipolAuthors\\ +\bigskip +\@ifundefined{ipolAffiliationsDefined}{}{% + \footnotesize\ipolAffiliations\\% + \bigskip% +} +\@ifundefined{ipolIsPreprint}{}{% + \bigskip% + {\sf\Large\color{red}PREPRINT \@date}% +} +\bigskip +\end{center} +% set PDF metadata +\@ifundefined{ipolIsPreprint}% + {\newcommand{\ipolMetadataDate}{D:\ipolPublicationYear% + \two@digits{\ipolPublicationMonth}% + \two@digits{\ipolPublicationDay}000000}}% + {\newcommand{\ipolMetadataDate}{}}% +\renewcommand{\ipolAuthorMark}[1]{} +\@ifundefined{ipolNoPDFMetadata}{% + \hypersetup{ + pdfinfo={ + Title={\ipolTitle}, + Author={\ipolAuthors}, + CreationDate={\ipolMetadataDate}, + ModDate={ }, + Creator={\ipolClassVersion}, + IPOL.Volume={\ipolVolume}, + IPOL.DOI={\ipolLink}, + } + } +}{} +\label{ipol:class:first:page} % save first page number +\thispagestyle{ipolFirstPage} % first page style +}% end of \AtBeginDocument + +\RequirePackage{lastpage} % used to save a reference to the last page + % to prevent other packages including commands + % with \AtEndDocument after him and thus + % pertubing the last page reference, this package + % should be loaded last. + +%------------------------------------------------------------------------------- diff --git a/ipol/ipol_style_201905/ipol_class_manual.pdf b/ipol/ipol_style_201905/ipol_class_manual.pdf new file mode 100644 index 0000000000000000000000000000000000000000..2d6e5b7020866b0c8b87a7540555a8471ed4983c Binary files /dev/null and b/ipol/ipol_style_201905/ipol_class_manual.pdf differ diff --git a/ipol/ipol_style_201905/ipol_class_manual.tex b/ipol/ipol_style_201905/ipol_class_manual.tex new file mode 100644 index 0000000000000000000000000000000000000000..538a2d5d14fbdd77cab4db482aaf619b1670818e --- /dev/null +++ b/ipol/ipol_style_201905/ipol_class_manual.tex @@ -0,0 +1,359 @@ +%------------------------------------------------------------------------------- +% IPOL LaTeX class manual +% by rafael grompone von gioi +% ver 0.5 - July 1, 2014 +%------------------------------------------------------------------------------- +\documentclass{ipol} + +\ipolSetTitle{IPOL \LaTeX\ Class Manual, ver.0.5} +\ipolSetAuthors{Rafael Grompone von Gioi\ipolAuthorMark{1}, + Rapha\"el Toucour\ipolAuthorMark{2}} +\ipolSetAffiliations{% +\ipolAuthorMark{1} CMLA, ENS Cachan, France + (\texttt{grompone@cmla.ens-cachan.fr})\\ +\ipolAuthorMark{2} IIE, UdelaR, Uruguay (\texttt{jirafa@fing.edu.uy})} + +%------------------------------------------------------------------------------- +\begin{document} + +%------------------------------------------------------------------------------- +\begin{ipolAbstract} +This document describes and illustrates how to use the IPOL \LaTeX\ class, +created to produce a uniform layout for IPOL articles. The restrictions imposed +on articles to be published in IPOL are briefly discussed. +\end{ipolAbstract} + +%------------------------------------------------------------------------------- +\ipolKeywords{IPOL, LaTeX class, documentation} + +%------------------------------------------------------------------------------- +\section{Getting Started} + +There is no need for installation to use this class, just two files need to be +copied to the same directory were the \LaTeX\ source files are. These files are +the class itself, \verb|ipol.cls|, and the logo file, that can be either +\verb|ipol_logo.eps| if you compile with \verb|latex|, or \verb|ipol_logo.pdf| +if you compile with \verb|pdflatex|. If not sure, just copy the three of these +files. You may also need \verb|siims_logo.eps| or \verb|siims_logo.jpg| when +preparing a SIIMS companion article. + +The minimal example of use of this class is as follows: +\begin{verbatim} +\documentclass{ipol} +\begin{document} +\end{document} +\end{verbatim} +It will only generate the IPOL header, including its logo, the words ``title'' +and ``authors'' where the title and authors should be placed, and a red +``PREPRINT'' label including the compilation date. This example is useless but +can be used to test your system. The \LaTeX\ source file +\verb|ipol_class_manual.tex|, which generates this manual, also uses the IPOL +class and provides an example of how to use it. + +IPOL class is based on the standard ``article'' class of \LaTeX\ and it is used +essentially in the same way. There are two main restrictions: the layout must +not be changed and the title is not generated with the usual \verb|\title|, +\verb|\author|, \verb|\date| and \verb|\maketitle| commands; special IPOL +commands must be used instead. Let us discuss these topics one by one. + +This class was created to provide a uniform layout for IPOL articles, so no +command should be used that would change the page layout: do not change paper +size (it must be A4 paper), do not change the page margins, do not change the +font type, size, or color. + +The commands \verb|\ipolSetTitle|, \verb|\ipolSetAuthors| and +\verb|\ipolSetAffiliations| are provided by the IPOL class to set the +information needed to generate the title of the article. These commands must be +used in the preamble of the \LaTeX\ file, that is between the +\verb|\documentclass{ipol}| and \verb|\begin{document}| commands; this is +important, otherwise the title will not be generated correctly. As the name of +the commands imply, \verb|\ipolSetTitle| sets the title of the article, +\verb|\ipolSetAuthors| sets the authors, and \verb|\ipolSetAffiliations| sets +the authors' affiliations. This last command is optional. The following is an +example of how to use it: +\begin{verbatim} +\documentclass{ipol} +\ipolSetTitle{Ceci n'est pas un article} +\ipolSetAuthors{Rapha\"el Toucour} +\ipolSetAffiliations{CMLA, ENS Cachan, France} +\begin{document} +\end{document} +\end{verbatim} +If there are more than one author, and they have different affiliations, they +may be indicated using the command \verb|\ipolAuthorMark| (authors must be +separated by commas, never by ``and'' or \&): +\begin{verbatim} +\documentclass{ipol} +\ipolSetTitle{Ceci n'est pas un article} +\ipolSetAuthors{Rapha\"el Toucour\ipolAuthorMark{1}, + Rafael Grompone von Gioi\ipolAuthorMark{2}} +\ipolSetAffiliations{\ipolAuthorMark{1} CMLA, ENS Cachan, France\\ + \ipolAuthorMark{2} IIE, UdelaR, Uruguay} +\begin{document} +\end{document} +\end{verbatim} +For the rest, the class is used as the \LaTeX\ standard ``article'' class: +packages or definitions can be added in the preamble, and the main text can +contain sections, subsections, mathematics, figures, tables, etc. + +The rest of this document describes some special command for IPOL and briefly +comments on some conditions that will be imposed for a final article, just +before publishing at IPOL. (These restrictions are not necessary for +submissions but will reduce work later.) + +%------------------------------------------------------------------------------- +\section{IPOL Commands for Authors} + +%------------------------------------------------------------------------------- +\subsection{DOI and Links} + +Once an article is published in IPOL, it will be assigned a DOI number and a +universal DOI web address to refer to it. The IPOL class provides a command +that will later contain the article's DOI number (\verb|\ipolDOI|) and a +command that will contain the article's web address (\verb|\ipolLink|). These +are the only reference that should be used for the IPOL article itself and to +its complementary content on the web. + +These commands will have a default value in a preprint version, but once the +paper is accepted they will be replaced by the correct one. One may want to +have a valid link while the article is being prepared and peer reviewed. For +that purpose, the command \verb|\ipolPreprintLink| is used to set the article +link \verb|\ipolLink| to a temporary value. For example, +\begin{verbatim} +\ipolPreprintLink{https://tools.ipol.im/wiki/ref/manuscript_guidelines/} +\end{verbatim} +This command should be used in the document's preamble (i.e., after +\verb|\documentclass{ipol}| and before \verb|\begin{document}|). + +The command \verb|\ipolLink| provides the address of the corresponding IPOL +article as \emph{text}. To produce a \emph{link} in the PDF with this or other +address, the command \verb|\href{}{}| should be used. The first parameter is +the link address and the second is the text that will be shown in the resulting +document. Also, to be able to read the address in a printed version of the +document, the address will be printed as footnote. For example, the commands +\begin{verbatim} +\href{\ipolLink}{the article page} +\href{https://tools.ipol.im/wiki/ref/manuscript_guidelines/}{guidelines} +\end{verbatim} +produce the following links: +\href{\ipolLink}{the article page} and +\href{https://tools.ipol.im/wiki/ref/manuscript_guidelines/}{guidelines}. + +%------------------------------------------------------------------------------- +\subsection{Abstract, Code, Supplementary Material and Keywords} + +Three environments are defined to generate specific sections of IPOL articles: +the abstract, the Source Code description paragraph, and the Supplementary +Material description paragraph. The corresponding environments are +\verb|ipolAbstract|, \verb|ipolCode| and \verb|ipolSupp|. These environment +work similarly as the \LaTeX\ ``abstract'' and should be used after the +\verb|\begin{document}| and before the main text of the article. It is +important to use the \verb|ipolAbstract| for the abstract and not the +\LaTeX\ ``abstract''. + +There is a particular restriction for the abstract: it must contain only +\emph{one} paragraph. This restriction is necessary to produce the final +article as the abstract is included in the PDF metadata, and this would +generate an error if the abstract contains more than one paragraph. + +The command \verb|\ipolKeywords| is used to set the keywords of the article. +The command is followed by a list of keywords separated by commas, as in +\verb|\ipolKeywords{Earth, Water, Air, Fire}|. This command is to be used after +the abstract, the source code paragraph and the supplementary material, but +before the beginning of the article itself. + +The following example illustrates the use of the four commands: +\begin{verbatim} +\documentclass{ipol} +\ipolSetTitle{Ceci n'est pas un article} +\ipolSetAuthors{Rapha\"el Toucour} +\begin{document} + +\begin{ipolAbstract} +A short description of the article. +\end{ipolAbstract} + +\begin{ipolCode} +Description of the source code to be found \href{\ipolLink}{here}. +\end{ipolCode} + +\begin{ipolSupp} +Some articles could provide additional material, not part of the +peer reviewed article but related and useful. It should be found at +\href{\ipolLink}{the web page}. +\end{ipolSupp} + +\ipolKeywords{IPOL, LaTeX class, documentation} + +\section{Introduction} +The article main text starts here. + +\end{document} +\end{verbatim} + +%------------------------------------------------------------------------------- +\subsection{SIIMS Companion Article} + +IPOL encourages authors to do joint submissions to IPOL and +\href{http://www.siam.org/journals/siims.php}{SIIMS (SIAM Journal of Imaging + Science)}. Upon acceptance, cross links between both electronic articles will +be placed, so readers will be able to automatically navigate between the SIIMS +and IPOL complementary materials. The environment \verb|ipolSIIMS| is used to +set the link. It should be used after the \verb|\begin{document}| but before +the abstract. The following source code provides an example: +\begin{verbatim} +\documentclass{ipol} +\begin{document} + +\begin{ipolSIIMS} +This IPOL article is related to a companion publication in the SIAM +Journal on Imaging Sciences:\\ +R. Toucour, ``Ceci n'est pas un article.'' +\textsl{SIAM Journal on Imaging Sciences}, vol.~X, no.~X, +pp.~N--M, YYYY. \url{http://dx.doi.org/10.1137/nnnnnnnnn} +\end{ipolSIIMS} + +\end{document} +\end{verbatim} + +%------------------------------------------------------------------------------- +\section{Manuscripts for IPOL} + +Authors must check the +\href{https://tools.ipol.im/wiki/ref/manuscript_guidelines/}{IPOL manuscript + guidelines} where the requirements and suggestions about the contents, style +and description detail for IPOL articles are described. + +The PDF files for IPOL submissions are generated by the authors using any +method that produces a readable PDF file. Once an article is accepted, however, +the final version will be generated at IPOL servers in order to provide PDF +files with controlled sizes and resolutions conditions. For that aim, there are +some restrictions that must be imposed to the source files. Please check +\href{https://tools.ipol.im/wiki/ref/manuscript_guidelines/}{here} for a +complete list of restrictions. The main consideration is that the final +documents will be generated using pdf\LaTeX. This forces some restrictions, in +particular the only graphical formats directly accepted are PNG, JPEG and PDF +itself. Images or figures in other kind of formats should be converted to one +of these. The files and directories must follow a strict naming as defined +\href{https://tools.ipol.im/wiki/ref/manuscript_guidelines/}{here}. + +Authors must warrant to be the authors of every part of the final article, or +must include permission of the copyright holder. In particular, if images not +owned by the authors are used, the authors and permissions to be used must be +included in the article. For example, by adding a final section as follows: +\begin{verbatim} +\section*{Image Credits} + +\includegraphics[height=2em]{image1.png} +\href{http://a.link.here}{Courtesy of Name Surname} +\\ +\includegraphics[height=2em]{image2.png} +\copyright\ Pierre Dupont CC-BY +\\ +\includegraphics[height=2em]{image3.png} +the authors +\end{verbatim} + +%------------------------------------------------------------------------------- +\section{IPOL Commands for Final Production} + +This section describes some commands used for final article production. +These commands \textbf{must never be used by authors}. + + +%------------------------------------------------------------------------------- +\subsection{Article Final Data} + +Before an article is ready for publication, some data need to be declared. +These data are used to create the IPOL header, the article's citation on the +footer of the first page, and are included in the PDF metadata. Part of the +data was already added by the authors as the title, authors and +affiliations. What needs to be added in final production is the submission, +acceptance and publication dates, the article ID, and the first page number. + +This is done by including the following commands in the preamble of the +\LaTeX\ file, that is between the \verb|\documentclass{ipol}| and +\verb|\begin{document}| commands. Some random values were including here just +to provide an example: +\begin{verbatim} +\ipolSetSubmissionDay{11} +\ipolSetSubmissionMonth{11} +\ipolSetSubmissionYear{2010} +\ipolSetAcceptedDay{1} +\ipolSetAcceptedMonth{3} +\ipolSetAcceptedYear{2011} +\ipolSetPublicationDay{28} +\ipolSetPublicationMonth{3} +\ipolSetPublicationYear{2014} +\ipolSetID{gjmr-lsd} +\ipolSetVolume{4} +\setcounter{page}{124} +\end{verbatim} +When no data is missing, the ``PREPRINT'' label disappear. If the ``PREPRINT'' +label is still present, some data may be missing or the +\verb|\ipolPreprintLink| command was used to set a temporary link for the +article and needs to be removed. + +When the PDF is generated in the final article mode (that is when the +``PREPRINT'' label disappear) the article's abstract is included in the PDF +metadata. This could generate a \LaTeX\ error if the abstract is composed of +more than one paragraph. The error generated would be as follows: +\begin{verbatim} +Class ipol Warning: If an error follows, the abstract may have many paragraphs. + To work correctly, IPOL class requires the abstract to be only ONE paragraph. + +Runaway argument? +! Paragraph ended before \def was complete. +<to be read again> + \par +l.74 \end{ipolAbstract} + +? +\end{verbatim} +A warning was generated by the IPOL class to help the user to spot the source +of the problem. The solution is to merge the abstract into \emph{one} +paragraph. + +%------------------------------------------------------------------------------- +\subsection{Corrections to Citation} + +With the previous data, the class will generate a citation reference for the +article that is put in the footer of the first page. In some cases, the +automatically generated citation may not be correct or satisfactory. In such +cases, one can force a manual citation using the command +\verb|\ipolForceCitation| as in the following example, to be used in the +preamble of the \LaTeX\ file, that is between the \verb|\documentclass{ipol}| +and \verb|\begin{document}| commands: +\begin{verbatim} +\ipolForceCitation{Rapha\"el Toucour, ``Ceci n'est pas un article,'' +\emph{Image Processing On Line}, vol.~2013, pp.~123--124. +http://dx.doi.org/10.5201/ipol} +\end{verbatim} +The standard citation would be obtained with: +\begin{verbatim} +\ipolForceCitation{\ipolAuthors, ``\ipolTitle,'' +\emph{Image Processing On Line}, vol.~\ipolPublicationYear, +pp.~\pageref*{ipol:class:first:page}--\pageref*{ipol:class:last:page}. +\ipolLink} +\end{verbatim} +The latter may be useful: it is better to modify just what is wrong and leave +the rest unchanged. For example, unless there is problem there, it is better to +keep the \verb|\pageref*| than manually including the page numbers. + +%------------------------------------------------------------------------------- +\subsection{IPOL Class Version} + +From IPOL class version 0.3 on, one can easily verify the version of this class +that generated a given PDF: the version is printed in light gray in the +upper-left side of the first page of the document and also included in the PDF +metadata (the latter only if the system that generated the PDF included an +up-to-date version of the package ``hyperref''). + +%------------------------------------------------------------------------------- +\section*{Image Credits} + +\includegraphics[height=2em]{ipol_logo} \copyright\ IPOL (there's no need to +credit this image, here is used as an example.) + +\end{document} +%------------------------------------------------------------------------------- diff --git a/ipol/ipol_style_201905/ipol_logo.eps b/ipol/ipol_style_201905/ipol_logo.eps new file mode 100644 index 0000000000000000000000000000000000000000..81c9671d3c3db41bb59bd7874752ddc2d64b6406 --- /dev/null +++ b/ipol/ipol_style_201905/ipol_logo.eps @@ -0,0 +1,464 @@ +%!PS-Adobe-3.0 EPSF-3.0 +%%BoundingBox: 0 -1 360 165 +%%Creator: rafael grompone von gioi +%%Title: (IPOL logo) +%%CreationDate: Tue Jun 24 17:00:00 2014 +%%EndComments + +0.831373 0.788235 0.913725 setrgbcolor +58.855 164.379 moveto +58.855 139.734 lineto +112.367 103.75 lineto +114.207 56.973 lineto +128.922 47.047 lineto +128.922 117.109 lineto +closepath +fill + +0.752941 0.694118 0.870588 setrgbcolor +44.145 152.621 moveto +44.145 130.934 lineto +60.938 116.129 lineto +58.859 142.695 lineto +closepath +fill + +98.691 68.981 moveto +99.492 45.215 lineto +114.207 35.289 lineto +114.207 56.973 lineto +closepath +fill + +0.717647 0.654902 0.854902 setrgbcolor +58.855 142.691 moveto +58.855 119.406 lineto +97.172 91.754 lineto +99.492 66.902 lineto +114.207 56.973 lineto +114.207 105.352 lineto +closepath +fill + +0.611765 0.537255 0.792157 setrgbcolor +29.43 140.863 moveto +29.43 119.176 lineto +46.402 104.727 lineto +44.145 130.934 lineto +closepath +fill + +82.328 60.231 moveto +84.777 33.457 lineto +99.492 23.527 lineto +99.492 45.215 lineto +closepath +fill + +0.564706 0.47451 0.764706 setrgbcolor +44.145 130.934 moveto +44.145 109.25 lineto +63.816 91.641 lineto +58.859 121.008 lineto +closepath +fill + +81.258 81.149 moveto +84.777 55.145 lineto +99.492 45.215 lineto +99.492 66.902 lineto +closepath +fill + +0.552941 0.470588 0.760784 setrgbcolor +58.855 121.008 moveto +58.777 97.242 lineto +83.336 81.836 lineto +84.777 76.832 lineto +99.492 66.902 lineto +99.492 93.594 lineto +closepath +fill + +0.454902 0.4 0.701961 setrgbcolor +14.715 129.102 moveto +14.715 59.043 lineto +84.777 11.77 lineto +84.777 33.457 lineto +35.082 69.106 lineto +29.43 119.176 lineto +closepath +fill + +0.368627 0.301961 0.654902 setrgbcolor +29.43 119.176 moveto +29.43 70.801 lineto +84.777 33.457 lineto +84.777 55.145 lineto +47.348 83.879 lineto +44.145 109.25 lineto +closepath +fill + +0.360784 0.290196 0.65098 setrgbcolor +44.145 109.25 moveto +44.145 82.559 lineto +84.777 55.145 lineto +84.777 76.828 lineto +58.855 94.316 lineto +58.859 99.32 lineto +closepath +fill + +0.360784 0.290196 0.647059 setrgbcolor +58.855 99.32 moveto +58.297 88.719 lineto +84.777 76.828 lineto +84.777 81.832 lineto +closepath +fill + +0.137255 0.121569 0.12549 setrgbcolor +0 47.285 moveto +70.062 0.012 lineto +70.062 70.078 lineto +0 117.344 lineto +closepath +fill + +315.402 117.117 moveto +329.746 117.117 lineto +329.746 38.149 lineto +359.941 38.149 lineto +359.941 23.805 lineto +315.402 23.805 lineto +closepath +fill + +284.664 52.492 moveto +284.664 52.492 284.664 38.149 270.32 38.149 curveto +255.973 38.149 255.973 52.492 255.973 52.492 curveto +255.973 88.426 lineto +255.973 88.426 255.973 102.77 270.32 102.77 curveto +284.664 102.77 284.664 88.426 284.664 88.426 curveto +closepath + +270.32 117.117 moveto +241.633 117.117 241.633 88.426 241.633 88.426 curveto +241.633 52.492 lineto +241.633 52.492 241.633 23.805 270.32 23.805 curveto +299.008 23.805 299.008 52.492 299.008 52.492 curveto +299.008 88.426 lineto +299.008 88.426 299.008 117.117 270.32 117.117 curveto + +203.375 73.945 moveto +189.031 73.945 lineto +189.031 102.633 lineto +203.375 102.633 lineto +203.375 102.633 217.723 102.633 217.723 88.289 curveto +217.723 73.945 203.375 73.945 203.375 73.945 curveto + +203.375 116.981 moveto +174.688 116.981 lineto +174.688 23.805 lineto +189.031 23.805 lineto +189.031 59.598 lineto +203.375 59.598 lineto +203.375 59.598 232.066 59.598 232.066 88.289 curveto +232.066 116.981 203.375 116.981 203.375 116.981 curveto + +155.562 23.805 moveto +141.215 23.805 lineto +141.215 117.117 lineto +155.562 117.117 lineto +closepath + +fill + +352.867 13.184 moveto +352.867 0 lineto +359.973 0 lineto +359.973 2.027 lineto +354.895 2.027 lineto +354.895 6.078 lineto +358.949 6.078 lineto +358.949 8.109 lineto +354.895 8.109 lineto +354.895 11.156 lineto +359.973 11.156 lineto +359.973 13.184 lineto +closepath + +347.945 13.184 moveto +347.945 4.613 lineto +343.895 13.184 lineto +341.867 13.184 lineto +341.867 0 lineto +343.895 0 lineto +343.895 8.57 lineto +347.945 0 lineto +349.973 0 lineto +349.973 13.184 lineto +closepath + +338.973 0 moveto +336.949 0 lineto +336.949 13.18 lineto +338.973 13.18 lineto +closepath + +329.301 13.184 moveto +331.328 13.184 lineto +331.328 2.027 lineto +335.594 2.027 lineto +335.594 0 lineto +329.301 0 lineto +closepath + +316.273 13.184 moveto +316.273 4.613 lineto +312.223 13.184 lineto +310.195 13.184 lineto +310.195 0 lineto +312.223 0 lineto +312.223 8.57 lineto +316.273 0 lineto +318.301 0 lineto +318.301 13.184 lineto +closepath + +305.66 4.051 moveto +305.66 4.051 305.66 2.027 303.633 2.027 curveto +301.605 2.027 301.605 4.051 301.605 4.051 curveto +301.605 9.129 lineto +301.605 9.129 301.605 +11.156 303.633 11.156 curveto +305.66 11.156 305.66 9.129 305.66 9.129 curveto +closepath + +303.633 13.184 moveto +299.578 13.184 299.578 9.129 299.578 9.129 curveto +299.578 4.051 lineto +299.578 4.051 299.578 0 303.633 0 curveto +307.684 0 307.684 4.051 307.684 4.051 curveto +307.684 9.129 lineto +307.684 9.129 307.684 13.184 303.633 13.184 curveto + +285.102 0 moveto +281.047 0 281.047 4.051 281.047 4.051 curveto +281.047 9.129 lineto +281.047 9.129 281.047 13.184 285.102 13.184 curveto +289.156 13.184 289.156 9.129 289.156 9.129 curveto +287.129 9.129 lineto +287.129 9.129 287.129 11.156 285.102 11.156 curveto +283.074 11.156 283.074 9.129 283.074 9.129 curveto +283.074 4.051 lineto +283.074 4.051 283.074 2.027 285.102 2.027 curveto +287.129 2.027 287.129 4.051 287.129 4.051 curveto +287.129 5.078 lineto +285.102 5.078 lineto +285.102 7.102 lineto +289.156 7.102 lineto +289.156 0 lineto +288.133 0 lineto +287.129 1.832 lineto +287.129 1.832 286.762 0 285.102 0 curveto + +276.516 13.184 moveto +276.516 4.613 lineto +272.461 13.184 lineto +270.434 13.184 lineto +270.434 0 lineto +272.461 0 lineto +272.461 8.57 lineto +276.516 0 lineto +278.539 0 lineto +278.539 13.184 lineto +closepath + +267.539 0 moveto +265.512 0 lineto +265.512 13.18 lineto +267.539 13.18 lineto +closepath + +257.5 9.727 moveto +257.5 11.156 259.336 11.156 259.336 11.156 curveto +262.367 11.156 lineto +262.367 13.184 lineto +259.336 13.184 lineto +257.098 13.184 255.281 11.965 255.281 9.727 curveto +255.281 6.699 261.148 5.27 261.148 3.453 curveto +261.148 2.027 259.336 2.008 259.336 2.008 curveto +256.285 2.008 lineto +256.285 0 lineto +259.336 0 lineto +261.574 0 263.391 1.215 263.391 3.453 curveto +263.391 6.484 257.5 7.914 257.5 9.727 curveto + +248.043 9.727 moveto +248.043 11.156 249.879 11.156 249.879 11.156 curveto +252.906 11.156 lineto +252.906 13.184 lineto +249.879 13.184 lineto +247.641 13.184 245.824 11.965 245.824 9.727 curveto +245.824 6.699 251.691 5.27 251.691 3.453 curveto +251.691 2.027 249.879 2.008 249.879 2.008 curveto +246.828 2.008 lineto +246.828 0 lineto +249.879 0 lineto +252.117 0 253.93 1.215 253.93 3.453 curveto +253.93 6.484 248.043 7.914 248.043 9.727 curveto + +237.273 13.184 moveto +237.273 0 lineto +244.379 0 lineto +244.379 2.027 lineto +239.301 2.027 lineto +239.301 6.078 lineto +243.352 6.078 lineto +243.352 8.109 lineto +239.301 8.109 lineto +239.301 11.156 lineto +244.379 11.156 lineto +244.379 13.184 lineto +closepath + +235.055 9.129 moveto +233.027 9.129 lineto +233.027 9.129 233.027 11.156 231 11.156 curveto +228.973 11.156 228.973 9.129 228.973 9.129 curveto +228.973 4.051 lineto +228.973 4.051 228.973 2.027 231 2.027 curveto +233.027 2.027 233.027 4.051 233.027 4.051 curveto +235.055 4.051 lineto +235.055 4.051 235.055 0 231 0 curveto +226.945 0 226.945 4.051 226.945 4.051 curveto +226.945 9.129 lineto +226.945 9.129 226.945 13.184 231 13.184 curveto +235.055 13.184 235.055 9.129 235.055 9.129 curveto + +222.797 4.051 moveto +222.797 4.051 222.797 2.027 220.77 2.027 curveto +218.746 2.027 218.746 4.051 218.746 4.051 curveto +218.746 9.129 lineto +218.746 9.129 218.746 11.156 220.77 11.156 curveto +222.797 11.156 222.797 9.129 222.797 9.129 curveto +closepath + +220.77 13.184 moveto +216.719 13.184 216.719 9.129 216.719 9.129 curveto +216.719 4.051 lineto +216.719 4.051 216.719 0 220.77 0 curveto +224.824 0 224.824 4.051 224.824 4.051 curveto +224.824 9.129 lineto +224.824 9.129 224.824 13.184 220.77 13.184 curveto + +208.516 11.137 moveto +210.543 11.137 lineto +210.543 11.137 212.566 11.137 212.566 9.109 curveto +212.566 7.371 211.062 7.141 210.656 7.102 curveto +208.516 7.082 lineto +closepath + +214.594 9.109 moveto +214.594 13.164 210.543 13.164 210.543 13.164 curveto +206.488 13.164 lineto +206.488 0 lineto +208.516 0 lineto +208.516 5.055 lineto +209.461 5.055 lineto +212.277 0 lineto +214.594 0 lineto +211.68 5.25 lineto +212.879 5.559 214.594 6.484 214.594 9.109 curveto + +200.504 7.082 moveto +198.477 7.082 lineto +198.477 11.137 lineto +200.504 11.137 lineto +200.504 11.137 202.531 11.137 202.531 9.109 curveto +202.531 7.082 200.504 7.082 200.504 7.082 curveto + +200.504 13.164 moveto +196.453 13.164 lineto +196.453 0 lineto +198.477 0 lineto +198.477 5.055 lineto +200.504 5.055 lineto +200.504 5.055 204.559 5.055 204.559 9.109 curveto +204.559 13.164 200.504 13.164 200.504 13.164 curveto + +179.023 13.184 moveto +179.023 0 lineto +186.125 0 lineto +186.125 2.027 lineto +181.051 2.027 lineto +181.051 6.078 lineto +185.102 6.078 lineto +185.102 8.109 lineto +181.051 8.109 lineto +181.051 11.156 lineto +186.125 11.156 lineto +186.125 13.184 lineto +closepath + +172.27 0 moveto +168.215 0 168.215 4.051 168.215 4.051 curveto +168.215 9.129 lineto +168.215 9.129 168.215 13.184 172.27 13.184 curveto +176.32 13.184 176.32 9.129 176.32 9.129 curveto +174.293 9.129 lineto +174.293 9.129 174.293 11.156 172.27 11.156 curveto +170.242 11.156 170.242 9.129 170.242 9.129 curveto +170.242 4.051 lineto +170.242 4.051 170.242 2.027 172.27 2.027 curveto +174.293 2.027 174.293 4.051 174.293 4.051 curveto +174.293 5.078 lineto +172.27 5.078 lineto +172.27 7.102 lineto +176.32 7.102 lineto +176.32 0 lineto +175.297 0 lineto +174.293 1.832 lineto +174.293 1.832 173.926 0 172.27 0 curveto + +160.766 4.051 moveto +162.422 11.156 lineto +164.082 4.051 lineto +closepath + +163.738 13.184 moveto +161.113 13.184 lineto +157.598 0 lineto +159.684 0 lineto +160.223 2.027 lineto +164.625 2.027 lineto +165.164 0 lineto +167.25 0 lineto +closepath + +154.223 13.184 moveto +151.191 8.125 lineto +148.141 13.184 lineto +146.113 13.184 lineto +146.113 0 lineto +148.141 0 lineto +148.141 9.363 lineto +151.191 4.035 lineto +154.223 9.363 lineto +154.223 0 lineto +156.246 0 lineto +156.246 13.184 lineto +closepath + +143.219 0 moveto +141.191 0 lineto +141.191 13.18 lineto +143.219 13.18 lineto +closepath + +fill + +showpage +%%EOF diff --git a/ipol/ipol_style_201905/ipol_logo.pdf b/ipol/ipol_style_201905/ipol_logo.pdf new file mode 100644 index 0000000000000000000000000000000000000000..9894f0a705769b2624480c9dc2b3d832b46fb0b8 --- /dev/null +++ b/ipol/ipol_style_201905/ipol_logo.pdf @@ -0,0 +1,470 @@ +%PDF-1.3 +%âãÏÓ +2 0 obj +<< +/Length 6730 +>> +stream +0.831 0.788 0.914 rg +/GS1 gs +1 i +58.855 165.379 m +58.855 140.734 l +112.367 104.75 l +114.207 57.973 l +128.922 48.047 l +128.922 118.109 l +f +0.753 0.694 0.871 rg +44.145 153.621 m +44.145 131.934 l +60.938 117.129 l +58.859 143.695 l +f +98.691 69.981 m +99.492 46.215 l +114.207 36.289 l +114.207 57.973 l +f +0.718 0.655 0.855 rg +58.855 143.691 m +58.855 120.406 l +97.172 92.754 l +99.492 67.902 l +114.207 57.973 l +114.207 106.352 l +f +0.612 0.537 0.792 rg +29.43 141.863 m +29.43 120.176 l +46.402 105.727 l +44.145 131.934 l +f +82.328 61.231 m +84.777 34.457 l +99.492 24.527 l +99.492 46.215 l +f +0.565 0.475 0.765 rg +44.145 131.934 m +44.145 110.25 l +63.816 92.641 l +58.859 122.008 l +f +81.258 82.149 m +84.777 56.145 l +99.492 46.215 l +99.492 67.902 l +f +0.553 0.471 0.761 rg +58.855 122.008 m +58.777 98.242 l +83.336 82.836 l +84.777 77.832 l +99.492 67.902 l +99.492 94.594 l +f +0.455 0.4 0.702 rg +14.715 130.102 m +14.715 60.043 l +84.777 12.77 l +84.777 34.457 l +35.082 70.106 l +29.43 120.176 l +f +0.369 0.302 0.655 rg +29.43 120.176 m +29.43 71.801 l +84.777 34.457 l +84.777 56.145 l +47.348 84.879 l +44.145 110.25 l +f +0.361 0.29 0.651 rg +44.145 110.25 m +44.145 83.559 l +84.777 56.145 l +84.777 77.828 l +58.855 95.316 l +58.859 100.32 l +f +0.361 0.29 0.647 rg +58.855 100.32 m +58.297 89.719 l +84.777 77.828 l +84.777 82.832 l +f +0.137 0.122 0.125 rg +0 48.285 m +70.062 1.012 l +70.062 71.078 l +0 118.344 l +f +315.402 118.117 m +329.746 118.117 l +329.746 39.149 l +359.941 39.149 l +359.941 24.805 l +315.402 24.805 l +f +284.664 53.492 m +284.664 39.149 270.32 39.149 v +255.973 39.149 255.973 53.492 y +255.973 89.426 l +255.973 103.77 270.32 103.77 v +284.664 103.77 284.664 89.426 y +h +270.32 118.117 m +241.633 118.117 241.633 89.426 y +241.633 53.492 l +241.633 24.805 270.32 24.805 v +299.008 24.805 299.008 53.492 y +299.008 89.426 l +299.008 118.117 270.32 118.117 v +203.375 74.945 m +189.031 74.945 l +189.031 103.633 l +203.375 103.633 l +217.723 103.633 217.723 89.289 v +217.723 74.945 203.375 74.945 y +203.375 117.981 m +174.688 117.981 l +174.688 24.805 l +189.031 24.805 l +189.031 60.598 l +203.375 60.598 l +232.066 60.598 232.066 89.289 v +232.066 117.981 203.375 117.981 y +141.215 118.117 14.347 -93.312 re +f +352.867 14.184 m +352.867 1 l +359.973 1 l +359.973 3.027 l +354.895 3.027 l +354.895 7.078 l +358.949 7.078 l +358.949 9.109 l +354.895 9.109 l +354.895 12.156 l +359.973 12.156 l +359.973 14.184 l +h +347.945 14.184 m +347.945 5.613 l +343.895 14.184 l +341.867 14.184 l +341.867 1 l +343.895 1 l +343.895 9.57 l +347.945 1 l +349.973 1 l +349.973 14.184 l +h +336.949 14.18 2.024 -13.18 re +329.301 14.184 m +331.328 14.184 l +331.328 3.027 l +335.594 3.027 l +335.594 1 l +329.301 1 l +h +316.273 14.184 m +316.273 5.613 l +312.223 14.184 l +310.195 14.184 l +310.195 1 l +312.223 1 l +312.223 9.57 l +316.273 1 l +318.301 1 l +318.301 14.184 l +h +305.66 5.051 m +305.66 3.027 303.633 3.027 v +301.605 3.027 301.605 5.051 y +301.605 10.129 l +301.605 12.156 303.633 12.156 v +305.66 12.156 305.66 10.129 y +h +303.633 14.184 m +299.578 14.184 299.578 10.129 y +299.578 5.051 l +299.578 1 303.633 1 v +307.684 1 307.684 5.051 y +307.684 10.129 l +307.684 14.184 303.633 14.184 v +285.102 1 m +281.047 1 281.047 5.051 y +281.047 10.129 l +281.047 14.184 285.102 14.184 v +289.156 14.184 289.156 10.129 y +287.129 10.129 l +287.129 12.156 285.102 12.156 v +283.074 12.156 283.074 10.129 y +283.074 5.051 l +283.074 3.027 285.102 3.027 v +287.129 3.027 287.129 5.051 y +287.129 6.078 l +285.102 6.078 l +285.102 8.102 l +289.156 8.102 l +289.156 1 l +288.133 1 l +287.129 2.832 l +286.762 1 285.102 1 v +276.516 14.184 m +276.516 5.613 l +272.461 14.184 l +270.434 14.184 l +270.434 1 l +272.461 1 l +272.461 9.57 l +276.516 1 l +278.539 1 l +278.539 14.184 l +h +265.512 14.18 2.027 -13.18 re +257.5 10.727 m +257.5 12.156 259.336 12.156 y +262.367 12.156 l +262.367 14.184 l +259.336 14.184 l +257.098 14.184 255.281 12.965 255.281 10.727 c +255.281 7.699 261.148 6.27 261.148 4.453 c +261.148 3.027 259.336 3.008 y +256.285 3.008 l +256.285 1 l +259.336 1 l +261.574 1 263.391 2.215 263.391 4.453 c +263.391 7.484 257.5 8.914 257.5 10.727 c +248.043 10.727 m +248.043 12.156 249.879 12.156 y +252.906 12.156 l +252.906 14.184 l +249.879 14.184 l +247.641 14.184 245.824 12.965 245.824 10.727 c +245.824 7.699 251.691 6.27 251.691 4.453 c +251.691 3.027 249.879 3.008 y +246.828 3.008 l +246.828 1 l +249.879 1 l +252.117 1 253.93 2.215 253.93 4.453 c +253.93 7.484 248.043 8.914 248.043 10.727 c +237.273 14.184 m +237.273 1 l +244.379 1 l +244.379 3.027 l +239.301 3.027 l +239.301 7.078 l +243.352 7.078 l +243.352 9.109 l +239.301 9.109 l +239.301 12.156 l +244.379 12.156 l +244.379 14.184 l +h +235.055 10.129 m +233.027 10.129 l +233.027 12.156 231 12.156 v +228.973 12.156 228.973 10.129 y +228.973 5.051 l +228.973 3.027 231 3.027 v +233.027 3.027 233.027 5.051 y +235.055 5.051 l +235.055 1 231 1 v +226.945 1 226.945 5.051 y +226.945 10.129 l +226.945 14.184 231 14.184 v +235.055 14.184 235.055 10.129 y +222.797 5.051 m +222.797 3.027 220.77 3.027 v +218.746 3.027 218.746 5.051 y +218.746 10.129 l +218.746 12.156 220.77 12.156 v +222.797 12.156 222.797 10.129 y +h +220.77 14.184 m +216.719 14.184 216.719 10.129 y +216.719 5.051 l +216.719 1 220.77 1 v +224.824 1 224.824 5.051 y +224.824 10.129 l +224.824 14.184 220.77 14.184 v +208.516 12.137 m +210.543 12.137 l +212.566 12.137 212.566 10.109 v +212.566 8.371 211.062 8.141 210.656 8.102 c +208.516 8.082 l +h +214.594 10.109 m +214.594 14.164 210.543 14.164 y +206.488 14.164 l +206.488 1 l +208.516 1 l +208.516 6.055 l +209.461 6.055 l +212.277 1 l +214.594 1 l +211.68 6.25 l +212.879 6.559 214.594 7.484 214.594 10.109 c +200.504 8.082 m +198.477 8.082 l +198.477 12.137 l +200.504 12.137 l +202.531 12.137 202.531 10.109 v +202.531 8.082 200.504 8.082 y +200.504 14.164 m +196.453 14.164 l +196.453 1 l +198.477 1 l +198.477 6.055 l +200.504 6.055 l +204.559 6.055 204.559 10.109 v +204.559 14.164 200.504 14.164 y +179.023 14.184 m +179.023 1 l +186.125 1 l +186.125 3.027 l +181.051 3.027 l +181.051 7.078 l +185.102 7.078 l +185.102 9.109 l +181.051 9.109 l +181.051 12.156 l +186.125 12.156 l +186.125 14.184 l +h +172.27 1 m +168.215 1 168.215 5.051 y +168.215 10.129 l +168.215 14.184 172.27 14.184 v +176.32 14.184 176.32 10.129 y +174.293 10.129 l +174.293 12.156 172.27 12.156 v +170.242 12.156 170.242 10.129 y +170.242 5.051 l +170.242 3.027 172.27 3.027 v +174.293 3.027 174.293 5.051 y +174.293 6.078 l +172.27 6.078 l +172.27 8.102 l +176.32 8.102 l +176.32 1 l +175.297 1 l +174.293 2.832 l +173.926 1 172.27 1 v +160.766 5.051 m +162.422 12.156 l +164.082 5.051 l +h +163.738 14.184 m +161.113 14.184 l +157.598 1 l +159.684 1 l +160.223 3.027 l +164.625 3.027 l +165.164 1 l +167.25 1 l +h +154.223 14.184 m +151.191 9.125 l +148.141 14.184 l +146.113 14.184 l +146.113 1 l +148.141 1 l +148.141 10.363 l +151.191 5.035 l +154.223 10.363 l +154.223 1 l +156.246 1 l +156.246 14.184 l +h +141.191 14.18 2.028 -13.18 re +f +endstream +endobj +3 0 obj +<< +/ProcSet [/PDF ] +/ExtGState << +/GS1 4 0 R +>> +>> +endobj +4 0 obj +<< +/Type /ExtGState +/SA false +/SM 0.02 +/OP false +/op false +/OPM 1 +/BG2 /Default +/UCR2 /Default +/HT /Default +/TR2 /Default +>> +endobj +1 0 obj +<< +/Type /Page +/Parent 5 0 R +/Resources 3 0 R +/Contents 2 0 R +>> +endobj +6 0 obj +<< +/S /D +>> +endobj +7 0 obj +<< +/Nums [0 6 0 R ] +>> +endobj +5 0 obj +<< +/Type /Pages +/Kids [1 0 R] +/Count 1 +/MediaBox [0 0 360 166] +>> +endobj +8 0 obj +<< +/CreationDate (D:20140624163002+02'00') +/ModDate (D:20140624163002+02'00') +/Producer (Apple pstopdf) +>> +endobj +9 0 obj +<< +/Type /Catalog +/Pages 5 0 R +/PageLabels 7 0 R +>> +endobj +xref +0 10 +0000000000 65535 f +0000007004 00000 n +0000000016 00000 n +0000006798 00000 n +0000006864 00000 n +0000007149 00000 n +0000007084 00000 n +0000007111 00000 n +0000007230 00000 n +0000007352 00000 n +trailer +<< +/Size 10 +/Root 9 0 R +/Info 8 0 R +/ID [<0a51bade63fdcf3789f544d5d9ac4464><0a51bade63fdcf3789f544d5d9ac4464>] +>> +startxref +7419 +%%EOF diff --git a/ipol/ipol_style_201905/ipol_style_guide.pdf b/ipol/ipol_style_201905/ipol_style_guide.pdf new file mode 100644 index 0000000000000000000000000000000000000000..17cfe71bc21c213436ce29e2cc5ac269c5ce0e21 Binary files /dev/null and b/ipol/ipol_style_201905/ipol_style_guide.pdf differ diff --git a/ipol/ipol_style_201905/ipol_style_guide.tex b/ipol/ipol_style_201905/ipol_style_guide.tex new file mode 100644 index 0000000000000000000000000000000000000000..963242e2bf1e840c838382f1a8f69532fd6e9c3a --- /dev/null +++ b/ipol/ipol_style_201905/ipol_style_guide.tex @@ -0,0 +1,606 @@ +%------------------------------------------------------------------------------ +% IPOL LaTeX style guide and Example +% by rafael grompone von gioi, nicolas limare, jose-luis lisani and others +%------------------------------------------------------------------------------ + +% IPOL class is based on the standard LaTeX article class is used +% essentially in the same way. The layout must not be changed. Special +% IPOL commands are used to set the title, authors and abstract. + +\documentclass{ipol} + +% Do not use math notations and greek letters in the title. +\ipolSetTitle{IPOL Style Guide and Example} + +% Author names must be separated with commas (,), not "and" or "&". +\ipolSetAuthors{First Author \ipolAuthorMark{1}, + Second Author\ipolAuthorMark{2}} + +% Affiliations must contain the department, institution and country. +% Use a professional email address (no gmail, yahoo, etc). +% Do not add postal address. +\ipolSetAffiliations{% +\ipolAuthorMark{1} Department, Institution, Country + (\texttt{user@server.net})\\ +\ipolAuthorMark{2} Department, Institution, Country + (\texttt{username@mailserver.edu})} + +%------------------------------------------------------------------------------ + +% The link hereafter points to IPOL documentation for convenience +% in this document but must be replaced in your manuscript. +% The preprint link will not be known before the first preprint page +% is created. For early preprint versions, just don't use this command +% and the link will be set to the IPOL journal DOI address. +\ipolPreprintLink{http://www.ipol.im/} + +%------------------------------------------------------------------------------ + +% Add packages and definitions here. +% Keep the package list as small as possible and include the package +% sources (packagename.sty) with your article source. +% These packages are loaded by the IPOL class or considered standard, +% and need not be provided with their source if they are used: +% color, hyperref, graphicx, rotating +% amsmath, amssymb, amsthm +% For algorithms, please use the algorithm2e package instead of +% algorithmx for simplicity and a uniform style. + +\usepackage[vlined,ruled]{algorithm2e} +% define input and output keywords +\SetKwInOut{Input}{input} +\SetKwInOut{Output}{output} +% define comment style +\SetKwComment{Comment}{}{} +\newcommand{\mycmtsty}[1]{\em \small #1} +\SetCommentSty{mycmtsty} + +% Use \newtheorem{} for remarks and definitions. +\usepackage{amsthm} +\newtheorem{definition}{Definition} +\newtheorem*{remark}{Remark} + +%------------------------------------------------------------------------------ + +\usepackage{fancyvrb} +\VerbatimFootnotes % allows verbatim text in footnotes + +\begin{document} + +% IPOL encourages authors to do joint submissions to IPOL and +% SIIMS (SIAM Journal of Imaging Science). Upon acceptance, cross +% references are placed between both articles. The environment +% ipolSIIMS is used to set the standard header, before the +% abstract. Uncoment these lines if you prepare an IPOL+SIIMS article: + +%\begin{ipolSIIMS} +%This IPOL article is related to a companion publication in the SIAM +%Journal on Imaging Sciences:\\ +%Author Names, ``Article Title.'' +%\textsl{SIAM Journal on Imaging Sciences}, vol.~X, no.~X, +%pp.~N--M, YYYY. \url{https://doi.org//10.1137/XXXXXXXXX} +%\end{ipolSIIMS} + +%------------------------------------------------------------------------------ +% The abstract of an IPOL article must be informative and summarize all +% important parts of the article. + +\begin{ipolAbstract} +The abstract should contain about 100 to 150 words, and should be +identical to the abstract text submitted electronically. An abstract +must be able to stand alone, independent of the paper. Written in +plain text, it cannot contain citations to the paper’s references or +equations or footnotes and should not, if possible, include special +characters like math notations or greek letters, or hyperlinks. The +abstract must be a single paragraph; multiple parts can be split with +a single line break. +\end{ipolAbstract} + +%------------------------------------------------------------------------------ +% Use the source code info to briefly explain what can be found as +% software code in the IPOL article. +% Do not use the phrasing "...the IPOL web part of this article." + +\begin{ipolCode} +The source code section briefly explains what the source code +published with the article contains, all in a single paragraph. For +example: The reviewed source code and documentation for this algorithm +are available from \href{\ipolLink}{the web page of this + article}. Compilation and usage instruction are included in the +\verb|README.txt| file of the archive. +\end{ipolCode} + + +%------------------------------------------------------------------------------ +% Use the supplementary files info to add explanations about other +% files published with the article. + +\begin{ipolSupp} +The supplementary files section provides explanations about other +files published with the article, all in a single paragraph. Mention +clearly if they are reviewed or not. For example: A reference dataset, +to be used for further comparisons, is provided with the article and +peer-reviewed. A Matlab interface (not reviewed) is also available for +convenience. +\end{ipolSupp} + +%------------------------------------------------------------------------------ +% All papers need key words. Key words are lowercase except for proper +% names and acronyms, and separated with commas. Only use plain text. + +\ipolKeywords{first, second, third, fourth} + +%------------------------------------------------------------------------------ +% Article content starts here. + +\section{Introduction} + +The submission process is detailed in the IPOL +\href{https://tools.ipol.im/wiki/ref/author\_manual/}{Author Manual}. +Prepare IPOL articles with the \LaTeX\ class available from +\url{\ipolLink}. Just copy \verb|ipol.cls| and the logo +files (\verb|ipol_logo.pdf| and \verb|ipol_logo.eps|, plus +\verb|siims_logo.eps| or \verb|siims_logo.jpg| for IPOL+SIIMS +articles) in the directory containing your manuscript source. Then use +this class like the standard ``article'' class of \LaTeX, with special +commands explained hereafter. You can start by editing the source of +this style guide. Submit your manuscript for review as a PDF file +following this style guide. For review, only the PDF file is needed. + +After review and during the editing process, you must provide the +complete source as a single archive file (\verb|zip| or +\verb|tar/gzip|), including the \LaTeX\ source (\verb|.tex|), BibTeX +references (\verb|.bib|), \LaTeX\ class (\verb|.cls|) and style +(\verb|.sty|) and all the graphics files (\verb|.png|, \verb|.jpg|, +and \verb|.pdf|). Remove unused files (including backup and temporary +versions and dotfiles). Please rename your \LaTeX\ source to +\verb|article.tex|. Use plain ASCII text, and \TeX\ commands for +accents (\verb|J\'er\^ome|). This source will be used to produce the +final published PDF version, and must compile with pdf\LaTeX. + +\subsection{Title and Authors} + +Commands \verb|\ipolSetTitle|, \verb|\ipolSetAuthors| and +\verb|\ipolSetAffiliations|, from the IPOL class, set information +needed to generate the article header and metadata. Use these commands +in the preamble of the \LaTeX\ file, between +\verb|\documentclass{ipol}| and \verb|\begin{document}|. + +Do not use special characters (math symbols, superscripts, greek +letters \ldots) in the title if possible. Use headline-style +capitalization for the article title: capitalize the first letter of +the first and last words of the title and subtitle and all other +words, except for articles, coordinating, the words ``to'' and ``as'', +prepositions (unless they are emphasized or used as adverbs, +adjectives, or conjunctions). + +Multiple authors and affiliations are indicated using the command +\verb|\ipolAuthorMark|. Separate authors by commas, never by ``and'' +or ``\&''. Use institutional email addresses with the +affiliations. Postal addresses are not necessary. + +\subsection{Abstract, Code, Supplementary Material and Keywords} + +Three environments generate specific sections at the beginning of IPOL +articles: abstract (\verb|ipolAbstract|), Source Code info +(\verb|ipolCode|), and Supplementary Material info +(\verb|ipolSupp|). These environment work like the classic +\LaTeX\ \verb|abstract| environment and should be used after the +\verb|\begin{document}| and before the main text of the article. +It is important to use \verb|ipolAbstract| for the abstract and +not the \LaTeX\ ``abstract''. The abstract must be a single paragraph. + +The command \verb|\ipolKeywords| sets the keywords of the article. +This command is to be used after the abstract, source code and +supplementary material sections but before the beginning of the +article itself. + +\subsection{Links and DOI} + +To produce a \emph{link} in the PDF to the article web page, use the +\LaTeX\ variable \verb|\ipolLink|, with the commands \verb|\url{}| or +\verb|\href{}{}|. During the submission and review, you can configure +the link with \verb|\ipolPreprintLink|. If you do not set the preprint +link, the IPOL journal address will be used instead. After publication, +\verb|\ipolLink| will be set to the permanent DOI address attributed +to the article. + +Always use \verb|\ipolLink| for any online reference to the preprint +or article, including references to the source code, supplementary +materials and demo. Do not append a filename to this link address. + +\subsection{Paper content} + +Typically, The manuscript of an IPOL article submitted for peer-review should +include an introduction, a detailed explanation of the algorithm (it could +include some theoretical background, pseudo-code and/or block diagram, a +complexity analysis, and an explanation of the parameter values), commented +examples of the results and references to related publications. This content +can be adapted when the article is not about an algorithm (like dataset +articles). + + +%------------------------------------------------------------------------------ +\section{Writing Style} + +The Turabian manual~\cite{turabian} is the recommended reference for +IPOL writing style. + +\subsection{Language} + +Use correct American English for your articles (color, neighbor, +\ldots{}). When in doubt, refer to the dictionaries and spell-checkers +(but they won't include technical terms like ``denoising''). + +Do not use sentences like ``Try the demo! Try the code!''; this +is an academic article, not a commercial. + +You can use Merriam-Webster Collegiate +Dictionary~\cite{merriam-webster} for spelling and general writing +guidelines from Strunk and White~\cite{strunk-white} and +Williams~\cite{williams}. + +\subsection{Typography} + +Be careful with the subtle details of \TeX\ spacing and +punctuation. For correct spacing and line breaking, do not insert +spaces before typographic signs (\verb|:;,.|). \emph{Do} insert +non-breaking spaces (\verb|~|) before references and citations +(\verb|\ref{}|, \verb|\eqref{}|, and \verb|\cite{}|). Add \verb|\ | +after dots not ending a sentence and \verb|\@| before dots ending a +sentence after a capital letter (\verb|the PSNR\@.|). Add spaces +outside of a parenthesis but not inside. + +Sentences start with a capital letter and end with a dot, even in a +footnote. Use long dashes (\verb|--|) between names +(\verb|Chan--Vese|), use \verb|\ldots{}| (instead of \verb|...|). +You can check some (but not all) of these typography rules with the +program \texttt{lacheck}. + +Capitalize brand names (``Intel Xeon'') but do not insert the +(R) or TM symbols. Write file names in monospace font +(\verb:\verb|program.c|:). Write foreign words in italic, but not +common terms found in a dictionary (like ``de facto'' or +``vis-\`a-vis''). Do not italicize latin abbreviations (``i.e.'', ``et +al.'', \ldots{}). Avoid unnecessary abbreviations (``Fig.'', +``Eqn.'')~\cite[sec.~26.3.2]{turabian}. + +Use headline-style capitalization for the article title and +(sub)section titles, to distinguish them clearly from surrounding +text~\cite[p.~314]{turabian}. Capitalize the first letter of the first +and last words of the title and subtitle and all other words, except +as follows: +\begin{itemize} +\item + Do not capitalize articles (``a'', ``an'', ``the''), coordinating + conjunctions (``and'', ``but'', ``or'', ``nor'', ``for'', ``so'', + ``yet''), or the words ``to'' and ``as'' unless such a word is the + first or last word in the title or subtitle. +\item + Do not capitalize prepositions (``of'', ``in'', ``at'', ``above'', + ``under'', and so forth) unless they are emphasized (``through'' in + ``A River Runs Through It'') or used as adverbs (``up'' in ``Look + Up''), adjectives (``on'' in ``The On Button''), or conjunctions + (``before'' in ``Look Before You Leap''). +\item + Do not capitalize the second part (or subsequent parts) of an + hyphenated compound unless it is a proper noun or adjective. +\item + Do not capitalize parts of proper nouns that are normally in lowercase + (``van'' in ``Ludwig van Beethoven''). +\end{itemize} + +When math or greek symbols are used in (sub)section titles or in the +article title (avoid if possible), provide a full-text alternative +with the \verb|\texorpdftext{}{}| command. For example, +\verb|\texorpdftext{$\alpha$}{alpha}| or +\verb|\texorpdftext{$TV-L^1$}{TV-L1}|. + +%------------------------------------------------------------------------------ +\section{Layout} + +Do not modify the layout set by the \LaTeX class: paper size (A4 +paper), margins, font type, size, or color. + +Do not insert manual page breaks (\verb|\\|, \verb|\newline|) or +vertical space (\verb|\vspace{1cm}|). The document layout should still +be correct with a different page size or font size. Do not use +\verb|\include{}| commands to split your article into different files, +because they insert a page break; use \verb|\input{}| instead. +Do no add newlines at the end of paragraphs. + +Do not use absolute dimensions (\verb|cm|, \verb|mm|) to resize an +image. Instead, express their width and height relatively to the +dimensions of a text line: \verb|width=0.45\linewidth|\footnote{The + \verb|linewidth| variable is more robust than \verb|textwidth| or + \verb|columnwidth|.}, \verb|height=5em|. Try to use same sizes in +the whole article, for example \verb|0.45\linewidth| for images by +pairs and \verb|0.3\linewidth| for groups of three. + +Do not embed rich media such as video, 3D, or animated images, into +the article. These files can be published as reviewed supplementary +materials. + +Use \verb|\appendix| before a \verb|\section{}| for appendices. + +Avoid inline tables and images when they are large, use floating +environments, with \verb|!htbp| positioning options +(\verb|\begin{table}[!htbp]|, \verb|\begin{figure}[!htbp]|). Every +floating figure and table must have a caption and must also be +referenced in the text, independently of their legend, and redundancy +of both texts is allowed. + +Tables and figures must always fit inside the document margins. Very +large tables can be reduced using a \verb|\small| font size, or +displayed vertically using the \texttt{rotate} \LaTeX\ package. + +Figures, tables, algorithms, sections, etc.\ are cited without +abbreviations and capitalized: "results are displayed in Figure +3(a)", "as discussed in Section 1 \ldots", "the method is described in +Algorithm 2", "RMSE values are shown in Table 4". + +\subsection{Tables} + +Avoid internal grids (horizontal and vertical lines) in +tables, as seen on Table~\ref{tbl:example}. Generally lines should be +only used to separate different parts of a table, to direct the +reader's eye in one direction, or to organize an unusually complex +table\footnote{See the + \href{http://mirrors.ctan.org/macros/latex/contrib/booktabs/booktabs.pdf}{\LaTeX\ booktabs + documentation} for guidelines on what constitutes a ``good'' + table.}. + +\begin{table}[!htbp] +\begin{center} +\begin{tabular}{l r r r} +\hline +image & $\sigma=1$ & $\sigma=2$ & $\sigma=5$ \\ +\hline +bag & 0.74 & 0.62 & 0.47 \\ +building1 & 0.34 & 0.24 & 0.55 \\ +computer & 0.35 & 0.36 & 0.55 \\ +dice & 0.12 & 0.12 & 0.17 \\ +flowers2 & 0.15 & 0.13 & 0.15 \\ +hose & 0.87 & 0.62 & 0.49 \\ +\hline +$E^{(2)}_\sigma$ & 0.58 & 0.52 & 0.51 \\ +\hline +\end{tabular} +\caption{This is a example of light table, with only a few horizontal lines.} +\label{tbl:example} +\end{center} +\end{table} + +\subsection{Lists} + +Do not manually insert bold or underlined text to emulate lists or +subtitles. Use the natural \LaTeX\ structures for this purpose: +\verb|itemize|, \verb|description|, \verb|paragraph|. + +\begin{description} +\item[first] This is the first item in a \verb|description| + environment. +\item[second] This is the second item, with a long sentence to show + how lines wrap. You can even use paragraphs in a description + environment, or math equations. +\item[third] This is the third item. +\end{description} + +\subsection{Remarks and Definitions} + +Use \verb|\newtheorem{}| for remarks and definitions. + +\begin{remark} + This is a remark. +\end{remark} + +\begin{definition} + This is a definition. +\end{definition} + +%------------------------------------------------------------------------------ +\subsection{Algorithms} + +Use the \verb|algorithm2e| environment for +algorithms. An example is provided hereafter as +Algorithm~\ref{alg:example}, with definitions (input, ourput, +comments) available from the \LaTeX source of this document. + +\begin{algorithm}[!htbp] +\caption{Intensity transformation (abridged)} +\DontPrintSemicolon +\Input{$T$, $\alpha$, original image} +\Output{corrected image} +\ForEach{pixel position $(i, j)$}{ + $N_4(i,j)=\{(i, j), (i+1, j), (i-1,j), (i, j+1), (i, j-1)\}$ + \Comment*{Compute the neighborhood.} +} +$\Omega_d=\{(i, j)\in R: \ \ u(k,l) \leq T, (k,l) \in N_4(i,j)\}$ +\Comment*{Compute the discrete dark region.} +\label{alg:example} +\end{algorithm} + +\subsubsection{Math} + +Tall math formula (with sums, fractions, etc.) must be out of the text +flow (with double dollars +\verb|$$...$$|). Do not insert empty lines between text and math +if they are in the same paragraph; empty lines may result in misplaced page +breaks and wrong indentation. + +\section{Images} + +Final PDF files for IPOL articles are prepared with pdf\LaTeX, so you +must use PNG or JPEG files for bitmap images and PDF files for vector +graphics. + +JPEG is for natural images obtained from digital photography, when +visually identical data is sufficient. PNG is for artificial images +and when exact pixel values are important. Use the highest resolution +available for these images; final PDF files will be filtered and +downsampled provide a version at screen resolution, together with the +full-resolution data. If your images are already in JPEG or PNG, do +not change their file format. + +If your bitmap images are not in JPEG or PNG format, convert them into +these file formats with the ImageMagick \verb|convert| tool for +example. + +Remove unnecessary white margins from image files\footnote{You can use + \verb|convert in.png -trim out.png| for PNG and JPEG files and + \verb|pdfcrop in.pdf out.pdf|.}. You can also optimize the size of +PNG and JPEG images without quality loss with the \verb|minipng.sh| and +\verb|minijpeg.sh| scripts available from the +\href{\ipolLink}{Manuscript Guidelines}. + +Please store all the images used by your article in a subfolder. Do +not include images not included in the article to be published. + +\subsection{Vector Graphics} + +Vector graphics are more precise, have virtually unlimited resolution +and weight less in the PDF file; use them for figures and curves, like +the example in Figure~\ref{fig:example}. + +\begin{figure}[!htbp] +\begin{center} +\includegraphics[width=.5\linewidth]{./images/curve.pdf} +\caption{This is an example of vector graphics. This figure is precise + and well rendered at any zoom level on screens and printed with high + resolution.} +\label{fig:example} +\end{center} +\end{figure} + +You can produce vector PDF output with \verb|gnuplot| with proper options +(\verb|set terminal pdf|) and vector SVG figures the \emph{Inkscape} +program for example, and then convert them to PDF, or direct PDF output with +the PGF/TikZ \LaTeX\ packages\footnote{TikZ/PGF - Graphic systems for + TeX, \url{http://pgf.sourceforge.net/}}. You can also convert EPS +vector images files to PDF files with the \verb|epstopdf| tool. +Simply converting a PNG file to PDF \emph{does not} create a vector +graphic file. + +\subsection{Copyright} + +Authors must warrant to be the authors of every part of the final +article including the images, or must include permission of the +copyright holder. If you use images you do not own, you must include +their authors and permissions to be used in the article in a special +section at the end of the article. We want other researchers to be +able to reuse these images for comparisons in other articles; try to +use only images under a permissive license like ``CC-BY'' or ``CC0''. + +%------------------------------------------------------------------------------ +\section{References} + +We recommend the use of BibTeX with the SIAM bibliographic +style\footnote{The \verb|siam.bst| style file is available from + \url{http://www.siam.org/journals/auth-info.php}.} for the automatic +formatting of the references. Reference presentation rules are +complex, see \emph{The Chicago Manual of Style} for +details\footnote{Extracts are available online at + \url{http://www.chicagomanualofstyle.org/tools_citationguide.html} + and \url{http://www.lib.sfu.ca/help/writing/chicago-turabian}.}. + +References must include, at least: author(s), title, +journal/series/editor, volume, pages, year, and DOI/ISBN\@. Do +not use shortened journal titles. + +Journal articles references must mention the DOI if it exists, presented +as ``\url{https://doi.org/AA.BBBB/CCCCCCC}'' at the end of the +reference block\footnote{See the Crossref DOI Display Guidelines at + \url{http://www.crossref.org/02publishers/doi\_display\_guidelines.html}.}. +In BibTeX files, add the DOI in a \verb|note| field: \verb|note = {\url{https://doi.org/10.5201/ipol.2013.90}}|. + +DOIs provides reliable and permanent links to the officially published +version of articles, and they are used by reference management tools +and indexing services to automatically collect reference citations +from a document. You can find DOIs for most of the published articles +using \href{http://www.crossref.org/guestquery/}{the Crossref Guest + Query tool}. + +Book references must mention the ISBN, presented as +``ISBN~XXXXXXXXXX'' at the end of the reference block. You can find +ISBNs for every published book in \href{http://isbndb.com/}{ISBNdb} or +\href{http://www.worldcat.org/advancedsearch}{the WorldCat catalog}. + +Grammatically, reference numbers may be treated like footnotes or +like nouns: +"\emph{Facchinei and Lucidi~[19] proved rate of convergence + results; For recent convergence results, see~[19]; In~[19] results + on the rate of convergence; as shown by Faccinei et Lucidi~[19]}". + +Do not insert reference in the abstract. Instead, replace citations +with the reference itself, in brackets and formatted as follows: +\begin{description} +\item[Journal articles:] + [P. T. Smith, K. Wang and J. W. Jones, SIAM Journal of Numerical + Analysis, 26 (1989), pp. 600–623] +\item[Books:] + [R. Doe and E. Prince, Principles of Physics, K. Lev, ed., + Birkhäuser, Basel, 1997] +\end{description} +If you refer by name to the authors of a cited work, you don’t need +to repeat the names within the reference: "\emph{In this paper we give + an analysis of the algorithm by Smith, Prince, and Doe [SIAM Journal + on Optimization, 9 (1999), pp. 755–778] for the solution of + nonlinear large-scale problems.}" + +Group references together: \verb|\cite{foo,bar}| instead of +\verb|\cite{foo}, \cite{bar}|. + +Examples are included in bibliography, at the end of this document, for +journal articles~\cite{article}, preprints~\cite{preprint}, conference +papers~\cite{conference} and books~\cite{book}. + +References to materials not formally published under editorial +control, such as websites, personal home pages, Wikipedia, etc.\ must +be provided in footnotes, not included in the References section. For example: + +\begin{description} +\item[Wikipedia:] + the photoelectric effect\footnote{Wikipedia, + http://en.wikipedia.org/w/index.php?title=Photoelectric\_effect\&oldid=592445603 (3 February 2014)} + is explained by \ldots +\item[Other web sites:] + our implementation uses the GSL library\footnote{ +GSL - GNU Scientific Library, \url{https://www.gnu.org/software/gsl/} +(10 March 2013)} to compute \ldots +\end{description} + +%------------------------------------------------------------------------------ +\section*{Acknowledgment} + +Include an acknowledgment of grant and funding organizations at the +end of the article. For example: This work was partially funded by the +ONR grant 1234ABCD, ERC grand 5678XYZ, and Treilles Foundation. + +%------------------------------------------------------------------------------ +\section*{Image Credits} + +You must mention the origin of \emph{every} image included in the article, +with their authors and license. Use a small font size for this +section, and set the heigh of the thumbnails to \verb|2em|. For example:\\ +{\small +\includegraphics[height=2em]{images/finger.png} + Glenn J. Mason (Flickr), + CC-BY-SA\footnote{\url{http://www.flickr.com/photos/glennji/3558118429/}}\\ +\includegraphics[height=2em]{images/lily.png} + Lulu of the Lotus-Eaters (Wikipedia), + CC-BY-SA\footnote{\url{http://en.wikipedia.org/wiki/File:Sego\_lily\_cm-150.jpg}}\\ +\includegraphics[height=2em]{images/ferrari.png} + Courtesy Philip Greenspun\footnote{\url{http://philip.greenspun.com}}\\ +\includegraphics[height=2em]{images/k19.png} + Kodak Image Suite\footnote{\url{http://r0k.us/graphics/kodak/}} \\ +\includegraphics[height=2em]{images/lena.png} + Standard test image +} + +%------------------------------------------------------------------------------ + +\bibliographystyle{siam} +\bibliography{article} + +\end{document} +%------------------------------------------------------------------------------ diff --git a/ipol/ipol_style_201905/siam.bst b/ipol/ipol_style_201905/siam.bst new file mode 100644 index 0000000000000000000000000000000000000000..31d7aa994d9e8576c464e022ce69a82eb3fb1ae7 --- /dev/null +++ b/ipol/ipol_style_201905/siam.bst @@ -0,0 +1,1040 @@ + +% ====================== SIAM.BST ================================ % +% SIAM bibliography style (24-Jan-88 version) +% numeric labels, alphabetic order, Mathematical Reviews abbreviations, +% names in \sc, titles in italics, book titles mixed upper-lower and +%article +% titles lowercase, commas separate all fields except before "notes". +% +% History +% 1/30/86 (HWT) Original version, by Howard Trickey. +% 6/15/87 (HWT) Fix format.editors---Martin Costabel. +% 1/24/88 (OP&HWT) Updated for BibTeX version 0.99a, Oren Patashnik; +% THIS `siam' VERSION DOES NOT WORK WITH BIBTEX 0.98i. + +ENTRY + { address + author + booktitle + chapter + edition + editor + howpublished + institution + journal + key + month + note + number + organization + pages + publisher + school + series + title + type + volume + year + } + {} + { label } + +INTEGERS { output.state before.all mid.sentence after.block } + +FUNCTION {init.state.consts} +{ #0 'before.all := + #1 'mid.sentence := + #2 'after.block := +} + +STRINGS { s t } + +FUNCTION {output.nonnull} +{ 's := + output.state mid.sentence = + { ", " * write$ } + { output.state after.block = + { add.period$ write$ + newline$ + "\newblock " write$ + } + 'write$ + if$ + mid.sentence 'output.state := + } + if$ + s +} + +FUNCTION {output} +{ duplicate$ empty$ + 'pop$ + 'output.nonnull + if$ +} + +FUNCTION {output.check} +{ 't := + duplicate$ empty$ + { pop$ "empty " t * " in " * cite$ * warning$ } + 'output.nonnull + if$ +} + +FUNCTION {output.bibitem} +{ newline$ + "\bibitem{" write$ + cite$ write$ + "}" write$ + newline$ + "" + before.all 'output.state := +} + +FUNCTION {fin.entry} +{ add.period$ + write$ + newline$ +} + +FUNCTION {new.block} +{ output.state before.all = + 'skip$ + { after.block 'output.state := } + if$ +} + +FUNCTION {not} +{ { #0 } + { #1 } + if$ +} + +FUNCTION {and} +{ 'skip$ + { pop$ #0 } + if$ +} + +FUNCTION {or} +{ { pop$ #1 } + 'skip$ + if$ +} + +FUNCTION {new.block.checka} +{ empty$ + 'skip$ + 'new.block + if$ +} + +FUNCTION {field.or.null} +{ duplicate$ empty$ + { pop$ "" } + 'skip$ + if$ +} + +FUNCTION {emphasize} +{ duplicate$ empty$ + { pop$ "" } + { "{\em " swap$ * "}" * } + if$ +} + +FUNCTION {scapify} +{ duplicate$ empty$ + { pop$ "" } + { "{\sc " swap$ * "}" * } + if$ +} + +INTEGERS { nameptr namesleft numnames } + +FUNCTION {format.names} +{ 's := + #1 'nameptr := + s num.names$ 'numnames := + numnames 'namesleft := + { namesleft #0 > } +% { s nameptr "{f.~}{vv~}{ll}{, jj}" format.name$ 't := + { s nameptr "{ff~}{vv~}{ll}{, jj}" format.name$ 't := + nameptr #1 > + { namesleft #1 > + { ", " * t * } + { numnames #2 > + { "," * } + 'skip$ + if$ + t "others" = + { " et~al." * } + { " and " * t * } + if$ + } + if$ + } + 't + if$ + nameptr #1 + 'nameptr := + namesleft #1 - 'namesleft := + } + while$ +} + +STRINGS { last.authors } + +FUNCTION {init.last.authors} +{ "" 'last.authors := +} + +FUNCTION {format.authors} +{ author empty$ + { "" 'last.authors := + "" + } + { author last.authors = + { "\leavevmode\vrule height 2pt depth -1.6pt width 23pt" } + { author format.names scapify } + if$ + author 'last.authors := + } + if$ +} + +FUNCTION {format.organization} +{ organization empty$ + { "" 'last.authors := + "" + } + { organization last.authors = + { "\leavevmode\vrule height 2pt depth -1.6pt width 23pt" } + { organization scapify } + if$ + organization 'last.authors := + } + if$ +} + +FUNCTION {format.editors} +{ editor empty$ + { "" 'last.authors := + "" + } + { editor last.authors = + { "\leavevmode\vrule height 2pt depth -1.6pt width 23pt" } + { editor format.names scapify } + if$ + editor num.names$ #1 > + { ", eds." * } + { ", ed." * } + if$ + editor 'last.authors := + } + if$ +} + +FUNCTION {format.ineditors} +{ editor empty$ + { "" } + { editor format.names + editor num.names$ #1 > + { ", eds." * } + { ", ed." * } + if$ + } + if$ +} + +FUNCTION {format.title} +{ title empty$ + { "" } + { title "t" change.case$ emphasize } + if$ +} + +FUNCTION {n.dashify} +{ 't := + "" + { t empty$ not } + { t #1 #1 substring$ "-" = + { t #1 #2 substring$ "--" = not + { "--" * + t #2 global.max$ substring$ 't := + } + { { t #1 #1 substring$ "-" = } + { "-" * + t #2 global.max$ substring$ 't := + } + while$ + } + if$ + } + { t #1 #1 substring$ * + t #2 global.max$ substring$ 't := + } + if$ + } + while$ +} + +FUNCTION {format.date} +{ year empty$ + { month empty$ + { "" } + { "there's a month but no year in " cite$ * warning$ + month + } + if$ + } + { month empty$ + 'year + { month " " * year * } + if$ + } + if$ +} + +FUNCTION {format.btitle} +{ title emphasize +} + +FUNCTION {tie.or.space.connect} +{ duplicate$ text.length$ #3 < + { "~" } + { " " } + if$ + swap$ * * +} + +FUNCTION {either.or.check} +{ empty$ + 'pop$ + { "can't use both " swap$ * " fields in " * cite$ * warning$ } + if$ +} + +FUNCTION {format.bvolume} +{ volume empty$ + { "" } + { "vol.~" volume * + series empty$ + 'skip$ + { " of " * series * } + if$ + "volume and number" number either.or.check + } + if$ +} + +FUNCTION {format.number.series} +{ volume empty$ + { number empty$ + { series field.or.null } + { "no.~" number * + series empty$ + { "there's a number but no series in " cite$ * warning$ } + { " in " * series * } + if$ + } + if$ + } + { "" } + if$ +} + +FUNCTION {format.edition} +{ edition empty$ + { "" } + { edition "l" change.case$ "~ed." * } + if$ +} + +INTEGERS { multiresult } + +FUNCTION {multi.page.check} +{ 't := + #0 'multiresult := + { multiresult not + t empty$ not + and + } + { t #1 #1 substring$ + duplicate$ "-" = + swap$ duplicate$ "," = + swap$ "+" = + or or + { #1 'multiresult := } + { t #2 global.max$ substring$ 't := } + if$ + } + while$ + multiresult +} + +FUNCTION {format.pages} +{ pages empty$ + { "" } + { pages multi.page.check + { "pp.~" pages n.dashify * } + { "p.~" pages * } + if$ + } + if$ +} + +FUNCTION {format.vol.year} +{ volume field.or.null + year empty$ + { "empty year in " cite$ * warning$ } + { " (" year * ")" * * } + if$ +} + +FUNCTION {format.chapter.pages} +{ chapter empty$ + 'format.pages + { type empty$ + { "ch.~" chapter * } + { type "l" change.case$ chapter tie.or.space.connect } + if$ + pages empty$ + 'skip$ + { ", " * format.pages * } + if$ + } + if$ +} + +FUNCTION {format.in.ed.booktitle} +{ booktitle empty$ + { "" } + { editor empty$ + { "in " booktitle * } + { "in " booktitle * ", " * format.ineditors * } + if$ + } + if$ +} + +FUNCTION {empty.misc.check} +{ author empty$ title empty$ howpublished empty$ + month empty$ year empty$ note empty$ + and and and and and + key empty$ not and + { "all relevant fields are empty in " cite$ * warning$ } + 'skip$ + if$ +} + +FUNCTION {format.thesis.type} +{ type empty$ + 'skip$ + { pop$ + type "l" change.case$ + } + if$ +} + +FUNCTION {format.tr.number} +{ type empty$ + { "Tech. Report" } + 'type + if$ + number empty$ + { "l" change.case$ } + { number tie.or.space.connect } + if$ +} + +FUNCTION {format.article.crossref} +{ key empty$ + { journal empty$ + { "need key or journal for " cite$ * " to crossref " * crossref * + warning$ + "" + } + { "in " journal * } + if$ + } + { "in " key * } + if$ + " \cite{" * crossref * "}" * +} + +FUNCTION {format.crossref.editor} +{ editor #1 "{vv~}{ll}" format.name$ + editor num.names$ duplicate$ + #2 > + { pop$ " et~al." * } + { #2 < + 'skip$ + { editor #2 "{ff }{vv }{ll}{ jj}" format.name$ "others" = + { " et~al." * } + { " and " * editor #2 "{vv~}{ll}" format.name$ * } + if$ + } + if$ + } + if$ +} + +FUNCTION {format.book.crossref} +{ volume empty$ + { "empty volume in " cite$ * "'s crossref of " * crossref * warning$ + "in " + } + { "vol.~" volume * + " of " * + } + if$ + editor empty$ + editor field.or.null author field.or.null = + or + { key empty$ + { series empty$ + { "need editor, key, or series for " cite$ * " to crossref " * + crossref * warning$ + "" * + } + { series * } + if$ + } + { key * } + if$ + } + { format.crossref.editor * } + if$ + " \cite{" * crossref * "}" * +} + +FUNCTION {format.incoll.inproc.crossref} +{ editor empty$ + editor field.or.null author field.or.null = + or + { key empty$ + { booktitle empty$ + { "need editor, key, or booktitle for " cite$ * " to crossref " * + crossref * warning$ + "" + } + { "in " booktitle * } + if$ + } + { "in " key * } + if$ + } + { "in " format.crossref.editor * } + if$ + " \cite{" * crossref * "}" * +} + +FUNCTION {article} +{ output.bibitem + format.authors "author" output.check + format.title "title" output.check + crossref missing$ + { journal "journal" output.check + format.vol.year output + } + { format.article.crossref output.nonnull } + if$ + format.pages output + new.block + note output + fin.entry +} + +FUNCTION {book} +{ output.bibitem + author empty$ + { format.editors "author and editor" output.check } + { format.authors output.nonnull + crossref missing$ + { "author and editor" editor either.or.check } + 'skip$ + if$ + } + if$ + format.btitle "title" output.check + crossref missing$ + { format.bvolume output + format.number.series output + publisher "publisher" output.check + address output + } + { format.book.crossref output.nonnull } + if$ + format.edition output + format.date "year" output.check + new.block + note output + fin.entry +} + +FUNCTION {booklet} +{ output.bibitem + format.authors output + format.title "title" output.check + howpublished new.block.checka + howpublished output + address output + format.date output + new.block + note output + fin.entry +} + +FUNCTION {inbook} +{ output.bibitem + author empty$ + { format.editors "author and editor" output.check } + { format.authors output.nonnull + crossref missing$ + { "author and editor" editor either.or.check } + 'skip$ + if$ + } + if$ + format.btitle "title" output.check + crossref missing$ + { format.bvolume output + format.number.series output + publisher "publisher" output.check + address output + } + { format.book.crossref output.nonnull } + if$ + format.edition output + format.date "year" output.check + format.chapter.pages "chapter and pages" output.check + new.block + note output + fin.entry +} + +FUNCTION {incollection} +{ output.bibitem + format.authors "author" output.check + format.title "title" output.check + crossref missing$ + { format.in.ed.booktitle "booktitle" output.check + format.bvolume output + format.number.series output + publisher "publisher" output.check + address output + format.edition output + format.date "year" output.check + } + { format.incoll.inproc.crossref output.nonnull } + if$ + format.chapter.pages output + new.block + note output + fin.entry +} + +FUNCTION {inproceedings} +{ output.bibitem + format.authors "author" output.check + format.title "title" output.check + crossref missing$ + { format.in.ed.booktitle "booktitle" output.check + format.bvolume output + format.number.series output + address empty$ + { organization output + publisher output + format.date "year" output.check + } + { address output.nonnull + format.date "year" output.check + organization output + publisher output + } + if$ + } + { format.incoll.inproc.crossref output.nonnull } + if$ + format.pages output + new.block + note output + fin.entry +} + +FUNCTION {conference} { inproceedings } + +FUNCTION {manual} +{ output.bibitem + author empty$ + { format.organization output } + { format.authors output.nonnull } + if$ + format.btitle "title" output.check + author empty$ + 'skip$ + { organization output } + if$ + address output + format.edition output + format.date output + new.block + note output + fin.entry +} + +FUNCTION {mastersthesis} +{ output.bibitem + format.authors "author" output.check + format.title "title" output.check + "master's thesis" format.thesis.type output.nonnull + school "school" output.check + address output + format.date "year" output.check + new.block + note output + fin.entry +} + +FUNCTION {misc} +{ output.bibitem + format.authors output + format.title output + howpublished new.block.checka + howpublished output + format.date output + new.block + note output + fin.entry + empty.misc.check +} + +FUNCTION {phdthesis} +{ output.bibitem + format.authors "author" output.check + format.btitle "title" output.check + "PhD thesis" format.thesis.type output.nonnull + school "school" output.check + address output + format.date "year" output.check + new.block + note output + fin.entry +} + +FUNCTION {proceedings} +{ output.bibitem + editor empty$ + { format.organization output } + { format.editors output.nonnull } + if$ + format.btitle "title" output.check + format.bvolume output + format.number.series output + address empty$ + { editor empty$ + 'skip$ + { organization output } + if$ + publisher output + format.date "year" output.check + } + { address output.nonnull + format.date "year" output.check + editor empty$ + 'skip$ + { organization output } + if$ + publisher output + } + if$ + new.block + note output + fin.entry +} + +FUNCTION {techreport} +{ output.bibitem + format.authors "author" output.check + format.title "title" output.check + format.tr.number output.nonnull + institution "institution" output.check + address output + format.date "year" output.check + new.block + note output + fin.entry +} + +FUNCTION {unpublished} +{ output.bibitem + format.authors "author" output.check + format.title "title" output.check + new.block + note "note" output.check + format.date output + fin.entry +} + +FUNCTION {default.type} { misc } + +MACRO {jan} {"Jan."} + +MACRO {feb} {"Feb."} + +MACRO {mar} {"Mar."} + +MACRO {apr} {"Apr."} + +MACRO {may} {"May"} + +MACRO {jun} {"June"} + +MACRO {jul} {"July"} + +MACRO {aug} {"Aug."} + +MACRO {sep} {"Sept."} + +MACRO {oct} {"Oct."} + +MACRO {nov} {"Nov."} + +MACRO {dec} {"Dec."} + +MACRO {acmcs} {"ACM Comput. Surveys"} + +MACRO {acta} {"Acta Inf."} + +MACRO {cacm} {"Comm. ACM"} + +MACRO {ibmjrd} {"IBM J. Res. Dev."} + +MACRO {ibmsj} {"IBM Syst.~J."} + +MACRO {ieeese} {"IEEE Trans. Softw. Eng."} + +MACRO {ieeetc} {"IEEE Trans. Comput."} + +MACRO {ieeetcad} + {"IEEE Trans. Comput.-Aided Design Integrated Circuits"} + +MACRO {ipl} {"Inf. Process. Lett."} + +MACRO {jacm} {"J.~Assoc. Comput. Mach."} + +MACRO {jcss} {"J.~Comput. System Sci."} + +MACRO {scp} {"Sci. Comput. Programming"} + +MACRO {sicomp} {"SIAM J. Comput."} + +MACRO {tocs} {"ACM Trans. Comput. Syst."} + +MACRO {tods} {"ACM Trans. Database Syst."} + +MACRO {tog} {"ACM Trans. Gr."} + +MACRO {toms} {"ACM Trans. Math. Softw."} + +MACRO {toois} {"ACM Trans. Office Inf. Syst."} + +MACRO {toplas} {"ACM Trans. Prog. Lang. Syst."} + +MACRO {tcs} {"Theoretical Comput. Sci."} + +READ + +FUNCTION {sortify} +{ purify$ + "l" change.case$ +} + +INTEGERS { len } + +FUNCTION {chop.word} +{ 's := + 'len := + s #1 len substring$ = + { s len #1 + global.max$ substring$ } + 's + if$ +} + +FUNCTION {sort.format.names} +{ 's := + #1 'nameptr := + "" + s num.names$ 'numnames := + numnames 'namesleft := + { namesleft #0 > } + { nameptr #1 > + { " " * } + 'skip$ + if$ + s nameptr "{vv{ } }{ll{ }}{ f{ }}{ jj{ }}" format.name$ 't := + nameptr numnames = t "others" = and + { "et al" * } + { t sortify * } + if$ + nameptr #1 + 'nameptr := + namesleft #1 - 'namesleft := + } + while$ +} + +FUNCTION {sort.format.title} +{ 't := + "A " #2 + "An " #3 + "The " #4 t chop.word + chop.word + chop.word + sortify + #1 global.max$ substring$ +} + +FUNCTION {author.sort} +{ author empty$ + { key empty$ + { "to sort, need author or key in " cite$ * warning$ + "" + } + { key sortify } + if$ + } + { author sort.format.names } + if$ +} + +FUNCTION {author.editor.sort} +{ author empty$ + { editor empty$ + { key empty$ + { "to sort, need author, editor, or key in " cite$ * warning$ + "" + } + { key sortify } + if$ + } + { editor sort.format.names } + if$ + } + { author sort.format.names } + if$ +} + +FUNCTION {author.organization.sort} +{ author empty$ + { organization empty$ + { key empty$ + { "to sort, need author, organization, or key in " cite$ * warning$ + "" + } + { key sortify } + if$ + } + { "The " #4 organization chop.word sortify } + if$ + } + { author sort.format.names } + if$ +} + +FUNCTION {editor.organization.sort} +{ editor empty$ + { organization empty$ + { key empty$ + { "to sort, need editor, organization, or key in " cite$ * warning$ + "" + } + { key sortify } + if$ + } + { "The " #4 organization chop.word sortify } + if$ + } + { editor sort.format.names } + if$ +} + +FUNCTION {presort} +{ type$ "book" = + type$ "inbook" = + or + 'author.editor.sort + { type$ "proceedings" = + 'editor.organization.sort + { type$ "manual" = + 'author.organization.sort + 'author.sort + if$ + } + if$ + } + if$ + " " + * + year field.or.null sortify + * + " " + * + title field.or.null + sort.format.title + * + #1 entry.max$ substring$ + 'sort.key$ := +} + +ITERATE {presort} + +SORT + +STRINGS { longest.label } + +INTEGERS { number.label longest.label.width } + +FUNCTION {initialize.longest.label} +{ "" 'longest.label := + #1 'number.label := + #0 'longest.label.width := +} + +FUNCTION {longest.label.pass} +{ number.label int.to.str$ 'label := + number.label #1 + 'number.label := + label width$ longest.label.width > + { label 'longest.label := + label width$ 'longest.label.width := + } + 'skip$ + if$ +} + +EXECUTE {initialize.longest.label} + +ITERATE {longest.label.pass} + +FUNCTION {begin.bib} +{ preamble$ empty$ + 'skip$ + { preamble$ write$ newline$ } + if$ + "\begin{thebibliography}{" longest.label * "}" * write$ newline$ +} + +EXECUTE {begin.bib} + +EXECUTE {init.state.consts} + +EXECUTE {init.last.authors} + +ITERATE {call.type$} + +FUNCTION {end.bib} +{ newline$ + "\end{thebibliography}" write$ newline$ +} + +EXECUTE {end.bib} + diff --git a/ipol/ipol_style_201905/siims_logo.eps b/ipol/ipol_style_201905/siims_logo.eps new file mode 100644 index 0000000000000000000000000000000000000000..972db3413d87452bd7aedda0b6cf6dd2207e72c7 --- /dev/null +++ b/ipol/ipol_style_201905/siims_logo.eps @@ -0,0 +1,1309 @@ +%!PS-Adobe-3.0 EPSF-3.0 +%%Creator: jpeg2ps V1.9 by Thomas Merz +%%Title: siims_logo.jpg +%%CreationDate: Mon Jan 21 14:17:33 2013 +%%BoundingBox: 20 20 575 412 +%%DocumentData: Clean7Bit +%%LanguageLevel: 2 +%%EndComments +%%BeginProlog +%%EndProlog +%%Page: 1 1 +/languagelevel where {pop languagelevel 2 lt}{true} ifelse { + (JPEG file 'siims_logo.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 391.33 scale +/DeviceRGB setcolorspace +{ << /ImageType 1 + /Width 373 + /Height 263 + /ImageMatrix [ 373 0 0 -263 0 263 ] + /DataSource Data + /BitsPerComponent 8 + /Decode [0 1 0 1 0 1] + >> image + Data closefile + RawData flushfile + showpage + restore +} exec +s4IA0!"_al8O`[\!<E3P!A"3Ns4[N@!!**$!<E3%!<E3&!<E3&!W`<&!<N<(!WiE +)!WrK+!s8W,!s8Z/"9\i0"U,&5"U,,9#6tJ>#RC\A#RC\A#liWZ6NI2g!<N<("9S +`/#6b56#7(S@#RC\A#RC\A#RC\A#RC\A#RC\A#RC\A#RC\A#RC\A#RC\A#RC\A#R +C\A#RLII!"fJ;#6ArL!>,;5&HMtG!WU(<*WQ0A!WiH)!<<*"z!!!-*!sSu:!XK,6 +!<9t;*WZ6B!s&E'!<E3$z!!!-*!WrW3!<<B3$NJf[$j-M1!Y>GF!!!&Nr[[]QG2H +PfgDjAK_fs%D0(<Fq!?3EsaE4Ua<V/DKT!+&:F3EFFbJ@2TQEuj/r/A2`kNPrC!< +a?<6>OkH605kT0l%mMYD_jR=u*+\T&B#hEoDu#jCY2(-'5m.Q66XQ[om0S>"UZe= +ZB,Yn5F]gZM4/np=d'59fH1SB\o$cWG9#;WOJW?OLu'Ta3%9D3KtGr'N72/i4SY: +J0:+tfg'%$i<r4&$"lph&30#97U2ih_&;a5GB`iM1%K*';bs1/H/5%IU2u,t_A@0 +M_2X+rnC8:":Z6#>>4_9%#I(YTr2<i&]I3B`gliMh0Xo0j[JF`.M-VS/%1>U7SiB +L]a/.rlFdsJIDHP,Y#Fq)0m=98g:6l*`<WeWkX5W]EW/9l6C.e<_Y?Hl,#ftF_jn +)'GlM?kBq_>giYtspS'N3JU23ur^%DbG\qo9"jdRI_dXXT7]I"dp$5Pi>G.DSJlB +gL<b*&IAoi'':O0H'KcE54D'f1hD'XPj>ljbK+l@UcK(f,Y%'@Z5&Xqr`KeepG5b +P'B=m?[HY:io?*DM[0oQAnV4l9[^)HQW$pVWLCs9\s^78pR\#]lU%;jCr<SEY32< +G,\l^"gN)I.rHsSpT<[*.K,iQk3QAM*>"X&Gq3gg9""&2QSIPcc:DH%%0!QCLo$p +E#po,O>7H=-TrN%/Fr/K.Y-Qao$ATtgG'EO-N++AJ[0,Ub1Jt'N%p++,T#:6P5)4 +XmO.3]ie"AK0Y3,Hh(b]MW3,e74'2eIM?q^"*bdJ:+QFBcIci<[5#IT'@3UBr)j& +QV"s`TK>'cFBiiYZW:/C>.Dsa4g=?F!K([NMG&mPGM0j0h&0G'5QHs"[/UXqrq`# +g2/4jeJ0>f@&a#k<>8WJb"YIH0B!:1\6t)&2,/@BfK7o./^ggrD11:dAo-RYZBF" +;PK=oZnV*VpWaH!TFk+U64PSI/0Wu;C)tF_)Y#FkG41#cm+[*rjANsa5cTRT1U4o +?PB]H=Gk9j>$Z-(h(<@>24<Tr!p<Wc6X=UbLn8[lr6+<cW_\LrnN/%Nj`bYS:W$+ +Anfp46?<!Z`?%rrA=L'iW?sS+_[;Ko*>Lf)cqtW5!r0]*1cC#FXEWD.>\8>]\%Jl +a[qNq<!$:S.rq3)O4.^[=t60!"XMfHbKUfP1\r2.eJ[&VQuMhqo5e>Gc$X3[!0s" +.S?8_Bu;5)E1Ki,MM@e`VZjO=*DJo)6Nrn^VE5hg8bMF@.l$R$gD+,E;L+t%@GLF +4K(sI$?K:(t*\E&b'K=]@RU1CXZ\<U@XB0IB:68#OOpu_WfEPPaf+tC_,H\gpeF2 +u9D&llCF3"d_gTe]`b;f@d$QLeH99BSFe)\3]7e[[e(:niOk?e/Z^8QfM[-X5e'h +j0u$[hZS2Ai2Bq.R@9;:>_RSj\bi`+5DhMpLRYfsn^JC:V[CQ0#:^C%[Xti;*11J +WEeb>.rq,cC:-jf'po6IlQ2c2bhlT8@%G,0"R6[+R%M,>rFXSadljsqfAe6*2/_` +^:%M*cdBakf6.Hf9Hd=bnFiM/?F=kr8obpurr=R_\3a1o(ZX96k`8<q[*7u)@RCV +N3Yd:_r\`)Ygg)kDIWta;N3GUC6fV@/K"0,7)+:_m*l`8-B?%=O!prK:=f^Im]&\ +SYL3\V5PYGiXbtb*^fO60W1n2Ak7SK2D!&h.*(74g>"%:L;?p^;b+e1g]<k?=34o +;RN94\M>#r9P<fqP^_8/I<Nq9HnIpM2s%fRrTEgi<8XqPtP+\j?HV3nq^Zc!YXB< +u7",ZZl',WR%mCm4U7SA&:F>j91QpMa<N[-'^#U:n;3LUBH,T_@#`GAl"oX<Iju= +,TS2CBSPIF!$MMhSk+K3:,^18@V8A2Y`$;KPF3Dj>9FK<fq2hMB)FDj`_g>CpLZ3 ++oB5EX`c;\73;O!W2l+=CrJ]*qD]1+CVS;3U-]mt*e#OEo1CMJsgE6]n*30XX753 +ouTEF^Hrl%Tn";=`&'<hgMgd,A+Zl(u?)nQ`L8(QK;5I8J=3./NH\]]%`Ddu+PSN +tpd9"c9ncYMkNX2S;g>tU>rREg]+Pr*$b.)q5]qJ_\U%2NJL(]+q&a;1/rrNkeRM +-Vl<D2Pd9Y;\\)ZkO=(mtmF&Tp<]Hh/<@l\&\>fjh&3CkqebJlT@hQq44,R3F?"V +doB^kq_n]%6P\h&O7rJ\!\b4<Fkj75hpJu!WSS`Rr,qaPci1e+?g&!5Z!ZW$Z#ME +igo%>ia*GtbSu6j=K=G^pd83<XLiiVZKmIARU#l%6^tGHBV-+8p&"2(/BHVdnq31 +LWcj:,,ShFq]TaUBs$p?7kC[/NGpod"mrdi`G]Z/N?$PtupN5bT)$U/-SkJsaq01 +!7oXE9u$[uHO$H!0H\K5ULE-0I.io@_[hk/<HEY!ed"_-a6,44u`4G-3:\DiAkAF +uiQW?KV-RNV8\r\Gbo*pR5dDB)8paptoVf)sf+HrHd"'MCOf.dIth\%CO+([NKb3 +<cqL6^[%]$=`P0HfYY[1n7uGiZ6G5*<,DR7'Bg]*osSpe?FepN\F=J0)sYpjZQZ[ +q`g>!n@c@<n\:8nk;cUN'>/O6B4@W\]m#%E$kHh>]9uD"#eZuOm4O&"4?0`SsFY= +XRMiITZj5$'E#?9f6SiMj+VNrQq]!i^:+"HUqQfpQXV&EU1kr?_3`GLe%c`2"JO1 +OJRm9hJh!T2<LY@T]\aK4+)inr@rCE3;M9l;Mt%S45<Vc*sroeW]I24sr]^?c?iq +DZbUgaMsC[N1b#0&$W@%WBegD9t;Wd/!-%o+0JuNm4jkIC\DsIWW0Y(\CkOHWDY3 +SuZEcSBko^hY)C7lCWrXD]QOGoCoJ<(]"BX=)d(Z!R'ggrrC;iGF`'``#AtWnbHO +"l'@qnSl7`94!iTTm$oQoY/I6%-pHDl:IY1FkFG<.W3a5UIc=@(7is)$*'f6d6re +H6/VN\?h"M[mio8E/N:be7g.j[(pE[)Ob?.X*UM,Kd/F$"dmele=Om"dV=b7aJAL +u-_X]Amh8`X9o+m1_Mf3NpN3UKiaH(H5<o!WILMU,9)<(DgP?V."qoW](2lrX"I\ +d'fY-B\87(nQX.qnKMGk5pV?;u:tpb,dJ1r1Jn_18/;gYt(82hEH?""0$[2\Y\Ag +2Ok7)r(i_@W8["'.26:/)2#r>[@jscZC)VqC<5?Q72Y:UW:NuTGa4LT,L'"0lZBr +kF;heMP$/_>%L?mA1dtSBXNC@rAsuDfqf!uI&!]5Ua*#NNanW(5Lu-_%;`*HdfOg +!o<[/1c@5om<o.NYd4YDMZJ[,.KpI3'ZoeC#.Sn!:2hgG'j!1qge<M4Ze2[*a08P +;N_A8Rfj*q5/af6m0(0q((2SD1lY+kW;gaD/5)c?.GCECQuVmeN6'gcq9IMs0'!h +% +i)D;(BcaTD!l5B-m<eZX->.AT9qIo$W*AF"Un*Eqsi/M_m_pf&^0R'AG:DSmu(r^ +@^(T5E`i!e!4^X]6X?.cTTjV`s:7ND=T*1l"d!`IAGhJG@'poT!(0#D+=o]HXi\s +iqn2UDVpuOIgsf8`dLKB4a?>hcKI!0gmGdPV=lltTBbr:*])%VHoPts2l?/HIRrk +,fdFaf<W*ddD&Q7a<4n,$V*r&7HW9k2IJH[`\%N:c[&Y4[)q9U@)5`r/@pb]XHRT +?s\V]O@83L<h@4H"d7]5r"rhS^?^]&Z3H[(05U<\V=FpFYhl^6$\^'b@&Z*o]S0. +% +@SpA0qqhp+:/S^*#6'V)LJ3PB<Mc0TO2dWkWJ"KJe/4;hK"=<Xa!KL\`>%?UDAFX +I:>1(P")pXsudf.jM^gg?Y>mtY-hbT:0cL11XYSlW5k\UR'C2a0;!k9iEi'X'mr& +'_^N:MpuQr_L72?/@"UI3\2@:>5:Y:7^,[YTqP<J_"UBmPB3kaE1,\lhU9Np,pJW +cb;E1rrA]%Fk8\B@/Al0QK\UOTC8tRG!)']H7nF:GG-;!Z3Ic1V+YcFm@bF@C"ua +n?&ji"g?2dNq,.a:+6dk@krbC57H]edPOdIp(n4!qeH4.ri9trpUMM#@d2'b7YC/ +o(5LoYk_KESkR&`DI<<ea-P1jqfpC$1L"k^4ph`K[;=R>K:]?oE`Q#(.eU8@5KCU +iEmNDnRop?ua`:;c5sUN"i/F85s(pu6r#$\I`u'm&h')N;Ne2?d2gk?!nm(@%ldh +R?S-FgG#]^G#Rk%k1$CXZWP#-Np7)/R+@1h=LT1b2PHOd13#L#8lhX[sM;sorON: +*G&s\`_EVm[S+j'._DgPkXA0nCc9K1!m3PBEdTG0%DH_,ht9^Ak1G_^c??VA^HhL +S(Hm*j*H(2R0&87QO,SMQd32n'(H^:S2m225IaRDSFk#.#<ln&EXG%'Jg7R#Xk@R +Z#Timr0msgIi55&?W+4?Y)3V`oAR:O&77<KPQ48fL1bnPKkQcd^5dtc@U6,.g<b$ +nOPh)1_PEVV"-FOR17mN+:.lj94i4S_\[3-d,?H?I*%)4[;p3h;fT3Rj/dl+Y-/T +% +YX++dq,MCI:bBDob!tCku4BIO<tIL\pP8qFr(Cn%N3B#57'#**;3?debQY]P=IR4 +1HMRmlhN!eI9=GIXZmP>3qMsTcG..M4Gqp3:OJ<JUmlhctDfrAS?QVqRRWTQ\19= +*JMS;<s8&(IZNc3^/n=8dg#Gpgi6W!G)rIi?II4ja=.R][6MVY5.+[O\:W/e57aV +2a<paoDZR5S_kWjar=W28XNhEB?<R$KRGJ2+^(R_2rT\sd9.1fgX(jIPali!tSH2 +bfn@!UAZ!QFPRd8KR#dA^r2mK;N(.\k2](o22!<+q]_(%A6-g:g1dVOAJkDd]/J& +@skHT2)$Ce]H#GUYA@D5P=qCioahV8)%TPJrWg]P-+Kd8N@%8eqKX.ieOp`LYs>T +Z$IX()OJ(Ep?=:(Gi]ICV@h?0tnn)9hBN,mqS:FRP[N?%Or"V6f&%dZU%6;FP0^F +MJegT4^.#=8X%$VI1,gJp8(EZDstDM!<3%GoH.5Y?PL:pFG2Bq(/$\\.YY:$qsP4 +/`->QElJ^f]SII4Q(sQkcVHZou-ol,KT4j(\A4O"X!o$<aT+1WR^SUKY337!4$:R +:cUe<!am8ONuUA@knDURRS3-H<,32-9Y*W6%"]u(jhp]/kfIJ;ZJ-uZ;QaBL.?K4 +/,SHqp,q=sKKF"Z0@TAT5N%?r8\U#`XIn%PM!#AYl)cOL3I5?!%o@g*j5;^e1!lQ +#pXEP&qtjqG"CP9`[hY-n,bY!1<jCE6+*5H>P5`'l!-)mFtV=IkE):Wt*tUQAZ@J +?h=%O[k`J"baG/1^9$^Ba!O>u(lYdlFF$M"gf5CLT$"*"],hb/BWJ-fD'o5Yl^J= +-?oO!Y2kR@Ig5WIIlQT\Ec;@C_]PWo#N5]8C1eU)7EE7imo_$V"`^6[5^/nM7=op +m]i]ZVH*K)i=rr>?d2kb9`8VK5*!;ZAYb)D/99SbmALYg58+8DZo##04jf4^+Vg` +#i\-aKRjS31[)Z5Hs`A1'Z2P%R<C'^G@oLfn(&\<+GaG'9l!dqp/<P3nqpe>%QbN +\U/+lu_To>#f?/X<uIE7:eE>/7(6QUqK6s='=o+1\@n_oLNNes24mn&-)_5"9JW* +!X&]/!WrE&!!30'"98T0#8%RS'-\,6()J2M&/?$-1I3cT1c?^J6iYj?#QXr+!<iO +mFX\OD!]1X-om.:ELnRGm.&q,4&t=:\</n.\FO<&nTmDBmYJ`r"&%X%ud&e`M-h7 +uel@Pj(pSIS-/k1c'WCZu0PiB7@Be!rXC9@4W8UH"=K'*F)d\gUIrOXO0^qRn7,H +eW,Y#hEgVi0.o,J>u>g7.N)UX0kpM8^7W<h"#_]9teFp1rp)"J91g-t3_['OQcJ+ +@R'2'RD!9ku)qo.8lDZTAVqK5#-f5Z'(r1q&*pr\8^;fNEV`B2up=O`qmAbC%OJ[ +JE1*=_-Jpm<n(>O1k#0"Sc5F0oFno;JkVsh'BG%K]MYD!DdoOFk'K3?]L(7m3b2E +2TQk83<:c!t)Uug^VO[d&9uj6l5mFo@mnlA>6r"*#.'LjZ>?"U9G[AXVXXPiMqg\ +<`W/F?E[+PF;*VlL;'@o#r+!]Um?:%.1J*+E_:M:ZbNnYbNM!79<BVL>[0V-FMBK +dWe.'(Kd&4[NH?q#IjUZa%^J.7c&gs0AsN7Z>GENnCc.IAfG,W-lF?b;QUnruT:A +N3b^&k9Sme4k2H99,`gWjI8SD)0`OM8G-uS0RM",G\9hmA[?S/1RJ9K&dL*.^Y2= +;Hb2^SFj;toc6mk&\lk$;-jRlP[gKE*"MWc3Zp?,5mZ]FK1amM^:Kp1[6"#ZGu5a +MMU;k7QSPEG$QeURd?I(r?577ICTlNUBcBZcT$'CHR7qFl't?ui*,JZIm",b2;iY +n#YBk8C(<B<W<?[IO1FK,O[d(.j,jc+a.9muS/*uSPkr@,aF?7ja%9L67&;Gcta) +1G9e2!9Y1AM)F'&_gmBnbr!M8XJ@nDWt*AaGk"*h4Nqrgdf[r]a:@>]:h!8Ej(>] +soo\UuZ2!V7987!)[=U0rE:$R0khbH`9!jQ-ma38ED&fWT^.:,*aZAl)+urji(45 +E1C^G'0Mp%MWdQ$_Dl5],'l[,j!/93?X%PV6B/jl:SEF0JYU"UR5NQWgMfhTBqfI +5GP0aUfS'W\Q'hs46='oXX2QNf#]`8lW6dIO>sRJm)WXROH8,FUW0Pm^pJ<88/"S +/7<HkcEFr<u"\q>^S_Hgjj48k&+pm[luiU9u'SLa^?WlIu?p$AQ;qoDX.per1>O< +fjAe`o(p]8a<k!XKDX0b=gtoH/:PE\(DLER2J3%C-@bgOVbJ$=r<Ga,ptbm8l`5& +esTkmCh'X$lLj,N6@nA9nNBFDe1Nl0%)<;auM4"h,8=Fl_HgeeT7&3.!'81,3$3] +flOWs^n35A!AnN;p'f/T+_eI6SX=FB8<3VX;kXaNMK^EsIE7,XLXC,bLl,dgXBS9 +TD#Ij*P=04l&2PZ\&IMmL)C.(;6R?ab$9['M8:X7aHr7K%13'i$1Mt@n2F2%YqGu +)VXp_C[OgHh)7>Q@:g?1lD>UI_,7,mS5!#M))p,9(]>4Lf[^NelY(2^*lBNT`Xeu +^HLHHJhX9ObJIp"R3EaR.X2'oHEoiOe8QA#5:T9n@D%C$Nr,]sRZ(dB=X3Rr-I@N +qjQ\gbVpIXk:+H)nO-%0=UaIfCK#QUP^dZ;;TM@[-H%1EM=XGD4#ukg3U_B&?DUu +P\>TMX.h2ep6%88"&(*k\8EZDXL\ajW7hLP$,]6e^p,4B4171AW%c6ZG4kBcqjlJ +aDR.IVMcS*M\Q3-Ua,`@,1"=p(c9s*C>?0[+D-lA"cLK!gYjGkZCKuW$g[H#&fl` +"$'[JYFD/./$Y.;d)q30fl$IPl\NbN%7fsOi>dtQL5:=b2i\Yebu+Q9ks[Z?8K1p +5$,iV=L`7:UT)9l&Dt]Z\BD9/X33p;`?j)eA<j:][I7PP#-WMX.(F&]CXI.rKK/Q +hQYkNo9.1`-BLq(;Uq3>_"7;f.&A-;fu*Kj0h].`kW9J6np!a03SUaKL,$S.CRW' +>A0<m:fM.0]mMKSX.frRA3t-j'1KdFIbN^of/cihHV(-)<9O]k+@'XsXs9K*-qiY +Y`5APH@?^b+[T$Qu8n<A=+2Pf>.YZK[,n,;BGZ<Mbm8IjA?AaL]TlA*#\maNYCXa +6pEnlD.e#AM1."c@O![BPR-7R1Mr;$#dKT;Gj2#EnYmrq)Of'C,O'n)>[5r:lHjL +A8f9iTl-K!QJ7O`F=/iXmB6.1j)H&\6SZE2laJeZRk:LoK661j&MQ$>N#q+M0I_1 +QM$06ZnttVMgn)e&bn0aD1AV?V*`:HQM-_]\'DIba`k^bB#Cb8Sr";;.`.?*%)KG +.C;g=rW/GH&:5V&B[S5"r0Z3.A9\kkLk1_t4UGjZ$Eh7q4!+#YOP=W7^#:tp1=QR +BD\iV"B$j,E78Ir<h6t\kR,1o$4L\sJZteEVPM>OC^"4.4qUCf?[c_grD:':pAP( +9r8gR09h=:5MEc$Dr.uki`l^YKL!!fc575pNt(8NB/RL.Cri1$i59DXUQA9=hd9s +j5?KDtr9>O9]-GK"7P]*_5jZTO,bQQ=a_<ttR>Y_m7)S)mj&=;[c`GkI$p+P=0IY +1J_>\)o/C5.Kd@__E+=EIYe^DC:!(b^>f/fVHO"^p'g+rUF=K\CR`t#@T:Q%#N,: +m2otK:pr81oEdGAQAn:,=2.^9Ds?Xap;<9A9KQM304%oAE8Q6/*Zf4cm>2?`B1aD +r9Nrk`2_4]NXq^1q_cUk=1,7NO3+/apq?j<s`GO2IQ`DjSN%=G:Rh7@jh(hYE3oO +<,H.tM:`:Rj0fdH@j!$](R`l?tlGd!&79R@l);^1d&asL-5>"61"eVjG--c/!'c/ +ek?gF'n[/G[RNmN7klZXRL8(R*Npb8]';U&+*OCt\)4D]SNtZJ2B"rrD+UokmYBA +,cNNa,KK_eXsrXDMH`#0&!AI+`OnCZEZ-E@")!ao.PC?'8g$Ml`ADNG$Cr4C4*p) +>9(/>%7]cV3)1mEOai-+fC$gqW:9ZK.h33&)%Me7,S;49J?&t=n6Yo)?,,F<Dl;. +_]-248^N1o!I+JJ/'O=S7]N^dV:<E&QJU^MM/FkIGRn^=KQIg9+)Xd9Ea"dI?/S= +RC'h5*G[<Z?]A'!FlAl"&uOKCOHr0#3D%.@YTfD;"/2Ac4Fqo8X9a0K88Hoj0k?# +3^I'\581]Ls*uU'\:$rS<D"($(As-6?*>B!QR@j$i@ik1'tn%3*8)ro*J`C_"5-; +#^LuW6*`d@JeIHA$V5Jj8_qM?[guBehWk&,Q@a;h^E9N1rCD0X?;2`S]TpK::V^Y +o$])bCj3o%:tf-r5Let*)0(/gfoGUFQOhXV>I\Ifb_,^L@C5Q3``OPkRbdHaK*U* +)I_^l+BH;A^9#Q+$`UO@p@hK![eAM`cYO*"%<.FC0lF.iVG"Q5s"`Imdo6XPVptF +;(4,,,T=RU\o?ro:0VQ-q;#(3cB=H0FN8EfC<'dA,1VI:U@8EG;kWMLb0VO;Bk?# +`Ha164[qFSpEi!P+E_'4m2HZ6@5LrRU9e*QoV8XG?3WV-7dR9.TUTD3&anD9?o-' +MH_=RUg5Y+fLSOgZ<lom:B7?9%3<YPm:]6$Y+'jmCrAN+2$Kg,ajt?/aRniWn/g\ +],,.nj'^eA\q!;UG+kGH0=Qk&2N(C,9IUEe]sAcXCb;V77>ILt'Sn(r7:58X/!&W +T^f^_j&ftA7-%6trN,^'iV2Jq?qDJfs8ns8_\JEP?MG8nb8<q%nA3sUu/'+I`N"g +TL1r4B677uUJ&,]`1-eqmcA>!T?"594W7HgQ1dlZ*WMm@temj,c.I&qogYQ"S^li +#Kaf`(r&/TXM],Y%Wdb1T9[ij:I4BM5'2HBd$p$M#GFV@Og`h4AXP+qHi#p7s!<2 +% +cMrj+?VBlu<903a@K=XN7rM;rA&ROF7_%nJQ=@(U6OmP+NEm5i\#u;.W242p:KEZ +&>ctd.B,jH!=rIfi[\>j15'tP*>YAZIG:[.N`iY9Z8*8j5jVm&iQ#0MilR/*qbsh +A&cc"d,[ANCP^Q[2P*Sq#0:l/N^)OS3usRU_c@oK*Ee']HY/brGa?7cpRVPLCO=' +]e@;s)Z2Xet>3.2\A(N58])p#qp&>"fBhV#W_mA5>X=uA@r\^U\XrXb:9ui(BYY; +Jf$!0]CO,NSiZIb*t_uhU]k?6OjH@lX3kP8N\a0&6;`[u4f\[84MYOK2/'Z`'lc9 +L>1/J]kN3U6o;FPo.@]ZD3;>.2!-VeJA*Ue4%QVBQR1bAfpE3tD<99Fr>0+qceKO +Phn\aQt]#NLojpr+,4uYSsl&_V?3KE8+t0NU@l415h.i1+_,1Y8IgKOWTMh/$AfP +CelbT@1b5D.WT?t+"t[(7;@8&,eH\=R#&/8[jQ`JaF&Tjhh3a\(]OL$Y::+`!&]. +5fBh6Hc1/@%f(&2(L;LSAjdF&f5E2Mbceb!MQ(M'*4k\gr/<_j&Z/U^eMf8/4h2^ +&2CqjT/jPR,.*_1N$k)KA<h$?(bdC>'nqfmD,Ock,q=8?#Tpj.0#+JO`Z!^qti+: +,CIai:g\&ZZTrFls:\mCNbHN.1R1<EKG8b.A@Bm8iAaYu*?T>Pn38+r^'r"]W\C< +'L)c;`=i7?\gOR<q*]Q-1"tWJ*S*K2fi=$+-trQSV;lEjU+_[&b9eRB%#:*1r]XY +0hD6)F]=&,H?dl@-IBK=@q+!`K1=ITpUu%KMd(!;O'Z/^h<V5M&]qGX':03celN; +p/aIr*Vf'7I2S"Y0D09j7KT.HB%S31iNZ!5$U%V#mRLi)6dgAZ!-ns-2?('g+qQ8 +K\b:O<BepFu7D'-tdQ"PA'g:(@No5D]e4'tA9=S:LnA`)/naaCKRiqFt+]W;V=GD +_%)(\5Gj-LW-Z,:F,*-YskD'9-YcIik0Z2/FqHK*KX3h`o5$[at!?16%E)45Wh,c +;Nnf?Yp<CZ/#cEj.(ccWT5%CAa/d&/o&lU+mA0"`A0!)Y4cQalc$lLq!`[0T,Ip= +\@_3SHE2i"ZGN3m"Bi"l7k"n#q0\l)qKDs2%=>!]m"Xf*;\,c988o0D80XR#R;)4 +r;bRuiK[VK,Hf[n!U,*D$>1Ztc.+XF2]V*gL2Ts0)1]tD!mKKg*9C=>9!Q6qJ`l3 +*B8##^[&$I_Fl?>oJ2rq]DHG#'fG^b+QGB7QT(C&X)SVK2W[VO+a"l:&Zg8(G1>h +^4M)ZnKN?ElSP.HQRE.>IbOduFp[hqEhLM!9l%)T":+l>',arD%'qg:fi<4Hj.:S +[X@>)gab;kt*Jf5#l>:.m#P!jI9oZNO\k@#TBZSJurKQ$AWG?R4Z(G!j&')7#BL0 +H5Ch&mW9jLJdSO4K&%r:3C[hR.hTkTpn@ZPl-WJ*2W28cN.Aic7fL>D37&MDEfAd +#aXkBSGAe\[nf(HiN.=c]V%>H9R;p2BOnt4qj0[OEU2I8YjA**+Tl$au`MJbB)c^ +mDjL0N.UM+m`6.[SH3(f?<E(LVr5rNI>$Rt_S6>U5M-E3JR0\^G(FKIMPT5&%j72 +:)<32GNM6llrD]RO$Ei1o`K6B/WkVVA"A,taeZX+#XM4&R%qBuZFY6ppV_UR,/*Z +4IY1Mi#O_.XDpmE*[<K:"2YZ>@FC\Y88?j>^`TU=dSuGYh[]/rBs!8/21!P/6JlL +8*FKq$!_&FP\-f7N\R,hb1rkp_).Zr+.GYa_5bnO$FIqh@Nm#!$B$HX;rDAUphdq +bLfHMT5#antP`;\5"j1pUBt(pPDJSAuOlW8qkq"b_Uc,/Cn.n\4*W\Y6>q-Wj#i> +fhI<IV-,5;nk6`[C@ND*m:C=qj4[5:$`PHVR&V>WJA0u6(_X[A<9#Y!Qt5i]#16R +^1Q-&UD!Z5e2dBfhk1!+:hKQoMdIiD%A2<E3$uS9W;Cj7J)?^TC);p/HP.UbiR5e +!tVo=og\]I83,:?W*jreb8&cl9b1W62*9TRQjDm'hBAhFTT7S*S2BMl78o'iP43s +!-4>/*@+cD&0h!D5U:>\`iJ`<NqKYc1>J/e`Vs80Y6g/+@Y8ju#X3t'TMd7*7KB# +]'Nn:4%b0J6'rLu,a2qS1g^R2>rA;nNJ0DT_,Bb4B&I-K""!p?76B<4`+)t=OZg\ +e9fp:)uqG,MVga#rj=q>f.OS*`a"#L-.h,/gjN?$R`F@YQ5Q.Lm\$0iC_9u1[l<, +'gj>(3WO_%qbj\Fb%4qOE=%!lR(^rQHIk^aX]FMa.c!9<m*a:u61+A\>Cs55d7[X +eu;^H4^Q-p=!QW8V6:sdX+C:<*'o/,>RYL.QFB_3.r^p#!u&i>=`2lAcDb.)5")Q +Pk?l9E"*`Z2F-">Bj+C096nhMW]3Q%)"GEq`N\97"4Z+nreM=UrlX/4gB=Dm'""C +g'GjuZ[Uh&OY-liGIK7%/![8M';;r`t6IU'$ip*!UTSeX*'4e,bo&J"<;kL?Rau# +h>W6[;6,2,!BV>E5'++B)!38fdGO^)J['sIoX\,uN="n=74<Y=2o*%8\,]]855A- +O&Tijb3bRrY'U:!tfi2$^P#)7aR_f*!B+5?*[to-kE+2XHLp/`GucCT>a0WYu,He +.pRKRW#^;Joq\N>bc\qUuN`R)@+`7H+$YPb'q9+3dEk6ccEZ^8-ioQY)\^K0W@1Z +3:=#(:sI;*j#othggSkL)^#G2";=0Q9;s)d"ADN!"@`#5^YM2q7Q7a,-ZdibnB`2 +E_#mOtdN#TL/>e5jMOdq$B&)DCZmea0JA;-&!'Lno!<WE+!WrT/#R1A3!!!!"!!3 +6*"VD@j0a9oW,#JRZ11>/6JYB=`(*c/._9q`t2,\JRnKfu#ZN&VY#QY#.!C$UuFX +a<gPYJs]W*t])>^&u%0Cl:T\[_9/K&;>kT+@0Mh.q'jB_-NuUt!km(4^E>O(_NKS +/$6V)-odY<RC0H?eQso!iV>;i$hV\G#^*['F`Y]_B4I6R,YgHJJL,\DA,,d`>b97 +0ISf=DNYY]J;6]cJhY\_49]T2]=P[YhX0$f:F(E$<4,SqM+L#?b[Eoq/]W#&a!>g +7Z*jJ:5Y$TbWgWK5"q?j+8D3Z8o*9*2!n2h[YY@h2G2;'5FYfUYkO)2(*,[O*K+A +47#J'Egnl7F0D_'X"\u[N-c/Al;TOh)Q3)p%h.f#3le6K!Kh,H`\Eh=9j6-?6h$' +bu`PVhPu;q_V&6QsTjMe,Erhl<Vg,:WoZM3e/A2jis6\oWU[FM't9EQM3$;)(-\Y +L8EP:?kui.W2"9j!lRc?H$+1^MG=^iblXO6%hHCPi+7_b,:n_nomqui"CSr"\kM) +Rmdka<@obLW5)0e0a6UW:QR#?r&.r9`jGXn#h[.<b%0o>!7oN-3%&i2Y)g/YqWnQ +mW#R5J"fe98_0$%!>u/V0GNDdaUm1@Q_M2o90rti6<4-NoneDnV7e38#,;Kt\j[0 +\Ph%J)Zq+c28@8Y21'jY2)S2F%`,_VF8S0/K"8i*']c$7V%*Yt'abdBVV#Sd)!B9 +jRf-<V#GoGq5fcJ\F/KcJAm#6dhCR-`b(X!<l;p/#R_@Wq#T[Kg673]9[f_IQ/.B +\V[=.-&))TjnT2e0WCZ,I4LoS2Ff1E2dr>"E:/mEe2*2Y&mD[MYc8meC_p7_51,I +U"N1d<3Zk3[tbDUQ+iO!P'C!)`HE/f;WtUsNXob0RAW"oVO&q2,7@Vt"Wj$Te>fP +pOkERCD:F>`$Q5]c!P3i54h_i??F5gE<uYGSAJMVaGuI9T)a8!TZR=V#1Dk(#ar+ +[hC#M?\'TZ'g1nBMV!+A0t9dkFP65dKP4K`[$`7DC<b(c-ODuu&h_g0T,-B/17-S +P&R#e)$i55QcJJ?*C8)(OqCL"&fGj`%]D<`Npk?5o[X$P),UUDPE/!8Tc;2`..qF +^)=h<8&?7d5!kj<:sQ:#s51F;eeVhY,.PKa/!aLRDDgP:?l"ZH`1Dh_,Ce*-j_M) +29"=K!,JkI\((ea[cLH;4mp-'_Q(('@Cl2f_rXlF2m=@g`9.eobOfJuWN)6sd&CX +!h*cEiEgffRe:&&fPm)>c+.AqoUcWa!oaYW&<O'JW:TA[_qQ#8Aa9$_D+-+FPWEl +(;RDj;:Sf5;S\sB>6DQ^+fAab'Ka(4r1I\uV7gT@)*$b"l<_9-/'G>Q@b0$3lM.] +@mgX%aFf\6%@k:3T\-[&N'5G#6-:n.aH*_9-:"0Q5,.MK1i(='C(ZjhD*sDQear- +5!imWi8?L*p?i;B6@9O'WoqfKa%NSb7lM^KgStq)mY37'ZRCI6I_HV<Q4Eh]-sH, +B4V66gVT\.?'cqg#7Vo`WiBk1m&"9aJ%R!AT=K3+G7$e@SG'0tX3'nme_+;t\Pe' +M/'NT!18KK3anSK"G-RELL!Ib:;ROg+<Ii\;TVHVSoMaIL$cWoNLk_Y"X?"G#T>c +RsE/EqKjYb!`$DO;;K>dC\cJmWRgo1BZeO8!5&SY""cqT+G7U>+TCt/eD<=sJKiA +r_:e(o8O)_.//`&fJb6pq6Da"q&dObFH,q\lc=UNpkJKd[R/RWRV7<8\O+_N!P$/ +gNKg;Ts9$UlE>I!#7ms!D*hWOB'_cb]1Z2W>/-(C8s))if*m;&*tdg(U]_(q*L+) +C4^O/;e]MIcNFt]BV/&.0]>sbVk)[Fj]:.`MHp^0$>XB'^gP<se$u_Z4N`">6Woa +FiV+'qVOPKH>H)`k"/Knah`mc5<bY+O=EXIK='99GDHt$[l1u9p@FE"slCCKkjY= +b16CNVf9fUs6/b;<a]n?Q#[SB;re"pF5NROCIH#u+teOqou"nB5"-n4F&r@AgUL1 +hU(j34O%?OO\kEKsB'jEAEJNeBd1jZqJ?e_O/e>b[Hq#c=Pn,U"gp)0"[ncTXtj6 +ef.GE@fQ!d=[K[?6%Mre$=-i\O!%Y_O?&#_Pgs,%J`o/kZ?UW;t*en5cF9,U8Y5S +Y0[2]'W:s2#_&DjFF6Or8LJ^Hd<2fU!`o%r`s:$^e,.Bq1I^`Z*:dBheT@p9ai3) +?\gF\f:@*:V0W8\qA@"sT"KP<p^7p)d_obufM6L!m2iK7e?G"s]kXpPaonhOs(\7 +ucVRfBf=\umVm!XBBF?,4>H-8A^&H;_>Q+kH0pK'oCL$_hRIPp*`N@Us[g=cj]=A +Rkd7kD'\]Dhl+paV\Sb"DAGA:gOW9_"YqT;qj*S)2lI4H;BfQ*FBl3$DSkRlM+A= +BAiiqW#uGA_=u._JS=3p234+\4aOiWT7_i7,D!e`oO)7BN<HeGu1,,R)5?9V7rsR +8Cm-,<Ed[%R8.):4"+gdF+bi\[SFr'"]6-<:=eZ2be#C)_8/ssGh!YV4/bGs1ZH. +m8--%VIse.na$iJ;Od1'!CT'/,+\bke>>>AaIS.2JU8B7opWDfJI<,.,b3?("D7_ +R;:-u6nTW*%<\FNY7VqF^-MWae%UqXe4pM[=i;=rpG<P"r,40*4+ReHIdLI^qCaj +`NI?VsHFaPS(5Y+LX.D3^(Ja#ii"TfSU,o\m"R!8/9t_&Q?P:[3EUBYMqp\^@kdW +tm"5U*I)dk5PEMIeJ0c$<&U8*KJcYbld4!o-_ET!9O4\C">9A@3KiZ*2p#[c!Q!G +"]8Udr?3Eri3'=,Zt;H.S^2]_AP#Z",?1g[)\kpM$'HF1%dR0\j"H697s$#'>_Ph +@lkL'@fUc&^ka0JuA*!NO)8Q>?bW?0)QF%4&Te@:(\\ujuHnM?Z'irX@.](JH31M +IR4gBb)DaafTE:]6AWiEKsZc[GheBSs=Ejci*c"+#-?oWEu]K*PrNY%@%h1[.BTA +LemeHk&m<@u*eGq,sP@j.Dn6r&Y]YtgGE47]AG-ZF$t\3;TM*-Y?15<?*_GCd"K_ +,Bk%4!go0i<a,;ek762EPd&4K>%Ul(s%fKPUCgMY?&g->N.lg'ie7,:7REI'ls)B +AJZ3:ZD8ek"J?JbCJh'H#QFcm(g7te%d:7;+J6J6+RC+N?61-o<H0nAbBQgI0iQR +.>b5+C_;uLhbtV3c&dl=4=&\LO>;#e%h;[c_.u=^VG>l*U@]';o9om6G;8hZ8VJp +h&<n_S"T$$@hV:kN=`mG"38XJMA&gB$Z2$:;pHZX<fbc3^F$mZgG*$\78C"0&^,[ +jm@,adp4(5S\tbs%R/ggrhUEOS\Be5I(k4'NbhX6"+$JF/6#blDnt.^D%0G7'e1- +sbq65%a5WC+6%eQ'_oe0s*JV^ZC/EI%)Npoa7Q4[qtDhc8e2Pq^0_c7j1rVoqjG, +h([D<i:Hj]^?5r"-]&N02q;8Re?jH65>G5EWMjA&--u*e9^P,G_klW.Q`^hn2Z!F +Rb.^uX,!+e	CRBF@T(uJEd0Fk@OLL?(?ZK+^F62W7dRVjnb&!WM+.VC>^ak?lO +8h1.aIrN2oC1i)u*ObP*LSNi6pfZgq0-S?7LZB'cXa<<NMWS>t<I`54lOhs*G+U8 +iTO[Jp4CVtO'&T1pKbMR0*AfP,hWcB<r`8Q;6<3/P?_"r6[Y1p5:!g:][m5sZd78 +C1/fVmBI<^.)W$$DXH`o_^fLb5"Oi;W7!p<oP?g.51t-X$&;G8Zgbt<a[D)rJ^V' +=i6B>[iaMgKHqSJ;TCG!ZIQ(ImM$9MDOm<Y"V!QSgodIQ!&:,Emek6$9fr@T7M4B +*gA1aK'aoNe5G.j)'m>d?.bdVU<IBm6<sX3nZe7NP,;9p&gUpZmoD>NU_S4C*U7' +7L3P$+oiE<8.X-Z($f41_RAf*`);fdgK8f^2jT8?l)iI*`&b-4Y4F,?fRrKjs;G6 +_XV81UOM[4uAFq$aM03$X^:V#HC45)\-FGDd5"$L'a9F_TGSd1=2pd_uSNY[@Vli +gHDPJn<L<E8\F.<45jt)nltlFXgQd-]E@%FHOGeeHNfJ[8L&FnZliZ<,`!8&VnLE +QKca,.Y]=Xk]"X4pl'suXg#tY9SYW.1tnB+7_pc<"WZrLdG8piEH.WLmf*:Z=0a` +6igoD7HWQ=.P&!j*O3FQ%bGj:coT`b-;&*T=_[F.ZNVd!G-%BN?ht0n?XPIu@)30 +e<o&\C\Dg0ZjEhS^g^u<+86Y[0+lu6uHZhd^Y*@GlHY'"%Z7EVK7Ga$A>;!8e)A. +TH'+]TS2_[=d]rrA.?_m0(lOG?i.WW?>l/X>dcpR##cfmHn\N>mT#6,)@rD\uc*1 +ej,rB<bL)"E_k+a`W$W86L[fU9mqUl?'GjIWm9hd.OX@DK"OGPGP*c27_E,T]qd5 +ii6oLK_T&2%F<Ak<&H4RG#mh6Kh]F@2h^)eB>=3,rDWof!QN1bNVG`qpVNT#F,oN +h/E@Kh/faAJf/RZIiHF97V#LELTDe3Ub4\<KgKjg?m5b!S]QsVSAT[SfP*/]-V2p +_5?t0qWjCYs4G16C)eX<=bd97J7ZNaof8f5Ga!8o?m/NlDCgQbP:@UNtr$a1ucJ4 +MaTB=!)@/FF!t^Yl\`M:9n`XlWMLiQ0(6<#=c\/H_0._R)k_?1Z2Gl_E>IrVjs>d +7\P-a8Msnfji+Y'l'N<Ge?5UTBa+l(O5H0k,bsWC.R2CZnH-XPI9pUhh5gW9'5n! +_t<6K$B!j`q:"#>PU5r3"-l]2esf5mV`_ZG.\42P38%.LPrB$qhA%+#+KB4,Mj=t +RrI#Dcd7-5QZ]tr>#3tQKKXpC1a(r_iCd)-i$f@b_V>gNMTDe3Ub4\<V)@'d&Fo1 +cTTBl:Q\n#94`E]1V`F!CC)L!7gUZsX;<G9TOqC[Z#f21]Bmf$su9bETQW]K"HaD +c<.-e)&D5=C/SqGB(%@IC8,^N$>8n$,j"Z-M0!3EIi#UoEEbkcLC+%5YnSM8ugu- +h+5IE4iY"CATWpST8r(I@X^-2W4KcMSA&`'Sda%B=4VXA;a"F=0h_1XbakJ);.Xr +,]8gU?`=`6I\q]3[a`GrFHa<$`rSYYX/_QY^L\%5@]\a(5cG^a9aQ]Cf8[so8)gA +E"ko\4KP9+<iM^Xo=QlO.W2=?7OK*%%OSmSgF=EA;7RmgQm*:WoB1b:t^.Q:OD5n +g"*M#WA%m[s2.@Yp7g\t'U2Mr-kY,&!IE?SVj;GQ!^"`1Qr%<E5SD`7!(0pQM=B@ +,b5A//%onkS!E\B:D1&?V9Xd`=B+I^mX^>'<o,Ni#<;FsU=q:T$0\_M>5Sa/YK/S +2SfqqSoMl!811K3]T(ejYp@+]OU`78nOL>B?Y^Pdf"TmNM%&"mo@s]H%1[0'#!!h +&E]PtHK%KMN_6m*FEJEU1PGVK43?Rf7t.P5pg:#82&EV;FD>kqHN!<b2-r>4H$2; +#]OCG9O.qJ!'q)s3TN",_BL"&jLif:3\H'XmY9%,XWS,,DQ##pjm%\>8:U4ckkq] +DYCOjR%/7WXD<=b-k!gF;Y=,_kal,r:olKmN"-FDt=R?>XQ/TtBuJ1"Y_;*S#tE: +0_N+knIQ^N?NW9R+FP/U&YL@,NL'*3JgIns(^-Vpb1BYD=r0.G6uL2;kI2?l;u;% +<*.jnf&?+TjJkRWlhc^%geLU)LZj)Lel%58qPXX.a]2c,^Li1g2='$qjp:b1V/EH +E!TM7ZD-8*rlWql.kj.4fM![;b)+@f"[cI;C$_RX5gk"Y+n3e"Bf0:qT.51_T^P: +kY[+iMc`\L7(DmO[?coL"ql+'7a]-N+];]NTE18A*49[j="#Q&%c'DiHKqpd[=#O +Z.;e"4]TRZ>D90ehdCQD=</"=:kG?"*f*#2ZgKuXM+lXF[Uh,M23,6_$#+qED.[[ +>mDE2dO*m^cA$)!i_uC3a&UEqd*'fr?MkaYp<DPnD)"+i:`e(agmbSQUiZE2\N60 +<p[p3EJrc#XW,cr=m\@(M-TF,Hqc*HW0'8MZlNrbGkH;[Y@-`@pAs5!2oOSFEtqM +IG`RQqa\.$JDf$0V-oFr*S4-'AL%E(P_YUdPp]4$\6uZ5/#iAGSt;Id/;;N#0hXY +VW<QXk]!nTsVi@j8?nRhPdap`k+Q2;L#kVs7rRB\`Tc>q4NK,Iga2Q)If1knf'kJ +MM_fM)`k\>)L0P!:neS'5Oj3/</f\r9T3TG-PlY`:.FTM#n,DY<n<MgXEQORh.U: +'Uqgs>LDqgsa"mEPUU`2^P6UF\AA>pDhlX.KNi+f"TO4/-TQk=Y\HT[%Y[cVM@d1 +Z$DDZJ#Iu\I+DNh&L&\aZif%Q#6O$8)dTMfHHoD(rn,X)k,^Xe?ms%aqZp;B5SHd +;RBk#eOO7oXOMWs[hb:t<Ai=:jVu);_I^i_6$QcVVd12I_Db2S<I^7kW>o1&:FaD +"V3W-)rkEc\[8OBmCo_I6:))+m].38sD*Gk&=4_Qpq*MZ8>h*rq)&OltRRI5&WqM +E4ALfLjY@d2LM>@/O=7Q^q?M\>XZt-(]5aZpm=.Z0G"pR1uFG*A"$UEYUN0(Wral +0kNB*X^LDq.6>V0/!S1hCdRW[QotETV;Qh.*7>]uj*`SnU<>AM7?>1Wnj`BB/o"M +<'<bWl^3>3So;s^7;MjG?)=n;*7:-Ahq&k`u'NkF-Um27R0XW,usX*<'@]4<HIHO +IZ:&G_PYi=Za-@!&jYTCP\Jpp$V4;[I#?ZRk45LZG#fLt:G<fU]/p;UO/b?1o3\E +(jYHHk:qhm/NVj:MobYk:riVR"]3K^t$faF-f,7iK'9mCfW"GZ.W*o-:igh2AVJW +bJcfB/Lq*(X%6YJ=#qQFOol(ih+^Q;=tSl(4EfIjbE`T+ANgECZ?q0;b$Hb4X$Cd +e1KQ!6f%QqIqnFA-^F:ACI)*_5-)[!B$i2/(J,Om1ms?I4^;`h!o)!T$f=H+`I9o +U<[YoUk3%n6tqsX=,9UPARO(Q`)+;c13us/"@=`eAl)MY>3Kr[h?#3R_SJR\B#ZA +Ai34mF\fkt$K'<q`8SGRW,*_RWuL6k<4#&D6Dj97X&M`em6a0b#Z2r+p>pap7fJh +*)=G78r6adMq-U%\Wi*Fk^IfIqWpKFEX8Q[^>T`4AL1\NRiPAU]7,d7tN3oQt,VJ +j%IYtS!dGnGQkCq9UH\UCRHV'Dq4F^AtnbT3?rpSna>!@,Wjt,fDAOLG(3BI0?JQ +EW=Ch:rL\esSbhl0r/:S'GjrB]lapb+gCnaoM/X`5Ssp7&dH\fTqcW*7F@RCDfo= +juf?N&dLAr)Au^R%JuI$E:A`DX@Z2jLq&2Q;j(=<FO_t[.Atl?-#555PPuC2k-Qe +,>5EB'sc(a?IDs37D,WMHKo_M6^djR8(LbbXA7Y$`X9K8KiKAM\pDA1T[6G+Vl.= +1[arV4*b>I<I6NOGfGqJPUtFl357pl%%>#_RE"sWQ4hITKp>pb-I+.qC\D3s()fs +1#@2\/cW>\c"fr&saGSqAq>Tn@EVbY(=.c]$?5WRY+04$c[j`KB`RT&1e]0@T3HD +['@Xp`3eWqMCmkG$Vsd^fYA$YZn^g_JGH`qULf"`t3n-GoHmDlZ*Q6EW-#<F+kJp +t^YS2,I9"jbGg$$Zgm+Se617V0bQ\H_\FM<&IILO@[]R.P&.F6mN"H]q`g"(uSIi +?7)JHeBUkLXo1ge0]u*B&?ClB=&qXtF%PFFMQS[7T+bi)#Ot:D!&uT;rr<k8\kNT +tZ3.TZY@fdtG&*"kkO"jGN!1/".Pe#MJ&M;\3UXIrdU"f@Gs\gN)5>ZuM?`iZS\j +mO:R?`@:Y>MkVWhiC]CMLN#/rlKQ+X,GT\BeO6K,e0enmE"a73/ie[XF'EQL\OJ= +0U7*/.%3T2mhAii;;a?\3<Y>0W9c^!4AR:2Idd3!t#%_#^BT,:&^?Jlb[[nO,ad; +[7'ed[a;!Eh[P'3@)V+<D<V:"It/-(q47RI+(ZuS4X9QoDDQa9&8QJ_M[<Bkj585 +$foj'=]eulX*(kR@-:%C!pM=knG`K,0$a)WXVk:U'+1Qcg_Gj=>Hk6<$>-UI.ug[ +YSHFJCX<KP4'\*V1$+10d.GLkYg^8Bt&W8g$ZGre%jZ7gT?FNFY"GS>oT0%u#WT, +/9AMaijU;l.i;X/_*NDKs4q.0>#k@=3^e%*f\Gm;Es4R<bA,77HOm??Kgfgb<B.] +% +&G.&;j_FQ^&e/4NP#kIR[b7r5bG_YT5T:UNta>%2G@UY+i5"*#IlVX8;qV%K>XTB +"\o7"(,>$J([jNVf_g.t"-C*3[F,;I:o$>pLidDL4M$YBd,?9k3ag@-jYEPs%EKn +=K@eRgBSIWN4N,;$-.-WLkis7-@*":Bq^d1D&HTA=A]afeuTYZ\8M:'_IEIm&.9[ +a(Mt@:<!qtT,?BBikri:F6"S.5$h5gD?i>T1lfj%_NkJ^\D9^aS37QcNZ0-5gFL0 +X4-_(R3+[FtU3)YI9]:s.8QBrt-'>BPGAdipXJ\'=aj'p&$R[Ehql<o08`B0?Y_S +uk?j\A1&[5S"+2W8<;6"\CJ=QdIgo2IM<"^+CV/q4t!,2]nOgcW,;L[\S7rEQYU3 +1:NCt_@!SOpOlNQOd3'L:n_(?4kUlCO::_,8Sd3F:bRBe_gWKh5(Alr,_tiTfVNH +Z75o&K&"&:lAC$26MmV\pO\<?rqm3UVZ%Z9)/=\FD[[K;31B3J*<H7e;6tIFG\GD +]fKYg*Ca;5?fkD2MR6,8q3@)g/JnhTaS?d<;<doT<1j]iSGrR(acsVo,tUsrZ?3V +<6Q_1>W[@3QV,FcjHHHrIIclCm@c:*B%Dn9+fZ=KR/Gab:3?1d$I'78$Jjt=R:2h +Rkb/nd7<G^SlC5rU6<0p`mr*`RZjET10M&N:Sod@Xt&/oR-jR"Vq<gRT*o'@D3EL +1L09-0o*=4^Kl)`Z!#0ZJj-![ss;UaX<\PuQ=J;:Xbq2B8BT=f0#9@B*/*d)OXj8 +Pl.OWF]^tK?@dE]ZqufG%!Sl(r92b`>?CkC1D`A3#6n'WloA3/M<)>R=]U@'irR( +!:H7OHnZ5nGWR&WVj,9JS<0Bs"[iaJ:'BOl=30T$O=OS;H1MFZEg+]I.]S]P4"G: +>VVEYfCQgoF@EZ<`GfH!h6^mp"9-B?Sq_!`62bBBtU']+@Id,90-;Tlf5(&W9Qcu +,%:sYK.3HnN%m^c4-m$2F:5ZA(6Z>4jBWE\1>6;!*%<HeL&BN5S*r_^h5Zc3rN.[ +bE"+U<6\2IHb>VCXMGCoQDHj[70HbMlnV^!-X-e77^;H#rsUc(e[$m.mPZ[niAE' +KSsQ&=79qOC^jX*3*^X_2cZRZ&>oc\jT$OC!*Gs2%5a`[MnBe`S"EC75Zl2o]9i1 +Hdo2r9V"B4>*cP^VQIb$F4rsV%m'pBkg&JJ:`Y7(Id<i,o3kg)E#$&@9JWasg,;e +5"t6%%b*]PpW^]HRc!2X4_ODOD)Tc0\NMX_Ii]Sc+PE6M8>GF@1RT\bmWb6R//l` +i!KEbVN+_fb1<,.ICPjFYS9,_i-e$)n4]1rEb*&f>sS:ss8a^`Jg[_8idQAE%"D2 +$0.m2kFY)Fp@Rrr=<F<0F6C;U'fnVSZn8.^flE<<_"YI[0DjZA/%NJ5qc5F_H*ca +ZSNb,k;++_DNo`/-!Nf3=u5l!s/W.!<iW3"T\T'!!!$"!WrQ;"U5S_0bY`s;%OEs +@<!&=JW]F,'dH&=Z-agR2,\I(s4RGY!<N9&568[cH@=u99cN!,CV`dI8mGFlc:*` +`M_#PiAHJYWQKj1Y-95c,9T5ph`p'Ji;3^XIFi'4O&;ZS!;t]EN"Dh)Z2bob+](^ +smK?#IIYUhuOT^IK8G7&#SiAQ+rPP7"Bm^8AI;uSA6/:*k2*RrKMauEY^e"<PJ-I +ceACC!\"KO+u>FRB`XY)Dq+/DD:4#SH9f/]s&<W>-j]@qBF(jDnsR;**pK8N,cS< +QIO]2PQpc\s;t;eSVUk^Qh5R,elbX#p5Eb(>]$c_3nje&g)5n1pP1(V)igl<i2#N +;1_-#U-ZY<SOIB!5FmufV&N]$V>MaslY`F[aj*>/@^o[oe73FTN&M'g5$(Y(m^Te +H-V3!/_B1$_<:&:-'dBJVEdl,\J:Y:R<[bMsfHrk%gl3fiffrCTRcO4)L%R#?S^d +$,.XGrZW/Fj&"O#U8%`h$R+c"ih]9r!4P?CRtFc(HS(L$\c8p5`U(tW5f8K.>"<& +&9A9\:[Na\n["AM+SG2jN"mC_eN14!q=,VABJC2A2itL>`MkADO[k1iILEP\Qc?< +6C$!gnKtkagP*ZAPUutWb2GaIahkCq,Yr*+k]:>e4EPDm]qG0NGe#Nn$6>!aR*"r +m%eo#G-PV7iVQnIne8$/FW4UH:T"UqNPo'L1"Y6'*mfU,$9OGnmG+5Ml!-Q1:^X- +=H[IAO%VC7Z#[KB].X)La$,uVsFi`5jhH,sHat?X4W^T];?r5H0_*S`QBgdZ%n?d ++V-peNgR#pD'H77](Fd7=Y'?\0:F.[KLL_VWe.-_/*9C<Ka;O@h?L]L--iF8g\/= +1JBg<cLl1%:-6:"3UrFd7;=qPI8^=Jn\0=%dCrM_;LFbf-PI^?Z?,'5daL<+iYpf +l[CcV:3T:*V^c8!]I?BK`\,KbGA,206R>q1U8_#h$2Q@.MJVUXZIn;_NfYV1tb5> +40$D\cKbjudA`_qTp"GY,J\&S]2;=h7j!oY8`6TTFmOB=QL_:M(N,mSG:D%n:eLF +#+R(MKa2m?n"fHLk:c\Lh9IH(W0'1O_FO`IS&3CMs:eQefamEe$i<Pim^(G=@BL( +BC/>?+_;th#%^_X&<)@Pu$+gPT1G>GMlU]h4K;U-*nFb/p00O:u$50@!7aJbnMUY +.f((rE5A1U/\h$GDX@8t;:**1GhCG=Ds!\P2<Q_++AcT]+D3!$0Q*CXh2"jYa6iW +MCbM*8@DC3CR^]8`<ZBU7KR[8:"e"%gqDZ:Qd'`6rOg\h,=JK)$No.ZAsm/#>)Nb +ir9!Y%.,[rX*"0tN,EI&."B.Je5_Xg8L!FlR,]-T-n-#,C'AC54ks$Fm-CTi#YXO +9KD;N;=S;8sK@GWrHW<dZpk-1Y-6j4[B*F2eaN,XZY-V<V:Gtn:&Ut.NVDk*u!it +USn<,E.W1G541Jh)X`$_lr5;a^k0t2-hG!''1.GFLhPnV&)l-l!c(#B+XC]]?CmF +7m<7t@T.f17N_2&218g,B#55[&t=H++&?l.r:1U6=d_<A*R)@I#W?%6;e>)LO_8g +RC_IJ*%"%_T^:=eOKk)<_nol7!WKKJ1[gb62[lgQ@F1)"+].-\PP]s!*R/?g2Zfc +!%S_]H^bEDlp+[U!?<e/B$P/0lJ4<"*:@^L82T:Yr05JK\/YGJ^[eGiW0mc`Vg%[ +DJ?soL9fsQr=qu30f>>F2nMI=BYG6g_;Co%ARO[O;iT'V0<bLj=+Tpj)e-s^CT(, +sWM6Sbh>5KrRV^87R$iVR)3a=PojeZ@--5'a2%MoKuL@ei&<UP2-C2FLaPoqVPM8 +_6Hc0\8MD3S#&,t,p6:iEqi<?K$*lCi/ZVaf+*%@-9YgjfDo_M(je<CV.3omI*gB +tC5pWL:F:o[u+)rU(-0<_T?<AR(8+C;V9E*[,$6&!]j]l((amchT(%VKo&(mMjm; +P0-P-34d<n_lKmQ(jT67%kL%-(bSuN=GAg3R!MGbgoAR*5sQ>I,B["IaYc"I6.E. +X',D/1Il=M$Z$[ADkocp\=kd<S=Nc[mI4O]kJ6BnmI4W@bO5[kNXDQBZ+GS_g07l +tp)^$HX.j!3^WT=,NJc;\Uc4$eHVpd6nXSWR/e'm-s?b^.9('YdlAL88hE7Y.M2H +@7[bm\YPib2Ig=r1Pr6lO_O:R4oNm6L0P\(OYWLMi\7<ZNp.O\j*IAX7%o<;Lu!+ +V8F<8lkDd/gMfI3PcN1GYoqGW7;G_X;"_-;1N"r.pLt"!'I4=@6?$_1td5d4>1n$ +hT3+m#Y/ePW+"1.VLlcPlT4,p0"mR$ViVBTQBXLe=[Q$?>0EelaB5fD%IN7E9)Vt +f',l*iIs285P3i5o)aeIR7nohn`DOGZL"18Wl+N?%HJc:Y6``7CE%6n"p+b0BY=4 +7'>coAil@bX0)hcfHb'Rs(pe`M08ehR;Od-d1WIZ1h$^BP*';XGZnKZP3]IKn(<- +-kY`5mjQ2I/8ujVnpT>GF8.Z$WusMbDME3io'O!E[c/1!5femrB&R)lY)82bg5[P +"-<o;_cScZE7Yj>uNcN*2+n?asTQb:s.lo)01)2]4B\s^/n[K]D4q6lDrRS20u1L +>hr"/r$Y;)Mc5a\e.Fo9fga^8.VIF5eOD[&38@e^DPkW77!s?_1DbXLeiMmt$e\+ +Zal"h[P]j<XTrk5kE=@!4RH?58cuJ/6`j"m9$snpRpr1`#U71toql3=rRT%qu8ue +I@gn"SF`oqR6+B;5qgPuij&BD_HQS:=EQ>W7Ra_NB-EZUne5BV^:Vf&p^KODO:VP +TCVf2sB[<(oI$;._:%muR@I-Di4:],Ve*?/EGm\MgabAk(Mb<isrW)Ohm`fbZX[S +NEsO:;_c1h8S!W53P>j.I\+`8[cfR?kjL5ZfjWZS:;,LN`DBKT2^"+=QNm^R%HJk +/?:+dZ1CY$QRp`qdX\]Fob8^fOl9[_VAbbm<I::f-&FCG4`4An2*Fn8No#Y_#F[r +_7kRbe//&MZ.Y2QDBNcf059oO4S6\lRM;50_&ToY9]QmUpfc^T^<bVP8a`#bHA.g +p5qQ.f,Rmu3bhF%5UoeTQ2mPcF\J^cdW;t*r+iI9,;bYbtK/L*l0c&LgWa%1*BTT +R2n?r\S.7tkZ<]9F_2'U/[a8]I#PmCe+9(CTf0M4r'qOAhRJE"S.Qn>LftT0`F?r +r@;C\1+]=V"uXM<[4QJi2kU5Gm%Wo2"mito3$M8X(mr1FdoDKl?&%)ZG%:.CTkQQ +7-NK2GmahpHLS;CnPFP5O2)Q64YKuH'G5HAY[;4GXlUPM8Fcboeg!EU3=#Qa-eX2 +E6j)YDb/LU6)d+PD"dC`^a7Pqt/Bg\gIK':O/=.="0!`IZ10$H/<L#93543Af@Pm +^2C2iQ?q7;GZLAq7:_6XP*]1[EF`Z;i%QO`9i8!M.KeJo&&CV"h9Z>$K=-V,,_^L ++04a+lat:BZA2O4?+R4f(<Mn;dp7mT];jVsb?[ZW8(VYi)1(:-a4B>ip?amo>:mF +Kjp(gaj2kWb9j`4d!`hGRA.XhHY=UM]SgpDO)<.<D037HatXPeW"I*XRQ>W[Jlro +rRP/RCc+R]"[a^j+^u=;cj(Wn6h,ke1l=eQj`ssVrS>4VmSn;"o0CkJ/>Qe6QH*V +AMcGVrl?[uqB*#a5l`=uo`E+9[WF*!s\=FSuG:O`PgH?LDHRqMmFZlqiAGH=C!@e +]4Rf4";$uM)-9knu<_\U"K9jotpnbK,R9=19hg0;F[Z&K_VHnS>\^o#bFR\TbWr; +rtneMk:JY:C<B9W.$YocI5-H3Kc^rr>Rb/2c"LVrk=6B24g`3HCgKW@/)n[n7OQ. +l:Y=`tl+.=CkQ'G.D'A:p$Y)iY?#-YWGL0TZkq_$Z\FH&Bs^p0X.nlW.$G*-T'f. +rrCBNK#3ef7.+(W)JL+rD@`gk=>q5#0A4P%cumM0T]&bhnK`SsN_(F>E4@&M3E;2 +SfW7j`I9!F%AX+-ZT>=o2BJrX8]IP>uSl<=`h7B)uVgH-2.A`Q"=&@a>;k'80^^* +eqVDiW<9:.9!rF^7K(&Y-o/KmW=ZD-'<*Z#POm8MIhBM2U*b)hMniF3WLFZ.e/;e +:3JG+b<VQ!G>AN.^5?Q\=_)_kLOJY/B!EH\Kr>X?MqDat]o4[nbd[9fR2Nne?@M0 +.Dkh?uL^=Prm+WWG-Z1co><3NJLBQYdrAnK#=et6#a]1%c,mm98(boEn_<+T*D>" +p-KO4<ZQf]*oTpW9gt11Gtm6gS:-K'E2+B0b,gtIE2I[\ej9!j<IbF@/N5pC_PC. +h%LNDn>@jtWb"E>PIbQ4[i"RdZ<>#%+NXeqp,1OmQ95V7W`-33$8Ih<.Q*#++"-a +CZKLO3VOnMcD3#a55nLg&:0d]8/WE-Ul1j3]6O7CV8hS;rL-`?hYe'c`n.He4Nnu +&JZ;`qY4n%+PEQ92%JGtj8e&uQLEWt!kcka<a>Q,"_#,/^GFNRmErDPqFs0r9n*I +FR;b7!hp<m&>I$8GalN23_7?aM2:#NbalecRhsQ3,1RTWXi<3GqKn2bps#)6K`C& +i3A_uTc9EVW2_n`>lommEcLf"q&l[tSDh3ho]F$6gsDhsY(6"p91jpO6>Ui9R-Q4 +tRYqc8S[WlE=iOD7D#b`J.fn^[9.smKW[?+9$Spini2G#J/@+\*/O=?*.kkISdE! +7K"<j9bra1gK_Q<Sb[>[;V3([neIk]C#e7`^#YjCC#V%&mI8q;Kb=e?\&$Cr`UXK +oi,C>h5Q+Fg,gQ8UY_edE&7ltNg9r(</4<k.]b,tXRU[>W\=_-19C'!n($S80]nQ +eMk^P/8sLB;c5eXB$^*HaJ4AAQPJ'?aCXNr6"nF>Q4\2ZL0XtCQ>[0<DR<I<XCsQ +=A`-sE1U(\-()RlAg:hgd$i<ELY8UK7D4g=r2Ah19kXu7c=D(?_Jh-+\PVC4#i/> +8O]0H%E3k1JX8E`(?ns`TMfm_F=;;c&OG>KpOHZufn>=Tr=L1ZDWl[G]d@DH;(0J +PeN6puZc+i\]"dO"=/B*H/n*+1eYe3!H&$feKL,SIpb>dQf*3A$Dkq"e0<&"X%et +4JZZiI+B\HG^X%gtEjo(ES%$'$shBCMS;'_3^^#ZA1s;EQ$-eO?YE-mi_u$BhNb1 +:aQ#D^hta>"Mi1,l$=^V&>@C3HZ"27T-XZWAWt4H]M_iIZrU)W2:X"k79u2L.S6h +KL#qt<c7t<MgBl<P[r5:I26dc<6b7fSFQ*B;,TWHb:Qc:dNRAHcu2qZ/2E#W9(r' +#.S?$n-ue[^7#d@A]t>-\!0rbgCR-2pG^]N_b"#)2:RI9UC\HFnG9;";bqt^;W:_ +Yo<_D'>-Zt8ScE)o[7gc8J86oj36]KUE)mRQmblXl1,0s.r64peq(i."(Ys;H-VG +>=eVG>5-?bM#1DkbLDQnj1!I:h[cM?.E[=[pq9&IKB/7d8L8_O>&1cr@7c34/H_7 +PPcmQQ$LLmq^`H;B:04p0!pBVsmh_G<>#p:YrSEZKFp+hnkc/>Jd8#&*1%?J*t&T +Q6"UYA&Iq#W&Q6SQN.PMP[A9#0iJie(O0u:0gPo"?,8k9-b!_8=$S;oDR3&,W%IU +?KQRIGMON/M@C29<f@oMn&W3+HC^QbY-#WE,*ep)oH=sbYYaV_RiQAmLW;E>NK"9 +:>1D2`d^O+`e7l7oC4$osdSKl==,u'2W=%RMbKHa0B#Z[t#C29uA)(LgUOl]Kho\ +!WWC_a;N2r[bEd]i-OL!)$XnOd`9$Sg,DdqZ@GQfEE6<a_eOgsQF]mdKdFd7Wg._ +BP-lG?FMgh):oa+_BE5Ve&]@,>1f99g\P5M_)=VRrDCU9$*j7]IJji7WGqD#Poob +Gltk`@rZ::\!?AZH7sE)d8@q/->?VKQ:L1`J?49#n_8)qbGqA#;<(qGfC6$b@n1; +El?\cuV5nSo$-p:6Kk+A;<``QgW1[*$.RlAE;nO=IV&7$Hd^%XVUDDg'\_TF9"`% +OUAM?6J3_$C0/49_)AB0U1TYR-MLi4Oel52JeYLKGtettI*HRHnl!BLU/V2PW37i +2T-U*`tWMIS]Z)oC96CIQ=cUm4_*Wi<3tYBu.a>OG@Y\>"V<./PQMaqlO/.N(\(? +)XV0P`N@A6B'&iG-V^X;$+q<Y_;6EO<gdcZ?\C?A%#*N7s33n:(@PJb0g8eYRT/. +>T(]YL.rG[qojnG9"Lfjql?GlUg0G^kG_db+KDn0JqOOA\4/($L+=A]PFQN\XGar +OW`Q2l!iL!=EC<rE+U?g_!gtHOAOD=eUC\s3aATEQD:EG17ZRkZED:dH1544]MpM +tB)O*+Fnl'1B>@<<@!f9uIaLrB;3DT6'a9hh/4`q'+-!b>pDR?Gl+PWP(3E0iped +7U";UqHb,mW6if29k)q*hHFg/h8n3%:D/IS'Z-h+6p+<KT>(I?q1j>URT5]#?/1P +'mliU/n+i(Euf5N/CqA8WVCmdLU*&nsr_\7]EGBb0sln,n7^<aamB]eKr`j8qj`( +E6ej8feoG#[$.f$0fI0<&WC!e:=(VgQi`;7.2jGe(PhF4a"$+A"(Y,m:t[Tn_\7k +sF2+rD84DJR-P[lW[-(PjT5^i5l_dIS-1;=`9knc;fKGO(I?&7m1obMnS>f8K:2[ +FV;d:l3R[icoXIZXAd6Ps(Pu,mg:^rY0kYn$H9GRoKACi%C+ZZ;i[d+^-57b$<'N +% +<b;OQhE:,aWJh,bO1M*)!p-oP7q;qlG*i__X/O4d2ZW</hVmYe.[OCND#Mf+2]J- +$1k,BP0dBWt9O$^Bl1eCK5>9rU=I_0AfZAQ(fb[rSL<>_Ji"O)fTrS@'`VFT1><U +h,jb<G[1#M8e/I5l7ZV>&nop,+91&C4g(dF\NY:(+BR$#5]hRPHnWi?;P;Y9-'O\ +aBn@.[F>;#kAH6*W8oN[>(AqU[S<\$@Wah*IS/ggk9gu'$?9/'4uCh)rIX?@4(>6 +*F)Mt/c:"Uu>eg<W!+6?<!<WB+"9J`1#RM"K"p4i+!!36*&Hrdj0a8:85r):O6=F +kb#8JJGTb'"X@WI(*Zkac0P*;-H_UBef6W8&JK7otoUp@>SdMFSq6r[Z,ATcr;2) +ds(nV,uls4RGY!<E0)56?43bV>.djd/F2kAV02d#C\9J89ZDZ#OuDqj5^#Z0Xa@5 +4`mUmh>]o2Z"/u6Lu9%0>3.M<9HL;Ma=W"i.IE_BAFR\jR"dJ@Z,d5Q</:\#2KeH +8j:5UfmA23[`I>k[nZR6Z@T%*=Z,.(ZNG%qXE83ee];I.ih@E/:R]Y*dVmdAV1,2 +F-W&;En43+%nFXD+Q2^hV2@K"A<dr+^#%?:7G0R6\_Wo];1[/WbHP5B/Ek@oIDQ' +:I^aR37[E#:6kBSCF3jSN!gKWu&\dgbY\oQc6>0'.F3Hmpddatn6r@"s%[CsJbqN +E^=_q$?6Dqu4S^F<b>UnIF+OE[j_Qef6WlM(8%el4ejA9q(V\aq=*3r'u_'9fY%I +\gUkFS#Bi)eE:b?#Jp7`P_n#$b:,I6:OK;;<Uh!gA?uCqLS'eR-^`qA^?kg29N>q +jFNTP#I66()hM(nWEhr6>>E36\X*[Kg-_F3S=@^E:.n.LE.I(_&+eQB>_qCo>iNR +"AF$[Yqg62d:/EfaFs%JTI2I0)eD506U=7XqI8h/4KpO8-C4j,@ZrRESoS]BtTIp +% +:CN`p)+C6s#CNMt.me`fl]";!7F`1i!'q@*NaVFp(mF.Lel`B`LQ-Q445*?N&X+G +Ct[afG+ZFkMn(4"\A4c7Vt#+a8&BunnlP:/Tn$R)jHgB%\$ceI0[OBWkHL\CTY?G +W[b/fAtsRb,ZbdrnF+0,o*E(=d'cI*p.->Nt4"[nh-il)GVTOD,YI<hBo5Egppkk +d]l,1i@I&XnOa*c"?P&24"$1*-GF-J0/`YG?./`gLPXBLJ>g0(R%@#Qa5l)hQk:P +`#q@\]kT+)faD`m$Z*J@S"iIH6;TGKrK^-pR/Wk/5=u=n(1s@4rrD^f-W^"bomX8 +85W71dht/-7DGP_`Dsdq"Ds!G&2-.InP0?_<!O*TkooA5@kk1<)FmWB1<QEUAXG4 +1i&8[AD4GZAH1]qNoGdAsI)_W]oPV1c'F&9T)=;>H9ZBjA5W9%fYCi1%bXG_pBaK +OnPfBAUHLb#;"9/7;B]%LciOIP.=GT4\M,@Q%-Vb?uBF#@h2?9HT%FPg,glBl_+q +]5[3emu4,jR;qG6>Xoa7qC5&@MWT.3j+0tMmBlZh2l>0b.c6.PH+<j1@0JY[<i[+ +P<gU2nQIQ@8F2A+/bE=%eRW[,K?\P:3o8uJ<N`WN=4q>+]#E#JpS%kc)m+8k/ZuH +^r",Co"c^*\LgrnIl<3*PR5u8SK:%Q@aNi[[Q*%*1a_NCC=HRMK0!ZN9U2F6h/<4 +9$DfR/Y+BXWZZBJQ4LU0;@4j*bRF"l-)&3_TrOjE=ZRN'ppXGgJ!M_,^$Opq]e+Q +:&UR6)oUBX8BA>gC<#m#!fYZm0FR?R4TPk<$7->Q&?(]1/Vf>jGK(AKs^'c.ajRK +\pfT1r&3*>1)'t\(HA#C](iZ.`Z`+A\^aMOq-EC#+8M)B[a4V5J_H$$Hq`Xf4YY_ +026m!>>Ij\InZ;sB#ei4/[@?eTpO+lb3I@nq,b:;*NYe@"XLL]ZtFK&OhO-df<YK +U;cV;\R\?<4B5(k2]K(:P_Q#a%%VMYZAE@CocYHZI3XQa??I>2-UQ*\5h7Z'Qd8\ +'J-'.N!9[_NLqa"#4Js&aJD4T'PZ-k\iG$lcgo#R%WQ=Fn!c$NXNBN<XAQ#q+de[ +8D!dmk;Rk;3>*0^:Z6AW1[Oau2FM#1p16]acH_4QQ(f"ALLoGEu'b(SFRg9\%X_W +B$Q!)dRM8Yf_h_p(+0X8DEgI"XR.i*BdYIFM:@LUl[OLV4aoSFL"oj#(B8s*@%XI +fsaE\;n:NAEiml\p9hQ^*F4Fr5UFi;<Q+\(>K\u5HAZGTC2)r4!3RdpNUC:-0@X/ +^?9q[.o74Vl"s(IU\sd%B]^t6jC_W-&X/L3DJsicgc*c6'da(Q44\KX\RW^]Pf52 +"sYh)aq6MCoIQ#(P[bNEMgNQSRjbEga_^".gBmRBk%m^et<ZI>kq/FRaTlk?5gMK +$833J\=q6?GMV#3F:a\Jd#mJ;=!:$[bktL&V-Bh8Ym1jccOLke:n2DI-Y<q'bh#Z +Fd'0hl15\Q=KTh-;Gd?7h74QiKDf(jYj>obJ&BX^0b`D'mb"<.sMjFkL-ed-Ct:k +.-<NW?:.-)3F.l4D=(6Y:[44IrrDUuEW6$]AlebFikY%n2luNBgfX#h8DgCcpDM= +:2$Xsp`B.`(OqtL`>]4*0%KieGjmg%m?OJ-/B*_]pk`h]kP8C<u#8H1AHCobfUQ\ +$q^g520j.#==B+k`bPtd^frpg?Pr2QaRLP=7?rZ276YO]#VdC0^hiTeWZ$l1kr%" +(fl`;9q#g+V,VE;onT:C]14EBE!2b<l&=>0(%qH8=T"Xn>5-f?+j8LCBCZiVo66( +Z7_\/Mt;4rXJ5(EQpDU.dZ'03H7U)=.g)S.9@I<b$7VqjSGBH#\M+bVh(6>7TdQE +#'Q;Xq\RBk&TXE>)\9lT3+296B4PUmK+64W*XD%]Lp6a">6B7[HaDNIT,>&q*PI+ +S=X,`NiDnE1m9(Y,'[ml(rqS='`Al++=4D1a2,\,sA#RdF0.\,+ifc=;I'PW-?Up +ZuHZ8_PeW4\s2[aA6GZ#=-6Nj/?H.$;DGmA`!N8*'cW[mA/Q\Fr:QI8EV#U7G,1p +>#rm@:k`f=<rF*0U\c['VgK'j`RBTG^lPNi&b45ge3sgtriBnr&)gP.QFQ#rkkA? +uE,_Br\^<H/$2Qq6'EB/@bIoQnA5NTk55qm<,=/4dT3/-pd-ilRfM=-j#'-`iGCE +G=_2n>+puU/uJLWZalAB;>UU7#..to*CTTC"Y4XsYL<,>jm:7JVQ2A)hF]\e'&VQ +K:<<5F=h.$-W5kl^G;M'Sa'FV6XbkIa_6NYn]"73bWOVQ]#*4USX(fg2!Q0#%&#s +crDeW`k?E6:E('>u@57Ma_!u1Ct2pK#!q>#JZ#5Kp?E#0#C1mh&R@Pu!P=N(ao=] +H.hbKkH\@WmdX/l@*E"t`Yb0TIF;g5]j^khatYfU^)8L,Z_&;\R'_$i^3^9"HQG) +;B^2P8P't`qMnA['[42LP?kAQTK?\=b6)9,>0WkKiaig`9SgaNV)5.&?I2RT$gik +0(7(j8QeD^*H`)iB]P2JNU;laI0q<mVI-i54Fb<IB87C.nEsR6'bnL4rAI6'+R\c +c_6(</Scn('QJjen*D9=879qn_N[\_ZA(p)d)Jt_GSMX15Y8?a.'g<4]B<8tFTpm +mFad4LuPC5*3XNdcbpr=182dh#1)mEAd;?$VsJXiE/kq.71k[sCs*.NclTj_<5$o +WC9WWoc*]_CR4jtuqG?e$Lsfl8Y\9307u%'P8VPZ)$DC`c(_L'[7l,/qBbZM?lH% +QMLuM=B@KlGJC)pH'H1"Ed0rZ+a.E1:llIBYIR;3h/Y?<nZQ0VMNJ4C&(J=0-7eo +:<O0c\=U8MChJ=j`I_0#'"0@`FUU!9]SBb+&j;4]._L+4=%[Hj8QA?5iU]bc14E0 +X/rU:a>5,RZj2l9o$Lp"^KQ*4rLsX4gfMd21P32TG[J\WYS?chB<-UnEa/JLmb3> +h?@B-H.LbZrth%)6R>tsd^(oZIW2]OsDl$WdDO?-.Koij/t=]aQaqnuSQ'#H'^lC +Dt:AW3.5p@Ut%"\$@P^F7`.S-_PIcEJB_B0JlHG;6@p;mhGe?GU%eoMnV]iQNd;W +s?PCCWM(1NO6%%aEa)[GJC$RXM.LjIiG>HILP8l7_XV[=1u8$aX$E_V9QGM#A#:< +HRp?8D1#HN4)h,@2&&tE@<U/HTe%QkG+F#B)1#,k:i3:lh:ZHufbPZ2mPW3Q8M>a +B/:k:lMZo85l@#-)juN6q[-QBC9.L35iN:Csjd"-T3dXhcBta9@!;oknMJJYDb<1 +Q/aQ<8aNE89idc8)bd_J'nB=:kN(6%-k&DG$5@,!296o$OBp+(Y3iSMcIMRdEFlj +EKrP0]A)*UL0PGIkp+_=^E6+C2T0(?W?_(JU!uBsQid%6VKDB_H,C%>2<^N/uN7e +S5(Jj9;aU9jlH&ZJ*@?/'.0u7.*q#l.=Uh.s=r7Y@MH#jf3^_]>56[]q4mBq=@1g +0"&+]T]5k1rmoP:j@jN`U=s_lDm`'t$P1)pa4ctj2J7&,l+`VoDlEa*'6[NR2Fjf +ELd?sVpdsQ@7$"_tBAC]9]kk(/FRG3Yb'Tc^>-BG/NQ0O7*uB9tU+r3j,RsEJc)C +!:FkbP!X13OYkZN[pEslpQ<ui^T^@tZ'/FVY[@D9\nZU^dFkQs@;F0c(g(XPDQh: +l;pO&o(\U@u5WS]eeA<\2YS4NAeXRs$mD=rc,d?/OpA*5%sM\*R)E[%&X(76P`dW +hu2i;q^]^gs%mp\12;>)l.X!M*N!TWFRS+#IHU<#oaU[mMWj:`E>H.g;cPDgQ9Nt +hnD+_flV1E5sEC>^SFfVf#DF(koT,)QmD2W7QW,OpCN]2WS58$"e6H,DDM<b!.Lh +:WTuO)!LF(hWILY[,jpJD8X-gD7cW,O-n/k?1=T8`[.$L*msE>V#K9g7D!1ESrrA +ioZZ.;u/elJ!kij0LNPWScjF%u.R`Xk1A/Q<oT)P$F^e$`jR4]Su'q$?4NbYH"RA +>=k(*_p\Tl;+-lDTR9KW*4XnE!sq:(C3&;%'p9r3=`EWa%=gJCR`Q]sP/2bcia_k +04o>48;-hIU,21Lp/ec0]fdQA.(@`U-WVrP+VS>:<k0%-,J`FBptDgAKg$0`l3Uj +(/acT9PY$pWNcje[km8`R.rpi=-apAa)IZ)j0VS!nJFW)P*/_[6XDQ-^e2[0Tn_N +.I+XEWZtqQR3`l8R"_V`ZcPoWo]4@gmrDPfnRJ\E`Z&ec=e?Y^H3=0#KNSu\PFZ. +GeYDMc^4dj*s2B+.XXkd1XT[t9+benI$aOKXcC2:0bLh2:RLUTpWZ2&=3jda6aV) +KoG7d]8K`EA/+2t3;cKpOK7j6Gn/!8RnT8#k(l)U,%iKq7AA"i;;[!3(&^Wj-PbG +Af,D\+'aU(0'#CqT*(ei8MrYod'U&H<a=QY"3nqjE$^;ortMiGiQ1B'/?"C:&WJs +76(8CDt-pE'ThLN_k$DU-j[G1<5^`uq+n=r(iuPPfi&lUO[7dC$^euHi+-T<C,Y- +_2!mKk.;Bc\qs::4,\CdD*+?jbo&_diLjo-Vi4*,%YC9Z8/?<q)LKjXcC#klKpOU +'oMRo@HnI?WmiYjA[Sj5EcnVk"ag@kr4!5]uWC5]fPM*CYB/b)C#@/Eo5%A@W>.: +MICj_I5`*q&i"W'-,=iKVg;`AjDOj-h#0NNtsmO&aXlc#<&g^N=E1.24`<jDUrA\ +% +:u*.fd@E7+KaIHJ_H;WNeEV&iM4aqAZ,L89:?bfl0<\WPn$#!8A$p)9mA<2^e1G5 +EOdLWc5ST\:d5uYT!K9F,&qXoj>!#eQs8Q;`^5QL$kb;VNb6-ObY@nKPW2"FW[bY +\<o;2;rQD"pnLg@L*HB>nBN$Q9iXSb5'\`LPo9=@O(D0NERJg?"[L@M>uS&KgCE\ +![<'%BP,*^3_(dPg&X(I5VhpZ-]%u,e3N`+U1D\ph>76M)YmPf8Hir#$DCpOl5$f +5'VP_7MEB>0Y4ZqChCUFC/aS6sMItB9np-Z+V:!4lC9l-92G:QO5ZB)b5HkE95mC +U>tA*Y4_F:tpMj.U2<hcc/)0K)5OrrCJgWZ-??hl%XY;4*c72L-mcNh&bGqVcCDo +"sSqqC<@!=P;@]mJd1Ypsj3$a&RsknpQLP-@[5VE&YPq1#<a$#2_^/2:GM`r/g#p +nM;CBRt`DFC)l*[[?cNur;;HkijiRqCgq=PBV%\f$>j'eA"N/[<u'\9nn4ZT/-G# +mjZ4<H<^BSA`*>7ZT-tNJ4A-3`58al:cU7M-R.Se[Z\g($L:dHc%0baPmEC#0L$5 +b_J,4F1Ge<@s[\<)\rL4c!WZ4V2-D8@-fiH,,`#.Zr3lgR:E=WL@*11S9`>bB6;` +o,05J1r?6c<kM2)Wo/$&/?4'G7cO4sj(17ttFC\sEufg8<eGWJHZ0;f^\>fgsiTA +b`4'l!k1H6SfeEkcMt#f72UdrQ;kiX+lJ<fOQbhe@h+i]9a0>NpYmD">p,Yq+;bo +LMts\pHrlX$A\0kqA(<lR$?_-^C![t1iAP@l)4bQR)An6_sXgKarV&sVM?HN&k*Z +-2o-L6!"TIO$\XT>h*Cu?9poub?Oro?f-C1:/f2DJDGho-X/S8<2+)Z;'Cg+<i1i +*]JT0F-3/pog9pmkM81tHq\&uluihGE0&h(FK=Pl57W-9h]@i:<8..X@99=l9=+7 +Q:(:Pe#-AM$luL(?V@8E1k'UtX["6&ciI\VG=W(YS[eKCjl/Q9T55LOZukQA[gl* +1@iEFLj(BR!UmiRaQP04t)cP?P0Nm4c[ku7T:rd:0uQ#lHe3m4I,<`1qMWbn+0fg +rr@q]EJO9N2t[I-']]2n>+Vmlr:uELWscr*5=ralQt8j-iA=7[Y&D:UA,'=mWoD( +gl$dOqB0JksOLt8?8uA3lBS:?%'BupP3;BMaI+P\(!0&M1(+G)L:GUp75t>.8<m' +gRP12o\>ZOD+VDM:Ir7^pqO^WJd)fo!<PJolpp<*<JA_%lT;7A,()$EnQj7+=$@/ +UHLa70L_\Zm]+B33^.l#Kn>g1WPKYR69h_RY:0_h!i5[4a9t1q^QS54uhkB*;KT5 +i<KSg-'UcBF4Elj5@3/$S_4C5-sD`cK6UDg=uRG'b,=,!NE3[HCpc;&W=3LjsNSL +JFX2pn577GIT[:fnkI[A_R3Vr7n&3mZTarQn4tj9CKhIEE"8J>j0/D''E(NlnpX5 +]qj&96nBFBlV>AO86D472re2^4@8?dML>k(N0KVbK(SnaJNS_]770Xo0C>9V].GY +uj8`]E)8>#\%e.qj!WW]X5XKACoSc8]CBqJ5dU4;W=YI/@CO,;4lj8BRjL2f7uAo +,t9a!\/`REBdL3MeZmgB!KIa'j^cHB9tDWgI>>n&f4DnO&-]-lIkAe&=-TdT!d%C +$%?,mF?2,Z()/n"o48.[\(nlP"oXP97,jmaLFg[>RXkdV)l+,-is3cbN*'C*7sK3 +HP+q(9e8WcYe.j2EUFKRo5^iqYt09?Y(PGK\(56ZZYu63hLQa3j>s1X>1tS@5P\j +qlE"5o)n.I0^[VT]#fl*1k5H!;ao&2t47]B?g2K9q)^k6C'-,?C>JoRT"]f,W=rh +':_72#uJZ34g7haBuIO*Jb726[MZ1^4F5,F#8UL^4&L>Up1rr=orgigr.Lt#Z+P` +;%*WiLqj,L&s#:hPX'C$@Jt`o$?.'u`.s1@hL2iVAZFoB4[G5de52'(:EaHpXXND +Qhk/H$e*k_c'RW,sN#.bbo;OL&V.aBeJplgKfNVLi>g>2.PT&Qt;#dP>ChUg[^0D +nPm.eL5oc24Wb9Rj>gFA"0J"NH#7MI'\D8fRmnS*lL6:/,HQRm]Ou6Zc+$\R$7Tp +Tg$\[4_&h7]pE&HU[E\Pu=EbD,@l;f%G[$-Vd+!(<1DUaKAWH`@*1&`8q4A99GIE +Ms\-2OcN<R(NDqp7H>P[P+aD^9Ec^:l;rFtTk-]-09L\Q_ddA2lrdoRTVT4;F$T5 +D=*'*l,"LCQQ4NF+JOXHKK7YrD8[2)$\HL1b5E%J?*:?o@@7Mr-m%8]:B6,2A@P> +fkuE3n_EUpZ`EgTrY?4Re)oq;Td***l6-3SbB-c4<hA6\bO!tePF*lH?+(<as1\O +% +'C:QE6\!W@,C`WbcH$Urr=`!OeBq7iqsq0e>KH6*'NlK1sXm:BteZ'P07f+(EiF_ +k@Y?ej)0kM.cYBgMCK.$$qh,*Vdh0T.,^Q<NKL[uB_Va2M;ri^f\S&]OAB4eF%YC +1E]3+52H9=Y<up9[>m2Gl:J4&L2FuKONlnO?iXB!q?PTWbc`aKpH!c]%)@?*<ALf +Hp+g&RiQ.b;;'2p_*mAF#7_WeJ<[P:dB<AHd.Nh[AY8`%Ho21^j[/qtU&@M7XEN, +<ZU=&?LSN6^45a5!\6r'TQV'We"1A#X5m.OHd.8DZ,4Xr]tYdI?$-eaWJL^RmL', +g"8LDHiA0*tn+/IQ]tm.r/Xh`2,,JRa>4YD_[W]<B_^`<_8(ud[k;5AKf5BDRHXq +XoAAMR'8g4"_Oa(eC7+N,de0=mW$HCA@F;C8$#]%\?\U$SD@+P_u<MQ=Q59NNZ*e +1:=bKqfp5c);Xjt#ro)([rG6.:?6eH%r,qn/S>rHQm!FVeXhuV/8QS=BcUUn7Zf? +BiCOu'_kP7`hmJZNQ(gL<Kl]Jr/VnKho=KF)tXc9^m_*=PPW1$4?H09C.mX)8QIH +7GegiubV?RY]V0cpOIP2hdPC8s")CE&`^`2Z0B219hX8DtDl7K&&*lZ58sH=dan; +1VdX7:m&ePjeVP2F?M(r2!jt+8D2.;t\3<:2O@\?7F&\/nHTr$]jd[;6@"'T+e4c +qF2\[j`\AiP-TS]2CBKTqVhGS<=4gD<&!lUO'kHO+Ym<3C$kp#kqm:qZ!%Zac$KG +Z*Nes"VcJcgBQ\s9=[9Oh>5%<j3Eaud(VKjR.ji)8V-@t`5S^:EBG#$@LHqt`<PJ +]L]$/!70!Woa:?,;De?7nPXgQPbdG:t9GNr@j`2qnObUq@q7DERCrn>rJ.nG"Bn# +5%I8om/hbX\p\IW*-\T+mS/FDJ<f*N40Q2dJXW"S@5Rh*h7d7cql?maM>e<FqC;% +qILugXq@+[b57?DX2H+Z[(h4.d=A_ojcmbeYnRc4/*IAhfK*dk*K2X(Z3nf$2>71 +Ds[fiNRo]3o1!qARdU1U\&nt-IYZR1><:Iim?$Uf?D4ZaTN^()Gq[9B#dJ;j?u9f +g;.I-7@DM@>SuO,,gsoC6r#d#T>'gqU/@*[S<PQ2Qejp>IXFXgtKfs9j"NhRWXd5 +Ze$AL9t0YPE5?qJ^jY&&"#:H)6+E3V"]SVHXq%m7mB=^*gR4ZcGb+8hV*5DaC&S5 +-#C\?NWQn:U1KH]Qg]o3G)j!"[O+^ZeihIM6'h/$XDm6)MOM>fg)OeeoP,_6"q7T +3A25n[Y]0X+n'!3MR%P38'FV7.I%IG.h[HYcJ#Y15oP2HJ.,28D-3$,?^m51X0De +q!>D.cU1Y[iVC2g7PYfarGtHrjaUOpJ&YprKn!@eJ&YprKj_DK"6gFV^6.',m_gA +eRYcuLASZ[W1!FNMelNcXkmM/ONJu%$XeVY8T:3^!pdRm0N+WZ>VD==C<_=]uR_= +[iNP/BIl<<POa"b\O)-IDbe.!**7iO3=38QK6DV(jR_g!Eh2!0N4:.JC!YBFV+Od +ib\quofMiO&'VXK-;pR[0A<c[1^\!eRb;0oqesJ8rGFOOqW<O-SNDqghlrTrP+Wg +LmRO48dr3Z&ED)2:s`f9g%'mZH#%=BOiYL*grI8\!j52nS'@^"SC/D"%;)fQXBr@ +RcTmaYs44A5L?HW?7Gea+6XEO6%d?d-$Q1a:pIF77jBTAXE88q<89XSoU_1F2dDM +:ElST*nNH=,!fQbFMH&Un\f"^AiD0G:^sKUgm]nU"WWUsGX!POVH%NnPHlEcuXe- +6(IO?E^G[W;E,iuA7QG-fKgTop$(gZ%:qeWA$]"'g2qPc+77b:CPXF$4TBBs[/c# +9o16DS0^Pjb%f:T5?<i&g:%e'g!>:JSpI"EEeZ1fsa_^Y+'#M.%+<Wc+8=E7q+?M +pZU.&VlZ>:JJ%LqlEEn4Ek.4KOW:i%]uGDV"BaWP=Ghg>Ih=j'o1_7Cg?8jf>WMB +`nsrk*$]CU<Zf6SCBr3C5.[oQ<>>XZaR=E/fqQGF;rm5Qk$/i2Ha*E<M'3=N781o +`IjrD5(^R>j;N55BH]1.lF&DO_83cFA0D82[[6-kf%OV"`k;R%$I/LOd[ltD8Xin +3![6L_-\1F6(F^OGC>YT(LE,Y%/>QYcOnKhfXqK^#m1"\n_KZhMT2I+oF[`iQB?^ +0njrrA*Srr<[l^PI,lYDB2$N7-2"Mb<6(`Y4fV])C,iqtb_Rl"]3a)3="O4rNuoe +O8HXL9^h9,]C!aS+'dj*&7r842d2%Tok6gR^9s-o[l7Dhh^X"49#:\.Y$)9WCo<\ +oY7KQ^LoNj!_cf=096H^K'!D04!pOg64NmZ<#?,U5g%A,a&qTj]d.3IP+3M^k76R +F#ki#(<K6P:-T'.0q)#KW5nd#l/;1F+i"^\G59/Z?\4.[g7BOJ43SdNPa-\p*Rr[ +>s.RlA4ar7Pa932ng3(>,F'8Y,CS'eJZ(RX<?^:G'mf/IORZ2%/7M"C9'^Z%t^a# +N)la!a=0;J7d7QcftgB&Mcjm'spE.ntLSR[)1kRh%*r*s-BR.MMB&,kUX'5s.e?K +4!(PV@hT!AEq?f&T5>kUHKD6@ha"\mqm2:VqN-MV8mhA(3V?fnm]MU>`</'.M69N +7KE1VVbg7*CM9/c[Al60.(H!6/pBihAEuEnUiu*U@*7koc+BLP]\D)?5.0P7Dcn0 +i;ICJo*/9342O]8UBc-)T`\\.(@lh1kY0_Tl\h:m9k]j!6PR#AO:55U6m@B"*54G +R%\4?CJMmO;@7<3)h5D*HnK_^TjMhRnD@PHB\iZ+AckL%MB&FC"83%RYnT@[nWRF +Jckjp97>[6pGPdX<[\H-+\*<kXcg<G6:-3n400Y^pb#rh!9g_\Wu5/)0p,<<Kb^U +C*mCbk\L51T;>g3Ve,hn@b-T^C(Qo\6&RXDsUe6.\%D<8kr?q$&-_BQFf*43c:Yb +f2_g9Wf208loo/85)UAXBD+r#(dk\%D1dVS<oEO>fr20C)c;@Aa4(ss3KVJ6ocJ4 +pn4MoT(krQ[ePTC7I93io62_-45FJL#=K#I@*!4NH/qr+FDPh31g/ej">F*6$LI4 +M"Zt>[bg[g>ghS+hF['mct<W<'!eQ4C:5*d`3JYp"PCQp85c8+SGo_>Q'FoMHdpf +mMu/,edgUYs;=*ic3icLg8gj65;AO3uj$hMnY@k.Z/YU(t&AJPV0^':c/'MYH#YE +:mN7MC9@%2Zgu>pWO;,95175nnXb95P&-P-7secC?3lRPXCX5F5K*'^ZSlg,:,=H +!K%O3+,IJ#4gG*0'VK0/gE,\F)k$-IS^CqU/TL9FOiOCONo..Qf):k&0Pue/@4/N +f?k2OL7q)fg5B%AofME&9,HsE6U?Q6NOlrXaC#W<@4^t.X&E1d1W9PU=6oAu&l!c +6,U#W.8_dg!LWSpCK.!UTP*f3&b-"P^-\MkRRd:&Y/>N]?`LZ^j$ZMI'BF"M=M]& +G8R#U/QM0pq6VDhZWTaSDV*iP;NZ)oAKf(k*bMC2'M_OmILhkXV)[0s2&)?]4F0F +H<P@*Zic*k_t2.bfDXm*Jj*oaS\5A-H78=J_sIm/GP5A;*bq?B2QCS-cO?PCtWl\ +HX0\0J":>(=/T:Bm),k'!*E^iIr6Cde_7`4UOs)C]oegaasl=tJ[]JJYE0kG__i8 +(;U,4A$3kl59KZ%SW/:',,Ki%R+7JL0daa7_rkXBi!3"uX!6$>!<ZKRg_pV-Be*d +"Ena8Q3jbr+T^p73^nPn*reM9Q)LGulRUAj6V^[c\Xen7tW/*$dJiK)b-^jJnT\M +6W<QKe/oDC4>N[G49,`TU;90-QpR:)mTe*-BKS9s;'%UrDh<\d@&bU8rlH+1*K_g +On%&"VZ0hFhWni.Q6'?mVs!\PtJhMU9)jn86fe'":qMu=Qr)&#+)mX]AP$PW&^A* +;uB[7pfF?Ci7$+0&Xh(j"KZBejhYCNL@C$S@>6YG<_#Yhp9j'3ZZgTI"Sa]f*b]1 +)(i*NANX,0-`Zi>A=8NVG=n>$`[X0cWh*MTh\Lk<0>sr;2W[Gb6U7mD2?e/M$bfm +W;4J;=tIjE3]>fbf8*Qf"WS;unk?1a-H"]4o2-u3+,`S"nZSSkV-#:lmR:EkWVq% +P\&.FH5k*lVEFp`T+AF\*m,Am.adNV,!EUR`6@/cu$kbH8`2iONI^oR(86ArSXpc +j:Y0MKGJsWb5O6+c<8e56aMU7M52uL/0[L82-V]`FJ!u"n^%RB'%(S]&)G-2K)-X +B0(@<hJVMto9b\hl:0aj@i,YJq=XYK=T#9RmeC.m/a(r"ga7tdWiLhg^`:u]RV?$ +Nhhrd7O<9IJA&ksBnnT^HqLj&t4%$lMZf4u09[fE09f.u2R&5gKcC6>fFq2Zi$0& +$hfQDT7o@Cqi.B7!mDMfcnGZ`qiQ,@`L,D\DoK+F`UVQFp5RN/JXc#ERO>BPkOnQ +mX13dU)-;bY3[e4l?_(:NskNq-QLU/0c+hpF*Pi`R;iTs"BOE,@N?iifM.)'s*dM +^53l%&-3[POH_4r$>9M*)2C'K+N/o79:e"eM<)e,20uU"c6aE1K8?&.U#G*B%4OD +,3t)g%N/ge.hBY(fsqjMCosb7OEP\mrJ+hs,I'pO>Vd"U2EnS\FX::_W=+$ARQ/A +H4k*TS$WakN_kY+`kTuYE9+@_.o!jTOet&<G2EA\MJ\s#%]J>IKp79k]:6'&V'N" +>&'2a9\kf;["CE6JErr>!"r?FJV54tJZF\2l3Oueo$WR6=-MhgQ%q(\n>?BTU?,J +n/0%U!,T(e^]AD6S/ClCWlWL:#?)7n5[>bh2!@k)lbG=s2h.q^.K`hA+qq0D\Hln +J^l[QP*\24iB"C)T6*F$5cJ`>^;AnN]g90!72I<6c@LIN11`VP8mVX+ZrJV2Hc`h +*9+oHlr.F7GtQG38`Ha[LV`L.*'Y7/M<c^<<-TE?]">1"W"HCbC7c<]i>>T'KkD5 +-&&dJt&:X(ndkf7V2YSc#_;03Wh.?oFPce5b05Ip1>f[r[^g(!#d^pc[6tD_=S*$ +;O\7]AqI`g7=RdRQkq%fY>aUi^p?j\'AXM;$6A91.eX>Esk<[Un3Zl=:bmm^m/ie +<r.LopFrbH7JkG0GT-^r*G"'9.Y%fH!oH,6cBH,1jihHU(;I/8s[$KQ=FZO2;:## +(u!Fd;p<F511*s(`;]q/;ke'4+!Z_Hl"Kc0uM_lZ;\Qi\G'YCSF,0dGt,L6(8*_f +^mQ1dBTVKgL<Ghs\JDTcem;9r2qX+W)LEDJS]%n:d@D2W9q4-L+FH,tTubcUBZBF +Emc@u#7F-).(iLAB>JG=2[q0'XkidikpBO;<AYLET/gC!TrYp0a1;%6rNek'#"=% +=1%bFtBiFW;o!/e?X;+95b/C-BS<cC*"aNuQ9ls1g\<bf"AgGNX4fgI*(;*>[hRe +[6GkWSLmU"1%N>h5%7J<'>+95I(J-V<:j,187$EeI6R-U_/KX?3+<#HMk]-i5RU/ +l<FnQX'<TWZh980!Y&>Q\tc5Ij2Gu/[nlkqh;K1fT'k5[!7Jo3it:2=b`ro_A:n, +g>K-=AYSK,4cs1Mg"BuKe$kLf^jpq[`T4-JXnEsdi)aQIHE,9SpTEpJD-=J$j>L. +CdXr&.Y(L(&GPI*0bEWHn#0!V(eiVM2J[j)^`*,I*\f$ON7YpL,G=S=h:3;V^R1O +h0LTp-92G5jIXMqYWnlBCSrK2@G:@;1[^Z;L8<fY^4l]l'C&@.:^QsTH'iH#:1%; +p`8e_OB+X)bE;+OM45h,q,beZpCM<]_E_@-k4[rK,.e+`an"&fI,+7+;*#(X+\Ia +ic=g2VQq:24>!)RFC:67l:OUFE_!@3p4"NkL/0:kS^:e%%(etl(SVg2L"eQQ:;m! +\P;\aAUK'X+#V5`@Bu-^_u8t+B]!8PAN"4Le%,#ANLGSk+SQoR/IK[jFg#qM\cm: +1SX*j2m"?q:%G"#D`lg9l7DR^Q9ki6tL/-L)_.NPkjn;ti<LWd[-b%jYRb8^m%d% +% +&_7I2-H:&.rlNHGr3H)2c_l&qKC9HA5h.GKo6sBDp<=Y?s\7cP:iG,\7hYSY@p=_ +@VTf9Gk,&#Ld\^n(Oei%DIUu'\U2HKUAO)X1(qSWl;A8=HYelH2CES)Us\ue0VT$ +u&o3\PEVBUmJD?V0`m.,2[fQ?bP:):31PSdS2p[?5O"B(f#KqG@aT/sC,*-FJlCR +aC?%^&'AN]ATkLRY5]D]q_l[T&!22lI6Mg3*?$X+?b.'?V.BMLPOTAM7'qu/_#0b +f]]W#S#b7DCZY0!*jG(&dAoBq6/Plo#*"#Q%aF"g-V5/i38HL4pXL$@`9imfnTh! +&2^`'qWqQ-a8FKJqg2sF*=59nZcM(MrY&!r!W**RJ*Ah$A)j@7-jeFDo\63/840V +b'Vmp(4b;8cc[r%H0?>E8AZb&Q='VJrVl5>K&hoQ)Y>\Y$jfj'TdCp([N<nBN,_5 +tec8\+1$V=?G"CH*C->o]7s'kD:KmT%04:*\]2PhX;65Hd]_?lqqs,hLPPQYujBU +1\[Gp,4%!iSCHGO3;N`SPD%^h#>ZR9@<)f/?N&Hd;RFnMnIGH-N!/BbEk&V;opsH +2q2*1GSXEYV[)qd7.ru$FdD5o&9h96eRihGg+>I)Q;b)nd'#9#]rRSZB%j>k$X$V +fX(%QBBQj`E]9>ku=*9gGRBk1UKfk!a\fbL$dQ^Bhd4ricfmC@\NB<+5QopRj1k# +*qPJ+C$^]24P,nL(W!rrB(!WiE*!<<*"!!!$"&Krkp;.4HqOeE>k_9qc2s4RGY!< +E0$59]$hEr2524+Si;f<9Qcic!pJ.!M9]9S?N@NG83AogR"VK/XQ;%h?GS`Ddt\1 +$ChUoVAqoFts([pO=sN>B)[rOZSV9`Di;?;gOGnl<@j\`?W;1UVkl&Ff"1(q8Y:1 +?9Cgq^>]fWOGW6j)RXQ7\f[M&KY7)2.d*.SCTlt7`0`_tDm4a&0`%-`/j'SrPSXh +!*EJ*_JDkISWuHK"b3n-7W0pW("'*N&[\8&%,pMF<)rgS$qko$J^@7>X(>O)Cpm. +#d<W]jooFf.a700u<R>?j$)S/jC\8;F0JpG3)Q6O<4*8=Xql>ZeYJb\Qr;eS2="' +D4G'3kjnJ'XNUWBc"[(AE=lm>TLVmV[b7H0N8?+ag_&?lq+_p!flMbQ?/n&>X]J# +-o_2?4d,:N>Zctn.L9:IG]'sk@bDZ_,-U(.s<lQ3G93L_Q7!!n[u*"A6,T,,=2Ts +S_"JAU#T%rk7aJMfm8u5[a.f&oTeIW`Y>V.iMBjh'5:DS)btulW32IE9u;BT%.@` +o[9We:_OrjmGk"XRZ@PHJ<2_sE-ql!nW^T9(@GnjU]Ce/A2C$4k\;Gj.ZgDS-D,S +5#^>M0uR,u*$6n',QQ<eVW34VUILWjR`;1=*1!*?'jQuHqI%l*HH[(bL^qq4UHZ( +fA'4jOSFNV<JFb'8KVU!\[#.O>l8i\>Q*h86,B7q@+(QJXC*kqY(/I-f4LD)L6fC +ibrifEKc=9IGKoH'mc\cOb=I*&ceU%k</<Uo4%1KBAS8k9:UUSfkHiZ4+&Mc,7%) +K'ZNoK;91iqACBg9thFae5-g#@bsa:o,,;CEq6o&.u*A0[C(GroePTJ!/Xqt"NjO +cHG.cepg6G/rr?SH]Z%bY&F>Zio,43tHoI9<Q"TuNGWb>jc3RToS+g<OY(e?+3fW +-U/qY">H1`QcKg--LO*E</rK+oO9*%jZamB?XLMR?eE&)a5E`i)[@BmlcJ]t`HE^ +8ZK66Z:5jaWM-mb[F/O0#>s0(Z'fWioOt5dFhZk<BpC<mG5Kh.Z65j`M@&"nAXNW +TBIY*>,>LK8,`$l4AS??Sef,@q+9U4lD\M%Y63MLase\VZ_e%M!^5$"Ki>SF$&Xh +)gHosUmcmjaGif1)*q"Q;[B)b8lTJ"U*.nLIE44K/58>c/IhE4]9BMF/.lpf_he2 +_1@Qg:$)$c.9X!.hO(+ppfdLT;XXf5]cOB`3=o%F#/G&3PbGaqPG)Q?/Q7,D]Auh +j1ojR]^mtKEG4T>D<T91ZHaKt.gAPRn+_T@1\^r'JrW?"iQALZ5jS8oAG:mW+43, +fElY*%5C3:UrA*GeK3X,$iA9*qKcL`PE,/c::`>i?W-6/A6adFd_KQ$BiToPD:2P +a*&Pi>-U[WmH$G.8YcDn`jKr4sm;K0'27e4edfpE6k)/)L*5+)";@8=2Z5LETE1j +>nIs,JK`r%Q\\/h=L#S$@dd6)EDK8Ae!R#@-.]k:2CFp_NAPn#RI8.(lt`O3c.=E +8*AQ(eg8ahbh4KO"K3<0hjb^Uk*tP6`&Q$o2e.`65&*fPXQ\7Tie17uc>dLY6Zuc +j`DYGT`]ENZD;Yf=Hjq3D;.c-$)Wdb;(OJk9LND<pd2(Lk>@oZ,<#b/[;^qVZddG +2/P4@`r]MVsQU_p!!;"VGu6WH#2tkr$Fo;QR8MWL%I)al7IikY'!D1=KFbXQ_4s+ +A\h/QNi*EBKSWu2E)]\=6r#MMU\Z7*O$0;bWB273&iZp\D(*3k+D!%)EB:m"771: +r=SRbqNkf(/Uh/S@6r,AWF/4t>iuUHM!J;aPgJe,M@r.=.fI;Z(P+*CH-\9cTT`" +[$Ync5-UNA4$&IgNqVj;<frf4KS<f=k;-KKpBHfekd!AN)'Ig9pE'QR=Fd4BPKF- +YQBUZaE:S8i=Xq.NTF-&>+`Ce5a`3`b2SP)hMQ>sf2<gM2CL,7%ug)fX\Wnq='N` +Yb9lRF<W95&"?I7nlq38%7ZDY4/jXpd^t[a`H"G1G[O[k9"Y:tgn424\bIc$7JBR +1BI-b9[]m*K!r=0fLi/N1NDV('^rFY)).6.#pkIO'1P%*k!cg07Ao+9>d9FMK.o4 +f"F8B*b=aF<@UuCP?uT'/.lLBgs^c8@E#+iA^F2m9qnuDGeN`?a2ZM'gVr"/72XM +sjDOZB650S4iD#qFe0,$@YTb2pS(%Gj;>P82AiJ6*;(=$j9M*:EQc=O76t.2QjWo +Bq6l#_%U^t$8'*/62BaFSZ8Gg6_]CPqR\W'D#A&OWu)i_HX@eu1NZI<F^,rA@M/c +PgZ.r(")LBp@NmF_Zsg0Y':=N$V$;=(CW:_`5L$pG8@,,M<_UE(`83R[E>H#+[OQ +IpU3;#SSBd+C^T.<&b(LTpFZi*o[9ScBI)<1sY<FUZ'E0MtZXeQ!?GZKh?BA"Opp +o#.on\D*L,b_Kim"gI6i(u-\k%XVr=Sc0o8V1p(JeDmu%ol6a>AQQ+DOWQFDgHD, +J6LaIslgfi1@tei.4sjMkY*@2@R_nde`&MT^=KH>b.2o1c%Y@LdEJ@`c?5O""g(p +*spBI8Lkbo7feRFglN7;2SCoR>7CBL6C'lb4(K^,RV1#5SI0acHp$K-Pl`,de958 +7qC#S_6u<GEFLY2q89^p_V>lkXer%AKa#[&r>/nZWjj7g4X<7_WlBLkhn.PJIJmd +qCZZ?b!$lK`ZPCX['##Q/X]hcOaJ@<JA*pFs.g72]1FL1`QZ24Tq9M)<mnZN!ePa +qM/oo?)N'_6XPZ/3Am*e6Cc?*ndL*IQD>3oEu\;l6@Lc\J):?MFu&)?A6<'I;<T! +V4HK]*l(CC[J6@([:Uk6`5JY7;D0QYH2b]MIYoO>lD<>klGG?+p@pKrW9"Y!jJO\ +DT>00Pb<ITPB_T[nLMKhEn9O$`[i30CF[eC>Ai>HW3Y]]Ma8jt.?,c+75Z!HX(6U +l&07hi(*qaKN:eH!;*ML%(.1W!K2g^%bsU<-LfL4asgVPQ.M#2p@t+b)MbOfpkVT +5[bJ+<T+m'9LH%nJ8ko*PL[a&L>R)INWfP&BJMrd/O)$"cD"8ie.J#9JneK71g^9 +^d"c"F5sMqKK+oGSks(f&4MJMP*JpffC^&/ldTZK7^WIBTip5?2Eppa\R0$umV+3 +rhn!R]WlMIj=]COM3N1?*%B;YU;X2QD<I*,)&e=MU/uV>?,@V[>Qf1'5q;s(,-3/ +k9^sl4e-MX2eV@WB>&u]$s$.C#I0=!s\C;Y3en0`qPJu6Oj""p2-"/DfHa*X=S]q +r@OaXM<+J\F[p^sLVYK>S;iQcLdEQ"0_+55TsIYFV:;+qAhXHA7ZF-4QfIj`7f0E +I?QOZ?1a@B:.sGe,`^t)0T@83r;;Z[H(nIR"nU"0PXMP6M^<o#o6-)L2WK/@+q*j +7V^,n!P_J^HA,@3MiGuWmJsBA1ja(%*H<\`/&o?60G/7)6#\n=#g07c802>ReF\R +^f8)#FL.n?L6s#T]/=R,ZD"T6Fa]cO9+5GhB;]s'8XK`iT%narSIBoN(VbVIM=M\ +F=4&W*M6%[YL.g-P)n7]s:Z'[L@,R#j*rRenY_crS0gV#p$$n/bb>.q27]P7BG** +/WVQ<ZL"G"mRhgirafVf*qU]p/8NC*?[+.r8>,1m`r5:.64nbdbdFbsCs\j?Xi6^ +[9d47RH/7!'#rTrP!8;m)aDB81S]54T"U4+S0Z/5g&$h\jgCi06/bgVA2T1#ONqm +G9;m.3^(c.VGaS.\Q%0o?dVh'!\IPgAO9+h4Uc./98@p_8A#4AY6/i'<.MUt_]KX +co"gR*YP48G;/T73:=85#qSW7[Ag76T2$3mU[7CArL^-9H!24NL\&o?<ptdBXFk> +J,_0RO)BYP\0p)sSBo(9sN8e>sGgo+<!f@n]IcIE-)SS"_M,5jZ0gT`3eGP'Oo]2 +&kq973r<TqDS6NNQcPc4>8C0sA+,MSQ@Ob]Xu,(ZQ>=aT.#W=!(4GQU<pTXF)5oX +/[M!0&ki;E'aqfomh`>kpL@\%,15.1=9KC\B)C,/:uK[(DPiioZr+MmO$VgjB%$1 +OU(O6ET/S?VH%NtSmTJO^g:UE"@O.E8Odke-C4nul&H<`3'PcX(4]HaiSKOrUWrf +=7M+*QF[+RR$1(=b!*t6H$^8IC*q/B%Z)7kQ1Zc]]m5ZGE7'ku0%+0:PIAegj$[? +b-<[Y0i3O_'urB6.(96!*1Yu7V2K>+IXhLAW!`3eu.;qL@+dg?De_rHW18)u[[QM +*J^.N(!1i&1Ep9o#Df\J0C8;f6=D%SY5TLa%@+LQJXHbL,5P%k25"0HZe_30o]b0 +aha\`)QF7;Mj7Y<p?0_9!9@'r/V8Cr?&f_;9n@?:O)$/0FV<Hnt4E(.g[>e:-c#) +J^pejTG_Xk@:Y<acBp3dXNi,pkRRtgKMGq4o`,AOOt/M\*hV[JjkC]DO$i&.RGmW +=oL%jD[-%PFUDi,]DDM@n)K..g,"%kpB%MlRH2c%SAu!)f)=ggu^3=SFY*)"'%g7 +'/9CO8n83e!sDYGk(S*R4A2`36)VYg0Fi9.d+qU+slV$7E`?)FG3l5p#k71KX/jc +<6o#<iGmd&B=Co"&oeeFsTMe!@.aOQj#mH0)"UiQMTFEFJhX.F>nuG#T+-HD@:T# +f!'k95s"IrrBAW'UL:MIH>_7dKhu5j2gIK;3@,7'<MZ'%mqi2dnK]LNj898-LQW: +8fU[rc$2^aiSSZ<-#(kcH(Qgko/JB8K&F)QpG%Oe\8J3(3JL1(%=r.OFNJ=d&eJ! +-hOXbk/FFF^Gl91R*m_d4EqiD4[Te/0fT8iY]Ss2Kl1;4/jm.`+c=cq05K%?&mWG ++*T511)ee:2DqI8q)Q@Q]5o8&e1HjZL55VE':\QPm,.iIe_BATVhAh>%lRZ)ta>A +i:qF<9h#^$PF7'8LsE>,uW,GZ*hBe`(4W'JLV,Z#eaE%'oRj@O-A9[-#'gNBu'D$ +V7246]n)CYmp9BfCfOAFV$^&?cml,HtD\Y"t6mH8j0ZqnCZ=<q]RTW8&UeC#Z)*+ +RDsDd%'<2HaL(c9-\a#(fJ0s.r8W@PP*.5!QEl#TYq0%QmNpCoF,Q[LbP3U>joct +A??fa>IQE]@Vu\fN5@m=Db9hp]]<4pc+VdAr\^t%):RJ-a`l&eA;ZrG)4s7/nU=1 +Um$'UdKdDkD]8A2k\(]ZOR\6X>3k=Btc!T>7;5YuF+?C'eU`3EubH#+7R:F`+%3A +M4fMIH3WWe%(<-N;YjoZ@/^^nRt2!8EhBlYb4b4$1_fYsAOU#Z4m.ZK:)Y:V%(9k +Z#`U-$.P%nm24>Q8FZ<`Dui!:q/b[<I:Zi@\jL5'm`r$D3IUM_<P:4LsgY20RsM" +?0;\m$B4Td>&DP6X#gCh?p:UKblb8C>Q4\B4g(lV1?+VX0dh4hh1Nguk)!Q,c3!S +tVjV_:EeCp+CubNq,mVt5.CBuTP$,5skZW_?\LZrl;q&k*(_WM1UU/VMYD<9^a.8 +% +>BUDD;=A-.:?HhpRlgR;d^oJcn=UZt*\YW=^#nsVs_*d"[IR5+:a&DJfj6Y*5f1V ++O)Q_EU+m^tU@IYsL3HNW`WGeJN8rTLMf"1K`K^.i@2gl8>Rd_VpKmdm_)NFi<$L +a4>I**`meQVoEfMd,3pO<9FS]r>S9DqY@!Lp=<-pi3^4N>HG.S?&Jk#%sA;`snHP +Jmm*MtDZBL1%'sns$DKqjT[a&IY&Wh@\mS4WM[hY115TYg6qu*>^hkNBP4'HAW:# +oSOLsm/k/C/5N-=6\:R>E"+8YD/r/OQd:o+=q>YV!Zid2`FFplk"mm@jXB\I7t9< +bJU<@'X-1mISdlP6LGGKbmnbhHG:WN](E5A%6g+:F!;HCIi/6f+Do>XZ(Z/cCFW, +7q#AS/KS<tQ0+!93GGg9R;;\!D+LnTaAg2gRmCbs^2rkGE;,u$A!"F.oP(:kM2FO +XK[FjLs_I0!UbOYJZ+5Yp:r.3HWL4b$>QaNh:&a&Xd`dS:/G>B+TC%a5q!Zr#q)% +CUH]IseWSp!YCHcQ\N%kJCD*:qZ/`Zr*A(]g7"Rg1+b<le4@H*,W[emC8M`)h1sH +18Bdh$.&m]OTgO;5<usArl7S0!1-W-V^g@nA?=qeg%qPId\a%7?)^XKGpLhQ[S&4 +/H%l+d7E%",q-4(i=%k)5i"!L4_&+J=;t*#m9@Sm1Q!Ipho!s7*788t-qh&%Ee/$ +=i8$=_>3u]V0i*.g8G1TjqGn#u[%BYOhg]m=S8EsBKDYFjG6\/_83C#Z]!Ab49a: +#!]jT=WsDf/IFrlH')EFgR*2;lO11TnNJmrNj]MKFQ4L1'NV7N$"tGnO;n`@Y4ag +2jH?8r7S\8hpO(Yg&uoit7^@**Wed:.>W4(^mfLEiH7c8DYNrZ:W@ciV&Q6k:jL" +ep5X^g:=<W^"Nb"!OPO;q,qt7=LqlP16/D4g9fe8b-J1q!2lQ,i97,GERMq$C[dL +R3r\ms'Y3_QpHA]rrO5rcb??[o)j!ZOp%D_ul0a,/QrDKL$Q'U]Y0rqO6qjfE9X3 +lUe[K.WaGN95lsjY]QO&^Q8s9'=E0nGlm&q1<$%B^+AG%i-7=4YRj>iJU:GL.Fo0 +)%F.ce+XPuMI]d*O:97qRpWFrsR8:ngj9ZEBqN\>]8YL,0%edk8b?]MDQM.8+P2Z +8ku;i:ri9PO<=D\f.(LESENmKK="CYAcBEiC-qZ<)L9So*K86R[*^neQ;i(rS9Q# +3l6_>G[*86_\9L^,_qSYfrtY%;F=9r<`m+N.AoaC?0h)*<QS'oA#m@BJ)DnE[tfU +`h#@A$+Wp^:ZFd$nEm3qn",(OY9g";$EQDabBhe*&p`X<mTkVe:UX\8BHQ>H6$o` +b\/)!d]joqn(f.c'#.I(>GKH]9.%GNXqIo&^;O7FAO*Tu$nbtR8s5/%CNW(M=O_K +,^b.E0J,dDa>+ZkfkYUHjIQ[,I)'LYk?(:7PSM[enYYVfEal46Qc3Im7V,d:bWo* +#[uDO6_9ACS"_S@tgg][44@#@@,sj+L;d<H&8k43-l3\*kOn=WEt6u!j8!&:$\1m +DeQeQaApCG8s1#/b"$sAL#1R07\;W=&nD-F,RsqG7eO^U"g@/AJ+ic'MVqKT;7]% +Cat8@_ihI=NS/KJ:TgFB<iI*:F)rU_rM?L'iOdc]7Z:!*X_$H]4e"onR<XTmMG&4 +;j(q/13IqS7*9&#-!qSmI^0^u:MWXf^7Kbi==_s1jlDoAh_F6=j2R>XCf^R;_pcR +If2@jp*g#R[e]+Q*Ws!75!3nrm"6FUQ9c(A<k&<J&l/-pm'-"XrSan6tGT@tG,lM +g?.QC>BH<nITcR(ol."Bd1VIl3_["J;H+V6KA5qqBec8n/&S16\Ne6W"V#4?GldC +J'&b.j`_=3o??j-"2qk@"%5DCNK5b>^<b@^!Yb4Vk.%'8M76!H=.%Q#L"$1W[2j^ +_XmeD&lj?2,Q"(@QYQL\D.NGeI;Qd$*KP2F'Vpj_&)/LR_>o[d/r2)*]pcgl5^Fk +1690tr'@_8-FY7Q2"\GT11C!gs>Z_JueMG=)sKpO3\mC;;A1AcC9`XA-<HntS8\Y +]*s$:d?);:Zp0<mK?:kFWq\cCJlp\2u.G][^O54er=Ji.b\_3,7frD@St:\%&fKM +O5-;KPWt7'k,g4EGih5pcl!<7q`WG3!jNAnm<pJf\,d'U]&&NCOD8-!L8.*D^2,D +giR0o1[8.L16h^W&@iL*_(+))MBC>C6j+G+bD2=^+4R6iG+0>O!lg&-<eN8f+H69 +lB:1$d<s*u?5(GR&VArG*L+Ep&C1'-_CrK^V.<N(7:"2"e^_4iK#h%<IZ'Sutd&o +HfMXj)^VS3spA]uo22]G2.n3Aj5ZT1Hr7m<q,"unk1_mD1<>^9q\N_&9TVK+3J1L +3-eJYrN"ar]tZLF#Sb_9=7Yb@]6OOoY(ul=Y/\"'i?gp'iAA0:7/8a8Z-<OK6<Lj +&'n8nHmlYC-!iTK1C5Zi#e@Vpa-5uA)(-b.":F`5]X6R8\UU^oe(sC/../BF@2sN +*?u3GPs]!M'12K=b&Ki/Z&t#?'RHc<mPh7k.sX-02o%m=.u7J?<CJ]=!a4(2-U`< +N5-TsqN^^m8WAA_l#;o8sA[k'8mj/QicO@AS@%BT7GHN"IJqK;uNZ(1N50fq+/1; +RLTA`(2(Om!'rrA9sIGRlh_8XAr"g8UuS0NA34:o2Wd5/W.L"ItGd&"P[O)g@L1o +% +$"S)jnY#>3*_frAQj4.LS_RllHN&4n_]\\hn&)^G^+W`$K9X"%9=Et>ZSE?Nb@e> +ITUaCAbeP/0i%@(8CCi]cNKonO1f\?HipK>iTKiNF*o9(D>FB!=",nVF$5@Va`(> +FQV/:X_s[N%Cj:Fb)Y98P@IH:+[luEbM:E9*M$`@0!K$&r<&WpEltT@>.uZ3o'[' +H%+(q5u>O>b*Q>V=JJAJ+b)@$fnT8tUb6,$Nn)LKR@Vnam3*+R31HkMhb,!r^u]\ +Uq\%nt9`&E7i^]d-=n)tHhgEju$#%nCC8$o[=?1)lB3X:;c9C>UQ,5O"4=<9O8e, +Z_H&GEY+*+=!9KFo,mK%T@\l0.Lf)?4%AP*`d""pFpCLT<<UAKTC!%K&L"jB)e,j +H2CFHgkb(OfLh*Ha3uiS0jF'osJ`SQTh&.X[7B.@^GX\#YFS4=("Q!6ci;=:*0:3 +`s[(B8EjO4>YoH16\9@RE]@!GnVKYaA,,(`%C'hP4i<I*idmgkcHss%j3Ho![=Z- +:q7;RAE>Aq4&:a%9>Qq)<jTF#6c$gP@\AO;cpY#bnP]q$%M0OA8:4:\+V_fc+Y6c +gUlAB@Hk?Z\]a(@CnVWV'5QL8E#W6C)1oj"[oap(6*tuU+44p4&iSS7shL901Zp# +=!8R@6m5BG$7Pk^cOI=t77EjFiFb^VR'-&niiegWF_d0N7*Nt;j&l[?]*,$IG]%. +q3A!faLk;m&01,p(%gbS=mhJuPfL1H^""e@pco9A;,a?(ep`_#P[k4oXH][f+)P, +i+h[@:(cb?`b<rX"2Ll&9]V9dFa&_(8m4b,$?#^Laan)L3^n+cA'Y7"+G?XW#'Hl +mVNpsM*^W#4F2:SSL0AG,;W]NUR#6u'[q^O_sN(JJ^s%DKA1"nhB@5//2j[U'PIM +&A7/uh,DV*B5=j^8Rpn'TKE8`/=j#aB^[RRZaK]-o/[R@f0U<0>(DR0]/u@+]Y^P +#=0u/m\:ur@,i#4l3*b@ai(Z^+JS0_ru+*+rK.<Est9%_KaE(_$pEO&QZ^+=2kM2 +Is35;AKVIZYLH@c@]Tp6OMjp1NT?No"FKg&MN`!<<0$!rr<$&4UnSZCIkY$W]aCD +bs*LQaX((W1f7UJuc46U.\XN;YE7gSe*-,<.)CE/,lFoR[db`_nhgGdkkIql\Ye5 +r)cB21XH>FjZeF/V!]=,dj469["6^pXA2FKaQ$c(OT;J_;4^CqYnk;M9onuS$YX= +t<"csPE1a&L@3%X*gpEDdbfW#/NVpj3)qP)G%)LS[8\"jPAb$Gcej5DXl((=iY?u +Se-]s=[%@2m7Rh-,>0NF5EA0Bqq?SjnK\K(&c0QJ:)MjQnpMaqH)]X;'F7P&d";L +-<9QO_6T0=lhTp[B?*Ea:'X5WOg_9h#XE!-c5:0Kh<I%MHiOWS4.0rQIaVNm&9F; +2O^3RBh^eM!>>lbRa,1hI/,h/nG$6DhfUE378UZ<+Gk/UnRIR42Fc^2PVMDR7gh# +(T1N3Tg*'@;e]E!qVeU9fd$fJ4WLE=K!D-M4e5?$^PrQ-ZFrhXjjMAt2DIZ=6<;F +;^,raGE/hF`GWkodm%Q4^<rtsL*dL+sZ:)oH\VNgmnVBQDQXC6tol8PGS3Khm-W% +rirEiq_ZHm&cMh>8k96)eC[Qst&J=nOWNG\qX0t\9M@gTbXkF;,c652WJG'@ls*u +I4!XPU]0B6J<Q;qaM^PL:lk-dWS_>%L-0%*Gi7#+D[DA*oMf4uODsaV"[$)B<?#1 +L8jXH-#PUc+7?8+j^5q[7Ek/1.:A`rL;8[CdCL+KhWuB#Pse_P2-.N7?SN]:fS5a +?1&<3R=GPB_uM+r!<<0&!<WH,!<E3$z!<<]T0gSZFEIj7Gn?KgWi=PPZg&MBZ!s& +Ee&A2V^d(>r2h?1C.+qiW_e'Brp,<pN2'L9dR^+Q$^nM[/IQ`[92h6=F!.fE3B\` +nrb;REU3c<BsuiD2TXj/d#>g'V-)e]S0Fd9C1>Rfku,&1D[NZ[iLpM5)j(bY2'to +dW4<jrdl1jlm?XG5\CJ<QjjfYhW.%^Mt!qik%Scbf@<Snt0e:$F@ZIiY0a<8'F-? +TBm,&S&Md8_#OJWgWUg?YIF@p,O+t$Jp^$D#srMEN'thAbY'@@9NDSf+N&qX4'tu +OJLW'1$eKh(7n[77[!+1D?>D<M7tJX%[`803mC31:ZBTX__+Wa>8b\BW\nb9oinF +$k[hR;@#/-BY9'[ssYF#Un^e)uUAhc[VX;UX4n'&On+B=bua!uN:5dgJcdEsKmDR +,tCH^BND_+Wo7eS22W`W5s36eNYhJ!2nEb7ZTs%L2CY'6'#F:M67*JlaH+YI-,pY +E/:n3+T:<T7+p)=+0o1.0q6[o.5_lD]Ue.O%+bM$"*s.f)`G3NN>cR?lG@E_4PqZ +9"];3ammiT!cE-gIAn?Y%:jI>Rs_IBd;Jq6R(`T(%-PII][DeW/c+7>EKjCXXPsS +R1&C>?_b`R9l3ZnUdLC>uB./i44gDq*2>dBs>[N:5lSAcq?BN-[TBp$1*6QF3k9& +d*-1`$4\>TI.g`%DMi@Det`FZdseA'i>!0Y7g*rc3p*Nj_N+D-VQ;hD3c"S5ghQ? +68+/%?b#&5ZlC'2b$#+D_k%XJk?<F"5p/V=f]KLoaeZfB]A&R9OSEie$)8hUEG5d +MU&JESaX]2ar0[YpXX'Lj.,NAs,">mc,I*nJ+haM,e<ClRa,'4,!V6@kc=)NP\'! +a%Tgg>OU$<HGQ6'Ec)SfO<O)]ni[1'WmF0;Tjm6fWkhab9g.NO/Uh(FU2c1EndNi +62kU#53Hk,`$6-PU!6E-G5nODtepdKa%>ERaL?*kQnH+PVB^s;V6VlL\L]!f.%>X +AP*>eMjK[tBm?mTEoHk5og_<P>$kl_r,9RFd0Abh^2A)*$N&qU@frJg's_7W3!6i +lV`-%q1opNMmUX'EQn//ZZW*53OHC(;LKqo$Lj2iLP>>F:1)1/t]`V;t,<Z<.^*X +X5bP3O"mI*1caTc+gcR;Dr"@4A-'X<FuDKR,(\<ln\J]huZanP7Kl4O;VC.ZU;nR +a13%pL"15AY^j]Zeb=_e4>=;;\?&N1WqP+p]l%@f$eOZA&i8U-`o+T"nWmIe.U#7 +G<onTiYk+5TjDZ5GOY+2U7(gRq?gP:L]RT8S2N3#?jrMVI(G2M&;;&Bc(:oi:1I* +[d"78^>g7Z0:N!hgcN;tWn#6N"k..,VANiI*?c2OHV`"@qtK@1;\A#KZnU-?_fK8 +(hB9M=Ed8.)"A,I<p1a/!gaC!ZK[;OUT&a3V]Lcr5G'Ir>q&D4b.+O9%puEPA/S- +LuZf"U8CHkLki?EYZ>$J0o[hSC2"&[=-OgAc%b(V1.IYZ^C`M`#B1&;RP9IrZQjT +>/[[^EG?^K3H].3f.\uBaIc[Ar'Wu3PboqMcdUF%V;K^6m'@UG.G$9<aj7o4Xd>) +>d;!Go8AGA.O4juC&ZTm&AL2A9b<c+kop9aphl]%JG\YSiNnEO*\Qhrl1gbV/79< +umqp[2jW'n1*iL2H/j[c&F.LOA%[k(RFeQ(LnO6&iBd<9;J>rfYjG\L:EI*2PLqB +,SG/VW(q!Cg]?SfPT$[8gAr91K$aVXk@d3Q:Ge/C:EujFp4.K"'0\kn"(mZ5W%)g +s5IV)Y\rN$>A$.]j*rf?@;PJ!$NJgK^S@7Ti%DWZ#SJkOnFsgJ\f"OZ/o:e0s4u` +AZDZ[Z0a+ag,XL"oC3SEi8q0'as$9f1/bjq-A0\MINfoW-3Utd&/L[qS6rA?;"<` +;`31IEi3(-"6DOm%kc41MAhMp3o`"nG!NMj5rB!F:e'])X1:YI2LoGN_P@b`RS43 +*amUL2NEGkY5Hp^7JNo^e;+RB[6EVc+Lr4r:Kpjld'rr>2,X[,;K0ReH/56h;Ab0 +FZLUSN>s_s,S]5fs95-Ac=T:P,8\fLRTP)QtBEN@uk12jiD-VmS_i`%CO)h+Kpbe +e;<AHVdeh4aXK3/H`-@mR;nnUS3cm3N1bFQWXrUWn-RZ=Hs%V$HQL'iXm<H*9I,1 +\#,4<i;&#c5NEM6r5K=lCGM;)3_GB/Q6D"+DPE:d`D%].1Bgj.-#R;;>*V`#=iGU +Lg7_KR*[pF-]IGpbqs=e1T.hl1Mqlu@68`g\fRSja/2DXSkPU+s`G]'FG,g36ak+ +ksKqdO<*8u?R`'HdF?E5.QZpcB?lqk_r?aL)iA7"a)!,pG,U8@_jYK&_](qFklVd +>H)"&jP(EIi/XkHEKria,_$Gf"jj:dl`aj*?Tt289%72\6g0-jig4424>)\icKZY +lP2eM]<&m2;23'WNrSB\H=/cKk/#:<UL2#=?<60=/oZQ-n.Y>>BSq67_6'4>NZLh +i`;JiIU<qH9gmhqCZd(@)oA'#GF.t/<GA/s7=3!=UA^aB5mr_mA(Q!d;,O;&UhHo +2B6(/+/9EI^ohqc$%eRn2o.<7@^W2paQjbPugs&6`:`.Dsfnd#N%]'NP8Ck0],,Z +pQqtPbsK<n@NU1=gMbL<XuMlf#Djssuh.cX^F*(S(V*N'Z7,2s@'StF,H"B?r3q$ +1q#eTg<m$a4aeK.67d!,Cr:fVg=AF74B95H)S1gNh,hZjN)/F5?.<boDUi+T3(g\ +\6j@E7?G0C't*Vdc\qZEpQsZT$AP/;S78OdTeL@jf`>c(`)K[Q0Lcne8K3slPH@V +g?UO.O0(b4*A*[*:@n&\f%(]VLbTZ591[#]"0p*?$Y$H*Njl2_\b^D*)ur#D&"Yr +Mb\12*c;*-h\17hKrPs^37EVl*p)XVdP1*=]E^XU/""'_BP:DKT?$a>hS4`@5GQb +.kQXX8nqF<hF!q)Uh=`"!Y-W%HuWIf,8JLsC4rl8.JDU,tgM0X5k_'9&A`t<A"7b +B.NPWTspP8N$'FD5[Q0f^qHLb29[?80U\ClFSMqtIH8B)HWSU6\WD&uoFrdUEgp\ +?-!qb1s@+N$[JE0V3p@U^l)D.4HZUi`=L&=bHIE3b2*P(isS5Sft_gJ/m$5*GOLY +.^`Bf>B-6GPmbY!6$J*O!7gf.^8Kg723U!'gW6-rYU,&.<c[b0!s$dES>O9,XuW] +1h+F[9SP4A0!3gJHeZ$HD[h8>3[Dapjl--i=!6ab+H=G/sq92IlY.rX@8dssfHEW +fL]UG,sSGrS$((SU``njmLL.F9MN@4'\8-U"ErP*W8#hGOB8h28D=W':+[CEr45m +!CXa-"-dB9mJ+rajsC!WN.QWN,F^4hbF)3ubpe1G(2#,(!VQUC^Li4+i_=H:1DYO +1t/5T`T*NV@%h2/VZELbR?OWcb56#)MMmAfrrHf`#oe;kP6T]*51n.pTt!u?P,"i +4ec,;=;!d<iVEq!HL;U['Aek'pkUlF;)74ooJQ)7@-\SYmGhdU`V@lrIkYb>0=@1 +!Mrg6ECE?sPB@KQs>/QWia6jfsRp1;RpfHiH,(WBu:+o'a(h;QmjR3'MYh+,Q+t_ +OjO5uXI<EgJY][skS&aQq"^bE\%$(6V$0=0-BU]_?.7:Id$jU[2BCAX*kYZpMK<Q +j3kN3ia!'bFtgM"hl7/?hSN?#Mm#/64L]kn+<>FoM8+/-?u/V>XQB9(;$+!29&Vm +kBqV3RHYs_fe^"`5rXGr_s$s"oNi/JD$Q2b@bVKrr?VGcHjR[nGoWn^3qf8?C+sU +P=YQ[("qG*6G7'Jn7BY$Mjbakn;pEV$\?9@IH<tqNs:(dHI:.Gf'W&7C2<mP.cXi +;!ZTa`=>F)k00]1(gqsh-hXg7>"CnObNpNF;i8>u#(`'",kJ*\rKoA1IaZtWle'1 +,i=DPHcbd#.2%f?/gOuP?,ZD^*s]]pj%-P#"R(FgD=QPa%R`%EQdXSg(_c7q!fHl +1;W@G#WT-YRZ&!$IqFE1$:Up;->t64IY84WThU&uDK3?Oi:OeJk91qp1H<>Gsaae +B=ieIsp?#@+6k=QhZnaguC!WR0)^OO4l!&/,Aa*bIiq!<"MceWUTofYA%%o;!hd( +cbO*Q'rWG:"2UoGd-p/oSf6,GKH1=+g@JXX]rnQH_-!!PbrF%LReUFc\60puS61n +mrr<)g.=6inZ2;cPFnBDDrr@r-EFHc"?Ff;O^cso998)f<_Wig3YL5:oH]$.n@WE +s.G$h`ER:61h\@U!FPNG)FFM]C'4%B44=0ih_Vld4?/.g^QY\=RXBJ=qZ;uqYm=% +(]s;grUD]+$C1MUA9KQ["4RT_IO?jE]5d)X-DUIFLO<N2-]#<mNPIcsg#@3*S\lZ +(R]3ofL\&/i2g=PpXHk^MhO$dZf6qGFpQYlJIFeKYmN$Z08[Ji3U7W6sZiQMU\rS +F5j)2e;3+MVcn&kc='P(.;nSALZs`NdgUR/$X3iTRf%8[7!7fciZLq-fa'ART7c< +(-<C_@aQ@!;eaRb:=S61o*so4gWSJ$_D=lGu0Lp87V4d=5T5',nd)8-Eas#JBC]6 +c%8?Ai]LI\QA=!o09Gk@p4MDPL5fi[%g^ut/?C0NBW`O4rsWKWqeR@:_4hHfMhj" +e@W2-`H=\S^34[%u:-eTI:!8=L^Q*[]I=2+=)*j6+($(5pM!d^kQ_@POU.Q.(aRp +=uFE/$c8L@T]5*j8MAVArT%-bol=d^7+Mi8Q>Rhr8K?1cMmn?rTtE?L3Ie+O(_Of +2tt#ago:ac&'G>@(I:`1dA^4R_kSba+j=U77<Yhq$NW&$If.7O*GV/Cr5qM,J1u6 +HmNPifg\['1P[cg#n[Q#/2g##c.;I)D?b[#RV:2=#bde"tGPh2r_J8W@!"<oc,>X +Uqf;J<`bgm4cg1rZfO&@IOYMS7FQPrdY2e(`4gtI$FC)ouX/6Q4J.sS"+Vb$FfY- +A_=U1V7\KonQ[BCZN4.@$uleIS$f^o:`%.P_C17b#+WQfmT_UuVB4%nS[T\O3t^r +:/>CFI4E=Rp:(>UbEY)o.<T>%a_ge#b\7G',tT6MRDU/.F@dfC5T#R"s<CO;<!3R +W09*?:$8..9sVA1!8$Zo;H9*DVd(NsLa#mf-(IrJ;n2(J'hi7OOU"-DLo.a;&-/o ++Up6d$HX(E=?%_`&^)'"jaL/MtLKL?1Oh$Q;ragd>"KY;=Nfe<(IZhio\06951N6 +XHM.MK^i;<EL7kGPPQ.":D<YCaI4hks?3R,e/N5mEPQ`Ii0#JZ$ihu$^\Sn416rr +?K=GF7lLb?0Qg.j@ZR&6id%7^Iq_ZP&^;K]:J"^n*N&ajI6(C:i&kORE0Fan^Sq> +,4U[2=2'c!V`[uZ$CgRPeE=e\*nb-<Y#Go$":Zhj3,Wped9(rVEX_5A`+bTdXE:> +;_(DMYL0o+4lbg_YPAB5D-Gc4T+=,JpT;OtL=T2TlL?>T?t30WANEoQo@@Dp3PG@ +n<<4uMeI+Gp]"G4a#T8g#rWJSJ;YF-IkD[ST#-2/1h0%%g!mc,Y2s(-SGF$Pe^ua +C3*oHeFLtS'5#K8mn$X*9i/OsYN2Vi_qXjZCQg4V4OI:C]KAQ1b-@0U(r3k_FoA] +ZPW)@%ss=e%,+W8&`"73<g5Sp:'h%Ad(\]7[(h8j5sAT7b@j*"bR#=U"Gg43AFRW +r=4.".Ib,c)paYc]?Nd't8qMMQHfM.7<G#6@oF9kn#oaq24;S9>V4%p>`];8=Aiq +"4X(NDNT_TqtKKN-lQ+`%=\4?&gC>Jls"g^p3tWt/OmB?<:,V@pR"hYX0toD+n8Y +)YIA3B3[Qh0n(Td+>X#0a;VTbCbVu,CT=A\P>0A;sVN15K#g?.[]R319==qo;3b@ +f1[1F21G%7?_g*tbs#lq:[.1(6A/NSJV8>tUiid0QDpPuRpHnssg2P]f7ni`IXL+ +-PuDf>2sO53SmE#OP'lh<(T#r!_/'j1"g2fJ\Y^eq#>c]]E:1)MWkQqn8nY;"(I) +oQWXrr?MCXjZkRcZsW4Ms(*?-#*``GZOgb!`E/UdHm%S"AUJAES4iEFb@]+:YQ>H +51c1O2WV[CRIntPAE;2*H8WIOY16dLW,`&%l^:6%Vic)s=@#h+OfF+NV9Pef*Y&% +sZLMr7!7Dj*k#h*7.*'I?l59M`ch/cWLE]d#]L5&;D_dpEnTE]`QXP@50l@.sqXO +IX5_P[9q,!QtfbJYEaTr>?;*<%pLXb/kKi+SPSd<\WhtTP^Y7sdVYl-/4<Oub>FZ +KI%&B:R$h$WnN)KUDpVaN(V#2Z9"$'EeRSM.0>`*_JYj0,7np"$,Mf(I75]75u"X +=MLnohNo4Q'GA7e55'A+]ifn>rigO_nc%7nM,\4MH>tKWlTYK`MG,3-GQ.Vp/JN# +Ua!e*72bXT0TfV#nc&OgIo=P8St(15)&fc01@"+hg^sb0_q9AZj96R9_<Gm+S%O1 +>.4p8rJT0$rdbqJ<f,fm=oQ0I=!Dfn[BM_`KmJd.t>1_V;=?YW-.]6,*\]uh:7m] +.;--$M%(I4Ui(ZO_'6h2t3%+%*n^O_A8d8!KY9nWm(WnT>,.cg^&*njibS<'$Ikg +q'#b;j)0%Gmp/!`5=)>P.pq,o[7F</+(WK'pGh[aMN?J^1)W?\SGEq"m:sblEs1+ +NdeAVFmLCNSq>/27NPbM#\e0``2Xmp[5qa2B#cY=/HfEQ,Kn"#L'VE@0pVp\C=Oa +Pi/Q"U&o->H7V6_]LQ(ZU-1FMh;o_./mJJki[+5S1rm10/c)q1%54Iu,^4-2L>FX +$731#AgWMa#AV+Y%UJcn?ST?^7AlbM-<4e.0$qV.=o-e/C;%')JA+Yl:b]dY-MXJ +Jt4QX`F^@;u?gLjrqo+>fOb7(U66^[IPnYPh-E@U6c="q?I"[0qAniG(SL5+Y`g] +I!\PWRY#&E."oXMuC5`B2sAn-YQ#.29U->:^Rf2mb$Q@5]S#1(=@_2M>e_b1snOb +6;QbR@%&qE;op/(<0`gR7VU]a/H/>_gOS]+>[nL1'^J$h3En7PHQ4W%p>+qAYQX^ +bPqP[[2?--$W?p=(YadsXQoS5oc</U^fe#tHBa.qXp2Td5tjZU"O*B.:'BNHIB!A +geCc8tqf.S<$cE$fN2W9KmkErZ*?B9U^Bb[D=!>f-2O8=f7PSc&1u*-"-T[Q;6QQ +4kQHP=P/ptGAY'b6OD];%ubdjR1DEV^Qe1aLoHAk3\3&R;/[O'*Pf6B.m-:G_qp_ +d`_K[dmq*[$5m?&N4jN"^=9!L,-P/J[OW6Vp86;g1#%it,+ZQBtl5+:n6eFm)F'O +_T&ijg61V>t`tZ67tK5%_=k\/89$;_!k^3(p2]MQ)W;a@)Sf"4-`D@Jjc>ld0kj4 +[tl'1%B.PV&9oN8;eVOU#^Gb:!&-6g_+h!QR0lkM$6k;mAe@/#^\L,FP;3Uoh/Nh +T1H7(HXWfT$cl/0)SeuG&6=hqkj+tCH#l65[&6>ekeBP[c^DA^rdGcBkX"VL,*P` +LPK1kG[b\Y"\@52)#1sARe;OjC."bSU.e6Yh_14RFi!H1N"=sF5X@t5<+Lc2!D1C +h#OU7-[X\k>A!B*,)KqlHT%@-SA-N?'B4,XArd@pM0n<lIbljr5M*0acijk*_8GK +1h_P^W;nRQl_@VR-^d-`up".*LoU2+;$>bE.h.sj>r`^&P1911mN[r24"m0bJZd" +1=5*58O3^/ZSf/\&1p7"M8Lb9*6&Dl_j9EOGYF;7>Br1&6F%I47-r!JX=5,F(0gu +bb#un!^!QnJ7tme?YH4QcMt1o,A3t8cDG[S2e3UN%)OkVJf@.0L$)\efM3S>;"C/ +`3AhC@h!2&aN:gtOb:2^?K@Ydp:B!i>*LhKAs[CClD'*g6A6A?(;kmO(+:R4!\`I +/<&Taek(`PFB?3_BD7(%2d.1G#Vh9gQU,FU5#TQ;Z!YNEiHm.7:<95n%Ynj-d,3M +G>nXIUI/1nVhoC5g""cr8XkVNSLhrOk^!W:]J?5-4p7Y!WiB("p4l,z!!!$"&Krk +p;/p#qOeK&L&AccQnc.;C#QXu-!C%-i^$srBDjCBocoC4_"_biJK)Bna=pKrh!"` +0<HB9j9Ot^F36hkOW&R`9sgbUaA\/apX0Sqi>".FbZAm%CsBSINr="IELPd^lgE= +N\]PA+)(V%q5j#i[2aH3MF,ee7F2,m)IJE_chK`Q+pAO-6]Z\WNt'7teT50e"9A) +XWU5"D-HcNDdmM/UBc(^RfBY<4:i:WIWWgNj3ig?Bkpb1N5qu#:S(]R8UPFV+M^o +d7eWsC^0P41U\m^m0=q9#qgj-c)fb5n6(lEA^VD?"F;CLRAkBZP,<+%c%@O9KaVW +2KomsQF"^8X8R=\Z2AUQ;!(%DoqEt`5^Wh&J@dKg!U%%[@.@U"kknaR%5M4Lr%88 +6K9:05Z!+EF0\]i-B&;.>((D>jj5qFml+W&p='5nGleD=<`6mF"'R;JVD0RsIq31 +L.;QFLFubS!TSa%#$N@LJdLI>k:.*+7A)PgnVtB37!h%+_NUB1Y7)mt<$&]U5/"H +B6:eS3"cJ7;T0*_u[so$CSGj8R,5n\C#">'Gtg,<+[B?LB,OU<[cZOKu>1`P>Sl1 +.)>lk0oQs0QHHJ2">D6\"'W7'*@.^R;anVj]o`@df6EDF;cud*WYH/JPt!/P'1[3 +8gT3CI#91A.N%U@u`R)9t!0c?'T4Y)ajrOg)NdRZ,*PV%]E5Si@G&kNZLi"#4dk; +>smK6Gm%&%^p6[3]1!!a&]Q87$s+X#=PK419`R3NG#&d0bO%?W)aJ7+I`DH'8nWr +k""G94VuI*;VI("?3A!,F9%Zn/_G]WhZ3?Wr32Ab\.?X@0EtCEK`rbM])fq:ktFP +8IZU.'tkSYKdDIRa=e9pVL\C"U#r@]]oJB4dfZ0*oesX9JD*Y9#Dq]OmXC298-(, +'^1kt>YI]!$`R]s8tcTrTktmkc(P]k)8dn$iY/;Q5lm6D+Ru84K'bf<-qq7k!PIP +:")$_[jeKioTT`+BIK]>".N.JH[iOQTC;(ON.-<Jn,h1DX8fbfh"-X$m<>S"/&DW +o[]Ls)HaidhTC_XqS%0oI40W\q[<(A?JPQ6uae2S#L<A6GgYi/EF#qd5q>nU=S7" +idq"9JZGIgjSd(R/h4R7bA]"rIZ!>i3bA(<5joGE"Oj27bsg-60bq63YRVWm#55Z +4$/kV+3M%m.q7@>_))%dL]%G((FpsND3V3<tnV]=PD.A5RX[2Vl-*F,%\h'4JSp- +H+'IT@-)B6iQtmm.f7@e*eH&@*..g?l+2i_%kEI&%RYKDZ*8a_:5CfbC@JIMi/L, +qgW<)7!WgkTd5p,Hiuh1ZFS)!\fOKGc7o<[^-)Lt0`5NU^$DNpMifR@+V8m;aTB$ +;_SIlQ9gX9@JALUNRa$OBqWXG%6m(2#&g4ZPYbD#_De&U(A/NfARrF1f8rBK\p+` +Cu-;m+aDf<ij-g$YK2Ngi6F7O=MXDa';3\I3=RrrB<oYuf">IeAudK]CK[9o^6_W +l!==DhMm2N%=.Nn"8`OiWg-c/sk.a<PXB]rN88))t''^Y;hKW;=&l^+FHV6Ot!sl +_=:I`."J@)_0'")o7E"DB9>g^p5?pLR""mS,*VC^6aIi_3MRIc]:4dIl_XbM#r.6 +Ic//d2I(Jl%5'WDpEMt+"i#B1hXj"=.+anhRbhSV[%&=8eh'(h&77=H3B)F]6L/O +]#@dP,-1ml:D@m2[Z*h%4(n%['h6R9]1+/lWM?8s$T,1X%RLGpX:S%]Yer&[@b&- +Fo6qhtQW='e+2$-RQ5h>[I`6\#\C^ClU`$632eFt+R?]5;5)V?tf-NEY!2a,$o=# +H+,S8uN*K>TSUC$mR[\A?SQiV380[?1F;)*>ZpTjidaj%_=L2@M)dtiR\IX`+W2I +% +hPpX&g88o7j#KD3))%^_"dlOEjhf:RXbs\7B1J@#,<*+8hV>%Mh$)bQ:8]e<&9tc +SJ*^,<a^$;L+,hlWGHQ40fhQYdUEl:K:iHY0E?sF%lfqZ"'MUS$iEt15nCh?X$ud +pMbf9_</ut_?m/s;8rt+U`h:A*@U\hoKHB))!'D<CRGDE\(V,I.rrC\Z^Z5u,^G) +b6dOh-+:i-Snil"iDKkTI0lo1>H9FQ@>nB=^S>O,T;j=?3OIYhMCSY-*V-0l23MK +^g0>929>EA\`[l^!gs`+#^U-0j8HKE3V+84'Gs'H*,?XMV#J@q6sW5D[Yq('#Uc\ +g&\G/<3W^\<uk#cS7:H;Agg.R1<,kqUOF)9+d=P>"'-nc,j<4`oCjI3aQ'GCU1iY +^<_5AISdsBn!FqjcZ*3$"`CRVCJ]#;U!aIS@Of5\:s@P5Pc%2OXW53NI:(*>?nDE +1Y=D^[U:RBMi"3C*m/I&&.)UR`EY'kh/6^iTQ/`Wc:6tfCdg'gN<P+p=:!;X!/&b +SD_VVbXrr=91KfA=iBQaf(:YoT;&\;Q+.LrC<hgZI]_9^JpGfL#[<amP'>OE.iLI +rX77(lt?nnKu_1.&CgHfe?<>d6B#]V]2A8.'*39m<Uead5K(.N7VSqM&,Jrr<OVf +I]7Vr7>dT'oRG^F"hB'E@PJlY_6-5r$H=!pCT%7hm3H_Q6"lAE5Kjh!7_b<K57>7 +NXmajLbrLHPQ\?CI,us%,BL]A/("1R'e"#>5Hg-G,e6`8+4&^SB<jBS=0rERpnH8 +Z?b;(Gn,V3<Vt>UF'q]sO_(eB?X"M)RO,20H3k\l,@Gc5;*`FC=+_%2?fpnm!3kt +0B\V)ahOgo39b)V9D$q%S*KFQm_Xun^)lPKcpb?+OMKN#=mQd-^?]4(=-7^Z[V5@ +2e#LTe>[.Q8(Z^=N\+mh&oRoL];olYF_7>W2>!mIJ1:#sF[#nWhWXFbP+OI4RNk% +,j_F`5\P'UF\O;)#KpJWIBKbopldD/umZ/K$hcK(+hejHcE\,i*sJ\lD*7V((UkJ +2sU`-(G;7S4iJG+pe!>f\D(:64U-t'C5I5%Ruh$k`N[+<qNN"oHEKWe1;4QL*0P5 +@@3l59O"k6!@YM%'hjO#,goLMu]YtI2G%C6c\`3h%8\J'_;WTaLL[!;=6dH1;DVc +:WcVB8.`E$FDg_#76UXamm-iE_!f%7g,9';5iHVBoom)=L/?rtN8qX6@N/*>W]UU +&u,Eak])X3(5].H6,mho$f!K'($Xle5ZH`K$2JI)ih8^)2t"<W<&T17ZI1<GK2H! +0]S[n^Hp&BnjIO!.H)XC]1JFUoUfSm)kL:c8!Rggb.Z(nt0E%E"K=IP$j%$d(mS% +L/Sid42sI?"]n@M],M79>futH''n=5hVjqjo<-nled.gPCV3%YHiic=oDZ]F89^* +QkO3Z!-"Z4>kMC<QD^'Rib:F(kNoO7`H]N-"=#<,aSXr5@ea.52UA2A59dNNd^>J +XZ+2a\rhe6"Mg!R"a@\Fh3_8/9IXc*T6ombO/bU(fOr'hZ7oZ*3=H)OGNF>eW8E. +F3VrNM@34sXZZf;8j(GtNLi'WmOuq2OOO;W?J)W,<%(qu_bqVu^>VrO'7m"+c@!q +F;u\mi,TD,8?KJ+'?>LiMgF^@`kNDplB6)>+tAK6`@saJ=Va+`7:Bc"a^U,YR9I\ +Nq2cK*"&VhX0MSTN.Ff'(k'VK[-mqo-0qftJ#k922%s%#5C,^I)XSW8'c2P3YZ*D +O)OZosEKCIq6#a#JBk6L:/UeDZ2r+E5O_'805O?1MooDaIppu@2#[*MSnOn;2B3W +IT-bhB>6CT!&hDMfTKtGWGT=ntpq/l/Yq[@^u!l/P.*TGgWNs;:1;VXV$"u)fG77 +% +>Sjbu!OXPr51;3'oS2]I^L9JP+,7hZaMpCsMrqQeag)QST9D*1:=VDh(^#(oS\]j +/B1W&VE"5_c.@rZJ^"r*Y9X8VKoThSe1li,>H.n+s!(+rI@_Q@2/7_21ITWbQAi2 +&i@.Ko3f(a?grQZPRkN2_o8.)YXfFmSI==Yg(7#mkGDN^bC>GLr.4I-=qnI3hhcG +XsM;c*k2jNL').R'cA2r_[JOtE?8_&l'FVfa.ruK/l4;?/PP1MTSLKPPS3)Qf@#( +7q%[fFO45`l.HG.]Ie_nRSOD3/A*.,/8cJd=je*(82tKr0KhbB[nKT5%WfB+$PmN +Q*H+r>]qgW$r^6e^(.T34HF3J!M#:8i_S1#ZdX64:4BCRAc"-]4$67RdGJsB*fZ@ +dpKbfsXKllWg*`4V_Sq11Y_[%$G5cN0Qp^<d`\0D5HIqB,(ka9mB)>sR"C_"!\C> +bgG#I/(ihdF+*+54Y?U'kalOMO*G'3J/&")<*QYnQ9YuK1(>g;#m@gTp<,giH0*& +(]f7ej(L]sbFl:#niK;lA(OZT=]4_@(elkpQ<sJ#$GPnr6Gk^BBYeW0?m2H9"-E> +4J,@C/Ua9fSjcm#m47N/Tnd7&l,L?sg+_WgQ!8%UW"]HAPJ?lJ<XpaEBYM;+Q](P +jkM!"$.:S^K_=Jb)?MPPc'm**_m&)]f=>/Bh.Q*dm:PWPEjD]aOSj)i3n;c*fZn! +h"?`1i?Lkq":=W\).3d_@KY,NtZ&$VB(P!)k"dO7lke%bBG0Q7mmb3ETX3ET](KX +IXEpMC",RM`S+cDqrK2G;CLX>,-`P-/$aek4RBB?n3_tFb^bZ^@9+&&f4,E3B\J8 +@_mf:<RcN/Qq&eAEeoh[_*-foE]!9<rp,#ZKX-4XN#ki+nPE>Wb:5e_bYALXdL`H +XWj+d[oeH$;oRo&_\pr?6U5+g'1^._kU4W%8YT)Q9B.tU.*9%Y;]S%fG<UUs2a]E +T_^np>k5O?p>UWp?<i_hVWGNO+r\pp9EKG23$_^Sfs`&J;JCQ'Lp6%S6O5bXqhJ$ +7]TnT_K+j8j?-"E9:Xm4mUP'&jQp&HFc6%@<Hp`+XOnUC9#;0cQRJX:Z;=,.L1s; +`Mq<_2t4P9"l_9Na=I1.iBX$Cj*k+$8BBFJ$9Y#a`Tr]Gb6Y+[1bklecG:kCh;d? +3ng.IM,VJo_2)4`56G"W)!uqN:0;h!>#LM+/X9C1bUF.R(2SsI`MR%H,Mimr5'Y: +[H!J&E+Nsh+QFVp2Es<bD+=B/RbCRVKYq&gR-NOfuRS/r@D"*iR)!NQ04lrUCJgq +/H/OAV6#kWbt>cBkQkcW8\P5P`I3#FRp9J@$Y+%Vn5p4G_s/OChHI%l/qR9:uKPV +>@_!\.]F8mo+`dcasJEAJ:d'kRVY!b61J&4d'D`<8^>65BT8()qdi=NUW"r\R*gO +HqgV&iNPD%]bJ$Qo0]&aGqROJsKi.L9NKl>Cc"lI:AtS5KG'IM3OkGb:/_iKokS; +$"?cCQEIuY$ZJsSK/^_ZXdlHr9LOmQW15#s^_o?J/N\\7&FSSgO#T]u<@h#f-PE= +Y8-LS6Be>7m^I`0l3E![Hien`cjUfN`QXIUn2_a56;TBN^SDB?[V2RetpYc]D`*# +Dc/Vo<")-kK*BS=l;#S>0Z'f&Ea=A,CM?6^kTV_[?g>;lVl6DHJJC^3s;GQ\2/6, +K>7'+K!pqI't`,p6550B#,tKXn$*jYURi`(eBU$.?i!R?T4VO@V3#2)IpY%2c35& +_&T@=G0qh@5,k\f+DI!M_`e[7DWpmjp6^/0L90G$OdX-*,`)r<?7+D$A@CO&oi@] +C+q?G%Fe$g-]&3]`&5j"R=/NR9I26h`'dE`9*>\8`o4FcEXKpF;7MFW#HhIm0X@R +% +\D_3W"m2:3P::'Z^r#L[I*Pc(c\/ja?4j7?LHGEQOT?>>&T4:T3g;E8g`=itO'`H +/(6Y#'Ml%mCApVr2q1c\&2*</gZL+Ai,M@ob'JL!@/nL[h;6.]]ibbun$sa_:mO; +(L+2fCJ9HI'S,/)B;$AQoC$ntF#e16q5rr@fD&Jl-M=PR!;73Z!@E9Su?ErZj^7Y +W5;@a:\hi0]CuQ,WlA_$?963/=,)*Mg5SC&h<i.Z)<t\X$BPP:`O[Uo(_j,S\IV@ +OkB1@mB"[/5n5hB1Vc@*7Ljf:*IS,@30:O#k(Zj>//!bPQ/Q$,nL(X!!33'!WiH) +!<E0#!!!$3!$O'_;.4HqOeK%rdGaTbs4RGY!<E0$57fRe%KI(/.$-49N9C.@\g(= +?2lpFARgk16Gsc!'\:Rk,Hm@p`UXQ;ZN9Au<UAWnD:qLBM`'W.k7PcicCT=g;W_I +]&-.<B2>"QcTPeNa)T,YPXD:ARSX/s%@3sWbTOP'2DY?>F2A7FT;dNP0cdNI-<*h +4Kc?q@rsL.*f$jk^+FJ1UA4V$;W58KO3mCE'L:7n3Br&-0Q.=d4LM8ZRK'.iM]4f +,tH7)X6jOKE.i@q;[F?YqL.oE,30!dsNIW4A6J_f?Wr)n56"ZHbr=C+PKW[$lKXV +M]PQtqE,-m2Zn*c:lC?eR-Xou>QbEBR86R>;G4i1\F<Ho4?NGWR`hA<?d:CO`Q:K +u(Z2=s::KNpeg4s`\!!!&>_;DMO/k\S7NkGWD-_$j.H^<B-9;-]4!hEafAd!CmB. +Z:"^rp,r_XOkT+Qg4J4-0oM.o)3(]b1I,(/>1!/$=7CUT:L;Z(/W%2rF3l%:6c>h +:9.BYrn&:l+TB:Omc:rL*CdG[99knbB;H/p7eB]%+Uk=\l+!k_bV+r*f\KlE@ZVE +K=$cS6SVK<)9#j&OC6iWQ1Mg3-N`@iCU@h!T3>]3`_E>S+Vr*Ii<ufB#&@Rl\=>5 +2//<7CV417^*7IrgIQ\VK8c[TA.K5oj!"u\P@pt55ol,6F$deK??pDg&Jm:]S:(u +Z"+`1,\32?:n*^pO(GXe:[/^E[?8C0'+IBk"$%AU,hr>RV8nqApG]b.BZatA++E( +Rt5PSiVmuY0B0Z&&N+."gup-M)T#TB#*_L-MRG&s0^+niT0;,PU0%2D'e1K-e$3. +sag_lPE7#D0j=:(iq&$gJFMrM6\-04JY,goIS5cLZIdK__LLkmbsL+GC)nCm:Q+' +1L*k09#!E[t(TiQVZW[:`OW::-LA-,b_<uc6+f_&F15nKf%+Z_CehVEpjemTSoiA +]TDP:F55UX9[N*1E#*QZhGc>u4Js7*_.TZ4I9]U%g1a%5nXLC6BZ^>C/W"LYO#QA +6W'Ck.k60Oj%aXs@RUggqrrBPW.oFj19I>jUNTsth`JsD/`#g3YJQun/@N-F'CYu +d&"Rq\l%j2SrKY:m[p&bo5onibg0#O%IOc-]$6,#D:Bp9mrYrPU)Kb*-&qtGXAM8 +)=,i,ETM'@&6R+SZFa+o*&4She0O?h)uhfp`(td=qP'P@bM*D6;_=MOq]B"'HV$p +irQlc:HcY6V=%32jY)t$Sh^(!6!@!#tc6\),g0tmiQE!"M<L*3NPVXrq9CJ37-gh +>`[8*U@onO"kKE-(>e`E&%3Du>3c;G6V`\kn6^r_^9HagP\<&2J8!?)i?/FphU_\ +1;2CZl;ji>R(dk09G8`Z)P>#U,`g,gM3n?2p#X&Td@T;ka4Lum/3ZG)Mcji0Lquh +Zo6Q,8B%T?K@F99d0!u-R>`SSur$8Oq4(hDm\9m;b_:t@-d$uk2IQ>a2TGR1OR"c +:^'$+ku$pN;tj-kadZ-2g\S\,+"H8d9-Ipsu](OU9iB=I2iu\$(j;ja+kS6e67qi +7D6.Nl^9f(enQOA;6>j:7rA].$<7Hj;u/tM&T8TE*!tiHUW6P0SpHk2^Z'\#"an0 +5WQ*:E-j#;&P3E#0_;<5N=_-6C_!^B*/l5)f>nf[VSscg&8>Y+N4@_4&L%k#iU:9 +.Y:7+r<,#]u/R0N;k3MZ8l\lU>_%HCr\Sl8HEi72M6D;&Q>/Z#gFjPEY'HJ"-N(@ +'gqo&R9;+aV*4_'+0C47dO-q:X(-"a.U,F-BMFmn0e$T;[Cj2OT3TlfV6jNpF2:n +r]J\4#9J1T(l#X9c*A)Vb_3DX5K#NL%TfIW>./1@H@c!-[Y;4,u?]k7al\S\Nt:& +oMRS3Na9i)SL&N+Uk9BL:p[oLcN=>6`72$]je4u@\@nSZ=t`8?#7O[&uajI%'l53 +GlTNW^H!]\#'fcMjJLimq8qA3MXfHs`=Qat(;me.94YPsLa[+Ja(.fsE)oS*M<>g +,n;nD-pmS]8X3of-31`L_,(,El+q0mbnHNooaj>hj<.OIih#U9`iGFU/pV6"odXi +4^iA'kegN*t\JeabKJ8RZlQOaL/3oNlT=fZY3]L%&+Sqf80GgsVbdLjsGcb(9U(1 +sk..jW]9d%F5`5C"g"(Mg1dj$\Xg3rolT2FSIRT?]`oV'jsQ1/.m_-&)hc45%iuB +4:f?lQ%rm6_*FHEH]:&A>X*$WA@PZS==T4Jr(L8((EFuN&BE<0,l5JpPe`]N\EQ_ ++=NV0O9"1ulRPu?U?bpnC7oP7>43+"66rYu1nt'&DD9I.9?2F&PD-jE97U3I3ri[ +hUuao!F$pbG$JRu5H%:1-Y/h"f?6-RE]GZgHcf@c7@>$eEOF^'SP%57l7#5&[ZLN +nj)0eeCrr@_jJUhD@:f4rcEmgaf9`YJp0(@<u0fok8913\F=POqk4@R(d]kuab]K +DjkBtp`o0K/:j0pc;Mnfm1hNZ^%@jk@/nf,X"p?ppqQ@cFW;:J8O=2\eN7!&s(HA +&;.)Zm>Oo>C-s7a,DAl'CF@j@oohle"YV'4l_7u"kZL.!H_&?:P0c[c;tpl00^<@ +UJZ8)]D96#k>#So<'>IqCG(4*aeF7TE#D&?@LG:^hD#/TctKQcdR"B(qnaA)*DX@ +p)JotGo\^5hT;Oon6W'/nf2;8%6YVCU3m+cLGh9Srd*s)K?kCkKe\t6VJL`DfbX- +-fD,K*u\dl0Y*fLAi8edc8=phVBScaS3h.10N"Yh(86RV%?_$gmtMb=LZ*-pL@'i +W$R6a>O-0sf4l*U56>Mu1]!<$nA,]&I?GQ?@Y'`F)#!NAA8up9O-:+35^'1im>.I +"!kl,@[L""]acH8V.Mab?T52\ZEBA$a/g%)a#.)35nXGP(B;V)*WR;G9l08;KJ/F +kcG'R#>U1rG&<:!-n5u!.r^ZSbs[s6dUJu/]?nYH,u6K?k!_is"F#Jn0G9I"2(ja ++rX;8J=EI++!lMZ<o:^\+AscBS#m-P!O\?&"i/\?MC(CEnhH,<gP;lh3;`9GDpr0 +ho$NMP/5rO#5b_D!^Kb>uelNJ[;XP.V^.0R<B-,lrp/o"8<XL>aqDMbs.]N9ap0- +&bQgqK&J5^3UT)B2[#^u1l!hQ]'Ff1;+RLE\&m@?0VDTH[5oaY*p\5?Kn"'^Jf15 +(`Y:Hd*HtRMS&@CT;bl)GE5I3[`VpS3iHC5^/"!`%lCJZZ+9;\K*S[!.YDn;lhq5 +#FInO*Mp\)KH-)-!PD2hls0"1$V_70/K&+l2b];5)l*_?=d)3JKf37D^#kb3+s-n +Rh^b!1/gG4Xa<h-mN6:,d;df-N64Y8]*21)j?<,&8HM(MI,tC<J\^JZ0N]H#q/In +geeq:,(c:Ap_e"O%#mW`a0+Frdpd.t'/9O;CL;hBY-LeN`:0TqRO_cp7,P9BBn4Y +!%L`"Fc&2?`B>iWU&'b$[g:F!bCEfW<OVq^banXM(:M<>Ah\oZU89pP2r^qXT3bW ++6j"F\q7#01&$Dpp4qs3%lEDkl]uhjJ56#]\tss,1'/[?S%?8BPbcu(G"aiKHq0D ++<#gs(4Bb_W37'Z$)WZ^kRceZ'ekO\$-\^0isNN*PKtlb.KB]*^@I(^-ru^H)T6- +<@D2n_Yp`g:?bCJfB\N!Bmpm^`O$>Wo+r;W?@0i/Occ0n/LjZkrVP:qD$_(Co#/" +BGk*]cqHX$rL)8p5L's%om*"(DQErBP-JWV's,)CI"!h]gf";i?$P3XRGY[Bel#2 +:5EpnRo#0Eh5mYlN?=<Npj__RX*h3H<t=62b=A/OiEnc)&2ZiaF[FGlI5AF;+o.P +SaEH`!M>sbW#l)"bKQ\S$OAD]"2F,^4eSsf/1A/%1kmS1I[1?$s5F#AZUIVP+W,- +VM@u`1,.'\U;Z3:(eRWMOO"5#,[a5fa9\>'mL\0,M7->+\imr-Rth$!eqH0g+_8r +uN>te"F]AE[Xai3]j?R0/#Fg\d:'7"J>S8&[/LoV[MS-,N@W?AEYe=KcXO.6T&`D +]#Yjr,I%gu1t:6:Q3!RK,I\TS<-EZ#"<E+aE!Co>7$8":[[d#9YK[tr<R:A%`)Z" +TOjJV\<eRZ\[?Ud.u0H^Sb@+P8;FLa+qjO?d2a74JHTXe*/EK!HlQc,1WdJ_9^9@ +@5JYQTV7Iq>%lsnlMD<r.P^Ii",pb\D^8i`M8HdkKLkp5+tpVV$ZH-U57GA.5hW_ +k3D0eNS/$ooZV[u"bp;6f`f[<##N9pJ!1.H_>r_j/oss#)nosN6UKkAD<'Y,oTjp +o]UT?BmG#VdJdJ8+/jpZ>98<`4J/[qC!+;$/FCE/.6e!<Tl,N3sX=0g=gCA1V5]5 +n6AMHh)dP7kVq8B8B:R=`K0pj6;/*IK\'a$`"_S;UP>$Q"Yo(R\=Bd.sLk,bD>l$ +(IDK5JrC1bX)RS#&^12Wh;O'^KaS]I""8AWL$H30IYP/)hNdE$7L%)6B7RZ_ne'n +HB^EJC"GKE\L<K2pfZW2-?o]q8r<*)N5%k!Rdnm=Dr"[&[N29-c:MZbUKja*9PHt +UNP[;\IQcH_.+8?I?2=_P$<FLmi'gJ=tV'gBTC]dPgdLmMFijSEV'EW!,6:lPCUi +Z1rc5)Z4U][bNP$m09s5\P3@T#Fog6nc5.,Kl34Rb$"b,Q#Z5HY\PAY//j^\7TWD +d-k9QOMBP:Jm23piW45MYi)g,eP31FUWa2p;/)6.8%?ka,H$<*4I)X??pE9I9.:V +<dY05:$2m%"2efhau_]^OE"e/JQD3S:B>3]Y4IW\10VM!pb+e2Z#5!*).r#NHBV! +Cr\g$m;WV6#Xq[:-U_qF:di<)YqCIVOK*]jq,?0Y$Q7?K,$>]`bW)o^BYj+BGCSu +GSlOJ"RCtr'M[AVq9)5[P5oUR0bU20Z=2bg!FVar(o8#,FgQ*IaF]0Jf;q)k!uac +fGS;qJJ`^O/<rb;E&Y[E$I.<+S9*THA0?X$L;%fhAN*6cgL;'1h74pPb1nS+Nb)T +n.@q*&OH-<i9'\[olD?1X&KH!C5mepWDACP/\+XX(s_G]?S+:X%T_T7Y42@'kSn. +1%ZU:qkb2(4!ig'@]I@E(&W]"H'?KeEW:mbQSf6-Zpr4$*_SK6$O'rlrB.ER5&:R +K`m#:eSsnR`A5)6CY4[d@=UEEnE_ePnQrp%P`)N=3e!O6u$/>(a=ZZ^uu2%Be+FP +cPZ:XSEptYCojnYD07g)Vu)>YM0r*bS&h&FaX/F5VG9/g0.N;F&]uTY=?I=*62JD +C#0`O!+kZ=(GSImrN*q4u``EcoPFe'.rYS92faC>kVZ-Y@j&WsQ=tt2m^DpXpiBR +['#93pL=944%KN%Z`F>93dXa@>&hB'#?CLN`a@B$Zb@Iq,u3\mDVR:bX-&mcN=h+ +RF:33.o[!?Q[08]E'M>XM[F2V,#jPu]0]9][fVW.-enLK4(SA;sWi&RYEm$?f^_F +/"a.(D:$h7K0W6M71kDhIeB[r'fSI9Msc2*WrSe"H9c/pne`RT#IUI`]-/CfIk$Y +'_@'RHm5:;5!>;:7o6/hhI9r6c"%0f9<N<X_B;pET=hE4&p"QElL:%jK"tEscqJ9 +3+FK[Wi%@ni!do7PRNLHf0GK?$nmhG@dg8DnC@M.0e(rS%")Cu&cL?Zfm+@:l7m% +u*FCg('FcTu,_W%(H\J)&"D/fQ9dKu33[FNdL-iFF(E0B!H7t,<n;'EkinKn?K8/ +Ri[6Lo^K;*[ChOt:'OiFM0X9P@*I94s[3S.3-kIgRC@S,:#M22on;$bX>b+?/eWQ +Uk(*WiK:8.+5doRiH%c66X`phFI[f,0K1YPX=m(2)6fdk0-X.e@()mWEG!A0SYQh +d80lS.0@>-:2Gb2`"E"L85U^nA6U!,3O*!5X96V+Vi2>4'cY!jNL^^u,cRnRQn^i +@`oKF<YLZgD*]*Z7+gR?q]fAVWEYn3-/K!gmr8b.H#CdTS,++T0&D4R$4l^+D)Ai +SWM!5Z+(fj-;A&>_`VI)eibRKY+c+?(u*=4Fr]-Ek2.,mXg;5Y.u4>A[9<5?+8Qs +Jm+iF+0"gu_`mYrJ&l`ktIH`T:X1O'CSY(j;@qKo]lIX=l!8;SX]-E2s9crY.Bt+ +RF=]&f4DMZk7#uDN*Pu(81K`nDqA-;&RZ?ESb@@@#2Z*RF7&Wo*>ee;/D:)Hd+IN +"UM*`3,%9g#m4(iVo->20Kro6+F>N,[c&56L/L[Da,RWdh+b.HAI>b3qS:2^9b`Y +<IH0rj3oXm>]Aj*o`OfE25P%>Xb!u@a=E[ahR^Lm?[D;EkoOP-3,+DhDi6f1;gF] +/1Db/qq$J79)AZK8D;dLN=O4B3WdG@dh%KdOOL'T7O<pba2Vaue6Lo/!C$))J7oH +(5&CO9W;CTV:="J\;Y/WSV7DLuGHrSd.-6@`K@6(`bt&W2FEO1ZJJ36*(H$hKBJV +QhCK$6k=1TU/ip@3^q."GH[SVTZtR':NrlMd-StM:tW0)+'Q"I((2RCVu%PpPujo ++ru?=?J%"<U/A8no9Pl_/Pcr;k3Gl?H]Qp9r#i`E?g;<a"0+YD$r!,k'H_L+ps@F +18-)`SaSF9f(oF`F3:'_qe>g1s_.4\g!!4lHFg;!A3[C7"j#PH6"!E5)G,p9*-<^ +H6CIeGFJYs[\(LRF1%2fbMO1RsBoQPoi#tRBcYV?8=Eb4,q.KUA.qi!9X3^AT+la +qY+h]VcnoDgEHi1Y)[nn,0/]S57$O*?I/4CS>#%4:T.]3CAL:(qGR:`E!)E$bU[? +akmPVG]k8o`lJS!`a>+Y_*%1HtW$1Lcigb',?;(50p>e8IC\Z(D\l-R8aH6(dASj +&Ye%@.e/,d6`@RO's%L=KpReWdQt+/4^gV7A9tf.!ju1m_cD<pK'Yd[mD5]m->8> +*AKs5:@9/"H'8D%&l0t@AS7,h30c?1Nd*u>lY^AN3k"r\jb&bJqEF"5Yo@nTj1"h +O_I8@L['TATj&^u"X4Pn'<+pm6"QH_o@dfmoaqWpE`2MpTd$%1)q=Sf"3K5c.L%e +l=&gOh6%O1k=nH^UTR*d6-kc#\iDE#cG/K6Z^.Qi@%;?nen)9@+[gJSPOMP]N^ZS +3",0[ULF;!491Botf=<Wt76(_1?@L95]`B*0T)Df+<,$Q%B>p5P$<Ik`FKA*&-[2 +8E!j,D0M'3^:FjZ0srsh$i')!81FU_TPkRN"Sb7<j'U(BC-'8q;dEF*o&CJk<:,d +$5,of'j'/Bo?,giP;+[F"1-8Gd<V^%j]06[pnUZdG8'Hu4J/ZL*H78:U3>631%0_ +3L#,:D^U2mC:oL-C?W@$p:R2)Q5#So]lPemE89Oh>4$TNkZZZ3SGADQajHsB&-]D +9>%1gB.7^DMQs7mWk6=:n\Z<u+;L7Y(9)[^]U8;Q=G=.AeQ!J]gW8Q$,IS7F?;5@ +6L9E,^MRrpQ7.%AeLf#@[oQ3esKqVfMmr8M_Qk^DlJEd"'"[m#6u<SXHLs@JdB_R +nWn,!+[5sLS8"_?=EX4'E#?1A;tZdp.N11+CF(QlhBXSVXr#nk0+1BZOdp22^m#9 +X3>o(q/dCPS)kbH[lb!5<dtuu1J6m6^Qqo</Y.EJ'N:=2j#\E_g^sB'%*04Eb#9p +>L^b%Z-JnUGA.%sEe,NWU")H]f6ED=b&I"!)k1mY8Ho\I1t%SGIBN$L;-2I\'Lgp +XkNo99"8*Po]Vq8^sH1Gu2*H[g8S3>k'%/J"<EM9R.C]1rXM`]o_.+JCL[hn1d._ +VmG+n=&RaX,027fH8B]5ra!;Ln7]XncPPSl^bPCL'oKQTbM^/g6I'fW2VJ$+rt5n +HH!+eX7bc^i`+g\!(?uOo6\;\;XYq<PBg"fM;o-I^P3qL]eH$#;7!go_2&>u"K7D +k0%-,.%On:*'tOnoehe$AJK\aOGPK7.E's;4k2Bd@"_<YlHc5d'GWFQpaqTqT\Sc +1"R[#nRRq5+Gn)lWQUISpn]jWAj+YJi$-@-4M\^stTYJY(H]L.UZ`)h?k0dLM]%H +Si4-SsGB]gdl3nH'gKShKu0hade*(q9Q`nfo3;Ys&rP%7WrAItJWY6qo5[O,Sb)a +#ITS99M)C><+PlI[\-K[#b9NIPShY0K*hd#K]Xg`r04aXUnEDSpp/>7VDg#8p?J" +M*'bCCon(<=m%FeiD>!ngt.-qLKa-^WhN-JI,Ym,!SXlM(Mng[`.EOH_3A_+(>c9 +68N;(A!5N81bCh-$GC%5iDePd!`4+LFk9A33>D![B+t_G5<N(8_[@WTi.])'CY-< +:h5^$rGm,&Ya*g@VQ$-SH];/$8h6];\/)JEjDmW4+?$k!28hjK_0[A-5r\373Zm] +lNr"bktXJMfM:hCG<(l#i:&$k^/@$+5a/*cN?'UJ\et"A(jJij8O,Jg#4HM3djmn +oPit"CKE2HjHpGJ.]\*7Sah*I6R01clum%@1YZ9ns#U7[-J2/=SZ,S;jS.VpPN') +d+@S8d=TZaN\a:93g8NWW2+hgD8<1#ji4N`Ua\E%36#O;7G#g/O:YPpO6\/>#Us> +s_PJC)#Mq+:B)YgNGf5[h+Qb&AC<a5OVtYba')Qgs<SmN[<Nb'S\;L18mEXm^rr> +$EQU`SDEU-<8rf+C<p=keG_1u-(&Lu]J5&mEe"0j<FN7\^$LH*7UPB?-\MIiR*m0 +MM0)+N(Vq8(Vp_h5!uc^__g]+I.:d,p'7"i]mm,P@C7lRfN`!O\`GQ\U\RP<tc/= +gt=X#hT0/B67h/c3g..kb2kU0d-sh`(_Ag[.Suapk`ZM&uaKE<;M<B>B(9jMOp?m +BC[:A/*@+1$PI,Y!WmLr"X_2E3maRT9Z1%Rjg>Fa="?(?Z3(`>LD4Z%_;Nkg+XEj +KM^4/D2?*?/(AXhd;8A89DP$U9()@>V/_a]T^R='B5OL-R&;re5RUu#WYD'[k.Xn +O=<k&1S9*"8cPu`;[1[=2l[Q(:OVkYI@E+ameC-(piB^tTM#brT/JiQ+^`#?IjC6 +'YBWP5/!O^aOc[kpR*MCP;KJDL<A8B\%e3:O^0d0%\``!NfKrq2+O-V&NO"s5$ol +8OT9qoDc\hZ*`dcYJ]Q;IMZCJ8Okd&GZls5PFT%7er,+`:&ZgV;J`d$[]_Hf.4(b +]pl%3\I?`Tq21mpBop\&H8h9<PNRu/J7o?C1_'[rSAa@<1lXR.-N)MR3a>/`U`^' +o"-:*@;H>'*6AT/U(r;]uVgZF_9eg,QfGZT,DiMM:@<`('H_BGQ":W:JV+8].!8] +_d8u7UEjCl?4>km^@*$Wb]+n@?!W;%so@M\cK;<F)SWo?&6;cbS6%DqTcBF[+J6N +O!uTF>3H#/Lc)[NC3!*qCOEVHUh0iS\33J%-X*!62Vsen95hiR25GE@?@0l-LQt] +JfC=O<PsFV&%M21i"Q/c;K+(K:*40d,DrK9MA@OrZ,PZ+)[%?(o)sZIuo>_[P80- +""uA3LoIdB!A&\.CB=_9;ENQll'iX.8lSq]\P9Iar/UdW31a:YLk1bC!:Hbd)$jq +mi,Rd!UE&>+p?RQS7^d07hBjG8/Ik6@5c8gY.U#+Pp:C%;.u9b=omk!S%Q^A!hl* +&R\]B%HpR:n7-B(8*6!8[.9V%%Fc4Id#-&jX=,=!&Bn2P=PVdeW/W(e3Q@HJi90P +u(mE-F&%L-s*<mj@qD2mm3rgQpBnVLo+fHPatE%H#8,!3A]CQonut&EVQqj1!->E +n8:)HEpJ,JK+-;Kf<L5Q9ob0i<1]\=GD[d?sm)BQNSGnBI1$!@7@4_g2-@d`%%SU +!MmN0$srK]3k9'f.R)X'>Tga/`FSQ6ST('ulN4D@SXa.Ado]RYVtK(Y!3]UZL3Qg +l_=N4tPHIHrd..\/%KoBd)dZ0/0KM[udE![p7,"*G)Q;TtFLD3s=h@;iHm"V8W5) +(@XL^:1d;Xc%i"%?XN!hNM'F9\XVKC3T)L'HOf0Bi71K*4r+b\i&N`Zu+B-\Dfn9 +QdGMEr$bb*Zk4qor`W#NWaA6:(@7HQtrX0u3<7jQ\h<*8NEC4CJGUTL>:8S6$I[W +J\R?kR"-kZ!ba90P[TA*mEVMLYu=2P?8>1)9[muUIt725IJ""6YO:S_deHYEhZn. +lEl\(FY(%FY_Mg(*cd=Y^YgpUUJ07!Q%dY<b\J9K.o8>7W%C<HIaK5SX^ESn4r,` +=S)f5L!m:fSk+PP4rilOKNG,j1').2^a-"=`J7'3p&`ZEf<n!O?/1E^]!'_>@[Fd +l=WfkB.$![+6@W/CQ+ld4#X:2?AdNd33M&K%3!n?eVR%<%nYhR3^!pE:W,Bb:s]j +p"EWNQt,_Lj4E80b+A13>^SIMms8A/(R4@DWtipO`naL>"MmZ\^/[9I[F@\"kunc +8?ia!#&C;bH+0"&Or1k3l^Ap*:2Y'SE7%6%Ya?T+[`Vb/`QhJ)357-R732i,oW_* +qSLh10KC+Bi6n*?IWCa7I6QDCJ4-a\H^M*s3[qd)aZu@m\th#+MbIZf\V,KSaEc0 +fY3,Rs[LEDCN%u9Ek_2Ed&E)RmYV!LE.,M@bP6f@X(^0$3ZEI9+/Xf:k<I*.K=pl +1rFJWZd$kPba2cYR2ZuM+D#GP.;osOo9%=SCTKi/Hn>P@ON,"huR.>J6o,*56XTf +L.n^pt:W660D'rQ_JD!#fM0#s$<K'@/S6KWS:Ng_24p3NoO2e1C&?E,@;h.S<pA^ +eMA6W+<9DP\G0]q5U?B$353W2oRj+"TbHOUFrq&d8jr$Uk1H(%J^!m2FB7>!(,93 +Tb*3.CBaq!lg+[>#)1V=p;gp=;Q1qXM.`o63PcW5[,:_rO.>LH@Ep[1gI7d?^K>T +"7Yq])O?d@9al.:,)Z:*V&@*5u1-S8c%81dc3<o5Z;b(*QdW,pn;b_o!*>tf=L_K +V&cWKj`[2[cVP.8r^/Pb=]VCa-`/f<H\a*_9o;TA/Db\1*hLDkETO:NuQV2a;W\% +G&<+WN^C[RB2+S.h)[>R()BnZl=#a;hCj6Eef**4,.Fm(k+K(Y`r6S&>'@HmXX=0 +P+$moe?G6ChM3#GuI/h:uDZOo3;\hU$^hC+i_!)CY_%h`84EgZO;+s?qp/U(fEtg +p`[I5_:^lRAMfrnc5T6liZ:s9!LqFU<".gNMM[+C&jW/OR+IW9:%bRqW\Fn?$j\5 +:D'$0LWI\>M;oV^pCI<I8_D,7nC%=5,6)r^W%n@2J3#EbIp2bbd#\%_[4mNGTlr< +lY0n*q,j*YEi!)^4.).H+1D6jcRp_tF^rGcbtrikgPWm\Pon3VX-90#Yu/ar)O_k +jg^l^Y!%+Hkb9C:c4LBLF1<!b-:G6V@m0IdqfiQ=0.?UZW]\FBi4HdOaMMqSS<+_ +1*:&KQM*V`Gdg/p"!<%6h<JtVM&4IR`3IN*7[<Rh=m!#UK0E2RGH@k]mX>jOE`X6 +UB<$]M2rc?$*i&03?8$#ef_^pro0;M$bVcOe`.jGdV\$>(P29%Gbs--Yq_@10!T7 +(GV1$+AeBY`d::H1-N[,JhcS,j/N#WEK6_.L>n/U,itt!a2!Sj)N6>@Q^@L'VmHZ +\'%$aU?_OjL[!T_g7R>R`PnW2td"%=Oe>;e@+`NNBW*JQWDX91^:G!C8[2+\Q#O> +4eYn\^:O-bNt"P710)i'BrS59A(G\/h!6]&JrtL#J@%$p3#g5g!'Tji+YE"t*p32 +0#>'b8Pl#IUm,](XBA/FtK9J+7fVmi:/lOZ&VaSG<\"sdB]F+S3!D[;tP'UpBlWF +bZ3da"iGFD#m*65#c+n6CV2>F*bU3@D5$NEist$CL;*3Td\!/%BtcXi-EpoOSnqL +V7dH)KE,m4XB)BCCnDloiill'<1H"0NnUk7hgB)HQ0YI\]F\HjaTdo4?_Pubo`<C +% +^;IcH/6ePBg'Ic=ReAo(pf]c8TS1LZb15JO4bNAj.rr=54RqFT:hRA2lOp;kNb=E +XI+bJN\eeiB./D%laRI>(_.Mj8>_H@1L8&f@RoLQq_`%NWpR@mha(Id,DT]I;2Y= +% +b1OS]80k-8=:V88g5!]"dLeiY)>Fn(BdNp&RH@C/i+L(]q$M"S!26e3h-8598LJI +_c=hJB`A]jggeZat4>M:8h!<QHl$*'Y9&XSVifMAYQISiFn=en6/O&IVkYR*A8(/ +Nhse(BN'h"<nt,l\luZCDb=pi7+"p<NeITLIr5T+.V[)1i;L6>1c_]266>5k;sqH +EB,-s\Q)=31MIui,W)/%I^,:MU2P,CRf0(ICi<G;Co80G`o9\:]@O,$JTqe<aat& +'/26H=URnmE#:Q]-)%^*80)dVr6CU:,XD(AbrrDI65S(5CM$cTUq:6.:6o/*-3S= +[(R)f^<3E\*d%B.5.)@"#Bk#L%m_nUHJTa5>!lbM^h&dKNa#Fr)rcBnu^[GUS-Gr +MM%S72IuG`:3%M4r('pjpk@iQJ>PmVTg,TLQiq_kmta-cS<5KEY(ZX"R-DFb[U6- +[R4cDt>W.hQqWl%_Lm*_ric+/eEopLkn^Wc8]<.XLpFbJ7aH8WQ//G\/MXFKt,"Q +YIn'%;@2Xs_:#qUEfjnj]&.]lBnT=drr=aqa%d#O==$s*^76+YBKJ\HQo"]Q.\,l +"J3G%]07u(tZ8Bmd,bXAj@*=(t3Oo.L"9/?U&\fa[pR?A?6_<d&E$ikOWK'HX(M= +:\ML,*6e2*FanWGT\3I#\0>-Ff4T7XpMS`MS`3?L7rRKl=;F!cQ%GfH*kaBu"sN, +=JlV?!*'o5_5`E-oR/a^:)u!\NFXIdo_'>o6S'"8irTDXUU$_(uFY@X,hH:K<a*" +^\Xcf?Q@0)L.W]37/df?*F[pW(f/DXVfk[LMES&l\lJN(MA@-RLh.klO;J'AFe3< +CqD_k@M2-[Y>6KAd"#Xhj=^_['OJ#J5UE8[_[=#jYgg\H=$g_l^75a7pEY0k[]cJ +Cp18)Bmn@V<6N0YcTPUeA/?/a1d/&K3*+^LGiQ0!2/70:Xpmg#jJVT?`c\/f(Et0 +V`bPqRMS*+MU`(F@QS`?5e&W\mUDm@H#X@[l^+*kBn5pA<.ja0Jdm0%osQPKkA"N +?26N?cHJ6]s=mk7LEuI2Ess'"jk.'FMp;)teb-.*;I.d1p.Fd.b.M]?Sb0(/Klg+ +PWjhN!.Y+hAqDh=[OQ?QIsH)JGD-n\))#k,?29k]#IsS3msWo6?3rOO"#_+$D(kY +.Hj0H_OSb!!-.B.<4^]3aR#a@L,?mrU^HK8XtJ^.goDCh`=VA\6r7$Uemj:E'[=- +<`rY,5)#BZBn=LPUK\Qf(`P]A--]`Kt+_/iGiW(Mn&4]"UM0LHrmu4-d;&r"d3)h +,_U+MEiYnC:ldWi;'McC2)d_F;Mj<P;'j!*,Zq_M&J*o@jqfSdeq!sM;iE*A&BbO +pG@H\ROU`"=b2e)M=!f9=O>G1^`234=^_Fnj!oTT(hc2_iCTnV*=;7siFBa?,635 +% +N\YFQXrU=rL_O)U\q/%u`.V_299@]/k.sW>#B[($!j];3BUDO2\s2[K%*r($o?!H +d;%=gO:+pX9#L8Zgj#'1m,!%'-nc"!Y45c`L*l?KJLt.`EkZ8WN-.^S$pPIW^`(r +% +<I(#AV7hBnWr[GrqQV#T';^""&EHOO'e#p!F<3E+\3"%Ag55EH._<[f`~> +%%EOF diff --git a/ipol/ipol_style_201905/siims_logo.jpg b/ipol/ipol_style_201905/siims_logo.jpg new file mode 100644 index 0000000000000000000000000000000000000000..e10f01aaba22c6164083e6601a5612de3ca669e1 Binary files /dev/null and b/ipol/ipol_style_201905/siims_logo.jpg differ diff --git a/ipol/ipol_style_201905/utils/minijpeg.sh b/ipol/ipol_style_201905/utils/minijpeg.sh new file mode 100755 index 0000000000000000000000000000000000000000..7230b4871cd9183145fc092addb66b7501645dbf --- /dev/null +++ b/ipol/ipol_style_201905/utils/minijpeg.sh @@ -0,0 +1,53 @@ +#! /bin/sh +# +# JPEG file optimizer +# +# Reduce the file of a JPEG file without modifying any pixel value by: +# - remove metadata (EXIF etc.) with jpegtran +# - optimize Huffman coding with jpegtran +# +# TODO: check for tools beforehand +# usage help +# less redundancy + +set -e + +do_remove_markers() { + IN=$1 + TMP=$(tempfile) + jpegtran -copy none $IN > $TMP + touch -r $IN $TMP + mv $TMP $IN +} + +do_optimize_compression() { + IN=$1 + TMP=$(tempfile) + jpegtran -optimize $IN > $TMP + touch -r $IN $TMP + mv $TMP $IN + jpegtran -optimize -progressive $IN > $TMP + touch -r $IN $TMP + if [ $(get_size $TMP) -lt $(get_size $IN) ]; then + mv $TMP $IN + fi; +} + +get_size() { + du -b $1 | cut -f1 +} + +# do stuff + +for OLD in "$@"; do + NEW=$(tempfile) + cp $OLD $NEW + do_remove_markers $NEW + do_optimize_compression $NEW + touch -r $OLD $NEW + if [ $(get_size $NEW) -lt $(get_size $OLD) ]; then + mv $NEW $OLD + else + rm $NEW + fi; +done diff --git a/ipol/ipol_style_201905/utils/minipng.sh b/ipol/ipol_style_201905/utils/minipng.sh new file mode 100755 index 0000000000000000000000000000000000000000..cfc45087a0255231fcab2373db07c11f430f66f0 --- /dev/null +++ b/ipol/ipol_style_201905/utils/minipng.sh @@ -0,0 +1,61 @@ +#! /bin/sh +# +# PNG file optimizer +# +# Reduce the file of a PNG file without modifying any pixel value: +# - remove metadata (comment etc.) with pngcrush +# - optimize filters with optipng +# - optimize compression with advdef +# +# TODO: check for tools beforehand +# usage help +# less redundancy +# use pngzop instead of advdef + +set -e + +do_remove_chunks() { + IN=$1 + TMP=kk1.png + pngcrush -q -f 0 -l 0 -m 1 \ + -rem iTXt -rem tEXt -rem zTXt \ + -rem bKGD -rem hIST -rem pHYs \ + -rem sPLT -rem sTER -rem tIME -rem tRNS \ + $IN $TMP + touch -r $IN $TMP + mv $TMP $IN +} + +do_optimize_filters() { + IN=$1 + TMP=kk2.png + cp $IN $TMP + optipng -quiet -o1 -f0-5 $TMP + touch -r $IN $TMP + mv $TMP $IN +} + +do_optimize_deflate() { + IN=$1 + TMP=kk3.png + cp $IN $TMP + advdef -z -3 $TMP + touch -r $IN $TMP + mv $TMP $IN +} + +get_size() { + du -b $1 | cut -f1 +} + +# do stuff + +for OLD in "$@"; do + NEW=kk.png + cp $OLD $NEW + do_remove_chunks $NEW + do_optimize_filters $NEW + do_optimize_deflate $NEW > /dev/null + touch -r $OLD $NEW + mv $NEW $OLD +done