--- a
+++ b/papers/player-chapter/algorithm2e.sty
@@ -0,0 +1,2122 @@
+%  algorithm2e.sty --- style file for algorithms
+%% Copyright 1996-2005 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
+%  
+%  Report bugs and comments to:
+%  fiorio@lirmm.fr
+%
+%  $Id: algorithm2e.sty,v 1.1.1.1 2005/12/20 00:13:38 gerkey Exp $
+%
+%  PACKAGES REQUIRED:
+%
+%  - float  (in contrib/supported/float)
+%  - ifthen (in base)
+%  - xspace (in packages/tools)
+%
+%%%%%%%%%%%%%%%  Release 3.9
+%
+%   History: 
+%
+%   - October  04 2005  - revision 3.9 -
+%                      * ADD: - \setalcaphskip command which set 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: - scright OPTION (default): right justified side comments (side comments
+%                               are flushed to the righr)
+%                      * ADD: - scleft OPTION: 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: - fillcomment OPTION (default): end mark of comment is flushed to the
+%                               right so comments fill all the width of text
+%                      * ADD: - nofillcomment OPTION: end mark of comment is put right after the
+%                               comment
+%                      * ADD: - \SetNoFillComment acts as nofillcomment option.
+%                      * ADD: - \SetFillComment acts as fillcomment option.
+%                      * ADD: - dotocloa OPTION 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 set 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 listofalgorithm in listofalgorithme
+%                      * 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}.
+%                      * 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 \gElsIf \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!
+%
+%%%%%%%%%%%%%%
+%
+%   Package options: 
+%   ---------------
+%   - french, english, german, portuguese, czech  : for the name of the algorithm, e.g.
+%   - boxed, boxruled, ruled, 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.
+%   - linesnumbered                    : auto numbering of the algorithm's lines
+%   - 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.
+%   - resetcount, noresetcount         : start value of line numbers.
+%   - algonl                           : line numbers preceded by algo number
+%   - shortend, longend, noend         : short or long end keyword as endif for e.g.
+%  
+%   defaults are; english,plain,resetcount,titlenotnumbered
+%
+%%%%%%%%%%%%%%
+%
+%   Short summary  
+%   -------------
+%  
+%   algorithm is an environment for writing algorithm in LaTeX2e
+%   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}[H]
+%     \SetLine
+%     \AlgData{this text}
+%     \AlgResult{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 english keywords
+%
+%     \AlgData{input}
+%     \AlgResult{output}
+%     \KwIn{input}
+%     \KwOut{output}
+%     \KwData{input}
+%     \KwResult{output}
+%     \Ret{[value]}
+%     \KwTo                                       % a simple keyword
+%     \Begin{block inside}
+%     \If{condition}{Then block}                  % in a block
+%     \uIf{condition}{Then block}                 % in a block unended
+%     \Else{inside Else}                          % in a block
+%     \eIf{condition}{Then Block}{Else block}     % in blocks
+%     \lIf{condition}{Else text}                  % on the same line
+%     \lElse{Else text}                           % on the same line        
+%     \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
+%     \Repeat{End condition}{text loop}           % in a block
+%     \lRepeat{condition}{text}                   % on the same line
+%     \While{condition}{text loop}                % in a block
+%     \lWhile{condition}{text loop}               % on the same line
+%
+%
+%%%%%%%%%%%%%%        predefined french keywords
+%
+%     \AlgDonnees{input}
+%     \AlgRes{input}
+%     \Donnees{input}
+%     \Res{input}
+%     \Retour[valeur]}
+%     \Deb{block inside}
+%     \KwA                                          % un mot clef simple
+%     \Si{condition}{Bloc du Alors}                 % Dans un bloc
+%     \uSi{condition}{Bloc du Alors}                % Dans un bloc non termine
+%     \eSi{condition}{Bloc du Alors}{Bloc du Sinon} % Dans un bloc
+%     \lSi{condition}{texte du Alors}               % sur la meme ligne
+%     \lSinon{texte du Sinon}                       % sur la meme ligne
+%     \Suivant{Condition}{Bloc de l'instruction}
+%     \Cas{cas}{Bloc de ce cas}                     % Dans un bloc
+%     \lCas{cas}{Bloc de ce cas}                    % sur la meme ligne
+%     \Autres{Bloc de l'alternative}                % Dans un bloc
+%     \lAutres{Bloc de l'alternative}               % sur la meme ligne
+%     \Pour{condition}{texte de la boucle}          % Dans un bloc
+%     \lPour{condition}{texte}                      % sur la meme ligne
+%     \PourCh{condition}{texte de la boucle}          % Dans un bloc
+%     \lPourCh{condition}{texte}                      % sur la meme ligne
+%     \Repeter{End condition}{texte de la boucle}   % Dans un bloc
+%     \lRepeter{condition}{texte}                   % sur la meme ligne
+%     \Tq{condition}{texte de la boucle}            % Dans un bloc
+%     \lTq{condition}{texte de la boucle}           % sur la meme ligne
+%
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% for more complete informations you can see algorithm2e.tex
+%
+%
+%%%%%%%%%%%%%%%%%%%%%%%% Identification Part %%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+\NeedsTeXFormat{LaTeX2e}[1994/12/01]
+%
+\ProvidesPackage{algorithm2e}[2005/10/04 v3.9 algorithms environments]
+%
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%% Initial Code %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+\@makeother\*% some package redefined it as a letter (as color.sty)
+%
+% definition of commands which can be redefined in options of the package.
+%
+\newcounter{AlgoLine}
+\setcounter{AlgoLine}{0}
+%
+\newcommand{\listalgorithmcfname}{}
+\newcommand{\algorithmcfname}{}
+\newcommand{\algocf@typo}{}
+\newcommand{\@algocf@procname}{}
+\newcommand{\@algocf@funcname}{}
+\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}
+%
+%
+%%%%%%%%%%%%%%%%%%%%%% Declaration of Options %%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+\RequirePackage{ifthen}
+%
+\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}
+}
+%
+\DeclareOption{english}{%
+\renewcommand{\listalgorithmcfname}{List of Algorithms}%
+\renewcommand{\algorithmcfname}{Algorithm}%
+\renewcommand{\algocf@typo}{}%
+\renewcommand{\@algocf@procname}{Procedure}
+\renewcommand{\@algocf@funcname}{Function}
+}
+%
+\DeclareOption{french}{%
+\renewcommand{\listalgorithmcfname}{Liste des Algorithmes}%
+\renewcommand{\algorithmcfname}{Algorithme}%
+\renewcommand{\algocf@typo}{\ }%
+\renewcommand{\@algocf@procname}{Proc�dure}
+\renewcommand{\@algocf@funcname}{Fonction}
+}
+%
+\DeclareOption{czech}{%
+\renewcommand{\listalgorithmcfname}{Seznam algoritm\v{u}}%
+\renewcommand{\algorithmcfname}{Algoritmus}%
+\renewcommand{\algocf@typo}{}%
+\renewcommand{\@algocf@procname}{Procedura}
+\renewcommand{\@algocf@funcname}{Funkce}
+}
+%
+\DeclareOption{german}{%
+\renewcommand{\listalgorithmcfname}{Liste der Algorithmen}%
+\renewcommand{\algorithmcfname}{Algorithmus}%
+\renewcommand{\algocf@typo}{\ }%
+\renewcommand{\@algocf@procname}{Prozedur}%
+\renewcommand{\@algocf@funcname}{Funktion}%
+}
+%
+\DeclareOption{portugues}{%
+\renewcommand{\listalgorithmcfname}{Lista de Algoritmos}%
+\renewcommand{\algorithmcfname}{Algoritmo}%
+\renewcommand{\algocf@typo}{}%
+\renewcommand{\@algocf@procname}{Procedimento}
+\renewcommand{\@algocf@funcname}{Fun\c{c}\~{a}o}
+}
+%
+% 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{\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}
+%
+% 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}%
+    \AlTitleFnt{\@algocf@titleofalgoname\
+      \expandafter\csname the\algocf@float\endcsname\algocf@typo : }}%
+}
+%
+\DeclareOption{titlenotnumbered}{\renewcommand{\@titleprefix}{%
+    \AlTitleFnt{\@algocf@titleofalgoname\algocf@typo : }}%
+}
+%
+% OPTIONs lined, vlined & noline
+%
+\DeclareOption{lined}{\AtBeginDocument{\SetLine}}    % \SetLine
+\DeclareOption{vlined}{\AtBeginDocument{\SetVline}}  % \SetVline
+\DeclareOption{noline}{\AtBeginDocument{\SetNoline}} % \Setnoline (default)
+%
+% OPTIONs algonl
+% line numbered with the counter of the algorithm
+%
+\DeclareOption{algonl}{\renewcommand{\theAlgoLine}{\expandafter\csname the\algocf@float\endcsname.\arabic{AlgoLine}}}
+%
+% OPTIONs longend, shotend & noend
+%
+\DeclareOption{longend}{%
+\renewcommand{\defaultsmacros@algo}{\algocf@defaults@longend}}
+\DeclareOption{shortend}{%
+\renewcommand{\defaultsmacros@algo}{\algocf@defaults@shortend}}
+\newboolean{algocf@optnoend}\setboolean{algocf@optnoend}{false}
+\DeclareOption{noend}{%
+  \setboolean{algocf@optnoend}{true}%
+  \renewcommand{\defaultsmacros@algo}{\algocf@defaults@noend}}
+%
+% 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}%
+}
+%
+%
+%%%%%%%%%%%%%%%%%%%%%%% Execution of Options %%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+\ExecuteOptions{english,plain,resetcount,titlenotnumbered}
+%
+\ProcessOptions
+%
+\@algocf@algotitleofalgo % fix name for \Titleofalgo to \algorithmcfname by default
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%% Package Loading %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+%\RequirePackage{float}[2001/11/08]
+%
+\RequirePackage{xspace}
+%
+\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}{october 04 2005}
+\newcommand{\algocf@version}{Release 3.9}
+\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{theHalgocf}{\def\theHalgocf{\thealgocf}}{}%
+% \@ifundefined{theHAlgoLine}{\def\theHAlgoLine{\thealgocf}}{}%
+% \@ifundefined{toclevel@algocf}{\def\toclevel@algocf{0}}{}%
+%%
+%%
+%%
+\newcommand{\@defaultskiptotal}{0.5em}%\Setnlskip{0.5em}
+\newskip\skiptotal\skiptotal=0.5em%\Setnlskip{0.5em}
+\newskip\skiprule
+\newskip\skiphlne
+\newskip\skiptext
+\newskip\skiplength
+\newskip\algomargin
+\newskip\skipalgocfslide\skipalgocfslide=1em
+\newdimen\algowidth
+\newdimen\inoutsize
+\newdimen\inoutline
+%
+\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}}
+\newcommand{\setnlskip}[1]{\Setnlskip{#1}}%kept for compatibility issue
+%%
+\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{\nlSty}[1]{\textnormal{\textbf{#1}}}% default definition
+\newcommand{\Setnlsty}[3]{\renewcommand{\nlSty}[1]{\textnormal{\csname#1\endcsname{#2##1#3}}}}
+%
+%
+\newcommand{\algocf@nlhlabel}[2]{%
+  \immediate\write\@auxout{%
+    \string\newlabel{#1}{%
+      {#2}% current label
+      {\thepage}% page
+      {}% current label string
+%      {AlgoLine\thealgocfline.\theAlgoLine}% current Href
+      {AlgoLine\thealgocfline.\theAlgoLine}% current Href
+      {}%
+    }%
+  }%
+}
+%
+% nl definitions
+%
+\newcommand{\nl}{%
+  \@ifundefined{href}{% 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}\Hy@raisedlink{\hyper@anchorstart{AlgoLine\thealgocfline.\theAlgoLine}\hyper@anchorend}%
+    \stepcounter{AlgoLine}\Hy@raisedlink{\hyper@anchorstart{AlgoLine\thealgocfline.\theAlgoLine}\hyper@anchorend}%
+  }% now we can do the line numbering
+  \strut\vadjust{\kern-\dp\strutbox\vtop to \dp\strutbox{%
+      \baselineskip\dp\strutbox\vss\llap{\scriptsize{\nlSty{\theAlgoLine}\hskip\skiptotal}}\null}}%
+}%
+\newcommand{\nllabel}[1]{%
+  \@ifundefined{href}{\label{#1}}{\algocf@nlhlabel{#1}{\theAlgoLine}}}%
+%
+\newcommand{\enl}{;%
+  \@ifundefined{href}{% 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}\Hy@raisedlink{\hyper@anchorstart{AlgoLine\thealgocfline.\theAlgoLine}\hyper@anchorend}%
+    \stepcounter{AlgoLine}\Hy@raisedlink{\hyper@anchorstart{AlgoLine\thealgocfline.\theAlgoLine}\hyper@anchorend}%
+  }% now we can do the line numbering
+  \hfill\rlap{%
+  \scriptsize{\nlSty{\theAlgoLine}}}\par}
+\newcommand{\nlset}[1]{%
+  \hskip 0pt\llap{%
+  \scriptsize{\nlSty{#1}}\hskip\skiptotal}\ignorespaces}
+%
+% lnl definitions
+%
+\@ifundefined{href}{% if not hyperref
+  \newcommand{\lnl}[1]{\nl\label{#1}\ignorespaces}%
+}{%                   else hyperref
+  \newcommand{\lnl}[1]{\nl\algocf@nlhlabel{#1}{\theAlgoLine}\ignorespaces}%
+}
+%
+% nlset
+%
+\@ifundefined{href}{%
+  \newcommand{\lnlset}[2]{\nlset{#2}\protected@edef\@currentlabel{#2}\label{#1}}%
+}{%else hyperref
+  \newcommand{\lnlset}[2]{\nlset{#2}%
+    \Hy@raisedlink{\hyper@anchorstart{AlgoLine.#2}\hyper@anchorend}\algocf@nlhlabel{#1}{#2}%
+    \ignorespaces%
+  }%
+}
+
+%
+% set char put at end of each line
+%
+\newcommand{\algocf@endline}{\string;}
+\newcommand{\SetEndCharOfAlgoLine}[1]{\renewcommand{\algocf@endline}{#1}}
+%
+% end of line definition
+%
+\newcommand{\@endalgoln}{\algocf@endline\par}% default definition: printsemicolon
+\newcommand{\dontprintsemicolon}{\renewcommand{\@endalgoln}{\par}}
+\newcommand{\printsemicolon}{\renewcommand{\@endalgoln}{\algocf@endline\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{\AlTitleFnt}[1]{\textbf{#1}\unskip}% default definition
+\newcommand{\SetAlTitleFnt}[1]{\renewcommand{\AlTitleFnt}[1]{\csname#1\endcsname{##1}\unskip}}%
+\newcommand{\AlFnt}{\relax}% default definition
+\newcommand{\SetAlFnt}[1]{\renewcommand{\AlFnt}{#1}}%
+\newcommand{\AlCapFnt}{\AlFnt{}}% default definition
+\newcommand{\SetAlCapFnt}[1]{\renewcommand{\AlCapFnt}{#1}}%
+\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{\al@push}[1]{\advance\skiptotal by #1\moveright #1}
+\newcommand{\al@pop}[1]{\advance\skiptotal by -#1}
+\newcommand{\al@addskiptotal}{\advance\skiptotal by 0.4pt\advance\hsize by -0.4pt}  % 0.4 pt=width of \vrule
+\newcommand{\al@subskiptotal}{\advance\skiptotal by -0.4pt\advance\hsize by 0.4pt} % 0.4 pt=width of \vrule
+%
+\skiphlne=.8ex%
+\newcommand{\Setvlineskip}[1]{\skiphlne=#1}
+\newcommand{\V@line}[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
+  \al@push{\skiprule}%        move to the right before the vertical rule
+  \hbox{\vrule%
+    \vtop{\al@push{\skiptext}%move the right after the rule
+      \vtop{\al@addskiptotal\advance\hsize by -\skiplength #1}\Hlne}}\vskip\skiphlne% inside the block
+  \al@pop{\skiprule}%\al@subskiptotal% restore indentation
+  \nointerlineskip}% no vskip after
+%
+\newcommand{\V@sline}[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
+  \al@push{\skiprule}%        move to the right before the vertical rule
+  \hbox{\vrule%               the vertical rule
+    \vtop{\al@push{\skiptext}%move the right after the rule
+      \vtop{\al@addskiptotal\advance\hsize by -\skiplength #1}}}% inside the block
+  \al@pop{\skiprule}}% restore indentation
+  %\nointerlineskip}%  no vskip after
+%
+\newcommand{\H@lne}{\hrule height 0.4pt depth 0pt width .5em}
+%
+\newcommand{\No@line}[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
+  \al@push{\skiprule}%
+  \hbox{%
+    \vtop{\al@push{\skiptext}%
+      \vtop{\advance\hsize by -\skiplength #1}}}% inside the block
+  \al@pop{\skiprule}}%
+  %\nointerlineskip}% no vskip after
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%
+%% default=NoLine
+%
+\newcommand{\a@@block}[2]{\No@line{##1}\KwSty{##2}\par}
+\newcommand{\a@block}[2]{\a@@block{#1}{#2}} % this to be redefined as a@group in
+                                            % case of noend option
+\newcommand{\a@group}[1]{\No@line{##1}}
+\newcommand{\Hlne}{}
+%
+%
+\newcommand{\SetNoline}{%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Noline
+\renewcommand{\a@@block}[2]{\No@line{##1}\KwSty{##2}\strut\par}%
+\renewcommand{\a@group}[1]{\No@line{##1}}
+\renewcommand{\Hlne}{}}
+%
+\newcommand{\SetVline}{%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Vline
+\renewcommand{\a@@block}[2]{\V@line{##1}}%
+\renewcommand{\a@group}[1]{\V@sline{##1}\strut\ignorespaces}
+\renewcommand{\Hlne}{\H@lne}}
+%
+\newcommand{\SetLine}{%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Line
+\renewcommand{\a@@block}[2]{\strut\V@sline{##1}\KwSty{##2}\strut\par}% no skip after a block so garantie at least a line
+\renewcommand{\a@group}[1]{\V@sline{##1}\strut\ignorespaces}
+\renewcommand{\Hlne}{}}
+%
+\newcommand{\SetNothing}{%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Noline
+\renewcommand{\a@@block}[2]{\No@line{##1}\par}%
+%\long
+\renewcommand{\a@group}[1]{\No@line{##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{\hbox{\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}\hfill:\mbox{\ }}##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}}%
+  }
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% 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\ }%
+      \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]{%
+  \@ifundefined{#1}{\let\algocf@mkcmd=\newcommand}{\let\algocf@mkcmd=\renewcommand}%
+  \expandafter\algocf@mkcmd\csname @#1\endcsname[1]{\FuncSty{#2(}\ArgSty{##1}\FuncSty{)}}%
+  \expandafter\algocf@mkcmd\csname#1\endcsname{%
+    \@ifnextchar\bgroup{\csname @#1\endcsname}{\FuncSty{#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\a@group{##2}\KwSty{#3}%
+  \@ifnextchar({\csname algocf@#1end\endcsname}{\par}}%
+% without side text at the beginning
+\expandafter\algocf@mkcmd\csname algocf@#1\endcsname[1]{% \Begin{}
+  \KwSty{#2}\a@group{##1}\KwSty{#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\a@block{##3}{#8}}%
+% without side text
+\expandafter\algocf@mkcmd\csname algocf@#1\endcsname[2]{% \Switch{}{}
+  \KwSty{#4} \ArgSty{##1} \KwSty{#5}\a@block{##2}{#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\a@block{##3}{#8}}%
+\expandafter\def\csname algocf@u#2opt\endcsname(##1)##2##3{% \uCase(){}{}
+  \KwSty{#6} \ArgSty{##2} ##1\a@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}\a@block{##2}{#8}}%
+\expandafter\algocf@mkcmd\csname algocf@u#2\endcsname[2]{% \uCase{}{}
+  \KwSty{#6} \ArgSty{##1}\a@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\a@block{##2}{#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}\a@block{##1}{#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]{\a@block{##1}{#8}}%
+\expandafter\algocf@mkcmd\csname #1@noend\endcsname[1]{\a@group{##1}}%
+\expandafter\algocf@mkcmd\csname #1@else\endcsname[1]{\a@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#1opt\endcsname}{\csname algocf@e#1optif\endcsname}}
+% with side text after if
+\expandafter\def\csname algocf@e#1opt\endcsname(##1)##2##3{% \eIf()
+  \csname #1@ifthen\endcsname{##2} ##1\csname #1@else\endcsname{##3}%
+  \csname algocf@e#1opte\endcsname}
+% without side text after if
+\expandafter\def\csname algocf@e#1optif\endcsname##1##2{% \eIf()
+  \csname #1@ifthen\endcsname{##1}\csname #1@else\endcsname{##2}%
+  \csname algocf@e#1opte\endcsname}%
+% side text after else or not ?
+\expandafter\def\csname algocf@e#1opte\endcsname{% 
+  \@ifnextchar({\csname algocf@e#1optopt\endcsname}{\csname algocf@e#1\endcsname}}
+% else with a side text
+\expandafter\def\csname algocf@e#1optopt\endcsname(##1)##2{% 
+  ##1\csname #1@endif\endcsname{##2}}
+% else without side text
+\expandafter\algocf@mkcmd\csname algocf@e#1\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@#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}}%
+}
+%
+% old for backward compatibility
+\newcommand{\SetKwIf}[6]{%
+  \SetKwIF{#1}{cf@dumb}{#2}{#3}{#4}{cf@dumb}{#5}{#6}%
+  \typeout{**** WARNING: SetKwIf deprecated: use SetKwIF instead*****^^J}%
+}%
+\newcommand{\SetKwIfElseIf}[8]{%
+  \SetKwIF{#1}{#2}{#3}{#4}{#5}{#6}{#7}{#8}%
+  \typeout{**** WARNING: SetKwIfElseIf deprecated: use SetKwIF instead*****^^J}%
+}%
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% 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\a@block{##3}{#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}\a@block{##2}{#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\a@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}\a@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@captiontext}[2]{#1\algocf@typo: \AlCapFnt{}#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@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
+}
+%
+\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\kern2pt\hrule height.8pt depth0pt\kern2pt}%
+\newcommand{\algocf@caption@algoruled}{\algocf@caption@ruled}%
+\newcommand{\algocf@caption@boxruled}{%
+  \addtolength{\hsize}{-0.8pt}%
+  \hbox to\hsize{%
+    \vrule%\hskip-0.35pt%
+    \vbox{%
+      \hrule\vskip2\lineskip%
+      \hbox to\hsize{\unhbox\algocf@capbox\hfill}\vskip2\lineskip%
+    }% 
+    %\hskip-0.35pt%
+    \vrule%
+  }\vskip-2\lineskip\nointerlineskip%
+  \addtolength{\hsize}{0.8pt}%
+}
+%
+%
+%%%% set caption for the environment
+
+% beamer define is own caption overrinding latex caption!
+% as we need it, we have put here the original definition
+\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%
+\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.
+%
+\newcommand{\algocf@setcaption}{%
+  \let\algocf@savecaption=\@caption%
+  \let\@caption=\algocf@latexcaption%
+  \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}{%
+  \let\@caption=\algocf@savecaption%
+  \let\@makecaption=\algocf@oldmakecaption%
+}
+%
+%%%%% nocaptionofalgo and restorecaptionofalgo --
+\newcommand{\nocaptionofalgo}{%
+  \let\@old@algocf@captiontext=\algocf@captiontext%
+  \renewcommand{\algocf@captiontext}[2]{\AlCapFnt{}##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
+%
+\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
+\def\fnum@algocf{{\AlCapFnt\AlTitleFnt{\algorithmcfname\nobreakspace\thealgocf}}}
+\newenvironment{algocf}%      % float environment for algorithms
+               {\@float{algocf}}%
+               {\end@float}
+\newenvironment{algocf*}%     % float* environment for algorithms
+               {\@dblfloat{algocf}}
+               {\end@dblfloat}
+
+\ifx\l@chapter\undefined%
+\newcommand\listofalgocfs{    % list of algorithms
+    \section*{\listalgorithmcfname}%
+      \@mkboth{\MakeUppercase\listalgorithmcfname}%
+              {\MakeUppercase\listalgorithmcfname}%
+    \@starttoc{loa}%
+    }
+\else%
+\newcommand\listofalgocfs{%
+    \if@twocolumn
+      \@restonecoltrue\onecolumn
+    \else
+      \@restonecolfalse
+    \fi
+    \chapter*{\listalgorithmcfname}%
+      \@mkboth{\MakeUppercase\listalgorithmcfname}%
+              {\MakeUppercase\listalgorithmcfname}%
+    \@starttoc{loa}%
+    \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.8pt depth0pt\kern2pt}%
+\def\@algocf@post@ruled{\kern2pt\hrule\relax}%
+\def\@algocf@capt@ruled{top}%
+\def\@algocf@pre@algoruled{\hrule height.8pt depth0pt\kern2pt}%
+\def\@algocf@post@algoruled{\kern2pt\hrule\relax}%
+\def\@algocf@capt@algoruled{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}%
+%
+%% before algocf or figure environment
+\newcommand{\@algocf@init@caption}{%
+  \@algocf@algotitleofalgo% fix name for \Titleofalgo to \algorithmcfname
+  \algocf@setcaption%       set caption to our caption style
+}%
+\newcommand{\@algocf@init}{%
+  \refstepcounter{algocfline}%
+  \ifthenelse{\boolean{algocf@optnoend}}{%
+      \renewcommand{\a@block}[2]{\a@group{##1}}%
+    }{%
+      \renewcommand{\a@block}[2]{\a@@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{\a@block}[2]{\a@@block{##1}{##2}}
+    }{%
+      \renewcommand{\a@block}[2]{\a@group{##1}}%
+    }%
+}
+%
+%%%%%%%%%%%%%%%%%
+%% 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
+  \egroup%end of hbox wich contains [margin][vtop]
+  \ifthenelse{\boolean{algocf@slide}}{\decmargin{\skipalgocfslide}}{}%
+  %
+  \egroup%end of main vbox
+  \end{lrbox}%
+  %\egroup% end of algo box
+  \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@algoH}\setboolean{algocf@algoH}{false}
+\newenvironment{algocf@Here}{\noindent%
+  \def\@captype{algocf}% if not defined, caption exit with an error
+%  \hbox\bgroup%
+  \begin{minipage}{\hsize}
+}{%
+  \end{minipage}
+%  \egroup%
+}%
+\newenvironment{\algocf@envname}[1][htbp]{%
+   \@algocf@init%
+   \ifthenelse{\equal{\algocf@float}{figure}}%
+     {\begin{figure}[#1]}%
+   {\@algocf@init@caption\ifthenelse{\equal{#1}{H}}%
+     {\setboolean{algocf@algoH}{true}\begin{algocf@Here}}%
+     {\begin{algocf}[#1]}%
+   }%
+    \@algocf@start% 
+    \@ResetCounterIfNeeded%
+    \algocf@linesnumbered%
+}{%
+    \@algocf@finish%
+    \ifthenelse{\equal{\algocf@float}{figure}}%
+     {\end{figure}}%
+   {\@algocf@term@caption\ifthenelse{\boolean{algocf@algoH}}%
+     {\end{algocf@Here}}%
+     {\end{algocf}}%
+   }%
+   \@algocf@term
+}
+%%%
+%%% algorithm*
+%%%
+\newenvironment{\algocf@envname*}[1][htbp]{%
+  \@algocf@init%
+  \ifthenelse{\equal{\algocf@float}{figure}}%
+    {\begin{figure*}[#1]}%
+    {\begin{algocf*}[#1]}%
+     \@algocf@start%
+     \@ResetCounterIfNeeded%
+     \algocf@linesnumbered%
+}{
+     \@algocf@finish%
+  \ifthenelse{\equal{\algocf@float}{figure}}%
+  {\end{figure*}}%
+  {\end{algocf*}}%
+  \@algocf@term%
+}
+%
+%%%%%%%%%%%%%%%%%%%%%%%
+%%%
+%
+\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)
+%
+\newcommand{\ProcNameSty}[1]{\FuncSty{#1}}%
+\newcommand{\SetProcNameSty}[1]{\renewcommand{\ProcNameSty}[1]{\textnormal{\csname#1\endcsname{##1}}}}
+\newcommand{\ProcArgSty}[1]{\ArgSty{#1}}%
+\newcommand{\SetProcArgSty}[1]{\renewcommand{\ProcArgSty}[1]{\textnormal{\csname#1\endcsname{##1}}}}
+% 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]{%
+  {\AlCapFnt{}\AlTitleFnt{\algocf@procname} %
+  \ProcNameSty{\algocf@captname #2@}% Name of the procedure in ProcName Style. 
+  \ifthenelse{\equal{\algocf@captparam #2@}{\arg@e}}{}% if no argument, write nothing
+  {%                                                else put arguments in ProcArgSty:
+    \ProcNameSty{(}\ProcArgSty{\algocf@captparam #2@}\ProcNameSty{)}%
+  }% endif
+  \algocf@captother #2@%
+  }
+}
+%%%% set caption for the 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{% 
+  \gdef\@currentlabel{\algocf@captname #3@}%
+  \algocf@old@caption{#1}[\algocf@procname\nobreakspace #2]{\ #3}%
+}%
+\newcommand{\algocf@setcaptionproc}{%
+  \let\algocf@oldcaptiontext=\algocf@captiontext%
+  \renewcommand{\algocf@captiontext}[2]{%
+    \algocf@captionproctext{##1}{##2}}%
+  \let\algocf@old@caption=\@caption%
+  \let\@caption=\algocf@caption@proc%
+}
+%%%%% reset caption
+\newcommand{\algocf@resetcaptionproc}{%
+  \let\algocf@captiontext=\algocf@oldcaptiontext%
+  \let\@caption=\algocf@old@caption%
+}
+%
+%
+%%%%% algocf@proc is the generic environment for procedure and function environment.
+%
+\newboolean{algocf@procstar}\setboolean{algocf@procstar}{false}
+\newenvironment{algocf@proc}[1][htbp]{%
+    \@algocf@proctitleofalgo% set Titleofalgo to Procedure: or Function:
+                            % accordingly to the environment
+    \let\old@thealgocf=\thealgocf%\renewcommand{\thealgocf}{--}%
+    \algocf@setcaptionproc%   set the text of caption to proc
+    \algocf@setcaption%       set caption to our caption style
+    \refstepcounter{algocfline}%
+    \ifthenelse{\equal{\algocf@float}{figure}}{%
+      \ifthenelse{\boolean{algocf@procstar}}{\begin{figure*}[#1]}{\begin{figure}[#1]}%
+    }{%
+      \ifthenelse{\boolean{algocf@procstar}}%
+         {\begin{algocf*}[#1]}%
+         {\ifthenelse{\equal{#1}{H}}%
+            {\setboolean{algocf@algoH}{true}\begin{algocf@Here}}%
+            {\begin{algocf}[#1]}%
+         }%
+    }%
+       \@algocf@start%
+       \@ResetCounterIfNeeded%
+       \algocf@linesnumbered%
+}{%
+       \@algocf@finish%
+    \ifthenelse{\equal{\algocf@float}{figure}}{%
+      \ifthenelse{\boolean{algocf@procstar}}{\end{figure*}}{\end{figure}}%
+    }{%
+      \ifthenelse{\boolean{algocf@procstar}}
+         {\end{algocf*}}
+         {\ifthenelse{\boolean{algocf@algoH}}
+            {\end{algocf@Here}}%
+            {\end{algocf}}%
+         }%
+    }%
+    \let\thealgocf=\old@thealgocf%
+    \@algocf@term% restore original caption and H boolean
+    \algocf@resetcaptionproc%
+}
+
+%
+% -- procedure and function environments are defined from algocf@proc environment
+%
+\newenvironment{procedure}[1][htbp]%
+{\setboolean{algocf@procstar}{false}%
+ \newcommand{\algocf@procname}{\@algocf@procname}\begin{algocf@proc}[#1]}%
+{\end{algocf@proc}}
+\newenvironment{function}[1][htbp]%
+{\setboolean{algocf@procstar}{false}%
+ \newcommand{\algocf@procname}{\@algocf@funcname}\begin{algocf@proc}[#1]}%
+{\end{algocf@proc}}
+%
+\newenvironment{procedure*}[1][htbp]%
+{\setboolean{algocf@procstar}{true}%
+ \newcommand{\algocf@procname}{\@algocf@procname}\begin{algocf@proc}[#1]}%
+{\end{algocf@proc}}
+\newenvironment{function*}[1][htbp]%
+{\setboolean{algocf@procstar}{true}%
+ \newcommand{\algocf@procname}{\@algocf@funcname}\begin{algocf@proc}[#1]}%
+{\end{algocf@proc}}
+%
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% 
+\newcommand{\Titleofalgo}[1]{\@titleprefix\TitleSty{#1}\par\smallskip}
+%
+%
+% -------------------------   Default Definitions
+%
+%%
+%%
+%
+\newcommand{\algocf@defaults@common}{
+%\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}%
+%
+\SetKwComment{tcc}{/* }{ */}
+\SetKwComment{tcp}{// }{}
+%
+%\SetKwInOut{AlgData}{Data}\SetKwInOut{AlgResult}{Result}
+\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}%
+%
+% --- German keywords
+%
+% \SetKwInOut{AlgDaten}{Daten}%AlgData
+% \SetKwInOut{AlgErgebnis}{Ergebnis}%AlgResult
+\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
+%
+% --- Czech keywords
+%
+% \SetKwInOut{AlgVst}{Vstup}\SetKwInOut{AlgVyst}{V\'{y}stup}
+\SetKwInput{Vst}{Vstup}%
+\SetKwInput{Vyst}{V\'{y}stup}%
+\SetKwInput{Vysl}{V\'{y}sledek}%
+%
+% --- Portuguese keywords
+%
+% \SetKwInOut{AlgDados}{Dados}\SetKwInOut{AlgResultado}{Result.}
+\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}}%
+% --- End 
+}
+%
+%
+\newcommand{\algocf@defaults@longend}{%
+\algocf@defaults@common
+\SetKwIF{gSi}{gSinonSi}{gSinon}{si}{alors}{sinon si}{sinon}{finsi}%
+\SetKwIF{Si}{SinonSi}{Sinon}{si}{alors}{sinon si}{sinon}{finsi}%
+\SetKwSwitch{Suivant}{Cas}{Autre}{suivant}{faire}{cas o\`u}{autres cas}{fin d'alternative}%
+\SetKwFor{Pour}{pour}{faire}{finpour}%
+\SetKwFor{PourPar}{pour}{faire en parall�le}{finpour}%
+\SetKwFor{PourCh}{pour chaque}{faire}{finprch}%
+\SetKwFor{PourTous}{pour tous les}{faire}{finprts}%
+\SetKwFor{Tq}{tant que}{faire}{fintq}%
+%
+\SetKwIF{gIf}{gElsIf}{gElse}{if}{then}{else if}{else}{endif}%
+\SetKwIF{If}{ElseIf}{Else}{if}{then}{else if}{else}{endif}%
+\SetKwSwitch{Switch}{Case}{Other}{switch}{do}{case}{otherwise}{endsw}%
+\SetKwFor{For}{for}{do}{endfor}%
+\SetKwFor{ForPar}{for}{do in parallel}{endfpar}
+\SetKwFor{ForEach}{foreach}{do}{endfch}%
+\SetKwFor{ForAll}{forall the}{do}{endfall}%
+\SetKwFor{While}{while}{do}{endw}%
+%
+% --- German for longend
+%
+\SetKwIF{gWenn}{gSonstWenn}{gSonst}{wenn}{dann}{sonst wenn}{sonst}{Ende-wenn}%gIf
+\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
+%
+% --- Portuguese
+%
+\SetKwIF{gSe}{gSenaoSe}{gSenao}{se}{ent\~{a}o}{sen\~{a}o se}{sen\~{a}o}{fim se}%
+\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}%
+}
+%
+%
+\newcommand{\algocf@defaults@shortend}{%
+\algocf@defaults@common
+\SetKwIF{gSi}{gSinonSi}{gSinon}{si}{alors}{sinon si}{sinon}{fin}%
+\SetKwIF{Si}{SinonSi}{Sinon}{si}{alors}{sinon si}{sinon}{fin}%
+\SetKwSwitch{Suivant}{Cas}{Autre}{suivant}{faire}{cas o\`u}{autres cas}{fin}%
+\SetKwFor{Pour}{pour}{faire}{fin}%
+\SetKwFor{PourPar}{pour}{faire en parall�le}{fin}%
+\SetKwFor{PourCh}{pour chaque}{faire}{fin}%
+\SetKwFor{PourTous}{pour tous les}{faire}{fin}%
+\SetKwFor{Tq}{tant que}{faire}{fin}%
+%
+%
+\SetKwIF{gIf}{gElsIf}{gElse}{if}{then}{else if}{else}{end}%
+\SetKwIF{If}{ElseIf}{Else}{if}{then}{else if}{else}{end}%
+\SetKwSwitch{Switch}{Case}{Other}{switch}{do}{case}{otherwise}{end}%
+\SetKwFor{For}{for}{do}{end}%
+\SetKwFor{ForPar}{for}{do in parallel}{end}
+\SetKwFor{ForEach}{foreach}{do}{end}%
+\SetKwFor{ForAll}{forall}{do}{end}%
+\SetKwFor{While}{while}{do}{end}%
+%
+% --- German for shortend
+%
+\SetKwIF{gWenn}{gSonstWenn}{gSonst}{wenn}{dann}{sonst wenn}{sonst}{Ende}%gIf
+\SetKwIF{Wenn}{SonstWenn}{Sonst}{wenn}{dann}{sonst wenn}{sonst}{Ende}%gIf
+\SetKwSwitch{Unterscheide}{Fall}{Anderes}{unterscheide}{tue}{Fall}{sonst}{}%Switch
+\SetKwFor{Fuer}{f\"ur}{tue}{Ende}%For
+\SetKwFor{FuerPar}{f\"ur}{tue gleichzeitig}{Ende}%ForPar
+\SetKwFor{FuerJedes}{f\"ur jedes}{tue}{Ende}%ForEach
+\SetKwFor{FuerAlle}{f\"ur alle}{tue}{Ende}%ForAll
+\SetKwFor{Solange}{solange}{tue}{Ende}%While
+%
+% --- Portuguese
+%
+\SetKwIF{gSe}{gSenaoSe}{gSenao}{se}{ent\~{a}o}{sen\~{a}o se}{sen\~{a}o}{fim}%
+\SetKwIF{Se}{SenaoSe}{Senao}{se}{ent\~{a}o}{sen\~{a}o se}{sen\~{a}o}{fim}%
+\SetKwSwitch{Selec}{Caso}{Outro}{selecione}{fa\c{c}a}{caso}{sen\~{a}o}{fim}%
+\SetKwFor{Para}{para}{fa\c{c}a}{fim}%
+\SetKwFor{ParaPar}{para}{fa\c{c}a em paralelo}{fim}
+\SetKwFor{ParaCada}{para cada}{fa\c{c}a}{fim}%
+\SetKwFor{ParaTodo}{para todo}{fa\c{c}a}{fim}%
+\SetKwFor{Enqto}{enquanto}{fa\c{c}a}{fim}%
+}
+%
+%
+\newcommand{\algocf@defaults@noend}{%
+\renewcommand{\a@block}[2]{\a@group{##1}}
+\algocf@defaults@common
+\SetKwIF{gSi}{gSinonSi}{gSinon}{si}{alors}{sinon si}{sinon}{}%
+\SetKwIF{Si}{SinonSi}{Sinon}{si}{alors}{sinon si}{sinon}{}%
+\SetKwSwitch{Suivant}{Cas}{Autre}{suivant}{faire}{cas o�}{autres cas}{}%
+\SetKwFor{Pour}{pour}{faire}{}%
+\SetKwFor{PourPar}{pour}{faire en parall�le}{}%
+\SetKwFor{PourCh}{pour chaque}{faire}{}%
+\SetKwFor{PourTous}{pour tous les}{faire}{}%
+\SetKwFor{Tq}{tant que}{faire}{}%
+%
+\SetKwIF{gIf}{gElsIf}{gElse}{if}{then}{else if}{else}{}%
+\SetKwIF{If}{ElsIf}{Else}{if}{then}{else if}{else}{}%
+\SetKwSwitch{Switch}{Case}{Other}{switch}{do}{case}{otherwise}{}%
+\SetKwFor{For}{for}{do}{}%
+\SetKwFor{ForPar}{for}{do in parallel}{}
+\SetKwFor{ForEach}{foreach}{do}{}%
+\SetKwFor{ForAll}{forall}{do}{}%
+\SetKwFor{While}{while}{do}{}%
+% --- German for noend
+\SetKwIF{gWenn}{gSonstWenn}{gSonst}{wenn}{dann}{sonst wenn}{sonst}{}%gIf
+\SetKwIF{Wenn}{SonstWenn}{Sonst}{wenn}{dann}{sonst wenn}{sonst}{}%gIf
+\SetKwSwitch{Unterscheide}{Fall}{Anderes}{unterscheide}{tue}{Fall}{sonst}{}%Switch
+\SetKwFor{Fuer}{f\"ur}{tue}{}%For
+\SetKwFor{FuerPar}{f\"ur}{tue gleichzeitig}{}%ForPar
+\SetKwFor{FuerJedes}{f\"ur jedes}{tue}{}%ForEach
+\SetKwFor{FuerAlle}{f\"ur alle}{tue}{}%ForAll
+\SetKwFor{Solange}{solange}{tue}{}%While
+% --- Portuguese
+\SetKwIF{gSe}{gSenaoSe}{gSenao}{se}{ent\~{a}o}{sen\~{a}o se}{sen\~{a}o}{}%
+\SetKwIF{Se}{SenaoSe}{Senao}{se}{ent\~{a}o}{sen\~{a}o se}{sen\~{a}o}{}%
+\SetKwSwitch{Selec}{Caso}{Outro}{selecione}{fa\c{c}a}{caso}{sen\~{a}o}{}%
+\SetKwFor{Para}{para}{fa\c{c}a}{}%
+\SetKwFor{ParaPar}{para}{fa\c{c}a em paralelo}{}
+\SetKwFor{ParaCada}{para cada}{fa\c{c}a}{}%
+\SetKwFor{ParaTodo}{para todo}{fa\c{c}a}{}%
+\SetKwFor{Enqto}{enquanto}{fa\c{c}a}{}%
+}
+%
+%%
+%%
+%%
+%
+% default macros are:
+\defaultsmacros@algo
+\SetNoline
+%
+%
+%
+%%
+%%%
+%%%% END