Restructure chapters, delete a bunch of words, add more words, do some things, panic...
authorSam Moore <[email protected]>
Wed, 8 Oct 2014 14:36:03 +0000 (22:36 +0800)
committerSam Moore <[email protected]>
Wed, 8 Oct 2014 14:36:03 +0000 (22:36 +0800)
I can see where I want it to go but I can't see how I can get it there.

82 files changed:
Makefile
chapters/Background.tex
chapters/Background/ArbitraryPrecision.tex [new file with mode: 0644]
chapters/Background/CoordinateSystems.tex [new file with mode: 0644]
chapters/Background/FixedPoint.tex [new file with mode: 0644]
chapters/Background/FloatingPointOnTheGPU.tex [new file with mode: 0644]
chapters/Background/Floats.tex [new file with mode: 0644]
chapters/Background/Floats/Definition.tex [new file with mode: 0644]
chapters/Background/Floats/Operations.tex [new file with mode: 0644]
chapters/Background/Floats/PrecisionIssues.tex [new file with mode: 0644]
chapters/Background/Floats/Visualisation.tex [new file with mode: 0644]
chapters/Background/GMP.tex [new file with mode: 0644]
chapters/Background/Overview.tex [new file with mode: 0644]
chapters/Background/RasterAndVectorGraphics.tex [new file with mode: 0644]
chapters/Background/Rationals.tex [new file with mode: 0644]
chapters/Background/Rendering.tex [new file with mode: 0644]
chapters/Background/Rendering/BezierSplines.tex [new file with mode: 0644]
chapters/Background/Rendering/Compositing.tex [new file with mode: 0644]
chapters/Background/Rendering/Fonts.tex [new file with mode: 0644]
chapters/Background/Rendering/Overview.tex [new file with mode: 0644]
chapters/Background/Rendering/StraightLines.tex [new file with mode: 0644]
chapters/Background/Standards.tex [new file with mode: 0644]
chapters/Background/Standards/DOM.tex [new file with mode: 0644]
chapters/Background/Standards/Interpreted.tex [new file with mode: 0644]
chapters/Background/Standards/Overview.tex [new file with mode: 0644]
chapters/Background/Standards/Precision.tex [new file with mode: 0644]
chapters/Background_Compositing.tex [deleted file]
chapters/Background_DOM.tex [deleted file]
chapters/Background_Fonts.tex [deleted file]
chapters/Background_Interpreted.tex [deleted file]
chapters/Background_Lines.tex [deleted file]
chapters/Background_Raster-vs-Vector.tex [deleted file]
chapters/Background_Spline.tex [deleted file]
chapters/Conclusion.tex
chapters/Introduction.tex
chapters/Process.tex [new file with mode: 0644]
chapters/Process/DesignProcess.tex [new file with mode: 0644]
chapters/Process/Measurements.tex [new file with mode: 0644]
chapters/Process/SoftwareOverview.tex [new file with mode: 0644]
chapters/Process/Transformations.tex [new file with mode: 0644]
chapters/Progress/Progress.tex [new file with mode: 0644]
chapters/Proposal.tex [deleted file]
chapters/Results.tex [new file with mode: 0644]
figures/controlpanel_screenshot.png [new file with mode: 0644]
figures/fox-vector+grid.png [new file with mode: 0644]
figures/fox-vector_cumulative_after_transforms.png [new file with mode: 0644]
figures/fox-vector_cumulative_before_transforms.png [new file with mode: 0644]
figures/fox-vector_cumulative_relative_to_path.png [new file with mode: 0644]
figures/fox-vector_cumulative_relative_to_path_GMPrat.png [new file with mode: 0644]
figures/fox-vector_face_with_bezbounds.png [new file with mode: 0644]
figures/fox-vector_highzoom1.png [new file with mode: 0644]
figures/fox-vector_screenshot1.png [new file with mode: 0644]
figures/fox-vector_screenshot2.png [new file with mode: 0644]
figures/fox-vector_screenshot2_300dpi.png [new file with mode: 0644]
figures/gpufloats.svg [new file with mode: 0644]
figures/shady-the-fox.png [new file with mode: 0644]
figures/who-the-hell-needs-antialiasing-anyway.png [new file with mode: 0644]
meta/Abstract.tex
meta/Proposal.tex [new file with mode: 0644]
meta/Titlepage.tex
notes.nb [new file with mode: 0644]
presentation.nav [new file with mode: 0644]
presentation.snm [new file with mode: 0644]
presentation/Logos/WAMSI.png [new file with mode: 0644]
presentation/Logos/uwa.png [new file with mode: 0644]
presentation/arrow.pdf [new file with mode: 0644]
presentation/beamerthemeuwa_eng.sty [new file with mode: 0644]
presentation/bezier_to_font.pdf [new file with mode: 0644]
presentation/example_uwa_eng.nav [new file with mode: 0644]
presentation/example_uwa_eng.pdf [new file with mode: 0644]
presentation/example_uwa_eng.snm [new file with mode: 0644]
presentation/presentation.nav [new file with mode: 0644]
presentation/presentation.pdf [new file with mode: 0644]
presentation/presentation.snm [new file with mode: 0644]
presentation/presentation.tex [new file with mode: 0644]
presentation/turtles.pdf [new file with mode: 0644]
presentation/uwa_eng.png [new file with mode: 0644]
presentation/uwa_eng_title.png [new file with mode: 0644]
test [new file with mode: 0644]
thesis.pdf
thesis.tex
wordcount.sh [new file with mode: 0755]

index 788633c..bfbc00e 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -18,9 +18,9 @@ $(NAME).pdf : $(NAME).tex
        $(TEX) --shell-escape $(NAME)
        $(TEX) --shell-escape $(NAME)
 
-       silent evince $(NAME).pdf
+       silent atril $(NAME).pdf
        rm -f *.bbl *.log *.toc *.lof *.blg *.lot *.aux *.out
-
+       ./wordcount.sh | sed 's/\t//g' | sort -k3 -n -r
 
 clean : 
        rm -f $(NAME).pdf
index 3cf44a8..10852bb 100644 (file)
 \chapter{Literature Review}\label{Background}
 
-The first part of this chapter will be devoted to documents themselves, including: the representation and displaying of graphics primitives, and how collections of these primitives are represented in document formats, focusing on widely used standards.
+%\section{Overview}
+\input{chapters/Background/Overview}
+\section{Raster and Vector Graphics}
+\input{chapters/Background/RasterAndVectorGraphics}
+\section{Rendering Vector Primitives}
+\input{chapters/Background/Rendering}
+\section{Coordinate Systems and Transformations}
+\input{chapters/Background/CoordinateSystems}
+\section{Precision Specified by Document Standards}
+\input{chapters/Background/Standards}
 
-We will find that although there has been a great deal of research into the rendering, storing, editing, manipulation, and extension of document formats, modern standards are content to specify at best single precision IEEE-754 floating point arithmetic.
 
-The research on arbitrary precision arithmetic applied to documents is rather sparse; however arbitrary precision arithmetic itself is a very active field of research. Therefore, remainder of this chapter will be devoted to considering fixed precision floating point numbers as specified by the IEEE-754 standard, possible limitations in precision, and alternative number representations for increased or arbitrary precision arithmetic.
 
-In Chapter \ref{Progress}, we will discuss our findings so far with regards to arbitrary precision arithmetic applied to document formats, and expand upon the goals outlined in Chapture \ref{Proposal}.
+\section{Fixed Point and Integer Number Representations}
+\input{chapters/Background/FixedPoint}
+\section{Floating Point Number Representations}
+\input{chapters/Background/Floats}
+\section{Rational Number Representations}
+\input{chapters/Background/Rationals}
 
-\section{Raster and Vector Images}\label{Raster and Vector Images}
-\input{chapters/Background_Raster-vs-Vector}
 
-\section{Rendering Vector Images}\label{Rasterising Vector Images}
 
-Hearn and Baker's textbook ``Computer Graphics''\cite{computergraphics2} gives a comprehensive overview of graphics from physical display technologies through fundamental drawing algorithms to popular graphics APIs. This section will examine algorithms for drawing two dimensional geometric primitives on raster displays as discussed in ``Computer Graphics'' and the relevant literature. This section is by no means a comprehensive survey of the literature but intends to provide some idea of the computations which are required to render a document.
-
-It is of some historical significance that vector display devices were popular during the 70s and 80s, and papers oriented towards drawing on these devices can be found\cite{brassel1979analgorithm}. Whilst curves can be drawn at high resolution on vector displays, a major disadvantage was shading\cite{lane1983analgorithm}; by the early 90s the vast majority of computer displays were raster based\cite{computergraphics2}.
-
-\subsection{Straight Lines}\label{Straight Lines}
-\input{chapters/Background_Lines}
-
-\subsection{Spline Curves and B{\'e}ziers}\label{Spline Curves}
-\input{chapters/Background_Spline}
-
-\subsection{Font Glyphs}\label{Font Rendering}
-\input{chapters/Background_Fonts}
-
-%\subsection{Shading}\label{Shading}
-
-
-%\cite{brassel1979analgorithm}; %\cite{lane1983analgorithm}.
-
-\subsection{Compositing}\label{Compositing}
-
-%So far we have discussed techniques for rendering vector graphics primitives in isolation, with no regard to the overall structure of a document which may contain many thousands of primitives. A straight forward approach would be to render all elements sequentially to the display, with the most recently drawn pixels overwriting lower elements. Such an approach is particularly inconvenient for anti-aliased images where colours must appear to smoothly blur between the edge of a primitive and any drawn underneath it.
-
-Colour raster displays are based on an additive red-green-blue $(r,g,b)$ colour representation which matches the human eye's response to light\cite{computergraphics2}. In 1984, Porter and Duff introduced a fourth colour channel for rasterised images called the ``alpha'' channel, analogous to the transparency of a pixel\cite{porter1984compositing}. In compositing models, elements can be rendered seperately, with the four colour channels of successively drawn elements being combined according to one of several possible operations.
-
-In the ``painter's model'' as described by the SVG standard the ``over'' operation is used when rendering one primitive over another\cite{svg2011-1.1}.
-Given an existing pixel $P_1$ with colour values $(r_1, g_1, b_1, a_1)$ and a pixel $P_2$ with colours $(r_2, g_2, b_2, a_2)$ to be painted over $P_1$, the resultant pixel $P_T$ has colours given by:
-\begin{align}
-       a_T &= 1 - (1-a_1)(1-a_2) \\
-       r_T &= (1 - a_2)r_1 + r_2 \quad \text{(similar for $g_T$ and $b_T$)}
-\end{align}
-It should be apparent that alpha values of $1$ correspond to an opaque pixel; that is, when $a_2 = 1$ the resultant pixel $P_T$ is the same as $P_2$.
-When the final pixel is actually drawn on an rgb display, the $(r, g, b)$ components are $(r_T/a_T, g_T/a_T, b_T/a_T)$.
-
-The PostScript and PDF standards, as well as the OpenGL API also use a painter's model for compositing. However, PostScript does not include an alpha channel, so $P_T = P_2$ always\cite{plrm}. Figure \ref{SVG} illustrates the painter's model for partially transparent shapes as they would appear in both the SVG and PDF models.
-
-\subsection{Rasterisation on the CPU and GPU}
-
-Traditionally, vector images have been rasterized by the CPU before being sent to a specialised Graphics Processing Unit (GPU) for drawing\cite{computergraphics2}. Rasterisation of simple primitives such as lines and triangles have been supported directly by GPUs for some time through the OpenGL standard\cite{openglspec}. However complex shapes (including those based on B{\'e}zier curves such as font glyphs) must either be rasterised entirely by the CPU or decomposed into simpler primitives that the GPU itself can directly rasterise. There is a significant body of research devoted to improving the performance of rendering such primitives using the latter approach, mostly based around the OpenGL\cite{openglspec} API\cite{robart2009openvg, leymarie1992fast, frisken2000adaptively, green2007improved, loop2005resolution, loop2007rendering}. Recently Mark Kilgard of the NVIDIA Corporation described an extension to OpenGL for NVIDIA GPUs capable of drawing and shading vector paths\cite{kilgard2012gpu,kilgard300programming}. From this development it seems that rasterization of vector graphics may eventually become possible upon the GPU.
-
-It is not entirely clear how well supported the IEEE-754 standard for floating point computation is amongst GPUs\footnote{Informal technical articles are abundant on the internet --- Eg: Regarding the Dolphin Wii GPU Emulator: \url{https://dolphin-emu.org/blog} (accessed 2014-05-22)}. Although the OpenGL API does use IEEE-754 number representations, research by Hillesland and Lastra in 2004 suggested that many GPUs were not internally compliant with the standard\cite{hillesland2004paranoia}. %Arbitrary precision arithmetic, is provided by many software libraries for CPU based calculations
-
- \pagebreak
-\section{Document Representations}\label{Document Representations}
-
-The representation of information, particularly for scientific purposes, has changed dramatically over the last few decades. For example, Brassel's 1979 paper referenced earlier\cite{brassel1979analgorithm} has been produced on a mechanical type writer. Although the paper discusses an algorithm for shading on computer displays, the figures illustrating this algorithm have not been generated by a computer, but drawn by Brassel's assistant. In contrast, modern papers such as Barnes et. al's 2013 paper on embedding 3d images in PDF documents\cite{barnes2013embedding} can themselves be an interactive proof of concept.
-
-Haye's 2012 article ``Pixels or Perish'' discusses the recent history and current state of the art in documents for scientific publications\cite{hayes2012pixels}. Hayes argued that there are currently two different approaches to representing a document: As a sequence of static sheets of paper (Programmed Documents) or as a dynamic and interactive way to convey information, using the Document Object Model. We will now explore these two approaches and the extent to which they overlap.
-
-
-\subsection{Programmed Documents}
-\input{chapters/Background_Interpreted}
-
-\pagebreak
-\subsection{Document Object Model}\label{Document Object Model}
-\input{chapters/Background_DOM}
-
-\subsection{The Portable Document Format}
-
-Adobe's Portable Document Format (PDF) is currently used almost universally for sharing documents; the ability to export or print to PDF can be found in most graphical document editors and even some plain text editors\cite{cheng2002portable}. 
-
-Hayes describes PDF as ``... essentially 'flattened' PostScript; it’s what’s left when you remove all the procedures and loops in a program, replacing them with sequences of simple drawing commands.''\cite{hayes2012pixels}. Consultation of the PDF 1.7 standard shows that this statement does not a give a complete picture --- despite being based on the Adobe PostScript model of a document as a series of ``pages'' to be printed by executing sequential instructions, from version 1.5 the PDF standard began to borrow some ideas from the Document Object Model. For example, interactive elements such as forms may be included as XHTML objects and styled using CSS. ``Actions'' are objects used to modify the data structure dynamically. In particular, it is possible to include Javascript Actions. Adobe defines the API for Javascript actions seperately to the PDF standard\cite{js_3d_pdf}. There is some evidence in the literature of attempts to exploit these features, with mixed success\cite{barnes2013embedding, hayes2012pixels}.
-
-%\subsection{Scientific Computation Packages}
-
-
-\section{Precision required by Document Formats}
-
-We briefly summarise the requirements of the standards discussed so far in regards to the precision of mathematical operations.
-
-\subsection{PostScript}
-The PostScript reference describes a ``Real'' object for representing coordinates and values as follows: ``Real objects approximate mathematical real numbers within a much larger interval, but with limited precision; they are implemented as floating-point numbers''\cite{plrm}. There is no reference to the precision of mathematical operations, but the implementation limits \emph{suggest} a range of $\pm10^{38}$ ``approximate'' and the smallest values not rounded to zero are $\pm10^{-38}$ ``approximate''.
-
-\subsection{PDF}
-PDF defines ``Real'' objects in a similar way to PostScript, but suggests a range of $\pm3.403\times10^{38}$ and smallest non-zero values of $\pm1.175\times10^{38}$\cite{pdfref17}. A note in the PDF 1.7 manual mentions that Acrobat 6 now uses IEEE-754 single precision floats, but ``previous versions used 32-bit fixed point numbers'' and ``... Acrobat 6 still converts floating-point numbers to fixed point for some components''.
-
-\subsection{{\TeX} and METAFONT}
-
-In ``The METAFONT book'' Knuth appears to describe coordinates as fixed point numbers: ``The computer works internally with coordinates that are integer multiples of $\frac{1}{65536} \approx 0.00002$ of the width of a pixel''\cite{knuth1983metafont}. \footnote{This corresponds to using $16$ bits for the fractional component of a fixed point representation} There is no mention of precision in ``The {\TeX} book''. In 2007 Beebe claimed that {\TeX} uses a $14.16$ fixed point encoding, and that this was due to the lack of standardised floating point arithmetic on computers at the time; a problem that the IEEE-754 was designed to solve\cite{beebe2007extending}. Beebe also suggested that {\TeX} and METAFONT could now be modified to use IEEE-754 arithmetic.
-
-\subsection{SVG}
-
-The SVG standard specifies a minimum precision equivelant to that of ``single precision floats'' (presumably referring to IEEE-754) with a range of \verb/-3.4e+38F/ to \verb/+3.4e+38F/, and states ``It is recommended that higher precision floating point storage and computation be performed on operations such as
-coordinate system transformations to provide the best possible precision and to prevent round-off errors.''\cite{svg2011-1.1} An SVG Viewer may refer to itself as ``High Quality'' if it uses a minimum of ``double precision'' floats.
-
-\subsection{Javascript}
-%We include Javascript here due to its relation with the SVG, HTML5 and PDF standards.
-According to the EMCA-262 standard, ``The Number type has exactly 18437736874454810627 (that is, $2^64-^53+3$) values, 
-representing the double-precision 64-bit format IEEE 754 values as specified in the IEEE Standard for Binary Floating-Point Arithmetic''\cite{ecma-262}. 
-The Number type does differ slightly from IEEE-754 in that there is only a single valid representation of ``Not a Number'' (NaN). The EMCA-262 does not define an ``integer'' representation.
-       
-
-
-\section{Number Representations}\label{Number Representations}
-
-\subsection{Exact Representations}
-
-Consider a value of $7.25 = 2^2 + 2^1 + 2^0 + 2^{-2}$. In binary (base 2), this could be written as $111.01_2$ Such a value would require 5 binary digits (bits) of memory to represent exactly in computer hardware. Some values, for example $7.3$ can not be represented exactly in one base (decimal) but not another; in binary the sequence $111.010\text{...}_2$ will never terminate. A rational value such as $\frac{7}{3}$ could not be represented exactly in any base, but could be represented by the combination of a numerator $7 = 111_2$ and denominator $3 = 11_2$. Lastly, some values such as $e \approx 2.718\text{...}$ can only be expressed exactly using a symbolical system --- in this case as the result of an infinite summation $e = \displaystyle\sum_n^{\infty} 1/n!$
-
-Modern computer hardware typically supports integer and floating-point number representations and operations. Due to physical limitations, the size of these representations is limited; this is the fundamental source of both limits on range and precision in computer based calculations. 
-
-\subsection{Floating Point Definitions}
-
-Whilst a Fixed Point representation keeps the ``point'' at the same position in a string of bits, Floating point representations can be thought of as analogous to scientific notation; an ``exponent'' and fixed point value are encoded, with multiplication by the exponent moving the position of the point.
-
-A floating point number $x$ is commonly represented by a tuple of values $(s, e, m)$ in base $B$ as\cite{HFP, ieee2008-754}: $x = (-1)^{s} \times m \times B^{e}$
-
-Where $s$ is the sign and may be zero or one, $m$ is commonly called the ``mantissa'' and $e$ is the exponent. Whilst $e$ is an integer in some range $\pm e_max$, the mantissa $m$ is a fixed point value in the range $0 < m < B$. 
-
-
-The choice of base $B = 2$ in the original IEEE-754 standard matches the nature of modern hardware. It has also been found that this base in general gives the smallest rounding errors\cite{HFP}. Early computers had in fact used a variety of representations including $B=3$ or even $B=7$\cite{goldman1991whatevery}, and the revised IEEE-754 standard specifies a decimal representation $B = 10$ intended for use in financial applications\cite{ieee754std2008}\footnote{Eg: The smallest valid unit of currency \$0.01 could not be represented exactly in base 2}. From now on we will restrict ourselves to considering base 2 floats.
-
-The IEEE-754 encoding of $s$, $e$ and $m$ requires a fixed number of continuous bits dedicated to each value. Originally two encodings were defined: binary32 and binary64. $s$ is always encoded in a single leading bit, whilst (8,23) and (11,53) bits are used for the (exponent, mantissa) encodings respectively. 
-
-The encoding of $m$ in the IEEE-754 standard is not exactly equivelant to a fixed point value. By assuming an implicit leading bit (ie: restricting $1 \leq m < 2$) except for when $e = 0$, floating point values are gauranteed to have a unique representations; these representations are said to be ``normalised''. When $e = 0$ the leading bit is not implied; these representations are called ``denormals'' because multiple representations may map to the same real value. The idea of using an implicit bit appears to have been considered by Goldberg as early as 1967\cite{goldbern1967twentyseven}.
-
-Figure \ref{floats.pdf}\footnote{In a digital PDF viewer we suggest increasing the zoom level --- the graphs were created from SVG images} shows the positive real numbers which can be represented exactly by an 8 bit floating point number encoded in the IEEE-754 format\footnote{Not quite; we are ignoring the IEEE-754 definitions of NaN and Infinity for simplicity}, and the distance between successive floating point numbers. We show two encodings using (1,2,5) and (1,3,4) bits to encode (sign, exponent, mantissa) respectively. For each distinct value of the exponent, the successive floating point representations lie on a straight line with constant slope. As the exponent increases, larger values are represented, but the distance between successive values increases; this can be seen on the right. The marked single point discontinuity at \verb/0x10/ and \verb/0x20/ occur when $e$ leaves the denormalised region and the encoding of $m$ changes. We have also plotted a fixed point representation for comparison; fixed point and integer representations appear as straight lines - the distance between points is always constant.
-
-The earlier example $7.25$ would be converted to a (1,3,4) floating point representation as follows:
-\begin{enumerate}
-       \item Determine the fixed point representation $7.25 = 111.01_2$
-       \item Determine the sign bit; in this case $s = 0$
-       \item Calculate the exponent by shifting the point $111.01_2 = 1.1101_2 \times 2^2 \implies e = 2 = 10_2$
-       \item Determine the exponent encoding; in IEEE-754 equal to the number of exponent bits is added so $e_{enc} = e+3 = 5 = 101_2$
-       \item Remove the implicit bit if the encoded exponent $\neq 0$; $1.1101_2 \to .1101_2$
-       \item Combine the three bit strings$0,101,1101$
-       \item The final encoding is $01011101 \equiv \text{0x5D}$
-\end{enumerate}
-This particular example can be encoded exactly; however as there are an infinite number of real values and only a finite number of floats, in general a value must be $7.26$ must be rounded or truncated at Step 3. 
-
-
-\begin{figure}[H]
-       \centering
-\begin{minipage}[t]{0.45\textwidth}
-       \begin{figure}[H]
-               \centering
-               \includegraphics[width=1\textwidth]{figures/floats.pdf} \\
-       \end{figure}
-\end{minipage}
-\begin{minipage}[t]{0.45\textwidth}
-       \begin{figure}[H]
-               \centering
-               \includegraphics[width=1\textwidth]{figures/floats_diff.pdf} \\
-       \end{figure}
-\end{minipage}
-       \caption{8 bit float and fixed point representations a) As mapped to real values b) The distance between each representation}\label{floats.pdf}
-\end{figure}
-
-
-
-\subsection{Precision and Rounding}\label{Precision and Rounding}
-
-Real values which cannot be represented exactly in a floating point representation must be rounded to the nearest floating point value. The results of a floating point operation will in general be such values and thus there is a rounding error possible in any floating point operation. Referring to Figure \ref{floats.pdf} it can be seen that the largest possible rounding error is half the distance between successive floats; this means that rounding errors increase as the value to be represented increases.
-
-Goldberg's assertively titled 1991 paper ``What Every Computer Scientist Needs to Know about Floating Point Arithmetic''\cite{goldberg1991whatevery} provides a comprehensive overview of issues in floating point arithmetic and relates these to requirements of the IEEE-754 1985 standard\cite{ieee754std1985}. More recently, after the release of the revised IEEE-754 standard in 2008\cite{ieee754std2008}, a textbook ``Handbook Of Floating Point Arithmetic'' has been published which provides a thourough review of literature relating to floating point arithmetic in both software and hardware\cite{HFP}.
-
-William Kahan, one of the architects of the IEEE-754 standard in 1984 and a contributor to its revision in 2010, has also published many articles on his website explaining the more obscure features of the IEEE-754 standard and calling out software which fails to conform to the standard\footnote{In addition to encodings and acceptable rounding behaviour, the standard also specifies ``exceptions'' --- mechanisms by which a program can detect and report an error such as division by zero}\cite{kahanweb, kahan1996ieee754}, as well as examples of the limitations of floating point computations\cite{kahan2007wrong}. 
-
-In  Figure \ref{calculatepi.pdf} we show the effect of accumulated rounding errors on the computation of $\pi$ through a numerical integration\footnote{This is not intended to be an example of a good way to calculate $\pi$} using 32 bit ``single precision'' floats and 64 bit ``double precision'' floats.
-
-\begin{figure}[H]
-       \centering
-       \includegraphics[width=0.6\textwidth]{figures/calculatepi.pdf}
-       \caption{Numerical calculation of $\pi$}\label{calculatepi.pdf}
-\end{figure}
-
-\subsection{Floating Point Operations}
-
-Floating point operations can in principle be performed using integer operations, but specialised Floating Point Units (FPUs) are an almost universal component of modern processors\cite{kelley1997acmos}. The improvement of FPUs remains highly active in several areas including: efficiency\cite{seidel2001onthe}; accuracy of operations\cite{dieter2007lowcost}; and even the adaptation of algorithms originally used in software, such as Kahan's Fast2Sum algorithm\cite{kadric2013accurate}. 
-
-In 1971 Dekker formalised a series of algorithms including the Fast2Sum method for calculating the correction term due to accumulated rounding errors\cite{dekker1971afloating}. The exact result of $x + y$ may be expressed in terms of floating point operations with rounding as follows:
-\begin{align*}
-       z = \text{RN}(x + y) &\quad w = \text{RN}(z - x) \\
-       zz = \text{RN}(y - w) &\quad \implies x + y = zz
-\end{align*}
-
-\subsection{Arbitrary Precision Floating Point Numbers}
-
-Arbitrary precision floating point numbers are implemented in a variety of software libraries which will dynamically allocate extra bits for the exponent or mantissa as required. An example is the GNU MPFR library discussed by Fousse in 2007\cite{fousse2007mpfr}. Although many arbitrary precision libraries already existed, MPFR intends to be fully compliant with some of the more obscure IEEE-754 requirements such as rounding rules and exceptions. 
-
-As we have seen, it is trivial to find real numbers that would require an infinite number of bits to represent exactly. Implementations of ``arbitrary'' precision must carefully determine at what point rounding should occur so as to balance performance with memory usage.
 
diff --git a/chapters/Background/ArbitraryPrecision.tex b/chapters/Background/ArbitraryPrecision.tex
new file mode 100644 (file)
index 0000000..d43b470
--- /dev/null
@@ -0,0 +1,3 @@
+Modern computer hardware typically supports integer and floating-point number representations and operations. Due to physical limitations, the size of these representations is limited; this places the fundamental limit on both on range and precision in computer based calculations. 
+
+
diff --git a/chapters/Background/CoordinateSystems.tex b/chapters/Background/CoordinateSystems.tex
new file mode 100644 (file)
index 0000000..147a684
--- /dev/null
@@ -0,0 +1,46 @@
+Basic vector primitives composed of B{\'e}ziers may be rendered using only integer operations, once the starting and ending positions are rounded to the nearest pixel.
+
+However, a complete document will contain many such primitives which in general cannot all be shown on a display at once. A ``View'' rectangle can be defined to represent the size of the display relative to the document. To interact with the document a user can change this view through scaling or translating with the mouse\cite{}.
+
+Primitives which are contained within the view rectangle will be visible on the display. This involves the transformation from coordinates within the document to relative coordinates within the view rectangle as illustrated in Figure \ref{}. A point $(X,Y)$ in the document will transform to a point $(x,y)$ in the view by:
+\begin{align}
+       X = \frac{x - v_x}{v_w} &\quad\quad Y = \frac{y - v_y}{v_h}\label{view-transformation}
+\end{align}
+Where $(v_x,v_y)$ are the coordinates of the top left corner and $(v_w,v_h)$ are the dimensions of the view rectangle.
+
+
+The transformation may also be written as a 3x3 matrix $\matx{V}$ if we introduce a third coordinate $Z = 1$
+\begin{align}
+       \matx{X} &= \matx{V} \matx{x} \\
+       \left( \begin{array}{c} X \\ Y \\ 1 \end{array}\right) &= 
+       \left( \begin{array}{ccc} 
+               \frac{1}{v_w} & 0 & \frac{v_x}{v_w} \\
+               0 & \frac{1}{v_h} & \frac{v_y}{v_h} \\
+               0 & 0 & 1 
+       \end{array}\right) 
+       \left( \begin{array}{c} x \\ y \\ 1 \end{array}\right)\label{view-transformation-matrix}
+\end{align}
+
+
+
+Moving the mouse\footnote{or on a touch screen, swiping the screen} by a distance $(\Delta x, \Delta y)$ relative to the size of the view should translate it by the same amount\cite{}:
+\begin{align}
+       v_x \to v_x + \Delta x \\
+       v_y \to v_y + \Delta y
+\end{align}
+
+The document can be scaled by a factor of $s$ about a point $(x_0,y_0)$ specified relative to the view (such as the position of the mouse cursor)\cite{}:
+\begin{align}
+       v_x \to v_x + x_0 v_w(1 - s) \\
+       v_y \to v_y + y_0 v_h(1 - s) \\
+       v_w \to s v_w \\
+       v_h \to s v_h
+\end{align}
+
+The effect of this transformation is that, measured relative to the view rectangle, the distance of primitives with coordinates $(x, y)$ to the point $(x_0, y_0)$ will decrease by a factor of $s$. For $s < 1$ the operation is ``zooming out'' and for $s > 1$, ``zooming in''.
+
+%TODO List
+% Mention that these transformations affect precision more than eg: drawing a line
+% Discuss floating point errors that could occur?
+% Convert operations to Matrix form, more standard
+% Cite some UI paper or something
diff --git a/chapters/Background/FixedPoint.tex b/chapters/Background/FixedPoint.tex
new file mode 100644 (file)
index 0000000..707dab2
--- /dev/null
@@ -0,0 +1,21 @@
+A positive real number $z$ may be written as the sum of smaller integers ``digits'' $d_i < z$ multiplied by powers of a base $\beta$. 
+\begin{align}
+       z &= \displaystyle\sum_{i=-\infty}^{\infty} d_i \beta^{i}\label{fixedpointZ}
+\end{align}
+Where each digit $d_i < \beta$ the base. A set of $\beta$ unique symbols are used to represent values of $d_i$.
+A seperate sign '-' can be used to represent negative integers using equation \eqref{fixedpointZ}.
+
+To express a real number using equation \eqref{fixedpointZ} in practice we are limited to a finite number of terms between $i = -m$ and $i = n$. Fixed point representations are capable of representing a discrete set of numbers $0 \leq |z| \leq \beta^{n+1}-\beta^{-m}$ seperated by $\Delta z = \beta^{-m} \leq 1$. In the case $m = 0$, only integers can be represented.
+
+Example integer representation in base 10 (decimal) and base 2 (binary):
+\begin{align*}
+       5682_{10} &= 5\times10^3 + 6\times10^2 + 8\times10^1 + 2\times10^0 \\
+       1011000110010_2 &= 1\times2^{12} + 0\times2^{11} + \text{ ...} + 0\times2^0
+\end{align*}
+
+
+
+
+
+%, but could be represented by the combination of a numerator $7 = 111_2$ and denominator $3 = 11_2$. Lastly, some values such as $e \approx 2.718\text{...}$ can only be expressed exactly using a symbolical system --- in this case as the result of an infinite summation $e = \displaystyle\sum_n^{\infty} 1/n!$
+
diff --git a/chapters/Background/FloatingPointOnTheGPU.tex b/chapters/Background/FloatingPointOnTheGPU.tex
new file mode 100644 (file)
index 0000000..bd5ea29
--- /dev/null
@@ -0,0 +1,8 @@
+\subsection{Rasterisation on the CPU and GPU}
+
+Traditionally, vector images have been rasterized by the CPU before being sent to a specialised Graphics Processing Unit (GPU) for drawing\cite{computergraphics2}. Rasterisation of simple primitives such as lines and triangles have been supported directly by GPUs for some time through the OpenGL standard\cite{openglspec}. However complex shapes (including those based on B{\'e}zier curves such as font glyphs) must either be rasterised entirely by the CPU or decomposed into simpler primitives that the GPU itself can directly rasterise. There is a significant body of research devoted to improving the performance of rendering such primitives using the latter approach, mostly based around the OpenGL\cite{openglspec} API\cite{robart2009openvg, leymarie1992fast, frisken2000adaptively, green2007improved, loop2005resolution, loop2007rendering}. Recently Mark Kilgard of the NVIDIA Corporation described an extension to OpenGL for NVIDIA GPUs capable of drawing and shading vector paths\cite{kilgard2012gpu,kilgard300programming}. From this development it seems that rasterization of vector graphics may eventually become possible upon the GPU.
+
+It is not entirely clear how well supported the IEEE-754 standard for floating point computation is amongst GPUs\footnote{Informal technical articles are abundant on the internet --- Eg: Regarding the Dolphin Wii GPU Emulator: \url{https://dolphin-emu.org/blog} (accessed 2014-05-22)}. Although the OpenGL API does use IEEE-754 number representations, research by Hillesland and Lastra in 2004 suggested that many GPUs were not internally compliant with the standard\cite{hillesland2004paranoia}. 
+
+\rephrase{We implemented a GPU and CPU renderer so we could compare them}.
+%Arbitrary precision arithmetic, is provided by many software libraries for CPU based calculations
diff --git a/chapters/Background/Floats.tex b/chapters/Background/Floats.tex
new file mode 100644 (file)
index 0000000..7eba8a2
--- /dev/null
@@ -0,0 +1,14 @@
+\input{chapters/Background/Floats/Definition}
+\subsection{Visualisation of Floating Point Representation}
+\input{chapters/Background/Floats/Visualisation}
+
+
+%\subsection{Floating Point Operations}
+%\input{chapters/Background/Floats/Operations}
+
+
+\subsection{Arbitrary Precision Floating Point Numbers}
+
+Arbitrary precision floating point numbers are implemented in a variety of software libraries which will dynamically allocate extra bits for the exponent or mantissa as required. An example is the GNU MPFR library discussed by Fousse in 2007\cite{fousse2007mpfr}. Although many arbitrary precision libraries already existed, MPFR intends to be fully compliant with some of the more obscure IEEE-754 requirements such as rounding rules and exceptions. 
+
+As we have seen, it is trivial to find real numbers that would require an infinite number of bits to represent exactly. Implementations of ``arbitrary'' precision must carefully determine at what point rounding should occur so as to balance performance with memory usage.
diff --git a/chapters/Background/Floats/Definition.tex b/chapters/Background/Floats/Definition.tex
new file mode 100644 (file)
index 0000000..62d2c71
--- /dev/null
@@ -0,0 +1,13 @@
+Whilst a Fixed Point representation keeps the ``point'' (the location considered to be $i = 0$ in \eqref{fixedpointZ}) at the same position in a string of bits, Floating point representations can be thought of as scientific notation; an ``exponent'' and fixed point value are encoded, with multiplication by the exponent moving the position of the point.
+
+A floating point number $x$ is commonly represented by a tuple of values $(s, e, m)$ in base $B$ as\cite{HFP, ieee2008-754}: $x = (-1)^{s} \times m \times B^{e}$
+
+Where $s$ is the sign and may be zero or one, $m$ is commonly called the ``mantissa'' and $e$ is the exponent. Whilst $e$ is an integer in some range $\pm e_max$, the mantissa $m$ is a fixed point value in the range $0 < m < B$. 
+
+
+The choice of base $B = 2$ in the original IEEE-754 standard matches the nature of modern hardware. It has also been found that this base in general gives the smallest rounding errors\cite{HFP}. %Early computers had in fact used a variety of representations including $B=3$ or even $B=7$\cite{goldman1991whatevery}, and the revised IEEE-754 standard specifies a decimal representation $B = 10$ intended for use in financial applications\cite{ieee754std2008}\footnote{Eg: The smallest valid unit of currency \$0.01 could not be represented exactly in base 2}. From now on we will restrict ourselves to considering base 2 floats.
+
+The IEEE-754 encoding of $s$, $e$ and $m$ requires a fixed number of continuous bits dedicated to each value. Originally two encodings were defined: binary32 and binary64. $s$ is always encoded in a single leading bit, whilst (8,23) and (11,53) bits are used for the (exponent, mantissa) encodings respectively. 
+
+The encoding of $m$ in the IEEE-754 standard is not exactly equivelant to a fixed point value. By assuming an implicit leading bit (ie: restricting $1 \leq m < 2$) except for when $e = 0$, floating point values are gauranteed to have a unique representations; these representations are said to be ``normalised''. When $e = 0$ the leading bit is not implied; these representations are called ``denormals'' because multiple representations may map to the same real value. The idea of using an implicit bit appears to have been considered by Goldberg as early as 1967\cite{goldbern1967twentyseven}.
+
diff --git a/chapters/Background/Floats/Operations.tex b/chapters/Background/Floats/Operations.tex
new file mode 100644 (file)
index 0000000..1a724f9
--- /dev/null
@@ -0,0 +1,29 @@
+
+
+Real values which cannot be represented exactly in a floating point representation must be rounded to the nearest floating point value. The results of a floating point operation will in general be such values and thus there is a rounding error possible in any floating point operation. Referring to Figure \ref{floats.pdf} it can be seen that the largest possible rounding error is half the distance between successive floats; this means that rounding errors increase as the value to be represented increases.
+
+
+
+{\bf Put this stuff in an Appendix?}
+\subsection{Addition and Subtraction}
+
+According to the IEEE-754 standard, if $e_1 < e_2$, then the preferred form of $f_1 + f_2$ is:
+\begin{align}
+       m_1 \beta^{e_1} \pm m_2 \beta^{e_2} &= (m_1 \pm \beta^{e_2 - e_1} m_2) \beta^{e_1}
+\end{align}
+
+This is equivelant to shifting the fixed point in $m_2$ by $e_2 - e_1$ to the left, and then performing fixed point addition or subtraction. If the result of the addition/subtraction requires a carry/borrow, divide result by $\beta$ (ie: shift digits by $1$ the right) and increment/decrement exponent. Then normalise the result (subtract leading zeros in mantissa from the exponent). Lastly perform the rounding operation; if this would generate a carry/borrow, shift right and increment/decrement exponent again, repeat.
+
+
+\subsection{Multiplication and Division}
+\begin{align}
+       m_1 \beta^{e_1} \times m_2 \beta^{e_2} &= (m_1 \times m_2 ) \beta^{e_1 + e_2}
+\end{align}
+
+\begin{align}
+       m_1 \beta^{e_1} \div m_2 \beta^{e_2} &= (m_1 \div m_2 ) \beta^{e_1 - e_2}
+\end{align}
+
+Multiplication and Division are not inverses.
+
+Floating point operations can in principle be performed using integer operations, but specialised Floating Point Units (FPUs) are an almost universal component of modern processors\cite{kelley1997acmos}. The improvement of FPUs remains highly active in several areas including: efficiency\cite{seidel2001onthe}; accuracy of operations\cite{dieter2007lowcost}; and even the adaptation of algorithms originally used in software, such as Kahan's Fast2Sum algorithm\cite{kadric2013accurate}. 
diff --git a/chapters/Background/Floats/PrecisionIssues.tex b/chapters/Background/Floats/PrecisionIssues.tex
new file mode 100644 (file)
index 0000000..ff23a17
--- /dev/null
@@ -0,0 +1,6 @@
+\subsection{Precision and Rounding Issues}\label{Precision and Rounding}
+
+
+Goldberg's 1991 paper ``What Every Computer Scientist Needs to Know about Floating Point Arithmetic''\cite{goldberg1991whatevery} provides a comprehensive overview of issues in floating point arithmetic and relates these to requirements of the IEEE-754 1985 standard\cite{ieee754std1985}. More recently, after the release of the revised IEEE-754 standard in 2008\cite{ieee754std2008}, a textbook ``Handbook Of Floating Point Arithmetic'' has been published which provides a thourough review of literature relating to floating point arithmetic in both software and hardware\cite{HFP}.
+
+William Kahan, one of the architects of the IEEE-754 standard in 1984 and a contributor to its revision in 2010, has also published many articles on his website explaining the more obscure features of the IEEE-754 standard and calling out software which fails to conform to the standard\footnote{In addition to encodings and acceptable rounding behaviour, the standard also specifies ``exceptions'' --- mechanisms by which a program can detect and report an error such as division by zero}\cite{kahanweb, kahan1996ieee754}, as well as examples of the limitations of floating point computations\cite{kahan2007wrong}. 
diff --git a/chapters/Background/Floats/Visualisation.tex b/chapters/Background/Floats/Visualisation.tex
new file mode 100644 (file)
index 0000000..1588b03
--- /dev/null
@@ -0,0 +1,35 @@
+
+Figure \ref{floats.pdf} shows the positive real numbers which can be represented exactly by an 8 bit floating point number encoded in the IEEE-754 format. We show two encodings using (1,2,5) and (1,3,4) bits to encode (sign, exponent, mantissa) respectively. For each distinct value of the exponent, the successive floating point representations lie on a straight line with constant slope. As the exponent increases, larger values are represented, but the distance between successive values increases; this can be seen in Figure\ref{}. The marked single point discontinuity at \verb/0x10/ and \verb/0x20/ occur when $e$ leaves the denormalised region and the encoding of $m$ changes. We have also plotted a fixed point representation for comparison; fixed point and integer representations appear as straight lines - the distance between points is always constant.
+
+\begin{comment}
+The earlier example $7.25$ would be converted to a (1,3,4) floating point representation as follows:
+\begin{enumerate}
+       \item Determine the fixed point representation $7.25 = 111.01_2$
+       \item Determine the sign bit; in this case $s = 0$
+       \item Calculate the exponent by shifting the point $111.01_2 = 1.1101_2 \times 2^2 \implies e = 2 = 10_2$
+       \item Determine the exponent encoding; in IEEE-754 equal to the number of exponent bits is added so $e_{enc} = e+3 = 5 = 101_2$
+       \item Remove the implicit bit if the encoded exponent $\neq 0$; $1.1101_2 \to .1101_2$
+       \item Combine the three bit strings$0,101,1101$
+       \item The final encoding is $01011101 \equiv \text{0x5D}$
+\end{enumerate}
+This particular example can be encoded exactly; however as there are an infinite number of real values and only a finite number of floats, in general a value must be $7.26$ must be rounded or truncated at Step 3. 
+\end{comment}
+
+%\begin{figure}[H]
+%      \centering
+%\begin{minipage}[t]{0.45\textwidth}
+       \begin{figure}[H]
+               \centering
+               \includegraphics[width=0.8\textwidth]{figures/floats.pdf}\label{floats.pdf}
+               \caption{Positive 8-Bit Number Representations}
+       \end{figure}
+%\end{minipage}
+%\begin{minipage}[t]{0.45\textwidth}
+       \begin{figure}[H]
+               \centering
+               \includegraphics[width=0.8\textwidth]{figures/floats_diff.pdf}\label{floats_diff.pdf}
+               \caption{Difference between successive numbers}
+       \end{figure}
+%\end{minipage}
+%      \caption{8 bit float and fixed point representations a) As mapped to real values b) The distance between each representation}\label{floats.pdf}
+%\end{figure}
diff --git a/chapters/Background/GMP.tex b/chapters/Background/GMP.tex
new file mode 100644 (file)
index 0000000..c358f09
--- /dev/null
@@ -0,0 +1,3 @@
+The GNU Multiple Precision Library implements arbitrary precision arithmetic for integers, floating point numbers, and rationals\cite{granlund2014}. 
+
+The MPFR library is based on GMP but implements IEEE-754 rounding\cite{fousse2007mpfr}.
diff --git a/chapters/Background/Overview.tex b/chapters/Background/Overview.tex
new file mode 100644 (file)
index 0000000..7b4256b
--- /dev/null
@@ -0,0 +1 @@
+An overview will go here.
diff --git a/chapters/Background/RasterAndVectorGraphics.tex b/chapters/Background/RasterAndVectorGraphics.tex
new file mode 100644 (file)
index 0000000..f729ece
--- /dev/null
@@ -0,0 +1,32 @@
+At a fundamental level everything that is seen on a display device is represented as either a vector or raster image. These images can be stored as stand alone documents or embedded within a more complex document format capable of containing many other types of information.
+
+A raster image's structure closely matches it's representation as shown on modern display hardware; the image is represented as a grid of filled square ``pixels''. Each pixel is considered to be a filled square of the same size and contains information describing its colour. This representation is simple and also well suited to storing images as produced by cameras and scanners. The drawback of raster images is that by their very nature there can only be one level of detail; this is illustrated in Figures \ref{vector-vs-raster} and \ref{vector-vs-raster-scaled}.
+
+A vector image contains information about the positioning and shading of geometric shapes. To display this image on modern display hardware, coordinates are transformed according to the view and then the image is converted into a raster like representation. Whilst the raster image merely appears to contain edges, the vector image actually contains information about these edges, meaning they can be displayed ``infinitely sharply'' at any level of detail --- or they could be if the coordinates are stored with enough precision (see Section \ref{Precision and Rounding}). 
+
+Figures \ref{vector-vs-raster} and \ref{vector-vs-raster-scaled} illustrate the advantage of vector formats by comparing raster and vector images in a similar way to Worth and Packard\cite{worth2003xr}. On the right is a raster image which should be recognisable as an animal defined by fairly sharp edges. Figure \ref{vector-vs-raster-scaled} shows how these edges appear jagged when scaled. There is no information in the original image as to what should be displayed at a larger size, so each square shaped pixel is simply increased in size. A blurring effect will probably be visible in most PDF viewers; the software has attempted to make the ``edge'' appear more realistic using a technique called ``antialiasing''\footnote{We recommend disabling this if your PDF viewer supports it}. 
+
+The left side of the Figures are a vector image. When scaled, the edges maintain a smooth appearance which is limited by the resolution of the display rather than the image itself. %Vector images are well suited to high quality digital art\footnote{Figure \ref{vector-vs-raster} is not to be taken as an example of this.} and text.
+
+
+\newlength\imageheight
+\newlength\imagewidth
+\settoheight\imageheight{\includegraphics{figures/fox-raster.png}}
+\settowidth\imagewidth{\includegraphics{figures/fox-raster.png}}
+
+%Height: \the\imageheight
+%Width: \the\imagewidth
+
+
+\begin{figure}[H]
+       \centering
+       \includegraphics[scale=0.7528125]{figures/fox-vector.pdf}
+       \includegraphics[scale=0.7528125]{figures/fox-raster.png}
+       \caption{Original Vector and Raster Images}\label{vector-vs-raster}
+\end{figure} % As much as I hate to break up the party, these fit best over the page (at the moment)
+\begin{figure}[H]
+       \centering
+       \includegraphics[scale=0.7528125, viewport=210 85 280 150,clip, width=0.45\textwidth]{figures/fox-vector.pdf}
+       \includegraphics[scale=0.7528125, viewport=0 85 70 150,clip, width=0.45\textwidth]{figures/fox-raster.png}
+       \caption{Scaled Vector and Raster Images}\label{vector-vs-raster-scaled}
+\end{figure}
diff --git a/chapters/Background/Rationals.tex b/chapters/Background/Rationals.tex
new file mode 100644 (file)
index 0000000..8b13789
--- /dev/null
@@ -0,0 +1 @@
+
diff --git a/chapters/Background/Rendering.tex b/chapters/Background/Rendering.tex
new file mode 100644 (file)
index 0000000..45a0167
--- /dev/null
@@ -0,0 +1,11 @@
+%\subsection{Overview}
+\input{chapters/Background/Rendering/Overview}
+\subsection{Straight Lines}
+\input{chapters/Background/Rendering/StraightLines}
+\subsection{B\'{e}zier Splines}
+\input{chapters/Background/Rendering/BezierSplines}
+\subsection{Filled Paths}
+\subsection{Compositing}
+\subsection{Fonts}
+\input{chapters/Background/Rendering/Fonts}
+
diff --git a/chapters/Background/Rendering/BezierSplines.tex b/chapters/Background/Rendering/BezierSplines.tex
new file mode 100644 (file)
index 0000000..fd0ec01
--- /dev/null
@@ -0,0 +1,69 @@
+
+Splines are continuous curves formed from piecewise polynomial segments. A polynomial of $n$th degree is defined by $n$ constants $\{a_0, a_1, ... a_n\}$ and:
+\begin{align}
+       y(x) &= \displaystyle\sum_{k=0}^n a_k x^k
+\end{align}
+
+ \begin{comment}
+Splines may be rasterised by sampling of $y(x)$ at a number of points $x_i$ and drawing straight lines between  $(x_i, y_i)$ and $(x_{i+1}, y_{i+1})$ as discussed in Section \ref{Straight Lines}.
+
+There are many different ways to define a spline.One approach is to specify ``knots'' on the curve and choosing a fixed $n$ ($n = 3$ for ``cubic'' splines) solve for the cooefficients to generate polynomials passing through the points. Alternatively, special polynomials may be defined using ``control'' points which themselves are not part of the curve; these are convenient for graphical based editors.\end{co B{\'e}zier splines are the most straight forward way to define a curve in the standards considered in Section \ref{Document Representations}. A spline defined from two cubic B{\'e}ziers is shown in Figure \ref{spline.pdf}
+\end{comment}
+
+Cubic and Quadratic B{\'e}zier Splines are used to define curved paths in the PostScript\cite{plrm}, PDF\cite{pdfref17} and SVG\cite{svg2011-1.1} standards which we will discuss in Section \ref{Document Representations}.  Cubic B{\'e}ziers are also used to define vector fonts for rendering text in these standards and the {\TeX}  typesetting language \cite{knuth1983metafont, knuth1984texbook}. Although he did not derive the mathematics, the usefulness of B{\'e}zier curves was realised by Pierre B{\'e}zier who used them in the 1960s for the computer aided design of automobile bodies\cite{bezier1986apersonal}. 
+
+A B{\'e}zier Curve of degree $n$ is defined by $n$ ``control points'' $\left\{P_0, ... P_n\right\}$. 
+Points $P(t) = (x(t), y(t))$ along the curve are defined by:
+\begin{align}
+       P(t) &= \displaystyle\sum_{j=0}^{n} B_j^n(t) P_j
+\end{align}
+Where $t \epsilon [0,1]$ is a control parameter. The polynomials $B_j^n(t)$ are Bernstein Basis Polynomials which are defined as:
+\begin{align}
+       B_j^n(t) &=  \left(^n_j\right) t^j\left(1-t\right)^{n-j} \quad \quad j=0,1,...,n \\
+       \text{Where } \left(^n_j\right) &= \frac{n!}{n!(n-j)!} \quad \text{ (The Binomial Coefficients)}
+\end{align}
+From these definitions it should be apparent that in all cases, $P(0) = P_0$ and $P(1) = P_n$. An $n = 1$ B{\'e}zier Curve is a straight line.
+
+Algorithms for rendering B{\'e}zier's may simply sample $P(t)$ for suffiently many values of $t$ --- enough so that the spacing between successive points is always less than one pixel distance. Alternately, a smaller number of points may be sampled with the resulting points connected by straight lines using one of the algorithms discussed in Section \ref{Straight Lines}.
+
+De Casteljau's algorithm of 1959 is often used for decomposing B{\'e}ziers into line segments\cite{computergraphics2, knuth1983metafont}. This algorithm subdivides the original curve with $n$ control points $\left\{P_0, ... P_n\right\}$ into $2$ halves, each with $n$ control points: $\left\{Q_0, ... Q_n\right\}$ and $\left\{R_0, ... R_n\right\}$; when iterated, the produced points will converge to $P(t)$. As a tensor equation this subdivision can be expressed as\cite{goldman_thefractal}:
+\begin{align}
+       Q_i = \left(\frac{\left(^n_j\right)}{2^j}\right) P_i &\text{ and }      R_i = \left(\frac{\left(^{n-j}_{n-k}\right)}{2^{n-j}}\right) P_i
+\end{align}
+
+
+%In much of the literature it is taken as trivial that it is only necessary to specify the control points of a B{\'e}zier in order to be able to render it at any level of detail\cite{knuth1983metafont, computergraphics2}. Recently, Goldman presented an argument that B{\'e}zier's could be considered as fractal in nature, because the De Casteljau algorithm may be modified to be expressed the polynomial $P(t)$ as the result of iterated function system\cite{goldman_thefractal}. If this argument is correct, any primitive that can be described soley in terms of B{\'e}zier Curves may also be considered as fractal in nature. Ideally all these primitives may be rendered at any level of detail or ``zoom'' desired; however, computation of the pixel locations of the curve will be subject to the precision limits of the numerical representation which is used; we discuss these issues in Section \ref{Number Representations}.
+
+
+\begin{figure}[H]
+\centering
+\begin{minipage}[t]{0.3\textwidth}
+\begin{figure}[H]
+       \centering
+       \includegraphics[width=0.7\textwidth]{figures/spline_labelled.pdf}
+\end{figure}
+\end{minipage}
+\begin{minipage}[t]{0.3\textwidth}
+\begin{minted}{xml}
+<!-- DOM element in SVG used to construct the spline -->
+<path d="M 0,300 
+       C 0,300 200,210 90,140 
+       -20,70 200,0 200,0"
+       style="stroke:#000000; stroke-width:1px; 
+       fill:none;"/>
+\end{minted}
+\begin{minted}{postscript}
+% PostScript commands for a similar spline
+0 300 moveto 
+0 300 200 210 90 140 curveto 
+-20 70 200 0 200 0 curveto stroke 
+\end{minted}
+\end{minipage}
+\begin{minipage}[t]{0.3\textwidth}
+\begin{figure}[H]
+       \centering
+       \includegraphics[width=0.7\textwidth]{figures/spline.pdf}
+\end{figure}
+\end{minipage}
+       \caption{Constructing a Spline from two cubic B{\'e}ziers \\ (a) Showing the Control Points (b) Representations in SVG and PostScript (c) Rendered Spline}\label{spline.pdf}
+\end{figure}
diff --git a/chapters/Background/Rendering/Compositing.tex b/chapters/Background/Rendering/Compositing.tex
new file mode 100644 (file)
index 0000000..e2ba1e9
--- /dev/null
@@ -0,0 +1,17 @@
+%\subsection{Compositing}\label{Compositing}
+
+%So far we have discussed techniques for rendering vector graphics primitives in isolation, with no regard to the overall structure of a document which may contain many thousands of primitives. A straight forward approach would be to render all elements sequentially to the display, with the most recently drawn pixels overwriting lower elements. Such an approach is particularly inconvenient for anti-aliased images where colours must appear to smoothly blur between the edge of a primitive and any drawn underneath it.
+
+Colour raster displays are based on an additive red-green-blue $(r,g,b)$ colour representation which matches the human eye's response to light\cite{computergraphics2}. In 1984, Porter and Duff introduced a fourth colour channel for rasterised images called the ``alpha'' channel, analogous to the transparency of a pixel\cite{porter1984compositing}. In compositing models, elements can be rendered seperately, with the four colour channels of successively drawn elements being combined according to one of several possible operations.
+
+In the ``painter's model'' as described by the SVG standard the ``over'' operation is used when rendering one primitive over another\cite{svg2011-1.1}.
+Given an existing pixel $P_1$ with colour values $(r_1, g_1, b_1, a_1)$ and a pixel $P_2$ with colours $(r_2, g_2, b_2, a_2)$ to be painted over $P_1$, the resultant pixel $P_T$ has colours given by:
+\begin{align}
+       a_T &= 1 - (1-a_1)(1-a_2) \\
+       r_T &= (1 - a_2)r_1 + r_2 \quad \text{(similar for $g_T$ and $b_T$)}
+\end{align}
+It should be apparent that alpha values of $1$ correspond to an opaque pixel; that is, when $a_2 = 1$ the resultant pixel $P_T$ is the same as $P_2$.
+When the final pixel is actually drawn on an rgb display, the $(r, g, b)$ components are $(r_T/a_T, g_T/a_T, b_T/a_T)$.
+
+The PostScript and PDF standards, as well as the OpenGL API also use a painter's model for compositing. However, PostScript does not include an alpha channel, so $P_T = P_2$ always\cite{plrm}. Figure \ref{SVG} illustrates the painter's model for partially transparent shapes as they would appear in both the SVG and PDF models.
+
diff --git a/chapters/Background/Rendering/Fonts.tex b/chapters/Background/Rendering/Fonts.tex
new file mode 100644 (file)
index 0000000..910897c
--- /dev/null
@@ -0,0 +1,21 @@
+\begin{figure}[H]
+\begin{minipage}[t]{0.5\textwidth}
+\begin{figure}[H]
+       \centering
+       \includegraphics[width=0.7\textwidth]{figures/z.pdf}
+\end{figure}
+\end{minipage}
+\begin{minipage}[t]{0.5\textwidth}
+\begin{figure}[H]
+       \centering
+       \includegraphics[width=0.7\textwidth]{figures/z.png}
+\end{figure}
+\end{minipage}
+       \caption{a) Vector glyph for the letter Z b) Screenshot showing B{\'e}zier control points in Inkscape}\label{zglyph}
+\end{figure}
+
+A the term ``font'' refers to a set of images used to represent text on a graphical display. In 1983, Donald Knuth published ``The METAFONT Book'' which described a vector approach to specifying fonts and a program for creating these fonts\cite{knuth1983metafont}. Previously, only rasterised font images (glyphs) were popular; as can be seen from the zooming in Figure \ref{vector-vs-raster-scaled} this can be problematic given the prevelance of textual information at different scales and on different resolution displays. 
+
+Knuth used B{\'e}zier Cubic Splines to define ``pleasing'' curves in METAFONT, and this approach is still used in modern vector fonts. Since the paths used to render an individual glyph are used far more commonly than general curves, document formats do not require such curves to be specified in situ, but allow for a choice between a number of internal fonts or externally specified fonts. In the case of Knuth's typesetting language \TeX, fonts were intended to be created using METAFONT\cite{knuth1983metafont}. Figure \ref{zglyph} shows a $\mathscr{Z}$ (script Z) produced by {\LaTeX} with B{\'e}zier cubics identified.
+
+
diff --git a/chapters/Background/Rendering/Overview.tex b/chapters/Background/Rendering/Overview.tex
new file mode 100644 (file)
index 0000000..00352de
--- /dev/null
@@ -0,0 +1,3 @@
+Hearn and Baker's textbook ``Computer Graphics''\cite{computergraphics2} gives a comprehensive overview of graphics from physical display technologies through fundamental drawing algorithms to popular graphics APIs. This section will examine algorithms for drawing two dimensional geometric primitives on raster displays as discussed in ``Computer Graphics'' and the relevant literature. This section is by no means a comprehensive survey of the literature but intends to provide some idea of the computations which are required to render a document.
+
+It is of some historical significance that vector display devices were popular during the 70s and 80s, and papers oriented towards drawing on these devices can be found\cite{brassel1979analgorithm}. Whilst curves can be drawn at high resolution on vector displays, a major disadvantage was shading\cite{lane1983analgorithm}; by the early 90s the vast majority of computer displays were raster based\cite{computergraphics2}.
diff --git a/chapters/Background/Rendering/StraightLines.tex b/chapters/Background/Rendering/StraightLines.tex
new file mode 100644 (file)
index 0000000..a1a1393
--- /dev/null
@@ -0,0 +1,30 @@
+It is well known that in cartesian coordinates, a line between points $(x_1, y_1)$ and $(x_2, y_2)$, can be described by:
+\begin{align}
+       y(x) &= m x + c\label{eqn_line} \quad \text{ on $x \in [x_1, x_2]$} 
+       \text{ for } m = \frac{(y_2 - y_1)}{(x_2 - x_1)}
+       \text{ and } c = y_1 - m x_1
+\end{align}
+
+On a raster display, only points $(x,y)$ with integer coordinates can be displayed; however $m$ will generally not be an integer. Thus a straight forward use of Equation \ref{eqn_line} will require costly floating point operations and rounding (See Section\ref{Precision and Rounding}). Modifications based on computing steps $\Delta x$ and $\Delta y$ eliminate the multiplication but are still less than ideal in terms of performance\cite{computergraphics2}.
+
+It should be noted that algorithms for drawing lines can be based upon sampling $y(x)$ only if $|m| \leq 1$; otherwise sampling at every integer $x$ coordinate would leave gaps in the line because $\Delta y > 1$. Line drawing algorithms can be trivially adopted to sample $x(y)$ if $|m| > 1$.
+
+Bresenham's Line Algorithm was developed in 1965 with the motivation of controlling a particular mechanical plotter in use at the time\cite{bresenham1965algorithm}. The plotter's motion was confined to move between discrete positions on a grid one cell at a time, horizontally, vertically or diagonally. As a result, the algorithm presented by Bresenham requires only integer addition and subtraction, and it is easily adopted for drawing pixels on a raster display. Because integer operations are exact, only an error in the calculation of the line end points will affect the rendering.
+
+%Bresenham himself points out that rasterisation processes have existed since long before the first computer displays\cite{bresenham1996pixel}.
+
+In Figure \ref{rasterising-line} a) and b) we illustrate the rasterisation of a line width a single pixel width. The path followed by Bresenham's algorithm is shown. It can be seen that the pixels which are more than half filled by the line are set by the algorithm. This causes a jagged effect called aliasing which is particularly noticable on low resolution displays. From a signal processing point of view this can be understood as due to the sampling of a continuous signal on a discrete grid\cite{wu1991anefficient}.
+
+Figure \ref{rasterising-line} c) shows an (idealised) antialiased rendering of the line. The pixel intensity has been set to the average of the line and background colours over that pixel. Such an ideal implementation would be impractically computationally expensive on real devices\cite{elias2000graphics}. In 1991 Wu introduced an algorithm for drawing approximately antialiased lines which, while equivelant in results to existing algorithms by Fujimoto and Iwata, set the state of the art in performance\cite{wu1991anefficient}\footnote{Techniques for antialiasing primitives other than straight lines are discussed in some detail in Chapter 4 of ``Computer Graphics'' \cite{computergraphics2}}.
+.
+
+
+
+\begin{figure}[H]
+       \centering
+       \includegraphics[width=0.25\textwidth]{figures/line1.pdf}
+       \includegraphics[width=0.25\textwidth]{figures/line2.pdf}
+       \includegraphics[width=0.25\textwidth]{figures/line3.pdf}
+       \caption{Rasterising a Straight Line}\label{rasterising-line}
+       a) Before Rasterisation b) Bresenham's Algorithm c) Anti-aliased Line (Idealised)
+\end{figure}
diff --git a/chapters/Background/Standards.tex b/chapters/Background/Standards.tex
new file mode 100644 (file)
index 0000000..62cf5db
--- /dev/null
@@ -0,0 +1,9 @@
+%\subsection{Overview}
+% All this stuff can probably be appendicised
+%\input{chapters/Background/Standards/Overview}
+%\subsection{Interpreted Models: PostScript and PDF}
+%\input{chapters/Background/Standards/Interpreted}
+%\subsection{The Document Object Model: SVG}
+%\input{chapters/Background/Standards/DOM}
+%\subsection{Precision Specified By Standards}
+\input{chapters/Background/Standards/Precision}
diff --git a/chapters/Background/Standards/DOM.tex b/chapters/Background/Standards/DOM.tex
new file mode 100644 (file)
index 0000000..c12b3f1
--- /dev/null
@@ -0,0 +1,98 @@
+The Document Object Model (DOM) represents a document as a tree like data structure with the document as a root node. The elements of the document are represented as children of either this root node or of a parent element. In addition, elements may have attributes which contain information about that particular element.
+
+The World Wide Web Consortium (W3C) is an organisation devoted to the development of standards for structuring and rendering web pages based on industry needs. The DOM is used in and described by several W3C recommendations including XML\cite{xml2008-1.0}, HTML\cite{html2014-draft} and SVG\cite{svg2011-1.1}. XML is a general language which is intended for representing any tree-like structure using the DOM, whilst HTML and SVG are specifically intended for representing text documents and more general graphics respectively. These languages make use of Cascading Style Sheets (CSS)\cite{css2011-level2} for specifying the appearance of elements.
+
+%Version 5 of the Hypertext Markup Language (HTML5) is currently a candidate recommendation which aims to standardise the state of the art in technologies relating to web based documents. In HTML5 it is possible to achieve almost any level of control over both the structure and rendering of a document desirable. In particular, the language Javascript (based upon ECMAScript \cite{ecma-262}) can be used to dynamically alter a HTML5 document in response to user input or other events, including communication with HTTP servers.
+
+The Scalable Vector Graphics (SVG) recommendation defines a language for representing vector images using the DOM. This is intended not only for stand alone images, but also for inclusion within HTML documents. In the SVG standard, each graphics primitive is an element in the DOM, whilst attributes of the element give information about how the primitive is to be drawn, such as path coordinates, line thickness, mitre styles and fill colours.
+
+In the SVG representation, general shapes can be specified by locations of enclosed curves using B\'{e}zier splines (Section \ref{}) - the construction of these curves is very similar to PostScript (refer to Figure \ref{}). Again, text is created using vector fonts as described in Section \ref{}.
+
+%Figure \ref{SVG} shows an example of an SVG image as rendered (left) and represented as text. The textual representation is syntactically a subset of XML and is similar to HTML.\footnote{The details of distinctions between these languages are beyond the scope of this report.} Here we have used \verb/<rect>/ elements to position rectangles and \verb/<path>/ elements to define a straight line and a filled region bounded by a cubic bezier spline; note that the points and type of curves are defined as a data attribute.
+
+\begin{comment}
+\subsubsection{Javascript and the DOM}
+
+Using Javascript, an element in the DOM can be selected by its type, class, name, or unique identifier, each of which may be specified as an attribute in the original DOM. Once an element is selected Javascript can be used to modify its attributes, add children below it in the DOM, or remove it from the DOM entirely.
+
+For example, the following Javascript acting on the DOM described in Figure \ref{SVG} will change the fill colour of the curved region.
+\begin{minted}{javascript}
+var node = document.getElementById("curvedshape"); // Find the node by its unique id
+node.style.fill = "#000000"; // Change the ``style'' attribute and set the CSS fill colour 
+\end{minted}
+
+To illustrate the power of this technique we have produced an example to generate an SVG interactively using HTML. The example generates successive iterations of a particular type of fractal curve first described by Koch\cite{koch1904surune} in 1904 and a popular example in modern literature \cite{goldman_thefractal}. Unfortunately as including  W3C HTML directly in a standard PDF is not possible, we are only able to provide some examples of the output as static images in Figure \ref{koch}. The W3C has produced a primer describing the use of HTML5 and Javascript to produce interactive SVG's\cite{w3c2010svghtmlprimer}, and the HTML5 and SVG standards themselves include several examples.
+
+In HTML5, Javascript is not restricted to merely manipulating the DOM to alter the appearance of a document. The \verb/<canvas>/ tag and associated API provide a means to directly set the values of pixels on a display. This sort of low level API is inteded for performance intensive graphical applications such as web based games\footnote{For an example by the author including both the canvas2d and experimental WebGL APIs see \url{http://rabbitgame.net}}. As Hayes points out, there is some similarity between the \verb/<canvas>/ API, the SVG path descriptions and the PostScript interpreted approach to drawing\cite{hayes2012pixels}.
+
+\begin{figure}[H]
+\begin{minipage}[t]{0.65\textwidth}
+\begin{minted}{xml}
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" 
+       "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<!-- These lines are comments to assist human readability -->
+<svg id="svg_example" 
+       xmlns="http://www.w3.org/2000/svg"
+       version="1.1" 
+       width="104" 
+       height="186"
+       transform="translate(1,0)">
+
+<!-- The straight line -->
+<path id="straightline" d = "m 0, 0 104, 186" 
+       style="stroke:#000000;"/>
+<!-- The first (bottom) rectangle -->
+<rect id="rect1"
+       x = "30" y = "20" width = "30" height = "150"
+       style = "fill:#0000ff; fill-opacity:0.5; 
+               stroke:#000000;"/>
+<!-- The curved region -->
+<path id="curvedshape"
+       d = "m 57,185 c 0,0 57,-13 32,-43 -25,-30 -53,2 -25,
+               -30 28,-32 52,17 28,-32 -24,-50 -16,44 -35,12 
+               -19,-32 13,-64 13,-64 0,0 40,-50 -0,-14 -40,36 
+               -94,68 -59,109 35,41 45,62 45,62 z"
+       style = "fill:#ff0000; fill-opacity:0.75; 
+               stroke:#000000;"/>
+<!-- The second (top) rectangle -->
+<rect id="rect2"
+       x = "12" y = "130" width = "60" height = "20"
+       style = "fill:#00ff00; fill-opacity:0.5; 
+               stroke:#000000;"/>
+</svg>
+\end{minted}
+\end{minipage}
+\begin{minipage}[t]{0.3\textwidth}
+       \begin{figure}[H]
+       \centering
+       \includegraphics[width=1\textwidth]{figures/shape.pdf}
+       \end{figure}
+\end{minipage}
+       \caption{Vector image and a possible SVG representation}\label{SVG}
+\end{figure}
+
+\begin{figure}[H]
+\begin{minipage}[t]{0.33\textwidth}
+       \begin{figure}[H]
+       \centering
+       \includegraphics[width=0.8\textwidth]{figures/koch1.pdf}
+       \end{figure}
+\end{minipage}
+\begin{minipage}[t]{0.33\textwidth}
+       \begin{figure}[H]
+       \centering
+       \includegraphics[width=1\textwidth]{figures/koch2.pdf}
+       \end{figure}
+\end{minipage}
+\begin{minipage}[t]{0.33\textwidth}
+       \begin{figure}[H]
+       \centering
+       \includegraphics[width=0.9\textwidth]{figures/koch3.pdf}
+       \end{figure}
+\end{minipage}
+       \caption{Koch ``snowflakes'' generated using Javascript to modify an SVG DOM. The interactive HTML5 document can be found at \url{http://szmoore.net/ipdf/sam/figures/koch.html}}\label{koch}
+\end{figure}
+
+
+\end{comment}
diff --git a/chapters/Background/Standards/Interpreted.tex b/chapters/Background/Standards/Interpreted.tex
new file mode 100644 (file)
index 0000000..2c58f25
--- /dev/null
@@ -0,0 +1,74 @@
+Adobe's PostScript Language Reference Manual defines a turing complete language for producing graphics output on an abstract ``output device''\cite{plrm}. A PostScript document is treated as a procedural program; an interpreter executes instructions in the order they are written by the programmer. In particular, the document specifies the locations of enclosed curves using B\'{e}zier splines (Section \ref{}), whilst text is treated as vector fonts described in Section \ref{}.
+\begin{comment}
+Each symbol is pushed onto a stack as it is read. Special symbols called ``operators'' can act upon this stack and/or the output device. An internal ``graphics state'' stack can be constructed to store styling information (such as colour, line thickness, the current cursor position). It is possible for the language to define new operators.\end{comment} 
+PostScript was and is still widely used in printing of documents onto paper; many printers execute postscript directly, and newer formats including PDF must still be converted into PostScript by printer drivers\cite{pdfref17, cheng2002portable}.
+
+
+
+Adobe's Portable Document Format (PDF) is currently used almost universally for sharing documents; the ability to export or print to PDF can be found in most graphical document editors and even some plain text editors\cite{cheng2002portable}. 
+
+Hayes describes PDF as ``... essentially 'flattened' PostScript; it’s what’s left when you remove all the procedures and loops in a program, replacing them with sequences of simple drawing commands.''\cite{hayes2012pixels}. %Consultation of the PDF 1.7 standard shows that this statement does not a give a complete picture --- despite being based on the Adobe PostScript model of a document as a series of ``pages'' to be printed by executing sequential instructions, from version 1.5 the PDF standard began to borrow some ideas from the Document Object Model. 
+
+%For example, interactive elements such as forms may be included as XHTML objects and styled using CSS. ``Actions'' are objects used to modify the data structure dynamically. In particular, it is possible to include Javascript Actions. Adobe defines the API for Javascript actions seperately to the PDF standard\cite{js_3d_pdf}. There is some evidence in the literature of attempts to exploit these features, with mixed success\cite{barnes2013embedding, hayes2012pixels}.
+
+%Figure \ref{PS} shows a vector image and one possible way to express this image in PostScript. 
+
+%There are some limitations in PostScript's model. As mentioned in Section \ref{Compositing}, since PostScript predates Porter and Duff Compositing, there is no concept of transparency. In fact, using tools to convert between the SVG image in Figure \ref{SVG} and PostScript will simply rasterise the image and embed the rastered image in PostScript\footnote{For Figure \ref{SVG} converted using the Inkscape SVG editor: \url{http://szmoore.net/ipdf/figures/shape-svg-converted-to.ps}} 
+
+%Another limitation of PostScript is that the model of a document as a static page, convenient for printers which literally produce static pages, is unable to include interactive or dynamic elements. Dynamic PostScript attempted to fix this problem, but ``never caught on''\cite{hayes2012pixels}.
+
+\begin{comment}
+\begin{figure}[H]
+\begin{minipage}[t]{0.65\textwidth}
+\begin{minted}{postscript}
+%!PS-Adobe-3.0 EPSF-3.0
+%%BoundingBox: 0 -1 85 150
+% These lines are comments to aid in human understanding
+% Define an operator to produce a rectangular path
+/re { exch dup neg 3 1 roll 5 3 roll moveto 0 rlineto
+      0 exch rlineto 0 rlineto closepath } bind def
+% Operator to produce the path for the first rectangle
+/re1 { 24.613 133.001 24 -120 re } bind def
+% Operator to produce the path for the second rectangle
+/re2 { 10.215 45.001 48 -16 re } bind def
+% Operator which will produce the curved path
+/curve { 46.215 1.001 moveto 
+       46.215 1.001 91.812 11.399 71.812 35.399 curveto 
+       51.812 59.399  29.414 33.802 51.812 59.399 curveto 
+       74.215 85.001 93.414 45.802 74.215 85.001 curveto 
+       55.016 125.001 61.414 49.802 46.215 75.399 curveto 
+       31.016 101.001 56.613 126.598 56.613 126.598 curveto 
+       56.613 126.598 88.613 166.598 56.613 137.802 curveto 
+       24.613 109.001 -18.586 83.399 9.414 50.598 curveto 
+       37.414 17.802 45.414 1.001 45.414 1.001 curveto 
+closepath } bind def
+% Set stroke properties
+0.8 setlinewidth 0 setlinecap 0 setlinejoin [] 
+       0.0 setdash 4 setmiterlimit 
+% Draw the straight line
+0 setgray 0.613 149.001 moveto 83.812 0.2 lineto fill 
+% Fill and outline the first rectangular path
+0 0 1 setrgbcolor re1 fill 0 setgray re1 stroke
+% Fill and outline the curved shape
+1 0 0 setrgbcolor curve fill 0 setgray curve stroke
+% Fill and outline the second rectangle 
+0 1 0 setrgbcolor re2 fill 0 setgray re2 stroke
+showpage
+\end{minted}
+\end{minipage}
+\begin{minipage}[t]{0.3\textwidth}
+       \begin{figure}[H]
+       \centering
+       \includegraphics[width=1\textwidth]{figures/shape.eps}
+       \end{figure}
+\end{minipage}
+       \caption{Vector image and a possible PostScript representation}\label{PS}
+\end{figure}
+
+
+\subsubsection{{\TeX}, METAFONT and {\LaTeX}}
+
+Knuth's ``The {\TeX}book''\cite{knuth1984texbook} and ``The METAFONT book''\cite{knuth1983metafont} define two complementary programming languages for typesetting documents. Wheras PostScript may be considered an interpreted language, in that it can be produced in a human readable form which is also readable by an interpreter, {\TeX} is a compiled language; a program parses human readable {\TeX} to produce a machine readable format DVI (``DeVice Independent''). A DVI interpreter might be thought of as a virtual ``Display Processor'' for drawing vector graphics directly (as defined in the earlier editions of ``Computer Graphics''\cite{computergraphics2}). 
+
+DVI itself is not a widely used format for sharing documents. However, an system based upon {\TeX} called {\LaTeX} which includes libraries for advanced typesetting and programs that ultimately produce PDF output is particularly popular for producing technical reports and papers\footnote{The site \url{http://tex.stackexchange.com} (accessed 2014-05-22) is devoted to {\TeX} and {\LaTeX}} --- this report itself has been produced using the CTAN {\LaTeX} packages\footnote{The complete {\TeX} source code to produce this document can be found at \url{http://szmoore.net/ipdf/sam/}}.
+\end{comment}
diff --git a/chapters/Background/Standards/Overview.tex b/chapters/Background/Standards/Overview.tex
new file mode 100644 (file)
index 0000000..2adef7e
--- /dev/null
@@ -0,0 +1,6 @@
+The representation of information, particularly for scientific purposes, has changed dramatically over the last few decades. For example, Brassel's 1979 paper on shading polygons\cite{brassel1979analgorithm} has been produced on a mechanical type writer. Although the paper discusses an algorithm for shading on computer displays, the figures illustrating this algorithm have not been generated by a computer, but drawn by Brassel's assistant. In contrast, modern papers such as Barnes et. al's 2013 paper on embedding 3d images in PDF documents\cite{barnes2013embedding} can themselves be an interactive proof of concept.
+
+Haye's 2012 article ``Pixels or Perish'' discusses the recent history and current state of the art in documents for scientific publications\cite{hayes2012pixels}. Hayes argued that there are currently two different approaches to representing a document: As a sequence of commands for producing an image on a static sheets of paper (Interpreted Model) or as a dynamic and interactive way to convey information, using the Document Object Model.
+
+
+% We will now explore these two approaches and the extent to which they overlap.
diff --git a/chapters/Background/Standards/Precision.tex b/chapters/Background/Standards/Precision.tex
new file mode 100644 (file)
index 0000000..afb5f24
--- /dev/null
@@ -0,0 +1,25 @@
+
+We briefly summarise the requirements of the standards discussed so far in regards to the precision of mathematical operations.
+
+\subsection{PostScript}
+The PostScript reference describes a ``Real'' object for representing coordinates and values as follows: ``Real objects approximate mathematical real numbers within a much larger interval, but with limited precision; they are implemented as floating-point numbers''\cite{plrm}. There is no reference to the precision of mathematical operations, but the implementation limits \emph{suggest} a range of $\pm10^{38}$ ``approximate'' and the smallest values not rounded to zero are $\pm10^{-38}$ ``approximate''.
+
+\subsection{PDF}
+PDF defines ``Real'' objects in a similar way to PostScript, but suggests a range of $\pm3.403\times10^{38}$ and smallest non-zero values of $\pm1.175\times10^{38}$\cite{pdfref17}. A note in the PDF 1.7 manual mentions that Acrobat 6 now uses IEEE-754 single precision floats, but ``previous versions used 32-bit fixed point numbers'' and ``... Acrobat 6 still converts floating-point numbers to fixed point for some components''.
+\begin{comment}
+\subsection{{\TeX} and METAFONT}
+
+In ``The METAFONT book'' Knuth appears to describe coordinates as fixed point numbers: ``The computer works internally with coordinates that are integer multiples of $\frac{1}{65536} \approx 0.00002$ of the width of a pixel''\cite{knuth1983metafont}. \footnote{This corresponds to using $16$ bits for the fractional component of a fixed point representation} There is no mention of precision in ``The {\TeX} book''. In 2007 Beebe claimed that {\TeX} uses a $14.16$ fixed point encoding, and that this was due to the lack of standardised floating point arithmetic on computers at the time; a problem that the IEEE-754 was designed to solve\cite{beebe2007extending}. Beebe also suggested that {\TeX} and METAFONT could now be modified to use IEEE-754 arithmetic.
+\end{comment}
+
+\subsection{SVG}
+
+The SVG standard specifies a minimum precision equivelant to that of ``single precision floats'' (presumably referring to IEEE-754) with a range of \verb/-3.4e+38F/ to \verb/+3.4e+38F/, and states ``It is recommended that higher precision floating point storage and computation be performed on operations such as
+coordinate system transformations to provide the best possible precision and to prevent round-off errors.''\cite{svg2011-1.1} An SVG Viewer may refer to itself as ``High Quality'' if it uses a minimum of ``double precision'' floats.
+\begin{comment}
+\subsection{Javascript}
+%We include Javascript here due to its relation with the SVG, HTML5 and PDF standards.
+According to the EMCA-262 standard, ``The Number type has exactly 18437736874454810627 (that is, $2^64-^53+3$) values, 
+representing the double-precision 64-bit format IEEE 754 values as specified in the IEEE Standard for Binary Floating-Point Arithmetic''\cite{ecma-262}. 
+The Number type does differ slightly from IEEE-754 in that there is only a single valid representation of ``Not a Number'' (NaN). The EMCA-262 does not define an ``integer'' representation.
+\end{comment}
diff --git a/chapters/Background_Compositing.tex b/chapters/Background_Compositing.tex
deleted file mode 100644 (file)
index 453fc7a..0000000
+++ /dev/null
@@ -1 +0,0 @@
-In 1984, Porter and Duff introduced Digital Compositing for rastered images\cite{porter1984compositing}. 
diff --git a/chapters/Background_DOM.tex b/chapters/Background_DOM.tex
deleted file mode 100644 (file)
index a388230..0000000
+++ /dev/null
@@ -1,93 +0,0 @@
-The Document Object Model (DOM) represents a document as a tree like data structure with the document as a root node. The elements of the document are represented as children of either this root node or of a parent element. In addition, elements may have attributes which contain information about that particular element.
-
-The World Wide Web Consortium (W3C) is an organisation devoted to the development of standards for structuring and rendering web pages based on industry needs. The DOM is used in and described by several W3C recommendations including XML\cite{xml2008-1.0}, HTML\cite{html2014-draft} and SVG\cite{svg2011-1.1}. XML is a general language which is intended for representing any tree-like structure using the DOM, whilst HTML and SVG are specifically intended for representing visual information to humans. These languages make use of Cascading Style Sheets (CSS)\cite{css2011-level2} for specifying the appearance of elements.
-
-Version 5 of the Hypertext Markup Language (HTML5) is currently a candidate recommendation which aims to standardise the state of the art in technologies relating to web based documents. In HTML5 it is possible to achieve almost any level of control over both the structure and rendering of a document desirable. In particular, the language Javascript (based upon ECMAScript \cite{ecma-262}) can be used to dynamically alter a HTML5 document in response to user input or other events, including communication with HTTP servers.
-
-The Scalable Vector Graphics (SVG) recommendation defines a language for representing vector images using the DOM. This is intended not only for stand alone images, but also for inclusion within HTML documents. In the SVG standard, each graphics primitive is an element in the DOM, whilst attributes of the element give information about how the primitive is to be drawn, such as path coordinates, line thickness, mitre styles and fill colours. Figure \ref{SVG} shows an example of an SVG image as rendered (left) and represented as text. The textual representation is syntactically a subset of XML and is similar to HTML.\footnote{The details of distinctions between these languages are beyond the scope of this report.} Here we have used \verb/<rect>/ elements to position rectangles and \verb/<path>/ elements to define a straight line and a filled region bounded by a cubic bezier spline; note that the points and type of curves are defined as a data attribute.
-
-
-\subsubsection{Javascript and the DOM}
-
-Using Javascript, an element in the DOM can be selected by its type, class, name, or unique identifier, each of which may be specified as an attribute in the original DOM. Once an element is selected Javascript can be used to modify its attributes, add children below it in the DOM, or remove it from the DOM entirely.
-
-For example, the following Javascript acting on the DOM described in Figure \ref{SVG} will change the fill colour of the curved region.
-\begin{minted}{javascript}
-var node = document.getElementById("curvedshape"); // Find the node by its unique id
-node.style.fill = "#000000"; // Change the ``style'' attribute and set the CSS fill colour 
-\end{minted}
-
-To illustrate the power of this technique we have produced an example to generate an SVG interactively using HTML. The example generates successive iterations of a particular type of fractal curve first described by Koch\cite{koch1904surune} in 1904 and a popular example in modern literature \cite{goldman_thefractal}. Unfortunately as including  W3C HTML directly in a standard PDF is not possible, we are only able to provide some examples of the output as static images in Figure \ref{koch}. The W3C has produced a primer describing the use of HTML5 and Javascript to produce interactive SVG's\cite{w3c2010svghtmlprimer}, and the HTML5 and SVG standards themselves include several examples.
-
-In HTML5, Javascript is not restricted to merely manipulating the DOM to alter the appearance of a document. The \verb/<canvas>/ tag and associated API provide a means to directly set the values of pixels on a display. This sort of low level API is inteded for performance intensive graphical applications such as web based games\footnote{For an example by the author including both the canvas2d and experimental WebGL APIs see \url{http://rabbitgame.net}}. As Hayes points out, there is some similarity between the \verb/<canvas>/ API, the SVG path descriptions and the PostScript interpreted approach to drawing\cite{hayes2012pixels}.
-
-\begin{figure}[H]
-\begin{minipage}[t]{0.65\textwidth}
-\begin{minted}{xml}
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" 
-       "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<!-- These lines are comments to assist human readability -->
-<svg id="svg_example" 
-       xmlns="http://www.w3.org/2000/svg"
-       version="1.1" 
-       width="104" 
-       height="186"
-       transform="translate(1,0)">
-
-<!-- The straight line -->
-<path id="straightline" d = "m 0, 0 104, 186" 
-       style="stroke:#000000;"/>
-<!-- The first (bottom) rectangle -->
-<rect id="rect1"
-       x = "30" y = "20" width = "30" height = "150"
-       style = "fill:#0000ff; fill-opacity:0.5; 
-               stroke:#000000;"/>
-<!-- The curved region -->
-<path id="curvedshape"
-       d = "m 57,185 c 0,0 57,-13 32,-43 -25,-30 -53,2 -25,
-               -30 28,-32 52,17 28,-32 -24,-50 -16,44 -35,12 
-               -19,-32 13,-64 13,-64 0,0 40,-50 -0,-14 -40,36 
-               -94,68 -59,109 35,41 45,62 45,62 z"
-       style = "fill:#ff0000; fill-opacity:0.75; 
-               stroke:#000000;"/>
-<!-- The second (top) rectangle -->
-<rect id="rect2"
-       x = "12" y = "130" width = "60" height = "20"
-       style = "fill:#00ff00; fill-opacity:0.5; 
-               stroke:#000000;"/>
-</svg>
-\end{minted}
-\end{minipage}
-\begin{minipage}[t]{0.3\textwidth}
-       \begin{figure}[H]
-       \centering
-       \includegraphics[width=1\textwidth]{figures/shape.pdf}
-       \end{figure}
-\end{minipage}
-       \caption{Vector image and a possible SVG representation}\label{SVG}
-\end{figure}
-
-\begin{figure}[H]
-\begin{minipage}[t]{0.33\textwidth}
-       \begin{figure}[H]
-       \centering
-       \includegraphics[width=0.8\textwidth]{figures/koch1.pdf}
-       \end{figure}
-\end{minipage}
-\begin{minipage}[t]{0.33\textwidth}
-       \begin{figure}[H]
-       \centering
-       \includegraphics[width=1\textwidth]{figures/koch2.pdf}
-       \end{figure}
-\end{minipage}
-\begin{minipage}[t]{0.33\textwidth}
-       \begin{figure}[H]
-       \centering
-       \includegraphics[width=0.9\textwidth]{figures/koch3.pdf}
-       \end{figure}
-\end{minipage}
-       \caption{Koch ``snowflakes'' generated using Javascript to modify an SVG DOM. The interactive HTML5 document can be found at \url{http://szmoore.net/ipdf/sam/figures/koch.html}}\label{koch}
-\end{figure}
-
-
diff --git a/chapters/Background_Fonts.tex b/chapters/Background_Fonts.tex
deleted file mode 100644 (file)
index 910897c..0000000
+++ /dev/null
@@ -1,21 +0,0 @@
-\begin{figure}[H]
-\begin{minipage}[t]{0.5\textwidth}
-\begin{figure}[H]
-       \centering
-       \includegraphics[width=0.7\textwidth]{figures/z.pdf}
-\end{figure}
-\end{minipage}
-\begin{minipage}[t]{0.5\textwidth}
-\begin{figure}[H]
-       \centering
-       \includegraphics[width=0.7\textwidth]{figures/z.png}
-\end{figure}
-\end{minipage}
-       \caption{a) Vector glyph for the letter Z b) Screenshot showing B{\'e}zier control points in Inkscape}\label{zglyph}
-\end{figure}
-
-A the term ``font'' refers to a set of images used to represent text on a graphical display. In 1983, Donald Knuth published ``The METAFONT Book'' which described a vector approach to specifying fonts and a program for creating these fonts\cite{knuth1983metafont}. Previously, only rasterised font images (glyphs) were popular; as can be seen from the zooming in Figure \ref{vector-vs-raster-scaled} this can be problematic given the prevelance of textual information at different scales and on different resolution displays. 
-
-Knuth used B{\'e}zier Cubic Splines to define ``pleasing'' curves in METAFONT, and this approach is still used in modern vector fonts. Since the paths used to render an individual glyph are used far more commonly than general curves, document formats do not require such curves to be specified in situ, but allow for a choice between a number of internal fonts or externally specified fonts. In the case of Knuth's typesetting language \TeX, fonts were intended to be created using METAFONT\cite{knuth1983metafont}. Figure \ref{zglyph} shows a $\mathscr{Z}$ (script Z) produced by {\LaTeX} with B{\'e}zier cubics identified.
-
-
diff --git a/chapters/Background_Interpreted.tex b/chapters/Background_Interpreted.tex
deleted file mode 100644 (file)
index 55308be..0000000
+++ /dev/null
@@ -1,60 +0,0 @@
-\subsubsection{PostScript}
-
-Adobe's PostScript Language Reference Manual defines a turing complete language for producing graphics output on an abstract ``output device''\cite{plrm}. A PostScript document is treated as a procedural program; an interpreter executes instructions in the order they are written by the programmer. Each symbol is pushed onto a stack as it is read. Special symbols called ``operators'' can act upon this stack and/or the output device. An internal ``graphics state'' stack can be constructed to store styling information (such as colour, line thickness, the current cursor position). It is possible for the language to define new operators. Figure \ref{PS} shows a vector image and one possible way to express this image in PostScript. PostScript was and is still widely used in printing of documents onto paper; many printers execute postscript directly, and newer formats including PDFs must still be converted into PostScript by printer drivers\cite{pdfref17, cheng2002portable}.
-
-There are some limitations in PostScript's model. As mentioned in Section \ref{Compositing}, since PostScript predates Porter and Duff Compositing, there is no concept of transparency. In fact, using tools to convert between the SVG image in Figure \ref{SVG} and PostScript will simply rasterise the image and embed the rastered image in PostScript\footnote{For Figure \ref{SVG} converted using the Inkscape SVG editor: \url{http://szmoore.net/ipdf/figures/shape-svg-converted-to.ps}} 
-
-Another limitation of PostScript is that the model of a document as a static page, convenient for printers which literally produce static pages, is unable to include interactive or dynamic elements. Dynamic PostScript attempted to fix this problem, but ``never caught on''\cite{hayes2012pixels}.
-
-\begin{figure}[H]
-\begin{minipage}[t]{0.65\textwidth}
-\begin{minted}{postscript}
-%!PS-Adobe-3.0 EPSF-3.0
-%%BoundingBox: 0 -1 85 150
-% These lines are comments to aid in human understanding
-% Define an operator to produce a rectangular path
-/re { exch dup neg 3 1 roll 5 3 roll moveto 0 rlineto
-      0 exch rlineto 0 rlineto closepath } bind def
-% Operator to produce the path for the first rectangle
-/re1 { 24.613 133.001 24 -120 re } bind def
-% Operator to produce the path for the second rectangle
-/re2 { 10.215 45.001 48 -16 re } bind def
-% Operator which will produce the curved path
-/curve { 46.215 1.001 moveto 
-       46.215 1.001 91.812 11.399 71.812 35.399 curveto 
-       51.812 59.399  29.414 33.802 51.812 59.399 curveto 
-       74.215 85.001 93.414 45.802 74.215 85.001 curveto 
-       55.016 125.001 61.414 49.802 46.215 75.399 curveto 
-       31.016 101.001 56.613 126.598 56.613 126.598 curveto 
-       56.613 126.598 88.613 166.598 56.613 137.802 curveto 
-       24.613 109.001 -18.586 83.399 9.414 50.598 curveto 
-       37.414 17.802 45.414 1.001 45.414 1.001 curveto 
-closepath } bind def
-% Set stroke properties
-0.8 setlinewidth 0 setlinecap 0 setlinejoin [] 
-       0.0 setdash 4 setmiterlimit 
-% Draw the straight line
-0 setgray 0.613 149.001 moveto 83.812 0.2 lineto fill 
-% Fill and outline the first rectangular path
-0 0 1 setrgbcolor re1 fill 0 setgray re1 stroke
-% Fill and outline the curved shape
-1 0 0 setrgbcolor curve fill 0 setgray curve stroke
-% Fill and outline the second rectangle 
-0 1 0 setrgbcolor re2 fill 0 setgray re2 stroke
-showpage
-\end{minted}
-\end{minipage}
-\begin{minipage}[t]{0.3\textwidth}
-       \begin{figure}[H]
-       \centering
-       \includegraphics[width=1\textwidth]{figures/shape.eps}
-       \end{figure}
-\end{minipage}
-       \caption{Vector image and a possible PostScript representation}\label{PS}
-\end{figure}
-
-\subsubsection{{\TeX}, METAFONT and {\LaTeX}}
-
-Knuth's ``The {\TeX}book''\cite{knuth1984texbook} and ``The METAFONT book''\cite{knuth1983metafont} define two complementary programming languages for typesetting documents. Wheras PostScript may be considered an interpreted language, in that it can be produced in a human readable form which is also readable by an interpreter, {\TeX} is a compiled language; a program parses human readable {\TeX} to produce a machine readable format DVI (``DeVice Independent''). A DVI interpreter might be thought of as a virtual ``Display Processor'' for drawing vector graphics directly (as defined in the earlier editions of ``Computer Graphics''\cite{computergraphics2}). 
-
-DVI itself is not a widely used format for sharing documents. However, an system based upon {\TeX} called {\LaTeX} which includes libraries for advanced typesetting and programs that ultimately produce PDF output is particularly popular for producing technical reports and papers\footnote{The site \url{http://tex.stackexchange.com} (accessed 2014-05-22) is devoted to {\TeX} and {\LaTeX}} --- this report itself has been produced using the CTAN {\LaTeX} packages\footnote{The complete {\TeX} source code to produce this document can be found at \url{http://szmoore.net/ipdf/sam/}}.
diff --git a/chapters/Background_Lines.tex b/chapters/Background_Lines.tex
deleted file mode 100644 (file)
index 7ae437d..0000000
+++ /dev/null
@@ -1,28 +0,0 @@
-It is well known that in cartesian coordinates, a line between points $(x_1, y_1)$ and $(x_2, y_2)$, can be described by:
-\begin{align}
-       y(x) &= m x + c\label{eqn_line} \quad \text{ on $x \in [x_1, x_2]$} 
-       \text{ for } m = \frac{(y_2 - y_1)}{(x_2 - x_1)}
-       \text{ and } c = y_1 - m x_1
-\end{align}
-
-On a raster display, only points $(x,y)$ with integer coordinates can be displayed; however $m$ will generally not be an integer. Thus a straight forward use of Equation \ref{eqn_line} will require costly floating point operations and rounding (See Section\ref{Precision and Rounding}). Modifications based on computing steps $\Delta x$ and $\Delta y$ eliminate the multiplication but are still less than ideal in terms of performance\cite{computergraphics2}.
-
-It should be noted that algorithms for drawing lines can be based upon sampling $y(x)$ only if $|m| \leq 1$; otherwise sampling at every integer $x$ coordinate would leave gaps in the line because $\Delta y > 1$. Line drawing algorithms can be trivially adopted to sample $x(y)$ if $|m| > 1$.
-
-Bresenham's Line Algorithm was developed in 1965 with the motivation of controlling a particular mechanical plotter in use at the time\cite{bresenham1965algorithm}. The plotter's motion was confined to move between discrete positions on a grid one cell at a time, horizontally, vertically or diagonally. As a result, the algorithm presented by Bresenham requires only integer addition and subtraction, and it is easily adopted for drawing pixels on a raster display. Bresenham himself points out that rasterisation processes have existed since long before the first computer displays\cite{bresenham1996pixel}.
-
-In Figure \ref{rasterising-line} a) and b) we illustrate the rasterisation of a line width a single pixel width. The path followed by Bresenham's algorithm is shown. It can be seen that the pixels which are more than half filled by the line are set by the algorithm. This causes a jagged effect called aliasing which is particularly noticable on low resolution displays. From a signal processing point of view this can be understood as due to the sampling of a continuous signal on a discrete grid\cite{wu1991anefficient}.
-
-Figure \ref{rasterising-line} c) shows an (idealised) antialiased rendering of the line. The pixel intensity has been set to the average of the line and background colours over that pixel. Such an ideal implementation would be impractically computationally expensive on real devices\cite{elias2000graphics}. In 1991 Wu introduced an algorithm for drawing approximately antialiased lines which, while equivelant in results to existing algorithms by Fujimoto and Iwata, set the state of the art in performance\cite{wu1991anefficient}\footnote{Techniques for antialiasing primitives other than straight lines are discussed in some detail in Chapter 4 of ``Computer Graphics'' \cite{computergraphics2}}.
-.
-
-
-
-\begin{figure}[H]
-       \centering
-       \includegraphics[width=0.25\textwidth]{figures/line1.pdf}
-       \includegraphics[width=0.25\textwidth]{figures/line2.pdf}
-       \includegraphics[width=0.25\textwidth]{figures/line3.pdf}
-       \caption{Rasterising a Straight Line}\label{rasterising-line}
-       a) Before Rasterisation b) Bresenham's Algorithm c) Anti-aliased Line (Idealised)
-\end{figure}
diff --git a/chapters/Background_Raster-vs-Vector.tex b/chapters/Background_Raster-vs-Vector.tex
deleted file mode 100644 (file)
index c4ef568..0000000
+++ /dev/null
@@ -1,32 +0,0 @@
-At a fundamental level everything that is seen on a display device is represented as either a vector or raster image. These images can be stored as stand alone documents or embedded within a more complex document format capable of containing many other types of information.
-
-A raster image's structure closely matches it's representation as shown on modern display hardware; the image is represented as a grid of filled square ``pixels''. Each pixel is considered to be a filled square of the same size and contains information describing its colour. This representation is simple and also well suited to storing images as produced by cameras and scanners. The drawback of raster images is that by their very nature there can only be one level of detail; this is illustrated in Figures \ref{vector-vs-raster} and \ref{vector-vs-raster-scaled}.
-
-A vector image contains information about the positioning and shading of geometric shapes. To display this image on modern display hardware, coordinates are transformed according to the view and then the image is converted into a raster like representation. Whilst the raster image merely appears to contain edges, the vector image actually contains information about these edges, meaning they can be displayed ``infinitely sharply'' at any level of detail --- or they could be if the coordinates are stored with enough precision (see Section \ref{Precision and Rounding}). 
-
-Figures \ref{vector-vs-raster} and \ref{vector-vs-raster-scaled} illustrate the advantage of vector formats by comparing raster and vector images in a similar way to Worth and Packard\cite{worth2003xr}. On the right is a raster image which should be recognisable as an animal defined by fairly sharp edges. Figure \ref{vector-vs-raster-scaled} shows how these edges appear jagged when scaled. There is no information in the original image as to what should be displayed at a larger size, so each square shaped pixel is simply increased in size. A blurring effect will probably be visible in most PDF viewers; the software has attempted to make the ``edge'' appear more realistic using a technique called ``antialiasing''. 
-
-The left side of the Figures are a vector image. When scaled, the edges maintain a smooth appearance which is limited by the resolution of the display rather than the image itself. %Vector images are well suited to high quality digital art\footnote{Figure \ref{vector-vs-raster} is not to be taken as an example of this.} and text.
-
-
-\newlength\imageheight
-\newlength\imagewidth
-\settoheight\imageheight{\includegraphics{figures/fox-raster.png}}
-\settowidth\imagewidth{\includegraphics{figures/fox-raster.png}}
-
-%Height: \the\imageheight
-%Width: \the\imagewidth
-
-
-\begin{figure}[H]
-       \centering
-       \includegraphics[scale=0.7528125]{figures/fox-vector.pdf}
-       \includegraphics[scale=0.7528125]{figures/fox-raster.png}
-       \caption{Original Vector and Raster Images}\label{vector-vs-raster}
-\end{figure} % As much as I hate to break up the party, these fit best over the page (at the moment)
-\begin{figure}[H]
-       \centering
-       \includegraphics[scale=0.7528125, viewport=210 85 280 150,clip, width=0.45\textwidth]{figures/fox-vector.pdf}
-       \includegraphics[scale=0.7528125, viewport=0 85 70 150,clip, width=0.45\textwidth]{figures/fox-raster.png}
-       \caption{Scaled Vector and Raster Images}\label{vector-vs-raster-scaled}
-\end{figure}
diff --git a/chapters/Background_Spline.tex b/chapters/Background_Spline.tex
deleted file mode 100644 (file)
index d54ef10..0000000
+++ /dev/null
@@ -1,69 +0,0 @@
-
-Splines are continuous curves formed from piecewise polynomial segments. A polynomial of $n$th degree is defined by $n$ constants $\{a_0, a_1, ... a_n\}$ and:
-\begin{align}
-       y(x) &= \displaystyle\sum_{k=0}^n a_k x^k
-\end{align}
-
- \begin{comment}
-Splines may be rasterised by sampling of $y(x)$ at a number of points $x_i$ and drawing straight lines between  $(x_i, y_i)$ and $(x_{i+1}, y_{i+1})$ as discussed in Section \ref{Straight Lines}.
-
-There are many different ways to define a spline.One approach is to specify ``knots'' on the curve and choosing a fixed $n$ ($n = 3$ for ``cubic'' splines) solve for the cooefficients to generate polynomials passing through the points. Alternatively, special polynomials may be defined using ``control'' points which themselves are not part of the curve; these are convenient for graphical based editors.\end{co B{\'e}zier splines are the most straight forward way to define a curve in the standards considered in Section \ref{Document Representations}. A spline defined from two cubic B{\'e}ziers is shown in Figure \ref{spline.pdf}
-\end{comment}
-
-Cubic and Quadratic B{\'e}zier Splines are used to define curved paths in the PostScript\cite{plrm}, PDF\cite{pdfref17} and SVG\cite{svg2011-1.1} standards which we will discuss in Section \ref{Document Representations}.  Cubic B{\'e}ziers are also used to define vector fonts for rendering text in these standards and the {\TeX}  typesetting language \cite{knuth1983metafont, knuth1984texbook}. Although he did not derive the mathematics, the usefulness of B{\'e}zier curves was realised by Pierre B{\'e}zier who used them in the 1960s for the computer aided design of automobile bodies\cite{bezier1986apersonal}. 
-
-A B{\'e}zier Curve of degree $n$ is defined by $n$ ``control points'' $\left\{P_0, ... P_n\right\}$. 
-Points $P(t) = (x(t), y(t))$ along the curve are defined by:
-\begin{align}
-       P(t) &= \displaystyle\sum_{j=0}^{n} B_j^n(t) P_j
-\end{align}
-Where $t \epsilon [0,1]$ is a control parameter. The polynomials $B_j^n(t)$ are Bernstein Basis Polynomials which are defined as:
-\begin{align}
-       B_j^n(t) &=  \left(^n_j\right) t^j\left(1-t\right)^{n-j} \quad \quad j=0,1,...,n \\
-       \text{Where } \left(^n_j\right) &= \frac{n!}{n!(n-j)!} \quad \text{ (The Binomial Coefficients)}
-\end{align}
-From these definitions it should be apparent that in all cases, $P(0) = P_0$ and $P(1) = P_n$. An $n = 1$ B{\'e}zier Curve is a straight line.
-
-Algorithms for rendering B{\'e}zier's may simply sample $P(t)$ for suffiently many values of $t$ --- enough so that the spacing between successive points is always less than one pixel distance. Alternately, a smaller number of points may be sampled with the resulting points connected by straight lines using one of the algorithms discussed in Section \ref{Straight Lines}.
-
-De Casteljau's algorithm of 1959 is often used for approximating B{\'e}ziers\cite{computergraphics2, knuth1983metafont}. This algorithm subdivides the original $n$ control points $\left\{P_0, ... P_n\right\}$ into $2n$ points $\left\{Q_0, ... Q_n\right\}$ and $\left\{R_0, ... R_n\right\}$; when iterated, the produced points will converge to $P(t)$. As a tensor equation this subdivision can be expressed as\cite{goldman_thefractal}:
-\begin{align}
-       Q_i = \left(\frac{\left(^n_j\right)}{2^j}\right) P_i &\text{ and }      R_i = \left(\frac{\left(^{n-j}_{n-k}\right)}{2^{n-j}}\right) P_i
-\end{align}
-
-
-In much of the literature it is taken as trivial that it is only necessary to specify the control points of a B{\'e}zier in order to be able to render it at any level of detail\cite{knuth1983metafont, computergraphics2}. Recently, Goldman presented an argument that B{\'e}zier's could be considered as fractal in nature, because the De Casteljau algorithm may be modified to be expressed the polynomial $P(t)$ as the result of iterated function system\cite{goldman_thefractal}. If this argument is correct, any primitive that can be described soley in terms of B{\'e}zier Curves may also be considered as fractal in nature. Ideally all these primitives may be rendered at any level of detail or ``zoom'' desired; however, computation of the pixel locations of the curve will be subject to the precision limits of the numerical representation which is used; we discuss these issues in Section \ref{Number Representations}.
-
-
-\begin{figure}[H]
-\centering
-\begin{minipage}[t]{0.3\textwidth}
-\begin{figure}[H]
-       \centering
-       \includegraphics[width=0.7\textwidth]{figures/spline_labelled.pdf}
-\end{figure}
-\end{minipage}
-\begin{minipage}[t]{0.3\textwidth}
-\begin{minted}{xml}
-<!-- DOM element in SVG used to construct the spline -->
-<path d="M 0,300 
-       C 0,300 200,210 90,140 
-       -20,70 200,0 200,0"
-       style="stroke:#000000; stroke-width:1px; 
-       fill:none;"/>
-\end{minted}
-\begin{minted}{postscript}
-% PostScript commands for a similar spline
-0 300 moveto 
-0 300 200 210 90 140 curveto 
--20 70 200 0 200 0 curveto stroke 
-\end{minted}
-\end{minipage}
-\begin{minipage}[t]{0.3\textwidth}
-\begin{figure}[H]
-       \centering
-       \includegraphics[width=0.7\textwidth]{figures/spline.pdf}
-\end{figure}
-\end{minipage}
-       \caption{Constructing a Spline from two cubic B{\'e}ziers \\ (a) Showing the Control Points (b) Representations in SVG and PostScript (c) Rendered Spline}\label{spline.pdf}
-\end{figure}
index 22ccc64..6d4525b 100644 (file)
@@ -1,25 +1,5 @@
 \chapter{Conclusion}\label{Conclusion}
 
-This report has provided motivation for considering approaches to achieving an infinite level of zoom in a document.
+\section{Summary of Work and Results}
+\section{Considerations for Future Work}
 
-\section{Acheived Milestones}
-
-\section{Areas of further work}
-
-\begin{itemize}
-       \item Continue looking for relevant literature
-       \item Implement all those tests mentioned in Chapter \ref{Introduction}
-       \item \rephrase{Actually identify the techniques I will use} {\bf THIS ONE SHOULD BE DONE BEFORE I HAND IN THE LITERATURE REVIEW!}
-       \item Possible Ultimate Goal: Implement (a subset) of SVG and then show an SVG document that we can render but a browser can't
-       \begin{itemize}
-               \item This means extending our viewer to be able to read (a subset) SVG
-               \item Can already read XML, so this shouldn't actually be too bad
-               \begin{itemize}
-                       \item Emphasis on {\bf subset}
-                       \item (I've seen the SVG standard; I'm talking about implementing the 18 pages under ``Basic Shapes''. The other 818 pages can complain to someone who cares.)
-               \end{itemize}
-               \item Suggestion to David that he probably won't like (or read): Make his octree structure specifiable as an SVG extension
-       \end{itemize}
-\end{itemize}
-
-\section{Witty Conclusion Goes Here}
index 8dc81a3..1d31e79 100644 (file)
@@ -1,15 +1,11 @@
 \chapter{Introduction}\label{Introduction}
 
-\section{Motivation}
+Early electronic document formats such as PostScript were motivated by a need to print documents onto a paper medium. In the PostScript standard, this lead to a model of the document as a program; a series of instructions to be executed by an interpreter which would result in ``ink'' being placed on ``pages'' of a fixed size\cite{plrm}. The ubiquitous Portable Document Format (PDF) standard provides many enhancements to PostScript taking into account desktop publishing requirements\cite{cheng2002portable}, but it is still fundamentally based on the same imaging model\cite{pdfref17}. This idea of a document as a static ``page'' has lead to limitations on what could be achieved with a digital document viewers \cite{hayes2012pixels}.
 
-Early electronic document formats such as PostScript were motivated by a need to print documents onto a paper medium. In the PostScript standard, this lead to a model of the document as a program; a series of instructions to be executed by an interpreter which would result in ``ink'' being placed on ``pages'' of a fixed size\cite{plrm}. The ubiquitous Portable Document Format (PDF) standard provides many enhancements to PostScript taking into account desktop publishing requirements\cite{cheng2002portable}, but it is still fundamentally based on the same imaging model\cite{pdfref17}. This idea of a document as a static ``page'' has lead to limited precision in these and other traditional document formats. 
-
-The emergence of the internet, web browsers, XML/HTML, JavaScript and related technologies has seen a revolution in the ways in which information can be presented digitally, and the PDF standard itself has begun to move beyond static text and figures\cite{hayes2012pixels, barnes2013embedding}. However, the popular document formats are still designed with the intention of showing information at either a single, fixed level of detail, or a small range of levels.
+%The emergence of the internet, web browsers, XML/HTML, JavaScript and related technologies has seen a revolution in the ways in which information can be presented digitally, and the PDF standard itself has begun to move beyond static text and figures\cite{hayes2012pixels, barnes2013embedding}. However, the popular document formats are still designed with the intention of showing information at either a single, fixed level of detail, or a small range of levels.
 
 As most digital display devices are smaller than physical paper medium, all useful viewers are able to ``zoom'' to a subset of the document. Vector graphics formats including PostScript, PDF and SVG support rasterisation at different zoom levels\cite{plrm, pdfref17, svg2011-1.1}, but the use of fixed precision floating point numbers causes problems due to imprecision either far from the origin, or at a high level of detail\cite{goldberg1991whatevery, goldberg1992thedesign}.
 
-We are now seeing a widespread use of mobile computing devices with touch screens, where the display size is typically much smaller than paper pages and traditional computer monitors; it seems that there is much to be gained by breaking free of the restricted precision of traditional document formats. 
-
-\section{Overview}
+There are many possible applications for documents in which precision is unlimited. Several areas of use include: visualisation of extremely large or infinite data sets; visualisation of high precision numerical computations; digital artwork; computer aided design; and maps.
 
-The remainder of this document will be organised as follows: In Chapter \ref{Proposal} we give an overview of the current state of the research in document formats, and the motivation for implementing ``infinite precision'' in a document format. We will outline our approach to research in collaboration with David Gow\cite{proposalGow}. In Chapter \ref{Background} we provide more detailed background examining the literature related to rendering, interpreting, and creating document formats, as well as possible techniques for increased and possibly infinite precision. In Chapter \ref{Progress} gives the current state of our research and the progress towards the goals outlined in Chapter \ref{Introduction}.
+We have implemented a proof of concept document viewer compatable with a subset of the SVG standard, which has allowed us to explore the limitations of floating point arithmetic and possible approaches to achieving arbitrary precision document formats. Using the Rational representation of the GNU Multiple Precision (GMP) library\cite{granlund2014GMP} we are able to implement correct rendering of SVG test images seperated by arbitrary distances. We demonstrate the trade off between performance cost and the accuracy of rendering
diff --git a/chapters/Process.tex b/chapters/Process.tex
new file mode 100644 (file)
index 0000000..a57d7e0
--- /dev/null
@@ -0,0 +1,13 @@
+\chapter{Methods and Design}
+
+\section{Softare Overview}
+\input{chapters/Process/SoftwareOverview}
+\section{Design Process}
+\input{chapters/Process/DesignProcess}
+\section{Coordinate Systems and Bounds Transformations}
+\input{chapters/Process/Transformations}
+\section{Measurements}
+\input{chapters/Process/Measurements}
+
+
+
diff --git a/chapters/Process/DesignProcess.tex b/chapters/Process/DesignProcess.tex
new file mode 100644 (file)
index 0000000..d2acd08
--- /dev/null
@@ -0,0 +1,8 @@
+\subsection{Timeline}
+A timeline will go here.
+
+\subsection{Version Control}
+We used Git.
+
+\subsection{Debugging Methods}
+We used GDB and Valgrind and copious amounts of \verb/Debug/ (ie: \verb/printf/) calls.
diff --git a/chapters/Process/Measurements.tex b/chapters/Process/Measurements.tex
new file mode 100644 (file)
index 0000000..770d04e
--- /dev/null
@@ -0,0 +1,7 @@
+\subsection{Measurement Techniques}
+
+\begin{itemize}
+       \item Control panel allows inserting test images, screenshots, saving bound coordinates, changing program behaviour
+       \item For more automated tests, a basic scripting language is implemented
+       \item It has goto
+\end{itemize}
diff --git a/chapters/Process/SoftwareOverview.tex b/chapters/Process/SoftwareOverview.tex
new file mode 100644 (file)
index 0000000..92afe9f
--- /dev/null
@@ -0,0 +1,3 @@
+UML diagram.
+
+
diff --git a/chapters/Process/Transformations.tex b/chapters/Process/Transformations.tex
new file mode 100644 (file)
index 0000000..9f586ab
--- /dev/null
@@ -0,0 +1,38 @@
+Equation \eqref{view-transformation} involves a division operation; in general, the result cannot be represented exactly in either a fixed or floating point format. However, if the coordinates involved are expressed as rational numbers, the result will always be exact.
+
+
+       
+
+\begin{enumerate}
+       \item Store static object bounds, transform to view before rendering
+       \begin{itemize}
+               \item Straight foward approach
+               \item Causes the most obvious rounding errors; impossible to render objects accurately below epsilon
+               \item The transformation can be performed by the GPU or CPU; the GPU is restricted to floats
+               \item CPU can perform transformation to arbitrary precision, but this requires all object bounds to be expressed with arbitrary precision
+       \end{itemize}
+       \item Modify all object bounds, no transformation required before rendering
+       \begin{itemize}
+               \item The rounding error on floats does not accumulate as quickly
+               \item Instead of one division by a very small number there are repeated divisions by larger numbers
+               \item However, if the document is scaled so object bounds $\to 0$ then the object will not be recoverable
+               \item For arbitrary precision we still need to apply all bounds transformations on the GPU
+       \end{itemize}
+       \item Keep object bounds static to some intermediate object and transform the bounds of that object
+       \begin{itemize}
+               \item We have used SVG \verb/<path>/ to construct the intermediate objects; all beziers are relative to their parent path.
+               \item One could instead use the entire SVG bounds; however
+                       for an SVG with a high level of detail this would have problems \rephrase{elaborate}.
+               \item We only need to apply some bounds transformations on the CPU
+               \item However as the document grows we still need to apply transformations to all paths, even those that are not visible 
+       \end{itemize}
+       \item Quad tree
+       \begin{itemize}
+               \item Divide space up into a quad tree
+               \item Refer to David's stuff
+               \item The advantage over Path based transformations is that the bounds of objects which are not visible do not need to be recalculated
+       \end{itemize}
+       
+\end{enumerate}
+
+
diff --git a/chapters/Progress/Progress.tex b/chapters/Progress/Progress.tex
new file mode 100644 (file)
index 0000000..e37865d
--- /dev/null
@@ -0,0 +1,106 @@
+\chapter{Progress Report}\label{Progress}
+
+We describe the current state of our project in relation to the aims outlined in Chapter \ref{Introduction}. At this stage work on the project has been done in collaboration with David Gow; however the Project Proposals and Literature Reviews were produced individually.
+
+\section{Literature Review}
+The literature examined in Chapter\ref{Background} can broadly classed into three different areas (with major references indicated):
+\begin{enumerate}
+       \item Rendering Vector Graphics \cite{computergraphics2, knuth1983metafont, kilgard2012gpu}
+       \begin{itemize}
+               \item Rasterisation of Vector Graphics is non-trivial but well understood
+               \item Traditionally most rasterisation has been performed on the CPU and drawing on a dedicated GPU; current interest is in techniques for utilising the GPU directly to rasterise vector graphics
+       \end{itemize}
+       \item Representations of Vector Documents \cite{hayes2012pixels, plrm, knuth1984texbook, svg2011-1.1, pdfref17}
+       \begin{itemize}
+               \item Traditional approaches are be based on a programmatic model (PostScript, {\TeX}, DVI)
+               \item The Document Object Model (DOM) used by web technologies is a powerful way to produce dynamic documents (HTML5, SVG, Javascript)
+               \item These approaches can overlap (PDF)
+       \end{itemize}
+       \item Number Representations \cite{ieee754std2008, HFP, goldberg1991whatevery, fousse2007mpfr}
+       \begin{itemize}
+               \item Most document standards either specify, suggest, or imply a IEEE-754 floating point representation ({\TeX} is an exception)
+               \item IEEE-754 is widely used, although there are instances of languages or processors which do not conform exactly to the standard
+               \item Some GPUs in particular may not conform to IEEE-754, possibly trading some accuracy for performance
+               \item Arbitrary precision floating point arithmetic is possible through several libraries
+       \end{itemize}
+\end{enumerate}
+
+To improve the Literature Review we could consider the following topics in more detail:
+\begin{enumerate}
+       \item Additional approaches to arbitrary precision possibly including symbolic computation
+       \begin{itemize}
+               \item The Mathematica computational package claims to use symbolic computation, but we have yet to explore this field
+       \end{itemize}
+       \item Floating point errors in the context of computing B\'{e}zier Curves or similar
+       \item Algorithms for reducing overall error other than Fast2Sum
+       \item Alternative number representations such as rationals (eg: $\frac{1}{3}$)
+       \item How well GPUs conform or do not conform to IEEE-754 in more detail
+       \item Additional aspects of rendering vector documents including shading
+\end{enumerate}
+
+
+\section{Development of Testbed Software}
+
+We have produced a basic Document Viewer capable of rendering simple primitives under translation and scaling. The OpenGL 3.1 API is used to interface with graphics hardware. This software has the following features:
+\begin{enumerate}
+       \item A type name \verb/Real/ is used in place of the standard floating point types \verb/float/, \verb/double/ or \verb/long double/. This type name can be redefined to refer to one of the standard types or a custom real number representation, allowing us to easily recompile and test our software for different representations.
+       \item Screenshots can be overlaid on top of each other to get a pixel comparison of the graphical output of different versions of the program
+       \item Test documents can be loaded and saved so that we can compare different versions of the program on identical inputs
+       \item The time for rendering can be measured
+       \item Coordinate transformations may be performed on either the GPU or CPU 
+\end{enumerate}
+
+We have noticed the CPU produces more precise coordinate transformations at large ``zoom'' levels, but is significantly slower than the GPU. We have yet to quantitatively measure this difference.
+
+\section{Floating Point Arithmetic}
+
+Algorithms for floating point arithmetic may be implemented in software (CPU) or on dedicated hardware (FPU). We have made progress towards both approaches. 
+
+An open source Virtual FPU implemented in the VHDL language has been successfully compiled and can be substituted into our testbed software in place of native arithmetic running on the CPU. The timing diagram for this FPU throughout the execution of test programs can be extracted. Currently the virtual FPU is restricted to 32 bit floats and the square root operation is unimplemented.
+
+Mainly motivated by producing Figure \ref{floats.pdf} we have also implemented functions to convert an arbitrary \verb/Real/ type (which may be IEEE-754 floats) to and from a fixed size floating point representation of our choosing. We have not implemented any operations for floating point arithmetic using these representations.
+
+By using the functions to convert real numbers to variable precision floats as an interface for the virtual FPU, we hope to illustrate the limitations of floating point arithmetic more clearly than would be possible using IEEE-754 binary32 as is native to the C and C++ languages. Using the virtual FPU instead of a CPU based software library will prove useful for determining the exact performance of floating point operations.
+
+\section{Prototype Document Formats}
+
+Our testbed software is capable of reading primitive attributes from either a binary file or XML plain text file. Our format is conceptually similar to the Document Object Model, although there is currently only one generation in the tree as no primitives can contain other elements as of yet.
+
+If time permits, we plan to extend our XML format to cover a subset of the SVG standard. This may allow us to compare the rasterisation of an SVG using our own software and traditional software relying on IEEE-754 floats.
+
+Some of the figures produced for Chapter \ref{Background} may prove useful as standard test images for comparing the qualitative performance of versions of our software.
+
+\section{Version Control and Backup of Work}
+
+Git is a distributed version control system widely used in the development of open source software. All rescources created for or used by this project have been placed in git repositories on several servers. The repositories are publically accessable at \url{http://git.ucc.asn.au}, \url{http://szmoore.net/ipdf}.
+
+\section{Timeline}
+
+Deadlines enforced by the faculty of Engineering Computing and Mathematics are \emph{italicised}.\footnote{David Gow is being assessed under the 2014 rules for a BEng (Software) Final Year Project, whilst the author is being assessed under the 2014 rules for a BEng (Mechatronics) Final Year Project; deadlines and requirements as shown in Gow's proposal\cite{proposalGow} may differ}.
+
+\begin{center}
+\begin{tabular}{l|p{0.5\textwidth}}
+       {\bf Date} & {\bf Milestone} \\
+       \hline
+       $1^{\text{st}}$ May & Testbed Software (basic document format and viewer) completed and approaches for extending to allow infinite precision identified. \\
+       \hline
+       $17^{\text{th}}$ May & Draft Progress Report and Literature Review \\
+       \hline
+       $26^{\text{th}}$ May & \emph{Progress Report and Literature Review due.}\\
+       \hline
+       $9^{\text{th}}$ June & Demonstrations of limitations of floating point precision in the Testbed software. \\
+       $1^{\text{st}}$ July & At least one implementation of arbitrary precision for basic primitives (lines, polygons, curves) completed. Other implementations, advanced features, and areas for more detailed research identified. \\
+       \hline
+       $1^{\text{st}}$ August & Experiments and comparison of various arbitrary precision implementations completed. \\
+       \hline
+       $1^{\text{st}}$ September & Advanced features implemented and tested, work underway on Final Report. \\
+       \hline
+       TBA & \emph{Conference Abstract and Presentation due.} \\
+       \hline
+       $10^{\text{th}}$ October & \emph{Draft of Final Report due.} \\
+       \hline
+       $27^{\text{th}}$ October & \emph{Final Report due.}\\
+       \hline
+\end{tabular}
+\end{center}
+
diff --git a/chapters/Proposal.tex b/chapters/Proposal.tex
deleted file mode 100644 (file)
index ff9a5f3..0000000
+++ /dev/null
@@ -1,72 +0,0 @@
-\chapter{Proposal}\label{Proposal}
-
-\section{Aim}
-
-In this project, we will explore the state of the art of current document formats including PDF, PostScript, SVG, HTML, and the limitations of each with regards to  precision. 
-
-We will consider designs for a document format allowing graphics primitives at an arbitrary level of zoom with no loss of detail. A viewer and editor will be implemented as a proof of concept; we adopt a low level, ground up approach to designing this viewer so as to not become restricted by any single existing document format. Although it is possible to produce three dimensional graphics using some of the technologies we will explore, we will focus on two dimensional graphics.
-
-There are many possible applications for documents in which precision is unlimited. Several areas of use include: visualisation of extremely large or infinite data sets; visualisation of high precision numerical computations; digital artwork; computer aided design; and maps.
-
-\subsection{Clarification of Terms}
-
-It may be necessary to clarify what we mean by the terms ``arbitrary precision'' and ``document formats''. Regarding the latter, we consider a document format to be any representation of visual information which is capable of being stored indefinitely. Regarding the former, we do not propose to be able to contain an infinite amount of information within such a document. The goal is to be able to render a primitive at the same level of detail it is specified by a document format, regardless of how precise this level is. For example, the precision of coordinates of primitives drawn in a graphical document editor will always be limited by the resolution of the display on which they are drawn, but not by the viewer.
-
-   
-\section{Methods}
-
-Initial research and software development is being conducted in collaboration with David Gow\cite{proposalGow}. Once a simple testbed application has been developed, we will individually explore approaches for introducing arbitrary levels of precision; these approaches will be implemented as alternate versions of the same software. The focus will be on drawing simple primitives (lines, polygons, circles). However, if time permits we will explore adding more complicated primitives (font glyphs, bezier curves, embedded bitmaps). Hearn and Baker's textbook ``Computer Graphics'' includes chapters providing a good overview of two dimensional graphics\cite{computergraphics2}.
-
-The process of rendering a document will be considered as a common area of research, whilst individual research will be conducted on means for allowing infinite precision.
-At this stage we have identified two possible areas for individual research:
-
-\begin{enumerate}
-
-       \item {\bf Arbitrary Precision real valued numbers} --- Sam Moore
-
-       We plan to investigate the representation of real values to a high or arbitary degree of precision. Such representations would allow for the coordinates of primitives to be relative to a single global coordinate system. We would expect a decrease in performance with increased complexity of the data structure used to represent a real value. We will also consider the limitations imposed by performing calculations on the GPU or CPU.
-
-Starting points for research in this area are Priest's 1991 paper, ``Algorithms for Arbitrary Precision Floating Point Arithmetic''\cite{priest1991algorithms}, and Goldberg's 1992 paper ``The design of floating point data types''\cite{goldberg1992thedesign}. A more recent and comprehensive text book, ``Handbook of Floating Point Arithmetic''\cite{HFP}, published in 2010, has also been identified as highly relevant.
-
-       \item {\bf Local coordinate systems} --- David Gow \cite{proposalGow}
-       
-       An alternative approach involves segmenting the document into different regions using fixed precision floats to define primitives within each region. A quadtree or similar data structure could be employed to identify and render those regions currently visible in the document viewer.
-
-\end{enumerate}
-We aim to compare these and any additional implementations considered using the following metrics:
-\begin{enumerate}
-
-       \item {\bf Performance vs Number of Primitives}
-
-       As it is clearly desirable to include more objects in a document, this is a natural metric for the usefulness of an implementation.
-       We will compare the performance of rendering different implementations, using several ``standard'' test documents.
-       
-       \item {\bf Performance vs Visible Primitives}
-
-       There will inevitably be an overhead to all primitives in the document, whether drawn or not.
-       As the structure of the document format and rendering algorithms may be designed independently, we will repeat the above tests considering only the number of visible primitives. 
-       
-       
-       \item {\bf Performance vs Zoom Level}
-
-       We will also consider the performance of rendering at zoom levels that include primitives on both small and large scales, since these are the cases under which floating point precision causes problems in the PostScript and PDF standards.
-
-       \item {\bf Performance whilst translation and scaling}
-
-       Whilst changing the view, it is ideal that the document be re-rendered as efficiently as possible, to avoid disorienting and confusing the user.
-       We will therefore compare the speed of rendering as the standard documents are translated or scaled at a constant rate.
-
-       \item {\bf Artifacts and Limitations on Precision}
-
-       As we are unlikely to achieve truly ``infinite'' precision, qualitative comparisons of the accuracy of rendering under different implementations should be made.
-
-\end{enumerate}
-
-\section{Software and Hardware Requirements}
-
-Our proof of concept will be developed for a conventional GNU/Linux desktop or laptop computer using the OpenGL 3.1 API for rendering. However, the techniques explored could be extended to other platforms and libraries.
-
-
-
-
-
diff --git a/chapters/Results.tex b/chapters/Results.tex
new file mode 100644 (file)
index 0000000..923eccf
--- /dev/null
@@ -0,0 +1,66 @@
+\chapter{Results and Discussion}
+
+
+\section{Qualitative Rendering Accuracy}
+       
+Our ultimate goal is to be able to insert detail at an arbitrary point in the document. Therefore, we are interested in how the same test SVG would appear when scaled to the view coordinates, as the view coordinates are varied. 
+
+applying Transformation \eqref{view-transformation}. We will use single precision floats for coordinates unless otherwise stated.
+
+Figure \ref{qualitative-rendering-fox} shows the rendering of a vector image\footnote{Unfortunately, since a rendered vector image is a raster image and this figure must be scaled to fit the PDF, the figure as seen here is not a pixel perfect representation of the actual rendering. Most notably, antialiasing effects will be apparent}. Transformation \eqref{view-transformation} is applied to object coordinates with default IEEE-754 rounding behaviour (to nearest).
+
+
+
+\begin{figure}[H]
+       \centering
+       \includegraphics[width=800px]{figures/fox-vector_screenshot2.png}
+       \includegraphics[width=800px]{figures/fox-vector_highzoom1.png}
+       \caption{The vector image from Figure \ref{vector-vs-raster} under two different scales}\label{qualitative-rendering-fox}
+\end{figure}
+
+Rather than applying \eqref{view-transformation} to object coordinates specified relative to the document, we can store the bounds of objects relative to the view and modify these bounds according to transformations \eqref{} and \eqref{} as the view is changed. This approach significantly improves the range over which an image can be rendered correctly, and it is convenient for interactively created documents as no transformation must be applied to add new detail. 
+
+However, repeated transformations on the view will cause an accumulated error on the coordinates of object bounds. This is most noticable when zooming out and then back into the document; the object bounds coordinates will gradually underflow and eventually round to zero. An example of this effect is shown in Figure \ref{qualitative-rendering-fox-cumulative} b)
+%label start
+%setbounds 0.5 0.5 1e-6 1e-6
+%loadsvg svg-tests/fox-vector.svg
+%loop 1950 pxzoom 0 0 -1
+%loop 200 wait
+%debug hi
+%loop 1950 pxzoom 0 0 1
+%wait
+\begin{figure}[H]
+       \centering
+       \includegraphics[width=800px]{figures/fox-vector_cumulative_before_transforms.png}
+       \includegraphics[width=800px]{figures/fox-vector_cumulative_after_transforms.png}
+       \caption{The effect of applying cumulative transformations to all B\'{e}ziers}\label{qualitative-rendering-fox-cumulative}
+\end{figure}
+
+In Figure \ref{qualitative-rendering-fox}, transformations are applied to the bounds of each B\'{e}zier. Figure \ref{qualitative-rendering-fox-cumulative-relative} a) shows the effect of introducing an intermediate coordinate system expressing B\'{e}zier coordinates relative to the path which contains them. In this case, the rendering of a single path is accurate, but the overall positions of the paths drift. 
+
+We can correct this drift whilst maintaining performance by using an arbitrary precision number representation to express the coordinates of the paths - but maintaining the floating point coordinates for B\'{e}zier curves relative to their path. As we will discuss in Section \ref{}, this offers an acceptable trade off between rendering accuracy and performance.
+
+\begin{figure}[H]
+       \centering
+       \includegraphics[width=800px]{figures/fox-vector_cumulative_relative_to_path.png}
+       \includegraphics[width=800px]{figures/fox-vector_cumulative_relative_to_path_GMPrat.png}
+       \caption{Effect of cumulative transformations applied to Paths\\a) Path bounds represented using floats b) Path bounds represented using Rationals}\label{qualitative-rendering-fox-cumulative-relative}
+\end{figure}
+       
+\section{Quantitative Measurements of Rendering Accuracy}
+       
+A useful test SVG is a simple grid of horizontal and vertical lines seperated by 1 pixel. When this SVG is correctly scaled to a view, all that should be visible is a coloured rectangle filling the screen. Increasing the magnification will reveal the grid of lines indicating how the original size of a pixel is scaled.
+
+Figures \ref{} show the effect of scaling the grid to different view coordinates using single precision. This illustrates the trade off between precision and range; as the top left corner of the view moves further away from the origin, the width for which the grid appears unaltered decreases, or if the width is kept fixed, then there are fewer locations on the grid that can be correctly transformed from document to view space.
+
+Figure \ref{} shows a plot of the number of lines visible in the grid as a function of distance from the origin for IEEE-754 floats and several different precision settings for the MPFR library. 
+
+Figure \ref{} shows the obvious 
+       
+\section{Performance Measurements whilst Rendering}
+       
+As discussed above, we succeeded in preserving rendering accuracy as defined above for an arbitrary view.
+However this comes at a performance cost, as the size of the number representation must grow accordingly.
+
+
+
diff --git a/figures/controlpanel_screenshot.png b/figures/controlpanel_screenshot.png
new file mode 100644 (file)
index 0000000..23d17f0
Binary files /dev/null and b/figures/controlpanel_screenshot.png differ
diff --git a/figures/fox-vector+grid.png b/figures/fox-vector+grid.png
new file mode 100644 (file)
index 0000000..532d0b2
Binary files /dev/null and b/figures/fox-vector+grid.png differ
diff --git a/figures/fox-vector_cumulative_after_transforms.png b/figures/fox-vector_cumulative_after_transforms.png
new file mode 100644 (file)
index 0000000..038cd13
Binary files /dev/null and b/figures/fox-vector_cumulative_after_transforms.png differ
diff --git a/figures/fox-vector_cumulative_before_transforms.png b/figures/fox-vector_cumulative_before_transforms.png
new file mode 100644 (file)
index 0000000..da235f3
Binary files /dev/null and b/figures/fox-vector_cumulative_before_transforms.png differ
diff --git a/figures/fox-vector_cumulative_relative_to_path.png b/figures/fox-vector_cumulative_relative_to_path.png
new file mode 100644 (file)
index 0000000..defd775
Binary files /dev/null and b/figures/fox-vector_cumulative_relative_to_path.png differ
diff --git a/figures/fox-vector_cumulative_relative_to_path_GMPrat.png b/figures/fox-vector_cumulative_relative_to_path_GMPrat.png
new file mode 100644 (file)
index 0000000..814dd43
Binary files /dev/null and b/figures/fox-vector_cumulative_relative_to_path_GMPrat.png differ
diff --git a/figures/fox-vector_face_with_bezbounds.png b/figures/fox-vector_face_with_bezbounds.png
new file mode 100644 (file)
index 0000000..e1e27f9
Binary files /dev/null and b/figures/fox-vector_face_with_bezbounds.png differ
diff --git a/figures/fox-vector_highzoom1.png b/figures/fox-vector_highzoom1.png
new file mode 100644 (file)
index 0000000..8560bb4
Binary files /dev/null and b/figures/fox-vector_highzoom1.png differ
diff --git a/figures/fox-vector_screenshot1.png b/figures/fox-vector_screenshot1.png
new file mode 100644 (file)
index 0000000..bef092a
Binary files /dev/null and b/figures/fox-vector_screenshot1.png differ
diff --git a/figures/fox-vector_screenshot2.png b/figures/fox-vector_screenshot2.png
new file mode 100644 (file)
index 0000000..95e1488
Binary files /dev/null and b/figures/fox-vector_screenshot2.png differ
diff --git a/figures/fox-vector_screenshot2_300dpi.png b/figures/fox-vector_screenshot2_300dpi.png
new file mode 100644 (file)
index 0000000..ae4803c
Binary files /dev/null and b/figures/fox-vector_screenshot2_300dpi.png differ
diff --git a/figures/gpufloats.svg b/figures/gpufloats.svg
new file mode 100644 (file)
index 0000000..76eb9ae
--- /dev/null
@@ -0,0 +1,685 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:xlink="http://www.w3.org/1999/xlink"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="739.95789"
+   height="1182.4047"
+   id="svg2"
+   version="1.1"
+   inkscape:version="0.48.4 r9939"
+   sodipodi:docname="comparison.svg">
+  <defs
+     id="defs4">
+    <clipPath
+       clipPathUnits="userSpaceOnUse"
+       id="clipPath3513">
+      <rect
+         style="fill:#ffffff;fill-opacity:0.56074769;stroke:#008000;stroke-width:26.78126526;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         id="rect3515"
+         width="797.30017"
+         height="1360.9653"
+         x="-584.51813"
+         y="-142.28809" />
+    </clipPath>
+    <clipPath
+       clipPathUnits="userSpaceOnUse"
+       id="clipPath3519">
+      <rect
+         style="fill:#ffffff;fill-opacity:0.56074769;stroke:#008000;stroke-width:19.87416458;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         id="rect3521"
+         width="794.10577"
+         height="1246.6541"
+         x="-584.58105"
+         y="-80.644882" />
+    </clipPath>
+    <clipPath
+       clipPathUnits="userSpaceOnUse"
+       id="clipPath3112">
+      <rect
+         style="fill:#008000;fill-opacity:0.56074769;stroke:#008000;stroke-width:19.47373772;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         id="rect3114"
+         width="739.95789"
+         height="1182.4047"
+         x="-67.646111"
+         y="-62.599442" />
+    </clipPath>
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="0.49497475"
+     inkscape:cx="287.57773"
+     inkscape:cy="673.34823"
+     inkscape:document-units="px"
+     inkscape:current-layer="layer1"
+     showgrid="false"
+     fit-margin-top="0"
+     fit-margin-left="0"
+     fit-margin-right="0"
+     fit-margin-bottom="0"
+     inkscape:window-width="1280"
+     inkscape:window-height="996"
+     inkscape:window-x="0"
+     inkscape:window-y="0"
+     inkscape:window-maximized="1" />
+  <metadata
+     id="metadata7">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title />
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer"
+     id="layer1"
+     transform="translate(49.463365,78.761883)">
+    <g
+       id="g3094"
+       clip-path="url(#clipPath3112)"
+       transform="translate(18.182746,-16.162441)">
+      <image
+         width="802"
+         height="629"
+         xlink:href="data:image/png;base64,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 10u23jBUrWkbt7XGGDdKUddWRVhEcblUwPUOWnSAIhG5zTCMzvn9YXx+jsxd+DLA65WchHme85zz /Z4HknnzPOeckSMjIpr8NwsA8E3lv5rVvn37GDJkSKxcuTL/1Y/NmzfHeeedF9u3b4/NmzdHcXFx lJWVxZQpU2LmzJkxfvz4KCwsjIqKirj99ttj3Lhx0bt371i/fn1MmTIliouL45prron//M//bHQQ ffv2jenTp0dExJAhQ2LEiBGRy+XixhtvjHHjxkUul4vRo0fnLy88adKkGDVqVBxxxBFxwgknNDnJ Ll26RFlZWZSUlERVVVUUFRXlnzvnnHOiV69esWvXrpgwYUKdO6AvXLgwVq9eHZMmTWr2Ae3Ro0dU VlbWeey+++6LSZMmxeeffx433XRTnXNI6ttHQ+sXFRXFpZdeGsOHD4+uXbtG37594+KLL46IiHvu uScmTJgQlZWVUVRUlP9F8qKLLor169dHt27d4oEHHoiCgoJYvXp1XHHFFdGnT5/Yvn17XHjhhfn3 vKHtN7aPiC/O1VmyZEmUlZU1eYxaejwa2vfLL7/c4Dy+PJ9j48aN0aNHj/wnW7NmzYq5c+fGjh07 6vx9ru84fbmdhrbVknm/8sor8dvf/jZOPfXU/KdMd9xxR5x55pl7bd6N7aO++f3f//1fXHbZZXHk kUdGVVVV/Mu//Ev+K5lfzh8AYF/I5XIR5eXlTV65pzEbNmzIqqurv9E2vrR169Y9Hvv888+zysrK PR7ftm1b9vnnn3/j7WdZllVUVOy1OaxZsyYbOXJktn79+j2eq6qqatG2Glr/888/z7Zv317vczt3 7tzjsQ8//LDeddeuXdvi7Te0j4svvrjOFbaao6XHo6F9NzSPlmroODWmNfNujb0x74bm9/bbb9f7 eLSBK2pYLBaLxWI5OJfy8vLssJEjR85q6gTwxnTt2rXZN6Rrypcn235VLpfLn/Px9XVbelf4+rYf EdGtW7e9NodevXrFYYcdFg8//HCMHTs2f0PDiIh27dq1aFsNrZ/L5eps96vqO1Zf/ZTn62Nt6fYb 2kdNTU2MHz++wdfUp6XHo6F9NzSPlmroODWmNfNujb0x74bm99Vzpr7KDQ0BgH1l5MiRkSsvL89m z569v8cCtDEtDX0AgOYqLy8PXwQHAACSqxMib7zxRnz22Wf7ayz12rp1a1x11VVRXFzc5OVi33jj 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 339/fPLJJ81+8bJly+InP/nJPhtcatdff3289tpr+Z/35vzeeOON+Oyzz9rctlpq69atcdVVV0Vx cXE8//zz+2UM31R9x++8887b6/uYMWNG3HrrrbF169aIiCgtLY3S0tKYM2dOfPTRRxER8fbbb8dd d92Vf93jjz8ezz333F4dCwBAW1QQEbFu3bp45ZVXYseOHXHJJZc0+wZ2/fr1i7POOmufDjCltWvX xo4dO/I/7835XX755fHpp5+2uW211NNPPx3du3ePZcuWxdlnn71fxvBN1Xf8Vq1atde2f/XVV8eM GTPi/PPPj65du8bKlSsjIuLBBx+M4cOHx65du2LMmDHx4osvxvr16+t8zXHJkiV7dSwAAG3VYSNH jpw1YMCAePfdd+PnP/95/OM//mNMnz49Jk6cGJ06dYoNGzbEHXfcEY8//ngcd9xxcfjhh0dExJw5 c+Kxxx6LLl261Lmsb0TEtGnTYvv27fGv//qv0a5du/xN8d5777348Y9/HIsWLYp33nknevfuXefm fV9XW1sbzz33XMycOTOefPLJKC4ujh49ejQ4poho8Ll169bF/fffHx999FFcf/31UVFRESUlJbFm zZq47rrrYuHChfHxxx9HSUlJ9O/fv8H5NTS3iIg777wz/v3f/z2eeOKJ6Nq1awwcODCWL18eN998 c7z66qvxwQcfxLPPPhvDhg2L7t27x9atW+MXv/hF3H///fFXf/VXTV62uLFtNTS/+sbU2Dzefffd uOWWW+KOO+6ItWvXxplnnpnff2lpafzXf/1XbNiwIV599dXo169f/t4zzT3mO3fujF//+tcxZ86c yOVyccstt8Spp55a58aN9WloH429Hy05fnfeeWccfvjhcdNNN0VBQUGdryS25H2qrq6O0tLSWL58 eRQVFcXIkSPjr//6ryMi4uabb4558+bF6aefHu3atYtnn302Tj311Pif//mfmDhxYkRE/PGPf4xu 3brF6aef3ujxSOHmm2/e30MAAA5SI0eOjCgvL8+eeuqp7IILLsi+NGHChOyxxx7LsizLiouLs7lz 52ZLly7Njj/++KyysjK/3vz587Pvfe972dd16NAhu/fee7O33nor/5ra2tqsqKgoe+GFF7Jnnnkm 69ChQ7Zo0aI9XvtVc+bMyX7wgx9ka9euzV5//fXsrbfeanJMDT23atWq7JhjjsluuOGG7J133skW L16cH9OCBQuyuXPnZgUFBXXGVN/86pvbl+bOnZt9/PHH2ZtvvpkNHDgwe//99/PPDRkyJPv444/r bKukpCR78skns7Vr12ZjxozJ1q1b1+jxaGxb9c2vsTE1NI+LL744mz9/frZz585635+ZM2dm9913 X53HWnLM77vvvuyaa67Jbrvttuzcc8/N5s6dm82aNavJOTe0j8bej5Ycv/bt22d33XVX9uabb2bH HntstmPHjvxzLXmfnn/++WzcuHH1PhcRWZZlWU1NTXb55Zdns2fPzubPn5+NHTs2v86MGTOyO+64 o8k5pBARFovFYrFYLPtkKS8vz+o9Wf2oo46KNWvWxKZNmyLLsrjooouiuLg4xo4dGwsWLKjvJXW0 b98+ysrK4oQTToiRI0fGqlWrYuXKlVFUVBRnnXVWfPe73230f66/9Nhjj8WsWbPiuOOOi8GDB8cJ J5zQ6JiaGm9lZWX89Kc/jYEDB8bpp58eq1atigEDBsSYMWPioosuqvfE/ObM7UvDhw+PefPmxUMP PRSdOnWK9957r8HtVFRUxLZt22L37t2xbNmyGDhwYMybN6/J/Tfm6/NrbEwNzaOwsDCeeOKJWLly ZZSUlDS5z5Ye84iIwYMHx4knnhgnnXRSDB48uNHj1NQ+Gns/WqJdu3Zx1VVXxYknnhgjRoyIZcuW RUTL36f3338/jjrqqIiI+OUvfxnFxcVxzz335J8vLi6OYcOGRZ8+feKHP/xhq8YKAHAwqDdEli5d GuPGjYsNGzZE375984/37ds31q9f3+RG+/TpE+3bt4+IiK5du0ZNTU1s3rw5evbsmV+nR48eTW6n oqJij/tZNDampsY7YsSIOOyww/I//+Uvf6nz1bCmvh7U0NwiInbv3h3nn39+dOvWLSZPnhzHHXdc VFdXN7idDz74IDp37hxbtmyJLVu2xGmnnRannHJKk/tvzNfn19iYGprHb37zmxg+fHhMnTq1WefH tPSYR0R07tw52rdvHx07doz27dvHli1bWr2PhubRUj179szfvLFTp07549TS9+mss86KP/3pTxER MWXKlJg8eXL+xPSILy6AsGrVqpgzZ0707NkzOnfuHLW1tXW20blz51bNAQDgQFInRGpra+Ppp5+O Dz/8MIYOHRqnnHJKrF27NqqqqqK2tjYWL14c48aNa9WOzjjjjHjttddi27ZtsWXLlli+fHmTrxk/ fnydE3krKysbHVNT4/36L8QlJSWxYsWKqKmpicrKylixYkWr5hYR8frrr8eAAQPisssui/79+8fS pUvrPP/luRRfGjVqVNTU1MQVV1wRU6dOjalTp8bQoUObta+vb+tLX59fU2NqyMSJE+N///d/44MP Poht27Y1um5Lj3lr7M2/hxENH7/6tPR9Kioqiurq6mb9/f7qWL68ild98f3ss8/GQw891KztAQAc KPI3NHzppZdi6NChccEFF8QzzzwTBQVfNMqNN94Y48aNi1wuF6NHj47+/fvH5s2b47zzzovt27fH 5s2bo7i4OMrKymLKlCkN7qiwsDBmzZoVZ555ZnTr1i1OPfXU/P9kN2T69Okxc+bM+PWvfx27du2K 2267LU4//fR6xxQRkcvlGnyuPl26dImysrIoKSmJqqqqKCoqioho1fyGDh0aNTU1ce6558ann34a J598cp3nf/SjH0VZWVlUV1fHo48+Gt/+9rdj5syZMX78+CgsLIyKioq4/fbbm/ULdn3bas2Y6nPO OedEr169YteuXTFhwoQm78je0mPeGnt7H809fhFf3DOnpe/TI488Ej/72c/iww8/jE2bNsXdd9/d 4Lrf+ta3Yvz48TFo0KA4/PDDo1u3bnHhhRfWWWfhwoWxevXqmDRpUovnCgDQVuXKy8uz2bNnN7pS bW1tVFdXR6dOnfbajocOHRpLliyJwsLCJtfdunVrtGvXLrp06dKsMbV0vNu2bWvyF+7m2rJlS/Ts 2TNyuVyzX7Nx48bo3bt3/qtBe1tLx7R+/fro27dvi8azL/6O7I99NKal79Mnn3zS6FXhvqqysjIq KyvrfAVtf2vJ32EAgJYoLy///5+INKagoGCv/PI3ceLE6NixY2zcuDEuvfTSZkVIRP3nkzQ2ppaO d29FSEREr169Wvyar38VZ29r6Zj69evX4n3srb8j+3sfjWnp+9TcCIn44rwQ54YAAIeSZoXI3vKr X/0qVq5cGYMGDdqvv1ACAAD7V9IQadeuXQwfPjzlLgEAgDaoICJi9erVUVpaGvfff3988sknzX7x smXL4ic/+ck+G9y+cv3118drr73W6te31XmnGNcbb7wRM2bMiFtvvTW2bt0aEV/ccb20tDTmzJmT v1Tt22+/HXfddVf+dY8//ng899xz+3RsAAAcOAoiItatWxevvPJK7NixIy655JKYNm1as17cr1+/ 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 SE6IAAAAyQkRAAAgOSECAAAk125/D4D9J5fL7e8hAABwiPKJCAAAkJwQAQAAkhMiAABAckIEAABI TogAAADJCREAACA5IQIAACQnRAAAgOSECAAAkJwQAQAAkhMiAABAckIEAABITogAAADJtdvfA+D/ y+Vy+3sIAACQhE9EAACA5IQIAACQnBABAACSEyIAAEByQgQAAEhOiAAAAMkJEQAAIDkhAgAAJCdE AACA5IQIAACQnBABAACSEyIAAEByQgQAAEhOiAAAAMkJEQAAIDkhAgAAJCdEAACA5IQIAACQnBAB AACSEyIAAEByQgQAAEhOiAAAAMkJEQAAIDkhAgAAJCdEAACA5IQIAACQnBABAACSEyIAAEByQgQA AEhOiAAAAMkJEQAAIDkhAgAAJCdEAACA5IQIAACQnBABAACSEyIAAEByQgQAAEhOiAAAAMkJEQAA IDkhAgAAJCdEAACA5IQIAACQnBABAACSEyIAAEByQgQAAEhOiAAAAMkJEQAAIDkhAgAAJCdEAACA 5IQIAACQnBABAACSEyIAAEByQgQAAEiu3f4ewL6Uy+X29xAAAIB6+EQEAABITogAAADJCREAACA5 IQIAACQnRAAAgOSECAAAkJwQAQAAkhMiAABAckIEAABITogAAADJCREAACA5IQIAACQnRAAAgOSE CAAAkJwQAQAAkhMiAABAckIEAABITogAAADJCREAACA5IQIAACQnRAAAgOSECAAAkJwQAQAAkhMi AABAckIEAABITogAAADJCREAACA5IQIAACQnRAAAgOSECAAAkJwQAQAAkhMiAABAckIEAABITogA AADJCREAACA5IQIAACQnRAAAgOSECAAAkJwQAQAAkhMiAABAckIEAABIrl3KneVyuZS7AwAA2iif iAAAAMkJEQAAIDkhAgAAJCdEAACA5IQIAACQnBABAACSEyIAAEByQgQAAEhOiAAAAMkJEQAAIDkh AgAAJCdEAACA5IQIAACQnBABAACSEyIAAEByQgQAAEhOiAAAAMkJEQAAIDkhAgAAJCdEAACA5IQI AACQnBABAACSEyIAAEByQgQAAEhOiAAAAMkJEQAAIDkhAgAAJCdEAACA5IQIAACQnBABAACSEyIA AEByQgQAAEhOiAAAAMkJEQAAIDkhAgAAJCdEAACA5IQIAACQnBABAACSEyIAAEByQgQAAEhOiAAA AMkJEQAAIDkhAgAAJCdEAACA5IQIAACQnBABAACSEyIAAEByQgQAAEhOiAAAAMkJEQAAIDkhAgAA JCdEAACA5IQIAACQXLuIiFwut7/HAQAAHEJ8IgIAACQnRAAAgOSECAAAkJwQAQAAkhMiAABAckIE AABITogAAADJCREAACA5IQIAACQnRAAAgOSECAAAkJwQAQAAkhMiAABAckIEAABITogAAADJCREA ACA5IQIAACQnRAAAgOSECAAAkJwQAQAAkhMiAABAckIEAABITogAAADJCREAACA5IQIAACQnRAAA gOSECAAAkJwQAQAAkhMiAABAckIEAABITogAAADJCREAACA5IQIAACQnRAAAgOSECAAAkJwQAQAA khMiAABAckIEAABITogAAADJCREAACA5IQIAACQnRAAAgOSECAAAkJwQAQAAkhMiAABAckIEAABI TogAAADJCREAACA5IQIAACQnRAAAgOSECAAAkJwQAQAAkhMiAABAckIEAABITogAAADJCREAACA5 IQIAACQnRAAAgOSECAAAkJwQAQAAkhMiAABAckIEAABITogAAADJCREAACA5IQIAACQnRAAAgOSE CAAAkJwQAQAAkhMiAABAckIEAABITogAAADJCREAACA5IQIAACQnRAAAgOSECAAAkJwQAQAAkhMi AABAckIEAABITogAAADJCREAACA5IQIAACQnRAAAgOSECAAAkJwQAQAAkhMiAABAckIEAABITogA AADJCREAACA5IQIAACQnRAAAgOSECAAAkJwQAQAAkhMiAABAckIEAABITogAAADJCREAACA5IQIA ACQnRAAAgOSECAAAkJwQAQAAkhMiAABAckIEAABITogAAADJCREAACA5IQIAACQnRAAAgOSECAAA kJwQAQAAkhMiAABAckIEAABITogAAADJCREAACA5IQIAACQnRAAAgOSECAAAkJwQAQAAkhMiAABA ckIEAABITogAAADJCREAACA5IQIAACQnRAAAgOSECAAAkJwQAQAAkhMiAABAckIEAABITogAAADJ CREAACA5IQIAACQnRAAAgOSECAAAkJwQAQAAkhMiAABAckIEAABITogAAADJCREAACA5IQIAACQn RAAAgOSECAAAkJwQAQAAkhMiAABAckIEAABITogAAADJCREAACA5IQIAACQnRAAAgOSECAAAkJwQ AQAAkhMiAABAckIEAABITogAAADJCREAACA5IQIAACQnRAAAgOSECAAAkJwQAQAAkhMiAABAckIE AABITogAAADJCREAACA5IQIAACQnRAAAgOSECAAAkJwQAQAAkhMiAABAckIEAABITogAAADJCREA ACA5IQIAACQnRAAAgOSECAAAkJwQAQAAkhMiAABAckIEAABITogAAADJCREAACA5IQIAACQnRAAA gOSECAAAkJwQAQAAkhMiAABAckIEAABITogAAADJCREAACA5IQIAACTXLiKivLx8f48DAAA4hPw/ TZpgL6pO+2QAAAAASUVORK5CYII= "
+         id="image3189"
+         x="-73.443863"
+         y="510.74521" />
+      <image
+         width="802"
+         height="629"
+         xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAyIAAAJ1CAYAAAAlsUSlAAAABHNCSVQICAgIfAhkiAAAIABJREFU
+eJzs3XlYFMe+P/73AAMIyAhCxDVGBFf0yIBIiCCKQIQYcCVGwSWOSDTRbA9fPEYTc69ej7lBxSQa
+uPoEXM4J12iUXDl60CREiU40AUFAIKAMiKjsyzAz1O8Pf9OHgemeGUSzfV7P00+covpTXVVdZJru
+rhJBj9DQUKYvnRBCCCGEEEJMdebMGVH3NJ0E7QXIwYMHn9QxEUIIIYQQQv7gVqxYAUD3goT7R2ho
+KPuf//mfX+GwCCGEEEIIIX8GK1eu5C5GRMDDi5CUlJRf96gIIYQQQgghf3irVq3CmTNnRBbaBMbo
+tRBCCCGEEELIkyEKDQ1lycnJv/ZxEEIIIYQQ8oemVqvR1NSE5uZmqNVqdHZ2wszMDBYWFrCzs0P/
+/v1hYWFhONAfIP4rr7wCC4DuhhBCCCGEEPK4MMZQV1eHhoYGdHZ2cmkA0NnZCY1GA6VSibq6Okgk
+Ejg4OEAk6jHJ1B8uPl2IEEIIIYQQ8phoNBrU1taira0NjDE4OTlh4MCBsLW1hbm5OTQaDVpaWnD/
+/n3cu3cP9fX1UCqVeOqpp2BmZvaHjk8XIoQQQgghhDwGnZ2dqK2tRXt7O8RiMdzc3GBra6uTx8LC
+AhKJBBKJBE899RRKSkrQ3t6Ou3fvwtnZWfDL/O89Pl2IEELIb1x4eDgA4PTp0zqftSwtLfHUU08h
+MDAQ8+fP557P1eYTiUQQi8Wwt7fH008/jYCAAMyYMUPnfw7dY3alLZcQQohpmpqa0NHRAXNzc4wf
+Px4WFhbco0362NjYYPz48cjPz0dHRweam5vRv3//P2z83r+tQggh5FeVl5cHAKitrcXOnTuRmpqK
+pqYmvPLKKzr5cnNz0dzcjIqKChw+fBgfffQRzp8/j82bN8PS0lJvzK4qKioeXyUIIeQPSqPRoL29
+HWq1GmPHjoVIJIJGozG4n0gkwqhRo1BUVIS2tjbY2NjA3Nz8DxcfoDsihBDyu9H9d3V5eTkAwNzc
+HBs2bMCZM2fw3XffYdWqVT3ymZmZwcHBAQkJCbC1tcWxY8fw97//HUuXLtUbkxBCyKPRfomXSCSw
+srISvJPQnbW1Nezt7dHe3g6lUol+/fr9ZuJ//vnnGD16NJ599lku78WLF1FaWoply5YZHR+gCxFC
+CPnd6P67WvtZrVajubkZwMO/ROnLp9FouBcOw8PDcezYMXzzzTd4+eWXBcsghBDSO2q1GiqVCi4u
+Ljp3Ei5fvoynn34agwYN4tJqampQUVGBqVOncmkDBgzA7du3oVar9f5u5ouvpVQqsX//fsTGxva4
++/0o8d3d3fHpp5+ipaUFM2fORFZWFg4fPoy1a9fq5DMUH+jFhQhjDGq1Gm1tbVAqlQAAKysr9OvX
+DxYWFiZNBUYIIcR4fBcidXV1OHjwIAAgNDSUN5+WnZ0dAOD+/fs9fjZ37twe5Z48efLRDpwQQv6k
+VCoVrK2tdaa8lcvlOHbsGN5++20MGjQINTU1+Nvf/gY3NzdIpVLuu7SVlRXUajW3nzHxtTQaDZKS
+klBQUIC9e/fitdde6/F4VG/j+/n5QSwWY+/evSgsLMSPP/6I9evXY+rUqWhvbzcpvsnviGj/8tav
+Xz88/fTTAIDq6mo0NzfDzs4OYrHY1JCEEEJ64cUXXwTw8GV1FxcXrFu3DvPnz0djY6PgfpWVlQAA
+Z2fnHj/T945IWVlZHxwtIYT8uXS9Q931TsGbb76JTz75BNu3b8fSpUuRlpYGT09PrF27Vuf3t0gk
+Enzcii++SqXCxx9/jHv37mHHjh3YtWsXdu/ejbi4OJ3v6b2N39LSAi8vL/j7++PChQuYMWMGvLy8
+0NLS0mN/Q4+LmXxHpLW1FdbW1hg7diyXJpFIcOPGDbS2tsLe3t7oWIQQQozX/Xe19qJBe6e6qakJ
+9fX1Bu+IfP311wCAOXPm9PhZaWlpXx82IYT8KZmbm0MkEqGjo0NntfG6ujrIZDLs2rUL+/fvx+TJ
+kyGTyVBXV6ezv1qthkgkgrm5ud7v6vriM8aQkpKC6upqbNu2DdbW1tiyZQs2b96MlJQUvPLKK9wd
+l97E1zp16hS+/fZbzJ49G//617+4mRtNOX6gFxci7e3tGDJkCHerRcvJyQllZWWCU3QRQgjpve6/
+q0tKSozer62tDdXV1cjIyEBWVhZ8fX0RFRWFpqYmwTIIIYT0jpmZGczNzdHa2so9EqvV0NCAN954
+g3tsqqGhocfv39bWVlhYWMDMzEzv72a++NOnT8eqVatgYWGB9vZ2WFhYYNu2bSgqKgJjjIvV2/gX
+LlzA//7v/2L9+vWYNm0axo0bh6SkJDDGMGPGDKOPH+jlOyKdnZ09LkQ6Ozt1KkcIIaRvGbrTwWfe
+vHkQi8Xo378/Ro0ahQ8++ACzZs3CnTt3eh2TEEKIMDMzM9ja2qK+vl7vrFHai5F79+7pfYSprq4O
+NjY2ghcK+uJPmjQJHR0d3LvcGo0GYrEYkydP1nl8qrfxa2pqsGbNGkyePBm1tbX4y1/+AplMhoKC
+Ap1HuAzFB3pxIWJpaYmqqqoeqypWVVXB0tKS/idGCCF9TPsIVnFxsd7PhvYD/j1zVkdHBxobG1FV
+VSVYBiGEkEdnb2+PW7duca82dNXZ2Yk7d+7o3a+9vR2tra0YPnw4AP7v6vrid7/TDTycQUt7YfKo
+8desWQOlUsm9z9LY2IipU6di+vTpqK2tNSm+yS+r9+vXD42NjSgqKuJedKytrYVarab3Qwgh5DHo
+fnFg7MWCKRcVdAFCCCF9z9zcHE899RSqqqowbNgw3oX9utJoNFAoFHjqqadgYWEhuIjgrxFf38VT
+1/dbTIlv8h0Rc3Nz9O/fH21tbVAoFAAe3iXp37+/4MsohBBCCCGE/JloNBr0798fKpUKt27dgouL
+C6ysrHjzt7e3o6amBo6Ojtx+f+T4vVrQ0MLCgveldLoQIYQQQggh5CGVSoWBAwdCLBajuroaVlZW
+sLW1hZWVFSwsLKBWq6FUKtHS0gKlUonBgwfD3t4eSqXSqO/Vv+f4tLI6IYQQQgghjwljDO3t7ejf
+vz8cHBzw4MED1NfX4969e1CpVBCLxejXrx8GDBgABwcHaDQatLW1/Sni04UIIYQQQgghj1l7eztE
+IhHs7e0xcOBAmJmZcYsGdnZ2QqVSobW1tdffy3+P8U1+WZ0QQgghhBBiOu3dhfb2dooPuiNCCCGE
+EEII+RXQhQghhBBCCCHkiaMLEUIIIYQQQsgTZwEAHh4ev/ZxEEIIIX1GJBL92odACCFEQGhoKMx+
+7YMghBBCCCGE/PmY0V+NCCGEEEIIIU+SSCSiOyKEEEIIIYSQJ89CJBKhoKAAu3fvhpWVFYKCgjBr
+1izY2tr2SQHx8fGIiorCX/7ylz6J9yjxGxoakJCQgB9++AE7duxAUFDQYzkmYxUWFuLs2bMoLS1F
+YmIiACAvLw9JSUk6+ZYsWYKAgADefQBgw4YN3CqWLi4ueO+9955QLQghhBBCCDGNSCR6+GhWZWUl
+srOzMXHiRFy8eBEeHh7o7Ozsk0LKysrQ3NzcJ7EeNX5GRgbs7e0hl8t/9YsQAEhNTYVCocChQ4e4
+NIlEAqlUym0ZGRmws7MT3Eebrt1nwoQJT6gGhBBCCCGEmE4kEv17ZfVhw4ZBJpMBALKysvDNN98g
+MDAQDQ0NOHToEK5evQqZTAY/Pz8AQFxcHPz9/fGPf/wDL7/8MubPn88FLi0txX/+539CIpFAqVRy
+6Xyxbt26hSNHjmDkyJFIS0tDQEAA3n77bd78fPGFrFmzBnK5HDY2NlizZg1kMhmkUilv2R9++CH+
+9a9/wcbGBitXrsScOXPwz3/+E9988w0KCgoQFRWFEydO4P3334ebm5tg/fj8x3/8BxoaGvDpp59y
+aSNGjOD6oaSkBElJSZBKpYL7AICZmRm3HyGE/Jro3UNCCCFGCQ8PZ5mZmSw4OJgxxtiVK1eYg4MD
+q66uZowx5ufnx06cOMHKyspYQEAAu3XrFmOMMUtLS7Znzx5WWFjI3N3dWWtrK2OMsc7OTjZq1Ch2
+4cIFdvLkSWZmZsa+++47wVi5ubls2LBh7P/9v//HiouL2ffff8+bXyi+IZs3b2Yff/yxThpf2SdP
+nmS1tbXsxo0bzM3Njf3yyy/s448/Zhs2bGDbt29nISEh7OTJk2zr1q1cLL76Camvr2cSiUTvz+Lj
+49muXbuM2mfAgAHMxcWFPf/88+z06dMGyyWEkMcFAG200UYbbbQJbuHh4cxC+5ernJwcSKVS5OXl
+4auvvoKLiwsUCgUaGxvR0dEBuVwONzc3nDp1CnFxcRCLxYiNjYVYLIaPjw9yc3O5/7q6unLvNGgf
+ExKKBQCtra3Ytm0bzM3N4ebmxpvfz89Pb/xH0b1sAJBKpTh16hSKiorQr18/lJSUcOU5OTmhpqYG
+EyZMwBdffGFU/UylVquRlpYGuVxuVP7i4mI4OzvjypUrCA8PR0VFBaytrXtVNiGEEEIIIY+TzqxZ
+06ZNw48//oicnBxs3LgR7e3tKC8vh42NDerq6lBXVwdvb29MmjQJADBw4ECIxWIAgJ2dHVQqFQCg
+pqYGjo6OXCEDBw4EAMFYADB16lSYm5tzn/ny88V/FN3L7ujowJw5c9C/f3+sWrUKzzzzDPcImI2N
+DcRiMaytrSEWi1FXV2dU/Ux1+vRpTJkyBYMGDTIqv7OzMwDA29sbkydPxrffftvrsgkhhBBCCHnc
+LLo/y+vp6YnAwEDs27cPGzduhEqlwrJly9CvXz8AQEtLi2BAPz8/rFu3DiqVCiqVClevXgUA+Pr6
+CsbqeiFgKL+++I+ie9nXr1+Hq6srFixYAKVSiStXrmD16tWCMQzVz1TJyclYuXKlUXmbmprQv39/
+AEBjYyMKCgrg4+PT67IJIYQQQgh5nHjXEXnrrbeQmJgIpVKJzZs3IyIiAnPnzoVUKsXFixcFg9ra
+2iI2NhZ+fn7w8fHBqFGjADx8mdqUWHz5+eL3pSlTpkClUiEkJAT+/v6YOHGiwX1MrR8AbN26FTNm
+zEBzczO8vLyQnJwMAKisrIRcLkd4eLhR++Tn52PYsGHw8vKCr68vEhISIJFIeld5QgghhBBCngDR
+iy++yE6cOGEw4507d+Do6AhLS0ujAjc2NsLe3r5PYunLLxS/r9TV1WHAgAEmzwBjav36SnFxMdzd
+3Z9omYQQ0h3NmkUIIcSQF198seejWXxcXFxMCi50kWBqLH35H/dFCAA4ODj0aj9T69dX6CKEEEII
+IYT8HvA+mkUIIYQQQgghj5MZ3UInhBBCCCGEPEkikUj30az4+HjcunULK1aswOzZs7n0O3fuYN++
+fVAqlYiLi8PIkSOxZs0aAICHhwciIiIwbNgwAEBRUREyMjLwxhtvAADS09MhkUgwe/ZsFBUVYdeu
+XaitrYWh91IKCgqwe/duWFlZISgoCLNmzYKtrW2fVDw+Ph5RUVH4y1/+0ifxuiooKIC7uzssLCwM
+Z+axdOlS7Nixg2tTQ9rb27Fnzx6UlpbC3d0dixYtwvDhwwEAd+/exaFDh+Do6IiYmBhuymU+Qvkr
+KyuRlpaGlpYWzJs3D1OmTEFeXh6SkpJ0YixZsoRb5yU/Px8pKSlwcHDA5s2bAQCFhYU4e/YsSktL
+kZiYyO3Hl/4k7dmzB76+vvD29gbwsG1TU1Mhl8sxYcIELFy4EIMHDwYAbNiwAW1tbQAePo733nvv
+GYx//PhxVFVVYc2aNTptqy+dr20dHR0F2xwADh8+jLq6Oqxbt45L09cXQt5//30oFAruc0BAAJYs
+WcI79mtqapCeno7c3FyMGzcO69atg4WFBRoaGhAfH49PPvnEYJndde8PwPQxZkp+hUKB999/HyUl
+Jdi9e7fBiSqEzg8tfX0hpHs/CZXRmzEpNM5MPUcIIYSQ3urxaFZZWRlWr16tcxHyySefIDIyEp6e
+npBKpbh58yYA4MCBA5BKpWhvb0dAQADOnz8PAKiqqsLp06e5/XNycpCbmwsAGDNmDHbv3o3r168b
+PLjKykpkZ2dj4sSJuHjxIjw8PNDZ2fnotf7/69nc3NwnsbqLiopCfX39I8W4ceMGt26JMdRqNcRi
+MWQyGezs7BASEoLOzk4wxvDss89iyJAhEIvF8PLywsNFj/UzlP+FF17AkCFD4Ofnh3nz5qGhoQES
+iQRSqZTbMjIyYGdnBwD461//itdffx2hoaHchREApKamQqFQ4NChQzrl86U/KU1NTUhLS4NUKuXS
+7ty5gxs3bmDx4sVQq9UICgri2iQ1NZWrtzELa7700ks4f/48Ojo6dNqWL52vbYXaHHh4fm/btg1n
+zpzh0vj6Qkh6ejpcXFy4ckaMGAGAf+wHBwfDxsYGMpkM9fX13BiTSCS4d+8efvrpJ6PK1dLXH4Dp
+Y8yU/EOHDsX+/fvRr18/o6bfFjo/AP19IURfPwmVYeqYBPjHWW/OEUIIIeSRzJ8/n2ktXLiQZWVl
+sa48PT3ZL7/8wroDwP07KSmJrVixgjHGWFZWFgsMDOR+9uabb7Jdu3Zxn1taWpirq2uPeN1lZmay
+4OBg7rO3tzd3bPX19SwxMZFFR0ez7Oxsnf3Wrl3Ljh49yiIjI1l6ejqXXlJSwlauXMk2btzI5s6d
+y7777jvBWBUVFWz79u3s6NGjLCwsjO3cuVPweOVyOZPJZMzR0ZFFR0czmUzGKisrGWOMVVVVsXff
+fZfFxcWx/Px8bh++dE9PT1ZSUsIYY2znzp3sypUrBturKzc3N1ZcXMwuXbrEZs2axaUHBwdzcfUR
+yv/gwQPm7OzMOjs7GWOMhYSEsHPnzunsf/PmTebh4cF9Hj9+PFOr1XrLqq+vZxKJxOh0fTIzM1lC
+QgKLiIhgx44dY1FRUay4uJgxxlhxcTHbuHEjCwoKYlu2bDEq3u7du9n27dsF80ycOJFdu3aNMcaY
+k5OTUXEZY0yj0bBhw4Zxn2fOnMkKCwt507vr3rZC6fPnz2fJycksLCyMSxPqCz4eHh4sNze3R7q+
+sX/t2jX23HPP8cbKzMxk0dHRJpXfvT9MHWNC+RljbNeuXez5559n8+fPZxkZGTplh4WFsZycHJOO
+lzHd84Mx/X0hxJh+0pbRmzGppW+cmXqOCI0xALTRRhtttNEmuM2fP58JviNy9+5dKBQKjBw5kjeP
+Wq1Gdnb2Y3nMSUsul6OkpATjxo0DAISFhWHkyJHYunUrNm3ahNu3b3N5U1JSUFtbi+3btyMhIQFt
+bW1gjCE4OBjR0dGYMWOGzh0bvlgNDQ3Yt28fcnNz8dFHH8HPz0/wGKVSKfbv34+hQ4fiww8/5P4N
+gFtXZMWKFYiMjOQe5+FL11q7di1aWlrg5eVlVDsdOHAAixYtwvTp0+Hm5gZ7e3udv+q2tLTgxx9/
+5N1fKL+DgwNWr16N9evXY+vWrXBwcMD06dN19k9JSUFMTAyAhyvN29raIjw8HN7e3tixY4dRdTBF
+aWkpWltb4ePjg4MHD+Kll17CkSNHAABvv/02XnjhBZw8eRJBQUFGxZPL5YKP4igUCjQ1NXGzk6nV
+agwePBhz5sxBRkaGYOyioiIMGjQIpaWl+OGHH+Du7o4rV67wpnfXtW2F0g8fPgxfX1+dmdsepS/S
+09Nx4MABHDhwAJWVlTo/6zr2x48fj/LycsTFxSE7O7tHnEmTJuHy5ctGlwv07A9Tx5hQfgBwc3PD
+559/jg8++AAbNmxAeXm5ScfXXffzQ19fCDGmn7qWYeqYfNSyu+vNGCOEEEK0RCIRBB+arqioEPyf
+qJeXFzo6OuDv74/o6Og+P8CcnBxIpVLk5eXhq6++gouLCxQKBRobG9HR0QG5XA43NzecOnUKcXFx
+AACxWIzY2FiIxWL4+PggNzcX1tbWcHV15Z6R1j5GYyhWa2srtm3bBnNzc7i5ufWqDnfv3gVjDHPn
+zgUABAYG4sKFC5BKpXrTn3/+eQBAbGws7OzsTH6u3tLSEkqlEkqlEuPHj4dGo8Fbb70FtVqNqqoq
+3L17l3dfQ/mbm5vR0NAAMzMziEQitLS0cGulqNVqpKWlQS6XA3j4SIpcLkd+fj6efvppBAcHIyws
+DB4eHibVx5AJEybAyckJNTU1mDBhAr744gsAgJWVFb788ktYW1sbvIjUKioqgqurq96fKZVKLFu2
+DElJSbCxsQHwcN0WZ2dnXLlyBeHh4aioqIC1tbXe/aurq+Ho6Ijs7GwUFhbCwcEB1dXVvOlddW9b
+vvQHDx4gOTkZZ8+eRWZmJpfvcfRF97FvaWmJ69evY//+/XjttddgY2ODr7/+mptme9CgQaiuroZG
+o4G5ublRZQj1R1d8Y0w7lvhIpVKcOnUKRUVF6NevH0pKSgT/6CKk+/nB1xdCDPWTvnPQlDH5KGXr
+05sxRgghhHQleEfE09MTVVVVPf5SryWXy5Gbm4ukpCQMGDAAAGBjY9PjXQ7t/zRNNW3aNPz444/I
+ycnBxo0b0d7ejvLyctjY2KCurg51dXXw9vbGpEmTuH0GDhzIvexrZ2cHlUqFmpoaODo66uQBYDDW
+1KlTjf7SxKe6uhpOTk7cZycnJ1RVVfGma4WEhKCsrMzg6uxdyWQypKWl4f79+8jKygIAXL58GYGB
+gQgKCoKnpyf8/f0FY/Dlz8vLQ3Z2NlJTU7Fnzx7Y2dnh+PHj3H6nT5/GlClTMGjQIAAPzx13d3eM
+GzcONjY2CAgIwLlz54yui7FsbGwgFothbW0NsViMuro6AMDnn38OqVQKmUyGmTNnGhVrwIABaGho
+6JGu0WiwdOlSLFiwQGe1e2dnZwCAt7c3Jk+ejG+//ZY3tqenJ8rKyhATE4Pt27ejtLQUnp6evOld
+dW9bvvSDBw+io6MDr776KpKSkriXlh+lLxYsWACZTAaZTKYzeYK+sS+RSPDOO+/g6tWrcHV1xcmT
+J7n8HR0dsLCwMGk88fVHd4bGkj4dHR2YM2cO+vfvj1WrVuGZZ54x6b2srvSdH3x9IUSon/SVYeqY
+7G3ZfHozxgghhBAtg+uImJubw9/fH2lpaVzagwcPBIMOGTIE1dXVUKvVAB7edXjUBf48PT0RGBiI
+ffv2wdfXFyqVCsuWLeO+IE2ZMkVwfz8/P1y9ehUqlQqtra24evUqABiM1ZuLEG39tSZNmoSysjK0
+tbWhs7MT33//PWbPns2brhUZGYm0tDSsXLnS4Iu2DQ0NOhd/5eXlOl8aw8LCMHr0aOTn5+s86nLm
+zBm9L4bry29ra4v6+nruJVntqvNaycnJWL58OfdZuyK99ovk9evXMXXqVMF69LWYmBhcvnwZ5eXl
+aGxsNJh/7NixKCkp6ZG+evVqTJkyhbtTBjx8kVqrsbERBQUF8PHx4dK6t+2AAQNgaWmJ0tJSNDY2
+Qi6XQyqV8qZ31b1t+dJffvll7NmzBzKZDKGhoRgxYgRCQ0OfSF/cv38f9+/f5z6rVCqdi/9ffvkF
+Y8aMMSkmX38YO8b48gMP28DV1RULFizAiBEjejwON3HiRFRUVBh1nPrOD76+6ErfOcLXT/rKMHVM
+CuntOWLqGCOEEEK6MriOyK5du/Dzzz/D19cXY8eOFfyrLwAMHz4cERERGD9+PPz8/FBXV6fzV+Te
+euutt5CYmAilUonNmzcjIiKCey7c0F0DW1tbxMbGws/PDz4+Phg1ahQAwMzMzORYhqxfvx6xsbHw
+8vJCSUkJRCIRNm3ahNmzZyMgIADPPvssRowYwZvelYeHB2JjY7npUvnk5eXB1dUVXl5eGDNmDObM
+mcM9UjF37lx4eXlh7dq1+PTTT2Fm9u9rz2+++Qbp6ek6sfjyjxo1CvPnz4dUKoW/vz80Gg1efPFF
+AA9nOJPL5T36OTExkXtnZcCAAfD19QUAbN26FTNmzEBzczO8vLyQnJwsmN4bwcHBiIiIQGRkJBYt
+WsQ9IiRk3rx5+Oc//6mTdunSJaSmpuL48ePw8vKCl5cXLly4gPz8fAwbNgxeXl7w9fVFQkICJBIJ
+t5++tv3444+xfPlyhIaGYsuWLdyXRr50gL9t9aV3neFq9OjRkEgkGD16NAD+vugr9+7dw9SpU+Hv
+7w9PT090dnbqPBqVmZmJefPmmRRTX38Axo8xvvwAMGXKFKhUKoSEhMDf37/Hu0ExMTH45JNP4OXl
+hcLCQt5j5Ds/hPpCS985oq+f+MrozZgE+MeZqedIb8YYIYQQoiUSiYDFixdzM50sXLiQvfHGG+zn
+n3/uMUPK/fv3mVKpNHpGlZaWFlZbW6uTplAo2N69e42aNcsY1dXVJh1TQ0NDn8UylUajYa2trUan
+90ZZWZne9Nu3b5sURyi/RqNhTU1NJsVraWkxKX9fUSgUJvfpzJkzWXV1tdH5i4qKTD0s1tbWZlJ6
+X3rcfaFQKJhKpdJJ02g0bOrUqay5udnkeKb0R2/G0oMHD7hZp35LTOmn3ozJviqbb4zhNzAbC220
+0UYbbb/tbfHixUy0ePFiduzYMQDAuXPnUFZWhmnTpum8K9FXtGuM2NvbIyoqqs/jE/Ko8vPzIRaL
+uZmPyKOrq6vDTz/9hMDAQJP3pf74fTJ0p50QQghZvHgxRFFRUezo0aO/9rEQQgj5g6ALEUIIIYZE
+RUUZfkeEEEIIIYQQQvpSj3VE4uPjcevWLaxYsUJn1pmCggKkpKRg4MCBePXVVyGRSLgXqD08PBAR
+EcHN0lRUVISMjAy88cYbAB4uiCaRSDB79mwUFRVh165dqK2txYkTJwQPrqCgALt374aVlRWCgoIw
+a9Ys2Nra9knF4+PjERUV9VgWYSwoKIC7uzssLASXaBG0dOlS7NixQ2fmK0MKCwtx9uxZlJaWIjEx
+kUvfsGEDN/2yi4sL3nvvPd4Y7e3tSE1NhVwux4QJE7Bw4UIMHjzYYKzKykqkpaWhpaUF8+bNw5Qp
+U3hjmZr+pO3Zswe+vr7w9vbWSc/Pz0dKSgocHBywefNmAKa1LV/+9vZau7vgAAAgAElEQVR27Nmz
+B6WlpXB3d8eiRYswfPhwbh99bdvV4cOHUVdXh3Xr1hmMpa8OQt5//30oFAruc0BAAJYsWcI79mtq
+apCeno7c3FyMGzcO69atg4WFBRoaGhAfH2/ymjiA/v4wdYyZkl+hUOD9999HSUkJdu/eLbjApVZf
+jD0Agv1nyrmjb6rgJUuWICAgwOA4O378OKqqqrBmzRpuGnRCCCHkcdG5I1JWVobVq1frXIS8/vrr
+ePPNNzFnzhzY2dnh559/BvBwFW+pVIr29nYEBATg/PnzAP79HohWTk4OcnNzAQBjxozB7t27cf36
+dYMHVllZiezsbEycOBEXL16Eh4dHj/VJequsrAzNzc19Equ7qKgog9PtGnLjxg2T1zRITU2FQqHo
+MR1vamoqN3uPdiFHPnfu3MGNGzewePFiqNVqBAUFcVODCsV64YUXMGTIEPj5+WHevHloaGjgjWVq
++pPU1NSEtLS0HtPn/vWvf8Xrr7+O0NBQnS/2prQtX361Wg2xWAyZTAY7OzuEhITonOf62larrKwM
+27Ztw5kzZwzG4quDkPT0dJ3Zn7QzUfGN/eDgYNjY2EAmk6G+vp4bYxKJBPfu3cNPP/1kVLlafP1h
+6hgzJf/QoUOxf/9+9OvXDy0tLUbt0xdjDxDuP1POHYlEwuWVSqXIyMiAnZ0dAOEx/tJLL+H8+fPo
+6OiAl5fXEx9/hBBC/lxEIhGwZMkSbqaThQsXsqysLO5ze3s7GzJkiN5ZZQBw/05KSmIrVqxgjDGW
+lZXFAgMDuZ+9+eabbNeuXTozshgza1ZmZiYLDg7mPnt7e3PHVl9fzxITE1l0dDTLzs7W2W/t2rXs
+6NGjLDIykqWnp3PpJSUlbOXKlWzjxo1s7ty57LvvvhOMVVFRwbZv386OHj3KwsLC2M6dOwWPVy6X
+M5lMxhwdHVl0dDSTyWSssrKSMcZYVVUVe/fdd1lcXBzLz8/n9uFL9/T0ZCUlJYwxxnbu3MmuXLli
+sL20dZFIJDppTk5ORu2rz8SJE9m1a9cEYz148IA5Oztz50hISAg7d+6cwVi9Te8qMzOTJSQksIiI
+CHbs2DEWFRXFiouLGWOMFRcXs40bN7KgoCC2ZcsWwThau3fvZtu3b++RPn78eKZWq3ukm9q2xuR3
+c3Pj6mCobefPn8+Sk5NZWFiYwVh8dRDi4eHBcnNze6TrG/vXrl1jzz33HG+szMxMFh0dbVL53fvD
+1DEmlJ8xxnbt2sWef/55Nn/+fJaRkaFTdlhYGMvJyTH6WPt67DGm23+mnjtaN2/eZB4eHrz7aMeZ
+RqNhw4YN49JnzpzJCgsLBcsTGmP4DczGQhtttNFG2297W7JkCRN8RyQ7OxsTJkwQfPFQrVYjOzv7
+sTzmpCWXy1FSUoJx48YBeLjg3siRI7F161Zs2rQJt2/f5vKmpKSgtrYW27dvR0JCAtra2sAYQ3Bw
+MKKjozFjxgydOzZ8sRoaGrBv3z7k5ubio48+gp+fn+AxSqVS7N+/H0OHDsWHH37I/RsAt0bJihUr
+EBkZyT1iwZeutXbtWrS0tMDLy6vXbadWqzF48GDMmTMHGRkZRu+nUCjQ1NSkM1uRvlgODg5YvXo1
+1q9fj61bt8LBwQHTp083GKs36d2VlpaitbUVPj4+OHjwIF566SUcOXIEAPD222/jhRdewMmTJxEU
+FGRUneVyeY9HccrLy2Fra4vw8HB4e3tjx44dgu0hRCj/gQMHuDUc3NzcAAi37eHDh+Hr66t3sdDu
+sYTqYEh6ejoOHDiAAwcOoLKyskd9tGN//PjxKC8vR1xcHLKzs3vEmTRpEi5fvmx0uUDP/jB1jAnl
+BwA3Nzd8/vnn+OCDD7BhwwaUl5ebdHyG9Hbs6TsXTD13tFJSUhATE6O3nK7jrKioCIMGDUJpaSl+
++OEHuLu791jksbvejDFCCCFESyQSwULoIuOXX37hnh9OTk7Gp59+iqVLl2LDhg0AAC8vL3R0dMDf
+3x/R0dF9foA5OTmQSqXIy8vDV199BRcXFygUCjQ2NqKjowNyuRxubm44deoUt+KwWCxGbGwsxGIx
+fHx8kJubC2tra7i6uiIgIAAAuEcbDMVqbW3Ftm3bYG5u3uN/8Ma6e/cuGGOYO3cuACAwMBAXLlyA
+VCrVm65dBC42NhZ2dna9eq6+q+LiYjg7O+PKlSsIDw9HRUUFrK2tBfdRKpVYtmwZkpKSYGNjYzBW
+c3MzGhoaYGZmBpFIhJaWFlhaWgrGMjWdz4QJE+Dk5ISamhpMmDABX3zxBQDAysoKX375JaytrQ1e
+RGoVFRXB1dVVJ62srAxyuRz5+fl4+umnERwcjLCwMHh4eJjctobyW1paQqlUQqlUwsrKCgD0tm1z
+czOSk5Nx9uxZZGZm6i2rayyhOvRW97FvaWmJ69evY//+/XjttddgY2ODr7/+mlvkbtCgQaiuroZG
+o4G5ublRZejrD334xljXBRX1kUqlOHXqFIqKitCvXz+UlJRg5MiRRh2bMXoz9rS6nwu9OXfUajXS
+0tIgl8t7xO8+zqqrq+Ho6Ijs7GwUFhbCwcGhx2r03fVmjBFCCCFaIpEIZkIZZs6ciWvXrgEAXnnl
+FaxatUrnr6JyuRy5ublISkriVoO2sbHp8S6HMV8o9Zk2bRp+/PFH5OTkYOPGjWhvb0d5eTlsbGxQ
+V1eHuro6eHt766x5MnDgQO4lSzs7O6hUKtTU1MDR0VEnDwCDsaZOnWr0lyY+1dXVcHJy4j47OTmh
+qqqKN10rJCQEZWVlj7zSu7OzMwDA29sbkydPxrfffiuYX6PRYOnSpViwYEGPVZn1xcrLy0N2djZS
+U1OxZ88e2NnZ4fjx44KxTE0XYmNjA7FYDGtra4jFYtTV1QEAPv/8c0ilUshkMsycOdOoWAMGDNB5
+BwMAPD094e7ujnHjxsHGxgYBAQE4d+4cb3sIEcovk8mQlpaG+/fvIysrCwB42/bgwYPo6OjAq6++
+iqSkpB4vJ3ePJVQHQxYsWACZTAaZTKYzeYK+sS+RSPDOO+/g6tWrcHV1xcmTJ7n8HR0dsLCwMGk8
+6esPfQyNJX06OjowZ84c9O/fH6tWrcIzzzxj8ntZhph6fmjpOxdMPXcA4PTp05gyZQoGDRqkE1/f
+OPP09ERZWRliYmKwfft2lJaWwtPTU/A4ezPGCCGEkK4EH80aNWoUlEolfvzxR6MDDhkyBNXV1VCr
+1QAe3nXQ9/iIKTw9PREYGIh9+/bB19cXKpUKy5Yt474gdZ9JqDs/Pz9cvXoVKpUKra2tuHr1KgAY
+jNWbixBt/bUmTZqEsrIytLW1obOzE99//z1mz57Nm64VGRmJtLQ0rFy5stcvvzc1NXH/bmxsREFB
+AXx8fLi0M2fO9HjBdvXq1ZgyZQp3V8hQLFtbW9TX13MvttbV1XFfTPlimZreWzExMbh8+TLKy8vR
+2NhoMP/YsWNRUlKikzZgwACIRCLuC/H169cxdepUk9uWL39DQ4POhXt5eTn3hZ+vbV9++WXs2bMH
+MpkMoaGhGDFiBEJDQ3lj8dWhL92/fx/379/nPqtUKp2L/19++QVjxowxKaa+/gCMH2N8+YGHbeDq
+6ooFCxZgxIgRPR5DmjhxIioqKkw63q4MnR9Az3OEr/96c+4AD+9iL1++vMex6RtnAwYMgKWlJUpL
+S9HY2Ai5XN5jkgB9TB1jhBBCiJbBR7MA4MiRI/jb3/6G27dv4+7du/joo48E8w8fPhwREREYP348
+nJ2d0b9/f6P/ui3krbfeQkBAAOLi4rB582ZERETAysoKCoUCO3bs0Pni0Z2trS1iY2Ph5+eHtrY2
+jBo1CgBgZmZmcixD1q9fj9jYWCiVShw7dgyjR4/Gpk2bMHv2bIhEIvj7+3OzD/Gla3l4eCA2NhZr
+1qzB3//+d8Fyt27dipMnT6K5uRleXl6IjY3FxIkTsWDBAri4uKCtrQ0JCQmQSCTcPt988w3y8vK4
+LyuXLl1CamoqJk+ezN3V2LVrF2bMmIH8/Hy9sSQSCebPnw+pVAo7Ozs4OTnhxRdf5I1lZWVlUvqM
+GTN61Q/BwcFwcHBAe3s7Fi1axD0iJGTevHlISUnB0qVLddITExOxaNEitLa2YtSoUfD19cXly5dN
+alu+9svOzsayZcswcOBANDU1ITw8nHtkatSoUXrb1sLCgru4v3PnDiQSCUaPHi0YS18d+tK9e/cw
+Z84cDB06FM3NzXB3d9d5NCozMxPz5s0zKSZff5gyxvjyT5kyBSqVCiEhIaivr+/xblBMTAzi4uKw
+c+dOpKWlYezYsbzH2ZuxB/Q8R/Ly8vT2X05OjsnnTmVlJeRyOTeWtITG+Mcff4zly5dDo9Fgy5Yt
+3B8U+PRmjBFCCCFaIpEI6DqTzcKFC9kbb7zBfv755x4zpNy/f19wBpXuWlpaWG1trU6aQqFge/fu
+NWrWLGNUV1czpVJpdP6GhoY+i2UqjUbDWltbjU7vS0VFRY89lkajYU1NTX1WTl9QKBQm9+nMmTNZ
+dXW13p+1tLT0SDO1bfnyl5WV8e5jatsKxdJXh76kUCiYSqXSSdNoNGzq1KmsubnZ5HhC/dFdb8bS
+gwcP9M4K2Fd6M/b4+q83505vtLW1GZ2Xb4zhNzAbC2200UYbbb/tLTo6moliYmKY9vGAc+fOoays
+DNOmTdN5V6KvaNcYsbe3R1RUVJ/HJ+RR5efnQywWG5yxixivrq4OP/30EwIDA03el/rj98nQnXZC
+CCEkJiYGouXLl7ODBw/+2sdCCCHkD4IuRAghhBiyfPly4VmzCCGEEEIIIeRx0HlZPT4+Hrdu3cKK
+FSswe/ZsFBQUYPfu3bCyskJQUBBmzZoFW1tbAMCaNWt0Ai1YsEDnJe+///3vqKiowDvvvMOlvfPO
+O9i0aZPOS5v//d//jaKiIp1YlpaW2Lt3L+Li4qDRaLj0d999F5cuXcLPP/+Mbdu2AQA+++wzNDU1
+4Y033hA8rqKiIuzatQu1tbU4ceKEYKMI1ftRxcfHIyoqqs8XgNTW28PDAxERETqz5/yaCgoK4O7u
+DgsLC6Py37lzB/v27YNSqURcXNwjrevQ0NCAhIQE/PDDD9ixYwe36Jqpx9TbfbpbunQpduzYYXTf
+tLe3Y8+ePSgtLYW7uzsWLVqE4cOHo729HampqZDL5ZgwYQIWLlzIrffDZ8OGDdyCmS4uLnjvvfcM
+xiksLMTZs2dRWlqKxMREg+lahw8fRl1dHdatW8dbhydtz5498PX1hbe3NwD+ttU6fvw4qqqqsGbN
+Gm46cH26T50MAEuWLOHWLAJ020Pr7t27OHToEBwdHRETEwOxWMzbH3zpxpStz/vvvw+FQsF9DggI
+wJIlS3h/h9TU1CA9PR25ubkYN24c1q1bBwsLCzQ0NCA+Pv6R1zoihBDy59RjHZGysjKsXr2au6Co
+rKxEdnY2Jk6ciIsXL8LDw4ObLvLAgQOQSqXc1n2u+l27dmH//v1obm7m0tLS0tDa2qqTz93dHVKp
+FG1tbSgoKIBUKuWm0PX09ERzczOX3q9fP+Tk5OCzzz5DeXk51Go1PvzwQ52V0vmOa8yYMdi9ezeu
+X79usGGE6v2oysrKdNqkr2jr3d7ejoCAAJw/f77Py+iNqKgoo6cf/uSTTxAZGQlPT09IpVLcvHnz
+kcrOyMiAvb095HK5zsrPphzTo+zT3Y0bN0xaq0KtVkMsFkMmk8HOzg4hISHo7OzEnTt3cOPGDSxe
+vBhqtRpBQUHcFL98UlNTuTGhXdDTUJzU1FQoFIoeUzzzpQMPz+9t27bhzJkzgnV4kpqampCWlqYz
+Ha3Qcb300ks4f/48Ojo64OXlJdi2EolE5/dNRkYG7OzsuJ93bw8AYIzh2WefxZAhQyAWi7ky+PqD
+L91Q2XzS09Ph4uLC7aedYYzvd0hwcDBsbGwgk8lQX1/P/f6SSCS4d+8efvrpJxN6gxBCCOli5cqV
+3EwnCxcuZFlZWdznzMxMFhwczH329vbmfg6AdyaViooKNm3aNLZu3Tr25ZdfcumDBw9mVVVVevf5
+7LPP2CuvvNIj/eOPP9ZJf/PNN1lsbCz7r//6L3bmzBm2evVqFhgYqDNbC5+WlhajZuwSqnd9fT1L
+TExk0dHRLDs7W2e/tWvXsqNHj7LIyEiWnp7OpZeUlLCVK1eyjRs3srlz57LvvvtOMFZFRQXbvn07
+O3r0KAsLC2M7d+7UKScrK4t98sknOmld652UlMRWrFghGIuv7OLiYrZx40YWFBTEtmzZolMG3z76
+6i2Xy5lMJmOOjo4sOjqayWQyVllZKVgHT09P9ssvvzB9+OoRHx/P5Tl8+DC7efMmY4wxmUzGPD09
+2XPPPcdkMhmTy+UGj0kfoX2qqqrYu+++y+Li4lh+fj63D1+6p6cnKykpYYwxtnPnTnblyhXBsrtz
+c3NjxcXFPdInTpzIrl27Jrivk5OTwfj64tTX1zOJRNIjL1/6/PnzWXJyMgsLC9NbBl8dusrMzGQJ
+CQksIiKCHTt2jEVFRXH7CJ2ffHbv3s22b98umEd7XBqNhg0bNoxLnzlzJissLDSqnJs3bzIPDw+d
+NH3tcenSJTZr1izuc3BwMHdedMXXr/rS9ZXNx8PDg+Xm5vZI1/c75Nq1a+y5557jjZWZmcm6zrzY
+NRZttNFGG220CW0rV65kggsadiWXy1FSUoJx48ZxaQcOHOC2W7ducekZGRkICQlBSEiIwcegesPP
+zw/Z2dn4xz/+gfnz5/f4Od9x9Ub3eoeFhWHkyJHYunUrNm3ahNu3b3N5U1JSUFtbi+3btyMhIQFt
+bW1gjCE4OBjR0dGYMWOGzt0bvlgNDQ3Yt28fcnNz8dFHH8HPz0/nmFpbW3n/Oq9Wq5Gdnc09+sUX
+i6/st99+Gy+88AJOnjypcxdBaB999ZZKpdi/fz+GDh2KDz/8kPs3Xx3u3r0LhULB+ygWXz2OHDnC
+5cnOzsadO3cAAPv370dYWBiWLFmC/fv3c3/9FTomfYT2mTt3LqRSKVasWIHIyEju0Se+dK21a9ei
+paUFXl5egmVrHThwAIsWLcL06dPh5uam8zOFQoGmpiaDs0qp1WoMHjwYc+bMQUZGRo+fGxtHyOHD
+h+Hr66t3AVOhOnRXWlqK1tZW+Pj44ODBg3jppZe4fhY6P/nI5fIe64TwHVdRUREGDRqE0tJS/PDD
+D3B3d++x2CGflJQUxMTEcJ/52sPe3h4tLS3c55aWlh6LxvL1B19697INSU9P535HVlZW6vys6++Q
+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
+SRGRli9fnlJK6ZOf/GRavHhxqqurS4MHD05VVVVpz549ady4cemVV15JKb3zuu3t27enPXv2pMGD
+B9d7H8eAAQMKf/7iF7+YFi1alLZv354GDx6campq0o4dO1KvXr0K99m1a1dKKaWqqqo0cODAemdA
+/5//+Z/0ox/9qIWvin7Hj3/843T11VfXu2zIkCHppZdeSlu2bEmlpaWpsrKyyWM0dvvVq1en0tLS
+wns4LrroosL7YI477ri0efPmlFJK55133j6vSX/uuefScccdl/bs2ZM2b95c70zkxx13XFq5cmWT
++2/uGI899liaO3dui9aotevR2LEbm8fGjRvTsmXL0rJly9J3vvOddNppp9V7H9F73yPS2DqllJrd
+V2vm/fnPfz7deuutDV63P+bd3DHeO7+tW7cWLt+yZUs66qijCsdq6u94Y5p6XCdOnJh+9atf7XOf
+1qxfc/NraA0b+5490GvYlvVLqW1rOG/evPTlL3+52X3nFAfBa49tNpvNdnBvV111VYp3/9A8adKk
+dPTRRxe+3rRpUyorK0vHHHNM6tOnTyorK0v/9V//lVJ6503ZZ511VvrEJz6Rhg8fXi82jj322PSz
+n/0svfDCC6m4uLjwg0BDampqUr9+/dLo0aPT6NGj05QpU1JtbW1KKaW77747lZeXp9NOOy39y7/8
+S+E+M2fOTEOHDk1nnnlm+vjHP95siKSU0h133JFOOeWUdOKJJ6aPfvSjhcvHjBmTzj///HT22Wen
+r33ta/XGdv3117f6zcn33Xdfuvzyy+td9thjj6XTTjstjR49Ov34xz9u9hhN3f66665Lw4YNS6ef
+fnq64IILCmv18MMPp7POOiuddtpp6XOf+1zhh6xPfOITqaysLI0bNy4tXLgwpZTSokWL0sCBAwuP
+7Ve+8pVm99/UMVJK6ZZbbmnxWrV2PRo7dlPz2OuBBx6ot78bb7wxffSjH00dOnSo9/3c0Do1t6/W
+zPvJJ59MHTt2TGVlZYXtscce26/zbuoYDc3vj3/8YzrqqKNSWVlZOv7449N3v/vdesdu6u94Qxp7
+XF999dV05JFHpurq6n3u05rvm7asYWPfsznWsLXr19Y1vOuuu9I3v/nNFq1hLu39n5vNZrPZDv7t
+6quvTlFRUfF3/YezcePGBv9zbIt3Pxux1549e+r9VnGvrVu31vtBuK37Tyml9evX77c5rF69Oo0a
+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
+AQP2y+S++tWvxtixY2P69OkNjunMM8+M2traOPvss2Pz5s1x4okn1rv/5MmTY/r06fHv//7vMW/e
+vDjuuOMaPdZRRx0VRx11VKPXtVT37t1j2rRpUV5eHjt37ozS0tLCdU2t1WWXXRajR4+OI488sl74
+9OvXL6666qqIiBg6dGiMHDmyyfm15rEDAIC2atGZ1b/0pS/FkCFDYtq0aRHxzm/ZhwwZEq+88kps
+3bo1evXq1eD9Xn/99ejTp0907ty52YHU1dVFdXV14TfxB0pDY6qsrIzDDz/8oPotZlPr2thabdu2
+Lbp37x7Fxfuep7Kp/TWkNY8dUN/B9G8JAByMKioqmn6PyM6dO2Py5Mnx8ssvx6233trgbZr64fYD
+H/hAiwdTXFx8wCMkouEx9e7d+4Aft7WaWtfG1qpnz55t2l9DWvPYAQBAazUZIp07d44bb7yx3ic3
+RbzzBugHHnjggA4MAAB4/9r3NTzv0qFDh30iJOKd38gPHTr0gA0KAAB4fyuOeOeM6VOnTo25c+fG
+22+/3eI7L1u2LL7xjW8csMHldv3118dTTz1V+Hp/zu/ZZ5+N3bt3H3T7aq0tW7bElVdeGSNGjIjf
+//737TKGv1dD63fOOefs92Nce+218a1vfSu2bNkSERFTp06NqVOnxpw5c+K1116LiIgXXngh7rzz
+zsL97r333nj00Uf361gAAA5GxRER69atiz/+8Y+xffv2uOCCC1p8Arv+/fvHGWeccUAHmNOaNWti
++/btha/35/wuueSS2Lx580G3r9Z68MEHo1evXrFs2bI488wz22UMf6+G1m/lypX7bf9f+tKX4tpr
+r41zzz03evToEU8//XRERNx1111RVlYWu3btirFjx8Zjjz0WGzZsqPcyxyVLluzXsQAAHKw6jBo1
+6qZBgwbFiy++GN/97nfj85//fFx11VUxefLk6Nq1a2zcuDFmzpwZ9957bxx99NFxxBFHRETEnDlz
+4p577onu3bvX+1jfiIjp06fHtm3b4pvf/GZ07NixcFK8l156Kb761a/GokWL4q9//Wv06dOn3sn7
+3quuri4effTRmDFjRtx3330xYsSIOOywwxodU0Q0et26deti7ty58dprr8X1118f69evj/Ly8li9
+enVcd9118fjjj8emTZuivLw8BgwY0Oj8GptbRMQdd9wR//Zv/xa/+c1vokePHjF48OBYvnx53Hzz
+zfGnP/0p1q5dGw8//HAMHz48evXqFVu2bInvf//7MXfu3PiHf/iHZj+2uKl9NTa/hsbU1DxefPHF
+uPXWW2PmzJmxZs2aGDduXOH4U6dOjV/96lexcePG+NOf/hT9+/cvnHumpWu+Y8eO+OEPfxhz5syJ
+oqKiuPXWW+Pkk0+ud+LGhjR2jKYej9as3x133BFHHHFE3HjjjVFcXFzvJYmteZyqq6tj6tSpsXz5
+8igtLY1Ro0bFP/7jP0ZExM033xz3339/nHrqqdGxY8d4+OGH4+STT47//d//jcmTJ0dExCOPPBI9
+e/aMU089tcn14OB28803t/cQAOCgNmrUqIiKior0wAMPpIkTJ6a9Lr744nTPPfeklFIaMWJEmj9/
+flq6dGk65phjUlVVVeF2CxYsSJ/+9KfTe3Xu3DnNnj07Pf/884X71NXVpdLS0vSHP/whPfTQQ6lz
+585p0aJF+9z33ebMmZM++9nPpjVr1qRnnnkmPf/8882OqbHrVq5cmT70oQ+lG264If31r39Nixcv
+Loxp4cKFaf78+am4uLjemBqaX0Nz22v+/Plp06ZN6bnnnkuDBw9OL7/8cuG6oUOHpk2bNtXbV3l5
+ebrvvvvSmjVr0tixY9O6deuaXI+m9tXQ/JoaU2PzOP/889OCBQvSjh07Gnx8ZsyYkb73ve/Vu6w1
+a/69730vffnLX0633XZbOvvss9P8+fPTTTfd1OycGztGU49Ha9avU6dO6c4770zPPfdcGjhwYNq+
+fXvhutY8Tr///e/ThAkTGrwuIlJKKdXW1qZLLrkkzZo1Ky1YsCCNHz++cJtrr702zZw5s9k5cHCL
+CJvNZrPZbE1sFRUVqcE3q3/wgx+M1atXx5tvvhkppTjvvPNixIgRMX78+Fi4cGFDd6mnU6dOMW3a
+tDj22GNj1KhRsXLlynj66aejtLQ0zjjjjPjYxz7W5G+u97rnnnvipptuiqOPPjpOOOGEOPbYY5sc
+U3PjraqqiltuuSUGDx4cp556aqxcuTIGDRoUY8eOjfPOO6/BN+a3ZG57lZWVxf333x933313dO3a
+NV566aVG97N+/frYunVr1NTUxLJly2Lw4MFx//33N3v8prx3fk2NqbF5lJSUxG9+85t4+umno7y8
+vNljtnbNIyJOOOGEOO6442LIkCFxwgknNLlOzR2jqcejNTp27BhXXnllHHfccTFy5MhYtmxZRLT+
+cXr55Zfjgx/8YERE/Pd//3eMGDEivvOd7xSuHzFiRAwfPjz69u0bn/vc59o0VgCA94MGQ2Tp0qUx
+YcKE2LhxY/Tr169web9+/WLDhg3N7rRv377RqVOniIjo0aNH1NbWxltvvRWHH3544TaHHXZYs/tZ
+v379PuezaGpMzY135MiR0aFDh8LXb7zxRr2XhjX38qDG5hYRUVNTE+eee2707NkzLr/88jj66KOj
+urq60f2sXbs2unXrFpWVlVFZWRmnnHJKnHTSSc0evynvnV9TY2psHj/5yU+irKwspkyZ0qL3x7R2
+zSMiunXrFp06dYouXbpEp06dorKyss3HaGwerXX44YcXTt7YtWvXwjq19nE644wz4i9/+UtERFxx
+xRVx+eWXF96YHvHOByCsXLky5syZE4cffnh069Yt6urq6u2jW7dubZoDAMD/JfVCpK6uLh588MF4
+9dVXY9iwYXHSSSfFmjVrYufOnVFXVxeLFy+OCRMmtOlAp59+ejz11FOxdevWqKysjOXLlzd7n0mT
+JtV7I29VVVWTY2puvO/9gbi8vDxWrFgRtbW1UVVVFStWrGjT3CIinnnmmRg0aFBcdNFFMWDAgFi6
+dGm96/e+l2Kv0aNHR21tbVx66aUxZcqUmDJlSgwbNqxFx3rvvvZ67/yaG1NjJk+eHH/+859j7dq1
+sXXr1iZv29o1b4v9+X0Y0fj6NaS1j1NpaWlUV1e36Pv73WPZ+yleDcX3ww8/HHfffXeL9gcA8H9F
+4YSGTzzxRAwbNiwmTpwYDz30UBQXv9MoX//612PChAlRVFQUY8aMiQEDBsRbb70V55xzTmzbti3e
+euutGDFiREybNi2uuOKKRg9UUlISN910U4wbNy569uwZJ598cuE32Y256qqrYsaMGfHDH/4wdu3a
+FbfddluceuqpDY4pIqKoqKjR6xrSvXv3mDZtWpSXl8fOnTujtLQ0IqJN8xs2bFjU1tbG2WefHZs3
+b44TTzyx3vVXX311TJs2Laqrq+MXv/hFfOQjH4kZM2bEpEmToqSkJNavXx+33357i37AbmhfbRlT
+Q84666zo3bt37Nq1Ky6++OJmz8je2jVvi/19jJauX8Q758xp7eP085//PP7jP/4jXn311XjzzTfj
+29/+dqO3/fCHPxyTJk2K448/Po444ojo2bNnfPzjH693m8cffzxWrVoVl112WavnCgBwsCqqqKhI
+s2bNavJGdXV1UV1dHV27dt1vBx42bFgsWbIkSkpKmr3tli1bomPHjtG9e/cWjam14926dWuzP3C3
+VGVlZRx++OFRVFTU4vu8/vrr0adPn8JLg/a31o5pw4YN0a9fv1aN50B8j7THMZrS2sfp7bffbvJT
+4d6tqqoqqqqq6r0Ejf+7WvP3HwAORRUVFf//MyJNKS4u3i8//E2ePDm6dOkSr7/+elx44YUtipCI
+ht9P0tSYWjve/RUhERG9e/du9X3e+1Kc/a21Y+rfv3+rj7G/vkfa+xhNae3j1NIIiXjnfSHeGwIA
+HEpaFCL7yw9+8IN4+umn4/jjj2/XHygBAID2lTVEOnbsGGVlZTkPCQAAHISKIyJWrVoVU6dOjblz
+58bbb7/d4jsvW7YsvvGNbxywwR0o119/fTz11FNtvv/BOu8c43r99ddjxowZ8bWvfS3Wrl0bEe+c
+cX3q1KkxZ86cwkfVvvDCC3HnnXcW7nfvvffGo48+ekDHBgDA/x3FERHr1q2LP/7xj7F9+/a44IIL
+Yvr06S26c//+/Vt0romDzZo1a2L79u1tvv/BOu8DPa65c+fGBRdcEMOHD4+ysrJ48cUXIyLirrvu
+irKysti1a1eMHTs2HnvssdiwYUO9j15esmRJm082CADA+0/hpVkDBgyI6667Lq677ro4+uijo7Ky
+Mnr37h0bN26M//zP/4y33norrrzyysIZ0efMmROrVq2KkSNH7rPT6dOnx5gxY+Kee+6Jz3zmM3Hh
+hRdGRMRLL70U3/rWt6JPnz4xcODAOOecc5r86NR169bFz3/+8xg4cGDMmzcvxo4dG9ddd11s2bIl
+7r777lixYkVMmTKl3hnAGzv26tWr41vf+lYcdthh9U402Ni+Gjt2jnnfcMMNcdttt0XEOx8FO3Lk
+yMLtX3zxxZg7d26sWrUqysvL46abbmry8dhfY4p450zhv/rVr2LgwIH7XDdlypSIeOdkgD/96U/j
+0ksvbXJfAAAc4ioqKtIDDzyQJk6cmPa6+OKL0z333JNSSmnEiBFp/vz5aenSpemYY45JVVVVhdst
+WLAgffrTn07v1blz5zR79uz0/PPPF+5TV1eXSktL0x/+8If00EMPpc6dO6dFixbtc993W7lyZfrQ
+hz6UbrjhhvTXv/41LV68OKWUUnl5ebrvvvvSmjVr0tixY9O6detadOyFCxem+fPnp+Li4sKxG9tX
+Y8fOMe8BAwYU/vzFL36x3u3PP//8tGDBgrRjx4599tPQIpY3fQAAEbNJREFUuPbXmN5444105JFH
+NnhdRKSUUqqtrU2XXHJJmjVrVlqwYEEaP3584TbXXnttmjlzZpPHgPeLiLDZbDabzdbEVlFRkRp8
+s/oHP/jBWL16dbz55puRUorzzjsvIiLGjx8fCxcujI997GMN3a2gU6dOMW3atOjUqVOMGjUqVq5c
+GSUlJVFaWlp46dDeZ1aaU1VVFbfcckt06NAhBg8eHOvXr4+tW7dGTU1NLFu2LAYPHhz3339/4eVk
+DR27S5cuMWjQoBg7dmxERJxwwgkREc3u673Hbs7+nHdjSkpK4je/+U106dKl3jNBB3pMr7zySpMf
+XztixIioqamJMWPGxOc+97n4y1/+0vJJAQBwyGkwRJYuXRqzZ8+OjRs31jvBWr9+/WLDhg3N7rRv
+376Fs6b36NEjamtrY9u2bXH44YcXbtPQuUEaMnLkyOjQoUPh67Vr10a3bt2isrIyIiJOOeWUej9I
+N3TsLVu21DunQ9++fVu0r/ceO+e899q5c2e9r3/yk5/EL37xi5gyZUr069cvHnvssSxjGj58eGzY
+sCF27tzZ4EcvL1u2rN7X3bp1i7q6un0uAwCAiP/3ZvW96urq4sEHH4xXX301hg0bFieddFKsWbMm
+du7cGXV1dbF48eKYMGFCmw50+umnx1NPPRVbt26NysrKWL58eYvu994QGD16dNTW1sall14aU6ZM
+iSlTpsSwYcOa3Ed5eXmsWLEiamtro6qqKlasWNGifbUmQhrTlnn36tUrduzYUVjz95o8eXL8+c9/
+jrVr18bWrVuzjKlDhw4xZsyYmDdvXuGypj5hrX///rFx48bYvXt3RLzz7NO7n1F5+OGH4+677271
+2AEAeH8oPCPyxBNPxLBhw2LixInx0EMPRXHxO43y9a9/PSZMmBBFRUUxZsyYGDBgQLz11ltxzjnn
+xLZt2+Ktt96KESNGxLRp0+KKK65o9EAlJSVx0003xbhx46Jnz55x8sknF35T3xrFxcUxY8aMmDRp
+UpSUlMT69evj9ttvbzKQunfvHtOmTYvy8vLYuXNnlJaWtmlfueZ92WWXxejRo+PII4+MY489tt51
+Z511VvTu3Tt27doVF198cfTq1avV42rrYzFz5syYOXNmjB49OiorK+P222+PSZMmNXjbD3/4wzFp
+0qQ4/vjj44gjjoiePXvGxz/+8cL1jz/+eKxatSouu+yyZo8LAMD7T1FFRUWaNWtWkzeqq6uL6urq
+/Xo29GHDhsWSJUuipKSkzft4/fXXo0+fPtG5c+cW3X7r1q3Rq1ev/bKvtmrpvLdt2xbdu3cvBOG7
+bdiwIfr167ffxtrax+Ltt9+OHj16tOj4VVVVUVVVVe8lfvB+V1RU1N5DAICDWkVFRcvOrF5cXLxf
+ImTy5MnRpUuXeP311+PCCy/8uyIkIpp883RDGouQtuyrNdoy7549ezZ6Xf/+/dtlTHu9+/02zenW
+rZv3hgAAsI8Whcj+8oMf/CCefvrpOP744/frsysHu4Nx3gfjmAAAOHRkDZGOHTtGWVlZzkMeFA7G
+eR+MYwIA4NCx7xsQAAAADjAhAgAAZJf1pVkAufjkKgA4uHlGBAAAyE6IAAAA2QkRAAAgOyECAABk
+J0QAAIDshAgAAJCdEAEAALITIgAAQHZCBAAAyE6IAAAA2QkRAAAgOyECAABkJ0QAAIDshAgAAJBd
+x/YeAPD+U1RU1N5DAAAOcp4RAQAAshMiAABAdkIEAADITogAAADZCREAACA7IQIAAGQnRAAAgOyE
+CAAAkJ0QAQAAshMiAABAdkIEAADITogAAADZCREAACA7IQIAAGQnRAAAgOyECAAAkJ0QAQAAshMi
+AABAdkIEAADITogAAADZCREAACA7IQIAAGQnRAAAgOyECAAAkJ0QAQAAshMiAABAdkIEAADITogA
+AADZCREAACA7IQIAAGQnRAAAgOyECAAAkJ0QAQAAshMiAABAdkIEAADITogAAADZCREAACA7IQIA
+AGQnRAAAgOyECAAAkJ0QAQAAshMiAABAdkIEAADITogAAADZCREAACA7IQIAAGQnRAAAgOyECAAA
+kJ0QAQAAshMiAABAdkIEAADITogAAADZCREAACA7IQIAAGQnRAAAgOyECAAAkJ0QAQAAshMiAABA
+dkIEAADITogAAADZCREAACA7IQIAAGQnRAAAgOw6tvcAgAOjqKiovYcAANAoz4gAAADZCREAACA7
+IQIAAGQnRAAAgOyECAAAkJ0QAQAAshMiAABAdkIEAADITogAAADZCREAACA7IQIAAGQnRAAAgOyE
+CAAAkJ0QAQAAshMiAABAdkIEAADIrmN7DwDej4qKitp7CAAABzXPiAAAANkJEQAAIDshAgAAZCdE
+AACA7IQIAACQnRABAACyEyIAAEB2QgQAAMhOiAAAANkJEQAAIDshAgAAZCdEAACA7IQIAACQnRAB
+AACyEyIAAEB2QgQAAMhOiAAAANkJEQAAIDshAgAAZCdEAACA7IQIAACQnRABAACyEyIAAEB2QgQA
+AMhOiAAAANkJEQAAIDshAgAAZCdEAACA7IQIAACQnRABAACyEyIAAEB2QgQAAMhOiAAAANkJEQAA
+IDshAgAAZCdEAACA7IQIAACQnRABAACyEyIAAEB2QgQAAMhOiAAAANkJEQAAIDshAgAAZCdEAACA
+7IQIAACQnRABAACyEyIAAEB2QgQAAMhOiAAAANkJEQAAIDshAgAAZCdEAACA7IQIAACQnRABAACy
+EyIAAEB2QgQAAMhOiAAAANkJEQAAIDshAgAAZCdEAACA7IQIAACQnRABAACyEyIAAEB2Hdt7AHCg
+FBUVtfcQAABohGdEAACA7IQIAACQnRABAACyEyIAAEB2QgQAAMhOiAAAANkJEQAAIDshAgAAZCdE
+AACA7IQIAACQnRABAACyEyIAAEB2QgQAAMhOiAAAANl1bO8B8P5UVFTU3kMAAOAg5hkRAAAgOyEC
+AABkJ0QAAIDshAgAAJCdEAEAALITIgAAQHZCBAAAyE6IAAAA2QkRAAAgOyECAABkJ0QAAIDshAgA
+AJCdEAEAALITIgAAQHZCBAAAyE6IAAAA2QkRAAAgOyECAABkJ0QAAIDshAgAAJCdEAEAALITIgAA
+QHZCBAAAyE6IAAAA2QkRAAAgOyECAABkJ0QAAIDshAgAAJCdEAEAALITIgAAQHZCBAAAyK5jew+A
+A6eoqKi9hwAAAA3yjAgAAJCdEAEAALITIgAAQHZCBAAAyE6IAAAA2QkRAAAgOyECAABkJ0QAAIDs
+hAgAAJCdEAEAALITIgAAQHZCBAAAyE6IAAAA2QkRAAAgOyECAABkJ0QAAIDshAgAAJCdEAEAALIT
+IgAAQHZCBAAAyE6IAAAA2QkRAAAgOyECAABkJ0QAAIDshAgAAJCdEAEAALITIgAAQHZCBAAAyE6I
+AAAA2QkRAAAgOyECAABkJ0QAAIDshAgAAJCdEAEAALITIgAAQHZCBAAAyE6IAAAA2QkRAAAgOyEC
+AABkJ0QAAIDshAgAAJCdEAEAALITIgAAQHZCBAAAyE6IAAAA2QkRAAAgOyECAABkJ0QAAIDshAgA
+AJCdEAEAALITIgAAQHZCBAAAyE6IAAAA2QkRAAAgOyECAABkJ0QAAIDshAgAAJCdEAEAALITIgAA
+QHZCBAAAyE6IAAAA2QkRAA4ZRUVF7T0EAP4fIQLAIaNv375iBOAg0bG9B3Ag+c8GgHdbsmRJjBgx
+IjZv3tzeQwE45HlGBIBDRmlpaTz55JPRs2fP9h4KwCFPiABwyNizZ08MGTIkFi1aFN27d2/v4QAc
+0oQIAIeM3bt3R0opTj755FiwYEF07dq1vYcEcMgSIgAcMvbs2RN79uyJiIiRI0fGI488IkYA2okQ
+AeCQsXv37kKIREScdtpp8dvf/ja6dOnSjqMCODQJEQAOGXv27Indu3fH7t27C5edeeaZce+994oR
+gMyECACHjL3PiLz7WZGIiIkTJ8ZPfvITMQKQkRAB4JDx7mdE3v2sSETEpz71qfj+978vRgAyeV+f
+0BAA3m3vsyF7t+Li4hg6dGisXr26cJuampooKiqKlFI7jhTg/c8zIgAcMvY+E7Jhw4aYN29epJTi
+C1/4QhQVFUV1dXVUV1dHSkmEAGQgRAA4ZOzZsyfWr18fZ5xxRlRUVERlZWVMmTIlOnXq1N5DAzjk
+CBEADhmvvfZanHvuufHGG2/E7t27Y/bs2VFSUhLXXHNNlJSUtPfwAA4pQgSAQ8aFF14Yf/vb36Ku
+ri5qamrizjvvjC1btsQ111wTxcX+SwTIyb+6ABwy3n777airqyt8XVtbG7Nnz46ePXvGSSed1I4j
+Azj0CBEADhnvfRN6TU1N3H777TFu3LhYuXJlO40K4NDk43sBOKRVV1fHE0880d7DADjkHLAQKSoq
+OlC7BgAA/o/z0iwAACA7IQIAAGQnRAAAgOyECAAAkJ0QAQAAshMiAABAdkIEAADITogAAADZCREA
+ACA7IQIAAGQnRAAAgOyECAAAkJ0QAQAAshMiAABAdkIEAADITogAAADZCREAACA7IQIAAGQnRAAA
+gOyECAAAkJ0QAQAAshMiAABAdkIEAADITogAAADZCREAACA7IQIAAGQnRAAAgOyECAAAkJ0QAQAA
+shMiAABAdkIEAADITogAAADZCREAACA7IQIAAGQnRAAAgOyECAAAkJ0QAQAAshMiAABAdkIEAADI
+TogAAADZCREAACA7IQIAAGQnRAAAgOyECAAAkJ0QAQAAshMiAABAdkIEAADITogAAADZCREAACA7
+IQIAAGQnRAAAgOyECAAAkJ0QAQAAshMiAABAdkIEAADITogAAADZCREAACA7IQIAAGQnRAAAgOyE
+CAAAkJ0QAQAAshMiAABAdkIEAADIrmNERFFRUXuPAwAAOIR4RgQAAMhOiAAAANkJEQAAIDshAgAA
+ZCdEAACA7IQIAACQnRABAACyEyIAAEB2QgQAAMhOiAAAANkJEQAAIDshAgAAZCdEAACA7IQIAACQ
+nRABAACyEyIAAEB2QgQAAMhOiAAAANkJEQAAIDshAgAAZCdEAACA7IQIAACQnRABAACyEyIAAEB2
+QgQAAMhOiAAAANkJEQAAIDshAgAAZCdEAACA7IQIAACQnRABAACyEyIAAEB2QgQAAMhOiAAAANkJ
+EQAAIDshAgAAZCdEAACA7IQIAACQnRABAACyEyIAAEB2QgQAAMhOiAAAANkJEQAAIDshAgAAZCdE
+AACA7IQIAACQnRABAACyEyIAAEB2QgQAAMhOiAAAANkJEQAAIDshAgAAZCdEAACA7IQIAACQnRAB
+AACyEyIAAEB2QgQAAMhOiAAAANkJEQAAIDshAgAAZCdEAACA7IQIAACQnRABAACyEyIAAEB2QgQA
+AMhOiAAAANkJEQAAIDshAgAAZCdEAACA7IQIAACQnRABAACyEyIAAEB2QgQAAMhOiAAAANkJEQAA
+IDshAgAAZCdEAACA7IQIAACQnRABAACyEyIAAEB2QgQAAMhOiAAAANkJEQAAIDshAgAAZCdEAACA
+7IQIAACQnRABAACyEyIAAEB2QgQAAMhOiAAAANkJEQAAIDshAgAAZCdEAACA7IQIAACQnRABAACy
+EyIAAEB2QgQAAMhOiAAAANkJEQAAIDshAgAAZCdEAACA7IQIAACQnRABAACyEyIAAEB2QgQAAMhO
+iAAAANkJEQAAIDshAgAAZCdEAACA7IQIAACQnRABAACyEyIAAEB2QgQAAMhOiAAAANkJEQAAIDsh
+AgAAZCdEAACA7IQIAACQnRABAACyEyIAAEB2QgQAAMhOiAAAANkJEQAAIDshAgAAZCdEAACA7IQI
+AACQnRABAACyEyIAAEB2QgQAAMhOiAAAANkJEQAAIDshAgAAZCdEAACA7IQIAACQnRABAACyEyIA
+AEB2QgQAAMhOiAAAANkJEQAAIDshAgAAZCdEAACA7IQIAACQnRABAACyEyIAAEB2QgQAAMiuY0RE
+RUVFe48DAAA4hPx/uMxqnRhMWTgAAAAASUVORK5CYII=
+"
+         id="image3089"
+         x="-73.443863"
+         y="-91.990829" />
+      <image
+         width="884"
+         height="707"
+         xlink:href="data:image/png;base64,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 fL5mgwcPVt++fZ2V9+zsbL377rtyOBwe18Sd3Nxc5ebm6uabb9bWrVudAd4du92uu+66S9OnT3du O3/ppZdc9p2dne1ybefNmydJ+tOf/qRBgwZdcB6zJ+62XLr6N6RLly762c9+pp/97GfKycnRpk2b nLcraGxsVGRkpNdhTvru/SDMAQDMICQCXbPBgwdr5MiRevbZZ7V48WK3x73zzjuaNm2aXn75ZUly XrQk0IGuV69e6tWrV5ufd3HuvB944AHZbDbNnj3bGTrO3ZbmSlZWlhYtWiSbzeY8H1CSMjMzPbbl 6gtSjx491KNHD5WXlzu3NXrj/LZa6zsnJ0czZ85Uenq6qqur1blz51Zf405qamqL8ONpDsOHD9eG DRt0zz33SJJOnjzZIgy7WpPmrYFxcXHavn2780uuL2PyxvmvGThwoEpKSlRXV6eYmBht375dubm5 +v73v+/y8WZTp07VuHHjNGPGDO3YsUNJSUlej6FZTU2NEhMTJUnV1dXav39/i4ro22+/rfLycs2d O9fj8QMHDtSIESMknd2uevr0aY0fP75FXxMnTtTnn3+uffv2qX///rJarYqOjtahQ4d0ySWXqKio SKtWrdLJkyd16tQpGYYhi8WiyspKJSUlKSkpyeXxF8PV59OTq6++WgcPHtT111/vfCwpKUkWi8V5 cZHPPvtMP/vZz3TFFVd4XJPz17aqqkqJiYnOHQiHDx/26iqm99xzjwYNGuSsyEty/o+j8/u2Wq0u 17bZ6tWr9eMf/7jVPv3x7bffSvruf0TZbLYWv5NfffWVx/MhXbn66quVmZkZuEECAEws+C+LElKB TpJ++tOfKjs72/kl5NxzgObOnatFixZp8+bNLSoF48aN06xZs5wXrhg/fryzmnP99ddfcNntc11/ /fU6fvy4amtr9cknn+iVV17xapyuxnUxzp33smXLNGXKFMXExKi0tFTLly9vcbuG83Xq1En5+fnK yspSXV2devfuLenstlFf22o2YMCAVs/98sRT32PHjlXXrl1VX1+vmTNnOr8s+zvee++9V/n5+Wpo aNArr7yiK6+80u0cfvvb3+q3v/2tMjMzVVlZqeXLl3u8oI509v3NzMzUpZde6vUXS3dj8vU1S5cu 1ZgxY2SxWJzVK0luH282YMAA5efnKy8vT//zP//jsd+CggJt2rRJp0+f1pAhQ5Sfn6/+/ftr+vTp 6t69u+rq6vTQQw+1qNRu27ZNxcXFztCxb98+l8d36dLFuc21vLxcXbp0abEWkydPVllZmRITE/XC Cy84Q8tzzz2nuXPnym636+GHH3YGt2nTpikjI0MJCQlKSUnRrbfe6vZ4f7n7fHpy2223ac2aNc4L vDRbsWKFZs6cqdraWvXu3VuZmZmyWq0e1+T8tS0uLtbs2bPVrVs31dTUaNKkSc7Kl6v3bv78+fro o4+0fv16XXvttXrjjTcknf3sjxgxwm3f7tb22LFjKioqcrYTaBUVFZowYYJ69Oih06dPq2/fvi2q j++8845uu+02r9ujKgcAMBv//stlGM7XzZgp64l0Wa5KleVI/ZfWus5RluiI2Ii4xkirJSIywt4Y EWlJtERE2huiIo2IKGuUNarJsEZJTdENkdbYeKs1tkmOuIgoI8Eqa6I11tIlItqaHGExko0Ia8rK gY0zjh87qr7pZ09Qb76HUk5OjgYOHBiYVQgSZWVleuONN7RixYoLrorpj/LyciUnJzvPY2mNp0qC r20Fkqu+y8rKlJKS4nY8bT3ekydPKiEhwev2a2pq1KlTp4Cep+kth8OhhoaGC7aJuns8kL744gvn xTTa4njpbGBwV3Gqr6+/4Lw9h8Oh2tpal5fPd3W8P1r7fLoyevRovfzyyy7P06ytrVV8fPxFjemr r75Sr169LqqN1nha27ZWVlam733vey3uw+hwOJSZmamtW7d6dZ9OwhwA4FwH9n+m7qk9dG9xzGsW u6PCblhO2hsdJx31RpVDjhq7zXI6Uta6WoejPqbJUS9FNkZaHDaHzWFrsthtTRExNqPGsEdE25sM e5O9LrrJ0Wivt8dV24y02D6OA2Uyvrdfxmuv6rt7j1ksPpcETVehy83NVUlJSUcPo81ER0fr0Ucf DUhbvlwBT5LHSoKvbQWSq75bu9BMW4/33C1d3mjeTtgRrFary9Dm7vFA8jWc+Xq8JI/bB12FM6vV 6jZwBCLMSa1/Pl15+umnVV1d7fKze7FhTlKbhznJ89q2NVdrXlVVpeXLlxPmAAAhzXSBztvLgJtR ampqQC6WAsB8vLn5OnzTtWtX5z1J3SHIAQDMLvjvQxf85yECAEyIMAcACAWmqdCtWbNGV199tfNK lKWlpXrxxRf17//+75LOXsr6D3/4Q8C2K56rqalJU6ZMaXHD7bb24IMPatasWc6bb7dF+/v27dPv f/975xapN954Q2VlZcrLy3NeFMYTd8cfO3ZMGzZs0JkzZ3Tbbbdp0KBBzuf27dunNWvWqGvXrlq2 bJmks/dLW7t2rZKTk5WTk6OoqCjV19fr6aef1qFDh9S3b1/nuZOtte+uD3/4uh6u+vY0j2Yvv/yy KisrnRfG+fzzz7VlyxYdOnRIK1ascB7nap3Od35bvqivr9f69etVVFSkfv36acaMGbrssssCOm9P fbib3/333++83UP37t2dv/P+Ov99LS4uvuDCR3fccYfzvoy+8HcNXX1mQ2UN586dq4SEBD3yyCPq 2rXrRfUbSIQ5AECoCP4K3f9pbGzU+vXrnT//5S9/0bFjx5w/p6amatSoUW3St2EYbX7rgfOVlJTo 9OnTbdJ2cXGxdu/erc2bNzvD3I9+9CO99957amxs1JAhQ2QYnkujno6/5ZZblJqaqqysLN12223O +2v94he/0H333afx48c7Q41hGLrhhhuUmpqqqKgoZ1tNTU2KiopSbm6uEhISNG7cODkcDo/tu+vD H76uh7u+Pc1DOvs+P/LII3r77bedj61fv16lpaVau3at8zF363QuV235ory8XP/7v/+r22+/XU1N TbrpppsCPm93fXia3/r165WRkaGMjIyL3pbo6n3t0qWLs/2MjAy99dZbfp8H5s8auvvMhsoarl27 Vp07d9Zbb711Uf0GisViIcwBACDDsDT/mTHDiMh+2IjMXWVEjX/qi5jsl76KHbPueKfJq79JvPWl yqRJq6pTbtlYc+nU9RWXz1hX2ev231f1nbaxpt+0jZWDJr1alTnz9ZqRt71eNWHGplMzb99UPe9H 79T8213vnXk05/3Tz835oPbV6lOnjAP7io2vv/7auPLKK41ms2bNMl599VXDMAzjmWeeMXJzc43V q1cb5zp16pSxYsUKY86cOUZhYaHz8YULFxrnKygoML799tsLHjcMw2hsbDTS0tKMFStWGFOnTjW2 b9/ufK6srMz45S9/aSxYsMDYt2+f8/EHH3zQ+feXX37Z+PLLL50//+QnPzF+//vfG1OnTjVef/11 5+MHDx40fvzjHxsPPPCAMXnyZOODDz4wDMMwvvjiC+OBBx4wbrrpJuPhhx9uMba9e/c6j/PWm2++ acyfP9/5s91uNy6//HLnz6NGjTI+//xzt6/3dPzJkyeNSy65xHA4HIZhGMa4ceOMd9991zAMw0hP TzeamppatPXRRx8Zo0ePdv48duxY4+DBgxf02adPH+OLL77w2L67Pnzl63r40nfzPJpNmzbNWL16 tTFx4sQWx506dcro0qWL82dv1sldW/7q37+/8cknn7R6nD/zPr8PT/NLSUlx266733FXvHlfv/zy S2PAgAEe2/GFN2vo7We2LdbQl/UzDP/X8D//8z+NZcuWtdp+W9PZTfz84Q9/+MMf/nj158D+z4yq U5XGnA9qX815//Rzd7135tEfvVPzb7dvqp43Y9Opmbe9XjVh5us1Iye9WpU5bWPloGkba/rd/vuq vjPWVfaaur7i8ls21lw6aVV1yq0vVSZNXv1N4ph1xztlv/RV7PinvojJXWVEZT9sRM6YYUScm63k B9NU6NLS0hQVFaXDhw/LMAx98MEHznvJLVq0SLNmzdLWrVtbvGbixInq2bOnCgoKtHTpUh09elSS dPDgQX399dctjl2/fr3HKxceOXJE1dXV+tWvftXiSpuTJ09WRkaG7r77bk2dOtW5rWnjxo3O1xYW Fqq8vNz585o1a/TNN9/o8ccf10MPPaS6ujoZhqGxY8dqzpw5GjFiRIvtnUuWLNEtt9yiTZs2XXBR mI0bN2r58uVer6MkffPNNy3us3XgwAFdeumlOnTokP7xj3+ob9++2rlzp9vXezq+a9euuueee3Tv vfeqoKBAXbt21Y033qjDhw+rU6dOmjRpkq677jrnmJtvut3szJkz2rVrl/PnF198UTNnztSNN96o Pn36uG1fkts+fOXrenjT9/nzkM5uj8zMzPTqipytrZMvbXmjtLRUNTU1rV510p95u+rD0/yampp0 2WWXacKECRdUedz9jrvizfu6Zs0a5eTkeJyzt7xZQ28+s225hr6sn+T/GiYkJKiiosJj222NqhwA IFSZ5hw6SZowYYK2bt2qjIwM9enTp8WNis9XWlqq6upqNTY2qqioSH369NHmzZu1YMECDRs2TEVF RXrnnXe0e/duPfTQQ61+cbVarXrggQeUkJCgqVOnasuWLZo6daoMw9DkyZMlSSNHjtT777/f4qa2 rkRFRSk/P19RUVEaNmyY9u7dq9jYWF1xxRXO83bO3RYVExOjN998U7Gxsc5zCJstWrTIGSK98cwz z+i1117Tb37zG+djx48fV3JysgoLC/X555+ra9euOn78uNs2Wjv+9OnTqqqqktVqlcVi0ZkzZ1RS UqKioiLt27dP//Iv/6KxY8dq4sSJGjBggOx2u37605+qqalJZWVlOnHiRIv+oqOj1dDQoIaGBsXE xLhsPzo62mMfvvB1PSR51fe58zhz5oxWr16tLVu26J133ml1TOnp6W7X6eTJkz611ZqGhgbNnj1b K1eubPVy+b7OOyYmxmUfnub3xRdf6JJLLtHOnTs1adIkff3114qNjfX4O3769Gnt2LFDknT11Vfr 8ssvb/V9bWpq0oYNG1RUVNRua+jtZ7Yt1vDbb791u36SArqG2dnZeuGFF7Rs2TItXbo0YLeH8AZB DgAQ6kxToZPO/t/kLVu2aOvWrRo3bpzHYw8fPqz4+HhVVlaqsrJS1113nfNG5Ndff72Kioq0d+9e WSwW7dy5U9dff73H9mJjY51fzLp166YTJ07o+PHjSklJcR6TkpKisrKyC157fuDq1q2b82IFCQkJ stls+uc//9miQtitWzfn39etW6eMjAzl5uZecJ5gjx49dOWVV3oc+7muuuoqWSwWffPNN87HBg8e rJKSEuXk5Ojxxx/XoUOHNHjwYLdteDq+uLhYhYWFWr9+vZ5++mklJCTojTfe0ODBg9W3b19dc801 io+PV3Z2tt59911J0scff6yRI0fqpptu0uDBgzV8+HBnX7m5udqwYYO+/fZbbd261W37zeNy14cv fF0Pb/o+fx4vvfSSGhsbtXDhQq1cudLlRSXO526d/GnLHbvdrrvuukvTp0/XpEmTWj3e13l76sPd /C655BJJ0nXXXadrr71Wf//73yV5/h2vqqrSa6+9ptdee02HDh1yjtXT+/qnP/1JgwYN0qWXXurX 2jXzZQ29+cy21Rp6Wj8psGtYX1+vyspK9e/fv8WNv9saYQ4AEA5MFeh++MMfaufOndqyZYsmTpzo 8djMzEzZbDbNnj1bubm5ys3NdV4NcdiwYfrHP/6hiIgIpaena/369crMzPTYXm1trT799FNJ0gcf fKDRo0dr4MCBKikpUV1dnRwOh7Zv364xY8ZI+m6LXPPjrcnKytLu3btls9lUW1ur3bt3t3g+JydH H3/8sQ4fPqzq6mrn42+//XaLi2e0ZuzYsZo3b57++te/Oh9LSkpSdHS0Dh06pOrqahUVFSkjI8Nt H56O79Spk06dOuW8GENlZaWSkpKUlJQki8XivIDJZ599pqFDhzrbnDhxoq688krt27dP/fv3V1VV VYuLhxw+fFiXX3652/abx+Wpj/fff18vvPBCq2vk63p46tvdPO688049/fTTys3N1fjx45WWlqbx 48e3Orbz10lSq215O29JuueeezRo0CBnleZcgZh3a32cP7+amhrnc9XV1dq/f7+GDRsmyfPveI8e PbRq1SqtWrXKWfVu7X1dvXq15s6de8GYfFm/1ubn6nfJ3We2rdfQ0/pJgV3DDz/8UKNGjdLtt9/e boGOMAcACBem2nIZFRWlAQMGaM+ePc4tSRUVFRo/frxqampUUVGhIUOGKD8/X/Pnz9eyZcs0ZcoU xcTEqLS0VMuXL9eYMWOUnJyssrIyzZ8/X0OGDNH999+v//7v//bYd0pKivNS8AMGDNDQoUNlsVi0 dOlSjRkzRhaLRcOHD1daWpokae7cucrMzNSll16qq666qtW5derUSfn5+crKylJdXZ169+7tfG7s 2LHq2rWr6uvrNXPmTHXu3Nn53LZt21RcXOzyS5Q7Xbp0UW1tbYvHnnvuOc2dO1d2u10PP/xwi3Ps XPXh7vjevXtr2rRpysjIUEJCglJSUnTrrbdKklasWKGZM2eqtrZWvXv3doboyZMnq6ysTImJiXrh hRdktVpVXFys2bNnq1u3bqqpqdGkSZOc77m79j31IZ09l3HHjh3Kz89vdY18XQ93fX/44Ydu59F8 vlt5ebm6dOnirLQWFBRo06ZNOn36dIvPs6t1am7HXVu+zPujjz7S+vXrde211zqrnr/97W81YsSI gM3bUx+u5rdv3z5Nnz5d3bt3V11dnR566CHnVmur1er2d9zX9/XYsWMqKipyjulcvnxu/FlDd59Z d78DgVxDX9fP3zWsra1t8e9WWyLIAQDCjX//5TvnCiwzZsp6Il2Wq1JlOVL/pbWuc5QlOiI2Iq4x 0mqJiIywN0ZEWhItEZH2hqhIIyLKGmWNajKsUVJTdEOkNTbeao1tkiMuIspIsMqaaI21dImItiZH WIxkI8Ka8syAxhnlpUfVN72/35MsLy9XcnKyoqOj/W6jWXV19QVfTBwOhxoaGhQXF9fi8ZqaGnXq 1Mn5xdvf9iWprKxMKSkpAZlDSUmJ7rjjDr355psX3COrvr7ep/Nb3B3vcDhUW1vr8vLvtbW1F5xX dOzYMWf14VxfffWVevXq5VP77vqYMmWK7r33Xo0ePdrjnM7l63q469vdPHzlbp088Wfe/gjEvN3N 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 7VpFRETo17/+tdLS0tyOSZLb544cOaKNGzeqZ8+e2rBhg7Kzs7VkyRIdOnRIjz32mLp06dLipuLu 5udubpL0xBNP6G9/+5vi4+P14x//WBMmTNCuXbv04osvqrS0VIsXL1ZsbKx++ctfqkePHqqqqtLa tWu1e/du5ebmKisry+N75Kktd/NzNSZP8/jyyy/1/PPPq7i4WFlZWSooKHD2n5eXp6KiIsXHxysv L0+5ubnKyMjwac2vvfZabdu2Tfv379esWbP0hz/8Qb/61a/Up08fj3N314en98OX9ZOkdevW6Y03 3tAdd9yhmTNnOl/ny/vU0NCg119/XceOHZPFYtHo0aNbPN9838C4uDitX79es2fP9jhvwFsEOQAA As80FbrzDR061LmdbvLkycrIyNDdd9+tqVOnqq6uTpK0aNEizZo1S1u3br3g9WvWrNE333yjxx9/ XA899JDq6upkGIbGjRunu+66S6NHj9bixYtVXl7ucRzPP/+81q9fr1//+td68MEHnX27G5On56qq qvTss89q7969evLJJ5WVlSXDMDR27FjNmTNHI0aMaFEpcTc/V3Nr1qdPH61bt06PPvqo7r//fh0+ fFgZGRlatWqVevTooSeeeML5d0maOHGievbsqYKCAi1dulRHjx71uB6e2nI1P3dj8jSPJUuW6JZb btGmTZsuqMCtWrVKEydO1B133KFVq1YpIyPD5zU/dOiQamtrNWzYML300kv60Y9+pI0bN3qct6c+ PL0fvqxfRUWFvv32Wy1fvlz/7//9vxY3VPflfSosLFS/fv08frluampSYWGhfvCDH7Q6b8AbhDkA ANqGaQPdZZddpkOHDunEiRMyDEOTJ0/WkCFDNHLkSL3//vutvj4qKkr5+fm66qqrNGzYMO3du1d7 9uxR7969NWrUKN18880tqmruvPrqqyooKFCvXr3Ur18/XXXVVR7H1Np4a2tr9cgjj6hPnz664YYb tHfvXl1xxRXKzs7W5MmTXV4Axpu5NcvIyNDmzZu1du1axcXF6eDBg27bKS0tVXV1tRobG1VUVKQ+ ffpo8+bNrfbvyfnz8zQmd/OIiYnRm2++qT179rRaMZR8X3NJ6tevn66++mpdc8016tevn8d1aq0P T++HLyIjI7Vw4UJdffXVGjp0qIqKiiT5/j599dVXuuyyyyRJq1ev1pAhQ7RixQrn80OGDNHgwYPV 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 +ON66KGHVFdXJ8MwNG7cON11110aPXq0Fi9erPLyco/jqKqq0rPPPqu9e/fqySefdIatiRMnqmfP niooKNDSpUt19OjRVvseO3as5syZoxEjRrSoHLlry13f7THvjRs3Ov9eWFjY4vglS5bolltu0aZN m3TTTTc5H3c3rkCNqbCwUP369fP4pbOpqUmFhYX6wQ9+4LEtAC0R5gAACE6mqtCd67LLLtOhQ4d0 4sQJGYahyZMnS5JGjhyp999/XzfffLPH10dFRSk/P19RUVEaNmyY9u7dq5iYGPXu3du5JbC50tea 2tpaPfLII4qIiFCfPn1UWlqq6upqNTY2qqioSH369NHmzZud20Rd9R0bG6srrrhC2dnZkqR+/fpJ Uqttnd93awI5b3diYmL05ptvKjY2tkVlsq3H9NVXX+myyy6TJK1evVovvPCC7rrrLt1///2SpCFD hqixsVHDhw/XnDlz9Mknn1zELIHwQJADACC4mTbQ7dy5U08//bSOHz/e4kbHKSkpKisra/X13bp1 U1RUlCQpISFBNptNNTU1SkpKch7j6t5yrgwdOlQRERHOnw8fPqz4+HhVVlZKkq677roWgcRV31VV VS3uCdatWzev2jq/7/acd7PmimizdevW6ZVXXlFubq5SUlL03nvvtcuYRo0apaefflqSNH/+fNls Nh06dMj5fFFRUYvj4+Pj5XA4LngMwFmEOQAAgp/pAp3D4dBf/vIXHT16VIMGDZLFYlFJSYnq6uoU ExOj7du3O8+V8tWNN96on/zkJ6qurpbdbteuXbu8et35gSozM1M2m02zZ8923svuzJkzHtvIysrS okWLZLPZZLPZtHv3bq/a8iXMuePPvDt37qwzZ84oLi5O27dv17x581o8n5OTo5kzZyo9PV3V1dU+ 3xjdnzH17t1bDQ0N2rVrl1e3nkhNTdXx48fV1NSkyMhIlZaWtqgovv322yovL9fcuXN9GjsQCghz AACYg6kCXWFhoQYNGqSJEyfqz3/+s6zWs6cALl26VGPGjJHFYtHw4cOVlpamiooKjR8/XjU1Naqo qNCQIUOUn5+v+fPnu20/JiZGBQUFGjFihBITE3Xttdc6K0e+sFqtWrZsmaZMmaKYmBiVlpZq+fLl GjNmjNvXdOrUSfn5+crKylJdXZ169+7tV1vtNe+5c+cqMzNTl156qa666qoWz40dO1Zdu3ZVfX29 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 RU5ErkJggg== "
+         id="image3345"
+         x="253.04276"
+         y="475.1716" />
+      <image
+         width="884"
+         height="707"
+         xlink:href="data:image/png;base64,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 drvdY2jztr21+RPmvO3vK7jY7Xa/wpm/+7dESyZCeuWVV1RWVnbJZ9dTmJN8j4kn3vrd1Hj4e/4A AMCVZblA19xpwK0oOjq6VSZLAWA99bPLAgAA+KP9r0PX/p9DBAAAAIA2YZkrdGvWrNGNN95ozkRZ UFCgVatW6T/+4z8kXZgO/91332212xUv5nK5NHHixAYLbl9uixYt0tSpU83Fty9H+QcPHtRvf/tb 83ard955R4WFhcrIyDAnhfHF2/75+fnasGGDzp8/r3vvvVcDBgww3zt48KDWrFmjLl26aMmSJZIu rJe2du1aRUZGKi0tTYGBgaqurtYrr7yiY8eO6YYbbjCfnWyqfG91tIS/4+Gpbl/9qPfGG2+opKTE nBjn66+/1rZt23Ts2DEtW7bM3M/TODXWuCx/VFdXa/369crJyVG/fv00ZcoUXXfdda3ab191eOvf o48+ai730K1bN/NvvqUan9fc3NxLJj66//77zXUZ/dHSMfT0mbX6GAIAgCuj/V+h+/9qa2u1fv16 8/Uf//hH5efnm6+jo6N15513Xpa6DcO47EsPNJaXl6eKiorLUnZubq727dunLVu2mGHuJz/5iXbs 2KHa2loNGjRIhuH70qiv/e+55x5FR0crMTFR9957r7m+1s9+9jM98sgjGjt2rBlqDMPQ7bffrujo aAUGBppluVwuBQYGKj09XRERERozZozcbrfP8r3V0RL+joe3un31Q7pwnp955hm9//775rb169er oKBAa9euNbd5G6eLeSrLH8XFxfq///s//fjHP5bL5dJdd93V6v32Voev/q1fv14JCQlKSEj4h29L 9HReO3XqZJafkJCgrVu3tvgZu5aMobfPrBXHEAAAWIVh2Op/pkwxHElPGQHpK43AsS8fCU56/duQ 0euKwiesPt3hR6+XdB6/sizqno3l105af6bHlHUlvX7829IbJm8s7zd5Y8mA8ZtKh6W+XT7y3rdL x01571zqj98rm/WTD8r/9cEd53+R9lHFb6Z/XLmp7Nw54/DBXOO7774z+vTpY9SbOnWqsWnTJsMw DOPXv/61kZ6ebqxevdq42Llz54xly5YZ06dPN7Kzs83tc+fONRrLysoy/va3v12y3TAMo7a21oiJ iTGWLVtmTJo0ydi1a5f5XmFhofHzn//cmDNnjnHw4EFz+6JFi8zf33jjDeObb74xXz/88MPGb3/7 W2PSpEnG22+/bW4/evSo8dOf/tR47LHHjAkTJhgff/yxYRiGceTIEeOxxx4z7rrrLuOpp55q0LYD Bw6Y+zXX5s2bjdmzZ5uv6+rqjB49epiv77zzTuPrr7/2eryv/c+ePWtcc801htvtNgzDMMaMGWNs 377dMAzDiI+PN1wuV4OyPv30U2PUqFHm6+TkZOPo0aOX1BkXF2ccOXLEZ/ne6vCXv+PhT931/ag3 efJkY/Xq1UZKSkqD/c6dO2d06tTJfN2ccfJWVkvdfPPNxhdffNHkfi3pd+M6fPUvKirKa7ne/sY9 ac55/eabb4z+/fv7LMcfzRnD5n5mL8cY+jN+htH0GOrCTfL88MMPP/zwc1X8HD70lVF6rsSY/nHl prSPKn7z4I7zv/jJB+X/+uP3ymZNee9c6r1vl45Lfbt85PhNpcMmbywZMHljeb8f/7b0hinrSnpN Wn+mxz0by68dv7Is6kevl3SesPp0h9HrisKTXv82ZOzLR4LTVxqBSU8ZAVOmGI6Ls5VawDJX6GJi YhQYGKjjx4/LMAx9/PHH5lpy8+bN09SpU/Xhhx82OCYlJUU9e/ZUVlaWFi9erJMnT0qSjh49qu++ +67BvuvXr/c5c+GJEydUVlamp59+usFMmxMmTFBCQoJmzpypSZMmmbc1bdy40Tw2OztbxcXF5us1 a9bo9OnTev755/Xkk0+qqqpKhmEoOTlZ06dP14gRIxrc3rlw4ULdc889eu+99y6ZFGbjxo1aunRp s8dRkk6fPt1gAebDhw/r2muv1bFjx/TZZ5/phhtu0J49e7we72v/Ll266KGHHtL8+fOVlZWlLl26 6I477tDx48cVHh6u8ePHa/DgwWab6xfdrnf+/Hnt3bvXfL1q1SqlpqbqjjvuUFxcnNfyJXmtw1/+ jkdz6m7cD+nC7ZHDhg1r1oycTY2TP2U1R0FBgcrLy73OsFivJf32VIev/rlcLl133XUaN26ctm7d 2qAMb3/jnjTnvK5Zs0ZpaWk++9xczRnD5nxmL+cY+jN+Usv+NgAAwOVlmWfoJGncuHH68MMPlZCQ oLi4OHORXU8KCgpUVlam2tpa5eTkKC4uTlu2bNGcOXM0dOhQ5eTk6IMPPtC+ffv05JNPNvnF1W63 67HHHlNERIQmTZqkbdu2adKkSTIMQxMmTJAkjRw5Uh999JHuvvtun2UFBgYqMzNTgYGBGjp0qA4c OKCQkBD17t3bfG7n4tuigoODtXnzZoWEhJjPENabN2+eGSKb49e//rXeeustvfDCC+a2oqIiRUZG Kjs7W19//bW6dOmioqIir2U0tX9FRYVKS0tlt9tls9l0/vx55eXlKScnRwcPHtT3v/99JScnKyUl Rf3791ddXZ0ef/xxuVwuFRYW6tSpUw3qCwoKUk1NjWpqahQcHOyx/KCgIJ91+MPf8ZDUrLov7sf5 8+e1evVqbdu2TR988EGTbYqPj/c6TmfPnvWrrKbU1NRo2rRpWr58eZNT1vvb7+DgYI91+OrfkSNH dM0112jPnj0aP368vvvuO4WEhPj8G6+oqNDu3bslSTfeeKN69OjR5Hl1uVzasGGDcnJyrtgYNvcz eznG8G9/+5vX8ZPUojEEAABXnqUCXUpKilatWqXS0lKNGTPG577Hjx9XWFiYSkpKJEmDBw9WfHy8 JOm2227TX/7yF5WXl8tms2nPnj267bbbfJYXEhJifjHr2rWrTp06paKiIkVFRZn7REVFqbCw8JJj Gweurl27mpMVREREyOl0qrS0tMEVwq5du5q/r1u3Tm+++abS09MVFRWlHTt2mO91797dZ7sb69u3 r2w2m06fPm1uGzhwoPLy8swrEz/+8Y99Lp/ga//c3FxlZ2ebVwbS09P1zjvvaPLkybrhhht00003 SZKSkpK0fft29e/fX59//rm2bt0qwzCUn5+v4cOHm3Wlp6crPT1dd999tz788EP16NHDY/mzZs3S wIEDvdbhD3/Ho/4YX3U37sehQ4dUW1uruXPn6sSJEzp06JCWL1/uczITb+P0+uuv+12WN3V1dXrw wQd13333afz48U3u72+/7777bq91eOvfNddcI+nC3/Ctt96qv/zlL0pOTvb5N15aWqq33npL0oUJ Tnr06NHkef3973+vAQMG6Nprr/V73Fo6hs35zPoawx07djT490BSgytm8+fP1/z58y+p9+L1B1NT Uxu8N3fu3Cb7uG3btgav/+3f/q3JYwAAwOVhmVsuJemHP/yh9uzZo23btiklJcXnvsOGDZPT6dS0 adPML0T1syEOHTpUn332mRwOh+Lj47V+/XoNGzbMZ3mVlZX68ssvJUkff/yxRo0apVtuuUV5eXmq qqqS2+3Wrl27NHr0aEl/v0WufntTEhMTtW/fPjmdTlVWVmrfvn0N3k9LS9Pnn3+u48ePq6yszNz+ /vvvN5g8oynJycmaNWuW/vSnP5nbOnfurKCgIB07dkxlZWXKyclpMMFB4zp87R8eHq5z586ZkzGU lJSoc+fO6ty5s2w2mzmByVdffaUhQ4aYZaakpKhPnz46ePCgbr75ZpWWljaYPOT48ePq0aOH1/Lr 2+Wrjo8++kgrVqxocoz8HQ9fdXvrxwMPPKBXXnlF6enpGjt2rGJiYjR27Ngm29Z4nCQ1WVZz+y1J Dz30kAYMGGBepblYa/S7qToa96+8vNx8r6ysTIcOHdLQoUMl+f4b7969u1auXKmVK1eaV72bOq+r V6/WjBkzLmmTP+PXVP88/S15+8w2ZwwBAAAsdYUuMDBQ/fv31/79+83/g33mzBmNHTtW5eXlOnPm jAYNGqTMzEzNnj1bS5Ys0cSJExUcHKyCggItXbpUo0ePVmRkpAoLCzV79mwNGjRIjz76qP77v//b Z91RUVHmFY/+/ftryJAhstlsWrx4sUaPHi2bzabhw4crJiZGkjRjxgwNGzZM1157rfr27dtk38LD w5WZmanExERVVVUpNjbWfC85OVldunRRdXW1UlNT1bFjR/O9nTt3Kjc31+MXUW86deqkysrKBtt+ 85vfaMaMGaqrq9NTTz3V4Bk7T3V42z82NlaTJ09WQkKCIiIiFBUVpR/96EeSpGXLlik1NVWVlZWK jY01Q/SECRNUWFioDh06aMWKFbLb7crNzdW0adPUtWtXlZeXa/z48eY591a+rzqkC88y7t69W5mZ mU2Okb/j4a3uTz75xGs/6p93Ky4uVqdOndSnTx9JUlZWlt577z1VVFQ0+Dx7Gqf6cryV5U+/P/30 U61fv1633nqr3nnnHUnSL3/5S40YMaLV+u2rDk/9O3jwoO677z5169ZNVVVVevLJJ81bre12u9e/ cX/Pa35+vnJycsw2Xcyfz01LxtDbZ9bb38DFdQAAALRoJpWLZ2CZkir7qXjZ+kbLdqL6G3tVx0Bb kCPEEVobYLc5Ahx1tY4AWwebI6CuJjDAcATaA+2BLsMeKLmCagLsIWF2e4hL7lBHoBFhl72DPcTW yRFkj3TYjEjDYY/6df/aKcUFJ3VD/M0t7mRxcbEiIyMVFBTU4jLqlZWVNQhUkuR2u1VTU9PgNiZJ Ki8vV3h4uPnFu6XlS1JhYaGioqJapQ95eXm6//77tXnz5kvWyKqurlZISEizy/K2v9vtVmVlpcfp 3ysrKy95rig/P9+8+nCxb7/9Vr169fKrfG91TJw4UfPnz9eoUaN89uli/o6Ht7q99cNf3sbJl5b0 uyVao9/e+nfkyBGfz7n6+zfuz3lty/GTfI+hzdayf8IBAEDTDh/6St2iu2t+bvBbtjr3mTrDdrau 1n3WXW2UuuUur3PaKgJkr6p0u6uDXe5qKaA2wOZ2up1up8tW53Q5gp1GuVHnCKpzGXWuuqogl7u2 rroutMxpxITEuQ8XyvjeIRlvbdLfb8mx2Qx/22mpWy5bqlu3bq0ShCR5DFt2u/2SMCdJHTp08CvM eStfurDOXmv1ITY2VhkZGcrKyrpkrTt/w4u3/e12u9ew5elLq7eQ4u2LrK/yvdUxefJkv7+U+zse 3upujTAneR8nX1rS75ZojX57619Tkxb5+zfuz3lty/GTWu+zAwAArk6WuuUSrWfmzJmaOXNmWzfj ipo2bVpbN6FN/LP2u7UwfgAAoD37p7hCBwAAAABXI8sFukOHDsnlcrV1MxooLS3V3LlzNWjQIG3f vt3nvocOHVJGRob+5V/+Rb/73e8aLATsj4KCAmVkZGjUqFH66quvWlRGa1m0aJE5A6i/XC6Xx6nd 21P/AAAAgPbKAoGu4XOBU6dO1blz59qoLZ5t3bpVHTt2VE5Oju666y6f++bn5ys7O1s333yzPvnk E/Xv37/B1OTNVT8te2hoaItDYWvJy8u75Fm85jIMQ7m5uZdsb0/9AwAAwD8hw+/5SdqEBQLdBXv3 7lVGRoYKCgq0YMEC8/e9e/c2WNcpNzdXq1atUm1trZ544gm9/PLLuu+++/TZZ581KK+0tFQvv/yy 0tLSmrVOXFFRkZ566inNnTtXhw4dMrdnZGToxRdfVHZ2tjIyMswFr33p0aOH0tPTtXTpUkVFRWnn zp0+2/Tiiy9q3Lhxuu+++/SHP/yhyfKvhGPHjmnWrFn613/9V9XU1DR4z9tYPfHEE+bvGzdu1NGj R83XL7/8su6991598sknTdbt77kDAAAArlaWCXQJCQlauXKlunfvrhdffNH8vU+fPnrmmWfM2zB/ 85vfKCIiQi6XS0uXLlV5ebmysrI0c+ZM5efnm+WlpKSoZ8+eysrK0uLFi3Xy5Emf9U+YMEEJCQma OXOmJk2apKqqKknSypUrlZKSovvvv18rV65ssFBxU3JycnT06FHddNNNPtsUFxendevW6Re/+IUe ffRRHT9+3J+hM23cuFGpqakNfpYuXep1uzeGYSg5OVnT5JA0dwAAIABJREFUp0/XiBEj9Pvf/77B +97GauPGjeY+2dnZKi4uliSdOHFCZWVlevrpp5Wenq68vDyf/fD33AEAAABXK8vPctmpUyfdcccd ev/993XXXXfpT3/6k1566SW53W4FBAToscceU3h4uH70ox/pz3/+s9LS0lRQUKCysjLV1tYqJydH cXFx2rJli+bMmeOxjlOnTskwDE2YMEGSNHLkSH300Ue6++67W9Tm3bt3KyEhQbm5ufrd736nbt26 +WxTQkKCtmzZosOHDys0NFRHjx5Vz549/a43KSnpkkXOO3XqpNDQUI/bvTlw4IB69+6tpKQkSVK/ fv3M91oyVna7XY899pgiIiI0adIkbdu2TRkZGR739ffcAQAAAFczywc6SZo9e7aWLVumqqoqjRkz RiEhIeYivfVrO0VGRqqwsFCSdPz4cYWFhamkpESSNHjwYMXHx3stv6ioSFFRUebrqKgos6yWuO22 2/TBBx9o3759euCBBzRixAivbaqtrdW4ceO0ZMkSzZo1S19//fUltzg2186dO/Xuu+822DZw4EDF xMR43L5o0SKP5fz1r39VZGSk+bpr167m780dq/qrdtKFNcHqz1PXrl116tQpr33w99wBAAAAVzPL Bbro6OhLQsMPf/hDzZkzRy+//LJeeeUVc3tZWZn279+vH/zgB9q1a5cZUIYNGyan06lp06aZC4L7 mnjjlltuUV5enqqqqhQcHKxdu3YpPT39H+7LwIEDNXLkSL366qt67LHHPLbpq6++Uu/evXXfffep pqZGe/bs0UMPPWSWcfPNN+u7777T0KFDm6yvta7QJSYmat68eXI6nXI6ndq3b5/5nq+x6tixo86f P6/Q0FDt2rVLs2bNkiRVVlbqyy+/1MCBA/Xxxx9rwYIFXvvn77kDAAAAWswC86JYLtDNnz9fmZmZ qqmp0Ztvvqk+ffpIktLS0rRhwwYNHDjQ3Ldr167KzMyUzWbTLbfcosGDB0u6cIvfkiVLNHHiRAUH B6ugoEBLly7V6NGjPdZps9m0ePFijR49WjabTcOHD1dMTEyr9Ofxxx9XUlKS5syZ47FNd911l5xO p8aMGaNz587p5ptvbnB8Wlqa5syZo//8z//Uhg0bdOONN3qtq3v37urevbvX95orPDxcmZmZSkxM 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 AAAA4FlAWzfAqmw2W1s3AQAAAMA/Oa7QAQAAAIAEfxlaAAATQUlEQVRFEegAAAAAwKIIdAAAAABg UQQ6AAAAALAoAh0AAAAAWBSBDgAAAAAsikAHAAAAABZFoAMAAAAAiyLQAQAAAIBFEegAAAAAwKII dAAAAABgUQQ6AAAAALAoAh0AAAAAWBSBDgAAAAAsikAHAAAAABZFoAMAAAAAiyLQAQAAAIBHRls3 oEkEOgAAAACwKAIdAAAA/l97d7Mj2XEmZviLOCczq5pqim0BFCQDAhcmNGADA+98JTO3M5rrma3h vceGB97Yho0WIHBDSANy1BoNSTW7MivzRHxeZFf/sfgDdVVXBvU8q0Y1Kk9k7V58EXGAQQk6AACA QQk6AACAQQk6AACAa+Tp34ki6AAAAEYl6AAAAAYl6AAAAAYl6AAAAAY13/UCvq9Syl0vAQAA4KSY 0AEAAAxK0AEAAAxK0AEAAAxqgKAb4G1+AAAAd2CAoAMAAOA6gg4AAGBQgg4AAGBQgg4AAGBQJx90 6U4UAACAa5180AEAAHA9QQcAADAoQQcAADAoQQcAADAoQQcAADAoQQcAADAoQQcAADAoQQcAADAo QQcAADAoQQcAADAoQQcAADAoQQcAADAoQQcAADAoQQcAADAoQQcAADAoQQcAADAoQQcAADAoQQcA ADAoQQcAAHCdzLtewXcSdAAAAIMSdAAAAIMSdAAAAIMSdAAAAIMSdAAAAF9z+heiRAg6AACAYQk6 AACAQQk6AACAQQk6AACAQQk6AACAa4xwLYqgAwAAGJSgAwAAGJSgAwAAGJSgAwAAGNTpB12OcBQR AADg7Tv9oAMAAOBagg4AAGBQgg4AAGBQJx90TtABAABc7+SDDgAAgOsJOgAAgEEJOgAAgEEJOgAA gEEJOgAAgEEJOgAAgEEJOgAAgEEJOgAAgEEJOgAAgEEJOgAAgEEJOgAAgEEJOgAAgEEJOgAAgEEJ OgAAgEEJOgAAgGvlXS/gOwk6AACAQQk6AACAQQk6AACAQQk6AACAQQk6AACAQQk6AACAQQk6AACA QQk6AACAQQk6AACA65z+e8UFHQAAwKgEHQAAwKAEHQAAwKAEHQAAwKAGCLoBTiICAADcgQGCDgAA gOsIOgAAgEEJOgAAgEGdftA5QgcAAHCt0w86AAAAriXoAAAABiXoAAAABiXoAAAABiXoAAAArjHC /YyCDgAAYFCCDgAAYFCCDgAAYFCCDgAAYFCCDgAAYFCCDgAAYFCCDgAAYFCCDgAAYFCCDgAAYFAn H3QjvJ0dAADgLpx80AEAAHA9QQcAADAoQQcAADAoQQcAADAoQQcAADAoQQcAADAoQQcAADAoQQcA ADAoQQcAADAoQQcAAHCtvOsFfCdBBwAAMChBBwAAMChBBwAAMChBBwAAcJ3TP0In6AAAAEYl6AAA AAYl6AAAAAYl6AAAAAY1QNANcBIRAADgDgwQdAAAAFxH0AEAAAxK0AEAAAxK0AEAAAxK0AEAAAxK 0AEAAAxK0AEAAAxK0AEAAAxK0AEAAAzq9IMu73oBAADAX6IRUuT0gw4AAIBrCToAAIBBCToAAIBB CToAAIBBCToAAIBBCToAAIBBCToAAIBBCToAAIBBnXzQjfAyPwAAgLtw8kEHAADA9QQdAADAoAQd AADAoAQdAADAoAQdAADAtU7/ikZBBwAAMChBBwAAMChBBwAAMChBBwAAcJ3TP0In6AAAAEYl6AAA AAYl6AAAAAYl6AAAAAY1QNANcBIRAADgDgwQdAAAAFxH0AEAAAxK0AEAAAxK0AEAAAxK0AEAAAxK 0AEAAAxK0AEAAAxK0AEAAAxK0AEAAAzq9IMu73oBAAAAp+n0gw4AAIBrCToAAIBBCToAAIBBCToA AIBBCToAAIBBCToAAIBBCToAAIBBCToAAIBBCToAAIBBCToAAIBr5F0v4HsQdAAAAIMSdAAAAIMS dAAAAIMSdAAAAIMSdAAAAIMSdAAAAIMSdAAAAIMSdAAAAIM6+aAb4WV+AADAD9Hp18jJBx0AAADX E3QAAACDEnQAAACDEnQAAACDEnQAAACDEnQAAACDEnQAAACDEnQAAACDEnQAAACDEnQAAADXybte wHcTdAAAAIMSdAAAAIMSdAAAAIMSdAAAAIMaIOgGOIkIAABwBwYIOgAAAK4j6AAAAAYl6AAAAAZ1 +kHnCB0AAMC1Tj/oAAAAuJagAwAAGJSgAwAAGJSgAwAAGJSgAwAAGJSgAwAAGJSgAwAAGJSgAwAA GJSgAwAAGJSgAwAAGNTJB11mRt71IgAAgL84madfIkMEXQzwhwQAAH44MgTdjcjsd70EAADgL01m 9AFa5OSDrvfTr2IAAOCHJ7uge2MjjDkBAIAfnhFSZICgO/0qBgAAfnhM6G5AH+CPCAAA/PA4Q3cT RphzAgAAPzgjHP86+aDr3XvoAACAtysjIge4oPHkgy6zm9IBAABvV+YQ93kMEHRiDgAAePtGaJH5 rhfwXX73L3+4/Pfv/2Tz6//7f+56KQAAwF+Q3/7LHy5j8x/uehnf6tYndPNZZjyNmNt51tVZHvrx SNwhIiKWaLnk1LPXmLLO2TOjR4+WpS4l8/C7+cFnt71GAACA1/1uevBpyTxkqUv0aJnR63xsl6ln b7lkxPKsbSIOPbKuznJu58cGOrv9Ed8bB91HH724s+T+zz7MiIjNe18/PXgREbvd7vjQObP0yNLn bJl5KNGzZ289WmtxyKUt0fshMnb/dfVX/+vR44s/vOk6AQAAvq//96+7x/+4/qv/HRm76P2QS1ta i0Pr0bJnP5ToLTNLn7P0yDof422328XFNZ931UhXzRTxakv9uW5nQvdspvZ0f/xS8yZyWiKnVebU Mg/t+IUzsk1l7rVEL0ssZcll6mWfpW57lG1GeRotv/rP5//xv/3Tv/ZP/vnxHy9vZb0AAAAR8c+P /3j5T3/on/yXzV//92j5VUZ52qNss9Tt1Mu+LLmUJZZaok9l7hnZ6nxsnKnlsXmWyHlzjLWrJopb 2nd4I2fo3n8Y+ZtHEe8/iHL1s827PS8+n+Jin1lr5vkms01nPUrpq2nf9/vo83rVI5Y29eyHmodV nQ5TxH5/yO0csY65T3Waoiy5/OP8y/+Rpaziy5tYMQAAwDU2ESXzEEvuMsrT3trTtpSL5ZDbdZT9 UqfDofTD1LP3km2uq973l329zt76preafdr03O4zez/G3ObdntvPXzziN59Gvv8wMh69+XJv9lKU R4/i/D89zPOvfpdf7GrO93pOtWaJyMt95CYyp7zMWmvOddWX2Ld9q301T0v2foh97vtZTHXJOUvU FiWiZKuRh6h1VXo/+UtcAACAsR3PzPVDj9i2pVzkkk/qkrte4zL2uc/MQ6vTcliy17pvc1312npG 22X2dV4ukfNZZEZk6z2/2PV870HL5UcfZPzPRxHx8MbW+ucFUikZmc+ncfEPEfFRxIOfP8wnH39c Hr+7yvW0ivVlZpkyS81sS2bblF76psdh39sq+7xkP0QuJaPOdZqWbNu6r7XWXvNQo2X0ErHP7Jdl LnPUMt3Q9wYAALhey5ZLX7LU7XLIbV1yF71vl6Ve9ujbVZ2Wln0pPZe5Z28lez1kb/XZhG6XOdXM 7McjZ9t1xOOnLc8/+zge/PxhPv40njfUc6X8Wefp3nji9fe/ivybv32x1fL+zz7M7dNPymbbc/Og 5+efH7dc1pr9vGVtc+nTetM2bV+XWNXSl+UQZWr9cFhNqxKtbXvUmOfS516Wdhn7Vst2yr4q5fTf mwcAAIwtM3pr5TD12K+j7HuNy2Wpl9H6tk7Tsm+HQy9TKz2XqKu2id762aa1ln1aMrc1++WzLZcP HvTsn/fcr59diPLS1su//9WbX4pyI1sYP/ooMh5GXJ2jO//pB69uu3xSs0yRS8/eV9mnOXqdsmVm jci6OvT9vk5lKlnqNEXvrfdd7X0dLXo7lLlcloipL0XQAQAAt6rO2UuPlksuS52OR8PiGHO956H1 aVn3vl8iW2a2KNnaPvuyHCd1c4/MFtnuv7bd8qsX5+c+ijePuYibPEN3te3y88gnnx23Xd7/yZT1 cebF1HutUWqtpWa2zCj9kDWmbGWaS51KzH0p+1ZjyiXXdZX73rIcymGVdRURc6+l9mjlu5YBAADw RpYpo2ePpSyH0g+ZeVjV42Su9WmZo+/rPC+l5RI9Wz9kz3KMu0PN3qP3Hr3fu8zs7/d8/Mdn2y3P PszHEV/fbvkG/vyge+kc3TdtuzzftXy863n+45LTk5qrd7KXkqVdlt7f2SzrqUQc9lEjYp7mqMuS h2nKlr2XWtvUWzvUsu9L1FVGbdWEDgAAuGW99UOJXkv0qWdvz87M9TK1dT/GXG251J7LtFov+5pL Ps2+WWfPmv3w9Did+/LLnu/vWj6J79hu+Ween4u4wQndy9sufxkRT3aHfBwR93+x9Pq4loup98O+ lvW97OVeb5E1Yhsl5iyHHtEjIntGuex5qGXOGr1MdSnHzZq1l1LmmEzoAACAW9XKkpGZJebeS7bD kr30XErPZYls5VnMRWSLbbZcZct7vR0y+/4is0/H6dz8i6U//mPL8z8d8sE+8qa3W0a8adB9w22X Ec8K9EcR51/9Lr9YL/3ePqJMpWwvetRay+q8x0XWcm9ZR5yXjMM+osxZSukRh77UsrRcT0s/1BLT tNSlRPY3Wi4AAMB361H6nEv04ysJ6r7NPXvU1fHMXM82rdZLbLNdZLYavR222Xvv/XzOnq317Xrp 7+1aLj/9IO+/Ey+mczd0u+XzX3+TX46IeDno/u5XUX79MMrjR1F++fMov919XLfvrsr9/bo+Ocz1 /MdT3SxTLbVOu6XU1XmpJepUSpnWh8u5rkqNKNNllGnKUpd+qHWO2pdSskZZvfFiAQAAvt0hIkqP rHNmX6LPddVbyb6JbBHHM3P71WbJzJbPYu5szp69t8u59e2Xrd9fLf3Jet/P/3TIX5x92J9P5x5F 3tR2y4ib2HL52pTuo0cv3XgZ+4yIePJu9PsRcb6JeBIRmyXibK6x20asznvE0xrLZp2llWlal77a Xfa6KrWup3Jopa7XUfpSbLcEAABu3Soi6jrz0CLX6+y19ayH7P1s09r+2QUoT7Pnva/H3P1N6/NL MXf/3/b5m3gRc6886A1jLuImJnQRX5/S/TrK44+OU7rPH0R58qMo299/Uu7/ZF3Pd3N9cnmc1G2X Utf3al21Ui9bqaWUad6UOrWoU7+sbTorU7usbTrG3Kre0HoBAAC+waEfw2tqmW3a9KntstVNb1P0 5TJ7ZrbNlP0wZd9fHLdZXsXc9mzpT/647+c//SDvfxX54PNnZ+d+HfnRRzc7nYu4qaCL+Natl98V dffWpeyWUle91Pms1DaVMrWofS5larvaDqWcnZ1FP+wEHQAAcKvq6ix3u11Mq8w2nfW6ZLYp+tQy l132Qz1O5S72md8r5m5hq+Xzj7mJD4mIV4Iu4jui7tmZuh+f1XLRprpptR5WUda91mWOsuqltrmU zRylXZbS5ij3ImKZtoIOAAC4VXM7z4uImJbIaZN5uUROS+ahZp+XyH3tfXWIvJx6vze1/uWu5/Mz c98n5iJuLOhu7sXir994Ga+ep/vl1Q9/+kE8+f0n/X5EbNe13NtH7O/17Be1ZIvsNcq0Lj3nUra7 KOfrUvIyyi4iYr25seUCAABcZ9n1qBExbSK3+8z5LHKqmZf7zGyRPXpv93veu8zcrpd+v/X8tpj7 2gNuKOYibnJCd+Wa83TxNxGvTOo++7hs312V99+ZyvZsKk9+e5zW7TelLBe1vLMuZVmXcriIcm/9 4jKUZediFAAA4HbNZ/k8uC72mat7kfM+8+k+c77Xc32Z+eWu5/1fLP181/Lx0+O75u7/7MNXYi7+ 4fi+7tvYavn8427yw557LeoiIl7Zfvnpo/Lk361LfPhhbH//yfOwu/yilvfOarn804u4i4h4Zy3k AACAt+vp/hh2VxG3ebfnF7uem/d6Pg+5n36Q8fHHcf/f9vng5w+/Npm7zZiLuK2gi/jWqIuIeH1a FxHx/jtT2X4+lcvzY8hdxd2trREAAOBbXEVcRMRm2/P8wTHkIiJen8pFRLzNmIu4zaCLuP6ilNe2 YEZEXIXd1cQu4kXcRUTEzyIuvxB2AADA27F5r2d8dvz3KxF3NZF7FnIREd+6xTLi1mIu4raDLuLa qIv4+rQu4hh2ERGvxx0AAMBdeTniIiJeDrmIb5nKRdxqzEW8jaCL+Oaoe2lad/V/z+Pu00clHj58 /jtPPvtY3AEAAG/FVbxFRMSjR/Hg5w9fibiIY8hdTeUi3n7MRbytoIv4WtRFvBZ2EfF63EW8CDwA AIC37eWAi3gRcRHfEnIRbyXmIt5m0F25Juwiro+7iK8HHgAAwNvy/sNnsfZ9Ii7irYXc88e9zYe9 4hvCLuJF3L3seegBAADcsqtwe9k3RlzEWw+554+9i4e+4lvCDgAA4KTdUcg9f/xdPvwVwg4AABjF HYfcldONKIEHAACcihMJOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAuDH/H/VPYKUAa/CcAAAAAElFTkSuQmCC "
+         id="image3251"
+         x="252.39154"
+         y="-129.58473" />
+      <text
+         sodipodi:linespacing="125%"
+         id="text3348"
+         y="474.68503"
+         x="94.258499"
+         style="font-size:54.71709442px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#ffffff;fill-opacity:1;stroke:none;font-family:DejaVu Sans;-inkscape-font-specification:DejaVu Sans"
+         xml:space="preserve"><tspan
+           y="474.68503"
+           x="94.258507"
+           id="tspan3350"
+           sodipodi:role="line">x86-64 CPU</tspan></text>
+      <text
+         sodipodi:linespacing="125%"
+         id="text3348-4"
+         y="471.46744"
+         x="488.59012"
+         style="font-size:54.71709442px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#ffffff;fill-opacity:1;stroke:none;font-family:DejaVu Sans;-inkscape-font-specification:DejaVu Sans"
+         xml:space="preserve"><tspan
+           y="471.46744"
+           x="488.59012"
+           id="tspan3350-7"
+           sodipodi:role="line">nVidia shader</tspan></text>
+      <text
+         sodipodi:linespacing="125%"
+         id="text3348-4-1"
+         y="1079.5792"
+         x="98.994942"
+         style="font-size:54.71709442px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#ffffff;fill-opacity:1;stroke:none;font-family:DejaVu Sans;-inkscape-font-specification:DejaVu Sans"
+         xml:space="preserve"><tspan
+           y="1079.5792"
+           x="98.994942"
+           id="tspan3350-7-9"
+           sodipodi:role="line">fglrx shader</tspan></text>
+      <text
+         sodipodi:linespacing="125%"
+         id="text3348-4-5"
+         y="1078.8218"
+         x="477.67682"
+         style="font-size:54.71709442px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#ffffff;fill-opacity:1;stroke:none;font-family:DejaVu Sans;-inkscape-font-specification:DejaVu Sans"
+         xml:space="preserve"><tspan
+           y="1078.8218"
+           x="477.67682"
+           id="tspan3350-7-1"
+           sodipodi:role="line">intel shader</tspan></text>
+    </g>
+  </g>
+</svg>
diff --git a/figures/shady-the-fox.png b/figures/shady-the-fox.png
new file mode 100644 (file)
index 0000000..e352404
Binary files /dev/null and b/figures/shady-the-fox.png differ
diff --git a/figures/who-the-hell-needs-antialiasing-anyway.png b/figures/who-the-hell-needs-antialiasing-anyway.png
new file mode 100644 (file)
index 0000000..15fafdd
Binary files /dev/null and b/figures/who-the-hell-needs-antialiasing-anyway.png differ
index b3239f2..4c1d5fd 100644 (file)
@@ -1,10 +1,26 @@
 \section*{Abstract}
 
-At the fundamental level, a document is a means to convey information. The limitations on a digital document format therefore restrict the types and quality of information that can be communicated. Whilst modern document formats are now able to include increasingly complex dynamic content, they still suffer from early views of a document as a static page; to be viewed at a fixed scale and position. In this report, we focus on the limitations of modern document formats (including PDF, PostScript, SVG) with regards to the level of detail, or precision at which primatives can be drawn. We propose a research project to investigate whether it is possible to obtain an ``arbitrary precision'' document format, capable of including primitives created at an arbitrary level of zoom.
+Early document formats such as PostScript were motivated by a desire to
+print text and visual information onto a static paper medium.
+Although documents are increasingly viewed digitally, modern standards
+including PDF and SVG are still largely based upon this model.
+Digital document viewers are able to scale a subregion of the document to
+fit the display. However, coordinates of graphics primitives are
+typically represented with IEEE-754 floating point numbers. This places
+limits on the precision with which primitives in the document can be
+specified and rendered.
 
-{\bf Keywords:} \emph{document formats, precision, floating point, vector images, graphics, OpenGL, VHDL, PostScript, PDF, {\TeX}, SVG, HTML5, Javascript }
+We have implemented a minimal SVG viewer, with which we have
+compared a number of approaches to achieving arbitrary precision
+document formats. We demonstrate the trade off between performance and
+precision with alternative number representations including arbitrary
+precision floats, rationals, and IEEE-754 fixed precision floats. We also
+consider approaches to increasing the precision that can be attained with
+IEEE-754 floats.
 
-{\bf Note:} This report is best viewed digitally as a PDF. The digital version is available at \url{http://szmoore.net/ipdf/documents/LitReviewSam.pdf}
+{\bf Keywords:} \emph{document formats, precision, floating point, vector images, graphics, OpenGL, SDL2, PostScript, PDF, {\TeX}, SVG, HTML5, Javascript }
+
+{\bf Note:} This report is best viewed digitally as a PDF. The digital version is available at \url{http://szmoore.net/ipdf/sam/thesis.pdf}
 
 % Oh dear...
 \quad \\ \quad \\ \quad \\ \quad
diff --git a/meta/Proposal.tex b/meta/Proposal.tex
new file mode 100644 (file)
index 0000000..ff9a5f3
--- /dev/null
@@ -0,0 +1,72 @@
+\chapter{Proposal}\label{Proposal}
+
+\section{Aim}
+
+In this project, we will explore the state of the art of current document formats including PDF, PostScript, SVG, HTML, and the limitations of each with regards to  precision. 
+
+We will consider designs for a document format allowing graphics primitives at an arbitrary level of zoom with no loss of detail. A viewer and editor will be implemented as a proof of concept; we adopt a low level, ground up approach to designing this viewer so as to not become restricted by any single existing document format. Although it is possible to produce three dimensional graphics using some of the technologies we will explore, we will focus on two dimensional graphics.
+
+There are many possible applications for documents in which precision is unlimited. Several areas of use include: visualisation of extremely large or infinite data sets; visualisation of high precision numerical computations; digital artwork; computer aided design; and maps.
+
+\subsection{Clarification of Terms}
+
+It may be necessary to clarify what we mean by the terms ``arbitrary precision'' and ``document formats''. Regarding the latter, we consider a document format to be any representation of visual information which is capable of being stored indefinitely. Regarding the former, we do not propose to be able to contain an infinite amount of information within such a document. The goal is to be able to render a primitive at the same level of detail it is specified by a document format, regardless of how precise this level is. For example, the precision of coordinates of primitives drawn in a graphical document editor will always be limited by the resolution of the display on which they are drawn, but not by the viewer.
+
+   
+\section{Methods}
+
+Initial research and software development is being conducted in collaboration with David Gow\cite{proposalGow}. Once a simple testbed application has been developed, we will individually explore approaches for introducing arbitrary levels of precision; these approaches will be implemented as alternate versions of the same software. The focus will be on drawing simple primitives (lines, polygons, circles). However, if time permits we will explore adding more complicated primitives (font glyphs, bezier curves, embedded bitmaps). Hearn and Baker's textbook ``Computer Graphics'' includes chapters providing a good overview of two dimensional graphics\cite{computergraphics2}.
+
+The process of rendering a document will be considered as a common area of research, whilst individual research will be conducted on means for allowing infinite precision.
+At this stage we have identified two possible areas for individual research:
+
+\begin{enumerate}
+
+       \item {\bf Arbitrary Precision real valued numbers} --- Sam Moore
+
+       We plan to investigate the representation of real values to a high or arbitary degree of precision. Such representations would allow for the coordinates of primitives to be relative to a single global coordinate system. We would expect a decrease in performance with increased complexity of the data structure used to represent a real value. We will also consider the limitations imposed by performing calculations on the GPU or CPU.
+
+Starting points for research in this area are Priest's 1991 paper, ``Algorithms for Arbitrary Precision Floating Point Arithmetic''\cite{priest1991algorithms}, and Goldberg's 1992 paper ``The design of floating point data types''\cite{goldberg1992thedesign}. A more recent and comprehensive text book, ``Handbook of Floating Point Arithmetic''\cite{HFP}, published in 2010, has also been identified as highly relevant.
+
+       \item {\bf Local coordinate systems} --- David Gow \cite{proposalGow}
+       
+       An alternative approach involves segmenting the document into different regions using fixed precision floats to define primitives within each region. A quadtree or similar data structure could be employed to identify and render those regions currently visible in the document viewer.
+
+\end{enumerate}
+We aim to compare these and any additional implementations considered using the following metrics:
+\begin{enumerate}
+
+       \item {\bf Performance vs Number of Primitives}
+
+       As it is clearly desirable to include more objects in a document, this is a natural metric for the usefulness of an implementation.
+       We will compare the performance of rendering different implementations, using several ``standard'' test documents.
+       
+       \item {\bf Performance vs Visible Primitives}
+
+       There will inevitably be an overhead to all primitives in the document, whether drawn or not.
+       As the structure of the document format and rendering algorithms may be designed independently, we will repeat the above tests considering only the number of visible primitives. 
+       
+       
+       \item {\bf Performance vs Zoom Level}
+
+       We will also consider the performance of rendering at zoom levels that include primitives on both small and large scales, since these are the cases under which floating point precision causes problems in the PostScript and PDF standards.
+
+       \item {\bf Performance whilst translation and scaling}
+
+       Whilst changing the view, it is ideal that the document be re-rendered as efficiently as possible, to avoid disorienting and confusing the user.
+       We will therefore compare the speed of rendering as the standard documents are translated or scaled at a constant rate.
+
+       \item {\bf Artifacts and Limitations on Precision}
+
+       As we are unlikely to achieve truly ``infinite'' precision, qualitative comparisons of the accuracy of rendering under different implementations should be made.
+
+\end{enumerate}
+
+\section{Software and Hardware Requirements}
+
+Our proof of concept will be developed for a conventional GNU/Linux desktop or laptop computer using the OpenGL 3.1 API for rendering. However, the techniques explored could be extended to other platforms and libraries.
+
+
+
+
+
index cfbd463..3230c05 100644 (file)
@@ -1,11 +1,11 @@
 % Suitably pretty title page is required.
 \begin{titlepage}
-\title{Precision In Document Formats} %From ipdf -> pidf (-_-)
+\title{Number Representations and Precision in Vector Graphics}
 \author{{\it Author:} Samuel Moore\cite{proposalMoore} \\
 {{\it Partners:} David Gow\cite{proposalGow}} \\
-{{\it Supervisor:} Prof Tim French}\\
+{{\it Supervisors:} Prof Tim French, Dr Rowan Davies}\\
 \\ \\ \\
-\includegraphics[width=150px]{figures/uwacrest.pdf}}
+\includegraphics[width=0.7\textwidth]{figures/uwacrest.pdf}}
 %\date{Date of submission: 02/11/2012}
 \maketitle
 \end{titlepage}
diff --git a/notes.nb b/notes.nb
new file mode 100644 (file)
index 0000000..a18d234
--- /dev/null
+++ b/notes.nb
@@ -0,0 +1,294 @@
+(* Content-type: application/vnd.wolfram.mathematica *)
+
+(*** Wolfram Notebook File ***)
+(* http://www.wolfram.com/nb *)
+
+(* CreatedBy='Mathematica 9.0' *)
+
+(*CacheID: 234*)
+(* Internal cache information:
+NotebookFileLineBreakTest
+NotebookFileLineBreakTest
+NotebookDataPosition[       157,          7]
+NotebookDataLength[      8384,        285]
+NotebookOptionsPosition[      7404,        248]
+NotebookOutlinePosition[      7739,        263]
+CellTagsIndexPosition[      7696,        260]
+WindowFrame->Normal*)
+
+(* Beginning of Notebook Content *)
+Notebook[{
+Cell[TextData[{
+ "The view \[OpenCurlyDoubleQuote]scale about point\[CloseCurlyDoubleQuote] \
+transformation\nmx, my is mouse coordinates ",
+ StyleBox["relative to the view",
+  FontSlant->"Italic"],
+ "\nx, y, w, h are current view coordinates ",
+ StyleBox["relative to the document",
+  FontSlant->"Italic"],
+ "\nX, Y, W, H are transformed coordinates\nThis operation cannot be \
+represented as a 2D matrix operation..."
+}], "Text",
+ CellChangeTimes->{{3.621645547391625*^9, 3.621645590446886*^9}, {
+  3.621645788609687*^9, 3.621645803583606*^9}}],
+
+Cell[BoxData[{
+ RowBox[{
+  RowBox[{"vx", " ", "=", " ", 
+   RowBox[{
+    RowBox[{"w", " ", "*", "mx"}], " ", "+", " ", "x"}]}], 
+  ";"}], "\[IndentingNewLine]", 
+ RowBox[{
+  RowBox[{"vy", " ", "=", " ", 
+   RowBox[{
+    RowBox[{"h", " ", "*", " ", "my"}], " ", "+", " ", "y"}]}], 
+  ";"}], "\[IndentingNewLine]", 
+ RowBox[{
+  RowBox[{"top", " ", "=", " ", 
+   RowBox[{"vy", " ", "-", " ", "y"}]}], ";"}], "\[IndentingNewLine]", 
+ RowBox[{
+  RowBox[{"left", " ", "=", " ", 
+   RowBox[{"vx", " ", "-", " ", "x"}]}], ";"}], "\[IndentingNewLine]", 
+ RowBox[{
+  RowBox[{"top", " ", "=", " ", 
+   RowBox[{"top", "*", "s"}]}], ";"}], "\[IndentingNewLine]", 
+ RowBox[{
+  RowBox[{"left", " ", "=", " ", 
+   RowBox[{"left", " ", "*", " ", "s"}]}], ";"}], "\[IndentingNewLine]", 
+ RowBox[{
+  RowBox[{"X", " ", "=", " ", 
+   RowBox[{"vx", " ", "-", " ", "left"}]}], ";"}], "\[IndentingNewLine]", 
+ RowBox[{
+  RowBox[{"Y", " ", "=", " ", 
+   RowBox[{"vy", " ", "-", " ", "top"}]}], ";"}], "\[IndentingNewLine]", 
+ RowBox[{
+  RowBox[{"W", " ", "=", " ", 
+   RowBox[{"w", "*", "s"}]}], ";"}], "\[IndentingNewLine]", 
+ RowBox[{
+  RowBox[{"H", " ", "=", " ", 
+   RowBox[{"h", "*", "s"}]}], ";"}]}], "Input",
+ CellChangeTimes->{{3.621644450038117*^9, 3.621644517724819*^9}, {
+  3.6216455001839314`*^9, 3.6216455061448193`*^9}}],
+
+Cell[CellGroupData[{
+
+Cell[BoxData[
+ RowBox[{"xy1", " ", "=", " ", 
+  RowBox[{"{", 
+   RowBox[{
+    RowBox[{"{", 
+     RowBox[{"x", ",", "y"}], "}"}], ",", 
+    RowBox[{"{", 
+     RowBox[{"x", "+", "w"}], "}"}], ",", 
+    RowBox[{"{", 
+     RowBox[{"y", "+", "h"}], "}"}]}], "}"}]}]], "Input",
+ CellChangeTimes->{{3.621645646537537*^9, 3.621645677183116*^9}}],
+
+Cell[BoxData[
+ RowBox[{"{", 
+  RowBox[{
+   RowBox[{"{", 
+    RowBox[{"x", ",", "y"}], "}"}], ",", 
+   RowBox[{"{", 
+    RowBox[{"w", "+", "x"}], "}"}], ",", 
+   RowBox[{"{", 
+    RowBox[{"h", "+", "y"}], "}"}]}], "}"}]], "Output",
+ CellChangeTimes->{3.62164567753369*^9}]
+}, Open  ]],
+
+Cell[CellGroupData[{
+
+Cell[BoxData[
+ RowBox[{"xy2", " ", "=", " ", 
+  RowBox[{"FullSimplify", "[", 
+   RowBox[{"{", 
+    RowBox[{"X", ",", " ", "Y", ",", " ", 
+     RowBox[{"X", "+", "W"}], ",", " ", 
+     RowBox[{"Y", "+", "H"}]}], "}"}], "]"}]}]], "Input",
+ CellChangeTimes->{{3.62164452159755*^9, 3.621644525242661*^9}, {
+  3.621645606946629*^9, 3.621645623731018*^9}, {3.6216456891302*^9, 
+  3.621645689867572*^9}}],
+
+Cell[BoxData[
+ RowBox[{"{", 
+  RowBox[{
+   RowBox[{
+    RowBox[{"mx", " ", 
+     RowBox[{"(", 
+      RowBox[{"w", "-", 
+       RowBox[{"s", " ", "w"}]}], ")"}]}], "+", "x"}], ",", 
+   RowBox[{
+    RowBox[{"h", " ", 
+     RowBox[{"(", 
+      RowBox[{"my", "-", 
+       RowBox[{"my", " ", "s"}]}], ")"}]}], "+", "y"}], ",", 
+   RowBox[{
+    RowBox[{
+     RowBox[{"(", 
+      RowBox[{"mx", "+", "s", "-", 
+       RowBox[{"mx", " ", "s"}]}], ")"}], " ", "w"}], "+", "x"}], ",", 
+   RowBox[{
+    RowBox[{"h", " ", 
+     RowBox[{"(", 
+      RowBox[{"my", "+", "s", "-", 
+       RowBox[{"my", " ", "s"}]}], ")"}]}], "+", "y"}]}], "}"}]], "Output",
+ CellChangeTimes->{
+  3.621644525784692*^9, {3.621645598921043*^9, 3.62164562472651*^9}, {
+   3.621645679592589*^9, 3.6216456913785887`*^9}}]
+}, Open  ]],
+
+Cell[CellGroupData[{
+
+Cell[BoxData[
+ RowBox[{"xywh2", " ", "=", " ", 
+  RowBox[{"FullSimplify", "[", 
+   RowBox[{"{", 
+    RowBox[{"X", ",", " ", "Y", ",", " ", "W", ",", "H"}], "}"}], 
+   "]"}]}]], "Input",
+ CellChangeTimes->{{3.621645929284232*^9, 3.621645939176342*^9}}],
+
+Cell[BoxData[
+ RowBox[{"{", 
+  RowBox[{
+   RowBox[{
+    RowBox[{"mx", " ", 
+     RowBox[{"(", 
+      RowBox[{"w", "-", 
+       RowBox[{"s", " ", "w"}]}], ")"}]}], "+", "x"}], ",", 
+   RowBox[{
+    RowBox[{"h", " ", 
+     RowBox[{"(", 
+      RowBox[{"my", "-", 
+       RowBox[{"my", " ", "s"}]}], ")"}]}], "+", "y"}], ",", 
+   RowBox[{"s", " ", "w"}], ",", 
+   RowBox[{"h", " ", "s"}]}], "}"}]], "Output",
+ CellChangeTimes->{3.621645939693961*^9}]
+}, Open  ]],
+
+Cell[TextData[{
+ "For primitives in document,\nV X \[Rule] V X + S[V X - ",
+ Cell[BoxData[
+  FormBox[
+   RowBox[{
+    SubscriptBox["X", "0"], "]"}], TraditionalForm]],
+  FormatType->"TraditionalForm"],
+ "\nV is view matrix, S is scale matrix"
+}], "Text",
+ CellChangeTimes->{{3.62164641213169*^9, 3.62164647339319*^9}}],
+
+Cell[BoxData[
+ RowBox[{
+  RowBox[{"(*", 
+   RowBox[{"TODO", ":", " ", 
+    RowBox[{"Express", " ", "as", " ", "a", " ", "matrix", " ", 
+     RowBox[{"operation", "?"}]}]}], "*)"}], "\[IndentingNewLine]"}]], "Input",\
+
+ CellChangeTimes->{{3.6216459415176992`*^9, 3.621645948934423*^9}, {
+  3.6216463980527067`*^9, 3.6216464053607597`*^9}}],
+
+Cell[BoxData[
+ RowBox[{"ClearAll", "[", 
+  RowBox[{"Evaluate", "[", 
+   RowBox[{
+    RowBox[{"Context", "[", "]"}], "<>", "\"\<*\>\""}], "]"}], "]"}]], "Input"],
+
+Cell["Floating point operations", "Text",
+ CellChangeTimes->{{3.621665522093079*^9, 3.6216655239496813`*^9}}],
+
+Cell[BoxData[
+ RowBox[{"FullSimplify", "[", 
+  RowBox[{"m1", " ", 
+   SuperscriptBox["B", "e1"], " ", "*", " ", "m2", " ", 
+   SuperscriptBox["B", "e2"]}], "]"}]], "Input",
+ CellChangeTimes->{{3.621665107840431*^9, 3.6216651376842957`*^9}}],
+
+Cell[BoxData[
+ RowBox[{
+  SuperscriptBox["B", 
+   RowBox[{"e1", "+", "e2"}]], " ", "m1", " ", "m2"}]], "Input",
+ CellChangeTimes->{{3.62166519824517*^9, 3.62166520820506*^9}}],
+
+Cell[BoxData[
+ RowBox[{
+  SuperscriptBox["B", 
+   RowBox[{"e1", "+", "e2"}]], " ", "m1", " ", "m2"}]], "Output",
+ CellChangeTimes->{{3.621665204836622*^9, 3.621665208534109*^9}}],
+
+Cell[CellGroupData[{
+
+Cell[BoxData[
+ RowBox[{"FullSimplify", "[", 
+  RowBox[{"Solve", "[", 
+   RowBox[{
+    RowBox[{
+     RowBox[{
+      RowBox[{"m1", " ", 
+       SuperscriptBox["B", "e1"]}], " ", "+", " ", 
+      RowBox[{"m2", " ", 
+       SuperscriptBox["B", "e2"]}]}], " ", "\[Equal]", " ", 
+     RowBox[{"m3", " ", 
+      SuperscriptBox["B", "e1"]}]}], ",", " ", "m3"}], "]"}], "]"}]], "Input",\
+
+ CellChangeTimes->{
+  3.621665148857037*^9, {3.621665392367518*^9, 3.62166542126152*^9}}],
+
+Cell[BoxData[
+ RowBox[{"{", 
+  RowBox[{"{", 
+   RowBox[{"m3", "\[Rule]", 
+    RowBox[{"m1", "+", 
+     RowBox[{
+      SuperscriptBox["B", 
+       RowBox[{
+        RowBox[{"-", "e1"}], "+", "e2"}]], " ", "m2"}]}]}], "}"}], 
+  "}"}]], "Output",
+ CellChangeTimes->{
+  3.621665149470646*^9, {3.621665400108696*^9, 3.621665421774309*^9}}]
+}, Open  ]]
+},
+WindowSize->{740, 575},
+WindowMargins->{{Automatic, 79}, {Automatic, 0}},
+FrontEndVersion->"9.0 for Linux x86 (64-bit) (February 7, 2013)",
+StyleDefinitions->"Default.nb"
+]
+(* End of Notebook Content *)
+
+(* Internal cache information *)
+(*CellTagsOutline
+CellTagsIndex->{}
+*)
+(*CellTagsIndex
+CellTagsIndex->{}
+*)
+(*NotebookFileOutline
+Notebook[{
+Cell[557, 20, 546, 12, 110, "Text"],
+Cell[1106, 34, 1309, 36, 231, "Input"],
+Cell[CellGroupData[{
+Cell[2440, 74, 337, 10, 32, "Input"],
+Cell[2780, 86, 271, 9, 32, "Output"]
+}, Open  ]],
+Cell[CellGroupData[{
+Cell[3088, 100, 397, 9, 32, "Input"],
+Cell[3488, 111, 782, 25, 32, "Output"]
+}, Open  ]],
+Cell[CellGroupData[{
+Cell[4307, 141, 251, 6, 32, "Input"],
+Cell[4561, 149, 446, 15, 32, "Output"]
+}, Open  ]],
+Cell[5022, 167, 318, 9, 71, "Text"],
+Cell[5343, 178, 338, 8, 55, "Input"],
+Cell[5684, 188, 160, 4, 32, "Input"],
+Cell[5847, 194, 109, 1, 30, "Text"],
+Cell[5959, 197, 240, 5, 35, "Input"],
+Cell[6202, 204, 175, 4, 32, "Input"],
+Cell[6380, 210, 178, 4, 32, "Output"],
+Cell[CellGroupData[{
+Cell[6583, 218, 469, 14, 35, "Input"],
+Cell[7055, 234, 333, 11, 35, "Output"]
+}, Open  ]]
+}
+]
+*)
+
+(* End of internal cache information *)
diff --git a/presentation.nav b/presentation.nav
new file mode 100644 (file)
index 0000000..83db07d
--- /dev/null
@@ -0,0 +1,8 @@
+\beamer@endinputifotherversion {3.33pt}
+\headcommand {\slideentry {0}{0}{1}{1/1}{}{0}}
+\headcommand {\beamer@framepages {1}{1}}
+\headcommand {\beamer@partpages {1}{1}}
+\headcommand {\beamer@subsectionpages {1}{1}}
+\headcommand {\beamer@sectionpages {1}{1}}
+\headcommand {\beamer@documentpages {1}}
+\headcommand {\def \inserttotalframenumber {1}}
diff --git a/presentation.snm b/presentation.snm
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/presentation/Logos/WAMSI.png b/presentation/Logos/WAMSI.png
new file mode 100644 (file)
index 0000000..36d914d
Binary files /dev/null and b/presentation/Logos/WAMSI.png differ
diff --git a/presentation/Logos/uwa.png b/presentation/Logos/uwa.png
new file mode 100644 (file)
index 0000000..2790277
Binary files /dev/null and b/presentation/Logos/uwa.png differ
diff --git a/presentation/arrow.pdf b/presentation/arrow.pdf
new file mode 100644 (file)
index 0000000..2a7460e
--- /dev/null
@@ -0,0 +1,70 @@
+%PDF-1.5
+%µí®û
+3 0 obj
+<< /Length 4 0 R
+   /Filter /FlateDecode
+>>
+stream
+x\9ce\8e1\vÂ@\f\85÷ü\8a7\v\17\93ô¼^W\17Ap¨\8eâ 
+\15i\87ÖÁ¿oZµ\b\12\92@òò¾ô$\18c¿Áò,h\1e¤\89+Í9'<}·õ¼Óñ\ 4\95"vè¡ÓI\18[4¶ª4]áÒ\91k$Â\945ftðÊÑÒwÐâ\80ú\83\e\1aÌÜÈ6Y8¯\7f\9b
+þ¬\83ZfuQ\98í\83ª²I\81Pd\96\94\1c\10´\14\8e\9agUû£rNA>¹Ñzá\8fÔô\ 2ç\87
+endstream
+endobj
+4 0 obj
+   161
+endobj
+2 0 obj
+<<
+   /ExtGState <<
+      /a0 << /CA 1 /ca 1 >>
+   >>
+>>
+endobj
+5 0 obj
+<< /Type /Page
+   /Parent 1 0 R
+   /MediaBox [ 0 0 178.138641 42.297215 ]
+   /Contents 3 0 R
+   /Group <<
+      /Type /Group
+      /S /Transparency
+      /I true
+      /CS /DeviceRGB
+   >>
+   /Resources 2 0 R
+>>
+endobj
+1 0 obj
+<< /Type /Pages
+   /Kids [ 5 0 R ]
+   /Count 1
+>>
+endobj
+6 0 obj
+<< /Creator (cairo 1.12.16 (http://cairographics.org))
+   /Producer (cairo 1.12.16 (http://cairographics.org))
+>>
+endobj
+7 0 obj
+<< /Type /Catalog
+   /Pages 1 0 R
+>>
+endobj
+xref
+0 8
+0000000000 65535 f 
+0000000574 00000 n 
+0000000275 00000 n 
+0000000015 00000 n 
+0000000253 00000 n 
+0000000347 00000 n 
+0000000639 00000 n 
+0000000768 00000 n 
+trailer
+<< /Size 8
+   /Root 7 0 R
+   /Info 6 0 R
+>>
+startxref
+820
+%%EOF
diff --git a/presentation/beamerthemeuwa_eng.sty b/presentation/beamerthemeuwa_eng.sty
new file mode 100644 (file)
index 0000000..d78ccec
--- /dev/null
@@ -0,0 +1,160 @@
+% Copyright 2007 by Till Tantau
+%
+% This file may be distributed and/or modified
+%
+% 1. under the LaTeX Project Public License and/or
+% 2. under the GNU Public License.
+%
+% See the file doc/licenses/LICENSE for more details.
+% Modifed by CBluteau to create the UWA engineering themes
+
+\ProvidesPackageRCS $Header: /cvsroot/latex-beamer/latex-beamer/themes/theme/beamerthemeuwa_eng.sty,v 1.7 2007/01/28 20:48:30 tantau Exp $
+
+\def\themeoption{uwa_pagen}
+
+\DeclareOption{uwa_pagen}{\def\themeoption{uwa_pagen}}
+\DeclareOption{navmenu}{\def\themeoption{navmenu}}
+\DeclareOption{sec_navmenu}{\def\themeoption{sec_navmenu}}
+\DeclareOption{splitfooter}{\def\themeoption{splitfooter}}
+
+%\inserttotalframenumber
+\ProcessOptions
+
+\mode<presentation>
+\usefonttheme{default}
+\usecolortheme{default} 
+\useinnertheme{default}
+\useoutertheme{split}
+
+\usebackgroundtemplate{\includegraphics[width=\paperwidth,height=\paperheight]{uwa_eng.png}} % need this to get the UWA format
+\setbeamertemplate{navigation symbols}{} % remove those weird naviga buttons that are hard to use at the bottom
+
+
+ \setbeamertemplate{headline}[default]
+
+% Defining the 3 UWA footline themes  %=====================================
+
+%Simplest of themes and default one, where currentframenumber / total frame number appears at bottom right
+ % Modifying the [page numbers] option offered in beamer... to get the footer page number out of the UWA orange outline. 
+  \defbeamertemplate*{footline}{uwa_pagen}
+ { 
+       \begin{beamercolorbox}[wd=0.95\textwidth,ht=1cm,right]{page number in head/foot}
+        \vskip2pt \usebeamerfont{page number}\insertframenumber{/}\inserttotalframenumber \vskip3pt
+       \end{beamercolorbox}
+ }
+ % section navigation menu appears at bottom right of each frame
+\defbeamertemplate*{footline}{navmenu}
+ {     
+   \leavevmode%
+   \@tempdimb=2.4375ex%
+  \ifnum\beamer@subsectionmax<\beamer@sectionmax%
+    \multiply\@tempdimb by\beamer@sectionmax%
+  \else%
+    \multiply\@tempdimb by\beamer@subsectionmax%
+  \fi%
+  \ifdim\@tempdimb>0pt%
+    \advance\@tempdimb by 1.125ex
+    \ifdim\@tempdimb<.47in
+      \@tempdimb=.47in%
+    \fi%
+ \begin{beamercolorbox}[wd=0.99\paperwidth,ht=\@tempdimb,right]{section in head/foot}
+   \vbox to\@tempdimb{\vfil\insertsectionnavigation{.9\textwidth}\vfil}
+      \end{beamercolorbox}
+     \fi%
+ }
+
+ %Hybrid of the 2 previous themes. When a new section commences, section menu appears at bottom otherwise you see just the page/total frame number 
+ \defbeamertemplate*{footline}{sec_navmenu}
+ { 
+       \ifnum\beamer@startpageofsection=\c@page
+        \leavevmode%
+       \@tempdimb=2.4375ex%
+       \ifnum\beamer@subsectionmax<\beamer@sectionmax%
+       \multiply\@tempdimb by\beamer@sectionmax%
+       \else%
+       \multiply\@tempdimb by\beamer@subsectionmax%
+       \fi%
+         \ifdim\@tempdimb>0pt%
+    \advance\@tempdimb by 1.125ex
+    \ifdim\@tempdimb<.47in
+      \@tempdimb=.47in%
+    \fi%
+ \begin{beamercolorbox}[wd=0.99\paperwidth,ht=\@tempdimb,right]{section in head/foot}
+   \vbox to\@tempdimb{\vfil\insertsectionnavigation{.33\textwidth}\vfil}
+      \end{beamercolorbox}
+     \fi%
+     \else % placing pge number
+      \begin{beamercolorbox}[wd=0.95\textwidth,ht=1cm,right]{page number in head/foot}
+       \vskip2pt \usebeamerfont{page number}\insertframenumber{/}\inserttotalframenumber \vskip3pt
+       \end{beamercolorbox}
+ \fi%
+ }
+  % Another custom theme with author in footline (left) and nav menu  (bottom right)... 
+ % You can place anything really in the left or right box
+ \defbeamertemplate*{footline}{splitfooter}
+ {     
+   \leavevmode%
+   \@tempdimb=2.4375ex%
+  \ifnum\beamer@subsectionmax<\beamer@sectionmax%
+    \multiply\@tempdimb by\beamer@sectionmax%
+  \else%
+    \multiply\@tempdimb by\beamer@subsectionmax%
+  \fi%
+  \ifdim\@tempdimb>0pt%
+    \advance\@tempdimb by 1.125ex
+    \ifdim\@tempdimb<.47in
+      \@tempdimb=.47in%
+    \fi%
+    \hskip5pt
+{\begin{beamercolorbox}[wd=.48\paperwidth,dp=1.125ex,leftskip=.3cm plus1fill,left]{author in head/foot}%
+     \usebeamerfont{author in head/foot}{\insertshortauthor}
+      \end{beamercolorbox}
+ \begin{beamercolorbox}[wd=.49\paperwidth,ht=\@tempdimb,right]{section in head/foot}
+   \vbox to\@tempdimb{\vfil\insertsectionnavigation{.48\textwidth}\vfil}%
+      \end{beamercolorbox}}
+     \fi%
+ }
+\setbeamertemplate{footline}[\themeoption] %apply selected theme
+
+
+%% Creating new titlepage format to avoid text going into the banner==========================================
+\defbeamertemplate*{title page}{uwa}
+{
+  \vspace{2.5cm}
+  \begin{flushleft}
+    {\usebeamerfont{title}\usebeamercolor[fg]{title}\inserttitle} 
+       \vskip0pt plus 0.25fill
+     {\usebeamerfont{subtitle}\usebeamercolor[fg]{subtitle}\insertsubtitle} 
+       \vskip0pt plus 0.5fill
+    {\usebeamerfont{author}\insertauthor}\\
+     \vskip0pt plus 0.25fill
+  
+  \begin{columns}[totalwidth=\textwidth, t] 
+       \begin{column}{0.65\textwidth}
+               {\usebeamerfont{institute}\insertinstitute}
+       \end{column}    
+       \begin{column}[t]{0.35\textwidth}
+       \vspace{-1.25cm}
+               \begin{center}
+                       \inserttitlegraphic
+               \end{center}
+       \end{column}
+       \end{columns} 
+ \end{flushleft}
+     {\usebeamerfont{date}\insertdate} 
+    \vskip0pt plus 0.25fill
+}
+
+\setbeamertemplate{title page}[uwa]
+
+\setbeamertemplate{headline}{\vspace{0.25cm}} 
+
+
+\mode
+<all>
diff --git a/presentation/bezier_to_font.pdf b/presentation/bezier_to_font.pdf
new file mode 100644 (file)
index 0000000..a209115
Binary files /dev/null and b/presentation/bezier_to_font.pdf differ
diff --git a/presentation/example_uwa_eng.nav b/presentation/example_uwa_eng.nav
new file mode 100644 (file)
index 0000000..fd801fd
--- /dev/null
@@ -0,0 +1,47 @@
+\beamer@endinputifotherversion {3.33pt}
+\headcommand {\slideentry {0}{0}{1}{1/1}{}{0}}
+\headcommand {\beamer@framepages {1}{1}}
+\headcommand {\slideentry {0}{0}{2}{2/2}{}{0}}
+\headcommand {\beamer@framepages {2}{2}}
+\headcommand {\sectionentry {1}{Motivation \& Background}{3}{Motivation \& Background}{0}}
+\headcommand {\beamer@sectionpages {1}{2}}
+\headcommand {\beamer@subsectionpages {1}{2}}
+\headcommand {\slideentry {1}{0}{3}{3/3}{}{0}}
+\headcommand {\beamer@framepages {3}{3}}
+\headcommand {\slideentry {1}{0}{4}{4/4}{}{0}}
+\headcommand {\beamer@framepages {4}{4}}
+\headcommand {\slideentry {1}{0}{5}{5/5}{}{0}}
+\headcommand {\beamer@framepages {5}{5}}
+\headcommand {\sectionentry {2}{Some theory}{6}{Some theory}{0}}
+\headcommand {\beamer@sectionpages {3}{5}}
+\headcommand {\beamer@subsectionpages {3}{5}}
+\headcommand {\slideentry {2}{0}{6}{6/6}{}{0}}
+\headcommand {\beamer@framepages {6}{6}}
+\headcommand {\sectionentry {3}{Field Methods}{7}{Field Methods}{0}}
+\headcommand {\beamer@sectionpages {6}{6}}
+\headcommand {\beamer@subsectionpages {6}{6}}
+\headcommand {\slideentry {3}{0}{7}{7/7}{}{0}}
+\headcommand {\beamer@framepages {7}{7}}
+\headcommand {\slideentry {3}{0}{8}{8/8}{}{0}}
+\headcommand {\beamer@framepages {8}{8}}
+\headcommand {\slideentry {3}{0}{9}{9/9}{}{0}}
+\headcommand {\beamer@framepages {9}{9}}
+\headcommand {\sectionentry {4}{Modeling}{10}{Modeling}{0}}
+\headcommand {\beamer@sectionpages {7}{9}}
+\headcommand {\beamer@subsectionpages {7}{9}}
+\headcommand {\slideentry {4}{0}{10}{10/10}{}{0}}
+\headcommand {\beamer@framepages {10}{10}}
+\headcommand {\sectionentry {5}{Modeling2}{11}{Modeling2}{0}}
+\headcommand {\beamer@sectionpages {10}{10}}
+\headcommand {\beamer@subsectionpages {10}{10}}
+\headcommand {\slideentry {5}{0}{11}{11/11}{}{0}}
+\headcommand {\beamer@framepages {11}{11}}
+\headcommand {\slideentry {5}{0}{12}{12/12}{}{0}}
+\headcommand {\beamer@framepages {12}{12}}
+\headcommand {\slideentry {5}{0}{13}{13/13}{}{0}}
+\headcommand {\beamer@framepages {13}{13}}
+\headcommand {\beamer@partpages {1}{13}}
+\headcommand {\beamer@subsectionpages {11}{13}}
+\headcommand {\beamer@sectionpages {11}{13}}
+\headcommand {\beamer@documentpages {13}}
+\headcommand {\def \inserttotalframenumber {13}}
diff --git a/presentation/example_uwa_eng.pdf b/presentation/example_uwa_eng.pdf
new file mode 100644 (file)
index 0000000..031c65c
Binary files /dev/null and b/presentation/example_uwa_eng.pdf differ
diff --git a/presentation/example_uwa_eng.snm b/presentation/example_uwa_eng.snm
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/presentation/presentation.nav b/presentation/presentation.nav
new file mode 100644 (file)
index 0000000..6d0bd76
--- /dev/null
@@ -0,0 +1,54 @@
+\beamer@endinputifotherversion {3.33pt}
+\headcommand {\slideentry {0}{0}{1}{1/1}{}{0}}
+\headcommand {\beamer@framepages {1}{1}}
+\headcommand {\slideentry {0}{0}{2}{2/2}{}{0}}
+\headcommand {\beamer@framepages {2}{2}}
+\headcommand {\slideentry {0}{0}{3}{3/3}{}{0}}
+\headcommand {\beamer@framepages {3}{3}}
+\headcommand {\sectionentry {1}{Motivation \& Background}{4}{Motivation \& Background}{0}}
+\headcommand {\beamer@sectionpages {1}{3}}
+\headcommand {\beamer@subsectionpages {1}{3}}
+\headcommand {\slideentry {1}{0}{4}{4/4}{}{0}}
+\headcommand {\beamer@framepages {4}{4}}
+\headcommand {\slideentry {1}{0}{5}{5/5}{}{0}}
+\headcommand {\beamer@framepages {5}{5}}
+\headcommand {\slideentry {1}{0}{6}{6/6}{}{0}}
+\headcommand {\beamer@framepages {6}{6}}
+\headcommand {\slideentry {1}{0}{7}{7/7}{}{0}}
+\headcommand {\beamer@framepages {7}{7}}
+\headcommand {\slideentry {1}{0}{8}{8/8}{}{0}}
+\headcommand {\beamer@framepages {8}{8}}
+\headcommand {\sectionentry {2}{Implementing a Basic SVG Viewer}{9}{Implementing a Basic SVG Viewer}{0}}
+\headcommand {\beamer@sectionpages {4}{8}}
+\headcommand {\beamer@subsectionpages {4}{8}}
+\headcommand {\slideentry {2}{0}{9}{9/9}{}{0}}
+\headcommand {\beamer@framepages {9}{9}}
+\headcommand {\slideentry {2}{0}{10}{10/10}{}{0}}
+\headcommand {\beamer@framepages {10}{10}}
+\headcommand {\sectionentry {3}{Live Demo}{11}{Live Demo}{0}}
+\headcommand {\beamer@sectionpages {9}{10}}
+\headcommand {\beamer@subsectionpages {9}{10}}
+\headcommand {\slideentry {3}{0}{11}{11/11}{}{0}}
+\headcommand {\beamer@framepages {11}{11}}
+\headcommand {\sectionentry {4}{Conclusions}{12}{Conclusions}{0}}
+\headcommand {\beamer@sectionpages {11}{11}}
+\headcommand {\beamer@subsectionpages {11}{11}}
+\headcommand {\slideentry {4}{0}{12}{12/12}{}{0}}
+\headcommand {\beamer@framepages {12}{12}}
+\headcommand {\sectionentry {5}{References}{13}{References}{0}}
+\headcommand {\beamer@sectionpages {12}{12}}
+\headcommand {\beamer@subsectionpages {12}{12}}
+\headcommand {\sectionentry {6}{Questions}{13}{Questions}{0}}
+\headcommand {\beamer@sectionpages {13}{12}}
+\headcommand {\beamer@subsectionpages {13}{12}}
+\headcommand {\slideentry {6}{0}{13}{13/13}{}{0}}
+\headcommand {\beamer@framepages {13}{13}}
+\headcommand {\slideentry {6}{0}{14}{14/14}{}{0}}
+\headcommand {\beamer@framepages {14}{14}}
+\headcommand {\slideentry {6}{0}{15}{15/15}{}{0}}
+\headcommand {\beamer@framepages {15}{15}}
+\headcommand {\beamer@partpages {1}{15}}
+\headcommand {\beamer@subsectionpages {13}{15}}
+\headcommand {\beamer@sectionpages {13}{15}}
+\headcommand {\beamer@documentpages {15}}
+\headcommand {\def \inserttotalframenumber {15}}
diff --git a/presentation/presentation.pdf b/presentation/presentation.pdf
new file mode 100644 (file)
index 0000000..1a2117f
Binary files /dev/null and b/presentation/presentation.pdf differ
diff --git a/presentation/presentation.snm b/presentation/presentation.snm
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/presentation/presentation.tex b/presentation/presentation.tex
new file mode 100644 (file)
index 0000000..9ad4c78
--- /dev/null
@@ -0,0 +1,239 @@
+\makeatletter
+\newif\ifGm@compatii
+\makeatother
+\documentclass[12pt,landscape,english]{beamer}
+\mode<presentation>
+
+\usetheme[navmenu]{uwa_eng} % Three options supported: uwa_pagen (default), navmenu, sec_navmenu, and splitfooter
+\usepackage{mathrsfs}
+\usepackage{palatino}
+\usepackage[T1]{fontenc}
+\usepackage[latin1]{inputenc}
+\usepackage{times}
+\usepackage{amsmath}
+\usepackage{amssymb}
+\usepackage{multimedia}
+\makeatletter
+
+
+% My personal preferences________________________________
+\definecolor{myframe}{rgb}{0.2,0.2,0.2}  % charcoal frametitle
+\setbeamercolor{frametitle}{fg=myframe}
+\definecolor{mystruc}{rgb}{0,0.25,0.45}  % turquoise
+\usecolortheme[named=mystruc]{structure} % Changing to blueish green instead of default midnight shade 
+\setbeamertemplate{headline}{\vspace{0.25cm}} % I personally find that the defaul position of the frametitle is too high
+\setbeamercolor{title}{fg=black} % I personally don't like the taking the structure color for the title
+
+%_________________________________
+% Titlepage info
+
+\title[short title]{Number Representations and Precision in Vector Graphics}
+\subtitle{Implementation of an Arbitrary Precision SVG Viewer} % if you have one
+\author{Sam Moore}
+% - Give the names in the same order as the appear in the paper.
+% - Use the \inst{?} command only if the authors have different
+%   affiliation.
+
+\institute[UWA]% (optional) {Universities of Western Australia} 
+{Supervisors: Tim French, Rowan Davies}
+
+\date[CSS 2009]{\today} % change the actual date
+ \titlegraphic{\includegraphics[width=3cm]{./Logos/WAMSI.png}}
+
+%% Optional stuff------------------------------------------------------------------
+
+%% Delete this, if you do not want the table of contents to pop up at
+%% the beginning of each Section or Subsection:
+%\AtBeginSubsection[] % I guess you could replace this with AtBeginSection
+  %{\begin{frame}<beamer>{Outline}
+    %\tableofcontents[currentsection,currentsubsection]
+  %\end{frame}}
+ % \AtBeginSection[] % Simplified version of what's above. % Should only be used with uwa_pagen option
+%  {\begin{frame}<beamer>{Outline}
+%    \tableofcontents[currentsection]
+%  \end{frame}}
+
+%-------------------------------------------------------------------------------------------------
+\begin{document}
+
+   {
+   \usebackgroundtemplate{\includegraphics[width=\paperwidth,height=\paperheight]{uwa_eng_title.png}} % Required to get the UWA titlepage background different. 
+   \begin{frame}[plain]
+ \titlepage
+\end{frame}
+}
+
+
+\begin{frame}[plain]
+\frametitle{Contents}
+  \tableofcontents
+  % You might wish to add the option [pausesections]
+\end{frame}
+
+\begin{frame}
+       \frametitle{Summary}
+       \begin{itemize}
+               \item Vector graphics allow scaling but not arbitrary scaling
+               \item We implemented a vector graphics viewer that does allow arbitrary scaling
+               \item ... but it will take an arbitrary amount of time
+       \end{itemize}
+\end{frame}
+
+% Start of presentation slides
+\section{Motivation \& Background}
+\begin{frame}
+\frametitle{Graphics Formats}
+\begin{itemize}
+       \item Document formats (eg: PDF and SVG) are formats for vector graphics
+       \item Vector graphics scale better than raster graphics
+\end{itemize}
+
+\centering
+\includegraphics[width=0.5\textwidth]{../figures/fox-vector.pdf}
+\includegraphics[width=0.5\textwidth]{../figures/fox-raster.png}
+
+\end{frame}
+
+
+\begin{frame} 
+\frametitle{Why is there a zoom limit?} 
+\centering
+\includegraphics{../figures/koch1.pdf}
+\end{frame}
+
+\begin{frame} 
+\frametitle{Why is there a zoom limit?} 
+\begin{itemize}
+       \item SVG, PostScript, PDF specify IEEE-754 \emph{single} floating point number representations
+       \item Range of values: $\approx 3 \times 10^{-38} \to 3 \times 10^{+38}$
+       \item Rough Floating Point Definition\footnote{IEEE-754 is more complicated}:
+       
+       \begin{align}
+               X &= m \times 2^{E}
+       \end{align}
+       \item $m$ and $E$ are encoded in a \emph{fixed length} string of bits
+       \item Floating Point $\approx$ Scientific Notation for computers
+
+\end{itemize}
+\end{frame}
+
+\begin{frame}
+\frametitle{Visualisation of Floats}
+\begin{itemize}
+       \item \small{With total length of $m$ and $E$ limited to $7$ bits (1 sign bit)}
+       \item Showing positive numbers only
+\end{itemize}
+\centering
+\includegraphics[width=0.8\textwidth]{../figures/floats.pdf}
+       
+\end{frame}
+
+\begin{frame}
+\frametitle{Floating point calculations \\ go wrong}
+\begin{itemize}
+       \item At scale of only $1\times 10^{-6}$, the fox is very sick
+\end{itemize}
+\centering
+       \includegraphics[width=0.5\textwidth]{../figures/fox-vector_highzoom1.png}
+       \begin{itemize}
+               \item Plank Length: $1.61 \times 10^{-35}$ metres $ > 3\times10^{-38}$
+               \item Size of Universe: $4.3 \times 10^{26}$ metres $ << 3 \times10^{38}$
+               \item Why isn't this good enough for $1\times 10^{-6}$
+       \end{itemize}
+\end{frame}
+
+\section{Implementing a Basic SVG Viewer}
+\begin{frame}
+\frametitle{Structure of Vector Graphics}
+\begin{itemize}
+       \item B\'{e}zier Curve (Quadratic or Cubic Parametric Polynomial)
+       \item Path of B\'{e}zier Curves $\to$ Shapes (with fill)
+       \item Shapes include font glyphs, like this $\mathscr{Z}$
+\end{itemize}
+\centering
+\includegraphics[width=0.5\textwidth]{bezier_to_font.pdf}
+
+\end{frame}
+
+\begin{frame}
+\frametitle{Structure of Vector Graphics III}
+\begin{itemize}
+       \item Rectangles show individual B\'{e}ziers forming outline of the Fox
+\end{itemize}
+\centering
+\includegraphics[width=0.5\textwidth]{../figures/fox-vector_face_with_bezbounds.png}
+\end{frame}
+
+\section{Live Demo}
+\begin{frame}
+\frametitle{Live Demo}
+\begin{itemize}
+       \item We can import standard SVGs wherever we want
+       \item If we are willing to wait long enough
+       \item \tiny{``... But, asks the scientist, what does that turtle stand on? To which the lady triumphantly answers: 'You're very clever, young man, but it's no use -- it's turtles all the way down!'.``}
+\end{itemize}
+\centering
+\includegraphics[width=\textwidth]{turtles.pdf}
+\end{frame}
+
+\section{Conclusions}
+\begin{frame}
+       \frametitle{Conclusions}
+\begin{itemize}
+       \item What we have done?
+       \begin{itemize}
+               \item Implemented a basic SVG viewer
+               \item Demonstrated how precision affects rendering vector graphics
+               \item Using GMP rationals, demonstrated the ability to render SVGs scaled to an arbitrary position in a document
+       \end{itemize}
+       \item Possible future work
+       \begin{itemize}
+               \item Implement more of the SVG standard
+               \item Trial alternative number representations
+               \item Allow for saving and loading SVGs with arbitrary precision
+       \end{itemize}
+\end{itemize}
+\end{frame}
+\section{References}
+
+\section{Questions}
+
+\begin{frame}
+\frametitle{Q: Why don't you have colour?}
+\begin{itemize}
+       \item We do!\footnote{If you are willing to wait long enough}
+       \item A complete implementation of SVG is ``future work''
+\end{itemize}
+\centering
+\includegraphics[width=0.5\textwidth]{../figures/shady-the-fox.png}
+\includegraphics[width=0.5\textwidth]{../figures/who-the-hell-needs-antialiasing-anyway.png}
+
+\end{frame}
+
+\begin{frame}
+\frametitle{Q: Why not just use doubles?}
+\begin{itemize}
+       \item Any fixed precision format will still give inexact results
+       \item But the inexact results will appear slower
+\end{itemize}
+\end{frame}
+
+\begin{frame}
+\frametitle{Q: Arbitrary precision floats?}
+\begin{itemize}
+       \item We support them as well!
+       \item Rationals are more convenient:
+       \begin{itemize}
+               \item Need to manually set precision
+               \item Some operations require infinite precision:
+               \begin{align}
+                       \frac{1}{3} &= 0.3333333333333333333333 \text{ ... } \times 10^0
+               \end{align}
+               \item How do you choose when to increase precision?
+       \end{itemize}
+       \item Could be future work
+\end{itemize}
+\end{frame}
+
+
+\end{document}
diff --git a/presentation/turtles.pdf b/presentation/turtles.pdf
new file mode 100644 (file)
index 0000000..d156bac
Binary files /dev/null and b/presentation/turtles.pdf differ
diff --git a/presentation/uwa_eng.png b/presentation/uwa_eng.png
new file mode 100644 (file)
index 0000000..db42db9
Binary files /dev/null and b/presentation/uwa_eng.png differ
diff --git a/presentation/uwa_eng_title.png b/presentation/uwa_eng_title.png
new file mode 100644 (file)
index 0000000..c26efc0
Binary files /dev/null and b/presentation/uwa_eng_title.png differ
diff --git a/test b/test
new file mode 100644 (file)
index 0000000..8235350
--- /dev/null
+++ b/test
@@ -0,0 +1,3 @@
+
+
+hi
index 6610108..c51431c 100644 (file)
Binary files a/thesis.pdf and b/thesis.pdf differ
index 3004690..ec75412 100644 (file)
@@ -75,6 +75,7 @@
 \newcommand{\that}[0]{\hat{\theta}}
 
 \newcommand{\vect}[1]{\boldsymbol{#1}} % Draw a vector
+\newcommand{\matx}[1]{\boldsymbol{#1}} % Matrix
 \newcommand{\divg}[1]{\nabla \cdot #1} % divergence
 \newcommand{\curl}[1]{\nabla \times #1} % curl
 \newcommand{\grad}[1]{\nabla #1} %gradient
         \rhead{\bfseries \thepage}
 }
 \cfoot{}
+\setlength{\pdfpxdimen}{1in/300} % Define resolution of PDF
+
+\def\changemargin#1#2{\list{}{\rightmargin#2\leftmargin#1}\item[]}
+\let\endchangemargin=\endlist 
+
+
 
 %---------------------------------------------------------
 %---------------------------------------------------------
 
 %\include{meta/Acknowledgments}   % This is who you thank
 
-
 \pagenumbering{roman}
 %\newpage
 %---------------------------------------------------------
 %---------------------------------------------------------
 %Include the chapters!
 
-\include{chapters/Introduction}
-\include{chapters/Proposal}
-\include{chapters/Background}
-\include{chapters/Progress}
-%\include{chapters/Conclusion}
-%\newpage
-%---------------------------------------------------------
+
+\input{chapters/Introduction}
+
+\input{chapters/Background}
+
+\input{chapters/Process}
+
+\input{chapters/Results}
+
+\input{chapters/Conclusion}
+
+%--------------------------------------------
 \renewcommand{\bibname}{References}
 \bibliography{references/refs}
 \bibliographystyle{unsrt}  
 {\bf Note:} We have collated most of these references at \url{http://szmoore.net/ipdf/documents/references/}
 \vspace*{6\baselineskip} % sigh
 
-\begin{figure}[H]
-       \centering
-       \includegraphics[width=0.5\textwidth]{figures/rabbit_simple.pdf}
-\end{figure}
-
-%---------------------------------------------------------
-
-% Appendices
-%\appendix
-%\include{appendices/achievements}
-%\include{proposal/proposal.tex}
-%\renewcommand\chaptername{Appendix}
-%\chapter{Appendix} 
-%\include{appendices/electron_optics}
-%\include{appendices/electron_gun_circuit}
-%\include{appendices/tcs_noise}
-%\include{appendices/data_aquisition}
-
-
-%---------------------------------------------------------
 
 \end{document}
 
diff --git a/wordcount.sh b/wordcount.sh
new file mode 100755 (executable)
index 0000000..0c63f10
--- /dev/null
@@ -0,0 +1,14 @@
+#!/bin/bash
+# Count words in thesis
+
+function doThing {
+       for i in $1/*.tex; do
+               echo -e "$2/$(basename $i) : $(detex $i | wc -w)"
+               if [ -e ${i%.*} ]; then
+                       doThing ${i%.*} ${i%.*} 
+               fi
+       done
+}
+doThing chapters chapters
+echo "Total : $(detex thesis.tex | wc -w)"
+

UCC git Repository :: git.ucc.asn.au