thys2/Journal/Paper.tex
changeset 372 78cc255e286f
parent 371 f65444d29e74
child 376 664322da08fe
equal deleted inserted replaced
371:f65444d29e74 372:78cc255e286f
    57 \isadelimdocument
    57 \isadelimdocument
    58 %
    58 %
    59 \endisadelimdocument
    59 \endisadelimdocument
    60 %
    60 %
    61 \begin{isamarkuptext}%
    61 \begin{isamarkuptext}%
    62 This works builds on previous work by Ausaf and Urban using 
    62 This paper builds on previous work by Ausaf and Urban using 
    63 regular expression'd bit-coded derivatives to do lexing that 
    63 regular expression'd bit-coded derivatives to do lexing that 
    64 is both fast and satisfied the POSIX specification.
    64 is both fast and satisfies the POSIX specification.
    65 In their work, a bit-coded algorithm introduced by Sulzmann and Lu
    65 In their work, a bit-coded algorithm introduced by Sulzmann and Lu
    66 was formally verified in Isabelle, by a very clever use of
    66 was formally verified in Isabelle, by a very clever use of
    67 flex function and retrieve to carefully mimic the way a value is 
    67 flex function and retrieve to carefully mimic the way a value is 
    68 built up by the injection funciton.
    68 built up by the injection funciton.
    69 
    69 
    79 \isa{lexer\mbox{$_b$}\ r\ s\ {\isacharequal}{\kern0pt}\ lexer\ r\ s}
    79 \isa{lexer\mbox{$_b$}\ r\ s\ {\isacharequal}{\kern0pt}\ lexer\ r\ s}
    80 \end{lemma}
    80 \end{lemma}
    81 
    81 
    82 However what is not certain is whether we can add simplification
    82 However what is not certain is whether we can add simplification
    83 to the bit-coded algorithm, without breaking the correct lexing output.
    83 to the bit-coded algorithm, without breaking the correct lexing output.
    84 This might sound trivial in the case of producing a YES/NO answer,
    84 
    85 but once we require a lexing output to be produced (which is required
    85 
    86 in applications like compiler front-end, malicious attack domain extraction, 
    86 The reason that we do need to add a simplification phase
    87 etc.), it is not straightforward if we still extract what is needed according
    87 after each derivative step of  $\textit{blexer}$ is
    88 to the POSIX standard.
    88 because it produces intermediate
    89 
    89 regular expressions that can grow exponentially.
    90 By simplification, we mean specifically the following rules:
    90 For example, the regular expression $(a+aa)^*$ after taking
    91 
    91 derivative against just 10 $a$s will have size 8192.
    92 \begin{center}
    92 %TODO: add figure for this?
    93   \begin{tabular}{lcl}
       
    94   \isa{\mbox{}\inferrule{\mbox{}}{\mbox{ASEQ\ bs\ AZERO\ r\isactrlsub {\isadigit{2}}\ {\isasymleadsto}\ AZERO}}}\\
       
    95   \isa{\mbox{}\inferrule{\mbox{}}{\mbox{ASEQ\ bs\ r\isactrlsub {\isadigit{1}}\ AZERO\ {\isasymleadsto}\ AZERO}}}\\
       
    96   \isa{\mbox{}\inferrule{\mbox{}}{\mbox{ASEQ\ bs\ {\isacharparenleft}{\kern0pt}AONE\ bs\isactrlsub {\isadigit{1}}{\isacharparenright}{\kern0pt}\ r\isactrlsub {\isadigit{1}}\ {\isasymleadsto}\ fuse\ {\isacharparenleft}{\kern0pt}bs\ {\isacharat}{\kern0pt}\ bs\isactrlsub {\isadigit{1}}{\isacharparenright}{\kern0pt}\ r\isactrlsub {\isadigit{1}}}}}\\
       
    97   \isa{\mbox{}\inferrule{\mbox{bs\ {\isasymleadsto}\ r\isactrlsub {\isadigit{1}}}}{\mbox{ASEQ\ bs\ bs\ r{\isadigit{3}}{\isachardot}{\kern0pt}{\isadigit{0}}\ {\isasymleadsto}\ ASEQ\ bs\ r\isactrlsub {\isadigit{1}}\ r{\isadigit{3}}{\isachardot}{\kern0pt}{\isadigit{0}}}}}\\
       
    98   \isa{\mbox{}\inferrule{\mbox{bs\ {\isasymleadsto}\ r\isactrlsub {\isadigit{2}}}}{\mbox{ASEQ\ bs\ r{\isadigit{1}}{\isachardot}{\kern0pt}{\isadigit{0}}\ bs\ {\isasymleadsto}\ ASEQ\ bs\ r{\isadigit{1}}{\isachardot}{\kern0pt}{\isadigit{0}}\ r\isactrlsub {\isadigit{2}}}}}\\
       
    99   \isa{\mbox{}\inferrule{\mbox{bs\ {\isasymleadsto}\ r\isactrlsub {\isadigit{1}}}}{\mbox{AALTs\ bs\ {\isacharparenleft}{\kern0pt}rs{\isadigit{1}}{\isachardot}{\kern0pt}{\isadigit{0}}\ {\isacharat}{\kern0pt}\ {\isacharbrackleft}{\kern0pt}bs{\isacharbrackright}{\kern0pt}\ {\isacharat}{\kern0pt}\ rs{\isadigit{2}}{\isachardot}{\kern0pt}{\isadigit{0}}{\isacharparenright}{\kern0pt}\ {\isasymleadsto}\ AALTs\ bs\ {\isacharparenleft}{\kern0pt}rs{\isadigit{1}}{\isachardot}{\kern0pt}{\isadigit{0}}\ {\isacharat}{\kern0pt}\ {\isacharbrackleft}{\kern0pt}r\isactrlsub {\isadigit{1}}{\isacharbrackright}{\kern0pt}\ {\isacharat}{\kern0pt}\ rs{\isadigit{2}}{\isachardot}{\kern0pt}{\isadigit{0}}{\isacharparenright}{\kern0pt}}}}\\
       
   100   \isa{\mbox{}\inferrule{\mbox{}}{\mbox{AALTs\ bs\ {\isacharparenleft}{\kern0pt}r\isactrlsub {\isadigit{2}}\ {\isacharat}{\kern0pt}\ AZERO\mbox{$\,$}{\isacharcolon}{\kern0pt}{\isacharcolon}{\kern0pt}\mbox{$\,$}rsb{\isacharparenright}{\kern0pt}\ {\isasymleadsto}\ AALTs\ bs\ {\isacharparenleft}{\kern0pt}r\isactrlsub {\isadigit{2}}\ {\isacharat}{\kern0pt}\ rsb{\isacharparenright}{\kern0pt}}}}\\
       
   101   \isa{\mbox{}\inferrule{\mbox{}}{\mbox{AALTs\ bs\ {\isacharparenleft}{\kern0pt}r\isactrlsub {\isadigit{1}}\ {\isacharat}{\kern0pt}\ AALTs\ bs{\isadigit{1}}{\isachardot}{\kern0pt}{\isadigit{0}}\ rs{\isadigit{1}}{\isachardot}{\kern0pt}{\isadigit{0}}\mbox{$\,$}{\isacharcolon}{\kern0pt}{\isacharcolon}{\kern0pt}\mbox{$\,$}rsb{\isacharparenright}{\kern0pt}\ {\isasymleadsto}\ AALTs\ bs\ {\isacharparenleft}{\kern0pt}r\isactrlsub {\isadigit{1}}\ {\isacharat}{\kern0pt}\ map\ {\isacharparenleft}{\kern0pt}fuse\ bs{\isadigit{1}}{\isachardot}{\kern0pt}{\isadigit{0}}{\isacharparenright}{\kern0pt}\ rs{\isadigit{1}}{\isachardot}{\kern0pt}{\isadigit{0}}\ {\isacharat}{\kern0pt}\ rsb{\isacharparenright}{\kern0pt}}}}\\
       
   102   \isa{\mbox{}\inferrule{\mbox{}}{\mbox{AALTs\ bs\ {\isacharparenleft}{\kern0pt}map\ {\isacharparenleft}{\kern0pt}fuse\ r\isactrlsub {\isadigit{2}}{\isacharparenright}{\kern0pt}\ rs{\isacharparenright}{\kern0pt}\ {\isasymleadsto}\ AALTs\ {\isacharparenleft}{\kern0pt}bs\ {\isacharat}{\kern0pt}\ r\isactrlsub {\isadigit{2}}{\isacharparenright}{\kern0pt}\ rs}}}\\
       
   103   \isa{\mbox{}\inferrule{\mbox{}}{\mbox{AALTs\ {\isacharparenleft}{\kern0pt}bs\ {\isacharat}{\kern0pt}\ r\isactrlsub {\isadigit{1}}{\isacharparenright}{\kern0pt}\ rs\ {\isasymleadsto}\ AALTs\ bs\ {\isacharparenleft}{\kern0pt}map\ {\isacharparenleft}{\kern0pt}fuse\ r\isactrlsub {\isadigit{1}}{\isacharparenright}{\kern0pt}\ rs{\isacharparenright}{\kern0pt}}}}\\
       
   104   \isa{\mbox{}\inferrule{\mbox{}}{\mbox{AALTs\ bs\ {\isacharbrackleft}{\kern0pt}{\isacharbrackright}{\kern0pt}\ {\isasymleadsto}\ AZERO}}}\\
       
   105   \isa{\mbox{}\inferrule{\mbox{}}{\mbox{AALTs\ bs\ {\isacharbrackleft}{\kern0pt}r\isactrlsub {\isadigit{1}}{\isacharbrackright}{\kern0pt}\ {\isasymleadsto}\ fuse\ bs\ r\isactrlsub {\isadigit{1}}}}}\\
       
   106   \isa{\mbox{}\inferrule{\mbox{bs\mbox{$^\downarrow$}\ {\isacharequal}{\kern0pt}\ r\isactrlsub {\isadigit{2}}\mbox{$^\downarrow$}}}{\mbox{AALTs\ bs\ {\isacharparenleft}{\kern0pt}rsa\ {\isacharat}{\kern0pt}\ {\isacharbrackleft}{\kern0pt}bs{\isacharbrackright}{\kern0pt}\ {\isacharat}{\kern0pt}\ rsb\ {\isacharat}{\kern0pt}\ {\isacharbrackleft}{\kern0pt}r\isactrlsub {\isadigit{2}}{\isacharbrackright}{\kern0pt}\ {\isacharat}{\kern0pt}\ rsc{\isacharparenright}{\kern0pt}\ {\isasymleadsto}\ AALTs\ bs\ {\isacharparenleft}{\kern0pt}rsa\ {\isacharat}{\kern0pt}\ {\isacharbrackleft}{\kern0pt}bs{\isacharbrackright}{\kern0pt}\ {\isacharat}{\kern0pt}\ rsb\ {\isacharat}{\kern0pt}\ rsc{\isacharparenright}{\kern0pt}}}}\\
       
   107 
       
   108 
       
   109   \isa{\mbox{}\inferrule{\mbox{}}{\mbox{Empty\ {\isacharcolon}{\kern0pt}\ \isactrlbold {\isadigit{1}}}}} & 
       
   110   \isa{\mbox{}\inferrule{\mbox{}}{\mbox{Char\ c\ {\isacharcolon}{\kern0pt}\ c}}}\\[4mm]
       
   111   \isa{\mbox{}\inferrule{\mbox{v\isactrlsub {\isadigit{1}}\ {\isacharcolon}{\kern0pt}\ r\isactrlsub {\isadigit{1}}}}{\mbox{Left\ v\isactrlsub {\isadigit{1}}\ {\isacharcolon}{\kern0pt}\ r\isactrlsub {\isadigit{1}}\ {\isacharplus}{\kern0pt}\ r\isactrlsub {\isadigit{2}}}}} &
       
   112   \isa{\mbox{}\inferrule{\mbox{v\isactrlsub {\isadigit{2}}\ {\isacharcolon}{\kern0pt}\ r\isactrlsub {\isadigit{1}}}}{\mbox{Right\ v\isactrlsub {\isadigit{2}}\ {\isacharcolon}{\kern0pt}\ r\isactrlsub {\isadigit{2}}\ {\isacharplus}{\kern0pt}\ r\isactrlsub {\isadigit{1}}}}}\\[4mm]
       
   113   \isa{\mbox{}\inferrule{\mbox{v\isactrlsub {\isadigit{1}}\ {\isacharcolon}{\kern0pt}\ r\isactrlsub {\isadigit{1}}}\\\ \mbox{v\isactrlsub {\isadigit{2}}\ {\isacharcolon}{\kern0pt}\ r\isactrlsub {\isadigit{2}}}}{\mbox{Seq\ v\isactrlsub {\isadigit{1}}\ v\isactrlsub {\isadigit{2}}\ {\isacharcolon}{\kern0pt}\ r\isactrlsub {\isadigit{1}}\ {\isasymcdot}\ r\isactrlsub {\isadigit{2}}}}}  &
       
   114   \isa{\mbox{}\inferrule{\mbox{{\isasymforall}v{\isasymin}vs{\isachardot}{\kern0pt}\ v\ {\isacharcolon}{\kern0pt}\ r\ {\isasymand}\ {\isacharbar}{\kern0pt}v{\isacharbar}{\kern0pt}\ {\isasymnoteq}\ {\isacharbrackleft}{\kern0pt}{\isacharbrackright}{\kern0pt}}}{\mbox{Stars\ vs\ {\isacharcolon}{\kern0pt}\ r\isactrlsup {\isasymstar}}}}
       
   115 
       
   116 
       
   117   \end{tabular}
       
   118 \end{center}
       
   119 
       
   120 
       
   121 And these can be made compact by the following simplification function:
       
   122 
       
   123 \begin{center}
    93 \begin{center}
   124   \begin{tabular}{lcl}
    94   \begin{tabular}{lcl}
   125   \isa{bsimp\ {\isacharparenleft}{\kern0pt}ASEQ\ bs\ r\isactrlsub {\isadigit{1}}\ r\isactrlsub {\isadigit{2}}{\isacharparenright}{\kern0pt}} & $\dn$ & \isa{bsimp{\isacharunderscore}{\kern0pt}ASEQ\ bs\ {\isacharparenleft}{\kern0pt}bsimp\ r\isactrlsub {\isadigit{1}}{\isacharparenright}{\kern0pt}\ {\isacharparenleft}{\kern0pt}bsimp\ r\isactrlsub {\isadigit{2}}{\isacharparenright}{\kern0pt}}\\
    95   \isa{bsimp\ {\isacharparenleft}{\kern0pt}ASEQ\ bs\ r\isactrlsub {\isadigit{1}}\ r\isactrlsub {\isadigit{2}}{\isacharparenright}{\kern0pt}} & $\dn$ & \isa{bsimp{\isacharunderscore}{\kern0pt}ASEQ\ bs\ {\isacharparenleft}{\kern0pt}bsimp\ r\isactrlsub {\isadigit{1}}{\isacharparenright}{\kern0pt}\ {\isacharparenleft}{\kern0pt}bsimp\ r\isactrlsub {\isadigit{2}}{\isacharparenright}{\kern0pt}}\\
   126   \isa{bsimp\ {\isacharparenleft}{\kern0pt}AALTs\ bs{\isadigit{1}}{\isachardot}{\kern0pt}{\isadigit{0}}\ rs{\isacharparenright}{\kern0pt}} & $\dn$ & \isa{bsimp{\isacharunderscore}{\kern0pt}AALTs\ bs{\isadigit{1}}{\isachardot}{\kern0pt}{\isadigit{0}}\ {\isacharparenleft}{\kern0pt}distinctBy\ {\isacharparenleft}{\kern0pt}flts\ {\isacharparenleft}{\kern0pt}map\ bsimp\ rs{\isacharparenright}{\kern0pt}{\isacharparenright}{\kern0pt}\ erase\ {\isasymemptyset}{\isacharparenright}{\kern0pt}}\\
    96   \isa{bsimp\ {\isacharparenleft}{\kern0pt}AALTs\ bs{\isadigit{1}}{\isachardot}{\kern0pt}{\isadigit{0}}\ rs{\isacharparenright}{\kern0pt}} & $\dn$ & \isa{bsimp{\isacharunderscore}{\kern0pt}AALTs\ bs{\isadigit{1}}{\isachardot}{\kern0pt}{\isadigit{0}}\ {\isacharparenleft}{\kern0pt}distinctBy\ {\isacharparenleft}{\kern0pt}flts\ {\isacharparenleft}{\kern0pt}map\ bsimp\ rs{\isacharparenright}{\kern0pt}{\isacharparenright}{\kern0pt}\ erase\ {\isasymemptyset}{\isacharparenright}{\kern0pt}}\\
   127   \isa{bsimp\ AZERO} & $\dn$ & \isa{AZERO}\\
    97   \isa{bsimp\ AZERO} & $\dn$ & \isa{AZERO}\\
   128   \isa{{\isacharparenleft}{\kern0pt}r\isactrlsub {\isadigit{1}}\ {\isacharplus}{\kern0pt}\ r\isactrlsub {\isadigit{2}}{\isacharparenright}{\kern0pt}\mbox{$^\uparrow$}} & $\dn$ & \isa{AALT\ {\isacharbrackleft}{\kern0pt}{\isacharbrackright}{\kern0pt}\ {\isacharparenleft}{\kern0pt}fuse\ {\isacharbrackleft}{\kern0pt}Z{\isacharbrackright}{\kern0pt}\ {\isacharparenleft}{\kern0pt}r\isactrlsub {\isadigit{1}}\mbox{$^\uparrow$}{\isacharparenright}{\kern0pt}{\isacharparenright}{\kern0pt}\ {\isacharparenleft}{\kern0pt}fuse\ {\isacharbrackleft}{\kern0pt}S{\isacharbrackright}{\kern0pt}\ {\isacharparenleft}{\kern0pt}r\isactrlsub {\isadigit{2}}\mbox{$^\uparrow$}{\isacharparenright}{\kern0pt}{\isacharparenright}{\kern0pt}}\\
    98   \isa{{\isacharparenleft}{\kern0pt}r\isactrlsub {\isadigit{1}}\ {\isacharplus}{\kern0pt}\ r\isactrlsub {\isadigit{2}}{\isacharparenright}{\kern0pt}\mbox{$^\uparrow$}} & $\dn$ & \isa{AALT\ {\isacharbrackleft}{\kern0pt}{\isacharbrackright}{\kern0pt}\ {\isacharparenleft}{\kern0pt}fuse\ {\isacharbrackleft}{\kern0pt}Z{\isacharbrackright}{\kern0pt}\ {\isacharparenleft}{\kern0pt}r\isactrlsub {\isadigit{1}}\mbox{$^\uparrow$}{\isacharparenright}{\kern0pt}{\isacharparenright}{\kern0pt}\ {\isacharparenleft}{\kern0pt}fuse\ {\isacharbrackleft}{\kern0pt}S{\isacharbrackright}{\kern0pt}\ {\isacharparenleft}{\kern0pt}r\isactrlsub {\isadigit{2}}\mbox{$^\uparrow$}{\isacharparenright}{\kern0pt}{\isacharparenright}{\kern0pt}}\\
   129 \end{tabular}
    99 \end{tabular}
   130 \end{center}
   100 \end{center}
   131 
   101 
       
   102 
       
   103 This might sound trivial in the case of producing a YES/NO answer,
       
   104 but once we require a lexing output to be produced (which is required
       
   105 in applications like compiler front-end, malicious attack domain extraction, 
       
   106 etc.), it is not straightforward if we still extract what is needed according
       
   107 to the POSIX standard.
       
   108 
       
   109 
       
   110 
       
   111 
       
   112 
       
   113 By simplification, we mean specifically the following rules:
       
   114 
       
   115 \begin{center}
       
   116   \begin{tabular}{lcl}
       
   117   \isa{\mbox{}\inferrule{\mbox{}}{\mbox{ASEQ\ bs\ AZERO\ r\isactrlsub {\isadigit{2}}\ {\isasymleadsto}\ AZERO}}}\\
       
   118   \isa{\mbox{}\inferrule{\mbox{}}{\mbox{ASEQ\ bs\ r\isactrlsub {\isadigit{1}}\ AZERO\ {\isasymleadsto}\ AZERO}}}\\
       
   119   \isa{\mbox{}\inferrule{\mbox{}}{\mbox{ASEQ\ bs\ {\isacharparenleft}{\kern0pt}AONE\ bs\isactrlsub {\isadigit{1}}{\isacharparenright}{\kern0pt}\ r\isactrlsub {\isadigit{1}}\ {\isasymleadsto}\ fuse\ {\isacharparenleft}{\kern0pt}bs\ {\isacharat}{\kern0pt}\ bs\isactrlsub {\isadigit{1}}{\isacharparenright}{\kern0pt}\ r\isactrlsub {\isadigit{1}}}}}\\
       
   120   \isa{\mbox{}\inferrule{\mbox{r\isactrlsub {\isadigit{1}}\ {\isasymleadsto}\ r\isactrlsub {\isadigit{2}}}}{\mbox{ASEQ\ bs\ r\isactrlsub {\isadigit{1}}\ r\isactrlsub {\isadigit{3}}\ {\isasymleadsto}\ ASEQ\ bs\ r\isactrlsub {\isadigit{2}}\ r\isactrlsub {\isadigit{3}}}}}\\
       
   121   \isa{\mbox{}\inferrule{\mbox{r\isactrlsub {\isadigit{3}}\ {\isasymleadsto}\ r\isactrlsub {\isadigit{4}}}}{\mbox{ASEQ\ bs\ r\isactrlsub {\isadigit{1}}\ r\isactrlsub {\isadigit{3}}\ {\isasymleadsto}\ ASEQ\ bs\ r\isactrlsub {\isadigit{1}}\ r\isactrlsub {\isadigit{4}}}}}\\
       
   122   \isa{\mbox{}\inferrule{\mbox{r\ {\isasymleadsto}\ r{\isacharprime}{\kern0pt}}}{\mbox{AALTs\ bs\ {\isacharparenleft}{\kern0pt}rs\isactrlsub {\isadigit{1}}\ {\isacharat}{\kern0pt}\ {\isacharbrackleft}{\kern0pt}r{\isacharbrackright}{\kern0pt}\ {\isacharat}{\kern0pt}\ rs\isactrlsub {\isadigit{2}}{\isacharparenright}{\kern0pt}\ {\isasymleadsto}\ AALTs\ bs\ {\isacharparenleft}{\kern0pt}rs\isactrlsub {\isadigit{1}}\ {\isacharat}{\kern0pt}\ {\isacharbrackleft}{\kern0pt}r{\isacharprime}{\kern0pt}{\isacharbrackright}{\kern0pt}\ {\isacharat}{\kern0pt}\ rs\isactrlsub {\isadigit{2}}{\isacharparenright}{\kern0pt}}}}\\
       
   123   \isa{\mbox{}\inferrule{\mbox{}}{\mbox{AALTs\ bs\ {\isacharparenleft}{\kern0pt}rs\isactrlsub a\ {\isacharat}{\kern0pt}\ AZERO\mbox{$\,$}{\isacharcolon}{\kern0pt}{\isacharcolon}{\kern0pt}\mbox{$\,$}rs\isactrlsub b{\isacharparenright}{\kern0pt}\ {\isasymleadsto}\ AALTs\ bs\ {\isacharparenleft}{\kern0pt}rs\isactrlsub a\ {\isacharat}{\kern0pt}\ rs\isactrlsub b{\isacharparenright}{\kern0pt}}}}\\
       
   124   \isa{\mbox{}\inferrule{\mbox{}}{\mbox{AALTs\ bs\ {\isacharparenleft}{\kern0pt}rs\isactrlsub a\ {\isacharat}{\kern0pt}\ AALTs\ bs\isactrlsub {\isadigit{1}}\ rs\isactrlsub {\isadigit{1}}\mbox{$\,$}{\isacharcolon}{\kern0pt}{\isacharcolon}{\kern0pt}\mbox{$\,$}rs\isactrlsub b{\isacharparenright}{\kern0pt}\ {\isasymleadsto}\ AALTs\ bs\ {\isacharparenleft}{\kern0pt}rs\isactrlsub a\ {\isacharat}{\kern0pt}\ map\ {\isacharparenleft}{\kern0pt}fuse\ bs\isactrlsub {\isadigit{1}}{\isacharparenright}{\kern0pt}\ rs\isactrlsub {\isadigit{1}}\ {\isacharat}{\kern0pt}\ rs\isactrlsub b{\isacharparenright}{\kern0pt}}}}\\
       
   125   \isa{\mbox{}\inferrule{\mbox{}}{\mbox{AALTs\ bs\ {\isacharparenleft}{\kern0pt}map\ {\isacharparenleft}{\kern0pt}fuse\ r\isactrlsub {\isadigit{2}}{\isacharparenright}{\kern0pt}\ rs{\isacharparenright}{\kern0pt}\ {\isasymleadsto}\ AALTs\ {\isacharparenleft}{\kern0pt}bs\ {\isacharat}{\kern0pt}\ r\isactrlsub {\isadigit{2}}{\isacharparenright}{\kern0pt}\ rs}}}\\
       
   126   \isa{\mbox{}\inferrule{\mbox{}}{\mbox{AALTs\ {\isacharparenleft}{\kern0pt}bs\ {\isacharat}{\kern0pt}\ r\isactrlsub {\isadigit{1}}{\isacharparenright}{\kern0pt}\ rs\ {\isasymleadsto}\ AALTs\ bs\ {\isacharparenleft}{\kern0pt}map\ {\isacharparenleft}{\kern0pt}fuse\ r\isactrlsub {\isadigit{1}}{\isacharparenright}{\kern0pt}\ rs{\isacharparenright}{\kern0pt}}}}\\
       
   127   \isa{\mbox{}\inferrule{\mbox{}}{\mbox{AALTs\ bs\ {\isacharbrackleft}{\kern0pt}{\isacharbrackright}{\kern0pt}\ {\isasymleadsto}\ AZERO}}}\\
       
   128   \isa{\mbox{}\inferrule{\mbox{}}{\mbox{AALTs\ bs\ {\isacharbrackleft}{\kern0pt}r\isactrlsub {\isadigit{1}}{\isacharbrackright}{\kern0pt}\ {\isasymleadsto}\ fuse\ bs\ r\isactrlsub {\isadigit{1}}}}}\\
       
   129   \isa{\mbox{}\inferrule{\mbox{a\isactrlsub {\isadigit{1}}\mbox{$^\downarrow$}\ {\isacharequal}{\kern0pt}\ a\isactrlsub {\isadigit{2}}\mbox{$^\downarrow$}}}{\mbox{AALTs\ bs\ {\isacharparenleft}{\kern0pt}rs\isactrlsub a\ {\isacharat}{\kern0pt}\ {\isacharbrackleft}{\kern0pt}a\isactrlsub {\isadigit{1}}{\isacharbrackright}{\kern0pt}\ {\isacharat}{\kern0pt}\ rs\isactrlsub b\ {\isacharat}{\kern0pt}\ {\isacharbrackleft}{\kern0pt}a\isactrlsub {\isadigit{2}}{\isacharbrackright}{\kern0pt}\ {\isacharat}{\kern0pt}\ rs\isactrlsub c{\isacharparenright}{\kern0pt}\ {\isasymleadsto}\ AALTs\ bs\ {\isacharparenleft}{\kern0pt}rs\isactrlsub a\ {\isacharat}{\kern0pt}\ {\isacharbrackleft}{\kern0pt}a\isactrlsub {\isadigit{1}}{\isacharbrackright}{\kern0pt}\ {\isacharat}{\kern0pt}\ rs\isactrlsub b\ {\isacharat}{\kern0pt}\ rs\isactrlsub c{\isacharparenright}{\kern0pt}}}}\\
       
   130 
       
   131   \end{tabular}
       
   132 \end{center}
       
   133 
       
   134 
       
   135 And these can be made compact by the following simplification function:
       
   136 
       
   137 where the function $\mathit{bsimp_AALTs}$
       
   138 
   132 The core idea of the proof is that two regular expressions,
   139 The core idea of the proof is that two regular expressions,
   133 if "isomorphic" up to a finite number of rewrite steps, will
   140 if "isomorphic" up to a finite number of rewrite steps, will
   134 remain so when we take derivative on both of them.
   141 remain "isomorphic" when we take the same sequence of
       
   142 derivatives on both of them.
   135 This can be expressed by the following rewrite relation lemma:
   143 This can be expressed by the following rewrite relation lemma:
   136 \begin{lemma}
   144 \begin{lemma}
   137 \isa{{\isacharparenleft}{\kern0pt}r\mbox{$\bbslash$}s{\isacharparenright}{\kern0pt}\ {\isasymleadsto}{\isacharasterisk}{\kern0pt}\ bders{\isacharunderscore}{\kern0pt}simp\ r\ s}
   145 \isa{{\isacharparenleft}{\kern0pt}r\mbox{$\bbslash$}s{\isacharparenright}{\kern0pt}\ {\isasymleadsto}{\isacharasterisk}{\kern0pt}\ bders{\isacharunderscore}{\kern0pt}simp\ r\ s}
       
   146 \end{lemma}
       
   147 
       
   148 This isomorphic relation implies a property that leads to the 
       
   149 correctness result: 
       
   150 if two (nullable) regular expressions are "rewritable" in many steps
       
   151 from one another, 
       
   152 then a call to function $\textit{bmkeps}$ gives the same
       
   153 bit-sequence :
       
   154 \begin{lemma}
       
   155 \isa{{\normalsize{}If\,}\ \mbox{r{\isadigit{1}}{\isachardot}{\kern0pt}{\isadigit{0}}\ {\isasymleadsto}{\isacharasterisk}{\kern0pt}\ r{\isadigit{2}}{\isachardot}{\kern0pt}{\isadigit{0}}}\ {\normalsize \,and\,}\ \mbox{nullable\mbox{$_b$}\ r{\isadigit{1}}{\isachardot}{\kern0pt}{\isadigit{0}}}\ {\normalsize \,then\,}\ mkeps\mbox{$_b$}\ r{\isadigit{1}}{\isachardot}{\kern0pt}{\isadigit{0}}\ {\isacharequal}{\kern0pt}\ mkeps\mbox{$_b$}\ r{\isadigit{2}}{\isachardot}{\kern0pt}{\isadigit{0}}{\isachardot}{\kern0pt}}
       
   156 \end{lemma}
       
   157 
       
   158 Given the same bit-sequence, the decode function
       
   159 will give out the same value, which is the output
       
   160 of both lexers:
       
   161 \begin{lemma}
       
   162 \isa{lexer\mbox{$_b$}\ r\ s\ {\isasymequiv}\ \textrm{if}\ nullable\mbox{$_b$}\ {\isacharparenleft}{\kern0pt}r\mbox{$^\uparrow$}\mbox{$\bbslash$}s{\isacharparenright}{\kern0pt}\ \textrm{then}\ decode\ {\isacharparenleft}{\kern0pt}mkeps\mbox{$_b$}\ {\isacharparenleft}{\kern0pt}r\mbox{$^\uparrow$}\mbox{$\bbslash$}s{\isacharparenright}{\kern0pt}{\isacharparenright}{\kern0pt}\ r\ \textrm{else}\ None}
       
   163 \end{lemma}
       
   164 
       
   165 \begin{lemma}
       
   166 \isa{blexer{\isacharunderscore}{\kern0pt}simp\ r\ s\ {\isasymequiv}\ \textrm{if}\ nullable\mbox{$_b$}\ {\isacharparenleft}{\kern0pt}bders{\isacharunderscore}{\kern0pt}simp\ {\isacharparenleft}{\kern0pt}r\mbox{$^\uparrow$}{\isacharparenright}{\kern0pt}\ s{\isacharparenright}{\kern0pt}\ \textrm{then}\ decode\ {\isacharparenleft}{\kern0pt}mkeps\mbox{$_b$}\ {\isacharparenleft}{\kern0pt}bders{\isacharunderscore}{\kern0pt}simp\ {\isacharparenleft}{\kern0pt}r\mbox{$^\uparrow$}{\isacharparenright}{\kern0pt}\ s{\isacharparenright}{\kern0pt}{\isacharparenright}{\kern0pt}\ r\ \textrm{else}\ None}
       
   167 \end{lemma}
       
   168 
       
   169 And that yields the correctness result:
       
   170 \begin{lemma}
       
   171 \isa{blexer{\isacharunderscore}{\kern0pt}simp\ r\ s\ {\isacharequal}{\kern0pt}\ lexer\ r\ s}
   138 \end{lemma}%
   172 \end{lemma}%
   139 \end{isamarkuptext}\isamarkuptrue%
   173 \end{isamarkuptext}\isamarkuptrue%
   140 %
   174 %
   141 \isadelimdocument
   175 \isadelimdocument
   142 %
   176 %
  1743 %:%134=208%:%
  1777 %:%134=208%:%
  1744 %:%135=209%:%
  1778 %:%135=209%:%
  1745 %:%136=210%:%
  1779 %:%136=210%:%
  1746 %:%137=211%:%
  1780 %:%137=211%:%
  1747 %:%138=212%:%
  1781 %:%138=212%:%
  1748 %:%147=217%:%
  1782 %:%139=213%:%
  1749 %:%159=223%:%
  1783 %:%140=214%:%
  1750 %:%160=224%:%
  1784 %:%141=215%:%
  1751 %:%161=225%:%
  1785 %:%142=216%:%
  1752 %:%162=226%:%
  1786 %:%143=217%:%
  1753 %:%162=227%:%
  1787 %:%144=218%:%
  1754 %:%163=228%:%
  1788 %:%145=219%:%
  1755 %:%164=229%:%
  1789 %:%146=220%:%
  1756 %:%165=230%:%
  1790 %:%147=221%:%
  1757 %:%166=231%:%
  1791 %:%148=222%:%
  1758 %:%167=232%:%
  1792 %:%149=223%:%
  1759 %:%168=233%:%
  1793 %:%150=224%:%
  1760 %:%169=234%:%
  1794 %:%151=225%:%
  1761 %:%170=235%:%
  1795 %:%152=226%:%
  1762 %:%171=236%:%
  1796 %:%153=227%:%
  1763 %:%172=237%:%
  1797 %:%154=228%:%
  1764 %:%173=238%:%
  1798 %:%155=229%:%
  1765 %:%174=239%:%
  1799 %:%156=230%:%
  1766 %:%175=240%:%
  1800 %:%157=231%:%
  1767 %:%176=241%:%
  1801 %:%158=232%:%
  1768 %:%177=242%:%
  1802 %:%159=233%:%
  1769 %:%178=243%:%
  1803 %:%160=234%:%
  1770 %:%179=244%:%
  1804 %:%161=235%:%
  1771 %:%180=245%:%
  1805 %:%162=236%:%
  1772 %:%181=246%:%
  1806 %:%163=237%:%
  1773 %:%182=247%:%
  1807 %:%164=238%:%
  1774 %:%183=248%:%
  1808 %:%165=239%:%
  1775 %:%184=249%:%
  1809 %:%166=240%:%
  1776 %:%185=250%:%
  1810 %:%167=241%:%
  1777 %:%186=251%:%
  1811 %:%168=242%:%
  1778 %:%187=252%:%
  1812 %:%169=243%:%
  1779 %:%188=253%:%
  1813 %:%170=244%:%
  1780 %:%189=254%:%
  1814 %:%171=245%:%
  1781 %:%190=255%:%
  1815 %:%172=246%:%
  1782 %:%191=256%:%
  1816 %:%181=251%:%
  1783 %:%192=257%:%
  1817 %:%193=257%:%
  1784 %:%193=258%:%
  1818 %:%194=258%:%
  1785 %:%194=259%:%
  1819 %:%195=259%:%
  1786 %:%195=260%:%
  1820 %:%196=260%:%
  1787 %:%196=261%:%
  1821 %:%196=261%:%
  1788 %:%197=262%:%
  1822 %:%197=262%:%
  1789 %:%198=263%:%
  1823 %:%198=263%:%
  1790 %:%199=264%:%
  1824 %:%199=264%:%
  1791 %:%200=265%:%
  1825 %:%200=265%:%
  1813 %:%222=287%:%
  1847 %:%222=287%:%
  1814 %:%223=288%:%
  1848 %:%223=288%:%
  1815 %:%224=289%:%
  1849 %:%224=289%:%
  1816 %:%225=290%:%
  1850 %:%225=290%:%
  1817 %:%226=291%:%
  1851 %:%226=291%:%
  1818 %:%226=292%:%
  1852 %:%227=292%:%
  1819 %:%227=293%:%
  1853 %:%228=293%:%
  1820 %:%228=294%:%
  1854 %:%229=294%:%
  1821 %:%229=295%:%
  1855 %:%230=295%:%
  1822 %:%230=296%:%
  1856 %:%231=296%:%
  1823 %:%231=297%:%
  1857 %:%232=297%:%
  1824 %:%232=298%:%
  1858 %:%233=298%:%
  1825 %:%233=299%:%
  1859 %:%234=299%:%
  1826 %:%234=300%:%
  1860 %:%235=300%:%
  1827 %:%235=301%:%
  1861 %:%236=301%:%
  1828 %:%236=302%:%
  1862 %:%237=302%:%
  1829 %:%237=303%:%
  1863 %:%238=303%:%
  1830 %:%238=304%:%
  1864 %:%239=304%:%
  1831 %:%239=305%:%
  1865 %:%240=305%:%
  1832 %:%240=306%:%
  1866 %:%241=306%:%
  1833 %:%241=307%:%
  1867 %:%242=307%:%
  1834 %:%242=308%:%
  1868 %:%243=308%:%
  1835 %:%243=309%:%
  1869 %:%244=309%:%
  1836 %:%244=310%:%
  1870 %:%245=310%:%
  1837 %:%245=311%:%
  1871 %:%246=311%:%
  1838 %:%246=312%:%
  1872 %:%247=312%:%
  1839 %:%247=313%:%
  1873 %:%248=313%:%
  1840 %:%248=314%:%
  1874 %:%249=314%:%
  1841 %:%249=315%:%
  1875 %:%250=315%:%
  1842 %:%250=316%:%
  1876 %:%251=316%:%
  1843 %:%251=317%:%
  1877 %:%252=317%:%
  1844 %:%252=318%:%
  1878 %:%253=318%:%
  1845 %:%253=319%:%
  1879 %:%254=319%:%
  1846 %:%254=320%:%
  1880 %:%255=320%:%
  1847 %:%255=321%:%
  1881 %:%256=321%:%
  1848 %:%256=322%:%
  1882 %:%257=322%:%
  1849 %:%257=323%:%
  1883 %:%258=323%:%
  1850 %:%258=324%:%
  1884 %:%259=324%:%
  1851 %:%259=325%:%
  1885 %:%260=325%:%
  1852 %:%260=326%:%
  1886 %:%260=326%:%
  1853 %:%261=327%:%
  1887 %:%261=327%:%
  1854 %:%262=328%:%
  1888 %:%262=328%:%
  1855 %:%263=329%:%
  1889 %:%263=329%:%
  1856 %:%264=330%:%
  1890 %:%264=330%:%
  1919 %:%327=393%:%
  1953 %:%327=393%:%
  1920 %:%328=394%:%
  1954 %:%328=394%:%
  1921 %:%329=395%:%
  1955 %:%329=395%:%
  1922 %:%330=396%:%
  1956 %:%330=396%:%
  1923 %:%331=397%:%
  1957 %:%331=397%:%
  1924 %:%340=404%:%
  1958 %:%332=398%:%
  1925 %:%352=406%:%
  1959 %:%333=399%:%
  1926 %:%353=407%:%
  1960 %:%334=400%:%
  1927 %:%353=408%:%
  1961 %:%335=401%:%
  1928 %:%354=409%:%
  1962 %:%336=402%:%
  1929 %:%355=410%:%
  1963 %:%337=403%:%
  1930 %:%356=411%:%
  1964 %:%338=404%:%
  1931 %:%357=412%:%
  1965 %:%339=405%:%
  1932 %:%358=413%:%
  1966 %:%340=406%:%
  1933 %:%359=414%:%
  1967 %:%341=407%:%
  1934 %:%360=415%:%
  1968 %:%342=408%:%
  1935 %:%361=416%:%
  1969 %:%343=409%:%
  1936 %:%362=417%:%
  1970 %:%344=410%:%
  1937 %:%363=418%:%
  1971 %:%345=411%:%
  1938 %:%364=419%:%
  1972 %:%346=412%:%
  1939 %:%365=420%:%
  1973 %:%347=413%:%
  1940 %:%366=421%:%
  1974 %:%348=414%:%
  1941 %:%367=422%:%
  1975 %:%349=415%:%
  1942 %:%368=423%:%
  1976 %:%350=416%:%
  1943 %:%369=424%:%
  1977 %:%351=417%:%
  1944 %:%370=425%:%
  1978 %:%352=418%:%
  1945 %:%371=426%:%
  1979 %:%353=419%:%
  1946 %:%372=427%:%
  1980 %:%354=420%:%
  1947 %:%373=428%:%
  1981 %:%355=421%:%
  1948 %:%374=429%:%
  1982 %:%356=422%:%
  1949 %:%375=430%:%
  1983 %:%357=423%:%
  1950 %:%376=431%:%
  1984 %:%358=424%:%
  1951 %:%377=432%:%
  1985 %:%359=425%:%
  1952 %:%378=433%:%
  1986 %:%360=426%:%
  1953 %:%379=434%:%
  1987 %:%361=427%:%
  1954 %:%380=435%:%
  1988 %:%362=428%:%
  1955 %:%381=436%:%
  1989 %:%363=429%:%
  1956 %:%382=437%:%
  1990 %:%364=430%:%
  1957 %:%383=438%:%
  1991 %:%365=431%:%
  1958 %:%384=439%:%
  1992 %:%374=438%:%
  1959 %:%385=440%:%
  1993 %:%386=440%:%
  1960 %:%386=441%:%
  1994 %:%387=441%:%
  1961 %:%387=442%:%
  1995 %:%387=442%:%
  1962 %:%388=443%:%
  1996 %:%388=443%:%
  1963 %:%389=444%:%
  1997 %:%389=444%:%
  1964 %:%390=445%:%
  1998 %:%390=445%:%
  1965 %:%391=446%:%
  1999 %:%391=446%:%
  1966 %:%392=447%:%
  2000 %:%392=447%:%
  1967 %:%392=448%:%
  2001 %:%393=448%:%
  1968 %:%393=449%:%
  2002 %:%394=449%:%
  1969 %:%394=450%:%
  2003 %:%395=450%:%
  1970 %:%395=451%:%
  2004 %:%396=451%:%
  1971 %:%396=452%:%
  2005 %:%397=452%:%
  1972 %:%397=453%:%
  2006 %:%398=453%:%
  1973 %:%397=454%:%
  2007 %:%399=454%:%
  1974 %:%398=455%:%
  2008 %:%400=455%:%
  1975 %:%399=456%:%
  2009 %:%401=456%:%
  1976 %:%400=457%:%
  2010 %:%402=457%:%
  1977 %:%401=458%:%
  2011 %:%403=458%:%
  1978 %:%402=459%:%
  2012 %:%404=459%:%
  1979 %:%403=460%:%
  2013 %:%405=460%:%
  1980 %:%404=461%:%
  2014 %:%406=461%:%
  1981 %:%405=462%:%
  2015 %:%407=462%:%
  1982 %:%406=463%:%
  2016 %:%408=463%:%
  1983 %:%407=464%:%
  2017 %:%409=464%:%
  1984 %:%408=465%:%
  2018 %:%410=465%:%
  1985 %:%409=466%:%
  2019 %:%411=466%:%
  1986 %:%410=467%:%
  2020 %:%412=467%:%
  1987 %:%411=468%:%
  2021 %:%413=468%:%
  1988 %:%412=469%:%
  2022 %:%414=469%:%
  1989 %:%413=470%:%
  2023 %:%415=470%:%
  1990 %:%414=471%:%
  2024 %:%416=471%:%
  1991 %:%415=472%:%
  2025 %:%417=472%:%
  1992 %:%416=473%:%
  2026 %:%418=473%:%
  1993 %:%417=474%:%
  2027 %:%419=474%:%
  1994 %:%418=475%:%
  2028 %:%420=475%:%
  1995 %:%419=476%:%
  2029 %:%421=476%:%
  1996 %:%420=477%:%
  2030 %:%422=477%:%
  1997 %:%421=478%:%
  2031 %:%423=478%:%
  1998 %:%422=479%:%
  2032 %:%424=479%:%
  1999 %:%423=480%:%
  2033 %:%425=480%:%
  2000 %:%424=481%:%
  2034 %:%426=481%:%
  2001 %:%425=482%:%
  2035 %:%426=482%:%
  2002 %:%426=483%:%
  2036 %:%427=483%:%
  2003 %:%427=484%:%
  2037 %:%428=484%:%
  2004 %:%428=485%:%
  2038 %:%429=485%:%
  2005 %:%429=486%:%
  2039 %:%430=486%:%
  2006 %:%430=487%:%
  2040 %:%431=487%:%
  2007 %:%431=488%:%
  2041 %:%431=488%:%
  2008 %:%432=489%:%
  2042 %:%432=489%:%
  2009 %:%433=490%:%
  2043 %:%433=490%:%
  2010 %:%434=491%:%
  2044 %:%434=491%:%
  2011 %:%435=492%:%
  2045 %:%435=492%:%
  2058 %:%482=539%:%
  2092 %:%482=539%:%
  2059 %:%483=540%:%
  2093 %:%483=540%:%
  2060 %:%484=541%:%
  2094 %:%484=541%:%
  2061 %:%485=542%:%
  2095 %:%485=542%:%
  2062 %:%486=543%:%
  2096 %:%486=543%:%
  2063 %:%495=547%:%
  2097 %:%487=544%:%
  2064 %:%507=551%:%
  2098 %:%488=545%:%
  2065 %:%508=552%:%
  2099 %:%489=546%:%
  2066 %:%509=553%:%
  2100 %:%490=547%:%
  2067 %:%510=554%:%
  2101 %:%491=548%:%
  2068 %:%511=555%:%
  2102 %:%492=549%:%
  2069 %:%512=556%:%
  2103 %:%493=550%:%
  2070 %:%513=557%:%
  2104 %:%494=551%:%
  2071 %:%514=558%:%
  2105 %:%495=552%:%
  2072 %:%515=559%:%
  2106 %:%496=553%:%
  2073 %:%516=560%:%
  2107 %:%497=554%:%
  2074 %:%517=561%:%
  2108 %:%498=555%:%
  2075 %:%518=562%:%
  2109 %:%499=556%:%
  2076 %:%519=563%:%
  2110 %:%500=557%:%
  2077 %:%520=564%:%
  2111 %:%501=558%:%
  2078 %:%521=565%:%
  2112 %:%502=559%:%
  2079 %:%522=566%:%
  2113 %:%503=560%:%
  2080 %:%523=567%:%
  2114 %:%504=561%:%
  2081 %:%524=568%:%
  2115 %:%505=562%:%
  2082 %:%525=569%:%
  2116 %:%506=563%:%
  2083 %:%526=570%:%
  2117 %:%507=564%:%
  2084 %:%527=571%:%
  2118 %:%508=565%:%
  2085 %:%528=572%:%
  2119 %:%509=566%:%
  2086 %:%529=573%:%
  2120 %:%510=567%:%
  2087 %:%530=574%:%
  2121 %:%511=568%:%
  2088 %:%531=575%:%
  2122 %:%512=569%:%
  2089 %:%532=576%:%
  2123 %:%513=570%:%
  2090 %:%533=577%:%
  2124 %:%514=571%:%
  2091 %:%534=578%:%
  2125 %:%515=572%:%
  2092 %:%535=579%:%
  2126 %:%516=573%:%
  2093 %:%536=580%:%
  2127 %:%517=574%:%
  2094 %:%537=581%:%
  2128 %:%518=575%:%
  2095 %:%538=582%:%
  2129 %:%519=576%:%
  2096 %:%539=583%:%
  2130 %:%520=577%:%
  2097 %:%540=584%:%
  2131 %:%529=581%:%
  2098 %:%541=585%:%
  2132 %:%541=585%:%
  2099 %:%542=586%:%
  2133 %:%542=586%:%
  2100 %:%543=587%:%
  2134 %:%543=587%:%
  2101 %:%544=588%:%
  2135 %:%544=588%:%
  2102 %:%545=589%:%
  2136 %:%545=589%:%
  2174 %:%617=661%:%
  2208 %:%617=661%:%
  2175 %:%618=662%:%
  2209 %:%618=662%:%
  2176 %:%619=663%:%
  2210 %:%619=663%:%
  2177 %:%620=664%:%
  2211 %:%620=664%:%
  2178 %:%621=665%:%
  2212 %:%621=665%:%
  2179 %:%621=666%:%
  2213 %:%622=666%:%
  2180 %:%622=667%:%
  2214 %:%623=667%:%
  2181 %:%622=668%:%
  2215 %:%624=668%:%
  2182 %:%623=669%:%
  2216 %:%625=669%:%
  2183 %:%624=670%:%
  2217 %:%626=670%:%
  2184 %:%624=671%:%
  2218 %:%627=671%:%
  2185 %:%625=672%:%
  2219 %:%628=672%:%
  2186 %:%626=673%:%
  2220 %:%629=673%:%
  2187 %:%627=674%:%
  2221 %:%630=674%:%
  2188 %:%628=675%:%
  2222 %:%631=675%:%
  2189 %:%629=676%:%
  2223 %:%632=676%:%
  2190 %:%630=677%:%
  2224 %:%633=677%:%
  2191 %:%631=678%:%
  2225 %:%634=678%:%
  2192 %:%632=679%:%
  2226 %:%635=679%:%
  2193 %:%633=680%:%
  2227 %:%636=680%:%
  2194 %:%634=681%:%
  2228 %:%637=681%:%
  2195 %:%635=682%:%
  2229 %:%638=682%:%
  2196 %:%636=683%:%
  2230 %:%639=683%:%
  2197 %:%637=684%:%
  2231 %:%640=684%:%
  2198 %:%638=685%:%
  2232 %:%641=685%:%
  2199 %:%639=686%:%
  2233 %:%642=686%:%
  2200 %:%640=687%:%
  2234 %:%643=687%:%
  2201 %:%641=688%:%
  2235 %:%644=688%:%
  2202 %:%642=689%:%
  2236 %:%645=689%:%
  2203 %:%643=690%:%
  2237 %:%646=690%:%
  2204 %:%644=691%:%
  2238 %:%647=691%:%
  2205 %:%645=692%:%
  2239 %:%648=692%:%
  2206 %:%646=693%:%
  2240 %:%649=693%:%
  2207 %:%647=694%:%
  2241 %:%650=694%:%
  2208 %:%648=695%:%
  2242 %:%651=695%:%
  2209 %:%649=696%:%
  2243 %:%652=696%:%
  2210 %:%650=697%:%
  2244 %:%653=697%:%
  2211 %:%651=698%:%
  2245 %:%654=698%:%
  2212 %:%652=699%:%
  2246 %:%655=699%:%
  2213 %:%653=700%:%
  2247 %:%655=700%:%
  2214 %:%654=701%:%
  2248 %:%656=701%:%
  2215 %:%655=702%:%
  2249 %:%656=702%:%
  2216 %:%656=703%:%
  2250 %:%657=703%:%
  2217 %:%657=704%:%
  2251 %:%658=704%:%
  2218 %:%658=705%:%
  2252 %:%658=705%:%
  2219 %:%659=706%:%
  2253 %:%659=706%:%
  2220 %:%660=707%:%
  2254 %:%660=707%:%
  2221 %:%661=708%:%
  2255 %:%661=708%:%
  2222 %:%662=709%:%
  2256 %:%662=709%:%
  2236 %:%676=723%:%
  2270 %:%676=723%:%
  2237 %:%677=724%:%
  2271 %:%677=724%:%
  2238 %:%678=725%:%
  2272 %:%678=725%:%
  2239 %:%679=726%:%
  2273 %:%679=726%:%
  2240 %:%680=727%:%
  2274 %:%680=727%:%
  2241 %:%680=728%:%
  2275 %:%681=728%:%
  2242 %:%680=729%:%
  2276 %:%682=729%:%
  2243 %:%681=730%:%
  2277 %:%683=730%:%
  2244 %:%682=731%:%
  2278 %:%684=731%:%
  2245 %:%683=732%:%
  2279 %:%685=732%:%
  2246 %:%684=733%:%
  2280 %:%686=733%:%
  2247 %:%685=734%:%
  2281 %:%687=734%:%
  2248 %:%686=735%:%
  2282 %:%688=735%:%
  2249 %:%687=736%:%
  2283 %:%689=736%:%
  2250 %:%688=737%:%
  2284 %:%690=737%:%
  2251 %:%689=738%:%
  2285 %:%691=738%:%
  2252 %:%689=739%:%
  2286 %:%692=739%:%
  2253 %:%690=740%:%
  2287 %:%693=740%:%
  2254 %:%691=741%:%
  2288 %:%694=741%:%
  2255 %:%692=742%:%
  2289 %:%695=742%:%
  2256 %:%693=743%:%
  2290 %:%696=743%:%
  2257 %:%694=744%:%
  2291 %:%697=744%:%
  2258 %:%695=745%:%
  2292 %:%698=745%:%
  2259 %:%696=746%:%
  2293 %:%699=746%:%
  2260 %:%697=747%:%
  2294 %:%700=747%:%
  2261 %:%698=748%:%
  2295 %:%701=748%:%
  2262 %:%699=749%:%
  2296 %:%702=749%:%
  2263 %:%700=750%:%
  2297 %:%703=750%:%
  2264 %:%701=751%:%
  2298 %:%704=751%:%
  2265 %:%702=752%:%
  2299 %:%705=752%:%
  2266 %:%703=753%:%
  2300 %:%706=753%:%
  2267 %:%704=754%:%
  2301 %:%707=754%:%
  2268 %:%705=755%:%
  2302 %:%708=755%:%
  2269 %:%706=756%:%
  2303 %:%709=756%:%
  2270 %:%707=757%:%
  2304 %:%710=757%:%
  2271 %:%708=758%:%
  2305 %:%711=758%:%
  2272 %:%709=759%:%
  2306 %:%712=759%:%
  2273 %:%710=760%:%
  2307 %:%713=760%:%
  2274 %:%711=761%:%
  2308 %:%714=761%:%
  2275 %:%712=762%:%
  2309 %:%714=762%:%
  2276 %:%713=763%:%
  2310 %:%714=763%:%
  2277 %:%714=764%:%
  2311 %:%715=764%:%
  2278 %:%715=765%:%
  2312 %:%716=765%:%
  2279 %:%716=766%:%
  2313 %:%717=766%:%
  2280 %:%717=767%:%
  2314 %:%718=767%:%
  2281 %:%718=768%:%
  2315 %:%719=768%:%
  2282 %:%719=769%:%
  2316 %:%720=769%:%
  2283 %:%720=770%:%
  2317 %:%721=770%:%
  2284 %:%721=771%:%
  2318 %:%722=771%:%
  2285 %:%722=772%:%
  2319 %:%723=772%:%
  2286 %:%723=773%:%
  2320 %:%723=773%:%
  2287 %:%724=774%:%
  2321 %:%724=774%:%
  2288 %:%724=775%:%
  2322 %:%725=775%:%
  2289 %:%725=776%:%
  2323 %:%726=776%:%
  2290 %:%726=777%:%
  2324 %:%727=777%:%
  2291 %:%727=778%:%
  2325 %:%728=778%:%
  2292 %:%728=779%:%
  2326 %:%729=779%:%
  2293 %:%729=780%:%
  2327 %:%730=780%:%
  2294 %:%730=781%:%
  2328 %:%731=781%:%
  2295 %:%731=782%:%
  2329 %:%732=782%:%
  2296 %:%731=783%:%
  2330 %:%733=783%:%
  2297 %:%732=784%:%
  2331 %:%734=784%:%
  2298 %:%733=785%:%
  2332 %:%735=785%:%
  2299 %:%734=786%:%
  2333 %:%736=786%:%
  2300 %:%734=787%:%
  2334 %:%737=787%:%
  2301 %:%735=788%:%
  2335 %:%738=788%:%
  2302 %:%736=789%:%
  2336 %:%739=789%:%
  2303 %:%737=790%:%
  2337 %:%740=790%:%
  2304 %:%738=791%:%
  2338 %:%741=791%:%
  2305 %:%739=792%:%
  2339 %:%742=792%:%
  2306 %:%740=793%:%
  2340 %:%743=793%:%
  2307 %:%741=794%:%
  2341 %:%744=794%:%
  2308 %:%742=795%:%
  2342 %:%745=795%:%
  2309 %:%743=796%:%
  2343 %:%746=796%:%
  2310 %:%744=797%:%
  2344 %:%747=797%:%
  2311 %:%745=798%:%
  2345 %:%748=798%:%
  2312 %:%745=799%:%
  2346 %:%749=799%:%
  2313 %:%746=800%:%
  2347 %:%750=800%:%
  2314 %:%747=801%:%
  2348 %:%751=801%:%
  2315 %:%748=802%:%
  2349 %:%752=802%:%
  2316 %:%749=803%:%
  2350 %:%753=803%:%
  2317 %:%749=804%:%
  2351 %:%754=804%:%
  2318 %:%750=805%:%
  2352 %:%755=805%:%
  2319 %:%751=806%:%
  2353 %:%756=806%:%
  2320 %:%752=807%:%
  2354 %:%757=807%:%
  2321 %:%753=808%:%
  2355 %:%758=808%:%
  2322 %:%754=809%:%
  2356 %:%758=809%:%
  2323 %:%755=810%:%
  2357 %:%759=810%:%
  2324 %:%756=811%:%
  2358 %:%760=811%:%
  2325 %:%757=812%:%
  2359 %:%761=812%:%
  2326 %:%758=813%:%
  2360 %:%762=813%:%
  2327 %:%759=814%:%
  2361 %:%763=814%:%
  2328 %:%760=815%:%
  2362 %:%764=815%:%
  2329 %:%761=816%:%
  2363 %:%765=816%:%
  2330 %:%762=817%:%
  2364 %:%765=817%:%
  2331 %:%763=818%:%
  2365 %:%766=818%:%
  2332 %:%764=819%:%
  2366 %:%767=819%:%
  2333 %:%765=820%:%
  2367 %:%768=820%:%
  2334 %:%766=821%:%
  2368 %:%768=821%:%
  2335 %:%767=822%:%
  2369 %:%769=822%:%
  2336 %:%768=823%:%
  2370 %:%770=823%:%
  2337 %:%769=824%:%
  2371 %:%771=824%:%
  2338 %:%770=825%:%
  2372 %:%772=825%:%
  2339 %:%771=826%:%
  2373 %:%773=826%:%
  2340 %:%772=827%:%
  2374 %:%774=827%:%
  2341 %:%773=828%:%
  2375 %:%775=828%:%
  2342 %:%774=829%:%
  2376 %:%776=829%:%
  2343 %:%775=830%:%
  2377 %:%777=830%:%
  2344 %:%776=831%:%
  2378 %:%778=831%:%
  2345 %:%777=832%:%
  2379 %:%779=832%:%
  2346 %:%778=833%:%
  2380 %:%779=833%:%
  2347 %:%779=834%:%
  2381 %:%780=834%:%
  2348 %:%780=835%:%
  2382 %:%781=835%:%
  2349 %:%781=836%:%
  2383 %:%782=836%:%
  2350 %:%782=837%:%
  2384 %:%783=837%:%
  2351 %:%783=838%:%
  2385 %:%783=838%:%
  2352 %:%784=839%:%
  2386 %:%784=839%:%
  2353 %:%785=840%:%
  2387 %:%785=840%:%
  2354 %:%786=841%:%
  2388 %:%786=841%:%
  2355 %:%787=842%:%
  2389 %:%787=842%:%
  2371 %:%803=858%:%
  2405 %:%803=858%:%
  2372 %:%804=859%:%
  2406 %:%804=859%:%
  2373 %:%805=860%:%
  2407 %:%805=860%:%
  2374 %:%806=861%:%
  2408 %:%806=861%:%
  2375 %:%807=862%:%
  2409 %:%807=862%:%
  2376 %:%807=863%:%
  2410 %:%808=863%:%
  2377 %:%808=864%:%
  2411 %:%809=864%:%
  2378 %:%809=865%:%
  2412 %:%810=865%:%
  2379 %:%810=866%:%
  2413 %:%811=866%:%
  2380 %:%811=867%:%
  2414 %:%812=867%:%
  2381 %:%812=868%:%
  2415 %:%813=868%:%
  2382 %:%813=869%:%
  2416 %:%814=869%:%
  2383 %:%814=870%:%
  2417 %:%815=870%:%
  2384 %:%815=871%:%
  2418 %:%816=871%:%
  2385 %:%816=872%:%
  2419 %:%817=872%:%
  2386 %:%817=873%:%
  2420 %:%818=873%:%
  2387 %:%818=874%:%
  2421 %:%819=874%:%
  2388 %:%819=875%:%
  2422 %:%820=875%:%
  2389 %:%820=876%:%
  2423 %:%821=876%:%
  2390 %:%821=877%:%
  2424 %:%822=877%:%
  2391 %:%822=878%:%
  2425 %:%823=878%:%
  2392 %:%823=879%:%
  2426 %:%824=879%:%
  2393 %:%824=880%:%
  2427 %:%825=880%:%
  2394 %:%825=881%:%
  2428 %:%826=881%:%
  2395 %:%826=882%:%
  2429 %:%827=882%:%
  2396 %:%827=883%:%
  2430 %:%828=883%:%
  2397 %:%828=884%:%
  2431 %:%829=884%:%
  2398 %:%829=885%:%
  2432 %:%830=885%:%
  2399 %:%830=886%:%
  2433 %:%831=886%:%
  2400 %:%831=887%:%
  2434 %:%832=887%:%
  2401 %:%832=888%:%
  2435 %:%833=888%:%
  2402 %:%833=889%:%
  2436 %:%834=889%:%
  2403 %:%834=890%:%
  2437 %:%835=890%:%
  2404 %:%835=891%:%
  2438 %:%836=891%:%
  2405 %:%836=892%:%
  2439 %:%837=892%:%
  2406 %:%837=893%:%
  2440 %:%838=893%:%
  2407 %:%838=894%:%
  2441 %:%839=894%:%
  2408 %:%839=895%:%
  2442 %:%840=895%:%
  2409 %:%840=896%:%
  2443 %:%841=896%:%
  2410 %:%840=897%:%
  2444 %:%841=897%:%
  2411 %:%841=898%:%
  2445 %:%842=898%:%
  2412 %:%842=899%:%
  2446 %:%843=899%:%
  2413 %:%843=900%:%
  2447 %:%844=900%:%
  2414 %:%844=901%:%
  2448 %:%845=901%:%
  2415 %:%845=902%:%
  2449 %:%846=902%:%
  2416 %:%846=903%:%
  2450 %:%847=903%:%
  2417 %:%847=904%:%
  2451 %:%848=904%:%
  2418 %:%848=905%:%
  2452 %:%849=905%:%
  2419 %:%849=906%:%
  2453 %:%850=906%:%
  2420 %:%850=907%:%
  2454 %:%851=907%:%
  2421 %:%851=908%:%
  2455 %:%852=908%:%
  2422 %:%852=909%:%
  2456 %:%853=909%:%
  2423 %:%853=910%:%
  2457 %:%854=910%:%
  2424 %:%854=911%:%
  2458 %:%855=911%:%
  2425 %:%855=912%:%
  2459 %:%856=912%:%
  2426 %:%856=913%:%
  2460 %:%857=913%:%
  2427 %:%857=914%:%
  2461 %:%858=914%:%
  2428 %:%858=915%:%
  2462 %:%859=915%:%
  2429 %:%859=916%:%
  2463 %:%860=916%:%
  2430 %:%860=917%:%
  2464 %:%861=917%:%
  2431 %:%861=918%:%
  2465 %:%862=918%:%
  2432 %:%862=919%:%
  2466 %:%863=919%:%
  2433 %:%863=920%:%
  2467 %:%864=920%:%
  2434 %:%864=921%:%
  2468 %:%865=921%:%
  2435 %:%865=922%:%
  2469 %:%866=922%:%
  2436 %:%866=923%:%
  2470 %:%867=923%:%
  2437 %:%867=924%:%
  2471 %:%868=924%:%
  2438 %:%868=925%:%
  2472 %:%869=925%:%
  2439 %:%869=926%:%
  2473 %:%870=926%:%
  2440 %:%870=927%:%
  2474 %:%871=927%:%
  2441 %:%870=928%:%
  2475 %:%872=928%:%
  2442 %:%871=929%:%
  2476 %:%873=929%:%
  2443 %:%872=930%:%
  2477 %:%874=930%:%
  2444 %:%873=931%:%
  2478 %:%874=931%:%
  2445 %:%874=932%:%
  2479 %:%875=932%:%
  2446 %:%875=933%:%
  2480 %:%876=933%:%
  2447 %:%876=934%:%
  2481 %:%877=934%:%
  2448 %:%877=935%:%
  2482 %:%878=935%:%
  2449 %:%878=936%:%
  2483 %:%879=936%:%
  2450 %:%878=937%:%
  2484 %:%880=937%:%
  2451 %:%879=938%:%
  2485 %:%881=938%:%
  2452 %:%880=939%:%
  2486 %:%882=939%:%
  2453 %:%881=940%:%
  2487 %:%883=940%:%
  2454 %:%882=941%:%
  2488 %:%884=941%:%
  2455 %:%883=942%:%
  2489 %:%885=942%:%
  2456 %:%884=943%:%
  2490 %:%886=943%:%
  2457 %:%885=944%:%
  2491 %:%887=944%:%
  2458 %:%886=945%:%
  2492 %:%888=945%:%
  2459 %:%887=946%:%
  2493 %:%889=946%:%
  2460 %:%888=947%:%
  2494 %:%890=947%:%
  2461 %:%889=948%:%
  2495 %:%891=948%:%
  2462 %:%890=949%:%
  2496 %:%892=949%:%
  2463 %:%891=950%:%
  2497 %:%893=950%:%
  2464 %:%892=951%:%
  2498 %:%894=951%:%
  2465 %:%893=952%:%
  2499 %:%895=952%:%
  2466 %:%894=953%:%
  2500 %:%896=953%:%
  2467 %:%895=954%:%
  2501 %:%897=954%:%
  2468 %:%896=955%:%
  2502 %:%898=955%:%
  2469 %:%897=956%:%
  2503 %:%899=956%:%
  2470 %:%898=957%:%
  2504 %:%900=957%:%
  2471 %:%899=958%:%
  2505 %:%901=958%:%
  2472 %:%900=959%:%
  2506 %:%902=959%:%
  2473 %:%901=960%:%
  2507 %:%903=960%:%
  2474 %:%902=961%:%
  2508 %:%904=961%:%
  2475 %:%903=962%:%
  2509 %:%904=962%:%
  2476 %:%904=963%:%
  2510 %:%905=963%:%
  2477 %:%905=964%:%
  2511 %:%906=964%:%
  2478 %:%906=965%:%
  2512 %:%907=965%:%
  2479 %:%907=966%:%
  2513 %:%908=966%:%
  2480 %:%908=967%:%
  2514 %:%909=967%:%
  2481 %:%909=968%:%
  2515 %:%910=968%:%
  2482 %:%910=969%:%
  2516 %:%911=969%:%
  2483 %:%911=970%:%
  2517 %:%912=970%:%
  2484 %:%912=971%:%
  2518 %:%912=971%:%
  2485 %:%913=972%:%
  2519 %:%913=972%:%
  2486 %:%914=973%:%
  2520 %:%914=973%:%
  2487 %:%915=974%:%
  2521 %:%915=974%:%
  2488 %:%915=975%:%
  2522 %:%916=975%:%
  2489 %:%915=976%:%
  2523 %:%917=976%:%
  2490 %:%916=977%:%
  2524 %:%918=977%:%
  2491 %:%916=978%:%
  2525 %:%919=978%:%
  2492 %:%916=979%:%
  2526 %:%920=979%:%
  2493 %:%917=980%:%
  2527 %:%921=980%:%
  2494 %:%918=981%:%
  2528 %:%922=981%:%
  2495 %:%918=982%:%
  2529 %:%923=982%:%
  2496 %:%919=983%:%
  2530 %:%924=983%:%
  2497 %:%920=984%:%
  2531 %:%925=984%:%
  2498 %:%921=985%:%
  2532 %:%926=985%:%
  2499 %:%922=986%:%
  2533 %:%927=986%:%
  2500 %:%923=987%:%
  2534 %:%928=987%:%
  2501 %:%924=988%:%
  2535 %:%929=988%:%
  2502 %:%925=989%:%
  2536 %:%930=989%:%
  2503 %:%926=990%:%
  2537 %:%931=990%:%
  2504 %:%927=991%:%
  2538 %:%932=991%:%
  2505 %:%928=992%:%
  2539 %:%933=992%:%
  2506 %:%929=993%:%
  2540 %:%934=993%:%
  2507 %:%930=994%:%
  2541 %:%935=994%:%
  2508 %:%931=995%:%
  2542 %:%936=995%:%
  2509 %:%932=996%:%
  2543 %:%937=996%:%
  2510 %:%933=997%:%
  2544 %:%938=997%:%
  2511 %:%934=998%:%
  2545 %:%939=998%:%
  2512 %:%935=999%:%
  2546 %:%940=999%:%
  2513 %:%936=1000%:%
  2547 %:%941=1000%:%
  2514 %:%937=1001%:%
  2548 %:%942=1001%:%
  2515 %:%938=1002%:%
  2549 %:%943=1002%:%
  2516 %:%939=1003%:%
  2550 %:%944=1003%:%
  2517 %:%940=1004%:%
  2551 %:%945=1004%:%
  2518 %:%941=1005%:%
  2552 %:%946=1005%:%
  2519 %:%942=1006%:%
  2553 %:%947=1006%:%
  2520 %:%943=1007%:%
  2554 %:%948=1007%:%
  2521 %:%944=1008%:%
  2555 %:%949=1008%:%
  2522 %:%945=1009%:%
  2556 %:%949=1009%:%
  2523 %:%946=1010%:%
  2557 %:%949=1010%:%
  2524 %:%947=1011%:%
  2558 %:%950=1011%:%
  2525 %:%948=1012%:%
  2559 %:%950=1012%:%
  2526 %:%949=1013%:%
  2560 %:%950=1013%:%
  2527 %:%950=1014%:%
  2561 %:%951=1014%:%
  2528 %:%951=1015%:%
  2562 %:%952=1015%:%
  2529 %:%952=1016%:%
  2563 %:%952=1016%:%
  2530 %:%952=1017%:%
  2564 %:%953=1017%:%
  2531 %:%953=1018%:%
  2565 %:%954=1018%:%
  2532 %:%954=1019%:%
  2566 %:%955=1019%:%
  2533 %:%955=1020%:%
  2567 %:%956=1020%:%
  2534 %:%955=1021%:%
  2568 %:%957=1021%:%
  2535 %:%955=1022%:%
  2569 %:%958=1022%:%
  2536 %:%955=1023%:%
  2570 %:%959=1023%:%
  2537 %:%956=1024%:%
  2571 %:%960=1024%:%
  2538 %:%957=1025%:%
  2572 %:%961=1025%:%
  2539 %:%958=1026%:%
  2573 %:%962=1026%:%
  2540 %:%959=1027%:%
  2574 %:%963=1027%:%
  2541 %:%960=1028%:%
  2575 %:%964=1028%:%
  2542 %:%961=1029%:%
  2576 %:%965=1029%:%
  2543 %:%962=1030%:%
  2577 %:%966=1030%:%
  2544 %:%963=1031%:%
  2578 %:%967=1031%:%
  2545 %:%964=1032%:%
  2579 %:%968=1032%:%
  2546 %:%965=1033%:%
  2580 %:%969=1033%:%
  2547 %:%966=1034%:%
  2581 %:%970=1034%:%
  2548 %:%967=1035%:%
  2582 %:%971=1035%:%
  2549 %:%968=1036%:%
  2583 %:%972=1036%:%
  2550 %:%969=1037%:%
  2584 %:%973=1037%:%
  2551 %:%970=1038%:%
  2585 %:%974=1038%:%
  2552 %:%971=1039%:%
  2586 %:%975=1039%:%
  2553 %:%972=1040%:%
  2587 %:%976=1040%:%
  2554 %:%973=1041%:%
  2588 %:%977=1041%:%
  2555 %:%974=1042%:%
  2589 %:%978=1042%:%
  2556 %:%975=1043%:%
  2590 %:%979=1043%:%
  2557 %:%976=1044%:%
  2591 %:%980=1044%:%
  2558 %:%977=1045%:%
  2592 %:%981=1045%:%
  2559 %:%978=1046%:%
  2593 %:%982=1046%:%
  2560 %:%979=1047%:%
  2594 %:%983=1047%:%
  2561 %:%980=1048%:%
  2595 %:%984=1048%:%
  2562 %:%981=1049%:%
  2596 %:%985=1049%:%
  2563 %:%982=1050%:%
  2597 %:%986=1050%:%
  2564 %:%983=1051%:%
  2598 %:%986=1051%:%
  2565 %:%984=1052%:%
  2599 %:%987=1052%:%
  2566 %:%985=1053%:%
  2600 %:%988=1053%:%
  2567 %:%986=1054%:%
  2601 %:%989=1054%:%
  2568 %:%987=1055%:%
  2602 %:%989=1055%:%
  2569 %:%988=1056%:%
  2603 %:%989=1056%:%
  2570 %:%989=1057%:%
  2604 %:%989=1057%:%
  2571 %:%990=1058%:%
  2605 %:%990=1058%:%
  2572 %:%991=1059%:%
  2606 %:%991=1059%:%
  2573 %:%992=1060%:%
  2607 %:%992=1060%:%
  2574 %:%1001=1064%:%
  2608 %:%993=1061%:%
  2575 %:%1013=1068%:%
  2609 %:%994=1062%:%
  2576 %:%1014=1069%:%
  2610 %:%995=1063%:%
  2577 %:%1015=1070%:%
  2611 %:%996=1064%:%
  2578 %:%1016=1071%:%
  2612 %:%997=1065%:%
  2579 %:%1017=1072%:%
  2613 %:%998=1066%:%
  2580 %:%1018=1073%:%
  2614 %:%999=1067%:%
  2581 %:%1019=1074%:%
  2615 %:%1000=1068%:%
  2582 %:%1020=1075%:%
  2616 %:%1001=1069%:%
  2583 %:%1021=1076%:%
  2617 %:%1002=1070%:%
  2584 %:%1022=1077%:%
  2618 %:%1003=1071%:%
  2585 %:%1023=1078%:%
  2619 %:%1004=1072%:%
  2586 %:%1024=1079%:%
  2620 %:%1005=1073%:%
  2587 %:%1025=1080%:%
  2621 %:%1006=1074%:%
  2588 %:%1026=1081%:%
  2622 %:%1007=1075%:%
  2589 %:%1027=1082%:%
  2623 %:%1008=1076%:%
  2590 %:%1028=1083%:%
  2624 %:%1009=1077%:%
  2591 %:%1029=1084%:%
  2625 %:%1010=1078%:%
  2592 %:%1030=1085%:%
  2626 %:%1011=1079%:%
  2593 %:%1031=1086%:%
  2627 %:%1012=1080%:%
  2594 %:%1032=1087%:%
  2628 %:%1013=1081%:%
  2595 %:%1033=1088%:%
  2629 %:%1014=1082%:%
  2596 %:%1034=1089%:%
  2630 %:%1015=1083%:%
  2597 %:%1035=1090%:%
  2631 %:%1016=1084%:%
  2598 %:%1036=1091%:%
  2632 %:%1017=1085%:%
  2599 %:%1037=1092%:%
  2633 %:%1018=1086%:%
  2600 %:%1038=1093%:%
  2634 %:%1019=1087%:%
  2601 %:%1039=1094%:%
  2635 %:%1020=1088%:%
  2602 %:%1040=1095%:%
  2636 %:%1021=1089%:%
  2603 %:%1041=1096%:%
  2637 %:%1022=1090%:%
  2604 %:%1042=1097%:%
  2638 %:%1023=1091%:%
  2605 %:%1043=1098%:%
  2639 %:%1024=1092%:%
  2606 %:%1044=1099%:%
  2640 %:%1025=1093%:%
  2607 %:%1045=1100%:%
  2641 %:%1026=1094%:%
  2608 %:%1046=1101%:%
  2642 %:%1035=1098%:%
  2609 %:%1047=1102%:%
  2643 %:%1047=1102%:%
  2610 %:%1048=1103%:%
  2644 %:%1048=1103%:%
  2611 %:%1049=1104%:%
  2645 %:%1049=1104%:%
  2612 %:%1050=1105%:%
  2646 %:%1050=1105%:%
  2613 %:%1051=1106%:%
  2647 %:%1051=1106%:%
  2686 %:%1124=1179%:%
  2720 %:%1124=1179%:%
  2687 %:%1125=1180%:%
  2721 %:%1125=1180%:%
  2688 %:%1126=1181%:%
  2722 %:%1126=1181%:%
  2689 %:%1127=1182%:%
  2723 %:%1127=1182%:%
  2690 %:%1128=1183%:%
  2724 %:%1128=1183%:%
  2691 %:%1128=1184%:%
  2725 %:%1129=1184%:%
  2692 %:%1129=1185%:%
  2726 %:%1130=1185%:%
  2693 %:%1130=1186%:%
  2727 %:%1131=1186%:%
  2694 %:%1131=1187%:%
  2728 %:%1132=1187%:%
  2695 %:%1132=1188%:%
  2729 %:%1133=1188%:%
  2696 %:%1133=1189%:%
  2730 %:%1134=1189%:%
  2697 %:%1134=1190%:%
  2731 %:%1135=1190%:%
  2698 %:%1135=1191%:%
  2732 %:%1136=1191%:%
  2699 %:%1136=1192%:%
  2733 %:%1137=1192%:%
  2700 %:%1137=1193%:%
  2734 %:%1138=1193%:%
  2701 %:%1138=1194%:%
  2735 %:%1139=1194%:%
  2702 %:%1139=1195%:%
  2736 %:%1140=1195%:%
  2703 %:%1139=1196%:%
  2737 %:%1141=1196%:%
  2704 %:%1140=1197%:%
  2738 %:%1142=1197%:%
  2705 %:%1141=1198%:%
  2739 %:%1143=1198%:%
  2706 %:%1142=1199%:%
  2740 %:%1144=1199%:%
  2707 %:%1143=1200%:%
  2741 %:%1145=1200%:%
  2708 %:%1144=1201%:%
  2742 %:%1146=1201%:%
  2709 %:%1145=1202%:%
  2743 %:%1147=1202%:%
  2710 %:%1146=1203%:%
  2744 %:%1148=1203%:%
  2711 %:%1147=1204%:%
  2745 %:%1149=1204%:%
  2712 %:%1148=1205%:%
  2746 %:%1150=1205%:%
  2713 %:%1149=1206%:%
  2747 %:%1151=1206%:%
  2714 %:%1150=1207%:%
  2748 %:%1152=1207%:%
  2715 %:%1151=1208%:%
  2749 %:%1153=1208%:%
  2716 %:%1152=1209%:%
  2750 %:%1154=1209%:%
  2717 %:%1153=1210%:%
  2751 %:%1155=1210%:%
  2718 %:%1154=1211%:%
  2752 %:%1156=1211%:%
  2719 %:%1155=1212%:%
  2753 %:%1157=1212%:%
  2720 %:%1156=1213%:%
  2754 %:%1158=1213%:%
  2721 %:%1157=1214%:%
  2755 %:%1159=1214%:%
  2722 %:%1158=1215%:%
  2756 %:%1160=1215%:%
  2723 %:%1159=1216%:%
  2757 %:%1161=1216%:%
  2724 %:%1160=1217%:%
  2758 %:%1162=1217%:%
  2725 %:%1161=1218%:%
  2759 %:%1162=1218%:%
  2726 %:%1162=1219%:%
  2760 %:%1163=1219%:%
  2727 %:%1163=1220%:%
  2761 %:%1164=1220%:%
  2728 %:%1164=1221%:%
  2762 %:%1165=1221%:%
  2729 %:%1165=1222%:%
  2763 %:%1166=1222%:%
  2730 %:%1166=1223%:%
  2764 %:%1167=1223%:%
  2731 %:%1167=1224%:%
  2765 %:%1168=1224%:%
  2732 %:%1168=1225%:%
  2766 %:%1169=1225%:%
  2733 %:%1169=1226%:%
  2767 %:%1170=1226%:%
  2734 %:%1170=1227%:%
  2768 %:%1171=1227%:%
  2735 %:%1171=1228%:%
  2769 %:%1172=1228%:%
  2736 %:%1172=1229%:%
  2770 %:%1173=1229%:%
  2737 %:%1173=1230%:%
  2771 %:%1173=1230%:%
  2738 %:%1174=1231%:%
  2772 %:%1174=1231%:%
  2739 %:%1175=1232%:%
  2773 %:%1175=1232%:%
  2740 %:%1176=1233%:%
  2774 %:%1176=1233%:%
  2741 %:%1177=1234%:%
  2775 %:%1177=1234%:%
  2753 %:%1189=1246%:%
  2787 %:%1189=1246%:%
  2754 %:%1190=1247%:%
  2788 %:%1190=1247%:%
  2755 %:%1191=1248%:%
  2789 %:%1191=1248%:%
  2756 %:%1192=1249%:%
  2790 %:%1192=1249%:%
  2757 %:%1193=1250%:%
  2791 %:%1193=1250%:%
  2758 %:%1193=1251%:%
  2792 %:%1194=1251%:%
  2759 %:%1193=1252%:%
  2793 %:%1195=1252%:%
  2760 %:%1194=1253%:%
  2794 %:%1196=1253%:%
  2761 %:%1195=1254%:%
  2795 %:%1197=1254%:%
  2762 %:%1195=1255%:%
  2796 %:%1198=1255%:%
  2763 %:%1195=1256%:%
  2797 %:%1199=1256%:%
  2764 %:%1195=1257%:%
  2798 %:%1200=1257%:%
  2765 %:%1196=1258%:%
  2799 %:%1201=1258%:%
  2766 %:%1197=1259%:%
  2800 %:%1202=1259%:%
  2767 %:%1198=1260%:%
  2801 %:%1203=1260%:%
  2768 %:%1199=1261%:%
  2802 %:%1204=1261%:%
  2769 %:%1200=1262%:%
  2803 %:%1205=1262%:%
  2770 %:%1200=1263%:%
  2804 %:%1206=1263%:%
  2771 %:%1201=1264%:%
  2805 %:%1207=1264%:%
  2772 %:%1202=1265%:%
  2806 %:%1208=1265%:%
  2773 %:%1203=1266%:%
  2807 %:%1209=1266%:%
  2774 %:%1204=1267%:%
  2808 %:%1210=1267%:%
  2775 %:%1205=1268%:%
  2809 %:%1211=1268%:%
  2776 %:%1206=1269%:%
  2810 %:%1212=1269%:%
  2777 %:%1207=1270%:%
  2811 %:%1213=1270%:%
  2778 %:%1208=1271%:%
  2812 %:%1214=1271%:%
  2779 %:%1209=1272%:%
  2813 %:%1215=1272%:%
  2780 %:%1210=1273%:%
  2814 %:%1216=1273%:%
  2781 %:%1211=1274%:%
  2815 %:%1217=1274%:%
  2782 %:%1212=1275%:%
  2816 %:%1218=1275%:%
  2783 %:%1213=1276%:%
  2817 %:%1219=1276%:%
  2784 %:%1214=1277%:%
  2818 %:%1220=1277%:%
  2785 %:%1215=1278%:%
  2819 %:%1221=1278%:%
  2786 %:%1216=1279%:%
  2820 %:%1222=1279%:%
  2787 %:%1217=1280%:%
  2821 %:%1223=1280%:%
  2788 %:%1218=1281%:%
  2822 %:%1224=1281%:%
  2789 %:%1219=1282%:%
  2823 %:%1225=1282%:%
  2790 %:%1220=1283%:%
  2824 %:%1226=1283%:%
  2791 %:%1221=1284%:%
  2825 %:%1227=1284%:%
  2792 %:%1222=1285%:%
  2826 %:%1227=1285%:%
  2793 %:%1223=1286%:%
  2827 %:%1227=1286%:%
  2794 %:%1224=1287%:%
  2828 %:%1228=1287%:%
  2795 %:%1225=1288%:%
  2829 %:%1229=1288%:%
  2796 %:%1226=1289%:%
  2830 %:%1229=1289%:%
  2797 %:%1227=1290%:%
  2831 %:%1229=1290%:%
  2798 %:%1228=1291%:%
  2832 %:%1229=1291%:%
  2799 %:%1229=1292%:%
  2833 %:%1230=1292%:%
  2800 %:%1230=1293%:%
  2834 %:%1231=1293%:%
  2801 %:%1231=1294%:%
  2835 %:%1232=1294%:%
  2802 %:%1232=1295%:%
  2836 %:%1233=1295%:%
  2803 %:%1233=1296%:%
  2837 %:%1234=1296%:%
  2804 %:%1234=1297%:%
  2838 %:%1234=1297%:%
  2805 %:%1235=1298%:%
  2839 %:%1235=1298%:%
  2806 %:%1236=1299%:%
  2840 %:%1236=1299%:%
  2807 %:%1237=1300%:%
  2841 %:%1237=1300%:%
  2808 %:%1238=1301%:%
  2842 %:%1238=1301%:%
  2814 %:%1244=1307%:%
  2848 %:%1244=1307%:%
  2815 %:%1245=1308%:%
  2849 %:%1245=1308%:%
  2816 %:%1246=1309%:%
  2850 %:%1246=1309%:%
  2817 %:%1247=1310%:%
  2851 %:%1247=1310%:%
  2818 %:%1248=1311%:%
  2852 %:%1248=1311%:%
  2819 %:%1248=1312%:%
  2853 %:%1249=1312%:%
  2820 %:%1249=1313%:%
  2854 %:%1250=1313%:%
  2821 %:%1249=1314%:%
  2855 %:%1251=1314%:%
  2822 %:%1250=1315%:%
  2856 %:%1252=1315%:%
  2823 %:%1250=1316%:%
  2857 %:%1253=1316%:%
  2824 %:%1251=1317%:%
  2858 %:%1254=1317%:%
  2825 %:%1252=1318%:%
  2859 %:%1255=1318%:%
  2826 %:%1253=1319%:%
  2860 %:%1256=1319%:%
  2827 %:%1254=1320%:%
  2861 %:%1257=1320%:%
  2828 %:%1255=1321%:%
  2862 %:%1258=1321%:%
  2829 %:%1256=1322%:%
  2863 %:%1259=1322%:%
  2830 %:%1257=1323%:%
  2864 %:%1260=1323%:%
  2831 %:%1257=1324%:%
  2865 %:%1261=1324%:%
  2832 %:%1258=1325%:%
  2866 %:%1262=1325%:%
  2833 %:%1258=1326%:%
  2867 %:%1263=1326%:%
  2834 %:%1259=1327%:%
  2868 %:%1264=1327%:%
  2835 %:%1259=1328%:%
  2869 %:%1265=1328%:%
  2836 %:%1260=1329%:%
  2870 %:%1266=1329%:%
  2837 %:%1261=1330%:%
  2871 %:%1267=1330%:%
  2838 %:%1262=1331%:%
  2872 %:%1268=1331%:%
  2839 %:%1263=1332%:%
  2873 %:%1269=1332%:%
  2840 %:%1264=1333%:%
  2874 %:%1270=1333%:%
  2841 %:%1265=1334%:%
  2875 %:%1271=1334%:%
  2842 %:%1266=1335%:%
  2876 %:%1272=1335%:%
  2843 %:%1267=1336%:%
  2877 %:%1273=1336%:%
  2844 %:%1268=1337%:%
  2878 %:%1274=1337%:%
  2845 %:%1269=1338%:%
  2879 %:%1275=1338%:%
  2846 %:%1270=1339%:%
  2880 %:%1276=1339%:%
  2847 %:%1271=1340%:%
  2881 %:%1277=1340%:%
  2848 %:%1272=1341%:%
  2882 %:%1278=1341%:%
  2849 %:%1273=1342%:%
  2883 %:%1279=1342%:%
  2850 %:%1274=1343%:%
  2884 %:%1280=1343%:%
  2851 %:%1275=1344%:%
  2885 %:%1281=1344%:%
  2852 %:%1276=1345%:%
  2886 %:%1282=1345%:%
  2853 %:%1277=1346%:%
  2887 %:%1282=1346%:%
  2854 %:%1278=1347%:%
  2888 %:%1283=1347%:%
  2855 %:%1279=1348%:%
  2889 %:%1283=1348%:%
  2856 %:%1280=1349%:%
  2890 %:%1284=1349%:%
  2857 %:%1281=1350%:%
  2891 %:%1284=1350%:%
  2858 %:%1282=1351%:%
  2892 %:%1285=1351%:%
  2859 %:%1283=1352%:%
  2893 %:%1286=1352%:%
  2860 %:%1284=1353%:%
  2894 %:%1287=1353%:%
  2861 %:%1285=1354%:%
  2895 %:%1288=1354%:%
  2862 %:%1286=1355%:%
  2896 %:%1289=1355%:%
  2863 %:%1287=1356%:%
  2897 %:%1290=1356%:%
  2864 %:%1288=1357%:%
  2898 %:%1291=1357%:%
  2865 %:%1289=1358%:%
  2899 %:%1291=1358%:%
  2866 %:%1290=1359%:%
  2900 %:%1292=1359%:%
  2867 %:%1290=1360%:%
  2901 %:%1292=1360%:%
  2868 %:%1291=1361%:%
  2902 %:%1293=1361%:%
  2869 %:%1292=1362%:%
  2903 %:%1293=1362%:%
  2870 %:%1293=1363%:%
  2904 %:%1294=1363%:%
  2871 %:%1294=1364%:%
  2905 %:%1295=1364%:%
  2872 %:%1295=1365%:%
  2906 %:%1296=1365%:%
  2873 %:%1296=1366%:%
  2907 %:%1297=1366%:%
  2874 %:%1297=1367%:%
  2908 %:%1298=1367%:%
  2875 %:%1297=1368%:%
  2909 %:%1299=1368%:%
  2876 %:%1298=1369%:%
  2910 %:%1300=1369%:%
  2877 %:%1299=1370%:%
  2911 %:%1301=1370%:%
  2878 %:%1300=1371%:%
  2912 %:%1302=1371%:%
  2879 %:%1300=1372%:%
  2913 %:%1303=1372%:%
  2880 %:%1301=1373%:%
  2914 %:%1304=1373%:%
  2881 %:%1302=1374%:%
  2915 %:%1305=1374%:%
  2882 %:%1303=1375%:%
  2916 %:%1306=1375%:%
  2883 %:%1303=1376%:%
  2917 %:%1307=1376%:%
  2884 %:%1304=1377%:%
  2918 %:%1308=1377%:%
  2885 %:%1304=1378%:%
  2919 %:%1309=1378%:%
  2886 %:%1305=1379%:%
  2920 %:%1310=1379%:%
  2887 %:%1305=1380%:%
  2921 %:%1311=1380%:%
  2888 %:%1306=1381%:%
  2922 %:%1312=1381%:%
  2889 %:%1307=1382%:%
  2923 %:%1313=1382%:%
  2890 %:%1308=1383%:%
  2924 %:%1314=1383%:%
  2891 %:%1308=1384%:%
  2925 %:%1315=1384%:%
  2892 %:%1309=1385%:%
  2926 %:%1316=1385%:%
  2893 %:%1309=1386%:%
  2927 %:%1317=1386%:%
  2894 %:%1310=1387%:%
  2928 %:%1318=1387%:%
  2895 %:%1310=1388%:%
  2929 %:%1319=1388%:%
  2896 %:%1310=1389%:%
  2930 %:%1320=1389%:%
  2897 %:%1310=1390%:%
  2931 %:%1321=1390%:%
  2898 %:%1311=1391%:%
  2932 %:%1322=1391%:%
  2899 %:%1311=1392%:%
  2933 %:%1323=1392%:%
  2900 %:%1312=1393%:%
  2934 %:%1324=1393%:%
  2901 %:%1313=1394%:%
  2935 %:%1324=1394%:%
  2902 %:%1313=1396%:%
  2936 %:%1325=1395%:%
  2903 %:%1313=1397%:%
  2937 %:%1326=1396%:%
  2904 %:%1313=1398%:%
  2938 %:%1327=1397%:%
  2905 %:%1313=1399%:%
  2939 %:%1328=1398%:%
  2906 %:%1313=1400%:%
  2940 %:%1329=1399%:%
  2907 %:%1314=1401%:%
  2941 %:%1330=1400%:%
  2908 %:%1314=1402%:%
  2942 %:%1331=1401%:%
  2909 %:%1315=1403%:%
  2943 %:%1331=1402%:%
  2910 %:%1315=1404%:%
  2944 %:%1332=1403%:%
  2911 %:%1316=1405%:%
  2945 %:%1333=1404%:%
  2912 %:%1316=1406%:%
  2946 %:%1334=1405%:%
  2913 %:%1317=1407%:%
  2947 %:%1334=1406%:%
  2914 %:%1318=1408%:%
  2948 %:%1335=1407%:%
  2915 %:%1319=1409%:%
  2949 %:%1336=1408%:%
  2916 %:%1320=1410%:%
  2950 %:%1337=1409%:%
  2917 %:%1320=1411%:%
  2951 %:%1337=1410%:%
  2918 %:%1321=1412%:%
  2952 %:%1338=1411%:%
  2919 %:%1321=1413%:%
  2953 %:%1338=1412%:%
  2920 %:%1322=1414%:%
  2954 %:%1339=1413%:%
  2921 %:%1323=1415%:%
  2955 %:%1339=1414%:%
  2922 %:%1323=1416%:%
  2956 %:%1340=1415%:%
  2923 %:%1324=1417%:%
  2957 %:%1341=1416%:%
  2924 %:%1325=1418%:%
  2958 %:%1342=1417%:%
  2925 %:%1326=1419%:%
  2959 %:%1342=1418%:%
  2926 %:%1327=1420%:%
  2960 %:%1343=1419%:%
  2927 %:%1328=1421%:%
  2961 %:%1343=1420%:%
  2928 %:%1329=1422%:%
  2962 %:%1344=1421%:%
  2929 %:%1330=1423%:%
  2963 %:%1344=1422%:%
  2930 %:%1331=1424%:%
  2964 %:%1344=1423%:%
  2931 %:%1332=1425%:%
  2965 %:%1344=1424%:%
  2932 %:%1333=1426%:%
  2966 %:%1345=1425%:%
  2933 %:%1334=1427%:%
  2967 %:%1345=1426%:%
  2934 %:%1335=1428%:%
  2968 %:%1346=1427%:%
  2935 %:%1336=1429%:%
  2969 %:%1347=1428%:%
  2936 %:%1337=1430%:%
  2970 %:%1347=1430%:%
  2937 %:%1338=1431%:%
  2971 %:%1347=1431%:%
  2938 %:%1339=1432%:%
  2972 %:%1347=1432%:%
  2939 %:%1340=1433%:%
  2973 %:%1347=1433%:%
  2940 %:%1341=1434%:%
  2974 %:%1347=1434%:%
  2941 %:%1342=1435%:%
  2975 %:%1348=1435%:%
  2942 %:%1343=1436%:%
  2976 %:%1348=1436%:%
  2943 %:%1344=1437%:%
  2977 %:%1349=1437%:%
  2944 %:%1345=1438%:%
  2978 %:%1349=1438%:%
  2945 %:%1346=1439%:%
  2979 %:%1350=1439%:%
  2946 %:%1347=1440%:%
  2980 %:%1350=1440%:%
  2947 %:%1348=1441%:%
  2981 %:%1351=1441%:%
  2948 %:%1349=1442%:%
  2982 %:%1352=1442%:%
  2949 %:%1350=1443%:%
  2983 %:%1353=1443%:%
  2950 %:%1351=1444%:%
  2984 %:%1354=1444%:%
  2951 %:%1352=1445%:%
  2985 %:%1354=1445%:%
  2952 %:%1353=1446%:%
  2986 %:%1355=1446%:%
  2953 %:%1354=1447%:%
  2987 %:%1355=1447%:%
  2954 %:%1355=1448%:%
  2988 %:%1356=1448%:%
  2955 %:%1356=1449%:%
  2989 %:%1357=1449%:%
  2956 %:%1357=1450%:%
  2990 %:%1357=1450%:%
  2957 %:%1358=1451%:%
  2991 %:%1358=1451%:%
  2958 %:%1359=1452%:%
  2992 %:%1359=1452%:%
  2959 %:%1360=1453%:%
  2993 %:%1360=1453%:%
  2960 %:%1361=1454%:%
  2994 %:%1361=1454%:%
  2969 %:%1370=1463%:%
  3003 %:%1370=1463%:%
  2970 %:%1371=1464%:%
  3004 %:%1371=1464%:%
  2971 %:%1372=1465%:%
  3005 %:%1372=1465%:%
  2972 %:%1373=1466%:%
  3006 %:%1373=1466%:%
  2973 %:%1374=1467%:%
  3007 %:%1374=1467%:%
  2974 %:%1383=1471%:%
  3008 %:%1375=1468%:%
  2975 %:%1395=1478%:%
  3009 %:%1376=1469%:%
  2976 %:%1396=1479%:%
  3010 %:%1377=1470%:%
  2977 %:%1397=1480%:%
  3011 %:%1378=1471%:%
  2978 %:%1398=1481%:%
  3012 %:%1379=1472%:%
  2979 %:%1399=1482%:%
  3013 %:%1380=1473%:%
  2980 %:%1400=1483%:%
  3014 %:%1381=1474%:%
  2981 %:%1401=1484%:%
  3015 %:%1382=1475%:%
  2982 %:%1410=1489%:%
  3016 %:%1383=1476%:%
  2983 %:%1422=1493%:%
  3017 %:%1384=1477%:%
  2984 %:%1423=1494%:%
  3018 %:%1385=1478%:%
  2985 %:%1424=1495%:%
  3019 %:%1386=1479%:%
  2986 %:%1425=1496%:%
  3020 %:%1387=1480%:%
  2987 %:%1426=1497%:%
  3021 %:%1388=1481%:%
  2988 %:%1427=1498%:%
  3022 %:%1389=1482%:%
  2989 %:%1428=1499%:%
  3023 %:%1390=1483%:%
  2990 %:%1429=1500%:%
  3024 %:%1391=1484%:%
  2991 %:%1430=1501%:%
  3025 %:%1392=1485%:%
  2992 %:%1431=1502%:%
  3026 %:%1393=1486%:%
  2993 %:%1432=1503%:%
  3027 %:%1394=1487%:%
  2994 %:%1433=1504%:%
  3028 %:%1395=1488%:%
  2995 %:%1434=1505%:%
  3029 %:%1396=1489%:%
  2996 %:%1435=1506%:%
  3030 %:%1397=1490%:%
  2997 %:%1436=1507%:%
  3031 %:%1398=1491%:%
  2998 %:%1437=1508%:%
  3032 %:%1399=1492%:%
  2999 %:%1438=1509%:%
  3033 %:%1400=1493%:%
  3000 %:%1439=1510%:%
  3034 %:%1401=1494%:%
  3001 %:%1440=1511%:%
  3035 %:%1402=1495%:%
  3002 %:%1441=1512%:%
  3036 %:%1403=1496%:%
  3003 %:%1442=1513%:%
  3037 %:%1404=1497%:%
  3004 %:%1443=1514%:%
  3038 %:%1405=1498%:%
  3005 %:%1444=1515%:%
  3039 %:%1406=1499%:%
  3006 %:%1445=1516%:%
  3040 %:%1407=1500%:%
  3007 %:%1446=1517%:%
  3041 %:%1408=1501%:%
  3008 %:%1447=1518%:%
  3042 %:%1417=1505%:%
  3009 %:%1448=1519%:%
  3043 %:%1429=1512%:%
  3010 %:%1449=1520%:%
  3044 %:%1430=1513%:%
  3011 %:%1450=1521%:%
  3045 %:%1431=1514%:%
  3012 %:%1451=1522%:%
  3046 %:%1432=1515%:%
  3013 %:%1452=1523%:%
  3047 %:%1433=1516%:%
  3014 %:%1453=1524%:%
  3048 %:%1434=1517%:%
  3015 %:%1454=1525%:%
  3049 %:%1435=1518%:%
  3016 %:%1455=1526%:%
  3050 %:%1444=1523%:%
  3017 %:%1456=1527%:%
  3051 %:%1456=1527%:%
  3018 %:%1457=1528%:%
  3052 %:%1457=1528%:%
  3019 %:%1458=1529%:%
  3053 %:%1458=1529%:%
  3020 %:%1459=1530%:%
  3054 %:%1459=1530%:%
  3021 %:%1460=1531%:%
  3055 %:%1460=1531%:%
  3068 %:%1507=1578%:%
  3102 %:%1507=1578%:%
  3069 %:%1508=1579%:%
  3103 %:%1508=1579%:%
  3070 %:%1509=1580%:%
  3104 %:%1509=1580%:%
  3071 %:%1510=1581%:%
  3105 %:%1510=1581%:%
  3072 %:%1511=1582%:%
  3106 %:%1511=1582%:%
  3073 %:%1511=1698%:%
  3107 %:%1512=1583%:%
  3074 %:%1512=1699%:%
  3108 %:%1513=1584%:%
  3075 %:%1513=1700%:%
  3109 %:%1514=1585%:%
  3076 %:%1514=1701%:%
  3110 %:%1515=1586%:%
  3077 %:%1515=1702%:%
  3111 %:%1516=1587%:%
  3078 %:%1515=1863%:%
  3112 %:%1517=1588%:%
  3079 %:%1516=1864%:%
  3113 %:%1518=1589%:%
  3080 %:%1517=1865%:%
  3114 %:%1519=1590%:%
  3081 %:%1518=1866%:%
  3115 %:%1520=1591%:%
  3082 %:%1519=1867%:%
  3116 %:%1521=1592%:%
  3083 %:%1520=1868%:%
  3117 %:%1522=1593%:%
  3084 %:%1521=1869%:%
  3118 %:%1523=1594%:%
  3085 %:%1522=1870%:%
  3119 %:%1524=1595%:%
  3086 %:%1523=1871%:%
  3120 %:%1525=1596%:%
  3087 %:%1524=1872%:%
  3121 %:%1526=1597%:%
  3088 %:%1525=1873%:%
  3122 %:%1527=1598%:%
  3089 %:%1526=1874%:%
  3123 %:%1528=1599%:%
  3090 %:%1527=1875%:%
  3124 %:%1529=1600%:%
  3091 %:%1528=1876%:%
  3125 %:%1530=1601%:%
  3092 %:%1529=1877%:%
  3126 %:%1531=1602%:%
  3093 %:%1530=1878%:%
  3127 %:%1532=1603%:%
  3094 %:%1531=1879%:%
  3128 %:%1533=1604%:%
  3095 %:%1532=1880%:%
  3129 %:%1534=1605%:%
  3096 %:%1533=1881%:%
  3130 %:%1535=1606%:%
  3097 %:%1534=1882%:%
  3131 %:%1536=1607%:%
  3098 %:%1534=1883%:%
  3132 %:%1537=1608%:%
  3099 %:%1535=1884%:%
  3133 %:%1538=1609%:%
  3100 %:%1535=1885%:%
  3134 %:%1539=1610%:%
  3101 %:%1535=1886%:%
  3135 %:%1540=1611%:%
  3102 %:%1536=1887%:%
  3136 %:%1541=1612%:%
  3103 %:%1536=1888%:%
  3137 %:%1542=1613%:%
  3104 %:%1537=1889%:%
  3138 %:%1543=1614%:%
  3105 %:%1538=1890%:%
  3139 %:%1544=1615%:%
  3106 %:%1539=1891%:%
  3140 %:%1545=1616%:%
  3107 %:%1540=1892%:%
  3141 %:%1545=1732%:%
  3108 %:%1541=1893%:%
  3142 %:%1546=1733%:%
  3109 %:%1542=1894%:%
  3143 %:%1547=1734%:%
  3110 %:%1543=1895%:%
  3144 %:%1548=1735%:%
  3111 %:%1544=1896%:%
  3145 %:%1549=1736%:%
  3112 %:%1545=1897%:%
  3146 %:%1549=1897%:%
  3113 %:%1546=1898%:%
  3147 %:%1550=1898%:%
  3114 %:%1547=1899%:%
  3148 %:%1551=1899%:%
  3115 %:%1548=1900%:%
  3149 %:%1552=1900%:%
  3116 %:%1549=1901%:%
  3150 %:%1553=1901%:%
  3117 %:%1550=1902%:%
  3151 %:%1554=1902%:%
  3118 %:%1551=1903%:%
  3152 %:%1555=1903%:%
  3119 %:%1552=1904%:%
  3153 %:%1556=1904%:%
  3120 %:%1553=1905%:%
  3154 %:%1557=1905%:%
  3121 %:%1553=1906%:%
  3155 %:%1558=1906%:%
  3122 %:%1554=1907%:%
  3156 %:%1559=1907%:%
  3123 %:%1555=1908%:%
  3157 %:%1560=1908%:%
  3124 %:%1556=1909%:%
  3158 %:%1561=1909%:%
  3125 %:%1556=1910%:%
  3159 %:%1562=1910%:%
  3126 %:%1556=1911%:%
  3160 %:%1563=1911%:%
  3127 %:%1557=1912%:%
  3161 %:%1564=1912%:%
  3128 %:%1558=1913%:%
  3162 %:%1565=1913%:%
  3129 %:%1559=1914%:%
  3163 %:%1566=1914%:%
  3130 %:%1559=1915%:%
  3164 %:%1567=1915%:%
  3131 %:%1560=1916%:%
  3165 %:%1568=1916%:%
  3132 %:%1560=1917%:%
  3166 %:%1568=1917%:%
  3133 %:%1561=1918%:%
  3167 %:%1569=1918%:%
  3134 %:%1562=1919%:%
  3168 %:%1569=1919%:%
  3135 %:%1563=1920%:%
  3169 %:%1569=1920%:%
  3136 %:%1564=1921%:%
  3170 %:%1570=1921%:%
  3137 %:%1565=1922%:%
  3171 %:%1570=1922%:%
  3138 %:%1566=1923%:%
  3172 %:%1571=1923%:%
  3139 %:%1567=1924%:%
  3173 %:%1572=1924%:%
  3140 %:%1568=1925%:%
  3174 %:%1573=1925%:%
  3141 %:%1569=1926%:%
  3175 %:%1574=1926%:%
  3142 %:%1570=1927%:%
  3176 %:%1575=1927%:%
  3143 %:%1571=1928%:%
  3177 %:%1576=1928%:%
  3144 %:%1572=1929%:%
  3178 %:%1577=1929%:%
  3145 %:%1573=1930%:%
  3179 %:%1578=1930%:%
  3146 %:%1574=1931%:%
  3180 %:%1579=1931%:%
  3147 %:%1575=1932%:%
  3181 %:%1580=1932%:%
  3148 %:%1576=1933%:%
  3182 %:%1581=1933%:%
  3149 %:%1577=1934%:%
  3183 %:%1582=1934%:%
  3150 %:%1586=1939%:%
  3184 %:%1583=1935%:%
  3151 %:%1598=1943%:%
  3185 %:%1584=1936%:%
  3152 %:%1599=1944%:%
  3186 %:%1585=1937%:%
  3153 %:%1600=1945%:%
  3187 %:%1586=1938%:%
  3154 %:%1601=1946%:%
  3188 %:%1587=1939%:%
  3155 %:%1602=1947%:%
  3189 %:%1587=1940%:%
  3156 %:%1603=1948%:%
  3190 %:%1588=1941%:%
  3157 %:%1604=1949%:%
  3191 %:%1589=1942%:%
  3158 %:%1605=1950%:%
  3192 %:%1590=1943%:%
  3159 %:%1606=1951%:%
  3193 %:%1590=1944%:%
  3160 %:%1607=1952%:%
  3194 %:%1590=1945%:%
  3161 %:%1608=1953%:%
  3195 %:%1591=1946%:%
  3162 %:%1609=1954%:%
  3196 %:%1592=1947%:%
  3163 %:%1610=1955%:%
  3197 %:%1593=1948%:%
  3164 %:%1611=1956%:%
  3198 %:%1593=1949%:%
  3165 %:%1612=1957%:%
  3199 %:%1594=1950%:%
  3166 %:%1613=1958%:%
  3200 %:%1594=1951%:%
  3167 %:%1614=1959%:%
  3201 %:%1595=1952%:%
  3168 %:%1615=1960%:%
  3202 %:%1596=1953%:%
  3169 %:%1616=1961%:%
  3203 %:%1597=1954%:%
  3170 %:%1617=1962%:%
  3204 %:%1598=1955%:%
  3171 %:%1618=1963%:%
  3205 %:%1599=1956%:%
  3172 %:%1619=1964%:%
  3206 %:%1600=1957%:%
  3173 %:%1620=1965%:%
  3207 %:%1601=1958%:%
  3174 %:%1621=1966%:%
  3208 %:%1602=1959%:%
  3175 %:%1622=1967%:%
  3209 %:%1603=1960%:%
  3176 %:%1623=1968%:%
  3210 %:%1604=1961%:%
  3177 %:%1624=1969%:%
  3211 %:%1605=1962%:%
  3178 %:%1625=1970%:%
  3212 %:%1606=1963%:%
  3179 %:%1626=1971%:%
  3213 %:%1607=1964%:%
  3180 %:%1627=1972%:%
  3214 %:%1608=1965%:%
  3181 %:%1628=1973%:%
  3215 %:%1609=1966%:%
  3182 %:%1629=1974%:%
  3216 %:%1610=1967%:%
  3183 %:%1630=1975%:%
  3217 %:%1611=1968%:%
  3184 %:%1631=1976%:%
  3218 %:%1620=1973%:%
  3185 %:%1632=1977%:%
  3219 %:%1632=1977%:%
  3186 %:%1633=1978%:%
  3220 %:%1633=1978%:%
  3187 %:%1634=1979%:%
  3221 %:%1634=1979%:%
  3188 %:%1635=1980%:%
  3222 %:%1635=1980%:%
  3189 %:%1636=1981%:%
  3223 %:%1636=1981%:%
  3199 %:%1646=1991%:%
  3233 %:%1646=1991%:%
  3200 %:%1647=1992%:%
  3234 %:%1647=1992%:%
  3201 %:%1648=1993%:%
  3235 %:%1648=1993%:%
  3202 %:%1649=1994%:%
  3236 %:%1649=1994%:%
  3203 %:%1650=1995%:%
  3237 %:%1650=1995%:%
  3204 %:%1663=2001%:%
  3238 %:%1651=1996%:%
       
  3239 %:%1652=1997%:%
       
  3240 %:%1653=1998%:%
       
  3241 %:%1654=1999%:%
       
  3242 %:%1655=2000%:%
       
  3243 %:%1656=2001%:%
       
  3244 %:%1657=2002%:%
       
  3245 %:%1658=2003%:%
       
  3246 %:%1659=2004%:%
       
  3247 %:%1660=2005%:%
       
  3248 %:%1661=2006%:%
       
  3249 %:%1662=2007%:%
       
  3250 %:%1663=2008%:%
       
  3251 %:%1664=2009%:%
       
  3252 %:%1665=2010%:%
       
  3253 %:%1666=2011%:%
       
  3254 %:%1667=2012%:%
       
  3255 %:%1668=2013%:%
       
  3256 %:%1669=2014%:%
       
  3257 %:%1670=2015%:%
       
  3258 %:%1671=2016%:%
       
  3259 %:%1672=2017%:%
       
  3260 %:%1673=2018%:%
       
  3261 %:%1674=2019%:%
       
  3262 %:%1675=2020%:%
       
  3263 %:%1676=2021%:%
       
  3264 %:%1677=2022%:%
       
  3265 %:%1678=2023%:%
       
  3266 %:%1679=2024%:%
       
  3267 %:%1680=2025%:%
       
  3268 %:%1681=2026%:%
       
  3269 %:%1682=2027%:%
       
  3270 %:%1683=2028%:%
       
  3271 %:%1684=2029%:%
       
  3272 %:%1697=2035%:%