From 10a4077637761a34bb459f8bc9a6cdb7894e8f72 Mon Sep 17 00:00:00 2001 From: Karl Berry Date: Mon, 17 May 2010 15:41:27 +0000 Subject: rm files now in own pkgs git-svn-id: svn://tug.org/texlive/trunk@18301 c570f23f-e606-0410-a88d-b1316a301751 --- Master/texmf-dist/tex/latex/seminar/2up.sty | 3 - Master/texmf-dist/tex/latex/seminar/2up.tex | 382 ----------------------- Master/texmf-dist/tex/latex/seminar/xcomment.sty | 192 ------------ 3 files changed, 577 deletions(-) delete mode 100644 Master/texmf-dist/tex/latex/seminar/2up.sty delete mode 100644 Master/texmf-dist/tex/latex/seminar/2up.tex delete mode 100644 Master/texmf-dist/tex/latex/seminar/xcomment.sty (limited to 'Master/texmf-dist/tex/latex') diff --git a/Master/texmf-dist/tex/latex/seminar/2up.sty b/Master/texmf-dist/tex/latex/seminar/2up.sty deleted file mode 100644 index ec109716932..00000000000 --- a/Master/texmf-dist/tex/latex/seminar/2up.sty +++ /dev/null @@ -1,3 +0,0 @@ -\ProvidesPackage{2up}[1998/03/13 package wrapper for 2up.tex] -\input 2up.tex -\endinput diff --git a/Master/texmf-dist/tex/latex/seminar/2up.tex b/Master/texmf-dist/tex/latex/seminar/2up.tex deleted file mode 100644 index a6dd259c47c..00000000000 --- a/Master/texmf-dist/tex/latex/seminar/2up.tex +++ /dev/null @@ -1,382 +0,0 @@ -%% BEGIN 2up.tex/2up.sty -%% -\def\fileversion{1.2} -\def\filedate{93/01/28} -%% -%% COPYRIGHT 1992, 1993 by Timothy Van Zandt, Timothy.VAN-ZANDT@insead.edu -%% -%% DESCRIPTION: -%% 2up.tex/2up.sty provides two-up printing for Generic TeX (e.g., -%% Plain, LaTeX, AmSTeX and AmS-LaTeX). It produces a standard dvi file, -%% and does not involve an additional dvi or PostScript filter. It has a -%% flexible interface for specifying paper size and layout. -%% -%% INSTALLATION: -%% Put this file where your TeX looks for inputs, under the name 2up.tex. -%% Name a copy 2up.sty to use as a LaTeX style option, or create a file -%% 2up.sty with the lines: -%% \input 2up.tex -%% \endinput -%% -%% DOCUMENTATION: -%% Input 2up.tex, or include 2up as a LaTeX style option. There is a -%% good chance you will get the desired layout. (But you will probably -%% need to generate new font bitmaps to get high quality output.) See -%% 2up.doc, which might be appended to this file, for detailed -%% documentation. -%% -%% This file 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. -%% -%% -%% CODE: -% -\csname TwoUpLoaded\endcsname -\let\TwoUpLoaded\endinput -% -\edef\TheAtCode{\the\catcode`\@} -\catcode`\@=11\relax -\message{\space\space v\fileversion\space\space \filedate\space\space } -% -% Parameter registers: -\newdimen\@targetwidth -\newdimen\@targetheight -\newdimen\@sourcewidth -\newdimen\@sourceheight -\newdimen\pageseplength -\newdimen\pagesepwidth -\newdimen\pagesepoffset -\newif\if@sidebyside -\@sidebysidetrue -\newif\if@twosided -% -% Registers used by output routine. -\newif\if@leftpage -\@leftpagetrue -\newbox\@leftpage -\newbox\@rightpage -\newcount\@physicalpage -% -% Since pages are shipped out half as often: -\multiply\maxdeadcycles by 2 -% -% Registers used only for booklet layout: -\begingroup - \let\newcount\relax - \gdef\booklet@registers{% - \newcount\bookletpage - \bookletpage=0 - \newcount\leftpagenumber - \newcount\rightpagenumber - \multiply\maxdeadcycles by 20} -\endgroup -% -% A useful extension of the \magstep macro. -\def\magstepminus#1{% - \ifcase#1 \@m\or 833\or 694\or 579\or 482\or 401\fi\relax} -% -% \@targetwidth and \@targetheight are set to the *unmagnified* dimensions -% of the target page. \inv@targetmag is the inverse of the target -% magnification. -{\catcode`\p=12\catcode`\t=12\gdef\@@inv@@mag#1pt#2{\def#2{#1}}} -\def\target#1#2#3{% - \mag #1\relax - \@targetwidth=1000pt - \divide\@targetwidth by #1\relax - \expandafter\@@inv@@mag\the\@targetwidth\inv@targetmag - \@targetwidth=#2\relax - \@targetwidth=\inv@targetmag\@targetwidth - \@targetheight=#3\relax - \@targetheight=\inv@targetmag\@targetheight} -% -% Like \target, but for the source: -\def\source#1#2#3{% - \@sourcewidth=1000pt - \divide\@sourcewidth by #1\relax - \expandafter\@@inv@@mag\the\@sourcewidth\inv@sourcemag - \@sourcewidth=#2\relax - \@sourcewidth=\inv@sourcemag\@sourcewidth - \@sourceheight=#3\relax - \@sourceheight=\inv@sourcemag\@sourceheight} -% -% \targetlayout does a loop that reads the comma separated arguments. -% There can be no extraneous spaces. -\def\targetlayout#1{\process@targetlayout#1,stop,} -\def\process@targetlayout#1,{% - \expandafter\let\expandafter\next\csname target@#1\endcsname - \ifx\next\relax - \begingroup - \errhelp{Valid target layouts are "topbottom", "twosided", - "booklet", "Booklet" and "dvidvi".}% - \errmessage{`#1' is invalid 2up target layout - ignored.}% - \endgroup - \expandafter\process@targetlayout - \else - \next - \fi} -\def\target@stop{} -\def\target@booklet{% - \booklet@registers - \def\ship@@@leftpage{\save@booklet\@leftpage}% - \def\ship@@@rightpage{\save@booklet\@rightpage}% - \@leftpagefalse - \def\twoup@eject{\twoup@eject@booklet}% - \expandafter\process@targetlayout} -\def\target@Booklet{% - \def\booklet@@loop{\Booklet@@loop}% - \target@booklet} -\def\target@twosided{% - \@twosidedtrue - \expandafter\process@targetlayout} -\def\target@topbottom{% - \def\make@@halfpage{\make@@halftopbottom}% - \def\make@fullpage{\make@fulltopbottom}% - \@sidebysidefalse - \expandafter\process@targetlayout} -\def\target@dvidvi{% - \def\ship@@@leftpage{\ship@dvidvi\@leftpage}% - \def\ship@@@rightpage{\ship@dvidvi\@rightpage}% - \expandafter\process@targetlayout} -% -% TeX's \shipout primitive is saved as \&normal@shipout, and then \shipout -% is defined to save each page to \@leftpage or \@rightpage and to print out -% every two. With the twosided layout, filler pages are added when needed. -\expandafter\let\csname &normal@shipout\endcsname\shipout -\def\shipout{% - \if@leftpage - \global\@leftpagefalse - \def\next{\afterassignment\ship@leftpage\global\setbox\@leftpage=}% - \if@twosided - \ifodd\count\z@ - \global\setbox\@leftpage=\hbox{}% - \make@@halfpage\@leftpage\ship@@@leftpage - \def\next{\shipout}% - \fi - \fi - \else - \global\@leftpagetrue - \def\next{\afterassignment\ship@rightpage\global\setbox\@rightpage=}% - \if@twosided - \ifodd\count\z@ - \else - \global\setbox\@rightpage=\hbox{}% - \make@@halfpage\@rightpage\ship@@@rightpage - \def\next{\shipout}% - \fi - \fi - \fi - \next} -% -% The job of \ship@leftpage and \ship@rightpage is to invoke \ship@@leftpage -% or \ship@@rightpage at the right time. \shipout is followed either -% (i) by an \hbox, \vbox or \vtop, in which case \ship@leftpage is invoked -% after the opening {. \@leftpage is void, and \ship@leftpage invokes -% \ship@@leftpage after the closing }, or -% (ii) by a \box or \copy, in which case \ship@leftpage is invoked after -% the full assignment. \@leftpage is not voide, and \ship@leftpage invokes -% \ship@@leftpage immediately. -\def\ship@leftpage{% - \ifvoid\@leftpage\aftergroup\ship@@leftpage\else\ship@@leftpage\fi} -\def\ship@rightpage{% - \ifvoid\@rightpage\aftergroup\ship@@rightpage\else\ship@@rightpage\fi} -% -% \ship@@leftpage/\ship@@rightpage take the output box, and first make it -% into a fully-size source page (with \make@halfpage) and then this is -% centered horizontally and vertically in half of a target page (with -% \make@@halfpage). Then they are shipped individually or together. -\def\ship@@leftpage{\make@halfpage\@leftpage\ship@@@leftpage} -\def\ship@@rightpage{\make@halfpage\@rightpage\ship@@@rightpage} -\def\make@halfpage#1{% - \dp#1=\z@ - \setbox#1=\vbox to\@sourceheight{% - \vskip \inv@sourcemag in - \vskip \voffset - \hbox to\@sourcewidth{\hskip\inv@sourcemag in\hskip\hoffset\box#1\hss}% - \vss}% - \make@@halfpage#1} -% -% The definition of \make@@halfpage depends on the target layout. -\def\make@@halfsidebyside#1{% - \global\setbox#1=\vbox to\@targetheight{\vss - \hbox to.5\@targetwidth{\hss\box#1\hss}\vss}} -\def\make@@halftopbottom#1{% - \global\setbox#1=\vbox to.5\@targetheight{\vss - \hbox to\@targetwidth{\hss\box#1\hss}\vss}} -\def\make@@halfpage{\make@@halfsidebyside} -% -% The pages are generaly shipped in pairs: -\def\ship@twoup{% - \begingroup - \voffset=-\inv@targetmag in - \hoffset=\voffset - \global\advance\@physicalpage by 1 - \count\z@=\@physicalpage - \csname &normal@shipout\endcsname\make@fullpage - \endgroup} -\let\ship@@@leftpage\relax -\def\ship@@@rightpage{\ship@twoup} -% -% The definition of \make@fullpage depends on the layout: -\def\make@fullsidebyside{% - \hbox{\box\@leftpage\pagesep@sidebyside\box\@rightpage}} -\def\make@fulltopbottom{% - \vbox{\offinterlineskip\box\@leftpage\pagesep@topbottom\box\@rightpage}} -\def\make@fullpage{\make@fullsidebyside} -% -% A vertical or horizontal rule can be inserted. These can be redefined -% for other tricks: -\def\pagesep@sidebyside{% - \begingroup - \advance\pageseplength by \pagesepoffset - \pagesepwidth=\inv@targetmag\pagesepwidth - \kern -.5\pagesepwidth - \vrule height \inv@targetmag\pageseplength - depth -\inv@targetmag\pagesepoffset - width \pagesepwidth - \kern -.5\pagesepwidth - \endgroup} -\def\pagesep@topbottom{% - \begingroup - \pagesepwidth=\inv@targetmag\pagesepwidth - \vskip -.5\pagesepwidth - \moveright\inv@targetmag\pagesepoffset\hbox{% - \vrule height\pagesepwidth width\inv@targetmag\pageseplength}% - \vskip -.5\pagesepwidth - \endgroup} -% -% With the dvidvi layout, the pages are shipped individually: -\def\ship@dvidvi#1{% - \begingroup - \voffset=-\inv@targetmag in - \hoffset=\voffset - \csname &normal@shipout\endcsname\box#1% - \endgroup} -% -% With the booklet or Booklet layout, the pages are saved rather than -% shipped. -\begingroup -\let\newbox\relax -\gdef\save@booklet#1{% - \begingroup - \globaldefs=1 - \advance\bookletpage by 1 - \expandafter\newbox\csname bookletbox\the\bookletpage\endcsname - \expandafter\setbox\csname bookletbox\the\bookletpage\endcsname\box#1% - \endgroup} -\endgroup -% -% The pages are then printed at the end with the following macros: -\def\make@bookletpage#1{% - \setbox\ifodd#1\@rightpage\else\@leftpage\fi=% - \expandafter\box\csname bookletbox\the#1\endcsname} -\def\booklet@loop{% - \count\z@\rightpagenumber - \make@bookletpage\leftpagenumber - \make@bookletpage\rightpagenumber - \ship@twoup - \booklet@@loop} -\def\booklet@@loop{% - \advance\rightpagenumber by 2 - \advance\leftpagenumber by -2 - \ifnum\leftpagenumber<1\else\expandafter\booklet@loop\fi} -\def\Booklet@@loop{% - \advance\rightpagenumber by 1 - \advance\leftpagenumber by -1 - \ifnum\leftpagenumber<\rightpagenumber\else\expandafter\booklet@loop\fi} -% -% This one is easy: -\def\twoupemptypage{\shipout\hbox{}} -% -% This clears a whole target page if there is a saved left page. Note that -% this does not invoke the output routine; i.e., it is not like \clearpage -% or \supereject. See \twoupclearpage and \twoupeject below. -\def\twoup@eject{% - \if@leftpage\else - \global\setbox\@rightpage\hbox{}% - \make@@halfpage\@rightpage\ship@@@rightpage - \global\@leftpagetrue - \fi} -% -% This is the definition of \twoup@eject with the booklet option: -\def\twoup@eject@booklet{% - \leftpagenumber\bookletpage - \advance\leftpagenumber by 3 - \divide\leftpagenumber by 4 - \multiply\leftpagenumber by 4 - \rightpagenumber=1 - \ifnum\leftpagenumber>\bookletpage - \setbox\@leftpage\hbox{}% - \make@@halfpage\@leftpage - \loop - \setbox\@rightpage\copy\@leftpage - \save@booklet\@rightpage - \ifnum\leftpagenumber>\bookletpage - \repeat - \fi - \booklet@loop} -% -% This modification is needed for \LaTeX in order to get the last page -% printed out if the final page is a left page (the catcode business is -% because \enddocument is \let to \bye in amstex): -\begingroup -\expandafter\ifx\csname @latexerr\endcsname\relax - \catcode`\>=14\else\catcode`\>=9\fi\relax ->>\gdef\twoupclearpage{\clearpage\twoup@eject} ->>\expandafter\@temptokena\expandafter{\enddocument} ->>\xdef\enddocument{\noexpand\twoupclearpage\the\@temptokena} -\endgroup -% -% For most other macro packages we could just leave be and all pages would -% always be printed because of the way the \end primitive works (except that -% TeX will go bonkers with the booklet layout). However, -% sometimes a blank filler page would be printed *with* headings. We prefer -% the filler page to be truly blank. To achieve this, we hack the definition -% of \end. This may cause problems with some macros. -\expandafter\ifx\csname @latexerr\endcsname\relax - \let\twoup@@@end\end - \def\end{\twoup@eject\twoup@@@end} - \def\twoupeject{\par\vfil\supereject\twoup@eject} -\fi -% -% This is one workaround for the page cross-references problem -\def\TwoupWrites{% - \let\TwoupSaved@write\write - \let\TwoupSaved@read\read - \let\TwoupSaved@openout\openout - \let\TwoupSaved@closeout\closeout - \def\write{\TwoupSaved@write-1{}\immediate\TwoupSaved@write}% - \def\read{\TwoupSaved@write-1{}\immediate\TwoupSaved@read}% - \def\openout{\TwoupSaved@write-1{}\immediate\TwoupSaved@openout}% - \def\closeout{\TwoupSaved@write-1{}\immediate\TwoupSaved@closeout}% - \let\TwoupWrites\relax} -% -% Defaults: -\def\twouparticle{% - \target{\magstepminus1}{11in}{8.5in}% - \source{\magstep0}{8.5in}{11in}} -\def\twoupplain{% - \target{\magstepminus2}{11in}{8.5in}% - \source{\magstep0}{8.5in}{11in}} -\def\twouplegaltarget{% - \target{\magstepminus1}{14in}{8.5in}% - \source{\magstep0}{8.5in}{11in}}% -\def\twouplandscape{% - \target{\magstepminus2}{8.5in}{11in}% - \source{\magstep0}{11in}{8.5in}% - \targetlayout{topbottom}} -\expandafter\ifx\csname @latexerr\endcsname\relax - \twoupplain\else\twouparticle\fi -\pagesepwidth 0pt -\pageseplength 6.5in -\pagesepoffset 1in -% -\expandafter\catcode`\@=\TheAtCode\relax -\endinput -%% END 2up.tex/2up.sty diff --git a/Master/texmf-dist/tex/latex/seminar/xcomment.sty b/Master/texmf-dist/tex/latex/seminar/xcomment.sty deleted file mode 100644 index a85231d2c00..00000000000 --- a/Master/texmf-dist/tex/latex/seminar/xcomment.sty +++ /dev/null @@ -1,192 +0,0 @@ -%% -%% This is file `xcomment.sty', generated -%% on <1993/2/17> with the docstrip utility (2.0r). -%% -%% The original source files were: -%% -%% xcomment.doc -%% -\def\fileversion{1.2} -\def\filedate{93/02/12} -%% -%% Style option `xcomment' for use with LaTeX v2.09. -%% This is a style for comment and "inverse" comment environments. -%% -%% COPYRIGHT 1992, 1993 by Timothy Van Zandt, Timothy.VAN-ZANDT@insead.edu -%% -%% Input file: xcomment.sty. -%% Documented code: xcomment.doc. -%% For printing documentation: xcomment.tex. -%% -%% You may find xcomment.doc and xcomment.tex appended to xcomment.sty. -%% -%% -%% This file 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. -%% -%% -\@ifundefined{xcomment@@@}{}{\endinput} -\typeout{Style-Option: `xcomment' v\fileversion \space <\filedate> (tvz) } -\def\newxcomment{\@ifnextchar [{\@newxcommentwitharg}% - {\@newxcomment}} -\def\@newxcomment#1{% - \expandafter\def\csname #1\endcsname##1{\@xcomment{#1}{##1}}}% -\def\@newxcommentwitharg[#1]#2{% - \expandafter\def\csname #2\endcsname{\@xcomment{#2}{#1}}} -\newxcomment{xcomment} -\def\envirsep{\par} -\def\rescanfile#1{\def\@rescanfile{#1}} -\rescanfile{\jobname.tmp} -\def\norescanfile{\let\@rescanfile\relax} -\def\@nofloat#1{\hrule height\z@\nobreak\vfill\vbox\bgroup\def\@captype{#1}} -\def\end@nofloat{\egroup\nobreak\vfill\nobreak\hrule height\z@\medbreak} -\def\nofloat#1{\@for\@tempa:=#1\do{\@namedef{#1}{\@nofloat{#1}}% - \@namedef{end#1}{\end@nofloat}}} -\def\xc@makeother#1{% - \ifnum\the\catcode`#1=0\catcode`#112% - \else \ifnum\the\catcode`#1=1\catcode`#112% - \else \ifnum\the\catcode`#1=2\catcode`#112% - \else \ifnum\the\catcode`#1=6\catcode`#112% - \fi\fi\fi\fi\relax} -\newwrite\tokout -\newread\tokin -\def\rescan#1{% - \ifx\@rescanfile\relax\else - \ifx\@rescanfile\@empty #1{}\else - \immediate\openout\tokout=\@rescanfile - \immediate\write\tokout{{\the#1}\relax}% - \immediate\closeout\tokout - \openin\tokin=\@rescanfile - \read\tokin to\@tempd - \closein\tokin - \expandafter#1\@tempd% - \fi\fi} -\def\@xcomment#1#2{% - \ifx\@preamblecmds\@notprerr - \def\xc@csname{#1}% - \edef\xc@envirlist{#2}% - \ifx\xc@envirlist\@empty \@bsphack \else - \begingroup - \def\@envirsep{}% - \@ifundefined{normal@begin}{\let\normal@begin\begin}{}% - \@ifundefined{normal@end}{\let\normal@end\end}{}% - \def\begin##1{\do@begin{##1}\normal@begin{##1}}% - \def\end##1{\normal@end{##1}\do@end}% - \def\do@begin##1{\@ifundefined{##1}{}{\def\do@end{}}}% - \let\do@end\xc@begin - \fi - \let\next\xc@begin - \else - \expandafter\@temptokena\expandafter{\document\@xcomment{@@@}{#2}}% - \edef\document{\the\@temptokena}% - \let\next\relax - \fi - \next} -\def\end@xcomment{\ifx\xc@envirlist\@empty \@esphack \else \endgroup \fi}% -\def\xc@begin{% - \begingroup - \let\do\xc@makeother - \dospecials - \ifx\xcommentchar\@empty\else - \expandafter\catcode\expandafter`\xcommentchar=14 - \fi - \catcode`\^^M\active - \xcomment@} -\def\xcommentchar{\%} -\begingroup -\catcode`\!=12 -\catcode`\[=12 -\catcode`\]=12 -\catcode`\"=12 -\lccode`\!=`\\ -\lccode`\[=`\{ -\lccode`\]=`\} -\lccode`\"=`\% -\catcode`\~=\active -\lccode`\~=`\^^M -\lowercase{ - \gdef\xcomment@#1~{\xcomment@@#1\@nnil!\@nil} - \gdef\xcomment@@#1!{\xcomment@@@} - \gdef\xcomment@@@#1\@nil{% - \def\@tempa{#1}% - \ifx\@tempa\@empty - \let\next\xcomment@ - \else - \def\next{\xcomment@@#1\@nil}% - \@testtrue - \xc@checkbegin#1\relax begin[]\relax\relax - \if@test - \xc@checkend#1\relax end[]\relax\relax - \if@test - \xc@checkinput#1\relax input[]\relax\relax - \if@test - \xc@checkinclude#1\relax include[]\relax\relax - \if@test - \xc@checkendinput#1\relax endinputss\relax\relax - \fi\fi\fi\fi\fi - \next} - \gdef\xc@checkbegin#1begin[#2]#3\relax#4\relax{% - \def\@tempa{#1}% - \ifx\@tempa\@empty - \def\@tempa{#2}% - \@for\@tempb:=\xc@envirlist\do{% - \ifx\@tempa\@tempb\def\next{\xc@end{#2}#3\@nil}\fi}% - \fi} - \gdef\xc@checkend#1end[#2]#3\relax#4\relax{% - \def\@tempa{#1}% - \ifx\@tempa\@empty - \@testfalse - \def\@tempa{#2}\def\@tempb{document}% - \ifx\@tempa\@tempb - \def\next{\endgroup\end@xcomment\end{document}}% - \else - \ifx\@tempa\xc@csname - \def\next{\end@@xcomment{#2}#3\@nil}% - \fi\fi\fi} - \gdef\xc@checkinput#1input[#2]#3\relax#4\relax{% - \def\@tempa{#1}% - \ifx\@tempa\@empty - \def\next{\expandafter\xcomment@\@@input #2 \xcomment@@#3\@nil}% - \@testfalse - \fi} - \gdef\xc@checkendinput#1endinput#2#3\relax#4\relax{% - \def\@tempa{#1}% - \ifx\@tempa\@empty\ifcat\noexpand#2a\relax\else - \let\next\endinput - \fi\fi} - \gdef\xc@checkinclude#1include[#2]#3\relax#4\relax{% - \def\@tempa{#1}% - \ifx\@tempa\@empty - \def\next{% - \global\let\xc@savedinput\@@input - \def\@@input{% - \global\let\@@input\xc@savedinput - \expandafter\xcomment@\@@input}% - \include{#2}% - \global\let\@@input\xc@savedinput - \xcomment@@#3\@nil}% - \@testfalse - \fi} - \gdef\end@@xcomment#1#2\@nnil!\@nil{% - \endgroup - \toks@{#2 }\rescan{\toks@}% - \edef\next{\noexpand\end@xcomment\noexpand\end{#1}\the\toks@}% - \next}% - \gdef\xc@end#1#2\@nnil!\@nil{% - \endgroup - \@envirsep \let\@envirsep\envirsep - \toks@{#2 }\rescan{\toks@}% - \edef\next{\noexpand\normal@begin{#1}\the\toks@}% - \next}% - }% END OF LOWERCASE -\endgroup -\endinput -%% -%% End of file `xcomment.sty'. -- cgit v1.2.3