Age | Commit message (Collapse) | Author | Files | Lines |
|
|
|
|
|
|
|
|
|
|
|
|
|
Consistently use $InputStream and $OutputStream for I/O.
* interp/c-util.boot: Likewise.
* interp/comp.lisp: Likewise.
* interp/compat.boot: Likewise.
* interp/debug.lisp: Likewise.
* interp/def.lisp: Likewise.
* interp/g-error.boot: Likewise.
* interp/i-toplev.boot: Likewise.
* interp/int-top.boot: Likewise.
* interp/intfile.boot: Likewise.
* interp/lisplib.boot: Likewise.
* interp/macros.lisp: Likewise.
* interp/metalex.lisp: Likewise.
* interp/msgdb.boot: Likewise.
* interp/patches.lisp: Likewise.
* interp/preparse.lisp: Likewise.
* interp/server.boot: Likewise.
* interp/spad-parser.boot: Likewise.
* interp/spad.lisp: Likewise.
* interp/sys-globals.boot: Likewise.
* interp/sys-macros.lisp: Likewise.
* interp/sys-os.boot: Likewise.
* interp/unlisp.lisp: Likewise.
* interp/vmlisp.lisp: Likewise.
* interp/Makefile.pamphlet (bootlex.$(FASLEXT)): Require
sys-globals.$(FASLEXT) too.
(vmlisp.$(FASLEXT)): Likewise.
|
|
(BPINAME): Tidy.
* interp/slam.boot (reportFunctionCompilation): Tidy.
* interp/daase.lisp: Don't use anachronistic SET.
* interp/debug.lisp: Likewise.
* interp/br-saturn.boot: Substitute GENSYM for GENTEMP.
* interp/fortcall.boot: Likewise.
* interp/ht-util.boot: Likewise.
* interp/pf2sex.boot: Likewise.
* interp/server.boot: Likewise.
* interp/buildom.boot (UnionEqual): Tidy.
(coerceUn2E): Likewise.
* interp/boot-pkg.lisp (define-function): Define here.
* interp/Makefile.pamphlet (diagnostics.$(FASLEXT)): Tidy.
(hash.$(FASLEXT)): Likewise.
(vmlisp.$(FASLEXT)): Likewise.
* interp/diagnostics.boot: Import "types".
* interp/hash.lisp: Import "types" instead of "vmlisp".
* interp/i-output.boot ($algebraOutput): Move to sys-globals.boot.
(ERROROUTSTREAM): Likewise.
(ERRORINSTREAM): Likewise.
* interp/macros.lisp ($algebraOutputStream): Don't set here.
* interp/patches.lisp ($algebraOutputStream): Don't set here.
($texOutputStream): Likewise.
($fortranOutputStream): Likewise.
($texOutputStream): Likewise.
($formulaOutputStream): Likewise.
|
|
|
|
(MAKE-OUTSTREAM): Supersede existing files.
* interp/template.boot (makeTemplate): Use newDomainShell instead
of GETREFV.
(extendVectorSize): Likewise.
(mkSigPredVectors): Likewise.
(list2LongerVec): Likewise.
(measure): Remove.
(measureCommon): Likewise.
* interp/sys-utility.boot (loadNativeModule): New.
* interp/sys-os.boot: Import "cfuns" and "sockio".
(runProgram): New.
* interp/sys-globals.boot (/SOURCEFILES): Define here.
(/SPACELIST): Likewise.
* interp/sys-driver.boot ($OpenAxiomCoreModuleLoaded): New global
variable.
(AxiomCore::%sysInit): Load libopen-axiom-core if necessary.
($defaultMsgDatabaseName): Define here.
* interp/spad.lisp (|New,ENTRY,1|): Tidy.
* interp/sockio.lisp: Move import declarations to sys-os.boot.
Remove unused codes.
* interp/server.boot (serverReadLine): Use coreQuit instead of BYE.
* interp/pspad1.boot (formatMDEF): Tidy.
* interp/pspad2.boot (formatIf1): Tidy.
* interp/patches.lisp: Import "sys-driver". Remove
$CURRENT-DIRECTORY.
* interp/nruncomp.boot (buildFunctor): Use newDomainShell instead
of GETREFV.
* interp/nrunopt.boot (makeDomainTemplate): Likewise.
* interp/package.boot (processFunctorOrPackage): Likewise.
* interp/nlib.lisp (rdefiostream): Tidy.
* interp/monitor.lisp (monitor-autoload): Define when GCL.
* interp/interop.boot (oldAxiomCategoryDevaluate): Tidy.
* interp/i-toplev.boot (start): Don't set $CURRENT-DIRECTORY.
* interp/i-syscmd.boot (close): Use newDomainShell.
(leaveScratchpad): Use coreQuit instead of BYE.
(compileAsharpArchiveCmd): Use GET-CURRENT-DIRECTORY.
* interp/g-util.boot (newDomainShell): Define.
* interp/functor.boot (NewbFVectorCopy): Use newDomainShell.
* interp/daase.lisp (asharp): Use runProgram.
* interp/cfuns.lisp: Remove unused codes.
(directoryp): Move import declaration to sys-os.bot.
(writeablep): Likewise.
* interp/buildom.boot (Record0): Use newDomainShell instead of
GETREFV.
(coerceRe2E): Likewise.
(Union): Likewise.
(Mapping): Likewise.
(Enumeration): Likewise.
* interp/category.boot (mkCategory): Likewise.
* interp/Makefile.pamphlet (patches.$(FASLEXT)): Require
sys-driver.$(FASLEXT).
(sys-os.$(FASLEXT)): Require cfuns.$(FASLEXT), sockio.$(FASLEXT).
* algebra/view2D.spad.pamphlet: Use $ViewportServer instead of
VIEWPORTSERVER. Use sockSendInt instead of SOCK-SEND-INT.
Use sockSendFloat instead of SEND-SEND-FLOAT. Use sockSendString
instead of SOCK-SEND-STRING. Use sockGetInt instead of
SOCK-GET-INT. Use sockGetFloat instead of SOCK-SEND-FLOAT.
* algebra/view3D.spad.pamphlet: Likewise.
* interp/util.lisp (fe): Remove.
(fc): Likewise.
(interp-make-directory): Simplify.
(OLD-BOOT::BOOT): Don't declare *PRINT-PRETTY* and *PRINT-LENGTH*
special.
|
|
* interp/spaderror.lisp (|$quitTag|): Define as constant.
(|$numericFailure|): Likewise.
* interp/spad.lisp: Import "postpar" and "debug".
($): Remove toplevel assignment.
(|traceComp|): Tidy.
(/FLAG): Remove.
(*PROMPT*): Remove.
(|New,ENTRY,1|): Don't declare it. Tidy.
(|New,ENTRY,2|): Fix typo.
* interp/sfsfun-l.lisp (rbesselj): Remove extraneous right
parenthesis.
(rbesseli): Likewise.
* interp/patches.lisp: Import "sockio" instead of "debug"
(|$useInternalHistoryTable|): Don't define here.
(user::start): Remove.
(/RF-1): Declare ECHO-META special.
(READSPADEXPR): Declare IN-STREAM special.
(|$ViewportProcessToWatch|): Declare.
(echo-meta): Don't set here.
* interp/packtran.boot (rePackageTran): Tidy.
* interp/nspadaux.lisp (|$underscoreChar|): Define.
(|$markChoices|): Likewise.
(|$convert2NewCompiler|): Likewise.
(|$AnalyzeOnly|): Likewise.
(|$categoryPart|): Likewise.
(|$insideCAPSULE|): Likewise.
(|$insideEXPORTS|): Likewise.
(|$originalSignature|): Likewise.
(|$insideDEF|): Likewise.
(|$insideTypeExpression|): Likewise.
(|$spadTightList|): Likewise.
(|$PerCentVariableList|): Likewise.
* interp/nrunopt.boot (augmentPredCode): Fix typo.
* interp/nlib.lisp (*LISP-BIN-FILETYPE*): Remove.
(recompile-lib-file-if-necessary): Use $faslType. Unconditionally
define.
* interp/lisplib.boot (compDefineLisplib): Tidy.
* interp/interop.boot (SExprToDName): Tidy.
(oldAxiomPreCategoryDevaluate): Likewise.
(hashNewLookupInCategories): Likewise.
* interp/g-util.boot (get): Adjust return type.
(get0): Likewise.
(get1): Likewise.
(get2): Likewise.
* interp/foam_l.lisp: Tidy.
* interp/define.boot (maybeInsertViewMorphisms): Fix typo.
* interp/debug.lisp (/breakcondition): Declare.
* interp/sys-utility.boot (getSystemModulePath): New.
* interp/daase.lisp (|with|): Remove
(|library|): Move i-syscmd.boot
(initial-getdatabase): Use getSystemModulePath.
(getdatabase): Likewise.
(addoperations): Don't reference package LISP.
(localdatabase): Likewise.
(write-interpdb): Don't declare *print-prett* special.
(write-browsedb): Likewise.
(write-categorydb): Likewise.
|
|
* interp/apply.boot: Adjust signature declarations.
* interp/compiler.boot: Likewise.
|
|
(SET-RESTART-HOOK): Use restart.
* interp/Makefile.pamphlet (${SAVESYS}): Refer restart, not RESTART.
(${AXIOMSYS}): Likewise.
|
|
|
|
(is_dot_or_dotdot): New.
(oa_unlink): Define.
(oa_rename): Likewise.
(oa_mkdir): Likewise.
* interp/sys-os.boot: New file.
* interp/util.lisp (MAKE-TAGS-FILE): Use changeDirectory.
(MAKELIB): Likewise.
(MAKESPAD): Likewise.
(LIBCHECK): Likewise.
* interp/sys-utility.boot ($ERASE): Define here. Use removeFile.
($REPLACE): Likewise.
(checkMkdir): Define.
* interp/obey.lisp (MAKEDIR): Remove definition.
* interp/nlib.lisp (RDEFIOSTREAM): Use checkMkdir.
(MAKEDIR): Remove.
(RPACKFILE): Use removeFile.
($ERASE): Remove Lisp definition.
($REPLACE): Likewise.
* interp/i-syscmd.boot (cd): Use changeDirectory.
(compileAsharpArchiveCmd): Use mkdir.
(histFileErase): Likewise.
* interp/fortcall.boot (fortCall): Use removeFile.
(invokeNagman): Likewise.
* interp/daase.lisp (|library|): Use changeDirectory.
(LOCALDATABASE): Likewise.
(DaaseName): Use removeFile.
* interp/construc.lisp (mergelibs): Use removeFile.
(mergeall): Use changeDirectory.
* interp/c-doc.boot (docreport): Use removeFile.
* interp/br-search.boot (getTempPath): Likewise.
* interp/br-saturn.boot (dbSort): Likewise.
* interp/br-data.boot (buildLibdb): Likewise
(dbSplitLibdb): Likewise.
(buildGloss): Likewise.
(purgeLocalLibdb): Likewise.
* interp/as.boot (asList): Likewise.
* interp/Makefile.pamphlet (OBJS): Include sys-os.$(FASLEXT).
(sys-os.$(FASLEXT)): New rule.
(sys-utility.$(FASLEXT)): Require sys-os.$(FASLEXT).
* include/cfuns.h (oa_chdir): Declare.
(oa_unlink): Likewise.
(oa_rename): Likewise.
(oad_mkdir): Likewise.
|
|
|
|
* interp/sys-driver.boot (stdStreamIsTerminal): Simplify.
|
|
(char_type): Likewise.
(int_type): Likewise.
(float_type): Likewise.
(double_type): Likewise.
(string_type): Likewise.
(pointer_type): Likewise.
(edit): Use them.
* interp/wi1.boot (ppFull): Tidy. Don't set *PRINT-DEPTH*.
* interp/vmlisp.lisp (gcmsg): Define when SBCL.
* interp/template.boot (measureCommon): Fix thinko.
* interp/sys-utility.boot: Move basic type definition from
g-util.boot to here.
* interp/g-util.boot (augProplistOf): Fix signature declaration.
* interp/daase.lisp: Tidy.
* interp/c-util.boot (displayComp): Remove assignment to
$X,$M,$F.
* interp/boot-pkg.lisp: Tidy.
* interp/axext_l.lisp: Likewise.
* interp/Makefile.pamphlet (makeint.lisp): Call GBC only when GCL.
($(axiom_targetdir)/algebra/exposed.$(FASLEXT)): Tidy.
(patches.$(FASLEXT)): Require debug.$(FASLEXT), g-timer.$(FASLEXT).
(wi2.$(FASLEXT)): Require define.$(FASLEXT).
(spad.$(FASLEXT)): Require postpar.$(FASLEXT), debug.$(FASLEXT).
* boot/translator.boot (genImportDeclaration): Include translation
for SBCL.
* boot/parser.boot (bpMapping): Tidy.
* boot/ast.boot (coreSymbol): New.
(bootSymbol): Likewise.
(bootSymbol): Likewise.
* lisp/core.lisp.in (|$NativeTypeTable|): New. Export.
* algebra/Makefile.pamphlet (COMPILE_LISP): Use $(INTERPSYS).
* algebra/exposed.lsp.pamphlet: Tidy.
|
|
($(axiom_target_libdir)/libspad.la): Likewise.
|
|
|
|
it is always built into libopen-axiom-core.
src/
* include/cfuns.h (findString): Rename from include/cfuns-c.H1.
Make DLL-aware.
* include/open-axiom.h: New.
* include/sockio.h: Make DLL-aware.
* include/bsdsignal.H1: Fold content into include/bsdsignal.h.
Remove.
* lib/bsdsignal.c: Don't include bsdsignal.H1
* lib/fnct_key.c: Likewise.
* lib/sockio-c.c: Likewise.
* lib/Makefile.in (other_SOURCES): Remove.
(other_objects): Likewise.
(pamphlets): Likewise.
(clean-local): Don't remove source files.
(libopen_axiom_core_la_SOURCES): New.
(libopen_axiom_core_la_objects): Likewise.
(stamp): Require $(axiom_target_libdir)/libopen-axiom-core.la too.
* graph/view2D/main2d.c: Likewise.
* clef/edible.c: Likewise.
* graph/view3D/main3d.c: Likewise.
* graph/view3D/testcol.c: Likewise.
* graph/viewman/sselect.c: Likewise.
* graph/viewman/viewman.c: Likewise.
* hyper/htinp.c: Likewise.
* hyper/hyper.c: Likewise.
* hyper/spadbuf.c: Likewise.
* hyper/spadint.c: Likewise.
* sman/session.c: Likewise.
* sman/sman.c: Likewise.
* sman/spadclient.c: Likewise.
|
|
conditionally define as local function. Update cached Lisp
translation.
|
|
|
|
* algebra/sf.spad.pamphlet: Likewise.
* algebra/si.spad.pamphlet: Likewise.
* algebra/fspace.spad.pamphlet: Likewise.
* algebra/ffcat.spad.pamphlet: Likewise.
* algebra/polset.spad.pamphlet: Likewise.
* algebra/fraction.spad.pamphlet: Likewise.
* algebra/triset.spad.pamphlet: Likewise.
* algebra/polycat.spad.pamphlet: Likewise.
|
|
* algebra/sf.spad.pamphlet: Likewise.
* algebra/si.spad.pamphlet: Likewise.
* algebra/fspace.spad.pamphlet: Likewise.
|
|
|
|
|
|
* interp/Makefile.pamphlet: Adjust.
|
|
bootstrapping objects to final algebra directory.
(%.NRLIB/code.$(FASLEXT)): Specify bootstrapping objects location
as option.
|
|
* interp/sys-driver.boot (algebraBootstrapDir): New.
* interp/lisplib.boot (findModule): New.
(loadLib): Use it.
* interp/daase.lisp (localdatabase): Make sure loadable modules
have proper extensions.
* interp/sys-utility.boot (existingFile?): New.
|
|
(parseDollarGreaterEqual): Likewise.
(parseDollarLessEqual): Likewise.
(parseDolloarNotEqual): Likewise.
|
|
* include/addfile.h: Move from hyper.
* include/addfile.H1: Move external declarations into
addfile.h. Remove.
|
|
* include/addfile.H1: Move external declarations into
addfile.h. Remove.
|
|
* clef/edible.c: Don't include useproto.h. Include sockio.h
* graph/view3D/surface3d.c.pamphlet: Likewise.
* graph/viewman/fun2D.c.pamphlet: Likewise.
* graph/viewman/fun3D.c.pamphlet: Likewise.
* graph/viewman/make2D.c.pamphlet: Likewise.
* graph/viewman/make3D.c.pamphlet: Likewise.
* graph/viewman/makeGraph.c.pamphlet: Likewise.
* graph/viewman/sselect.c.pamphlet: Likewise.
* graph/viewman/viewman.c.pamphlet: Likewise.
* graph/viewman/viewman.h: Likewise.
* hyper/ReadBitmap.c: Likewise.
* hyper/addfile.c: Likewise.
* hyper/cond.c: Likewise.
* hyper/debug.c: Likewise.
* hyper/dialog.c: Likewise.
* hyper/display.c: Likewise.
* hyper/event.c: Likewise.
* hyper/ex2ht.c: Likewise.
* hyper/extent1.c: Likewise.
* hyper/extent2.c: Likewise.
* hyper/form-ext.c: Likewise.
* hyper/group.c: Likewise.
* hyper/halloc.c: Likewise.
* hyper/hash.c: Likewise.
* hyper/htadd.c: Likewise.
* hyper/hterror.c: Likewise.
* hyper/htinp.c: Likewise.
* hyper/hyper.c: Likewise.
* hyper/initx.c: Likewise.
* hyper/input.c: Likewise.
* hyper/item.c: Likewise.
* hyper/keyin.c: Likewise.
* hyper/lex.c: Likewise.
* hyper/macro.c: Likewise.
* hyper/mem.c: Likewise.
* hyper/parse-aux.c: Likewise.
* hyper/parse-input.c: Likewise.
* hyper/parse-paste.c: Likewise.
* hyper/parse-types.c: Likewise.
* hyper/parse.c: Likewise.
* hyper/scrollbar.c: Likewise.
* hyper/show-types.c: Likewise.
* hyper/spadbuf.c: Likewise.
* hyper/spadint.c: Likewise.
* hyper/titlebar.c: Likewise.
* lib/sockio-c.c: Likewise.
* sman/session.c: Likewise.
* sman/sman.c: Likewise.
* include/useproto.h: Remove.
|
|
|
|
types.
|
|
value from $(axiom_algebra_bootstrap).
(axiom_algebra_layer_0): Include more categories.
(axiom_algebra_layer_1): Likewise.
(axiom_algebra_layer_2): Likewise.
(axiom_algebra_layer_3): Likewise.
(axiom_algebra_layer_4): Remove some constructors.
(axiom_algebra_layer_5): Likewise.
|
|
instantiations representations in interactive environments.
* interp/i-eval.boot (evaluateFormAsType): New.
(evaluateType): Use it.
(evaluateType1): Tidy.
* interp/i-output.boot (output): Tidy.
* interp/i-object.boot ($genValue): Define here.
* interp/sys-dirver.boot ($verbose): Rename from
$verboseInterpreter.
* interp/i-map.boot (genMapCode): Propagate $verbose renaming.
* interp/slam.boot (compileRecurrenceRelation): Likewise.
|
|
parse form that are not type instantiations.
* interp/i-coerce.boot (coerceInt1): Likewise.
* interp/i-intern.boot (mkAtree3): Likewise.
(collectDefTypesAndPreds): Likewise.
* interp/i-map.boot (args2Tuple): Likewise.
(makePattern): Likewise.
(canMakeTuple): Likewise.
(makeRuleForm): Likewise.
(numArgs): Likewise.
(combineMapParts): Likewise.
(mkMapPred): Likewise.
(findLocalVars1): Likewise.
* interp/i-output.boot (outputTran): Likewise.
* interp/i-spec1.boot ($specialOps): Likewise.
(evalUntargetedADEF): Likewise.
(upDeclare): Likewise.
(declare): Likewise.
* interp/i-spec2.boot (upDollarTuple): Likewise.
(upLET): Likewise.
(isTupleForm): Remove.
(uptuple): Rename from upTuple.
(upLETWithFormOnLhs): Use "tuple" for parse forms that are not
type instantiations.
* interp/i-syscmd.boot (displayMacro): Likewise.
* interp/pf2atree.boot (pf2Atree1): Likewise.
* interp/pf2sex.boot (pf2Sex1): Likewise.
(pfApplication2Sex): Likewise.
(pfCollectArgTran): Likewise.
* interp/ptrees.boot (pfTuple): Likewise.
(pfTuple?): Likewise.
|
|
Tuple coercion behind the scene.
* interp/i-output.boot (output): Likewise.
|
|
(|resetErrorCount|): New export function.
* interp/vmlisp.lisp (opOf): Remove macro definition.
* interp/msg.boot (setMsgCatlessAttr): Fix thinko.
* interp/monitor.lisp (monitor-add): Remove extra right parenthesis.
* interp/lisplib.boot: Import "debug".
(initializeLisplib): Don't use ERRORS variable.
* interp/i-spec1.boot (isDomainValuedVariable): Tidy.
* interp/i-output.boot (outputTran): Use SIZE instead of #.
(output): Remove misguided conversion from Tuple to List.
* interp/i-coerce.boot (coerceInteractive): Allow domain object
convesions.
* interp/g-util.boot (opOf): Declare.
* interp/Makefile.pamphlet (lisplib.$(FASLEXT)): Depend on
debug.$(FASLEXT).
* algebra/Makefile.pamphlet: Use .$(FASLEXT) instead of hardcoded
.o extension.
|
|
functions `parameters' and `body'.
* algebra/domain.spad.pamphlet: Rename from algebra/domain.spad.
(Category): New category.
* algebra/Makefile.pamphlet (axiom_algebra_layer_0): Include
CATEGORY.o.
(DOMAIN.NRLIB/code.$(FASLEXT)): Remove rule.
* interp/trace.boot (transTraceItem): Use $LangSupportTypes.
* interp/sys-constants.boot ($None): New.
($Type): Likewise.
($LangSupportTypes): Likewise.
* interp/parse.boot (parseHas): Use $LangSupportTypes.
(parseHasRhs): Likewise.
* interp/i-spec2.boot (upLETtype): Use conceptualType.
(uptypeOf): Likewise.
(upwhere): Likewise.
(typeOfType): Remove.
* interp/i-spec1.boot (isDomainValuedVariable): Variables with
type Category and Type are domain valued too.
* interp/i-output.boot (output): Special case only Mode and Type.
* interp/i-funsel.boot (selectMms): Don't ignore modemaps with
category parameters.
* interp/i-coerce.boot (canCoerce1): Test for Category instead of
SubDomain Domain.
(canCoerceFrom0): Use $None and $Any.
(absolutelyCannotCoerce): Use $None.
(coerceInteractive): Use $LangSupportTypes.
(coerceInt1): Use $Any.
* interp/i-analy.boot (conceptualType): New.
(bottomUpType): Use it.
* interp/clammed.boot (isValidType): Use $LangSupportTypes.
* interp/g-cndata.boot (isNameOfType): Likewise.
* interp/category.boot (Category): Remove hacky definition.
* interp/buildom.boot ($noCategoryDomains): Domain now has a
Lisplib.
|
|
|
|
* interp/sys-utility.boot (delete): Fix thinko.
* interp/sys-globals.boot ($sourceFiles): Define here.
(INPUTSTREAM): Likewise.
* interp/i-syscmd.boot (UNDERBAR): Move to sys-globals.boot.
* interp/fname.lisp: Import "macros".
* interp/debug.lisp: Import "parsing".
Replace $PRETTYPRINT with $PrettyPrint.
(/FN): Define.
(depthAlist): Likewise.
* interp/br-search.boot (docSearch1): Fix thinko.
* interp/Makefile.pamphlet (debug.$(FASLEXT)): Depend on
parsing.$(FASLEXT).
* interp/i-output.boot (starstarcond): Remove used function.
(transcomparg): Likewise.
(MATBORCH): Define here.
(*TALLPAR): Likewise.
* interp/vmlisp.lisp (|char|): Remove duplicate definition.
|
|
|
|
(bTry): Use it.
* boot/strap: Update.
|
|
|
|
* boot/tokens.boot (shoeKeyWords): Add new keywords.
* boot/ast.boot (Ast): Include three new nodes.
(bfTry): New.
(bfThrow): Likewise.
* boot/parser.boot ($bodyHasReturn): Remove.
(bpNoteReturnStmt): Likewise.
(bpThrow): New.
(bpTry): Likewise.
(bpPiledCatchItems): Likewise.
(bpCatchItemList): Likewise.
(bpExceptionHead): Likewise.
(bpExceptionTail): Likewise.
(bpException): Likewise.
(bpCatchItem): Likewise.
(bpReturn): Include `throw' expressions.
(bpStatement): Include `try' expressions.
* interp/macros.lisp (|tryLine|): Rename from |try|.
* interp/pspad1.boot: Replace `try' with `tryLine' throughout.
|
|
|
|
|