\textit{infotainment} is presented via several websites specialized per genre
or category and some sites attract over $500.000$ visitors per month.
+\section{Extracting data from plain text}
+
+
\section{Information flow}
The reason why Hyperleap is the only in its kind with the high quality data is
because Hyperleap spends a lot of time and resources on quality checking, cross
\section{Application overview}
The backend consists of several processing steps before a crawler specification
-is ready.
+is ready. These steps are visualized in Figure~\ref{appinternals} where all the
+nodes are important milestones in the process of processing the user data.
+Arrows indicate informatio transfer between these steps. The Figure is a
+detailed explanation of the \textit{Backend} node in Figure~\ref{appoverview}.
\begin{figure}[H]
- \label{dawg1}
+ \label{appinternals}
\centering
\includegraphics[width=\linewidth]{backend.eps}
\strut\\
\end{figure}
\section{HTML data}
-Data marked by the user will be returned as a \texttt{POST} http request and is
-basically the information in the description fields accompanied by the raw html
-of the table with the patterns. For every RSS feed entry there is a row in the
-table and every marker is a \texttt{SPAN} element containing the color of the
-text. Within the HTML code of the table markers are placed to make parsing more
-easy and remove the need of an advanced HTML parser. The \texttt{POST} request
-that will be send when the user presses the submit button will not be sent
-asynchronously, the user has to wait for the processing to finish. Because of
-this the user will be immediately notified when the processing has finished
-successfully. The preparation of the data for the \texttt{POST} request is all
-done in Javascript on the user side, the processing of the data in the backend
-is all done server side.
+The raw data from the \textit{Frontend} with the user markings will enter the
+backend as a HTTP \textit{POST} request and consists of several information
+fields extracted from the description boxes in the front and accompanied by the
+raw \textit{HTML} data from the table with the feed entries that contain the
+marking made by the user at the time just before the submit button is pressed.
+Within the \textit{HTML} data of the table markers are placed before sending to
+make the parsing of the tables more easy and remove the need for an advanced
+\textit{HTML} parser. The \textit{POST} request is not send asynchronously,
+this means the user has to wait until the server has processed the request. In
+this way the user will be immediately notified when the processing has finished
+successfully and will be able to review and test the resulting crawler. All the
+data preparation for the \textit{POST} request is done in Javascript and thus
+on the user side, all the processing afterwards is done in the backend and thus
+server side. All the descriptive fields will be transferred to the final
+aggregating dictionary.
\section{Table rows}
-When the backend receives the HTTP POST data it saves all the table HTML data
-and the data from the description fields. The program first extracts the table
-rows using simple pattern matching on the added markers. The table rows are
-processed one at the time, the processing mainly consists of finding the
-\texttt{SPAN} elements, extract the color, remove the elements and save the
-plain text and the location and type of the marking. When the table rows are
-processed a datastructure with all the entries accompanied by their markers
-will go to the next step. All intermediate data will be saved for later use.
+The first conversion step is to extract the rows within from the \textit{HTML}
+data. Because of the table markers this process can be done using very
+rudimentary matching techniques that require very little computational power.
+All the \texttt{SPAN} \textit{HTML} elements have to be found since the marking
+of the user are visualized through colored \texttt{SPAN} elements. To achieve
+this for every row all \texttt{SPAN} elements are extracted, again with simple
+matching techniques, to extract the color and afterwards to remove the element
+to retrieve the original plain text of the \textit{RSS} feed entry. When this
+step is done a data structure containing all the text of the entries together
+with the markings will go to the next step. All original data, namely the
+\textit{HTML} data per row, will be transferred to the final aggregating
+dictionary.
\section{Node lists}
-Every entry from the datastructure is processed to convert them to node-lists.
-A node-list can be seen as a path graph of every character and marking. A path
-graph $G$ is defined as $G=(V,n_1,E,n_i)$ where $V=\{n_1, n_2, \cdots, n_{i-1},
-n_i\}$ and $E=\{(n_1, n_2), (n_2, n_3), ... (n_{i-1}, n_{i})\}$. A path graph
-is basically a graph that is a path of nodes where every node is connected to
-the next on and the last on being final. The transitions between two nodes is
-either a character or a marking. As an example we take the entry \texttt{19:00,
-2014-11-12 - Foobar} and create the corresponding node-lists and make it
-visible in Figure~\ref{nodelistexample}. Characters are denoted with single
-quotes, spaces with an underscore and markers with angle brackets.
+Every entry gotten from the previous step are going to be processing into so
+called node-lists. A node-list can be seen as a path graph of every character
+and marking. A path graph $G$ is defined as $G=(V,n_1,E,n_i)$ where $V=\{n_1,
+n_2, \cdots, n_{i-1}, n_i\}$ and $E=\{(n_1, n_2), (n_2, n_3), ... (n_{i-1},
+n_{i})\}$. A path graph is basically a graph that is a path of nodes where
+every node is connected to the next on and the last on being final. The
+transitions between two nodes is either a character or a marking. As an example
+we take the entry \texttt{19:00, 2014-11-12 - Foobar} and create the
+corresponding node-lists and make it visible in Figure~\ref{nodelistexample}.
+Characters are denoted with single quotes, spaces with an underscore and
+markers with angle brackets. Node-lists are the basic elements from which the
+DAWG will be generated. These node-lists will also be available in the final
+aggregating dictionary to ensure consistency of data and possibility of
+regenerating the data.
\begin{figure}[H]
\label{nodelistexample}
\centering
\caption{Node list example}
\end{figure}
-
\section{DAWGs}
\subsection{Terminology}
\textbf{Parent nodes} are nodes that have an arrow to the child.\\
to DAWGS. Normally DAWGs have single letters from an alphabet as edgelabel but
in our implementation the DAWGs alphabet contains all letters, whitespace and
punctuation but also the specified user markers which can be multiple
-characters in length.
+characters of actual length but for the DAWGs' sake they are one transition in
+the graph.
DAWGs are graphs but due to the constraints we can use the DAWG to check if a
match occurs by checking if a path exists that creates the word by
-concatenating all the edge labels. The first algorithm to generate DAWGs from
+concatenating all the edge labels while trying to find a path following the
+characters from the entry. The first algorithm to generate DAWGs from
words was proposed by Hopcroft et al\cite{Hopcroft1971}. It is an incremental
approach in generating the graph. Meaning that entry by entry the graph will
be expanded. Hopcrofts algorithm has the constraint of lexicographical
ordering. Later on Daciuk et al.\cite{Daciuk2000} improved on the original
algorithm and their algorithm is the algorithm we used to minimize our DAWGs. A
minimal graph is a graph $G$ for which there is no graph $G'$ that has less
-paths and $\mathcal{L}(G)=\mathcal{L }(G')$ where $\mathcal{L}(G)$ is the set
+paths and $\mathcal{L}(G)=\mathcal{L}(G')$ where $\mathcal{L}(G)$ is the set
of all words present in the DAWG.
\subsection{Algorithm}
}
\end{figure}
+\subsection{Minimality of the algorithm}
+
+
\subsection{Appliance on extraction of patterns}
The text data in combination with the user markings can not be converted
automatically to a DAWG using the algorithm we described. This is because the
SHELL:=/bin/bash
-VERSION:=0.91
+VERSION:=0.95
all: thesis
rankdir=LR
q0 [style=invis]
q1 [style=invis]
- q0 -> "HTML data"
+ q0 -> "HTML data" [label="From frontend"]
"HTML data" -> "Table rows"
"Table rows" -> "Node lists"
"Node lists" -> "Dawg"
"Dawg" -> "Dictionary"
"HTML data" -> "Dictionary" [label="Description fields"]
"Table rows" -> "Dictionary" [label="Original text"]
- "Dictionary" -> q1
+ "Dictionary" -> q1 [label="To crawler"]
}
%%Creator: graphviz version 2.38.0 (20140413.2041)
%%Title: %3
%%Pages: 1
-%%BoundingBox: 36 36 907 152
+%%BoundingBox: 36 36 1045 152
%%EndComments
save
%%BeginProlog
%%EndSetup
setupLatin1
%%Page: 1 1
-%%PageBoundingBox: 36 36 907 152
+%%PageBoundingBox: 36 36 1045 152
%%PageOrientation: Portrait
0 0 1 beginpage
gsave
-36 36 871 116 boxprim clip newpath
+36 36 1009 116 boxprim clip newpath
1 1 set_scale 0 rotate 40 40 translate
% q0
% HTML data
gsave
1 setlinewidth
0 0 0 nodecolor
-144.3 18 53.09 18 ellipse_path stroke
+223.3 18 53.09 18 ellipse_path stroke
0 0 0 nodecolor
14 /Times-Roman set_font
-111.3 14.3 moveto 66 (HTML data) alignedtext
+190.3 14.3 moveto 66 (HTML data) alignedtext
grestore
% q0->HTML data
gsave
1 setlinewidth
0 0 0 edgecolor
-newpath 54.16 18 moveto
-62.16 18 71.33 18 80.68 18 curveto
+newpath 54.2 18 moveto
+81.07 18 123.86 18 159.54 18 curveto
stroke
0 0 0 edgecolor
-newpath 80.84 21.5 moveto
-90.84 18 lineto
-80.84 14.5 lineto
+newpath 159.88 21.5 moveto
+169.88 18 lineto
+159.88 14.5 lineto
closepath fill
1 setlinewidth
solid
0 0 0 edgecolor
-newpath 80.84 21.5 moveto
-90.84 18 lineto
-80.84 14.5 lineto
+newpath 159.88 21.5 moveto
+169.88 18 lineto
+159.88 14.5 lineto
closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+72 21.8 moveto 80 (From frontend) alignedtext
grestore
% q1
% Table rows
gsave
1 setlinewidth
0 0 0 nodecolor
-284.64 47 50.09 18 ellipse_path stroke
+363.64 47 50.09 18 ellipse_path stroke
0 0 0 nodecolor
14 /Times-Roman set_font
-254.14 43.3 moveto 61 (Table rows) alignedtext
+333.14 43.3 moveto 61 (Table rows) alignedtext
grestore
% HTML data->Table rows
gsave
1 setlinewidth
0 0 0 edgecolor
-newpath 190.21 27.42 moveto
-203.16 30.13 217.41 33.12 230.8 35.92 curveto
+newpath 269.21 27.42 moveto
+282.16 30.13 296.41 33.12 309.8 35.92 curveto
stroke
0 0 0 edgecolor
-newpath 230.32 39.4 moveto
-240.83 38.03 lineto
-231.76 32.55 lineto
+newpath 309.32 39.4 moveto
+319.83 38.03 lineto
+310.76 32.55 lineto
closepath fill
1 setlinewidth
solid
0 0 0 edgecolor
-newpath 230.32 39.4 moveto
-240.83 38.03 lineto
-231.76 32.55 lineto
+newpath 309.32 39.4 moveto
+319.83 38.03 lineto
+310.76 32.55 lineto
closepath stroke
grestore
% Dictionary
gsave
1 setlinewidth
0 0 0 nodecolor
-723.47 44 48.19 18 ellipse_path stroke
+802.47 44 48.19 18 ellipse_path stroke
0 0 0 nodecolor
14 /Times-Roman set_font
-694.47 40.3 moveto 58 (Dictionary) alignedtext
+773.47 40.3 moveto 58 (Dictionary) alignedtext
grestore
% HTML data->Dictionary
gsave
1 setlinewidth
0 0 0 edgecolor
-newpath 191.55 9.45 moveto
-218.35 5.22 252.78 1 283.64 1 curveto
-283.64 1 283.64 1 607.53 1 curveto
-636.05 1 666.18 12.76 688.43 23.98 curveto
+newpath 270.55 9.45 moveto
+297.35 5.22 331.78 1 362.64 1 curveto
+362.64 1 362.64 1 686.53 1 curveto
+715.05 1 745.18 12.76 767.43 23.98 curveto
stroke
0 0 0 edgecolor
-newpath 686.97 27.17 moveto
-697.45 28.72 lineto
-690.23 20.97 lineto
+newpath 765.97 27.17 moveto
+776.45 28.72 lineto
+769.23 20.97 lineto
closepath fill
1 setlinewidth
solid
0 0 0 edgecolor
-newpath 686.97 27.17 moveto
-697.45 28.72 lineto
-690.23 20.97 lineto
+newpath 765.97 27.17 moveto
+776.45 28.72 lineto
+769.23 20.97 lineto
closepath stroke
0 0 0 edgecolor
14 /Times-Roman set_font
-371.68 4.8 moveto 97 (Description fields) alignedtext
+450.68 4.8 moveto 97 (Description fields) alignedtext
grestore
% Node lists
gsave
1 setlinewidth
0 0 0 nodecolor
-420.18 90 46.29 18 ellipse_path stroke
+499.18 90 46.29 18 ellipse_path stroke
0 0 0 nodecolor
14 /Times-Roman set_font
-392.68 86.3 moveto 55 (Node lists) alignedtext
+471.68 86.3 moveto 55 (Node lists) alignedtext
grestore
% Table rows->Node lists
gsave
1 setlinewidth
0 0 0 edgecolor
-newpath 322.48 58.86 moveto
-338.49 64.02 357.38 70.1 374.21 75.52 curveto
+newpath 401.48 58.86 moveto
+417.49 64.02 436.38 70.1 453.21 75.52 curveto
stroke
0 0 0 edgecolor
-newpath 373.25 78.89 moveto
-383.84 78.62 lineto
-375.39 72.22 lineto
+newpath 452.25 78.89 moveto
+462.84 78.62 lineto
+454.39 72.22 lineto
closepath fill
1 setlinewidth
solid
0 0 0 edgecolor
-newpath 373.25 78.89 moveto
-383.84 78.62 lineto
-375.39 72.22 lineto
+newpath 452.25 78.89 moveto
+462.84 78.62 lineto
+454.39 72.22 lineto
closepath stroke
grestore
% Table rows->Dictionary
gsave
1 setlinewidth
0 0 0 edgecolor
-newpath 334.9 46.66 moveto
-416.38 46.1 578.77 44.99 665.22 44.39 curveto
+newpath 413.9 46.66 moveto
+495.38 46.1 657.77 44.99 744.22 44.39 curveto
stroke
0 0 0 edgecolor
-newpath 665.4 47.89 moveto
-675.38 44.32 lineto
-665.36 40.89 lineto
+newpath 744.4 47.89 moveto
+754.38 44.32 lineto
+744.36 40.89 lineto
closepath fill
1 setlinewidth
solid
0 0 0 edgecolor
-newpath 665.4 47.89 moveto
-675.38 44.32 lineto
-665.36 40.89 lineto
+newpath 744.4 47.89 moveto
+754.38 44.32 lineto
+744.36 40.89 lineto
closepath stroke
0 0 0 edgecolor
14 /Times-Roman set_font
-486.68 48.8 moveto 70 (Original text) alignedtext
+565.68 48.8 moveto 70 (Original text) alignedtext
grestore
% Dawg
gsave
1 setlinewidth
0 0 0 nodecolor
-606.53 90 31.7 18 ellipse_path stroke
+685.53 90 31.7 18 ellipse_path stroke
0 0 0 nodecolor
14 /Times-Roman set_font
-590.03 86.3 moveto 33 (Dawg) alignedtext
+669.03 86.3 moveto 33 (Dawg) alignedtext
grestore
% Node lists->Dawg
gsave
1 setlinewidth
0 0 0 edgecolor
-newpath 466.75 90 moveto
-496.66 90 535.46 90 564.43 90 curveto
+newpath 545.75 90 moveto
+575.66 90 614.46 90 643.43 90 curveto
stroke
0 0 0 edgecolor
-newpath 564.62 93.5 moveto
-574.62 90 lineto
-564.62 86.5 lineto
+newpath 643.62 93.5 moveto
+653.62 90 lineto
+643.62 86.5 lineto
closepath fill
1 setlinewidth
solid
0 0 0 edgecolor
-newpath 564.62 93.5 moveto
-574.62 90 lineto
-564.62 86.5 lineto
+newpath 643.62 93.5 moveto
+653.62 90 lineto
+643.62 86.5 lineto
closepath stroke
grestore
% Dawg->Dictionary
gsave
1 setlinewidth
0 0 0 edgecolor
-newpath 633.04 79.79 moveto
-646.95 74.22 664.53 67.19 680.41 60.83 curveto
+newpath 712.04 79.79 moveto
+725.95 74.22 743.53 67.19 759.41 60.83 curveto
stroke
0 0 0 edgecolor
-newpath 682.04 63.95 moveto
-690.03 56.98 lineto
-679.44 57.45 lineto
+newpath 761.04 63.95 moveto
+769.03 56.98 lineto
+758.44 57.45 lineto
closepath fill
1 setlinewidth
solid
0 0 0 edgecolor
-newpath 682.04 63.95 moveto
-690.03 56.98 lineto
-679.44 57.45 lineto
+newpath 761.04 63.95 moveto
+769.03 56.98 lineto
+758.44 57.45 lineto
closepath stroke
grestore
% Dictionary->q1
gsave
1 setlinewidth
0 0 0 edgecolor
-newpath 771.8 44 moveto
-780.65 44 789.78 44 798.23 44 curveto
+newpath 850.57 44 moveto
+877.59 44 911.01 44 936.03 44 curveto
stroke
0 0 0 edgecolor
-newpath 798.51 47.5 moveto
-808.51 44 lineto
-798.51 40.5 lineto
+newpath 936.2 47.5 moveto
+946.2 44 lineto
+936.2 40.5 lineto
closepath fill
1 setlinewidth
solid
0 0 0 edgecolor
-newpath 798.51 47.5 moveto
-808.51 44 lineto
-798.51 40.5 lineto
+newpath 936.2 47.5 moveto
+946.2 44 lineto
+936.2 40.5 lineto
closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+868.57 47.8 moveto 60 (To crawler) alignedtext
grestore
endpage
showpage
rankdir=LR;
n0 [style=invis]
n9 [shape=doublecircle]
+ n0 -> n1
n1 -> n2 [label="<time>"]
n2 -> n3 [label="','"]
n3 -> n4 [label="'_'"]
%%Creator: graphviz version 2.38.0 (20140413.2041)
%%Title: %3
%%Pages: 1
-%%BoundingBox: 36 36 986 139
+%%BoundingBox: 36 36 1077 91
%%EndComments
save
%%BeginProlog
%%EndSetup
setupLatin1
%%Page: 1 1
-%%PageBoundingBox: 36 36 986 139
+%%PageBoundingBox: 36 36 1077 91
%%PageOrientation: Portrait
0 0 1 beginpage
gsave
-36 36 950 103 boxprim clip newpath
+36 36 1041 55 boxprim clip newpath
1 1 set_scale 0 rotate 40 40 translate
% n0
-% n9
+% n1
gsave
1 setlinewidth
0 0 0 nodecolor
-918.5 72 19.5 19.5 ellipse_path stroke
-1 setlinewidth
-0 0 0 nodecolor
-918.5 72 23.5 23.5 ellipse_path stroke
+118 23.5 27 18 ellipse_path stroke
0 0 0 nodecolor
14 /Times-Roman set_font
-911.5 68.3 moveto 14 (n9) alignedtext
+111 19.8 moveto 14 (n1) alignedtext
grestore
-% n1
+% n0->n1
gsave
1 setlinewidth
+0 0 0 edgecolor
+newpath 54.22 23.5 moveto
+62.55 23.5 71.91 23.5 80.82 23.5 curveto
+stroke
+0 0 0 edgecolor
+newpath 80.97 27 moveto
+90.97 23.5 lineto
+80.97 20 lineto
+closepath fill
+1 setlinewidth
+solid
+0 0 0 edgecolor
+newpath 80.97 27 moveto
+90.97 23.5 lineto
+80.97 20 lineto
+closepath stroke
+grestore
+% n9
+gsave
+1 setlinewidth
+0 0 0 nodecolor
+1009.5 23.5 19.5 19.5 ellipse_path stroke
+1 setlinewidth
0 0 0 nodecolor
-27 72 27 18 ellipse_path stroke
+1009.5 23.5 23.5 23.5 ellipse_path stroke
0 0 0 nodecolor
14 /Times-Roman set_font
-20 68.3 moveto 14 (n1) alignedtext
+1002.5 19.8 moveto 14 (n9) alignedtext
grestore
% n2
gsave
1 setlinewidth
0 0 0 nodecolor
-159 72 27 18 ellipse_path stroke
+250 23.5 27 18 ellipse_path stroke
0 0 0 nodecolor
14 /Times-Roman set_font
-152 68.3 moveto 14 (n2) alignedtext
+243 19.8 moveto 14 (n2) alignedtext
grestore
% n1->n2
gsave
1 setlinewidth
0 0 0 edgecolor
-newpath 54.31 72 moveto
-73.69 72 100.29 72 121.7 72 curveto
+newpath 145.31 23.5 moveto
+164.69 23.5 191.29 23.5 212.7 23.5 curveto
stroke
0 0 0 edgecolor
-newpath 121.73 75.5 moveto
-131.73 72 lineto
-121.73 68.5 lineto
+newpath 212.73 27 moveto
+222.73 23.5 lineto
+212.73 20 lineto
closepath fill
1 setlinewidth
solid
0 0 0 edgecolor
-newpath 121.73 75.5 moveto
-131.73 72 lineto
-121.73 68.5 lineto
+newpath 212.73 27 moveto
+222.73 23.5 lineto
+212.73 20 lineto
closepath stroke
0 0 0 edgecolor
14 /Times-Roman set_font
-72 75.8 moveto 42 (<time>) alignedtext
+163 27.3 moveto 42 (<time>) alignedtext
grestore
% n3
gsave
1 setlinewidth
0 0 0 nodecolor
-258 72 27 18 ellipse_path stroke
+349 23.5 27 18 ellipse_path stroke
0 0 0 nodecolor
14 /Times-Roman set_font
-251 68.3 moveto 14 (n3) alignedtext
+342 19.8 moveto 14 (n3) alignedtext
grestore
% n2->n3
gsave
1 setlinewidth
0 0 0 edgecolor
-newpath 186.25 72 moveto
-196.82 72 209.18 72 220.6 72 curveto
+newpath 277.25 23.5 moveto
+287.82 23.5 300.18 23.5 311.6 23.5 curveto
stroke
0 0 0 edgecolor
-newpath 220.73 75.5 moveto
-230.73 72 lineto
-220.73 68.5 lineto
+newpath 311.73 27 moveto
+321.73 23.5 lineto
+311.73 20 lineto
closepath fill
1 setlinewidth
solid
0 0 0 edgecolor
-newpath 220.73 75.5 moveto
-230.73 72 lineto
-220.73 68.5 lineto
+newpath 311.73 27 moveto
+321.73 23.5 lineto
+311.73 20 lineto
closepath stroke
0 0 0 edgecolor
14 /Times-Roman set_font
-204 75.8 moveto 9 (',') alignedtext
+295 27.3 moveto 9 (',') alignedtext
grestore
% n4
gsave
1 setlinewidth
0 0 0 nodecolor
-360 72 27 18 ellipse_path stroke
+451 23.5 27 18 ellipse_path stroke
0 0 0 nodecolor
14 /Times-Roman set_font
-353 68.3 moveto 14 (n4) alignedtext
+444 19.8 moveto 14 (n4) alignedtext
grestore
% n3->n4
gsave
1 setlinewidth
0 0 0 edgecolor
-newpath 285.01 72 moveto
-296.5 72 310.19 72 322.66 72 curveto
+newpath 376.01 23.5 moveto
+387.5 23.5 401.19 23.5 413.66 23.5 curveto
stroke
0 0 0 edgecolor
-newpath 322.77 75.5 moveto
-332.77 72 lineto
-322.77 68.5 lineto
+newpath 413.77 27 moveto
+423.77 23.5 lineto
+413.77 20 lineto
closepath fill
1 setlinewidth
solid
0 0 0 edgecolor
-newpath 322.77 75.5 moveto
-332.77 72 lineto
-322.77 68.5 lineto
+newpath 413.77 27 moveto
+423.77 23.5 lineto
+413.77 20 lineto
closepath stroke
0 0 0 edgecolor
14 /Times-Roman set_font
-303 75.8 moveto 12 ('_') alignedtext
+394 27.3 moveto 12 ('_') alignedtext
grestore
% n5
gsave
1 setlinewidth
0 0 0 nodecolor
-490 72 27 18 ellipse_path stroke
+581 23.5 27 18 ellipse_path stroke
0 0 0 nodecolor
14 /Times-Roman set_font
-483 68.3 moveto 14 (n5) alignedtext
+574 19.8 moveto 14 (n5) alignedtext
grestore
% n4->n5
gsave
1 setlinewidth
0 0 0 edgecolor
-newpath 387.21 72 moveto
-406.11 72 431.85 72 452.72 72 curveto
+newpath 478.21 23.5 moveto
+497.11 23.5 522.85 23.5 543.72 23.5 curveto
stroke
0 0 0 edgecolor
-newpath 452.82 75.5 moveto
-462.82 72 lineto
-452.82 68.5 lineto
+newpath 543.82 27 moveto
+553.82 23.5 lineto
+543.82 20 lineto
closepath fill
1 setlinewidth
solid
0 0 0 edgecolor
-newpath 452.82 75.5 moveto
-462.82 72 lineto
-452.82 68.5 lineto
+newpath 543.82 27 moveto
+553.82 23.5 lineto
+543.82 20 lineto
closepath stroke
0 0 0 edgecolor
14 /Times-Roman set_font
-405 75.8 moveto 40 (<date>) alignedtext
+496 27.3 moveto 40 (<date>) alignedtext
grestore
% n6
gsave
1 setlinewidth
0 0 0 nodecolor
-592 72 27 18 ellipse_path stroke
+683 23.5 27 18 ellipse_path stroke
0 0 0 nodecolor
14 /Times-Roman set_font
-585 68.3 moveto 14 (n6) alignedtext
+676 19.8 moveto 14 (n6) alignedtext
grestore
% n5->n6
gsave
1 setlinewidth
0 0 0 edgecolor
-newpath 517.01 72 moveto
-528.5 72 542.19 72 554.66 72 curveto
+newpath 608.01 23.5 moveto
+619.5 23.5 633.19 23.5 645.66 23.5 curveto
stroke
0 0 0 edgecolor
-newpath 554.77 75.5 moveto
-564.77 72 lineto
-554.77 68.5 lineto
+newpath 645.77 27 moveto
+655.77 23.5 lineto
+645.77 20 lineto
closepath fill
1 setlinewidth
solid
0 0 0 edgecolor
-newpath 554.77 75.5 moveto
-564.77 72 lineto
-554.77 68.5 lineto
+newpath 645.77 27 moveto
+655.77 23.5 lineto
+645.77 20 lineto
closepath stroke
0 0 0 edgecolor
14 /Times-Roman set_font
-535 75.8 moveto 12 ('_') alignedtext
+626 27.3 moveto 12 ('_') alignedtext
grestore
% n7
gsave
1 setlinewidth
0 0 0 nodecolor
-692 72 27 18 ellipse_path stroke
+783 23.5 27 18 ellipse_path stroke
0 0 0 nodecolor
14 /Times-Roman set_font
-685 68.3 moveto 14 (n7) alignedtext
+776 19.8 moveto 14 (n7) alignedtext
grestore
% n6->n7
gsave
1 setlinewidth
0 0 0 edgecolor
-newpath 619 72 moveto
-629.97 72 642.92 72 654.79 72 curveto
+newpath 710 23.5 moveto
+720.97 23.5 733.92 23.5 745.79 23.5 curveto
stroke
0 0 0 edgecolor
-newpath 654.87 75.5 moveto
-664.87 72 lineto
-654.87 68.5 lineto
+newpath 745.87 27 moveto
+755.87 23.5 lineto
+745.87 20 lineto
closepath fill
1 setlinewidth
solid
0 0 0 edgecolor
-newpath 654.87 75.5 moveto
-664.87 72 lineto
-654.87 68.5 lineto
+newpath 745.87 27 moveto
+755.87 23.5 lineto
+745.87 20 lineto
closepath stroke
0 0 0 edgecolor
14 /Times-Roman set_font
-637 75.8 moveto 10 ('-') alignedtext
+728 27.3 moveto 10 ('-') alignedtext
grestore
% n8
gsave
1 setlinewidth
0 0 0 nodecolor
-794 72 27 18 ellipse_path stroke
+885 23.5 27 18 ellipse_path stroke
0 0 0 nodecolor
14 /Times-Roman set_font
-787 68.3 moveto 14 (n8) alignedtext
+878 19.8 moveto 14 (n8) alignedtext
grestore
% n7->n8
gsave
1 setlinewidth
0 0 0 edgecolor
-newpath 719.01 72 moveto
-730.5 72 744.19 72 756.66 72 curveto
+newpath 810.01 23.5 moveto
+821.5 23.5 835.19 23.5 847.66 23.5 curveto
stroke
0 0 0 edgecolor
-newpath 756.77 75.5 moveto
-766.77 72 lineto
-756.77 68.5 lineto
+newpath 847.77 27 moveto
+857.77 23.5 lineto
+847.77 20 lineto
closepath fill
1 setlinewidth
solid
0 0 0 edgecolor
-newpath 756.77 75.5 moveto
-766.77 72 lineto
-756.77 68.5 lineto
+newpath 847.77 27 moveto
+857.77 23.5 lineto
+847.77 20 lineto
closepath stroke
0 0 0 edgecolor
14 /Times-Roman set_font
-737 75.8 moveto 12 ('_') alignedtext
+828 27.3 moveto 12 ('_') alignedtext
grestore
% n8->n9
gsave
1 setlinewidth
0 0 0 edgecolor
-newpath 821.28 72 moveto
-839.87 72 864.93 72 884.81 72 curveto
+newpath 912.28 23.5 moveto
+930.87 23.5 955.93 23.5 975.81 23.5 curveto
stroke
0 0 0 edgecolor
-newpath 884.96 75.5 moveto
-894.96 72 lineto
-884.96 68.5 lineto
+newpath 975.96 27 moveto
+985.96 23.5 lineto
+975.96 20 lineto
closepath fill
1 setlinewidth
solid
0 0 0 edgecolor
-newpath 884.96 75.5 moveto
-894.96 72 lineto
-884.96 68.5 lineto
+newpath 975.96 27 moveto
+985.96 23.5 lineto
+975.96 20 lineto
closepath stroke
0 0 0 edgecolor
14 /Times-Roman set_font
-839 75.8 moveto 38 (<title>) alignedtext
+930 27.3 moveto 38 (<title>) alignedtext
grestore
endpage
showpage