Mercurial > emacs
view etc/calccard.tex @ 65161:451eb4a93201
* progmodes/antlr-mode.el (antlr-default): Fix defface form.
(antlr-font-lock-additional-keywords): Fix reference to
`antlr-font-lock-literal-regexp' erroneously changed during the
mass face rename.
(antlr-run-tool): Use `compilation-start'.
author | Romain Francoise <romain@orebokech.com> |
---|---|
date | Fri, 26 Aug 2005 18:03:46 +0000 |
parents | f05a048483cc |
children | 27e3e349108d 2d92f5c9d6ae |
line wrap: on
line source
% Reference Card for GNU Emacs Calc 2.02 %**start of header \newcount\columnsperpage % The format for this file is adapted from the GNU Emacs reference % card version 1.9, by Stephen Gildea. % This file can be printed with 1, 2, or 3 columns per page (see below). % Specify how many you want here. Nothing else needs to be changed. \columnsperpage=3 % Typical command to format: tex calccard.tex % Typical command to print (3 cols): dvips -t landscape calccard.dvi % Copyright (C) 1987, 1992, 2001, 2002, 2003, 2004, % 2005 Free Software Foundation, Inc. % This file is part of GNU Emacs. % GNU Emacs is free software; you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation; either version 1, or (at your option) % any later version. % GNU Emacs is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % You should have received a copy of the GNU General Public License % along with GNU Emacs; see the file COPYING. If not, write to % the Free Software Foundation, 51 Franklin Street, Fifth Floor, % Boston, MA 02110-1301, USA. % This file is intended to be processed by plain TeX (TeX82). % % The final reference card has six columns, three on each side. % This file can be used to produce it in any of three ways: % 1 column per page % produces six separate pages, each of which needs to be reduced to 80%. % This gives the best resolution. % 2 columns per page % produces three already-reduced pages. % You will still need to cut and paste. % 3 columns per page % produces two pages which must be printed sideways to make a % ready-to-use 8.5 x 11 inch reference card. % For this you need a dvi device driver that can print sideways. % Which mode to use is controlled by setting \columnsperpage above. % % Author (Calc reference card): % Dave Gillespie % UUCP: uunet!synaptx!daveg % Internet: daveg@synaptics.com % % Author (refcard.tex format): % Stephen Gildea % UUCP: mit-erl!gildea % Internet: gildea@stop.mail-abuse.org \def\versionnumber{2.03} \def\versiondate{November 2001} \def\year{2005} \def\version{v\versionnumber} \def\shortcopyrightnotice{\vskip 1ex plus 2 fill \centerline{\small \copyright\ \year\ Free Software Foundation, Inc. Permissions on back. v\versionnumber}} \def\copyrightnotice{ \vskip 1ex plus 2 fill\begingroup\small \centerline{Copyright \copyright\ \year\ Free Software Foundation, Inc.} \centerline{designed by Dave Gillespie and Stephen Gildea, \version} \centerline{for GNU Emacs Calc version \versionnumber\ (\versiondate)} Permission is granted to make and distribute copies of this card provided the copyright notice and this permission notice are preserved on all copies. For copies of the GNU Emacs Calc manual, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. \endgroup} % make \bye not \outer so that the \def\bye in the \else clause below % can be scanned without complaint. \def\bye{\par\vfill\supereject\end} \newdimen\intercolumnskip \newbox\columna \newbox\columnb \def\ncolumns{\the\columnsperpage} \message{[\ncolumns\space column\if 1\ncolumns\else s\fi\space per page]} \def\scaledmag#1{ scaled \magstep #1} % This multi-way format was designed by Stephen Gildea % October 1986. \if 1\ncolumns \hsize 4in \vsize 10in \voffset -.7in \font\titlefont=\fontname\tenbf \scaledmag3 \font\headingfont=\fontname\tenbf \scaledmag2 \font\smallfont=\fontname\sevenrm \font\smallsy=\fontname\sevensy \footline{\hss\folio} \def\makefootline{\baselineskip10pt\hsize6.5in\line{\the\footline}} \else \hsize 3.2in \vsize 7.95in \hoffset -.75in \voffset -.745in \font\titlefont=cmbx10 \scaledmag2 \font\headingfont=cmbx10 \scaledmag1 \font\smallfont=cmr6 \font\smallsy=cmsy6 \font\eightrm=cmr8 \font\eightbf=cmbx8 \font\eightit=cmti8 \font\eighttt=cmtt8 \font\eightsy=cmsy8 \textfont0=\eightrm \textfont2=\eightsy \def\rm{\eightrm} \def\bf{\eightbf} \def\it{\eightit} \def\tt{\eighttt} \normalbaselineskip=.8\normalbaselineskip \normallineskip=.8\normallineskip \normallineskiplimit=.8\normallineskiplimit \normalbaselines\rm %make definitions take effect \if 2\ncolumns \let\maxcolumn=b \footline{\hss\rm\folio\hss} \def\makefootline{\vskip 2in \hsize=6.86in\line{\the\footline}} \else \if 3\ncolumns \let\maxcolumn=c \nopagenumbers \else \errhelp{You must set \columnsperpage equal to 1, 2, or 3.} \errmessage{Illegal number of columns per page} \fi\fi \intercolumnskip=.46in \def\abc{a} \output={% % This next line is useful when designing the layout. %\immediate\write16{Column \folio\abc\space starts with \firstmark} \if \maxcolumn\abc \multicolumnformat \global\def\abc{a} \else\if a\abc \global\setbox\columna\columnbox \global\def\abc{b} %% in case we never use \columnb (two-column mode) \global\setbox\columnb\hbox to -\intercolumnskip{} \else \global\setbox\columnb\columnbox \global\def\abc{c}\fi\fi} \def\multicolumnformat{\shipout\vbox{\makeheadline \hbox{\box\columna\hskip\intercolumnskip \box\columnb\hskip\intercolumnskip\columnbox} \makefootline}\advancepageno} \def\columnbox{\leftline{\pagebody}} \def\bye{\par\vfill\supereject \if a\abc \else\null\vfill\eject\fi \if a\abc \else\null\vfill\eject\fi \end} \fi % we won't be using math mode much, so redefine some of the characters % we might want to talk about \catcode`\^=12 \catcode`\_=12 \chardef\\=`\\ \chardef\{=`\{ \chardef\}=`\} \hyphenation{mini-buf-fer} \parindent 0pt \parskip 1ex plus .5ex minus .5ex \def\small{\smallfont\textfont2=\smallsy\baselineskip=.8\baselineskip} \outer\def\newcolumn{\vfill\eject} \outer\def\title#1{{\titlefont\centerline{#1}}\vskip 1ex plus .5ex} \outer\def\section#1{\par\filbreak \vskip 3ex plus 2ex minus 2ex {\headingfont #1}\mark{#1}% \vskip 2ex plus 1ex minus 1.5ex} \newdimen\keyindent \def\beginindentedkeys{\keyindent=1em} \def\endindentedkeys{\keyindent=0em} \endindentedkeys \def\paralign{\vskip\parskip\halign} \def\<#1>{$\langle${\rm #1}$\rangle$} \def\kbd#1{{\tt#1}\null} %\null so not an abbrev even if period follows \def\beginexample{\par\leavevmode\begingroup \obeylines\obeyspaces\parskip0pt\tt} {\obeyspaces\global\let =\ } \def\endexample{\endgroup} \def\key#1#2{\leavevmode\hbox to \hsize{\vtop {\hsize=.75\hsize\rightskip=1em \hskip\keyindent\relax#1}\kbd{#2}\hfil}} \newbox\metaxbox \setbox\metaxbox\hbox{\kbd{M-x }} \newdimen\metaxwidth \metaxwidth=\wd\metaxbox \def\metax#1#2{\leavevmode\hbox to \hsize{\hbox to .75\hsize {\hskip\keyindent\relax#1\hfil}% \hskip -\metaxwidth minus 1fil \kbd{#2}\hfil}} \def\threecol#1#2#3{\hskip\keyindent\relax#1\hfil&\kbd{#2}\quad &\kbd{#3}\quad\cr} % % Calc-specific commands here: % \let\^=^ \let\_=_ \catcode`\^=7 \catcode`\_=8 % Redefine to make spaces a bit smaller \let\wkbd=\kbd \def\kbd#1{{\spaceskip=.37em\tt#1}\null} \def\wkey#1#2{\leavevmode\hbox to \hsize{\vtop {\hsize=.75\hsize\rightskip=1em \hskip\keyindent\relax#1}\wkbd{#2}\hfil}} \def\wthreecol#1#2#3{\hskip\keyindent\relax#1\hfil&\wkbd{#2}\quad &\wkbd{#3}\quad\cr} \def\stkkey#1#2#3#4{\par\line{\hskip1em\rlap{\kbd{#1}}\hskip4.5em% \rlap{{#2}}\hskip7.5em\rlap{{#3}}\hskip7.5em\rlap{{#4}}\hfill}\par} \def\S#1{$S_{\scriptscriptstyle #1}$} \def\swap{$\leftrightarrow$} \def\mhash{M-\#\ } \def\,{{\rm ,\hskip.55em}\ignorespaces} \def\lesssectionskip{\vskip-1.5ex} \def\iline#1{\par\line{\hskip1em\relax #1\hfill}\par} \if 1\ncolumns \else \font\eighti=cmmi8 \textfont1=\eighti \fi %**end of header % Column 1 \title{GNU Calc Reference Card} \centerline{(for version \versionnumber\ of \versiondate)} \section{Starting and Stopping} \wkey{start/stop standard Calc}{\mhash c} \wkey{start/stop X keypad Calc}{\mhash k} \wkey{\quad start/stop either: \kbd{\mhash \#} or \kbd{\mhash \mhash}}{} \wkey{stop standard Calc}{q} \wkey{Calc tutorial}{\mhash t} \wkey{run Calc in other window}{\mhash o} \wkey{quick calculation in minibuffer}{\mhash q} \section{Getting Help} \lesssectionskip The \kbd{h} prefix key is Calc's analogue of \kbd{C-h} in Emacs. \key{quick summary of keys}{?} \key{describe key briefly}{h c} \key{describe key fully}{h k} \key{describe function or command}{h f} \key{read on-line manual}{h i{\rm\enskip or\enskip}\mhash i} \key{read full Calc summary}{h s{\rm\enskip or\enskip}\mhash s} \section{Error Recovery} \key{abort command in progress}{C-g} \key{display recent error messages}{w} \key{undo last operation}{U} \key{redo last operation}{D} \key{recall last arguments}{M-RET} \key{edit top of stack}{`} \wkey{reset Calc to default state}{\mhash 0 {\rm (zero)}} \section{Transferring Data} \wkey{grab region from a buffer}{\mhash g} \wkey{grab rectangle from a buffer}{\mhash r} \wkey{grab rectangle, summing columns}{\mhash :} \wkey{grab rectangle, summing rows}{\mhash \_} \wkey{yank data to a buffer}{\mhash y} Also, try \kbd{C-k}/\kbd{C-y} or X cut and paste. \section{Examples} \lesssectionskip In RPN, enter numbers first, separated by \kbd{RET} if necessary, then type the operator. To enter a calculation in algebraic form, press the apostrophe first. \beginindentedkeys \paralign to \hsize{#\tabskip=10pt plus 1 fil&#\tabskip=0pt\hfil\quad&#\hfil\cr \wthreecol{ }{{\bf RPN style:}}{{\bf algebraic style:}} \wthreecol{Example:}{2 RET 3 +}{' 2+3 RET} \wthreecol{Example:}{2 RET 3 + 4 *}{' (2+3)*4 RET} \wthreecol{Example:}{2 RET 3 RET 4 + *}{' 2*(3+4) RET} \wthreecol{Example:}{3 RET 6 + Q 3 \^}{' sqrt(3+6)\^3 RET} \wthreecol{Example:}{P 3 / n S}{' sin(-pi/3) RET =} } \endindentedkeys \shortcopyrightnotice % Column 2 \section{Arithmetic} \key{add, subtract, multiply, divide}{+\, -\, *\, /} \key{raise to a power, {\it n\/}th root}{\^\, I \^} \key{change sign}{n} \key{reciprocal $1/x$}{\&} \key{square root $\sqrt x$}{Q} \key{set precision}{p} \key{round off last two digits}{c 2} \key{convert to fraction, float}{c F\, c f} \wkey{enter using algebraic notation}{' 2+3*4} \wkey{refer to previous result}{' 3*\$\^2} \wkey{refer to higher stack entries}{' \$1*\$2\^2} \key{finish alg entry without evaluating}{LFD} \key{set mode where alg entry used by default}{m a} \section{Stack Commands} \lesssectionskip Here \S{n} is the $n$th stack entry, and $N$ is the size of the stack. \vskip.5ex \stkkey{\it key}{\it no prefix}{\it prefix $n$}{\it prefix $-n$} \stkkey{RET}{copy \S{1}}{copy \S{1..n}}{copy \S{n}} \stkkey{LFD}{copy \S{2}}{copy \S{n}}{copy \S{1..n}} \stkkey{DEL}{delete \S{1}}{delete \S{1..n}}{delete \S{n}} \stkkey{M-DEL}{delete \S{2}}{delete \S{n}}{delete \S{1..n}} \stkkey{TAB}{swap \S{1}\swap\S{2}}{roll \S{1} to \S{n}}{roll \S{n} to \S{N}} \stkkey{M-TAB}{roll \S{3} to \S{1}}{roll \S{n} to \S{1}}{roll \S{N} to \S{n}} With a 0 prefix, these copy, delete, or reverse \S{1..N}. \section{Display} \wkey{scroll horizontally, vertically}{< >\, \{ \}} \key{home cursor}{o} \key{line numbers on/off}{d l} \key{trail display on/off}{t d} \key{scientific notation}{d s} \key{fixed-point notation}{d f} \key{floating-point (normal) notation}{d n} \key{group digits with commas}{d g} For display mode commands, \kbd{H} prefix prevents screen redraw and \kbd{I} prefix temporarily redraws top of stack. \section{Notations} \wkey{scientific notation}{6.02e23} \wkey{minus sign in numeric entry}{\_23{\rm\quad or\quad}23 n} \wkey{fractions}{3:4} \wkey{complex numbers}{({\it x}, {\it y})} \wkey{polar complex numbers}{({\it r}; $\theta$)} \wkey{vectors (commas optional)}{[1, 2, 3]} \wkey{matrices (or nested vectors)}{[1, 2; 3, 4]} \wkey{error forms (\kbd{p} key)}{100 +/- 0.5} \wkey{interval forms}{[2 ..\ 5)} \wkey{modulo forms (\kbd{M} key)}{6 mod 24} \wkey{HMS forms}{5@ 30' 0"} \wkey{date forms}{<Jul 4, 1992>} \wkey{infinity, indeterminate}{inf\, nan} % Column 3 \section{Scientific Functions} \key{ln, log${}_{\scriptscriptstyle 10}$, log${}_b$}{L\, H L\, B} \key{exponential {\it e}${}^x$, 10${}^x$}{E\, H E} \key{sin, cos, tan}{S\, C\, T} \key{arcsin, arccos, arctan}{I S\, I C\, I T} \key{inverse, hyperbolic prefix keys}{I\, H} \key{two-argument arctan}{f T} \key{degrees, radians modes}{m d\, m r} \key{pi ($\pi$)}{P} \key{factorial, double factorial}{!\, k d} \key{combinations, permutations}{k c\, H k c} \key{prime factorization}{k f} \key{next prime, previous prime}{k n\, I k n} \key{GCD, LCM}{k g\, k l} \key{random number, shuffle}{k r\, k h} \key{minimum, maximum}{f n\, f x} \key{error functions erf, erfc}{f e\, I f e} \key{gamma, beta functions}{f g\, f b} \key{incomplete gamma, beta functions}{f G\, f B} \key{Bessel $J_\nu$, $Y_\nu$ functions}{f j\, f y} \key{complex magnitude, arg, conjugate}{A\, G\, J} \key{real, imaginary parts}{f r\, f i} \key{convert polar/rectangular}{c p} \section{Financial Functions} \key{enter percentage}{M-\%} \key{convert to percentage}{c \%} \key{percentage change}{b \%} \key{present value}{b P} \key{future value}{b F} \key{rate of return}{b T} \key{number of payments}{b \#} \key{size of payments}{b M} \key{net present value, int.\ rate of return}{b N\, b I} Above computations assume payments at end of period. Use \kbd{I} prefix for beginning of period, or \kbd{H} for a lump sum investment. \key{straight-line depreciation}{b S} \key{sum-of-years'-digits}{b Y} \key{double declining balance}{b D} \section{Units} \wkey{enter with units}{' 55 mi/hr} \key{convert to new units, base units}{u c\, u b} \key{convert temperature units}{u t} \key{simplify units expression}{u s} \key{view units table}{u v} Common units: \iline{distance: \kbd{m}, \kbd{cm}, \kbd{mm}, \kbd{km}; \kbd{in}, \kbd{ft}, \kbd{mi}, \kbd{mfi}; \kbd{point}, \kbd{lyr}} \iline{volume: \kbd{l} or \kbd{L}, \kbd{ml}; \kbd{gal}, \kbd{qt}, \kbd{pt}, \kbd{cup}, \kbd{floz}, \kbd{tbsp}, \kbd{tsp}} \iline{mass: \kbd{g}, \kbd{mg}, \kbd{kg}, \kbd{t}; \kbd{lb}, \kbd{oz}, \kbd{ton}} \iline{time: \kbd{s} or \kbd{sec}, \kbd{ms}, \kbd{us}, \kbd{ns}, \kbd{min}, \kbd{hr}, \kbd{day}, \kbd{wk}} \iline{temperature: \kbd{degC}, \kbd{degF}, \kbd{K}} % Column 4 \newcolumn \title{GNU Calc Reference Card} \section{Programmer's Functions} \key{binary, octal, hex display}{d 2\, d 8\, d 6} \key{decimal, other radix display}{d 0\, d r} \key{display leading zeros}{d z} \key{entering non-decimal numbers}{16\#7FFF} \key{binary word size}{b w} \key{binary AND, OR, XOR}{b a\, b o\, b x} \key{binary DIFF, NOT}{b d\, b n} \key{left shift}{b l} \key{logical right shift}{b r} \key{arithmetic right shift}{b R} \key{integer quotient, remainder}{\\\, \%} \key{integer square root, logarithm}{f Q\, f I} \key{floor, ceiling, round to integer}{F\, I F\, R} \section{Variables} \lesssectionskip Variable names are single digits or whole words. \key{store to variable}{s t} \key{store and keep on stack}{s s} \key{recall from variable}{s r} \key{shorthands for digit variables}{t {\it n}\, s {\it n}\, r {\it n}} \key{unstore, exchange variable}{s u\, s x} \key{edit variable}{s e} \section{Vector Operations} \key{vector of 1, 2, $\ldots\mskip\thinmuskip$, {\it n}}{v x {\it n}} \key{vector of {\it n} counts from {\it a} by {\it b}}{C-u v x} \key{vector of copies of a value}{v b} \key{concatenate into vector}{|} \key{pack many stack items into vector}{v p} \key{unpack vector or object}{v u} \key{length of vector (list)}{v l} \key{reverse vector}{v v} \key{sort, grade vector}{V S\, V G} \key{histogram of vector data}{V H} \key{extract vector element}{v r} \key{matrix determinant, inverse}{V D\, \&} \key{matrix transpose, trace}{v t\, V T} \key{cross, dot products}{V C\, *} \key{identity matrix}{v i} \key{extract matrix row, column}{v r\, v c} \key{intersection, union, diff of sets}{V \^\, V V\, V -} \key{cardinality of set}{V \#} \key{add vectors elementwise (i.e., map \kbd{+})}{V M +} \key{sum elements in vector (i.e., reduce \kbd{+})}{V R +} \key{sum rows in matrix}{V R \_ +} \key{sum columns in matrix}{V R : +} \key{sum elements, accumulate results}{V U +} % Column 5 \section{Algebra} \wkey{enter an algebraic formula}{' 2x+3y\^2} \wkey{enter an equation}{' 2x\^2=18} \key{symbolic (vs.\ numeric) mode}{m s} \key{fractions (vs.\ float) mode}{m f} \key{suppress evaluation of formulas}{m O} \key{simplify formulas automatically}{m S} \key{return to default evaluation rules}{m D} \key{``Big'' display mode}{d B} \key{C, Pascal, FORTRAN modes}{d C\, d P\, d F} \key{\TeX, eqn modes}{d T\, d E} \key{Unformatted mode}{d U} \key{Normal language mode}{d N} \key{simplify formula}{a s} \key{put formula into rational form}{a n} \key{evaluate variables in formula}{=} \key{evaluate numerically}{N} \key{let variable equal a value in formula}{s l {\it x\/}={\it val}} \key{declare properties of variable}{s d} \iline{Common decls: \kbd{pos}, \kbd{int}, \kbd{real}, \kbd{scalar}, \kbd{[{\it a}..{\it b}\hskip.1em]}.} \key{expand, collect terms}{a x\, a c} \key{factor, partial fractions}{a f\, a a} \key{polynomial quotient, remainder, GCD}{a \\\, a \%\, a g} \key{derivative, integral}{a d\, a i} \key{taylor series}{a t} \key{principal solution to equation(s)}{a S} \key{list of solutions}{a P} \key{generic solution}{H a S} \key{apply function to both sides of eqn}{a M} \key{rewrite formula}{a r} \iline{Example: \wkbd{a r a*b + a*c := a*(b+c)}} \iline{Example: \wkbd{a r sin(x)\^2 := 1-cos(x)\^2}} \iline{Example: \wkbd{a r cos(n pi) := 1 ::\ integer(n) ::\ n\%2 = 0}} \iline{Example: \wkbd{a r [f(0) := 1, f(n) := n f(n-1) ::\ n > 0]}} \iline{Put rules in \kbd{EvalRules} to have them apply automatically.} \iline{Put rules in \kbd{AlgSimpRules} to apply during \kbd{a s} command.} \iline{Common markers: \kbd{opt}, \kbd{plain}, \kbd{quote}, \kbd{eval}, \kbd{let}, \kbd{remember}.} \section{Numerical Computations} \key{sum formula over a range}{a +} \key{product of formula over a range}{a *} \key{tabulate formula over a range}{a T} \key{integrate numerically over a range}{a I} \key{find zero of formula or equation}{a R} \key{find local min, max of formula}{a N\, a X} \key{fit data to line or curve}{a F} \key{mean of data in vector or variable}{u M} \key{median of data}{H u M} \key{geometric mean of data}{u G} \key{sum, product of data}{u +\, u *} \key{minimum, maximum of data}{u N\, u X} \key{sample, pop.\ standard deviation}{u S\, I u S} % Column 6 \section{Selections} \key{select subformula under cursor}{j s} \key{select {\it n\/}th subformula}{j {\it n}} \key{select more}{j m} \key{unselect this, all formulas}{j u\, j c} \key{copy indicated subformula}{j RET} \key{delete indicated subformula}{j DEL} \key{commute selected terms}{j C} \key{commute term leftward, rightward}{j L\, j R} \key{distribute, merge selection}{j D\, j M} \key{isolate selected term in equation}{j I} \key{negate, invert term in context}{j N\, j \&} \key{rewrite selected term}{j r} \section{Graphics} \key{graph function or data}{g f} \key{graph 3D function or data}{g F} \key{replot current graph}{g p} \key{print current graph}{g P} \key{add curve to graph}{g a} \key{set number of data points}{g N} \key{set line, point styles}{g s\, g S} \key{set log vs.\ linear {\it x, y} axis}{g l\, g L} \key{set range for {\it x, y} axis}{g r\, g R} \key{close graphics window}{g q} \section{Programming} \key{begin, end recording a macro}{C-x (\, C-x )} \key{replay keyboard macro}{X} \wkey{read region as written-out macro}{\mhash m} \key{if, else, endif}{Z [\, Z :\, Z ]} \key{equal to, less than, member of}{a =\, a <\, a \{} \key{repeat {\it n} times, break from loop}{Z <\, Z >\, Z /} \key{``for'' loop: start, end; body, step}{Z (\, Z )} \key{save, restore mode settings}{Z `\, Z '} \key{display message during macro}{Z =} \key{query user during macro}{Z \#} \key{put finished macro on a key}{Z K} \key{define function with formula}{Z F} \key{edit definition}{Z E} \key{record user-defined command permanently}{Z P} \key{record variable value permanently}{s p} \key{record mode settings permanently}{m m} \copyrightnotice \bye % Local variables: % compile-command: "tex calccard" % End: % arch-tag: a2764f34-ec23-4083-bd5c-53f9e70a5da9