1 <!DOCTYPE html PUBLIC
"-//W3C//DTD XHTML 1.0 Transitional//EN"
2 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
3 <html xmlns=
"http://www.w3.org/1999/xhtml" xml:
lang=
"en"
6 <meta http-equiv=
"Content-Type" content=
"text/html; charset=utf-8" />
7 <title>geda:gnetlist_ug
</title>
8 <meta name=
"generator" content=
"DokuWiki Release rc2007-05-24" />
9 <meta name=
"robots" content=
"noindex,nofollow" />
10 <meta name=
"date" content=
"2007-05-24T22:27:25-0400" />
11 <meta name=
"keywords" content=
"geda,gnetlist_ug" />
12 <link rel=
"search" type=
"application/opensearchdescription+xml" href=
"http://geda.seul.org/wiki/lib/exe/opensearch.php" title=
"geda Wiki" />
13 <link rel=
"start" href=
"http://geda.seul.org/wiki/" />
14 <link rel=
"contents" href=
"http://geda.seul.org/wiki/geda:gnetlist_ug?do=index" title=
"Index" />
15 <link rel=
"alternate" type=
"application/rss+xml" title=
"Recent Changes" href=
"http://geda.seul.org/wiki/feed.php" />
16 <link rel=
"alternate" type=
"application/rss+xml" title=
"Current Namespace" href=
"http://geda.seul.org/wiki/feed.php?mode=list&ns=geda" />
17 <link rel=
"alternate" type=
"text/html" title=
"Plain HTML" href=
"http://geda.seul.org/wiki/_export/xhtml/geda:gnetlist_ug" />
18 <link rel=
"alternate" type=
"text/plain" title=
"Wiki Markup" href=
"http://geda.seul.org/wiki/_export/raw/geda:gnetlist_ug" />
19 <link rel=
"stylesheet" media=
"all" type=
"text/css" href=
"lib/exe/css" />
20 <link rel=
"stylesheet" media=
"screen" type=
"text/css" href=
"lib/exe/001css" />
21 <link rel=
"stylesheet" media=
"print" type=
"text/css" href=
"lib/exe/002css" />
24 <div class=
"dokuwiki export">
26 <div class=
"tocheader toctoggle" id=
"toc__header">Table of Contents
</div>
27 <div id=
"toc__inside">
30 <li class=
"level1"><div class=
"li"><span class=
"li"><a href=
"#geda_gnetlist_users_guide" class=
"toc">gEDA gnetlist Users Guide
</a></span></div>
32 <li class=
"level2"><div class=
"li"><span class=
"li"><a href=
"#introduction" class=
"toc">Introduction
</a></span></div></li>
33 <li class=
"level2"><div class=
"li"><span class=
"li"><a href=
"#overview" class=
"toc">Overview
</a></span></div></li>
34 <li class=
"level2"><div class=
"li"><span class=
"li"><a href=
"#installation" class=
"toc">Installation
</a></span></div></li>
35 <li class=
"level2"><div class=
"li"><span class=
"li"><a href=
"#running_gnetlist" class=
"toc">Running gnetlist
</a></span></div></li>
36 <li class=
"level2"><div class=
"li"><span class=
"li"><a href=
"#schematic_symbol_requirements" class=
"toc">Schematic / symbol requirements
</a></span></div>
38 <li class=
"level3"><div class=
"li"><span class=
"li"><a href=
"#symbol_requirements" class=
"toc">Symbol requirements
</a></span></div></li>
39 <li class=
"level3"><div class=
"li"><span class=
"li"><a href=
"#schematic_requirements" class=
"toc">Schematic requirements
</a></span></div></li>
40 <li class=
"level3"><div class=
"li"><span class=
"li"><a href=
"#random_notes" class=
"toc">Random notes
</a></span></div></li>
43 <li class=
"level2"><div class=
"li"><span class=
"li"><a href=
"#hierarchy_support" class=
"toc">Hierarchy Support
</a></span></div></li>
44 <li class=
"level2"><div class=
"li"><span class=
"li"><a href=
"#specific_backend_info" class=
"toc">Specific backend info
</a></span></div></li>
45 <li class=
"level2"><div class=
"li"><span class=
"li"><a href=
"#scheme_backend_api" class=
"toc">Scheme backend API
</a></span></div>
47 <li class=
"level3"><div class=
"li"><span class=
"li"><a href=
"#overview1" class=
"toc">Overview
</a></span></div></li>
48 <li class=
"level3"><div class=
"li"><span class=
"li"><a href=
"#entry_point" class=
"toc">Entry Point
</a></span></div></li>
49 <li class=
"level3"><div class=
"li"><span class=
"li"><a href=
"#initialization_of_the_backend" class=
"toc">Initialization of the Backend
</a></span></div></li>
50 <li class=
"level3"><div class=
"li"><span class=
"li"><a href=
"#net_name_and_reference_designator_aliasing" class=
"toc">Net Name and Reference Designator Aliasing
</a></span></div></li>
51 <li class=
"level3"><div class=
"li"><span class=
"li"><a href=
"#debugging_hints" class=
"toc">Debugging Hints
</a></span></div></li></ul>
59 <h1><a name=
"geda_gnetlist_users_guide" id=
"geda_gnetlist_users_guide">gEDA gnetlist Users Guide
</a></h1>
67 This document is released under
<a href=
"http://www.gnu.org/copyleft/fdl.html" class=
"urlextern" title=
"http://www.gnu.org/copyleft/fdl.html" rel=
"nofollow">GFDL
</a>
75 <!-- SECTION "gEDA gnetlist Users Guide" [1-158] -->
76 <h2><a name=
"introduction" id=
"introduction">Introduction
</a></h2>
80 This document describes how to use
<strong>gnetlist
</strong>. This document and
<strong>gnetlist
</strong> in general are pretty ALPHA, so keep that in mind as you use it to generate netlists. As all engineers know, it is very important that you do not blindly trust tools, assuming that they will always create correct output.
<strong>gnetlist
</strong> is certainly no exception to this rule. It is very important that you verify *every* netlists you create. As with most programs (including all the programs in gEDA),
<strong>gnetlist
</strong> comes with NO WARRANTY. Blah, I hate having to say that, but I’m hoping that this warning will keep the user from assuming that
<strong>gnetlist
</strong> generates perfect netlists. Though if you find a bug, please let
<strong>ahvezda@geda.seul.org
</strong> know.
<br/>
81 This document is very rough, so please e-mail all corrections to
<strong>ahvezda@geda.seul.org
</strong> or file a bug report on the gEDA homepage at
<a href=
"http://www.geda.seul.org/" class=
"urlextern" title=
"http://www.geda.seul.org" rel=
"nofollow">http://www.geda.seul.org
</a>. Thanks!
85 <!-- SECTION "Introduction" [159-1087] -->
86 <h2><a name=
"overview" id=
"overview">Overview
</a></h2>
90 <strong>gnetlist
</strong> is the gEDA netlister. It takes as input schematic files and produces a netlist. A netlist is a textual representation of a schematic. This textual representation has all of the connections between devices completely resolved. This means that all the connections associated with a net are grouped together. The netlister also handles hierarchies of schematics.
<br/>
91 <strong>gnetlist
</strong> has a very exible architecture. The main program, which is written in C, reads in a schematic (using routines from libgeda) and creates an internal representation of the schematic data. This internal representation is then manipulated by a backend which is responsible for writing the various netlist formats. The backend for each netlist format is written in scheme (specifically Guile). This architecture not only allows for an infinite number of netlist formats, but also allows the netlister to generate other reports (like bill of material lists).
<br/>
92 As of
20001006 <strong>gnetlist
</strong> has scheme backends to support the following netlist formats:
95 <li class=
"level1"><div class=
"li"> PCB
& PCBboard - UNIX PCB netlist format.
</div>
97 <li class=
"level1"><div class=
"li"> Allegro netlist format
</div>
99 <li class=
"level1"><div class=
"li"> BAE netlist format
</div>
101 <li class=
"level1"><div class=
"li"> BOM
& BOM2 - Bill of Material generators
</div>
103 <li class=
"level1"><div class=
"li"> DRC - Start of a design rule checker
</div>
105 <li class=
"level1"><div class=
"li"> gEDA - the native format of gEDA, mainly used for testing
</div>
107 <li class=
"level1"><div class=
"li"> Gossip netlist format
</div>
109 <li class=
"level1"><div class=
"li"> PADS netlist format
</div>
111 <li class=
"level1"><div class=
"li"> ProtelII netlist format
</div>
113 <li class=
"level1"><div class=
"li"> Spice compatible netlist format
</div>
115 <li class=
"level1"><div class=
"li"> Tango netlist format
</div>
117 <li class=
"level1"><div class=
"li"> Verilog code
</div>
119 <li class=
"level1"><div class=
"li"> VHDL code
</div>
121 <li class=
"level1"><div class=
"li"> VIPEC netlist format
</div>
123 <li class=
"level1"><div class=
"li"> VAMS - VHDL-AMS netlist format
</div>
128 This list is constantly growing. Several lacking features (as of
20001006) are: no support for buses, error detection and reporting is fairly limited, and
… (many more).
132 <!-- SECTION "Overview" [1088-2791] -->
133 <h2><a name=
"installation" id=
"installation">Installation
</a></h2>
137 Hopefully by now you have already installed
<strong>gnetlist
</strong> on your machine. This document does not cover installation. You can verify the installation by running:
139 <pre class=
"code">libgeda-config --version
140 gesym-config --version
142 ldd `which gnetlist`
</pre>
145 The first two should return the version of the installed tools (libgeda and the symbol library) and the next command should return the path to the
<strong>gnetlist
</strong> binary. The final command (only on Unix-like operating systems which include the ldd utility for listing dynamic dependencies of executable files or shared objects) will return which libraries are linked to
<strong>gnetlist
</strong>; all of the request libraries must be found for
<strong>gnetlist
</strong> to run. If these commands do not return the expected results, then most likely the gEDA tools are not installed properly. Please see the appropriate INSTALL docs (which came with the distribution) for more info on installing the gEDA tools.
149 <!-- SECTION "Installation" [2792-3759] -->
150 <h2><a name=
"running_gnetlist" id=
"running_gnetlist">Running gnetlist
</a></h2>
154 It is very easy to run
<strong>gnetlist
</strong>.
<strong>gnetlist
</strong> is a pure command line interface so there is no pesky
<acronym title=
"Graphical User Interface">GUI
</acronym> to get in the way
<img src=
"lib/images/smileys/icon_smile.gif" class=
"middle" alt=
":-)" /> For a list of command line arguments please run
<code>gnetlist -h
</code>.
<br/>
155 You need to specify the following two parameters to run gnetlists:
158 <li class=
"level1"><div class=
"li"> <strong>-g pro
</strong>c (this specifies which backend to run against the schematics)
</div>
160 <li class=
"level1"><div class=
"li"> <strong>filename.sch
</strong> (this specifies the schematic files)
</div>
165 You can specify multiple schematics on the command line. The default filename for the generated netlist goes into “
<strong>output.net
</strong>” You can change this default location by using the
<strong>-o filename
</strong> option.
<br/>
166 A few examples on running
<strong>gnetlist
</strong>:
168 <pre class=
"code">gnetlist -g geda -o stack.net stack_1.sch
</pre>
171 (output netlist (in
<strong>stack.net
</strong>) for
<strong>stack_1.sch
</strong> using the gEDA native format)
175 There are also a few debugging flags. The first one is the
<strong>-v
</strong> flag which enables verbose mode. Verbose mode outputs a whole bunch of information on what
<strong>gnetlist
</strong> is doing as well a dump of the internal representation. The
<strong>-i
</strong> flag which puts
<strong>gnetlist
</strong> into a interactive mode is very useful in debugging scheme backends and typically is not used by the end user.
<br/>
176 For a detailed list of command line arguments please see the
<strong>gnetlist
</strong> man page.
180 <!-- SECTION "Running gnetlist" [3760-5041] -->
181 <h2><a name=
"schematic_symbol_requirements" id=
"schematic_symbol_requirements">Schematic / symbol requirements
</a></h2>
185 This section describes what schematics/symbols need to have to be usable with
<strong>gnetlist
</strong>. In order for
<strong>gnetlist
</strong> to work correctly, both the schematics and supporting symbols must be correct. Basically these requirements consist of attribute specification. Attributes are used through out the gEDA system to represent information. Attributes are the only way of adding information to components, nets, pins, etc
… For more detailed information about the attributes mentioned in this document, please see the
<a href=
"geda_master_attributes_list.html" class=
"wikilink1" title=
"geda:master_attributes_list">Master Attributes List
</a> document.
189 <!-- SECTION "Schematic / symbol requirements" [5042-5666] -->
190 <h3><a name=
"symbol_requirements" id=
"symbol_requirements">Symbol requirements
</a></h3>
193 <li class=
"level1"><div class=
"li"> All symbols must have a
<code>device=
</code> attribute.
</div>
195 <li class=
"level1"><div class=
"li"> All pins must have the
<code>pin#=#
</code> attribute. This attribute will eventually change form, but for now it is required as
<code>pin#=#
</code></div>
197 <li class=
"level1"><div class=
"li"> All pin should also have a
<code>pinlabel=
</code> attribute.
</div>
199 <li class=
"level1"><div class=
"li"> For symbols which are slotted you also need the
<code>slot=
</code> attribute, for each slot a
<code>slot#=#
</code> attribute, and the
<code>numslots=#
</code> attribute. Slotting will also change in the near future, but for now it should be specified as above.
</div>
201 <li class=
"level1"><div class=
"li"> For any power/gnd/arbitrary you need to put
<code>net=
</code> attributes inside the symbol. See the netattrib.txt document for more info.
</div>
203 <li class=
"level1"><div class=
"li"> You can supply default values for various parameters (this is dependent on which backend you use) by taking advantage of the attribute “promotion” mechanism. See below for more info as well as the gschem documentation.
</div>
205 <li class=
"level1"><div class=
"li"> For symbols which you want the netlister to completely ignore use the
<code>graphical=
1</code> attribute
</div>
207 <li class=
"level1"><div class=
"li"> For more tips on symbols, please see the
<a href=
"http://geda.seul.org/wiki/geda:scg" class=
"wikilink1" title=
"geda:scg">Symbol Creation Guide
</a>.
</div>
212 <!-- SECTION "Symbol requirements" [5667-6712] -->
213 <h3><a name=
"schematic_requirements" id=
"schematic_requirements">Schematic requirements
</a></h3>
216 <li class=
"level1"><div class=
"li"> Most importantly, every component you want to show up in a netlist must have a
<code>refdes=
</code> attribute. This is
<strong>VERY
</strong> important.
<strong>gnetlist
</strong> should warn you if you have a component which doesn’t have a
<code>refdes=
</code>, but there have been bugs which do not cause this warning.
</div>
218 <li class=
"level1"><div class=
"li"> You can label all nets using the
<code>label=
</code> attribute. You only need to attach this label to one net segment (of an electrically connected net) for all the net segments to inherit the label.
</div>
220 <li class=
"level1"><div class=
"li"> You can have multiple schematics in a design (which is actually a confusing term since it means many different things to people). To use multiple schematics to create a single netlist, just specify them on the
<strong>gnetlist
</strong> command line.
</div>
222 <li class=
"level1"><div class=
"li"> If you name nets the same, then these nets will be electrically connected. Same net names spawn all the specified schematics.
</div>
224 <li class=
"level1"><div class=
"li"> There are quite a few issues that deal with hierarchy please see the hierarchy section below.
</div>
229 <!-- SECTION "Schematic requirements" [6713-7689] -->
230 <h3><a name=
"random_notes" id=
"random_notes">Random notes
</a></h3>
233 <li class=
"level1"><div class=
"li"> Attributes which are not attached to anything and are inside a symbol are “promoted” to the outside of the symbol when the symbol is placed inside a schematic (in gschem). These promoted attributes are always looked at/for first before going into the symbol. So, in other words, if there is an attribute with the same name is inside a symbol and attached to the outside of the instantiated component, then the outside attribute takes precedence.
</div>
238 <!-- SECTION "Random notes" [7690-8163] -->
239 <h2><a name=
"hierarchy_support" id=
"hierarchy_support">Hierarchy Support
</a></h2>
247 <!-- SECTION "Hierarchy Support" [8164-8198] -->
248 <h2><a name=
"specific_backend_info" id=
"specific_backend_info">Specific backend info
</a></h2>
256 <!-- SECTION "Specific backend info" [8199-8237] -->
257 <h2><a name=
"scheme_backend_api" id=
"scheme_backend_api">Scheme backend API
</a></h2>
261 Please note that this section is still under construction. The information here should be correct, but it is not complete.
265 <!-- SECTION "Scheme backend API" [8238-8392] -->
266 <h3><a name=
"overview1" id=
"overview1">Overview
</a></h3>
270 <strong>gnetlist
</strong> operates by loading the schematic database from the .sch files, building an internal representation and then calling a function specific to the desired output netlist type which performs the actual netlisting. Each
<strong>gnetlist
</strong> backend is contained in a file called gnet-
<backend
>.scm. Where
<backend
> is the name of the particular backend. For example, gnet-switcap.scm contains the code used by “gnetlist -g switcap” and gnet-drc.scm contains the code used by “gnetlist -g drc”. The backends are written in the Scheme programming language. The particular implementation of scheme is guile which stands for GNU’s Ubiquitous Intelligent Language for Extensions. More information about guile may be found at
<a href=
"http://www.gnu.org/software/guile/guile.html" class=
"urlextern" title=
"http://www.gnu.org/software/guile/guile.html" rel=
"nofollow">http://www.gnu.org/software/guile/guile.html
</a>.
274 <!-- SECTION "Overview" [8393-9182] -->
275 <h3><a name=
"entry_point" id=
"entry_point">Entry Point
</a></h3>
279 Each netlist backend is required to provide a function whose name matches the netlist type. For example, the switcap backend contained in gnet-switcap.scm must provide a function called “switcap”. That is the function which
<strong>gnetlist
</strong> will call to initiate the netlisting. The entry point function is given a single argument which is the filename for the output netlist. Typically the first thing a netlister does is to open the output file for writing.
<br/>
280 The following excerpt from the switcap backend shows the start of the entry point function and shows the output file being opened. At the end of the function, the output file is closed.
282 <pre class=
"code">;; ---------------------------------------
283 ;; Switcap netlist generation -- top level
284 ;; ---------------------------------------
286 (lambda (output-filename)
287 (let ((port (open-output-file output-filename)))
289 ;; rest of netlisting goes here
291 ;; close the output file and return
292 (close-output-port port))))
</pre>
295 <!-- SECTION "Entry Point" [9183-10192] -->
296 <h3><a name=
"initialization_of_the_backend" id=
"initialization_of_the_backend">Initialization of the Backend
</a></h3>
300 After opening the output netlist, any specific initializations which must be done for the particular netlist are done. In the switcap example, we must initialize a net name and reference designator (refdes) aliasing database. This is because switcap has more restrictive requirements on its net names than gschem does. In addition, the reference designators in a switcap netlist have special requirements. To deal with this situation,
<strong>gnetlist
</strong> provides some general purpose functions which rename nets and reference designators to comply with the target netlist requirements. More details on this later. For now, just note that the switcap backend uses the following code:
302 <pre class=
"code">;; initialize the net-name aliasing
303 (gnetlist:build-net-aliases switcap:map-net-names
306 ;; initialize the refdes aliasing
307 (gnetlist:build-refdes-aliases switcap:map-refdes
311 The other initialization which is typically done, although not required by all netlist types, is to output some sort of header. This header may be explicitly contained in the entry point function or it may be contained in its own function for code clarity. In the switcap backend, the call is:
313 <pre class=
"code">(switcap:write-top-header port)
</pre>
316 Note that the convention is for any backend specific functions to have their names prefixed by the backend name. For example all switcap specific functions begin with “switcap:
". Functions which are available to all backends and provided by
<strong>gnetlist
</strong> are prefixed by “gnetlist:
".
<br/>
317 The definition of “switcap:write-top-header” is
320 ;; Switcap netlist header
322 (define switcap:write-top-header
325 "/* Switcap netlist produced by gnetlist (part of gEDA) */\n
"
328 "/* See http://www.geda.seul.org for more information. */\n
"
331 "/* Switcap backend written by Dan McMahill */\n
"
333 (display
"\n\n
" port)
338 The entry point function continues by calling functions for each section in the output netlist. The variable “packages” is predefined by
<strong>gnetlist
</strong> to be a list of all components in the design and “all-unique-nets” is a list of all the nets in the design. The various functions used by the backend for each section in the netlist will use these variables. For example, the main part of the switcap netlist which contains the components and their connectivity is written to the output file with
340 <pre class=
"code">(switcap:write-netlist port packages)
</pre>
343 <!-- SECTION "Initialization of the Backend" [10193-12761] -->
344 <h3><a name=
"net_name_and_reference_designator_aliasing" id=
"net_name_and_reference_designator_aliasing">Net Name and Reference Designator Aliasing
</a></h3>
348 It is common for a target netlist type to have a more restrictive requirement for the net names than gschem does. For example, there may be restrictions on length, allowed characters, or case. To address this issue,
<strong>gnetlist
</strong> provides a net name aliasing feature. To use this feature, the function “gnetlist:build-netaliases” is called as part of the initialization section of the entry point function.
<br/>
349 For example in the switcap backend,
351 <pre class=
"code">;; initialize the net-name aliasing
352 (gnetlist:build-net-aliases switcap:map-net-names
353 all-unique-nets)
</pre>
356 The function “switcap:map-net-names” is a backend specific (switcap in this case) function which accepts a gschem net name as an argument and returns a modified net name which meets the requirements for the output netlist format. In the case of switcap, the requirement is ground must be called “
0”, nets may have no more than
7 characters, and the netlist is not case sensitive.
358 <pre class=
"code">;; This procedure takes a net name as determined by
359 ;; gnetlist and modifies it to be a valid SWITCAP net name.
361 (define switcap:map-net-names
363 (let ((rx (make-regexp
"^unnamed_net
"))
366 ;; XXX we should use a dynamic regexp based on the
367 ;; current value for the unnamed net base string.
370 ;; Change
"GND
" to
"0"
371 ((string=? net-name
"GND
") (set! net-alias
"0"))
372 ;; remove the
'unnamed_net
' part
373 ((regexp-exec rx net-name)
374 (set! net-alias (substring net-name
11)))
378 ;; Truncate to
7 characters
379 (if (
> (string-length net-alias)
7)
380 (set! net-alias (substring net-alias
0 7))
383 ;; Convert to all upper case
384 (string-upcase net-alias)
391 The function “gnetlist:build-net-aliases” creates a database which later on lets you look up the output net name from the gschem net name or the gschem net name from the output net name. In addition it does the very important task of ensuring that no shorts are created by modifying the net names. As an example suppose you had a net called “MyNet” and another called “mynet” in the schematic. Those are unique but after converting both to upper case they become a single net. “gnetlist:build-net-aliases” will detect this condition and issue an error and stop netlisting.
<br/>
392 Now that the database has been initialized, the netlister simply uses
394 <pre class=
"code">(gnetlist:alias-net somenet)
</pre>
397 to retrive the netlist net name from the gschem net name.
<br/>
398 A similar set of functions are provided for reference designator aliasing.
402 <!-- SECTION "Net Name and Reference Designator Aliasing" [12762-15433] -->
403 <h3><a name=
"debugging_hints" id=
"debugging_hints">Debugging Hints
</a></h3>
407 A useful debugging tool is to run
<strong>gnetlist
</strong> in interactive mode. This is done by using the
"-i” option to
<strong>gnetlist
</strong>. This will give you a shell where you may enter scheme commands. This provides a simple way to examine various variables and try out various functions.
<br/>
408 An example of running
<strong>gnetlist
</strong> in interactive mode is shown below.
410 <pre class=
"code">% gnetlist -i ../../gnetlist/examples/switcap/*.sch
411 gEDA/gnetlist version
20041228
412 gEDA/gnetlist comes with ABSOLUTELY NO WARRANTY; see COPYING for more details.
413 This is free software, and you are welcome to redistribute it under certain
414 conditions; please see the COPYING file for more details.
416 Loading schematic [../../gnetlist/examples/switcap/analysis.sch]
417 Loading schematic [../../gnetlist/examples/switcap/ckt.sch]
418 Loading schematic [../../gnetlist/examples/switcap/clocks.sch]
419 gnetlist
> all-unique-nets
420 (
"unnamed_net6
" "unnamed_net5
" "unnamed_net4
" "OUT
" "unnamed_net3
"
421 "unnamed_net2
" "unnamed_net1
" "GND
")
422 gnetlist
> packages
423 (
"TIMING
" "CLK1
" "S7
" "S8
" "S6
" "S5
" "C3
" "S4
" "C2
" "C1
" "E1
" "S3
"
424 "S1
" "V1
" "S2
" "OPTIONS
" "TITLE
" "ANA1
")
429 <!-- SECTION "Debugging Hints" [15434-] --></div>