(*********************************************************************** Mathematica-Compatible Notebook This notebook can be used on any computer system with Mathematica 4.0, MathReader 4.0, or any compatible application. The data for the notebook starts with the line containing stars above. To get the notebook into a Mathematica-compatible application, do one of the following: * Save the data starting with the line of stars above into a file with a name ending in .nb, then open the file inside the application; * Copy the data starting with the line of stars above to the clipboard, then use the Paste menu command inside the application. Data for notebooks contains only printable 7-bit ASCII and can be sent directly in email or through ftp in text mode. Newlines can be CR, LF or CRLF (Unix, Macintosh or MS-DOS style). NOTE: If you modify the data for this notebook not in a Mathematica- compatible application, you must delete the line below containing the word CacheID, otherwise Mathematica-compatible applications may try to use invalid cache data. For more information on notebooks and Mathematica-compatible applications, contact Wolfram Research: web: http://www.wolfram.com email: info@wolfram.com phone: +1-217-398-0700 (U.S.) Notebook reader applications are available free of charge from Wolfram Research. ***********************************************************************) (*CacheID: 232*) (*NotebookFileLineBreakTest NotebookFileLineBreakTest*) (*NotebookOptionsPosition[ 127380, 2749]*) (*NotebookOutlinePosition[ 162383, 3927]*) (* CellTagsIndexPosition[ 160667, 3884]*) (*WindowFrame->Normal*) Notebook[{ Cell[CellGroupData[{ Cell["An Integral Approach to Uniform Subdivision", "Chapter", CounterAssignments->{{"Chapter", 1}}, CellTags->"CHA integral"], Cell[TextData[{ "To evaluate a particular cell, simply hit \"Shift+Enter\" with the cursor \ positioned in that cell. If ", StyleBox["Mathematica", FontSlant->"Italic"], " asks to evaluate initialization cell, click \"Yes\". See the ", StyleBox["Mathematica ", FontSlant->"Italic"], "Help browser or wolfram.com for more information on using ", StyleBox["Mathematica", FontSlant->"Italic"], "." }], "Text"], Cell["\<\ This notebook and those for the other seven chapters use a common stylesheet \ that has been imported into the notebook. This style sheet supports \ chapters, section, subsections, numbered equations, numbered figures and \ citations. A separate copy of the stylesheet can be download from the same \ page where this notebook was downloaded. \ \>", "Text"], Cell[TextData[{ StyleBox["COPYRIGHT ISSUES:", FontWeight->"Bold"], " The authors reserve all copyrights associated with this work. Any of \ the material appearing in these notebooks (such as the polyhedral meshes in \ chapter 7) can be used and modified without restriction as long as the use is \ non\[Hyphen]commercial. We simply ask that you acknowledge the authors when \ using material from these notebooks. For those readers interested in \ commercial use of the material in these notebooks, please contact \ jwarren@cs.rice.edu. " }], "Text"], Cell[CellGroupData[{ Cell["Helper functions from previous chapters", "Subsubsection"], Cell[BoxData[ \(plotCoeff[p_, opts___] := Show[Graphics[{Line[p], PointSize[0.02], RGBColor[1, 0, 0], Map[Point, p]}], Join[{opts}, {Axes \[Rule] True, Ticks \[Rule] {Automatic, Automatic}}]]\)], "Input", InitializationCell->True], Cell[TextData[{ Cell[BoxData[ \(plotCoeff3D\)]], " is the analog of ", Cell[BoxData[ \(plotCoeff\)]], " for curves. The argument ", Cell[BoxData[ \(p\)]], " is 2D grid of points in 3D." }], "Text"], Cell[BoxData[ \(plotCoeff3D[p_, plotArgs___] := Show[Graphics3D[\[IndentingNewLine]Table[ Polygon[{p\[LeftDoubleBracket]i, j\[RightDoubleBracket], p\[LeftDoubleBracket]i + 1, j\[RightDoubleBracket], p\[LeftDoubleBracket]i + 1, j + 1\[RightDoubleBracket], p\[LeftDoubleBracket]i, j + 1\[RightDoubleBracket]}], {i, \(Dimensions[ p]\)\[LeftDoubleBracket]1\[RightDoubleBracket] - 1}, {j, \(Dimensions[ p]\)\[LeftDoubleBracket]2\[RightDoubleBracket] - 1}]], Join[{plotArgs}, {Axes \[Rule] True}]]\)], "Input", InitializationCell->True] }, Closed]], Cell[CellGroupData[{ Cell["A subdivision scheme for B\[Hyphen]splines", "Section"], Cell[CellGroupData[{ Cell["B\[Hyphen]spline basis functions via repeated integration", "Subsection", CellTags->"SUBSEC bspline as convolution"], Cell[CellGroupData[{ Cell["Define of integral operator for B\[Hyphen]splines", "Subsubsection"], Cell[TextData[{ "Force ", StyleBox["Mathematica", FontSlant->"Italic"], " to reduce ", Cell[BoxData[ \(\[ScriptX] > \(-\[Infinity]\)\)]], " to ", Cell[BoxData[ \(True\)]], "." }], "Text"], Cell[BoxData[{ \(\(Unprotect[Greater];\)\), "\[IndentingNewLine]", \(\(Greater[_, \(-\[Infinity]\)] = True;\)\), "\[IndentingNewLine]", \(\(Protect[Greater];\)\)}], "Input", InitializationCell->True], Cell[TextData[{ "Define integral operator ", Cell[BoxData[ \(\[ScriptCapitalS][\[ScriptX]]\)]], " of the form. See section 4.1.1 of associated text for a discussion of \ this operators and its application to B\[Hyphen]splines" }], "Text"], Cell[BoxData[ RowBox[{GridBox[{ {\(\[ScriptCapitalS][\[ScriptX]] \[ScriptF][\[ScriptX]]\), "=", \(\[Integral]\_0\%1 \[ScriptF][\[ScriptX] - \[ScriptT]] \ \[DifferentialD]\[ScriptT]\)} }], "."}]], "Equation", CellFrameLabels->{{None, Inherited}, {Inherited, Inherited}}, GridBoxOptions->{ColumnAlignments->{Left}}], Cell[BoxData[ \(\[ScriptCapitalS][\[ScriptF]_] := Module[{\[ScriptG]}, \[IndentingNewLine]\[ScriptG][\[ScriptX]_] = \ \[Integral]\_0\%1 \[ScriptF][\[ScriptX] - \[ScriptT]] \[DifferentialD]\ \[ScriptT]; \[ScriptG]]\)], "Input", InitializationCell->True, CellTags->"EQN recursive B-spline definition"] }, Closed]], Cell[CellGroupData[{ Cell["Integral recurrence for B\[Hyphen]splines", "Subsubsection"], Cell[TextData[{ "Now, the B\[Hyphen]spline basis function of order ", Cell[BoxData[ \(m\)]], " satisfies the recurrence" }], "Text"], Cell[BoxData[ RowBox[{GridBox[{ {\(\(\[ScriptN]\^m\)[\[ScriptX]]\), "=", \(\[ScriptCapitalS][\[ScriptX]] \(\[ScriptN]\^\(m - 1\)\)[\[ScriptX]]\)} }], "."}]], "Equation", CellFrameLabels->{{None, Inherited}, {Inherited, Inherited}}, GridBoxOptions->{ColumnAlignments->{Left}}], Cell[TextData[{ "where ", Cell[BoxData[ \(\(\[ScriptN]\^0\)[\[ScriptX]] = DiracDelta[\[ScriptX]]\)]], ". Note that ", StyleBox["Mathematica", FontSlant->"Italic"], " understands how to symbolically integrate the functions ", Cell[BoxData[ \(DiracDelta\)]], " and ", Cell[BoxData[ \(UnitStep\)]], " so the result is closed form expression in terms of polynomials and ", Cell[BoxData[ \(UnitStep\)]], "." }], "Text"], Cell[CellGroupData[{ Cell[BoxData[{ \(\[ScriptN]0 = DiracDelta\), "\[IndentingNewLine]", \(\(\[ScriptN]1 = \[ScriptCapitalS][\[ScriptN]0];\)\), "\ \[IndentingNewLine]", \(\(\[ScriptN]2 = \[ScriptCapitalS][\[ScriptN]1];\)\), "\ \[IndentingNewLine]", \(\(\[ScriptN]3 = \[ScriptCapitalS][\[ScriptN]2];\)\), "\ \[IndentingNewLine]", \(\(\[ScriptN]4 = \[ScriptCapitalS][\[ScriptN]3];\)\)}], "Input", InitializationCell->True], Cell[BoxData[ \(DiracDelta\)], "Output"] }, Open ]] }, Closed]], Cell[CellGroupData[{ Cell["Examples", "Subsubsection"], Cell[CellGroupData[{ Cell[BoxData[{ \(\[ScriptN]1[\[ScriptX]]\), "\[IndentingNewLine]", \(Plot[\[ScriptN]1[\[ScriptX]], {\[ScriptX], \(-1\), 2}]\)}], "Input", CellTags->"FIG step function"], Cell[BoxData[ \(UnitStep[1 - \[ScriptX]] - UnitStep[\(-\[ScriptX]\)]\)], "Output"], Cell[BoxData[ TagBox[\(\[SkeletonIndicator] Graphics \[SkeletonIndicator]\), False, Editable->False]], "Output"] }, Open ]], Cell[CellGroupData[{ Cell[BoxData[{ \(\[ScriptN]2[\[ScriptX]]\), "\[IndentingNewLine]", \(Plot[\[ScriptN]2[\[ScriptX]], {\[ScriptX], 0, 2}, PlotRange \[Rule] All]\)}], "Input", CellTags->"FIG pwlin"], Cell[BoxData[ \(\(-2\)\ UnitStep[1 - \[ScriptX]] + 2\ \[ScriptX]\ UnitStep[1 - \[ScriptX]] + 2\ UnitStep[2 - \[ScriptX]] - \[ScriptX]\ UnitStep[ 2 - \[ScriptX]] - \[ScriptX]\ UnitStep[\(-\[ScriptX]\)]\)], "Output"], Cell[BoxData[ TagBox[\(\[SkeletonIndicator] Graphics \[SkeletonIndicator]\), False, Editable->False]], "Output"] }, Open ]], Cell["Quadratic basis functions", "Text"], Cell[CellGroupData[{ Cell[BoxData[{ \(\[ScriptN]3[\[ScriptX]]\), "\[IndentingNewLine]", \(Plot[\[ScriptN]3[\[ScriptX]], {\[ScriptX], 0, 3}, PlotRange \[Rule] All]\)}], "Input", CellTags->"FIG pwquadratic"], Cell[BoxData[ \(3\/2\ UnitStep[1 - \[ScriptX]] - 3\ \[ScriptX]\ UnitStep[1 - \[ScriptX]] + 3\/2\ \[ScriptX]\^2\ UnitStep[1 - \[ScriptX]] - 6\ UnitStep[2 - \[ScriptX]] + 6\ \[ScriptX]\ UnitStep[2 - \[ScriptX]] - 3\/2\ \[ScriptX]\^2\ UnitStep[2 - \[ScriptX]] + 9\/2\ UnitStep[3 - \[ScriptX]] - 3\ \[ScriptX]\ UnitStep[3 - \[ScriptX]] + 1\/2\ \[ScriptX]\^2\ UnitStep[3 - \[ScriptX]] - 1\/2\ \[ScriptX]\^2\ UnitStep[\(-\[ScriptX]\)]\)], "Output"], Cell[BoxData[ TagBox[\(\[SkeletonIndicator] Graphics \[SkeletonIndicator]\), False, Editable->False]], "Output"] }, Open ]], Cell["Construct B\[Hyphen]spline as linear combination of basis functions", \ "Text"], Cell[CellGroupData[{ Cell[BoxData[ \(With[{p = {1, 3, 2, 5, 6}}, Plot[Sum[p\[LeftDoubleBracket]i + 1\[RightDoubleBracket] \[ScriptN]1[ x - i], {i, 0, Length[p] - 1}], {x, \(-1\), 6}, PlotRange \[Rule] All]]\)], "Input", CellTags->"FIG pwconst function"], Cell[BoxData[ TagBox[\(\[SkeletonIndicator] Graphics \[SkeletonIndicator]\), False, Editable->False]], "Output"] }, Open ]], Cell[CellGroupData[{ Cell[BoxData[ \(With[{p = {1, 3, 2, 5, 6}}, \[IndentingNewLine]Plot[ Sum[p\[LeftDoubleBracket]i + 1\[RightDoubleBracket] \[ScriptN]4[ x - i], {i, 0, Length[p] - 1}], {x, 0, 8}, PlotRange \[Rule] All]]\)], "Input", CellTags->"FIG cubic 13256"], Cell[BoxData[ TagBox[\(\[SkeletonIndicator] Graphics \[SkeletonIndicator]\), False, Editable->False]], "Output"] }, Open ]] }, Closed]] }, Open ]], Cell[CellGroupData[{ Cell["A refinement relation for B\[Hyphen]spline basis functions", \ "Subsection", CellTags->"SUBSEC subdivision for Bsplines"], Cell[CellGroupData[{ Cell[BoxData[ \(\[ScriptN]1[\[ScriptX]] \[Equal] \[ScriptN]1[ 2 \[ScriptX]] + \[ScriptN]1[2 \[ScriptX] - 1] // FullSimplify\)], "Input", CellTags->"EQN subdivide N"], Cell[BoxData[ \(UnitStep[1 - \[ScriptX]] == UnitStep[2 - 2\ \[ScriptX]]\)], "Output"] }, Open ]], Cell[CellGroupData[{ Cell[BoxData[ \(Plot[{\[ScriptN]1[2 \[ScriptX]], \[ScriptN]1[ 2 \[ScriptX] - 1]}, {\[ScriptX], \(-1\), 2}]\)], "Input", CellTags->"FIG split N[x]"], Cell[BoxData[ TagBox[\(\[SkeletonIndicator] Graphics \[SkeletonIndicator]\), False, Editable->False]], "Output"] }, Open ]] }, Closed]], Cell[CellGroupData[{ Cell["The associated subdivision scheme", "Subsection"], Cell[CellGroupData[{ Cell[TextData[{ StyleBox["Mathematica", FontSlant->"Italic"], " functions for manipulating generating functions" }], "Subsubsection"], Cell[TextData[{ Cell[BoxData[ \(makeGenFun\)]], " constructs a generating function with coefficients chosen from ", Cell[BoxData[ \(coeff\)]], " starting at powers ", Cell[BoxData[ \(x\^\(-a\)\)]], "." }], "Text"], Cell[BoxData[ \(makeGenFun[coeff_, a_, x_] := Sum[coeff\[LeftDoubleBracket]i\[RightDoubleBracket] x\^\(i - 1 + a\), {i, 1, Length[coeff]}]\)], "Input", InitializationCell->True], Cell[TextData[{ Cell[BoxData[ \(subdivide\)]], " takes a mask ", Cell[BoxData[ \(s[x]\)]], " and applies it to a generating function ", Cell[BoxData[ \(p[x]\)]], " ", Cell[BoxData[ \(k\)]], " times." }], "Text"], Cell[BoxData[ \(subdivide[s_, p_, k_] := If[k \[Equal] 0, p, subdivide[s, s*\((p /. {x \[Rule] x\^2})\), k - 1]]\)], "Input", InitializationCell->True], Cell[TextData[{ Cell[BoxData[ \(makeCoeff\)]], " takes a generating function ", Cell[BoxData[ \(genFun\)]], " and strips off the coefficients from powers ", Cell[BoxData[ \(x\^\(\(2\^k\) min\)\)]], " to ", Cell[BoxData[ \(x\^\(\(2\^k\) max\)\)]], ". These corresponds to coefficients on the interval ", Cell[BoxData[ \(\([min, max]\)\)]], " after ", Cell[BoxData[ \(k\)]], " rounds of subdivision." }], "Text"], Cell[BoxData[ \(makeCoeff[genFun_, {min_, max_}, k_, x_] := With[{expFun = Together[genFun]}, \n\t Table[Coefficient[expFun, x, i], {i, \(2\^k\) min, \(2\^k\) max}]]\)], "Input", InitializationCell->True], Cell[TextData[{ Cell[BoxData[ \(plotGen\)]], " takes a generating function and plots the results of ", Cell[BoxData[ \(makeCoeff\)]], " using the correct ", Cell[BoxData[ \(\[ScriptX]\)]], " coordinates" }], "Text"], Cell[BoxData[ \(plotGen[genFun_, {min_, max_}, k_, x_, opts___] := With[{expFun = Together[genFun]}, \n\t plotCoeff[ Table[{i\/2\^k, Coefficient[expFun, x, i]}, {i, \(2\^k\) min, \(2\^k\) max}], opts]]\)], "Input", InitializationCell->True] }, Closed]], Cell[CellGroupData[{ Cell["Examples", "Subsubsection"], Cell[TextData[{ "Linear subdivision of the functional example ", Cell[BoxData[ \(p = {1, 3, 2, 5, 6}\)]], "." }], "Text"], Cell[CellGroupData[{ Cell[BoxData[ \(With[{p = {1, 3, 2, 5, 6}}, \[IndentingNewLine]Show[ GraphicsArray[\[IndentingNewLine]{{plotGen[ subdivide[\(1\/2\) \((1 + x)\)\^2, makeGenFun[c0, 0, x], 0], {\(-1\), 7}, 0, x], plotGen[subdivide[\(1\/2\) \((1 + x)\)\^2, makeGenFun[c0, 0, x], 1], {\(-1\), 7}, 1, x]}, {plotGen[ subdivide[\(1\/2\) \((1 + x)\)\^2, makeGenFun[c0, 0, x], 2], {\(-1\), 7}, 2, x], plotGen[subdivide[\(1\/2\) \((1 + x)\)\^2, makeGenFun[c0, 0, x], 3], {\(-1\), 7}, 3, x]}}]]]\)], "Input", CellTags->"FIG genfun subdivision"], Cell[BoxData[ TagBox[\(\[SkeletonIndicator] GraphicsArray \[SkeletonIndicator]\), False, Editable->False]], "Output"] }, Open ]], Cell[TextData[{ "Cubic subdivision of the functional example ", Cell[BoxData[ \(p = {1, 3, 2, 5, 6}\)]], "." }], "Text"], Cell[CellGroupData[{ Cell[BoxData[ \(With[{p = {1, 3, 2, 5, 6}}, \[IndentingNewLine]Show[ GraphicsArray[\[IndentingNewLine]{{plotGen[ subdivide[\(1\/8\) \((1 + x)\)\^4, makeGenFun[c0, 0, x], 0], {\(-1\), 9}, 0, x], plotGen[subdivide[\(1\/8\) \((1 + x)\)\^4, makeGenFun[c0, 0, x], 1], {\(-1\), 9}, 1, x]}, {plotGen[ subdivide[\(1\/8\) \((1 + x)\)\^4, makeGenFun[c0, 0, x], 2], {\(-1\), 9}, 2, x], plotGen[subdivide[\(1\/8\) \((1 + x)\)\^4, makeGenFun[c0, 0, x], 3], {\(-1\), 9}, 3, x]}}]]]\)], "Input", CellTags->"FIG cubic Bspline example"], Cell[BoxData[ TagBox[\(\[SkeletonIndicator] GraphicsArray \[SkeletonIndicator]\), False, Editable->False]], "Output"] }, Open ]], Cell["\<\ One round of cubic subdivision as four rounds of midpoint averaging.\ \>", "Text"], Cell[CellGroupData[{ Cell[BoxData[ \(With[{p = {1, 3, 2, 5, 6}}, \[IndentingNewLine]Show[ GraphicsArray[{\[IndentingNewLine]{plotGen[ makeGenFun[p, 0, x], {\(-1\), 7}, 0, x], \[IndentingNewLine]plotGen[ 2 makeGenFun[p, 0, x] /. {x \[Rule] x\^2}, {\(-1\), 7}, 1, x]}, \[IndentingNewLine]{plotGen[\((\(1 + x\)\/2)\) \((2 makeGenFun[p, 0, x] /. {x \[Rule] x\^2})\), {\(-1\), 7}, 1, x], \[IndentingNewLine]plotGen[\(\((\(1 + \ x\)\/2)\)\^2\) \((2 makeGenFun[p, 0, x] /. {x \[Rule] x\^2})\), {\(-1\), 7}, 1, x]}, \[IndentingNewLine]{plotGen[\(\((\(1 + x\)\/2)\)\^3\) \ \((2 makeGenFun[p, 0, x] /. {x \[Rule] x\^2})\), {\(-1\), 7}, 1, x], \[IndentingNewLine]plotGen[\(\((\(1 + x\)\/2)\)\^4\) \((2 makeGenFun[p, 0, x] /. {x \[Rule] x\^2})\), {\(-1\), 7}, 1, x]}}]]]\)], "Input", CellTags->"FIG lane riesenfeld"], Cell[BoxData[ TagBox[\(\[SkeletonIndicator] GraphicsArray \[SkeletonIndicator]\), False, Editable->False]], "Output"] }, Open ]] }, Closed]] }, Open ]] }, Open ]], Cell[CellGroupData[{ Cell["A subdivision scheme for box splines", "Section", CellTags->"SEC box splines"], Cell[CellGroupData[{ Cell["B\[Hyphen]spline basis functions as cross\[Hyphen]sectional volumes", \ "Subsection", CellTags->"SUBSEC B-splines as cross-sectional volumes"], Cell[CellGroupData[{ Cell["Figure for cross sectional area of square", "Subsubsection"], Cell["\<\ Example of linear and quadratic B\[Hyphen]spline basis functions as the cross\ \[Hyphen]sectional volume of a square and a cube.\ \>", "Text"], Cell[CellGroupData[{ Cell[BoxData[ \(Show[ GraphicsArray[\[IndentingNewLine]{Show[\[IndentingNewLine]Graphics[ Line[{{0, 4}, {1, 5}, {2, 4}, {1, 3}, {0, 4}}]], \[IndentingNewLine]Plot[ 2 \[ScriptN]2[\[ScriptX]], {\[ScriptX], \(-2\), 4}, PlotRange \[Rule] All], AspectRatio \[Rule] Automatic, PlotRange \[Rule] All, Axes \[Rule] {True, False}], \[IndentingNewLine]Show[ Plot[2 \[ScriptN]3[\[ScriptX]], {\[ScriptX], \(-2\), 5}, PlotRange \[Rule] All], \[IndentingNewLine]Graphics[{\[IndentingNewLine]Line[{{\ 0, 4}, {1, 5}, {2, 5}, {3, 4}, {2, 3}, {1, 3}, {0, 4}}], \[IndentingNewLine]Line[{{1, 5}, {2, 4}}], \[IndentingNewLine]Line[{{1, 3}, {2, 4}}], \[IndentingNewLine]Line[{{2, 4}, {3, 4}}], \[IndentingNewLine]{Dashing[{0.02, 0.02}], Line[{{0, 4}, {1, 4}}], \[IndentingNewLine]Line[{{1, 4}, {2, 5}}], \[IndentingNewLine]Line[{{1, 4}, {2, 3}}]}}], AspectRatio \[Rule] Automatic, PlotRange \[Rule] All, Axes \[Rule] {True, False}]}]]\)], "Input",\ CellTags->"FIG cross-sectional volume"], Cell[BoxData[ TagBox[\(\[SkeletonIndicator] GraphicsArray \[SkeletonIndicator]\), False, Editable->False]], "Output"] }, Open ]], Cell["\<\ Subdivision of linear and quadratic B\[Hyphen]spline basis functions as the \ cross\[Hyphen]sectional volume of a subdivided square and cube.\ \>", "Text"], Cell[CellGroupData[{ Cell[BoxData[ \(Show[ GraphicsArray[{\[IndentingNewLine]Show[\[IndentingNewLine]Graphics[{\ Line[{{0, 4}, {1, 5}, {2, 4}, {1, 3}, {0, 4}}], Line[{{0.5, 4.5}, {1.5, 3.5}}], Line[{{0.5, 3.5}, {1.5, 4.5}}]}], \[IndentingNewLine]Plot[{\[ScriptN]2[ 2 \[ScriptX]], 2 \[ScriptN]2[2 \[ScriptX] - 1], \[ScriptN]2[ 2 \[ScriptX] - 2]}, {\[ScriptX], \(-2\), 4}, PlotRange \[Rule] All], \[IndentingNewLine]AspectRatio \[Rule] Automatic, PlotRange \[Rule] All, Axes \[Rule] {True, False}], \[IndentingNewLine]Show[\[IndentingNewLine]Plot[{\(1\ \/2\) \[ScriptN]3[2 \[ScriptX]], \(3\/2\) \[ScriptN]3[ 2 \[ScriptX] - 1], \(3\/2\) \[ScriptN]3[ 2 \[ScriptX] - 2], \(1\/2\) \[ScriptN]3[ 2 \[ScriptX] - 3]}, {\[ScriptX], \(-2\), 5}, PlotRange \[Rule] All], \[IndentingNewLine]Graphics[{\[IndentingNewLine]Line[{{\ 0, 4}, {1, 5}, {2, 5}, {3, 4}, {2, 3}, {1, 3}, {0, 4}}], \[IndentingNewLine]Line[{{1, 5}, {2, 4}}], \[IndentingNewLine]Line[{{1, 3}, {2, 4}}], \[IndentingNewLine]Line[{{2, 4}, {3, 4}}], \[IndentingNewLine]Line[{{0.5, 4.5}, {1.5, 3.5}}], \[IndentingNewLine]Line[{{0.5, 3.5}, {1.5, 4.5}}], \[IndentingNewLine]Line[{{1.5, 5}, {2.5, 4}}], \[IndentingNewLine]Line[{{1.5, 4.5}, {2.5, 4.5}}], \[IndentingNewLine]Line[{{1.5, 3.5}, {2.5, 3.5}}], \[IndentingNewLine]Line[{{1.5, 3}, {2.5, 4}}]}], \[IndentingNewLine]AspectRatio \[Rule] Automatic, PlotRange \[Rule] All, Axes \[Rule] {True, False}]}]]\)], "Input", CellTags->"FIG cross-sectional subdivision"], Cell[BoxData[ TagBox[\(\[SkeletonIndicator] GraphicsArray \[SkeletonIndicator]\), False, Editable->False]], "Output"] }, Open ]] }, Closed]] }, Open ]], Cell[CellGroupData[{ Cell["Box spline scaling functions as cross\[Hyphen]sectional volumes", \ "Subsection"], Cell["\<\ Box spline scaling functions can be expressed as the cross\[Hyphen]sectional \ volume of a hypercube in a similar manner.\ \>", "Text"] }, Closed]], Cell[CellGroupData[{ Cell["Box spline basis functions via repeated integration", "Subsection"], Cell[TextData[{ "Unfortunately, ", StyleBox["Mathematica", FontSlant->"Italic"], " can't handle symbolic integration of ", Cell[BoxData[ \(UnitStep[\[ScriptX], \[ScriptY]]\)]], " in arbitrary directions. So you'll need to use the material in section ", CounterBox["Chapter"], ".", CounterBox["Section", "SEC Piecewise polynomial"], " to construct an analytic representation for box splines." }], "Text"] }, Closed]], Cell[CellGroupData[{ Cell["Subdivision for box splines", "Subsection"], Cell[CellGroupData[{ Cell["Tools for bivariate subdivision via generating functions", \ "Subsubsection"], Cell[TextData[{ Cell[BoxData[ \(makeGenFun\)]], " takes a 2D array of coefficients and builds a generating function whose \ smallest power is ", Cell[BoxData[ \(\(x\^a\) y\^b\)]] }], "Text"], Cell[BoxData[ \(makeGenFun[coeff_, {a_, b_}, x_, y_] := Sum[coeff\[LeftDoubleBracket]i, j\[RightDoubleBracket] \(x\^\(i - 1 + a\)\) y\^\(j - 1 + b\), {i, \(Dimensions[ coeff]\)\[LeftDoubleBracket]1\[RightDoubleBracket]}, {j, \ \(Dimensions[coeff]\)\[LeftDoubleBracket]2\[RightDoubleBracket]}]\)], "Input",\ InitializationCell->True], Cell[TextData[{ Cell[BoxData[ \(subdivie2D\)]], " takes a 2D mask ", Cell[BoxData[ \(s[x, y]\)]], " and applies it to a 2D generating function ", Cell[BoxData[ \(p[x, y]\)]], " k times." }], "Text"], Cell[BoxData[ \(subdivide2D[s_, p_, k_] := If[k \[Equal] 0, p, subdivide2D[s, s*\((p /. {x \[Rule] x\^2, y \[Rule] y\^2})\), k - 1]]\)], "Input", InitializationCell->True], Cell[TextData[{ Cell[BoxData[ \(makdeCoeff\)]], " extracts a 2D list of coefficients from ", Cell[BoxData[ \(genFun\)]], " on the grid ", Cell[BoxData[ \(\(1\/2\^k\) \[DoubleStruckCapitalZ]\^2\)]], " using the interval ", Cell[BoxData[ \(\([minX, maxX]\)\[Times]\([minY, maxY]\)\)]], "." }], "Text"], Cell[BoxData[ \(makeCoeff[genFun_, {{minX_, maxX_}, {minY_, maxY_}}, k_, x_, y_] := With[{expFun = Expand[genFun]}, \n\t Table[With[{rowY = Table[Coefficient[expFun, y, j], {j, \(2\^k\) minY, \(2\^k\) maxY}]}, \n\t\t\t\tTable[ Coefficient[rowY, x, i], {i, \(2\^k\) minX, \(2\^k\) maxX}]]]]\)], "Input", InitializationCell->True], Cell[TextData[{ Cell[BoxData[ \(plotGen2D\)]], " plots a 2D list of coefficients from ", Cell[BoxData[ \(genFun\)]], " on the grid ", Cell[BoxData[ \(\(1\/2\^k\) \[DoubleStruckCapitalZ]\^2\)]], " using the interval ", Cell[BoxData[ \(\([minX, maxX]\)\[Times]\([minY, maxY]\)\)]], "." }], "Text"], Cell[BoxData[ \(plotGen2D[genFun_, {{minX_, maxX_}, {minY_, maxY_}}, k_, x_, y_, opts___] := Module[{expFun = Expand[genFun], rowY}, \[IndentingNewLine]plotCoeff3D[ Table[rowY = Coefficient[expFun, y, j]; \[IndentingNewLine]Table[{i\/2\^k, j\/2\^k, Coefficient[rowY, x, i]}, {i, \(2\^k\) minX, \(2\^k\) maxX}], {j, \(2\^k\) minY, \(2\^k\) maxY}], opts]]\)], "Input", InitializationCell->True] }, Closed]], Cell[CellGroupData[{ Cell["Tools for constructing box spline masks", "Subsubsection"], Cell[TextData[{ "Construct the subdivision mask ", Cell[BoxData[ \(\(s\^\[CapitalSigma]\)[x, y]\)]], " for a box spline with corresponding set of direction vectors ", Cell[BoxData[ \(\[CapitalSigma]\)]], "." }], "Text"], Cell[BoxData[ \(makeBoxMask[\[CapitalSigma]_, x_, y_] := 4 \(\[Product]\+\(i = 1\)\%\(Length[\[CapitalSigma]]\)\(1 + x\^\ \[CapitalSigma]\[LeftDoubleBracket]i, 1\[RightDoubleBracket]\ y\^\ \[CapitalSigma]\[LeftDoubleBracket]i, 2\[RightDoubleBracket]\)\/2\)\)], \ "Input", InitializationCell->True], Cell[CellGroupData[{ Cell[BoxData[ RowBox[{"s", "=", RowBox[{"makeBoxMask", "[", RowBox[{ RowBox[{"(", "\[NoBreak]", GridBox[{ {"1", "0"}, {"1", "0"}, {"0", "1"}, {"0", "1"} }], "\[NoBreak]", ")"}], ",", "x", ",", "y"}], "]"}]}]], "Input"], Cell[BoxData[ \(1\/4\ \((1 + x)\)\^2\ \((1 + y)\)\^2\)], "Output"] }, Open ]] }, Closed]] }, Open ]], Cell[CellGroupData[{ Cell["Examples", "Subsection", CellTags->"SUBSEC box spline examples"], Cell[CellGroupData[{ Cell["Three direction linear splines", "Subsubsection"], Cell[TextData[{ "Construct subdivision mask for linear three direction box splines, i.e. ", Cell[BoxData[ RowBox[{"\[CapitalSigma]", "=", RowBox[{"(", "\[NoBreak]", GridBox[{ {"1", "0"}, {"0", "1"}, {"1", "1"} }], "\[NoBreak]", ")"}]}]]], "." }], "Text"], Cell[CellGroupData[{ Cell[BoxData[ RowBox[{"s", "=", RowBox[{"makeBoxMask", "[", RowBox[{ RowBox[{"(", "\[NoBreak]", GridBox[{ {"1", "0"}, {"0", "1"}, {"1", "1"} }], "\[NoBreak]", ")"}], ",", "x", ",", "y"}], "]"}]}]], "Input", CellTags->"three dir lin spline"], Cell[BoxData[ \(1\/2\ \((1 + x)\)\ \((1 + y)\)\ \((1 + x\ y)\)\)], "Output"] }, Open ]], Cell["2D plot of subdivision mask", "Text"], Cell[CellGroupData[{ Cell[BoxData[ \(CoefficientList[s, {x, y}] // MatrixForm\)], "Input", CellTags->"three dir lin spline mask"], Cell[BoxData[ TagBox[ RowBox[{"(", "\[NoBreak]", GridBox[{ {\(1\/2\), \(1\/2\), "0"}, {\(1\/2\), "1", \(1\/2\)}, {"0", \(1\/2\), \(1\/2\)} }], "\[NoBreak]", ")"}], Function[ BoxForm`e$, MatrixForm[ BoxForm`e$]]]], "Output"] }, Open ]], Cell["Plot of three rounds of subdivision for basis function", "Text"], Cell[CellGroupData[{ Cell[BoxData[ \(Show[ GraphicsArray[\[IndentingNewLine]{plotGen2D[ subdivide2D[s, 1, 1], {{\(-1\), 3}, {\(-1\), 3}}, 1, x, y, PlotRange \[Rule] All, BoxRatios \[Rule] {1, 1, 1\/2}], \[IndentingNewLine]plotGen2D[ subdivide2D[s, 1, 2], {{\(-1\), 3}, {\(-1\), 3}}, 2, x, y, PlotRange \[Rule] All, BoxRatios \[Rule] {1, 1, 1\/2}], \[IndentingNewLine]plotGen2D[ subdivide2D[s, 1, 3], {{\(-1\), 3}, {\(-1\), 3}}, 3, x, y, PlotRange \[Rule] All, BoxRatios \[Rule] {1, 1, 1\/2}]}]]\)], "Input", CellTags->"FIG linear box"], Cell[BoxData[ TagBox[\(\[SkeletonIndicator] GraphicsArray \[SkeletonIndicator]\), False, Editable->False]], "Output"] }, Open ]] }, Closed]], Cell[CellGroupData[{ Cell["Four direction quadratic box splines", "Subsubsection"], Cell[TextData[{ "Construct subdivision mask for four direction quadratic box splines with \ ", Cell[BoxData[ RowBox[{"\[CapitalSigma]", "=", RowBox[{"(", "\[NoBreak]", GridBox[{ {"1", "0"}, {"0", "1"}, {"1", "1"}, {\(-1\), "1"} }], "\[NoBreak]", ")"}]}]]], ". " }], "Text"], Cell[CellGroupData[{ Cell[BoxData[ RowBox[{"s", "=", RowBox[{"makeBoxMask", "[", RowBox[{ RowBox[{"(", "\[NoBreak]", GridBox[{ {"1", "0"}, {"0", "1"}, {"1", "1"}, {\(-1\), "1"} }], "\[NoBreak]", ")"}], ",", "x", ",", "y"}], "]"}]}]], "Input", CellTags->"four dir quad spline"], Cell[BoxData[ \(1\/4\ \((1 + x)\)\ \((1 + y)\)\ \((1 + y\/x)\)\ \((1 + x\ y)\)\)], "Output"] }, Open ]], Cell["Plot coefficients of mask as 2D array.", "Text"], Cell[CellGroupData[{ Cell[BoxData[ \(CoefficientList[x*s, {x, y}] // MatrixForm\)], "Input", CellTags->"four dir quad spline mask"], Cell[BoxData[ TagBox[ RowBox[{"(", "\[NoBreak]", GridBox[{ {"0", \(1\/4\), \(1\/4\), "0"}, {\(1\/4\), \(1\/2\), \(1\/2\), \(1\/4\)}, {\(1\/4\), \(1\/2\), \(1\/2\), \(1\/4\)}, {"0", \(1\/4\), \(1\/4\), "0"} }], "\[NoBreak]", ")"}], Function[ BoxForm`e$, MatrixForm[ BoxForm`e$]]]], "Output"] }, Open ]], Cell["Plot of three rounds of subdivision for basis function", "Text"], Cell[CellGroupData[{ Cell[BoxData[ \(Show[ GraphicsArray[{\[IndentingNewLine]plotGen2D[ subdivide2D[s, 1, 1], {{\(-2\), 3}, {\(-1\), 4}}, 1, x, y, PlotRange \[Rule] All, BoxRatios \[Rule] {1, 1, 1\/2}], \[IndentingNewLine]plotGen2D[ subdivide2D[s, 1, 2], {{\(-2\), 3}, {\(-1\), 4}}, 2, x, y, PlotRange \[Rule] All, BoxRatios \[Rule] {1, 1, 1\/2}], \[IndentingNewLine]plotGen2D[ subdivide2D[s, 1, 3], {{\(-2\), 3}, {\(-1\), 4}}, 3, x, y, PlotRange \[Rule] All, BoxRatios \[Rule] {1, 1, 1\/2}]}]]\)], "Input", CellTags->"FIG box spline 10 01 11 m11"], Cell[BoxData[ TagBox[\(\[SkeletonIndicator] GraphicsArray \[SkeletonIndicator]\), False, Editable->False]], "Output"] }, Open ]] }, Closed]], Cell[CellGroupData[{ Cell["Three direction quartic box splines", "Subsubsection"], Cell[TextData[{ "Construct subdivision mask ", Cell[BoxData[ \(\(s\^\[CapitalSigma]\)[x, y]\)]], " for three direction, quartic box spline with direction vectors ", Cell[BoxData[ RowBox[{"\[CapitalSigma]", "=", RowBox[{"(", "\[NoBreak]", GridBox[{ {"1", "0"}, {"1", "0"}, {"0", "1"}, {"0", "1"}, {"1", "1"}, {"1", "1"} }], "\[NoBreak]", ")"}]}]]], "." }], "Text"], Cell[CellGroupData[{ Cell[BoxData[ RowBox[{"s", "=", RowBox[{"makeBoxMask", "[", RowBox[{ RowBox[{"(", "\[NoBreak]", GridBox[{ {"1", "0"}, {"1", "0"}, {"0", "1"}, {"0", "1"}, {"1", "1"}, {"1", "1"} }], "\[NoBreak]", ")"}], ",", "x", ",", "y"}], "]"}]}]], "Input", CellTags->"three dir quart spline"], Cell[BoxData[ \(1\/16\ \((1 + x)\)\^2\ \((1 + y)\)\^2\ \((1 + x\ y)\)\^2\)], "Output"] }, Open ]], Cell["Plot coefficients of subdivision mask as 2D array", "Text"], Cell[CellGroupData[{ Cell[BoxData[ \(CoefficientList[\ s, {x, y}] // MatrixForm\)], "Input", CellTags->"three dir quart spline mask"], Cell[BoxData[ TagBox[ RowBox[{"(", "\[NoBreak]", GridBox[{ {\(1\/16\), \(1\/8\), \(1\/16\), "0", "0"}, {\(1\/8\), \(3\/8\), \(3\/8\), \(1\/8\), "0"}, {\(1\/16\), \(3\/8\), \(5\/8\), \(3\/8\), \(1\/16\)}, {"0", \(1\/8\), \(3\/8\), \(3\/8\), \(1\/8\)}, {"0", "0", \(1\/16\), \(1\/8\), \(1\/16\)} }], "\[NoBreak]", ")"}], (MatrixForm[ #]&)]], "Output"] }, Open ]], Cell["\<\ Plot three rounds of subdivision with three direction quartic mask\ \>", "Text"], Cell[CellGroupData[{ Cell[BoxData[ \(Show[ GraphicsArray[{\[IndentingNewLine]plotGen2D[ subdivide2D[s, 1, 1], {{\(-1\), 5}, {\(-1\), 5}}, 1, x, y, PlotRange \[Rule] All, BoxRatios \[Rule] {1, 1, 1\/2}], \[IndentingNewLine]plotGen2D[ subdivide2D[s, 1, 2], {{\(-1\), 5}, {\(-1\), 5}}, 2, x, y, PlotRange \[Rule] All, BoxRatios \[Rule] {1, 1, 1\/2}], \[IndentingNewLine]plotGen2D[ subdivide2D[s, 1, 3], {{\(-1\), 5}, {\(-1\), 5}}, 3, x, y, PlotRange \[Rule] All, BoxRatios \[Rule] {1, 1, 1\/2}]}]]\)], "Input", CellTags->"FIG three dir quartic"], Cell[BoxData[ TagBox[\(\[SkeletonIndicator] GraphicsArray \[SkeletonIndicator]\), False, Editable->False]], "Output"] }, Open ]], Cell["\<\ Construct a parametric example of the three direction quartic box spline\ \>", "Text"], Cell[CellGroupData[{ Cell[BoxData[ \(With[{p = makeGenFun[ Table[{Cos[t]\ \((3 + Cos[u])\), Sin[t]\ \((3 + Cos[u])\), Sin[u]}, {t, \(-0.4\), 0.9 Pi, 0.2}, {u, \(-0.8\), 2.8 Pi, Pi\/4}], {0, 0}, x, y]}, \[IndentingNewLine]Show[ GraphicsArray[{\[IndentingNewLine]plotCoeff3D[ makeCoeff[p, {{2, 8}, {2, 10}}, 0, x, y], PlotRange \[Rule] All, BoxRatios \[Rule] {1, 1, 1}], \[IndentingNewLine]plotCoeff3D[ makeCoeff[subdivide2D[s, p, 1], {{2, 8}, {2, 10}}, 1, x, y], PlotRange \[Rule] All, BoxRatios \[Rule] {1, 1, 1}], \[IndentingNewLine]plotCoeff3D[ makeCoeff[subdivide2D[s, p, 2], {{2, 8}, {2, 10}}, 2, x, y], PlotRange \[Rule] All, BoxRatios \[Rule] {1, 1, 1}]}]]]\)], "Input", CellTags->"FIG parametric"], Cell[BoxData[ TagBox[\(\[SkeletonIndicator] GraphicsArray \[SkeletonIndicator]\), False, Editable->False]], "Output"] }, Open ]] }, Closed]] }, Open ]] }, Open ]], Cell[CellGroupData[{ Cell["B\[Hyphen]splines and box splines as piecewise polynomials ", "Section", CellTags->"SEC Piecewise polynomial"], Cell[CellGroupData[{ Cell["B\[Hyphen]splines as combinations of truncated powers", "Subsection", CellTags->"SUBSEC bspline trunc powers"], Cell[BoxData[{ \(\(Unprotect[Greater];\)\), "\[IndentingNewLine]", \(\(Greater[_, \(-\[Infinity]\)] = True;\)\), "\[IndentingNewLine]", \(\(Protect[Greater];\)\)}], "Input", InitializationCell->True], Cell[CellGroupData[{ Cell["Definition of truncated powers using an integral recurrence", \ "Subsubsection"], Cell[TextData[{ "Definition of truncated powers through repeated integration, here ", Cell[BoxData[ \(\[ScriptCapitalI]\)]], " is the integral operator of chapter four." }], "Text"], Cell[BoxData[ \(\[ScriptCapitalI][f_] := Module[{g}, \[IndentingNewLine]g[ x_] = \[Integral]\_0\%\[Infinity] f[x - t] \[DifferentialD]t; g]\)], "Input", InitializationCell->True], Cell["Construct low order truncated powers", "Text"], Cell[CellGroupData[{ Cell[BoxData[{ \(\[ScriptC]0 = DiracDelta\), "\[IndentingNewLine]", \(\(\[ScriptC]1 = \[ScriptCapitalI][\[ScriptC]0];\)\), "\n", \(\(\[ScriptC]2 = \[ScriptCapitalI][\[ScriptC]1];\)\), "\n", \(\(\[ScriptC]3 = \[ScriptCapitalI][\[ScriptC]2];\)\), "\n", \(\(\[ScriptC]4 = \[ScriptCapitalI][\[ScriptC]3];\)\)}], "Input", InitializationCell->True], Cell[BoxData[ \(General::"spell1" \(\(:\)\(\ \)\) "Possible spelling error: new symbol name \"\!\(\[ScriptC]0\)\" is \ similar to existing symbol \"\!\(\[ScriptN]0\)\"."\)], "Message"], Cell[BoxData[ \(DiracDelta\)], "Output"], Cell[BoxData[ \(General::"spell1" \(\(:\)\(\ \)\) "Possible spelling error: new symbol name \"\!\(\[ScriptC]1\)\" is \ similar to existing symbol \"\!\(\[ScriptN]1\)\"."\)], "Message"], Cell[BoxData[ \(General::"spell1" \(\(:\)\(\ \)\) "Possible spelling error: new symbol name \"\!\(\[ScriptC]2\)\" is \ similar to existing symbol \"\!\(\[ScriptN]2\)\"."\)], "Message"], Cell[BoxData[ \(General::"spell1" \(\(:\)\(\ \)\) "Possible spelling error: new symbol name \"\!\(\[ScriptC]3\)\" is \ similar to existing symbol \"\!\(\[ScriptN]3\)\"."\)], "Message"], Cell[BoxData[ \(General::"spell1" \(\(:\)\(\ \)\) "Possible spelling error: new symbol name \"\!\(\[ScriptC]4\)\" is \ similar to existing symbol \"\!\(\[ScriptN]4\)\"."\)], "Message"] }, Open ]], Cell[CellGroupData[{ Cell[BoxData[{ \(\[ScriptC]1[\[ScriptX]]\), "\[IndentingNewLine]", \(\[ScriptC]2[\[ScriptX]]\), "\[IndentingNewLine]", \(\[ScriptC]3[\[ScriptX]]\), "\[IndentingNewLine]", \(\[ScriptC]4[\[ScriptX]]\)}], "Input"], Cell[BoxData[ \(UnitStep[\[ScriptX]]\)], "Output"], Cell[BoxData[ \(\[ScriptX]\ UnitStep[\[ScriptX]]\)], "Output"], Cell[BoxData[ \(1\/2\ \[ScriptX]\^2\ UnitStep[\[ScriptX]]\)], "Output"], Cell[BoxData[ \(1\/6\ \[ScriptX]\^3\ UnitStep[\[ScriptX]]\)], "Output"] }, Open ]], Cell["Plot truncated powers of low degree", "Text"], Cell[CellGroupData[{ Cell[BoxData[ \(Show[ GraphicsArray[{{Plot[\[ScriptC]1[\[ScriptX]], {\[ScriptX], \(-1\), 2}, PlotRange \[Rule] All], \[IndentingNewLine]Plot[\[ScriptC]2[\[ScriptX]], {\ \[ScriptX], \(-1\), 2}, PlotRange \[Rule] All]}, \[IndentingNewLine]{Plot[\[ScriptC]3[\[ScriptX]], {\ \[ScriptX], \(-1\), 2}, PlotRange \[Rule] All], \[IndentingNewLine]Plot[\[ScriptC]4[\[ScriptX]], {\ \[ScriptX], \(-1\), 2}, PlotRange \[Rule] All]}}]]\)], "Input", CellTags->"FIG truncated powers"], Cell[BoxData[ TagBox[\(\[SkeletonIndicator] GraphicsArray \[SkeletonIndicator]\), False, Editable->False]], "Output"] }, Open ]] }, Closed]], Cell[CellGroupData[{ Cell["B\[Hyphen]splines in terms of truncated powers", "Subsubsection"], Cell["\<\ Construct a B\[Hyphen]spline basis function as differences of integer \ translates of a truncated power\ \>", "Text"], Cell[BoxData[{ \(\[ScriptN]1[\[ScriptX]_] := \[ScriptC]1[\[ScriptX]] - \[ScriptC]1[\ \[ScriptX] - 1]\), "\[IndentingNewLine]", \(\[ScriptN]2[\[ScriptX]_] := \[ScriptC]2[\[ScriptX]] - 2 \[ScriptC]2[\[ScriptX] - 1] + \[ScriptC]2[\[ScriptX] - 2]\), "\[IndentingNewLine]", \(\[ScriptN]3[\[ScriptX]_] := \[ScriptC]3[\[ScriptX]] - 3 \[ScriptC]3[\[ScriptX] - 1] + 3 \[ScriptC]3[\[ScriptX] - 2] - \[ScriptC]3[\[ScriptX] - 3]\), "\[IndentingNewLine]", \(\[ScriptN]4[\[ScriptX]_] := \[ScriptC]4[\[ScriptX]] - 4 \[ScriptC]4[\[ScriptX] - 1] + 6 \[ScriptC]4[\[ScriptX] - 2] - 4 \[ScriptC]4[\[ScriptX] - 3] + \[ScriptC]4[\[ScriptX] - 4]\)}], "Input", CellTags->"bspline as trunc power"], Cell["Plot B\[Hyphen]spline basis functions", "Text"], Cell[CellGroupData[{ Cell[BoxData[{ \(Plot[\[ScriptN]1[\[ScriptX]], {\[ScriptX], \(-1\), 4}, PlotRange \[Rule] All]\), "\[IndentingNewLine]", \(Plot[\[ScriptN]2[\[ScriptX]], {\[ScriptX], \(-1\), 4}, PlotRange \[Rule] All]\), "\[IndentingNewLine]", \(Plot[\[ScriptN]3[\[ScriptX]], {\[ScriptX], \(-1\), 4}, PlotRange \[Rule] All]\), "\[IndentingNewLine]", \(Plot[\[ScriptN]4[\[ScriptX]], {\[ScriptX], \(-1\), 4}, PlotRange \[Rule] All]\)}], "Input"], Cell[BoxData[ TagBox[\(\[SkeletonIndicator] Graphics \[SkeletonIndicator]\), False, Editable->False]], "Output"], Cell[BoxData[ TagBox[\(\[SkeletonIndicator] Graphics \[SkeletonIndicator]\), False, Editable->False]], "Output"], Cell[BoxData[ TagBox[\(\[SkeletonIndicator] Graphics \[SkeletonIndicator]\), False, Editable->False]], "Output"], Cell[BoxData[ TagBox[\(\[SkeletonIndicator] Graphics \[SkeletonIndicator]\), False, Editable->False]], "Output"] }, Open ]] }, Closed]], Cell[CellGroupData[{ Cell["Figure for square as difference of cones", "Subsubsection"], Cell["Picture for square and alternating sum of cones.", "Text"], Cell[BoxData[ \(<< Graphics`Arrow`\)], "Input", InitializationCell->True], Cell[CellGroupData[{ Cell[BoxData[ \(Show[\[IndentingNewLine]Graphics[\[IndentingNewLine]{Arrow[{0, 4}, {2, 6}], Arrow[{0, 4}, {2, 2}], Arrow[{1, 5}, {3, 3}], Arrow[{1, 3}, {3, 5}]}], \[IndentingNewLine]Plot[ 2 \[ScriptN]2[\[ScriptX]], {\[ScriptX], \(-2\), 4}, PlotRange \[Rule] All], AspectRatio \[Rule] Automatic, PlotRange \[Rule] All, Axes \[Rule] {True, False}]\)], "Input", CellTags->"FIG square as cones"], Cell[BoxData[ TagBox[\(\[SkeletonIndicator] Graphics \[SkeletonIndicator]\), False, Editable->False]], "Output"] }, Open ]] }, Closed]] }, Open ]], Cell[CellGroupData[{ Cell["Box splines as combinations of cone splines", "Subsection"], Cell[TextData[{ "Define cone spline ", Cell[BoxData[ \(\(\[ScriptC]\^\[CapitalSigma]\)[\[ScriptX], \[ScriptY]]\)]], " via the recurrence" }], "Text"], Cell[BoxData[ \(\(\[ScriptC]\^\[CapitalSigma]\&~\)[\[ScriptX], \[ScriptY]] = \ \[Integral]\_0\%\[Infinity]\( \[ScriptC]\^\[CapitalSigma]\)[\[ScriptX] - a\ \[ScriptT], \[ScriptY] - b\ \[ScriptT]] \(\(\[DifferentialD]\[ScriptT]\)\(.\)\)\)], \ "Equation"], Cell[TextData[{ "Now, the box spline ", Cell[BoxData[ \(\(\[ScriptN]\^\[CapitalSigma]\)[\[ScriptX], \[ScriptY]]\)]], " satisfies" }], "Text"], Cell[BoxData[ \(\(\[ScriptN]\^\[CapitalSigma]\)[\[ScriptX], \[ScriptY]] = \[Sum]\+\(i, \ j\)\(d\^\[CapitalSigma]\)\[LeftDoubleBracket]i, j\[RightDoubleBracket] \(\[ScriptC]\^\[CapitalSigma]\)[\[ScriptX] \ - i, \[ScriptY] - j]\)], "Equation"], Cell[TextData[{ "where ", Cell[BoxData[ \(\(d\^\[CapitalSigma]\)[x, y] = \[Product]\+\({a, b} \[Element] \[CapitalSigma]\)\((1 - \(x\^a\ \) y\^b)\)\)]], "." }], "TheoremProofText"] }, Closed]], Cell[CellGroupData[{ Cell["Bivariate examples", "Subsection"], Cell["\<\ Construct the pieces of cone spline by hand, see Neamtu for details.\ \>", "Text"], Cell[CellGroupData[{ Cell["Pieces for 3 direction linear cone spline", "Subsubsection"], Cell[CellGroupData[{ Cell[BoxData[ \(\[ScriptC][\[ScriptX]_, \[ScriptY]_] := Which[\[IndentingNewLine]\((\[ScriptX] > 0)\) && \((\[ScriptX] < \[ScriptY])\), \[ScriptX], \ \[IndentingNewLine]\((\[ScriptY] > 0)\) && \((\[ScriptX] \[GreaterEqual] \[ScriptY])\), \ \[ScriptY], \[IndentingNewLine]True, 0]\)], "Input"], Cell[BoxData[ TagBox[\(\[SkeletonIndicator] SurfaceGraphics \[SkeletonIndicator]\), False, Editable->False]], "Output"] }, Open ]], Cell[BoxData[ RowBox[{ RowBox[{"d", "=", RowBox[{"(", "\[NoBreak]", GridBox[{ {"1", \(-1\), "0"}, {\(-1\), "0", "1"}, {"0", "1", \(-1\)} }], "\[NoBreak]", ")"}]}], ";"}]], "Input"], Cell[BoxData[ \(\[ScriptN][\[ScriptX]_, \[ScriptY]_] := Sum[d\[LeftDoubleBracket]i + 1, j + 1\[RightDoubleBracket] \[ScriptC][\[ScriptX] - i, \[ScriptY] - j], {i, 0, 2}, {j, 0, 2}]\)], "Input", CellTags->"FIG linear cone/box spline"], Cell[CellGroupData[{ Cell[BoxData[ \(Show[ GraphicsArray[{\[IndentingNewLine]Plot3D[\[ScriptC][\[ScriptX], \ \[ScriptY]], {\[ScriptX], \(-1\), 3}, {\[ScriptY], \(-1\), 3}, PlotRange \[Rule] All, PlotPoints \[Rule] 31], Plot3D[\[ScriptN][\[ScriptX], \[ScriptY]], {\[ScriptX], \(-1\), 3}, {\[ScriptY], \(-1\), 3}, PlotPoints \[Rule] 31, PlotRange \[Rule] All]}]]\)], "Input"], Cell[BoxData[ TagBox[\(\[SkeletonIndicator] GraphicsArray \[SkeletonIndicator]\), False, Editable->False]], "Output"] }, Open ]] }, Closed]], Cell[CellGroupData[{ Cell["Pieces for 4 direction quadratic cone spline", "Subsubsection"], Cell[BoxData[ \(\[ScriptC][\[ScriptX]_, \[ScriptY]_] := Which[\[IndentingNewLine]\((\[ScriptX] < 0)\) && \((\[ScriptX] + \[ScriptY] > 0)\), 1\/4\ \((\[ScriptX] + \[ScriptY])\)\^2, \[IndentingNewLine]\((\ \[ScriptX] \[GreaterEqual] 0)\) && \((\[ScriptX] < \[ScriptY])\), 1\/4\ \((\(-\[ScriptX]\^2\) + 2\ \[ScriptX]\ \[ScriptY] + \[ScriptY]\^2)\), \ \[IndentingNewLine]\((\[ScriptX] \[GreaterEqual] \[ScriptY])\) && \((\ \[ScriptY] > 0)\), \[ScriptY]\^2\/2, \[IndentingNewLine]True, 0]\)], "Input"], Cell[BoxData[ RowBox[{ RowBox[{"d", "=", RowBox[{"(", "\[NoBreak]", GridBox[{ {"0", \(-1\), "1", "0"}, {"1", "0", "0", \(-1\)}, {\(-1\), "0", "0", "1"}, {"0", "1", \(-1\), "0"} }], "\[NoBreak]", ")"}]}], ";"}]], "Input"], Cell[BoxData[ \(\[ScriptN][\[ScriptX]_, \[ScriptY]_] := Sum[d\[LeftDoubleBracket]i + 1, j + 1\[RightDoubleBracket] \[ScriptC][\[ScriptX] - i + 1, \[ScriptY] - j], {i, 0, 3}, {j, 0, 3}]\)], "Input", CellTags->"FIG quadratic cone/box spline"], Cell[CellGroupData[{ Cell[BoxData[ \(Show[ GraphicsArray[{\[IndentingNewLine]Plot3D[\[ScriptC][\[ScriptX], \ \[ScriptY]], {\[ScriptX], \(-1\), 3}, {\[ScriptY], \(-1\), 3}, PlotRange \[Rule] All, PlotPoints \[Rule] 31], Plot3D[\[ScriptN][\[ScriptX], \[ScriptY]], {\[ScriptX], \(-2\), 3}, {\[ScriptY], \(-1\), 4}, PlotPoints \[Rule] 31, PlotRange \[Rule] All]}]]\)], "Input"], Cell[BoxData[ TagBox[\(\[SkeletonIndicator] GraphicsArray \[SkeletonIndicator]\), False, Editable->False]], "Output"] }, Open ]] }, Closed]], Cell[CellGroupData[{ Cell["Pieces for 3 direction quartic cone spline", "Subsubsection"], Cell[BoxData[ \(\[ScriptC][\[ScriptX]_, \[ScriptY]_] := Which[\[IndentingNewLine]\((\[ScriptX] > 0)\) && \((\[ScriptX] < \[ScriptY])\), 1\/12\ \[ScriptX]\^3\ \((2\ \[ScriptY] - \[ScriptX])\), \ \[IndentingNewLine]\((\[ScriptY] > 0)\) && \((\[ScriptX] \[GreaterEqual] \[ScriptY])\), 1\/12\ \[ScriptY]\^3\ \((2\ \[ScriptX] - \[ScriptY])\), \ \[IndentingNewLine]True, 0]\)], "Input"], Cell[BoxData[ RowBox[{ RowBox[{"d", "=", RowBox[{"(", "\[NoBreak]", GridBox[{ {"1", \(-2\), "1", "0", "0"}, {\(-2\), "2", "2", \(-2\), "0"}, {"1", "2", \(-6\), "2", "1"}, {"0", \(-2\), "2", "2", \(-2\)}, {"0", "0", "1", \(-2\), "1"} }], "\[NoBreak]", ")"}]}], ";"}]], "Input"], Cell[BoxData[ \(\[ScriptN][\[ScriptX]_, \[ScriptY]_] := Sum[d\[LeftDoubleBracket]i + 1, j + 1\[RightDoubleBracket] \[ScriptC][\[ScriptX] - i, \[ScriptY] - j], {i, 0, 4}, {j, 0, 4}]\)], "Input", CellTags->"FIG quartic cone/box spline"], Cell[CellGroupData[{ Cell[BoxData[ \(Show[ GraphicsArray[{\[IndentingNewLine]Plot3D[\[ScriptC][\[ScriptX], \ \[ScriptY]], {\[ScriptX], \(-1\), 3}, {\[ScriptY], \(-1\), 3}, PlotRange \[Rule] All, PlotPoints \[Rule] 31], Plot3D[\[ScriptN][\[ScriptX], \[ScriptY]], {\[ScriptX], \(-1\), 5}, {\[ScriptY], \(-1\), 5}, PlotPoints \[Rule] 31, PlotRange \[Rule] All]}]]\)], "Input"], Cell[BoxData[ TagBox[\(\[SkeletonIndicator] GraphicsArray \[SkeletonIndicator]\), False, Editable->False]], "Output"] }, Open ]] }, Closed]] }, Open ]] }, Open ]], Cell[CellGroupData[{ Cell["\<\ Extra: Interactive curve subdivision using discrete convolution\ \>", "Section"], Cell[TextData[{ "Below is a tool written in ", StyleBox["Mathematica", FontSlant->"Italic"], " for interactively subdividing a closed polygon. To use this tool, simply \ click on the buttons below the blue figure." }], "Text"], Cell[CellGroupData[{ Cell["Subdivision code using discrete convolution - evaluate first", \ "Subsubsection"], Cell["Upsampling code", "Text"], Cell[BoxData[ \(upsample[p_] := Flatten[Transpose[{p, Table[0, {Length[p]}]}]]\)], "Input", InitializationCell->True], Cell["Linear subdivision", "Text"], Cell[BoxData[ \(linearSub[p_] := With[{tp = Transpose[p]}, \[IndentingNewLine]Transpose[ Table[\[IndentingNewLine]ListConvolve[{0.5, 1.0, 0.5}, upsample[ tp\[LeftDoubleBracket] i\[RightDoubleBracket]], {2, \(-2\)}], {i, Length[tp]}]]]\)], "Input", InitializationCell->True], Cell["Cubic subdivision", "Text"], Cell[BoxData[ \(cubicSub[p_] := With[{tp = Transpose[p]}, \[IndentingNewLine]Transpose[ Table[\[IndentingNewLine]ListConvolve[{0.125, 0.5, 0.75, 0.5, 0.125}, upsample[ tp\[LeftDoubleBracket] i\[RightDoubleBracket]], {3, \(-3\)}], {i, Length[tp]}]]]\)], "Input", InitializationCell->True], Cell["Quadratic averaging", "Text"], Cell[BoxData[ \(quadAver[p_] := With[{tp = Transpose[p]}, \[IndentingNewLine]Transpose[ Table[\[IndentingNewLine]ListConvolve[{0.25, 0.5, 0.25}, tp\[LeftDoubleBracket]i\[RightDoubleBracket], {2, \(-2\)}], {i, Length[tp]}]]]\)], "Input", InitializationCell->True], Cell[TextData[{ "Note that it is faster to compute ", Cell[BoxData[ \(cubicSub\)]], " directly instead of composing ", Cell[BoxData[ \(linearSub\)]], " and ", Cell[BoxData[ \(quadAver\)]], "." }], "Text"], Cell["Examples curves", "Text"], Cell[BoxData[{ \(\(square = {{0, 0}, {1, 0}, {1, 1}, {0, 1}};\)\), "\[IndentingNewLine]", \(\(eight = {{0, 0}, {1, 1}, {1, 0}, {0, 1}};\)\)}], "Input", InitializationCell->True] }, Closed]], Cell[CellGroupData[{ Cell["Display code - evaluate second", "Subsubsection"], Cell[BoxData[ \(dispPolygon[p_] := Module[{nb = SelectedNotebook[], \[IndentingNewLine]data = DisplayString[ Insert[Graphics[\[IndentingNewLine]{\[IndentingNewLine]\ GrayLevel[0], Line[Append[p, First[p]]], \[IndentingNewLine]GrayLevel[1], Line[Append[initPolygon, First[initPolygon]]], \[IndentingNewLine]GrayLevel[ 0], PointSize[0.02], Map[Point, p]}], \[IndentingNewLine]{AspectRatio \[Rule] 1}, \(-1\)]]}, \[IndentingNewLine]NotebookFind[ nb, "\", All, CellTags]; \[IndentingNewLine]SelectionMove[nb, All, CellContents]; \[IndentingNewLine]NotebookWrite[nb, Cell[GraphicsData["\", data], "\", ImageSize \[Rule] 432, CellTags \[Rule] "\", ShowSelection \[Rule] False]]; \[IndentingNewLine]SelectionMove[ nb, After, Cell]]\)], "Input", InitializationCell->True] }, Closed]], Cell[CellGroupData[{ Cell["Interactive subdivider", "Subsubsection"], Cell[BoxData[Cell[GraphicsData["PostScript", "\<\ %! %%Creator: Mathematica %%AspectRatio: 1 MathPictureStart /Mabs { Mgmatrix idtransform Mtmatrix dtransform } bind def /Mabsadd { Mabs 3 -1 roll add 3 1 roll add exch } bind def %% Graphics %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 10 scalefont setfont % Scaling calculations -0.287758 1.33826 0.0238095 1.04728 [ [ 0 0 0 0 ] [ 1 1 0 0 ] ] MathScale % Start of Graphics 1 setlinecap 1 setlinejoin newpath 0 0 m 1 0 L 1 1 L 0 1 L closepath clip newpath 0 g .5 Mabswid [ ] 0 setdash .48956 .84004 m .54667 .87665 L .60416 .90373 L .66072 .92072 L .71503 .92704 L .76577 .92213 L .81162 .9054 L .85128 .87631 L .88341 .83426 L .90671 .7787 L .92065 .71444 L .92472 .64631 L .91841 .57912 L .90119 .5177 L .87255 .46686 L .83197 .43143 L .77893 .41622 L .71292 .42607 L .63877 .45482 L .56129 .49636 L .48533 .54455 L .41571 .59326 L .35726 .63635 L .31481 .6677 L .29319 .68116 L .29722 .67061 L .32086 .6408 L .35809 .5965 L .40287 .54246 L .44915 .48343 L .4909 .42418 L .52209 .36946 L .53667 .32403 L .52862 .29265 L .50289 .27449 L .46446 .26871 L .41829 .27448 L .36934 .29097 L .32259 .31735 L .283 .35278 L .25554 .39643 L .24517 .44747 L .24997 .50386 L .26801 .56355 L .29737 .6245 L .33614 .68467 L .38237 .74201 L .43415 .79448 L .48956 .84004 L s 1 g .47171 .93407 m .97619 .97619 L .91515 .15322 L .02381 .9333 L .77438 .17652 L .07606 .31884 L .47171 .93407 L s 0 g .02 w .48956 .84004 Mdot .54667 .87665 Mdot .60416 .90373 Mdot .66072 .92072 Mdot .71503 .92704 Mdot .76577 .92213 Mdot .81162 .9054 Mdot .85128 .87631 Mdot .88341 .83426 Mdot .90671 .7787 Mdot .92065 .71444 Mdot .92472 .64631 Mdot .91841 .57912 Mdot .90119 .5177 Mdot .87255 .46686 Mdot .83197 .43143 Mdot .77893 .41622 Mdot .71292 .42607 Mdot .63877 .45482 Mdot .56129 .49636 Mdot .48533 .54455 Mdot .41571 .59326 Mdot .35726 .63635 Mdot .31481 .6677 Mdot .29319 .68116 Mdot .29722 .67061 Mdot .32086 .6408 Mdot .35809 .5965 Mdot .40287 .54246 Mdot .44915 .48343 Mdot .4909 .42418 Mdot .52209 .36946 Mdot .53667 .32403 Mdot .52862 .29265 Mdot .50289 .27449 Mdot .46446 .26871 Mdot .41829 .27448 Mdot .36934 .29097 Mdot .32259 .31735 Mdot .283 .35278 Mdot .25554 .39643 Mdot .24517 .44747 Mdot .24997 .50386 Mdot .26801 .56355 Mdot .29737 .6245 Mdot .33614 .68467 Mdot .38237 .74201 Mdot .43415 .79448 Mdot % End of Graphics MathPictureEnd \ \>"], "Graphics", ShowSelection->False, ImageSize->{432, 432}, ImageMargins->{{0, 0}, {0, 0}}, ImageRegion->{{0, 1}, {0, 1}}, ImageCache->GraphicsData["Bitmap", "\<\ CF5dJ6E]HGAYHf4PAg9QL6QYHgP000?l00`3oool0 003o0000o`0?0000o`030?ooo`000?l0003o02/0003o003o0000oi40003o1@3oool90000o`030?oo o`000?l0003o03X0003o00<0oooo0000o`000?l040000?l00`3oool0003o0000o`0[0000o`00o`00 0?n<0000o`D0oooo3@000?l00`3oool0003o0000o`0j0000o`030?ooo`000?l0003o0140003o00<0 oooo0000o`000?l0:`000?l00?l0003oQ`000?l50?oooa40003o00<0oooo0000o`000?l0>@000?l2 0?oooa@0003o00<0oooo0000o`000?l0:`000?l00?l0003oPP000?l50?oooaD0003o00<0oooo0000 o`000?l0>@000?l00`3oool0003o0000o`0D0000o`030?ooo`000?l0003o02/0003o003o0000ogd0 003o1@3ooolI0000o`030?ooo`000?l0003o03T0003o00<0oooo0000o`000?l05@000?l00`3oool0 003o0000o`0[0000o`00o`000?mh0000o`D0oooo7@000?l00`3oool0003o0000o`0i0000o`030?oo o`000?l0003o01L0003o00<0oooo0000o`000?l0:P000?l00?l0003oL`000?l50?ooob40003o00<0 oooo0000o`000?l0>@000?l00`3oool0003o0000o`0H0000o`030?ooo`000?l0003o02X0003o003o 0000ofl0003o103ooolU0000o`030?ooo`000?l0003o03T0003o00<0oooo0000o`000?l06@000?l0 0`3oool0003o0000o`0Z0000o`00o`000?mZ0000o`D0oooo:0000?l00`3oool0003o0000o`0i0000 o`030?ooo`000?l0003o01X0003o00<0oooo0000o`000?l0:P000?l00?l0003oI@000?l50?ooob`0 003o00<0oooo0000o`000?l0>0000?l20?oooad0003o00<0oooo0000o`000?l0:P000?l00?l0003o H0000?l50?oooc00003o00<0oooo0000o`000?l0>0000?l00`3oool0003o0000o`0M0000o`030?oo o`000?l0003o02X0003o003o0000oe/0003o1@3ooold0000o`030?ooo`000?l0003o03P0003o00<0 oooo0000o`000?l07P000?l00`3oool0003o0000o`0Z0000o`00o`000?mF0000o`D0oooo>0000?l0 0`3oool0003o0000o`0h0000o`030?ooo`000?l0003o01l0003o00<0oooo0000o`000?l0:P000?l0 0?l0003oD@000?l50?oooc`0003o00<0oooo0000o`000?l0>0000?l00`3oool0003o0000o`0P0000 o`030?ooo`000?l0003o02X0003o003o0000od`0003o1@3ooom00000o`030?ooo`000?l0003o03P0 003o00<0oooo0000o`000?l08@000?l00`3oool0003o0000o`0Z0000o`00o`000?m70000o`D0oooo A0000?l00`3oool0003o0000o`0h0000o`030?ooo`000?l0003o0280003o00<0oooo0000o`000?l0 :P000?l00?l0003o@P000?l50?ooodP0003o00<0oooo0000o`000?l0=`000?l20?ooobD0003o00<0 oooo0000o`000?l0:P000?l00?l0003o?@000?l50?oood`0003o00<0oooo0000o`000?l0=`000?l0 0`3oool0003o0000o`0U0000o`030?ooo`000?l0003o02X0003o003o0000ocP0003o1@3ooom@0000 o`030?ooo`000?l0003o03L0003o00<0oooo0000o`000?l09`000?l00`3oool0003o0000o`0Y0000 o`00o`000?lc0000o`D0ooooE0000?l00`3oool0003o0000o`0g0000o`030?ooo`000?l0003o02P0 003o00<0oooo0000o`000?l0:@000?l00?l0003o;P000?l50?oooeP0003o00<0oooo0000o`000?l0 =`000?l00`3oool0003o0000o`0Y0000o`030?ooo`000?l0003o02T0003o003o0000obT0003o1@3o oomL0000o`030?ooo`000?l0003o03L0003o00<0oooo0000o`000?l0:P000?l00`3oool0003o0000 o`0Y0000o`00o`000?lT0000o`D0ooooH0000?l00`3oool0003o0000o`0g0000o`030?ooo`000?l0 003o02/0003o00<0oooo0000o`000?l0:@000?l00?l0003o7`000?l50?ooof@0003o00<0oooo0000 o`000?l0=P000?l20?ooobh0003o00<0oooo0000o`000?l0:@000?l00?l0003o6P000?l50?ooofP0 003o00<0oooo0000o`000?l0=P000?l00`3oool0003o0000o`0^0000o`030?ooo`000?l0003o02T0 003o003o0000oaD0003o1@3ooom/0000o`030?ooo`000?l0003o03H0003o00<0oooo0000o`000?l0 ;`000?l00`3oool0003o0000o`0Y0000o`00o`000?lA0000o`@0ooooL0000?l00`3oool0003o0000 o`0f0000o`030?ooo`000?l0003o0300003o00<0oooo0000o`000?l0:@000?l00?l0003o30000?l5 0?ooog<0003o00<0oooo0000o`000?l0=P000?l00`3oool0003o0000o`0a0000o`030?ooo`000?l0 003o02T0003o003o0000o`L0003o1@3ooomg0000o`030?ooo`000?l0003o03H0003o00<0oooo0000 o`000?l00000?l00`3oool0003o0000o`0X0000o`00k@000?l50?oooh/0003o00<0oooo0000 o`000?l0=@000?l00`3oool0003o0000o`0i0000o`030?ooo`000?l0003o02P0003o003X0000o`D0 ooooS`000?l00`3oool0003o0000o`0e0000o`030?ooo`000?l0003o03X0003o00<0oooo0000o`00 0?l0:0000?l00><0003o1@3ooonC0000o`030?ooo`000?l0003o03D0003o00<0oooo0000o`000?l0 >`000?l00`3oool0003o0000o`0X0000o`00gP000?l50?oooiL0003o00<0oooo0000o`000?l0=@00 0?l00`3oool0003o0000o`0l0000o`030?ooo`000?l0003o02P0003o003I0000o`D0ooooV`000?l0 0`3oool0003o0000o`0d0000o`80oooo?`000?l00`3oool0003o0000o`0X0000o`00e0000?l50?oo oil0003o00<0oooo0000o`000?l0=0000?l00`3oool0003o0000o`0o0000o`030?ooo`000?l0003o 02P0003o003?0000o`D0ooooX`000?l00`3oool0003o0000o`0d0000o`030?ooo`000?l0003o0400 003o00<0oooo0000o`000?l0:0000?l00`000?l8000007@0003o00<0oooo0000o`000?l0<`000?l20?ooodL0003o00<0oooo0000o`00 0?l0:0000?l00;80003o103ooolY0000o`@000004P000?l:000000h0003o1000001P0000o`030?oo o`000?l0003o03<0003o00<0oooo0000o`000?l0B0000?l00`3oool0003o0000o`0W0000o`00[@00 0?l50?ooob`0003o1P00000A0000o`X000003@000?l6000005h0003o00<0oooo0000o`000?l0<`00 0?l00`3oool0003o0000o`190000o`030?ooo`000?l0003o02L0003o002X0000o`D0oooo<0000?l8 000000T0003o5`0000060000o`P00000G0000?l00`3oool0003o0000o`0c0000o`030?ooo`000?l0 003o04X0003o00<0oooo0000o`000?l09`000?l00:<0003o1@3ooold0000oa8000001`000?l:0000 00H0003o3`00001J0000o`030?ooo`000?l0003o03<0003o00<0oooo0000o`000?l0B`000?l00`3o ool0003o0000o`0W0000o`00WP000?l50?ooocT0003o2P00000@0000o`P0000030000?l:000005T0 003o00<0oooo0000o`000?l0<`000?l00`3oool0003o0000o`1<0000o`030?ooo`000?l0003o02L0 003o002I0000o`D0oooo?P000?l:00000140003o1P00000=0000o`X00000F0000?l00`3oool0003o 0000o`0c0000o`030?ooo`000?l0003o04d0003o00<0oooo0000o`000?l09`000?l009@0003o1@3o oom10000o``000004P000?l4000000h0003o2P00001G0000o`030?ooo`000?l0003o0380003o0P3o oom@0000o`030?ooo`000?l0003o02L0003o002?0000o`D0oooo@`000?l3000000<0003o2000000V 0000o`T00000EP000?l00`3oool0003o0000o`0b0000o`030?ooo`000?l0003o0500003o00<0oooo 0000o`000?l09`000?l008X0003o1@3ooom50000o`<000001`000?l6000002P0003o1P0000020000 o`03000000000?l0003o0580003o00<0oooo0000o`000?l0`000?l4000000T0003o0P00000;0000o`@0 0000:P000?l4000000@0003o0P00001A0000o`030?ooo`000?l0003o0380003o00<0oooo0000o`00 0?l0DP000?l00`3oool0003o0000o`0W0000o`00P0000?l50?ooocl0003o1P0000050000o`<00000 A@000?l010000000003o0000o`000?l4000004P0003o00<0oooo0000o`000?l0@000?l00`3oool0003o 0000o`1H0000o`03000000000?l0003o07l0003o1P00000Q0000o`030?ooo`000?l0003o02/0003o 00<0oooo0000o`000?l0Q`000?l00`3oool0003o0000o`0T0000o`00>P000?l00`3oool0003o0000 o`1F0000o`03000000000?l0003o07l0003o2000000O0000o`030?ooo`000?l0003o02/0003o00<0 oooo0000o`000?l0R@000?l00`3oool0003o0000o`0S0000o`00>P000?l00`3oool0003o0000o`1F 0000o`03000000000?l0003o07h0003o2P00000M0000o`030?ooo`000?l0003o02X0003o0P3ooon< 0000o`030?ooo`000?l0003o02<0003o000k0000o`030?ooo`000?l0003o05@0003o00<000000000 o`000?l0O`000?l:000001`0003o00<0oooo0000o`000?l0:P000?l00`3oool0003o0000o`2<0000 o`030?ooo`000?l0003o02<0003o000l0000o`030?ooo`000?l0003o0580003o00<000000000o`00 0?l0P0000?l:000001/0003o00<0oooo0000o`000?l0:P000?l00`3oool0003o0000o`2=0000o`03 0?ooo`000?l0003o02<0003o000l0000o`030?ooo`000?l0003o0580003o00<000000000o`000?l0 P0000?l:000001X0003o00<0oooo0000o`000?l0:P000?l00`3oool0003o0000o`2>0000o`030?oo o`000?l0003o02<0003o000m0000o`030?ooo`000?l0003o0500003o00<000000000o`000?l0PP00 0?l8000001X0003o00<0oooo0000o`000?l0:P000?l00`3oool0003o0000o`2?0000o`030?ooo`00 0?l0003o02<0003o000n0000o`030?ooo`000?l0003o04l0003o00<000000000o`000?l0P`000?l6 000001X0003o00<0oooo0000o`000?l0:P000?l00`3oool0003o0000o`2@0000o`030?ooo`000?l0 003o02<0003o000n0000o`030?ooo`000?l0003o04h0003o00<000000000o`000?l0Q0000?l50000 01X0003o00<0oooo0000o`000?l0:P000?l00`3oool0003o0000o`2A0000o`030?ooo`000?l0003o 02<0003o000o0000o`030?ooo`000?l0003o04`0003o00<000000000o`000?l0Q0000?l00`000000 003o0000o`0L0000o`030?ooo`000?l0003o02T0003o0P3ooonD0000o`030?ooo`000?l0003o02<0 003o000o0000o`030?ooo`000?l0003o04`0003o00<000000000o`000?l0Q0000?l00`000000003o 0000o`0K0000o`030?ooo`000?l0003o02T0003o00<0oooo0000o`000?l0U0000?l00`3oool0003o 0000o`0S0000o`00@0000?l00`3oool0003o0000o`1:0000o`03000000000?l0003o08@0003o00<0 00000000o`000?l06`000?l00`3oool0003o0000o`0Y0000o`030?ooo`000?l0003o09D0003o00<0 oooo0000o`000?l08`000?l00440003o00<0oooo0000o`000?l0B0000?l00`000000003o0000o`25 0000o`03000000000?l0003o01X0003o00<0oooo0000o`000?l0:@000?l00`3oool0003o0000o`2F 0000o`030?ooo`000?l0003o02<0003o00110000o`030?ooo`000?l0003o04<0003o100000000`00 0?l000000000o`250000o`03000000000?l0003o01X0003o00<0oooo0000o`000?l0:@000?l00`3o ool0003o0000o`2G0000o`030?ooo`000?l0003o02<0003o00120000o`030?ooo`000?l0003o0440 003o1P0000270000o`03000000000?l0003o01T0003o00<0oooo0000o`000?l0:@000?l00`3oool0 003o0000o`2I0000o`030?ooo`000?l0003o0280003o00130000o`030?ooo`000?l0003o03l0003o 200000250000o`03000000000?l0003o01T0003o00<0oooo0000o`000?l0:@000?l00`3oool0003o 0000o`2J0000o`030?ooo`000?l0003o0280003o00130000o`030?ooo`000?l0003o03h0003o2P00 00230000o`03000000000?l0003o01T0003o00<0oooo0000o`000?l0:0000?l20?oooid0003o00<0 oooo0000o`000?l08P000?l004@0003o00<0oooo0000o`000?l0?@000?l:000008<0003o00<00000 0000o`000?l060000?l00`3oool0003o0000o`0X0000o`030?ooo`000?l0003o09d0003o00<0oooo 0000o`000?l08P000?l004D0003o00<0oooo0000o`000?l0?0000?l:00000880003o00<000000000 o`000?l060000?l00`3oool0003o0000o`0X0000o`030?ooo`000?l0003o09h0003o00<0oooo0000 o`000?l08P000?l004D0003o00<0oooo0000o`000?l0?0000?l:00000880003o00<000000000o`00 0?l05`000?l00`3oool0003o0000o`0X0000o`030?ooo`000?l0003o09l0003o00<0oooo0000o`00 0?l08P000?l004H0003o00<0oooo0000o`000?l0?0000?l800000880003o00<000000000o`000?l0 5`000?l00`3oool0003o0000o`0X0000o`030?ooo`000?l0003o0:00003o00<0oooo0000o`000?l0 8P000?l004L0003o00<0oooo0000o`000?l0?0000?l600000880003o00<000000000o`000?l05`00 0?l00`3oool0003o0000o`0X0000o`030?ooo`000?l0003o0:40003o00<0oooo0000o`000?l08P00 0?l004L0003o00<0oooo0000o`000?l0?@000?l4000008<0003o00<000000000o`000?l05P000?l0 0`3oool0003o0000o`0X0000o`030?ooo`000?l0003o0:80003o00<0oooo0000o`000?l08P000?l0 04P0003o00<0oooo0000o`000?l0?@000?l00`000000003o0000o`220000o`03000000000?l0003o 01H0003o00<0oooo0000o`000?l09`000?l20?ooojD0003o00<0oooo0000o`000?l08P000?l004P0 003o00<0oooo0000o`000?l0?@000?l00`000000003o0000o`220000o`03000000000?l0003o01D0 003o00<0oooo0000o`000?l09`000?l00`3oool0003o0000o`1?0000o`@00000DP000?l00`3oool0 003o0000o`0R0000o`00B@000?l00`3oool0003o0000o`0l0000o`03000000000?l0003o0840003o 00<000000000o`000?l05@000?l00`3oool0003o0000o`0W0000o`030?ooo`000?l0003o04l0003o 1P00001A0000o`030?ooo`000?l0003o0280003o001:0000o`030?ooo`000?l0003o03X0003o00<0 00000000o`000?l0PP000?l00`000000003o0000o`0D0000o`030?ooo`000?l0003o02L0003o00<0 oooo0000o`000?l0C`000?l800000500003o00<0oooo0000o`000?l08P000?l004X0003o00<0oooo 0000o`000?l0>P000?l00`000000003o0000o`210000o`03000000000?l0003o01@0003o00<0oooo 0000o`000?l09`000?l00`3oool0003o0000o`1?0000o`X00000C`000?l00`3oool0003o0000o`0R 0000o`00B`000?l00`3oool0003o0000o`0i0000o`03000000000?l0003o07`0003o1@00000F0000 o`030?ooo`000?l0003o02L0003o00<0oooo0000o`000?l0D0000?l:00000500003o00<0oooo0000 o`000?l08@000?l004`0003o00<0oooo0000o`000?l0>0000?l00`000000003o0000o`1k0000o`H0 00005@000?l00`3oool0003o0000o`0W0000o`030?ooo`000?l0003o0340003o1000000G0000oa00 0000C`000?l00`3oool0003o0000o`0Q0000o`00C0000?l00`3oool0003o0000o`0h0000o`030000 00000?l0003o07X0003o2000000C0000o`030?ooo`000?l0003o02H0003o0P3ooolc0000o`H00000 3`000?l7000000D0003o2P0000000`000?l0000000000002000004/0003o00<0oooo0000o`000?l0 8@000?l004d0003o00<0oooo0000o`000?l0=`000?l00`000000003o0000o`1i0000o`X000004@00 0?l00`3oool0003o0000o`0V0000o`030?ooo`000?l0003o0380003o200000070000o`L000003@00 0?l8000000H0003o0`0000180000o`030?ooo`000?l0003o0240003o001>0000o`030?ooo`000?l0 003o03D0003o00<000000000o`000?l0NP000?l:00000100003o00<0oooo0000o`000?l09P000?l0 0`3oool0003o0000o`0b0000oa0000005@000?l6000000X0003o1000000:0000o`@00000=P000?l0 0`3oool0003o0000o`0Q0000o`00CP000?l00`3oool0003o0000o`0e0000o`03000000000?l0003o 07X0003o2P00000?0000o`030?ooo`000?l0003o02H0003o00<0oooo0000o`000?l0<`000?l:0000 01`0003o1000000?0000o`<000001P000?l6000003D0003o00<0oooo0000o`000?l08@000?l004l0 003o00<0oooo0000o`000?l0=0000?l00`000000003o0000o`1j0000o`X000003P000?l00`3oool0 003o0000o`0V0000o`030?ooo`000?l0003o03@0003o2P00000b0000o`@0000000<0003o00000000 00001P00000d0000o`030?ooo`000?l0003o0240003o001?0000o`030?ooo`000?l0003o03@0003o 00<000000000o`000?l0N`000?l8000000h0003o00<0oooo0000o`000?l09P000?l00`3oool0003o 0000o`0d0000o`/00000=P000?l:000003<0003o00<0oooo0000o`000?l08@000?l00500003o00<0 oooo0000o`000?l0<`000?l00`000000003o0000o`1l0000o`H000003P000?l00`3oool0003o0000 o`0V0000o`030?ooo`000?l0003o03<0003o0P0000020000o`P00000=`000?l:000003<0003o00<0 oooo0000o`000?l08@000?l00540003o00<0oooo0000o`000?l0<@000?l00`000000003o0000o`1m 0000o`D000003P000?l00`3oool0003o0000o`0U0000o`80oooo<`000?l3000000D0003o1P00000h 0000o`X00000<`000?l00`3oool0003o0000o`0Q0000o`00D@000?l00`3oool0003o0000o`0a0000 o`03000000000?l0003o07`0003o00<000000000o`000?l040000?l00`3oool0003o0000o`0U0000 o`030?ooo`000?l0003o0340003o0P0000090000o`@00000>@000?l:000003<0003o00<0oooo0000 o`000?l08@000?l00580003o00<0oooo0000o`000?l0<0000?l00`000000003o0000o`1k0000o`03 000000000?l0003o0100003o00<0oooo0000o`000?l09@000?l00`3oool0003o0000o`0_0000o`<0 0000B@000?l9000003<0003o00<0oooo0000o`000?l08@000?l005<0003o00<0oooo0000o`000?l0 ;`000?l00`000000003o0000o`1k0000o`03000000000?l0003o00l0003o00<0oooo0000o`000?l0 9@000?l00`3oool0003o0000o`0^0000o`800000C@000?l600000080003o00<000000000o`000?l0 <0000?l00`3oool0003o0000o`0Q0000o`00D`000?l00`3oool0003o0000o`0/0000o`@00000O000 0?l00`000000003o0000o`0?0000o`030?ooo`000?l0003o02D0003o00<0oooo0000o`000?l0;000 0?l300000500003o100000040000o`03000000000?l0003o0300003o00<0oooo0000o`000?l08000 0?l005@0003o00<0oooo0000o`000?l0:P000?l6000007X0003o00<000000000o`000?l03`000?l0 0`3oool0003o0000o`0U0000o`030?ooo`000?l0003o02/0003o0P00001L0000o`03000000000?l0 003o02l0003o00<0oooo0000o`000?l080000?l005D0003o00<0oooo0000o`000?l0:0000?l80000 07P0003o00<000000000o`000?l03`000?l00`3oool0003o0000o`0U0000o`030?ooo`000?l0003o 02T0003o0`00001O0000o`03000000000?l0003o02h0003o00<0oooo0000o`000?l080000?l005D0 003o00<0oooo0000o`000?l09`000?l:000007L0003o00<000000000o`000?l03P000?l00`3oool0 003o0000o`0T0000o`80oooo:P000?l2000006<0003o00<000000000o`000?l0;@000?l00`3oool0 003o0000o`0P0000o`00EP000?l00`3oool0003o0000o`0V0000o`X00000MP000?l00`000000003o 0000o`0>0000o`030?ooo`000?l0003o02@0003o00<0oooo0000o`000?l070000?l4000000L0003o 0`00001V0000o`800000;@000?l00`3oool0003o0000o`0P0000o`00E`000?l00`3oool0003o0000 o`0U0000o`X00000M@000?l00`000000003o0000o`0>0000o`030?ooo`000?l0003o02@0003o00<0 oooo0000o`000?l070000?l6000000@0003o0P00001[0000o`03000000000?l0003o02X0003o00<0 oooo0000o`000?l080000?l005L0003o00<0oooo0000o`000?l09@000?l:000007D0003o00<00000 0000o`000?l03@000?l00`3oool0003o0000o`0T0000o`030?ooo`000?l0003o01`0003o2`00001^ 0000o`03000000000?l0003o02T0003o00<0oooo0000o`000?l080000?l005P0003o00<0oooo0000 o`000?l09@000?l8000007D0003o00<000000000o`000?l03@000?l00`3oool0003o0000o`0T0000 o`030?ooo`000?l0003o01`0003o2P00001a0000o`03000000000?l0003o02P0003o00<0oooo0000 o`000?l080000?l005P0003o00<0oooo0000o`000?l09P000?l6000007D0003o00<000000000o`00 0?l03@000?l00`3oool0003o0000o`0T0000o`030?ooo`000?l0003o01d0003o2P00001b0000o`03 000000000?l0003o02L0003o00<0oooo0000o`000?l080000?l005T0003o00<0oooo0000o`000?l0 9P000?l4000007H0003o00<000000000o`000?l030000?l00`3oool0003o0000o`0T0000o`030?oo o`000?l0003o01h0003o2P00001c0000o`03000000000?l0003o02H0003o00<0oooo0000o`000?l0 80000?l005X0003o00<0oooo0000o`000?l09`000?l00`000000003o0000o`1d0000o`0300000000 0?l0003o00`0003o00<0oooo0000o`000?l08`000?l20?ooob40003o2P00001d0000o`0300000000 0?l0003o00@000008@000?l00`3oool0003o0000o`0P0000o`00FP000?l00`3oool0003o0000o`0W 0000o`03000000000?l0003o07<0003o00<000000000o`000?l030000?l00`3oool0003o0000o`0S 0000o`030?ooo`000?l0003o0200003o2P00001f0000o`L0000080000?l00`3oool0003o0000o`0P 0000o`00F`000?l00`3oool0003o0000o`0W0000o`03000000000?l0003o0780003o00<000000000 o`000?l02`000?l00`3oool0003o0000o`0S0000o`030?ooo`000?l0003o01l0003o0P0000030000 o`H00000M`000?l8000001l0003o00<0oooo0000o`000?l080000?l005`0003o00<0oooo0000o`00 0?l09P000?l00`000000003o0000o`1a0000o`03000000000?l0003o00/0003o00<0oooo0000o`00 0?l08`000?l00`3oool0003o0000o`0N0000o`8000001P000?l4000007L0003o2P00000N0000o`03 0?ooo`000?l0003o0200003o001L0000o`030?ooo`000?l0003o02H0003o00<000000000o`000?l0 L0000?l00`000000003o0000o`0;0000o`030?ooo`000?l0003o02<0003o00<0oooo0000o`000?l0 7@000?l2000008<0003o2P00000O0000o`030?ooo`000?l0003o01l0003o001M0000o`030?ooo`00 0?l0003o02D0003o00<000000000o`000?l0L0000?l00`000000003o0000o`0:0000o`030?ooo`00 0?l0003o02<0003o00<0oooo0000o`000?l070000?l2000008D0003o2P00000O0000o`030?ooo`00 0?l0003o01l0003o001N0000o`030?ooo`000?l0003o02@0003o00<000000000o`000?l0K`000?l0 0`000000003o0000o`0:0000o`030?ooo`000?l0003o02<0003o00<0oooo0000o`000?l06`000?l2 000008L0003o2P00000O0000o`030?ooo`000?l0003o01l0003o001N0000o`030?ooo`000?l0003o 02@0003o00<000000000o`000?l0KP000?l00`000000003o0000o`0:0000o`030?ooo`000?l0003o 0280003o0P3ooolL0000o`800000RP000?l800000200003o00<0oooo0000o`000?l07`000?l005l0 003o00<0oooo0000o`000?l08`000?l00`000000003o0000o`1]0000o`03000000000?l0003o00X0 003o00<0oooo0000o`000?l08P000?l00`3oool0003o0000o`0J0000o`800000S@000?l600000240 003o00<0oooo0000o`000?l07`000?l00600003o00<0oooo0000o`000?l08P000?l00`000000003o 0000o`1X0000o`@0000000<0003o000000000?l02P000?l00`3oool0003o0000o`0R0000o`030?oo o`000?l0003o01X0003o00<000000000o`000?l0SP000?l4000000030000o`000000003o01l0003o 00<0oooo0000o`000?l07`000?l00600003o00<0oooo0000o`000?l08P000?l00`000000003o0000 o`1W0000o`H000002`000?l00`3oool0003o0000o`0R0000o`030?ooo`000?l0003o01T0003o0P00 002F0000o`03000000000?l0003o01h0003o00<0oooo0000o`000?l07`000?l00640003o00<0oooo 0000o`000?l08@000?l00`000000003o0000o`1V0000o`P000002@000?l00`3oool0003o0000o`0R 0000o`030?ooo`000?l0003o01P0003o0P00002I0000o`03000000000?l0003o01d0003o00<0oooo 0000o`000?l07`000?l00640003o00<0oooo0000o`000?l08@000?l00`000000003o0000o`1U0000 o`X000001`000?l00`3oool0003o0000o`0R0000o`030?ooo`000?l0003o01L0003o0P00002K0000 o`03000000000?l0003o01d0003o00<0oooo0000o`000?l07`000?l00680003o00<0oooo0000o`00 0?l080000?l00`000000003o0000o`1U0000o`X000001P000?l00`3oool0003o0000o`0R0000o`03 0?ooo`000?l0003o01H0003o0P00002N0000o`03000000000?l0003o01`0003o00<0oooo0000o`00 0?l07`000?l006<0003o00<0oooo0000o`000?l07`000?l00`000000003o0000o`1U0000o`X00000 1@000?l00`3oool0003o0000o`0Q0000o`80oooo5`000?l200000:00003o00<000000000o`000?l0 70000?l00`3oool0003o0000o`0O0000o`00H`000?l00`3oool0003o0000o`0O0000o`0300000000 0?l0003o06D0003o2P0000040000o`030?ooo`000?l0003o0240003o00<0oooo0000o`000?l05@00 0?l200000:<0003o00<000000000o`000?l06`000?l00`3oool0003o0000o`0O0000o`00I0000?l0 0`3oool0003o0000o`0N0000o`03000000000?l0003o06H0003o200000040000o`030?ooo`000?l0 003o0240003o00<0oooo0000o`000?l02`000?l4000000D0003o0P00002U0000o`03000000000?l0 003o01/0003o00<0oooo0000o`000?l07`000?l006D0003o00<0oooo0000o`000?l07P000?l00`00 0000003o0000o`1V0000o`H0000010000?l00`3oool0003o0000o`0Q0000o`030?ooo`000?l0003o 00/0003o1P0000020000o`800000Z0000?l00`000000003o0000o`0K0000o`030?ooo`000?l0003o 01h0003o001U0000o`030?ooo`000?l0003o01h0003o00<000000000o`000?l0I@000?l00`000000 003o00000003000000@0003o00<0oooo0000o`000?l08@000?l00`3oool0003o0000o`0;0000o`T0 0000Z`000?l00`000000003o0000o`0J0000o`030?ooo`000?l0003o01h0003o001V0000o`030?oo o`000?l0003o01d0003o00<000000000o`000?l0I0000?l00`000000003o0000o`070000o`030?oo o`000?l0003o0240003o00<0oooo0000o`000?l02`000?l:00000:/0003o00<000000000o`000?l0 6P000?l00`3oool0003o0000o`0N0000o`00I`000?l00`3oool0003o0000o`0J0000o`@00000I@00 0?l00`000000003o0000o`060000o`030?ooo`000?l0003o0240003o00<0oooo0000o`000?l03000 0?l:00000:`0003o00<000000000o`000?l06@000?l00`3oool0003o0000o`0N0000o`00I`000?l0 0`3oool0003o0000o`0I0000o`H00000H`000?l00`000000003o0000o`060000o`030?ooo`000?l0 003o0200003o0P3oool?0000o`X00000[0000?l00`000000003o0000o`0I0000o`030?ooo`000?l0 003o01h0003o001X0000o`030?ooo`000?l0003o01L0003o2000001Q0000o`03000000000?l0003o 00H0003o00<0oooo0000o`000?l080000?l00`3oool0003o0000o`0?0000o`X00000[@000?l00`00 0000003o0000o`0H0000o`030?ooo`000?l0003o01h0003o001Y0000o`030?ooo`000?l0003o01D0 003o2P00001O0000o`03000000000?l0003o00H0003o00<0oooo0000o`000?l080000?l00`3oool0 003o0000o`0@0000o`T00000[P000?l00`000000003o0000o`0H0000o`030?ooo`000?l0003o01h0 003o001Y0000o`030?ooo`000?l0003o01D0003o2P00001N0000o`03000000000?l0003o00H0003o 00<0oooo0000o`000?l080000?l00`3oool0003o0000o`0?0000o`8000000P000?l600000;00003o 00<000000000o`000?l05`000?l00`3oool0003o0000o`0N0000o`00JP000?l00`3oool0003o0000 o`0D0000o`X00000GP000?l00`000000003o0000o`050000o`030?ooo`000?l0003o0200003o00<0 oooo0000o`000?l03`000?l00`000000003o0000o`030000o`@00000/@000?l00`000000003o0000 o`0G0000o`030?ooo`000?l0003o01h0003o001Z0000o`030?ooo`000?l0003o01@0003o2P00001M 0000o`03000000000?l0003o00D0003o00<0oooo0000o`000?l080000?l00`3oool0003o0000o`0> 0000o`800000_0000?l00`000000003o0000o`0F0000o`030?ooo`000?l0003o01h0003o001[0000 o`030?ooo`000?l0003o01@0003o2000001M0000o`03000000000?l0003o00D0003o00<0oooo0000 o`000?l080000?l00`3oool0003o0000o`0>0000o`03000000000?l0003o0;`0003o1@00000D0000 o`030?ooo`000?l0003o01h0003o001/0000o`030?ooo`000?l0003o01@0003o1P00001M0000o`03 000000000?l0003o00D0003o00<0oooo0000o`000?l07`000?l20?ooo`l0003o0P00002o0000o`H0 00004`000?l00`3oool0003o0000o`0N0000o`00K0000?l00`3oool0003o0000o`0E0000o`D00000 G@000?l00`000000003o0000o`040000o`030?ooo`000?l0003o01l0003o00<0oooo0000o`000?l0 3P000?l00`000000003o0000o`2n0000o`P000004P000?l00`3oool0003o0000o`0N0000o`00K@00 0?l00`3oool0003o0000o`0H0000o`03000000000?l0003o05X0003o00<000000000o`000?l01000 0?l00`3oool0003o0000o`0O0000o`030?ooo`000?l0003o00d0003o0P0000300000o`X000004@00 0?l00`3oool0003o0000o`0N0000o`00KP000?l00`3oool0003o0000o`0G0000o`03000000000?l0 003o05T0003o00<000000000o`000?l010000?l00`3oool0003o0000o`0O0000o`030?ooo`000?l0 003o00`0003o0P0000320000o`X000004P000?l00`3oool0003o0000o`0M0000o`00KP000?l00`3o ool0003o0000o`0H0000o`03000000000?l0003o05L0003o00<000000000o`000?l010000?l00`3o ool0003o0000o`0O0000o`030?ooo`000?l0003o00`0003o00<000000000o`000?l0`P000?l:0000 0180003o00<0oooo0000o`000?l07@000?l006l0003o00<0oooo0000o`000?l05`000?l00`000000 003o0000o`1F0000o`03000000000?l0003o00@0003o00<0oooo0000o`000?l07`000?l00`3oool0 003o0000o`0;0000o`800000a@000?l:00000180003o00<0oooo0000o`000?l07@000?l00700003o 00<0oooo0000o`000?l05P000?l00`000000003o0000o`1F0000o`03000000000?l0003o00<0003o 00<0oooo0000o`000?l07`000?l00`3oool0003o0000o`0;0000o`03000000000?l0003o000003o00<000000000o`000?l0 4@000?l00`3oool0003o0000o`0L0000o`00M`000?l00`3oool0003o0000o`0C0000o`0300000000 0?l0003o04@0003o2P00000O0000o`030?ooo`000?l0003o00X00000g`000?l00`000000003o0000 o`0A0000o`030?ooo`000?l0003o01`0003o001g0000o`030?ooo`000?l0003o01<0003o00<00000 0000o`000?l0A0000?l:000001h0003o00@0oooo0000o`000?l0003o2P00003O0000o`0300000000 0?l0003o0140003o00<0oooo0000o`000?l070000?l007P0003o00<0oooo0000o`000?l04P000?l0 0`000000003o0000o`140000o`X000007@000?l00`3oool0003o0000o`020000o`X00000h0000?l0 0`000000003o0000o`0@0000o`030?ooo`000?l0003o01`0003o001i0000o`030?ooo`000?l0003o 0180003o00<000000000o`000?l0A0000?l8000001d0003o00<0oooo0000o`000?l00`000?l:0000 0>00003o00<000000000o`000?l040000?l00`3oool0003o0000o`0L0000o`00N@000?l00`3oool0 003o0000o`0B0000o`03000000000?l0003o04D0003o1P00000L0000o`80oooo1`000?l800000>40 003o00<000000000o`000?l040000?l00`3oool0003o0000o`0L0000o`00NP000?l00`3oool0003o 0000o`0A0000o`03000000000?l0003o04@0003o00<000000000o`0000000`00000L0000o`030?oo o`000?l0003o00D0003o0P0000000`000?l000000000000400000>80003o00<000000000o`000?l0 40000?l00`3oool0003o0000o`0L0000o`00NP000?l00`3oool0003o0000o`0A0000o`0300000000 0?l0003o04<0003o00@000000000o`000?l0oooo7P000?l00`3oool0003o0000o`050000o`030000 00000?l0003o0080003o1000003T0000o`03000000000?l0003o00l0003o00<0oooo0000o`000?l0 70000?l007/0003o00<0oooo0000o`000?l040000?l400000440003o00D000000000o`000?l0003o 0?ooo`0M0000o`030?ooo`000?l0003o00@0003o0P00003]0000o`03000000000?l0003o00l0003o 00<0oooo0000o`000?l070000?l007`0003o00<0oooo0000o`000?l03P000?l6000003l0003o00D0 00000000o`000?l0003o0?ooo`0M0000o`030?ooo`000?l0003o00@0003o00<000000000o`000?l0 k@000?l00`000000003o0000o`0?0000o`030?ooo`000?l0003o01`0003o001l0000o`030?ooo`00 0?l0003o00d0003o2000000n0000o`04000000000?l0003o0?oooad0003o00<0oooo0000o`000?l0 0`000?l200000?40003o00<000000000o`000?l03P000?l00`3oool0003o0000o`0L0000o`00O@00 0?l00`3oool0003o0000o`0;0000o`X00000?0000?l010000000003o0000o`3ooolM0000o`030?oo o`000?l0003o00<0003o00<000000000o`000?l0l@000?l00`000000003o0000o`0>0000o`030?oo o`000?l0003o01`0003o001n0000o`030?ooo`000?l0003o00X0003o2P00000k0000o`0400000000 0?l0003o0?oooa`0003o0P3oool50000o`03000000000?l0003o0?80003o00<000000000o`000?l0 3P000?l00`3oool0003o0000o`0L0000o`00OP000?l00`3oool0003o0000o`0:0000o`X00000>P00 0?l010000000003o0000o`3ooolL0000o`030?ooo`000?l0003o00<0003o0P00003f0000o`030000 00000?l0003o00h0003o00<0oooo0000o`000?l06`000?l007l0003o00<0oooo0000o`000?l02@00 0?l:000003T0003o00@000000000o`000?l0oooo70000?l00`3oool0003o0000o`030000o`030000 00000?l0003o0?H0003o00<000000000o`000?l03P000?l00`3oool0003o0000o`0K0000o`00P000 0?l00`3oool0003o0000o`090000o`P00000>@000?l010000000003o0000o`3ooolL0000o`030?oo o`000?l0003o0080003o0P00003i0000o`03000000000?l0003o00h0003o00<0oooo0000o`000?l0 6`000?l00800003o00<0oooo0000o`000?l02P000?l6000003X0003o00<000000000o`3oool07000 0?l00`3oool0003o0000o`020000o`03000000000?l0003o0?T0003o00<000000000o`000?l03P00 0?l00`3oool0003o0000o`0K0000o`00P@000?l00`3oool0003o0000o`0:0000o`D00000>@000?l0 0`000000003o0?ooo`0L0000o`040?ooo`000?l0003o0000o`800000o0000?l4000000d0003o00<0 oooo0000o`000?l06`000?l00880003o00<0oooo0000o`000?l03P000?l00`000000003o0000o`0e 0000o`03000000000?l0oooo01`0003o00D0oooo0000o`000?l0003o0000003m0000o`H000003000 0?l00`3oool0003o0000o`0K0000o`00PP000?l00`3oool0003o0000o`0>0000o`03000000000?l0 003o03@0003o00<000000000o`3oool06`000?l20?ooo`<0003o00<000000000o`000?l0n`000?l8 000000/0003o00<0oooo0000o`000?l06`000?l008<0003o00<0oooo0000o`000?l03P000?l00`00 0000003o0000o`0b0000o`03000000000?l0oooo01/0003o00@0oooo0000o`000?l0003o0P00003m 0000o`X000002P000?l00`3oool0003o0000o`0K0000o`00P`000?l00`3oool0003o0000o`0>0000 o`03000000000?l0003o0340003o00<000000000o`3oool06`000?l01@3oool0003o0000o`000?l0 00000?l0003o2P00000:0000o`030?ooo`000?l0003o01/0003o00240000o`030?ooo`000?l0003o 00h0003o00<000000000o`000?l0<0000?l00`000000oooo0000o`0J0000o`030?ooo`000?l0003o 00800000o`000?l10000o`X000002P000?l00`3oool0003o0000o`0K0000o`00Q@000?l00`3oool0 003o0000o`0=0000o`03000000000?l0003o02l0003o00<000000?ooo`000?l06P000?l0103oool0 003o0000o`00003o0000o`<0003o2P00000:0000o`030?ooo`000?l0003o01/0003o00250000o`03 0?ooo`000?l0003o00h0003o00<000000000o`000?l0;@000?l00`000000oooo0000o`0E0000o`@0 000000<0003o0?ooo`000?l00P00003o0000o`D0003o2000000;0000o`030?ooo`000?l0003o01/0 003o00260000o`030?ooo`000?l0003o00d0003o00<000000000o`000?l0;0000?l00`000000oooo 0000o`0E0000o`H0000000<0003o000000000?l0o`000?l70000o`H0000030000?l00`3oool0003o 0000o`0K0000o`00Q`000?l00`3oool0003o0000o`0=0000o`03000000000?l0003o02D0003o1000 00000`000?l000000?ooo`0F0000o`P00000o`000?l:0000o`@000003@000?l00`3oool0003o0000 o`0K0000o`00Q`000?l00`3oool0003o0000o`0=0000o`03000000000?l0003o02@0003o1P000000 0`3oool0003o0000o`0D0000o`X00000o`000?l<0000o`03000000000?l0003o00`0003o00<0oooo 0000o`000?l06P000?l008P0003o00<0oooo0000o`000?l03@000?l00`000000003o0000o`0R0000 o`P000005P000?l:00000?l0003o30000?l00`000000003o0000o`0<0000o`030?ooo`000?l0003o 01X0003o00290000o`030?ooo`000?l0003o00`0003o00<000000000o`000?l08@000?l:000001D0 003o2P00003o0000o``0003o00<000000000o`000?l030000?l00`3oool0003o0000o`0J0000o`00 R@000?l00`3oool0003o0000o`0=0000o`03000000000?l0003o0200003o2P00000E0000o`X00000 o`000?l<0000o`03000000000?l0003o00`0003o00<0oooo0000o`000?l06P000?l008X0003o00<0 oooo0000o`000?l030000?l00`000000003o0000o`0P0000o`X000005@000?l00`3oool000000000 000600000?l0003o3@000?l00`000000003o0000o`0<0000o`030?ooo`000?l0003o01X0003o002; 0000o`030?ooo`000?l0003o00`0003o00<000000000o`000?l07`000?l:000001@0003o00<0oooo 000000000?l01P00003o0000o`h0003o00<000000000o`000?l030000?l00`3oool0003o0000o`0J 0000o`00R`000?l00`3oool0003o0000o`0<0000o`03000000000?l0003o0200003o2000000C0000 o`80oooo10000?l400000?l0003o3`000?l00`000000003o0000o`0<0000o`030?ooo`000?l0003o 01X0003o002<0000o`030?ooo`000?l0003o00`0003o00<000000000o`000?l07`000?l00`3oool0 000000000004000001<0003o00<0oooo000000000?l0o`000?lG0000o`03000000000?l0003o00`0 003o00<0oooo0000o`000?l06P000?l008`0003o00<0oooo0000o`000?l030000?l00`000000003o 0000o`0N0000o`030?ooo`000000003o00@000004`000?l00`3oool0003o0000o`3o0000oaP0003o 00<000000000o`000?l030000?l00`3oool0003o0000o`0J0000o`00S@000?l00`3oool0003o0000 o`0<0000o`03000000000?l0003o01`0003o00<0oooo000000000?l05`000?l00`3oool0003o0000 o`3o0000oaT0003o00<000000000o`000?l030000?l00`3oool0003o0000o`0J0000o`00SP000?l0 0`3oool0003o0000o`0;0000o`03000000000?l0003o01/0003o00<0oooo000000000?l05P000?l0 0`000000oooo0000o`3o0000oa/0003o00<000000000o`000?l030000?l00`3oool0003o0000o`0J 0000o`00SP000?l00`3oool0003o0000o`0<0000o`03000000000?l0003o01T0003o00<0oooo0000 00000?l05P000?l00`000000oooo0000o`3o0000oa`0003o00<000000000o`000?l030000?l00`3o ool0003o0000o`0J0000o`00S`000?l00`3oool0003o0000o`0;0000o`03000000000?l0003o01P0 003o00<0oooo000000000?l05@000?l2000000030?ooo`000?l0003o0?l0003o7@000?l00`000000 003o0000o`0;0000o`030?ooo`000?l0003o01X0003o002@0000o`030?ooo`000?l0003o00/0003o 00<000000000o`000?l05P000?l00`3oool000000000o`0E0000o`030000003oool0oooo0?l0003o 80000?l00`000000003o0000o`0<0000o`030?ooo`000?l0003o01T0003o002@0000o`030?ooo`00 0?l0003o00/0003o1000000D0000o`030?ooo`000000003o01D0003o00<000000?ooo`000?l0o`00 0?lQ0000o`03000000000?l0003o00`0003o00<0oooo0000o`000?l06@000?l00940003o00<0oooo 0000o`000?l02@000?l600000180003o00<0oooo0000o`00000050000?l2000000030?ooo`000?l0 003o0?l0003o8@000?l00`000000003o0000o`0<0000o`030?ooo`000?l0003o01T0003o002B0000 o`030?ooo`000?l0003o00L0003o2000000@0000o`030?ooo`000?l0000001@0003o00<000000000 o`3oool0o`000?lT0000o`03000000000?l0003o00`0003o00<0oooo0000o`000?l06@000?l00980 003o00<0oooo0000o`000?l01P000?l:000000h0003o00<0oooo0000o`00000050000?l00`000000 003o0?ooo`3o0000obD0003o00<000000000o`000?l030000?l00`3oool0003o0000o`0I0000o`00 T`000?l00`3oool0003o0000o`050000o`X000003@000?l00`3oool0003o0000000C0000o`800000 00<0003o0?ooo`000?l0o`000?lU0000o`03000000000?l0003o00`0003o00<0oooo0000o`000?l0 6@000?l009@0003o00<0oooo0000o`000?l010000?l:000000`0003o00<0oooo0000o`0000004`00 0?l010000000003o0000o`3ooooo0000obL0003o00<000000000o`000?l030000?l00`3oool0003o 0000o`0I0000o`00U0000?l00`3oool0003o0000o`040000o`X000002`000?l00`3oool0003o0000 000;0000o`@000000`000?l2000000030000o`3oool0oooo0?l0003o:0000?l00`000000003o0000 o`0<0000o`030?ooo`000?l0003o01T0003o002E0000o`030?ooo`000?l0003o00@0003o2000000; 0000o`030?ooo`000?l0000000/0003o1P0000001@000?l000000000o`000?l0oooo0?l0003o:P00 0?l00`000000003o0000o`0<0000o`030?ooo`000?l0003o01T0003o002E0000o`030?ooo`000?l0 003o00D0003o1`00000:0000o`030?ooo`000?l0000000/0003o200000020000o`030?ooo`000?l0 003o0?l0003o:@000?l00`000000003o0000o`0<0000o`030?ooo`000?l0003o01T0003o002F0000 o`030?ooo`000?l0003o00D0003o100000000`000?l000000000o`060000o`@0000000<0003o0000 00000?l02@000?l:000000030?ooo`000?l0003o0?l0003o:P000?l00`000000003o0000o`0<0000 o`030?ooo`000?l0003o01T0003o002G0000o`030?ooo`000?l0003o00X0003o00<000000000o`00 0?l00`000?l6000000/0003o2P00003o0000obh0003o00<000000000o`000?l02`000?l00`3oool0 003o0000o`0I0000o`00U`000?l00`3oool0003o0000o`0:0000o`03000000000?l0003o0080003o 2000000:0000o`X00000o`000?l^0000o`03000000000?l0003o00/0003o00<0oooo0000o`000?l0 6@000?l009P0003o00<0oooo0000o`000?l02P000?l00`000000003o0000o`0:000000T0003o2P00 003o0000ob`0003o1000000<0000o`030?ooo`000?l0003o01T0003o002I0000o`030?ooo`000?l0 003o00X0003o00<000000000o`0000002@00000:0000o`P00000o`000?l/0000o`H0000030000?l0 0`3oool0003o0000o`0H0000o`00V@000?l00`3oool0003o0000o`0:0000o`03000000000?l00000 00T0000020000?l2000000030000o`000000000000@00000o`000?l/0000o`P000002`000?l00`3o ool0003o0000o`0H0000o`00VP000?l00`3oool0003o0000o`0:0000o`030?ooo`000000000000P0 00001`000?l00`000000003o0000o`020000o`@00000o`000?l/0000o`X000002P000?l00`3oool0 003o0000o`0H0000o`00V`000?l00`3oool0003o0000o`080000o`030?ooo`000?l0000000P00000 1`000?l00`000000003o0000o`020000o`030?ooo`000?l0003o0?l0003o;P000?l:000000X0003o 00<0oooo0000o`000?l060000?l009/0003o00<0oooo0000o`000?l01`000?l00`3oool0003o0000 o`08000000H0003o0P0000040000o`030?ooo`000?l0003o0?l0003o;`000?l:000000X0003o00<0 oooo0000o`000?l060000?l009`0003o00<0oooo0000o`000?l01@000?l0103oool0003o0000o`00 0?l2000000030000o`0000000000008000001P000?l00`000000003o0000o`030000o`030?ooo`00 0?l0003o0?l0003o<0000?l:000000X0003o00<0oooo0000o`000?l060000?l009`0003o00<0oooo 0000o`000?l010000?l00`3oool0003o0000o`020000o`03000000000?l0000000T0003o00<00000 0000o`000?l00`000?l00`3oool0003o0000o`3o0000oc80003o2000000;0000o`030?ooo`000?l0 003o01P0003o002M0000o`030?ooo`000?l0003o0080003o00<0oooo0000o`000?l00P000?l01000 0000003o0000o`0000070000o`80000010000?l20?ooool0003o=P000?l6000000`0003o00<0oooo 0000o`000?l060000?l009h0003o00@0oooo0000o`000?l0oooo10000?l00`000000003o0000o`02 0000o`03000000000?l0003o00<0003o00<000000000o`000?l00`000?l00`3oool0003o0000o`3o 0000ocL0003o1000000=0000o`030?ooo`000?l0003o01P0003o002N0000o`030?ooo`000?l0oooo 00@0003o00<000000000o`000?l00`000?l00`000000003o0000o`020000o`03000000000?l0003o 00<0003o00<0oooo0000o`000?l0o`000?lj0000o`03000000000?l0003o00`0003o00<0oooo0000 o`000?l060000?l009l0003o00<0oooo0000o`000?l00`000?l00`000000003o0000000300000003 0000o`000000003o008000001@000?l00`3oool0003o0000o`3o0000oc/0003o00<000000000o`00 0?l030000?l00`3oool0003o0000o`0H0000o`00WP000?l00`3oool0003o0?ooo`030000o`030000 00000?l0000000D0000000<0003o000000000?l01@000?l00`3oool0003o0000o`3o0000oc`0003o 00<000000000o`000?l030000?l00`3oool0003o0000o`0H0000o`00W@000?l00`3oool000000000 0002000000030000o`000000003o00T000001@000?l00`3oool0003o0000o`3o0000ocd0003o00<0 00000000o`000?l030000?l00`3oool0003o0000o`0H0000o`00W0000?l00`3oool0000000000004 000000030000o`000000000000T000000`000?l00`3oool0003o0000o`3o0000ocd0003o00<00000 0000o`000?l03P000?l00`3oool0003o0000o`0G0000o`00V`000?l00`3oool000000000000@0000 00040000o`000000oooo0?ooool0003o@0000?l00`000000003o0000o`0>0000o`030?ooo`000?l0 003o01L0003o002J0000o`030?ooo`00000000000140000000<0003o0?ooo`000?l0o`000?m10000 o`03000000000?l0003o00h0003o00<0oooo0000o`000?l05`000?l009T0003o00<0oooo0000o`00 00004P0000000`3oool0003o0000003o0000od40003o00<000000000o`000?l03P000?l00`3oool0 003o0000o`0G0000o`00V0000?l00`3oool0003o0000o`0B000000050?ooo`000?l0003o0000o`00 0000o`000?m00000o`03000000000?l0003o00h0003o00<0oooo0000o`000?l05`000?l009L0003o 00@0oooo0000o`000?l0003o2P0000000`000?l0000000000004000000030?ooo`000?l0003o0080 003o00<000000000o`000?l0o`000?ln0000o`03000000000?l0003o00h0003o00<0oooo0000o`00 0?l05`000?l009H0003o00<0oooo0000o`000?l00P000?l9000000030000o`3oool0003o00@00000 00<0oooo0000o`000?l010000?l500000?l0003o>`000?l00`000000003o0000o`0>0000o`030?oo o`000?l0003o01L0003o002E0000o`030?ooo`000?l0003o0080003o2@0000020000o`030?ooo`00 0?l0003o0080003o00<0oooo0000o`000?l01@000?l600000?l0003o>P000?l00`000000003o0000 o`0>0000o`030?ooo`000?l0003o01L0003o002D0000o`030?ooo`000?l0003o0080003o2P000003 0000o`040?ooo`000?l0oooo0?ooo`L0003o2000003o0000ocT0003o00<000000000o`000?l03P00 0?l00`3oool0003o0000o`0G0000o`00T`000?l00`3oool0003o0000o`030000o`X0000010000?l0 0`3oool0003o0000o`060000o`X00000o`000?lh0000o`03000000000?l0003o00h0003o00<0oooo 0000o`000?l05`000?l00980003o00<0oooo0000o`000?l010000?l:000000<0003o0P3oool80000 o`X00000o`000?lh0000o`03000000000?l0003o00h0003o00<0oooo0000o`000?l05`000?l00940 003o00<0oooo0000o`000?l01@000?l:00000080003o00@0oooo0000o`000?l0oooo1`000?l:0000 0?l0003o>0000?l00`000000003o0000o`0>0000o`030?ooo`000?l0003o01L0003o002@0000o`03 0?ooo`000?l0003o00L0003o200000020000o`030?ooo`000?l0003o0080003o00<0oooo0000o`00 0?l010000?l:00000?l0003o>0000?l00`000000003o0000o`0>0000o`030?ooo`000?l0003o01L0 003o002?0000o`030?ooo`000?l0003o00T0003o1P0000020000o`030?ooo`000?l0003o00<0003o 00<0oooo0000o`000?l01@000?l800000?l0003o>@000?l00`000000003o0000o`0>0000o`030?oo o`000?l0003o01L0003o002>0000o`030?ooo`000?l0003o00/0003o100000020000o`030?ooo`00 0?l0003o00D0003o00<0oooo0000o`000?l01@000?l700000?l0003o>@000?l00`000000003o0000 o`0?0000o`030?ooo`000?l0003o01H0003o002=0000o`030?ooo`000?l0003o0100003o0P3oool9 0000o`030?ooo`000?l0003o00D0003o100000000`000?l000000000o`3o0000ocP0003o00<00000 0000o`000?l03`000?l00`3oool0003o0000o`0F0000o`00S0000?l00`3oool0003o0000o`0@0000 o`030?ooo`000?l0003o00T0003o00<0oooo0000o`000?l02`000?l00`000000003o0000o`3o0000 ocH0003o00<000000000o`000?l03`000?l00`3oool0003o0000o`0F0000o`00R`000?l00`3oool0 003o0000o`0@0000o`030?ooo`000?l0003o00/0003o00<0oooo0000o`000?l02`000?l00`000000 003o0000o`3o0000ocD0003o00<000000000o`000?l03`000?l00`3oool0003o0000o`0F0000o`00 RP000?l00`3oool0003o0000o`0@0000o`030?ooo`000?l0003o00d0003o00<0oooo0000o`000?l0 2`000?l00`000000003o0000o`3o0000oc<0003o00<000000000o`000?l040000?l00`3oool0003o 0000o`0F0000o`00R@000?l00`3oool0003o0000o`0@0000o`030?ooo`000?l0003o00h0003o00<0 oooo0000o`000?l030000?l00`000000003o0000o`3o0000oc80003o00<000000000o`000?l04000 0?l00`3oool0003o0000o`0F0000o`00R0000?l00`3oool0003o0000o`0@0000o`030?ooo`000?l0 003o0100003o00<0oooo0000o`000?l030000?l00`000000003o0000o`3o0000oc40003o00<00000 0000o`000?l040000?l00`3oool0003o0000o`0F0000o`00Q`000?l00`3oool0003o0000o`0@0000 o`030?ooo`000?l0003o0140003o00<0oooo0000o`000?l030000?l00`000000003o0000o`3o0000 oc40003o00<000000000o`000?l040000?l00`3oool0003o0000o`0F0000o`00QP000?l00`3oool0 003o0000o`0?0000o`80oooo5@000?l00`3oool0003o0000o`0<0000o`03000000000?l0003o0?l0 003o;P000?l400000140003o00<0oooo0000o`000?l05P000?l008D0003o00<0oooo0000o`000?l0 3`000?l00`3oool0003o0000o`0F0000o`030?ooo`000?l0003o00`0003o00<000000000o`000?l0 o`000?l/0000o`H0000040000?l00`3oool0003o0000o`0F0000o`00Q0000?l00`3oool0003o0000 o`0?0000o`030?ooo`000?l0003o01L0003o00<0oooo0000o`000?l03@000?l00`000000003o0000 o`3o0000obX0003o2000000?0000o`030?ooo`000?l0003o01H0003o00230000o`030?ooo`000?l0 003o00l0003o00<0oooo0000o`000?l06@000?l00`3oool0003o0000o`0=0000o`03000000000?l0 003o0?l0003o:0000?l:000000h0003o00<0oooo0000o`000?l05P000?l00880003o00<0oooo0000 o`000?l03`000?l00`3oool0003o0000o`0K0000o`030?ooo`000?l0003o00d0003o00<000000000 o`000?l0o`000?lW0000o`X000003P000?l00`3oool0003o0000o`0F0000o`00P@000?l00`3oool0 003o0000o`0?0000o`030?ooo`000?l0003o01`0003o00<0oooo0000o`000?l03@000?l00`000000 003o0000o`3o0000obL0003o2P00000?0000o`030?ooo`000?l0003o01D0003o00200000o`030?oo o`000?l0003o00l0003o00<0oooo0000o`000?l07P000?l00`3oool0003o0000o`0=0000o`030000 00000?l0003o0?l0003o9P000?l:000000l0003o00<0oooo0000o`000?l05@000?l007l0003o00<0 oooo0000o`000?l03P000?l20?ooob80003o00<0oooo0000o`000?l03@000?l00`000000003o0000 o`3o0000obH0003o2000000@0000o`030?ooo`000?l0003o01D0003o001n0000o`030?ooo`000?l0 003o00h0003o00<0oooo0000o`000?l08P000?l00`3oool0003o0000o`0>0000o`03000000000?l0 003o0?l0003o9P000?l600000140003o00<0oooo0000o`000?l05@000?l007d0003o00<0oooo0000 o`000?l03P000?l00`3oool0003o0000o`0T0000o`030?ooo`000?l0003o00h0003o00<000000000 o`000?l0o`000?lV0000o`@000004P000?l00`3oool0003o0000o`0E0000o`00O0000?l00`3oool0 003o0000o`0>0000o`030?ooo`000?l0003o02H0003o00<0oooo0000o`000?l03P000?l00`000000 003o0000o`3o0000obH0003o00<000000000o`000?l04P000?l00`3oool0003o0000o`0E0000o`00 N`000?l00`3oool0003o0000o`0>0000o`030?ooo`000?l0003o02L0003o00<0oooo0000o`000?l0 3P000?l00`000000003o0000o`3o0000obH0003o00<000000000o`000?l04P000?l00`3oool0003o 0000o`0E0000o`00NP000?l00`3oool0003o0000o`0>0000o`030?ooo`000?l0003o02T0003o00<0 oooo0000o`000?l03P000?l00`000000003o0000o`3o0000ob@0003o00<000000000o`000?l04`00 0?l00`3oool0003o0000o`0E0000o`00N@000?l00`3oool0003o0000o`0>0000o`030?ooo`000?l0 003o02X0003o00<0oooo0000o`000?l03`000?l00`000000003o0000o`3o0000ob<0003o00<00000 0000o`000?l04`000?l00`3oool0003o0000o`0E0000o`00N0000?l00`3oool0003o0000o`0=0000 o`80oooo;P000?l00`3oool0003o0000o`0?0000o`03000000000?l0003o0?l0003o8P000?l00`00 0000003o0000o`0C0000o`030?ooo`000?l0003o01D0003o001g0000o`030?ooo`000?l0003o00d0 003o00<0oooo0000o`000?l0;`000?l00`3oool0003o0000o`0?0000o`D00000o`000?lO0000o`03 000000000?l0003o01<0003o00<0oooo0000o`000?l05@000?l007H0003o00<0oooo0000o`000?l0 3@000?l00`3oool0003o0000o`0`0000o`030?ooo`000?l0003o00l0003o1P00003o0000oad0003o 00<000000000o`000?l050000?l00`3oool0003o0000o`0E0000o`00M@000?l00`3oool0003o0000 o`0=0000o`030?ooo`000?l0003o0380003o00<0oooo0000o`000?l03@000?l800000?l0003o7000 0?l00`000000003o0000o`0D0000o`030?ooo`000?l0003o01D0003o001d0000o`030?ooo`000?l0 003o00d0003o00<0oooo0000o`000?l0=0000?l00`3oool0003o0000o`0;0000o`X00000o`000?lK 0000o`03000000000?l0003o01@0003o00<0oooo0000o`000?l05@000?l007<0003o00<0oooo0000 o`000?l03@000?l00`3oool0003o0000o`0e0000o`030?ooo`000?l0003o00/0003o2P00003o0000 oa/0003o00<000000000o`000?l05@000?l00`3oool0003o0000o`0D0000o`00LP000?l00`3oool0 003o0000o`0=0000o`030?ooo`000?l0003o03L0003o00<0oooo0000o`000?l02P000?l:00000?l0 003o6P000?l00`000000003o0000o`0F0000o`030?ooo`000?l0003o01@0003o001a0000o`030?oo o`000?l0003o00`0003o0P3ooolk0000o`030?ooo`000?l0003o00T0003o2P00003o0000oaX0003o 00<000000000o`000?l05P000?l00`3oool0003o0000o`0D0000o`00L0000?l00`3oool0003o0000 o`0<0000o`030?ooo`000?l0003o03/0003o00<0oooo0000o`000?l02P000?l800000?l0003o6`00 0?l00`000000003o0000o`0F0000o`030?ooo`000?l0003o01@0003o001_0000o`030?ooo`000?l0 003o00`0003o00<0oooo0000o`000?l0?@000?l00`3oool0003o0000o`0:0000o`H0000000<0003o 000000000?l0o`000?lI0000o`03000000000?l0003o01H0003o00<0oooo0000o`000?l050000?l0 06h0003o00<0oooo0000o`000?l030000?l00`3oool0003o0000o`0n0000o`030?ooo`000?l0003o 00/0003o100000030000o`03000000000?l0003o0?l0003o5`000?l00`000000003o0000o`0F0000 o`030?ooo`000?l0003o01@0003o001]0000o`030?ooo`000?l0003o00`0003o00<0oooo0000o`00 0?l0@0000?l00`3oool0003o0000o`0B0000o`03000000000?l0003o0?l0003o5@000?l00`000000 003o0000o`0G0000o`030?ooo`000?l0003o01@0003o001/0000o`030?ooo`000?l0003o00`0003o 00<0oooo0000o`000?l0@P000?l00`3oool0003o0000o`0B0000o`03000000000?l0003o0?l0003o 50000?l00`000000003o0000o`0G0000o`030?ooo`000?l0003o01@0003o001[0000o`030?ooo`00 0?l0003o00`0003o00<0oooo0000o`000?l0@`000?l00`3oool0003o0000o`0C0000o`0300000000 0?l0003o0?l0003o4`000?l00`000000003o0000o`0G0000o`030?ooo`000?l0003o01@0003o001Z 0000o`030?ooo`000?l0003o00/0003o0P3ooom70000o`030?ooo`000?l0003o01<0003o00<00000 0000o`000?l0o`000?lB0000o`03000000000?l0003o01L0003o00<0oooo0000o`000?l050000?l0 06T0003o00<0oooo0000o`000?l02`000?l00`3oool0003o0000o`180000o`030?ooo`000?l0003o 01<0003o00<000000000o`000?l0o`000?l@0000o`03000000000?l0003o01P0003o00<0oooo0000 o`000?l050000?l006P0003o00<0oooo0000o`000?l02`000?l00`3oool0003o0000o`190000o`03 0?ooo`000?l0003o01@0003o00<000000000o`000?l0o`000?l?0000o`03000000000?l0003o01P0 003o00<0oooo0000o`000?l050000?l006L0003o00<0oooo0000o`000?l02`000?l00`3oool0003o 0000o`1;0000o`030?ooo`000?l0003o01@0003o00<000000000o`000?l0o`000?l>0000o`030000 00000?l0003o01P0003o00<0oooo0000o`000?l050000?l006H0003o00<0oooo0000o`000?l02`00 0?l00`3oool0003o0000o`1=0000o`030?ooo`000?l0003o01@0003o00<000000000o`000?l0o`00 0?l=0000o`03000000000?l0003o01T0003o00<0oooo0000o`000?l04`000?l006D0003o00<0oooo 0000o`000?l02`000?l00`3oool0003o0000o`1>0000o`030?ooo`000?l0003o01D0003o00<00000 0000o`000?l0o`000?l;0000o`03000000000?l0003o01X0003o00<0oooo0000o`000?l04`000?l0 06@0003o00<0oooo0000o`000?l02`000?l00`3oool0003o0000o`1@0000o`030?ooo`000?l0003o 01@0003o00<000000000o`000?l0o`000?l;0000o`03000000000?l0003o01X0003o00<0oooo0000 o`000?l04`000?l006<0003o00<0oooo0000o`000?l02P000?l20?oooe@0003o00<0oooo0000o`00 0?l050000?l00`000000003o0000o`3o0000o`L0003o1000000L0000o`030?ooo`000?l0003o01<0 003o001R0000o`030?ooo`000?l0003o00X0003o00<0oooo0000o`000?l0E0000?l00`3oool0003o 0000o`0E0000o`03000000000?l0003o0?l0003o1@000?l6000001/0003o00<0oooo0000o`000?l0 4`000?l00640003o00<0oooo0000o`000?l02P000?l00`3oool0003o0000o`1F0000o`030?ooo`00 0?l0003o01D0003o00<000000000o`000?l0o`000?l30000o`P000006P000?l00`3oool0003o0000 o`0C0000o`00H0000?l00`3oool0003o0000o`0:0000o`030?ooo`000?l0003o05L0003o00<0oooo 0000o`000?l05P000?l00`000000003o0000o`3o0000o`40003o2P00000I0000o`030?ooo`000?l0 003o01<0003o001O0000o`030?ooo`000?l0003o00X0003o00<0oooo0000o`000?l0F@000?l00`3o ool0003o0000o`0F0000o`03000000000?l0003o0?l0003o2P00000I0000o`030?ooo`000?l0003o 01<0003o001N0000o`030?ooo`000?l0003o00X0003o00<0oooo0000o`000?l0F`000?l00`3oool0 003o0000o`0F0000o`03000000000?l0003o0?h0003o2P00000I0000o`030?ooo`000?l0003o01<0 003o001M0000o`030?ooo`000?l0003o00X0003o00<0oooo0000o`000?l0G0000?l00`3oool0003o 0000o`0G0000o`03000000000?l0003o0?d0003o2P00000I0000o`030?ooo`000?l0003o01<0003o 001L0000o`030?ooo`000?l0003o00T0003o0P3ooomP0000o`030?ooo`000?l0003o01L0003o00<0 00000000o`000?l0o@000?l8000001X0003o00<0oooo0000o`000?l04`000?l005/0003o00<0oooo 0000o`000?l02@000?l00`3oool0003o0000o`1Q0000o`030?ooo`000?l0003o01L0003o00<00000 0000o`000?l0o@000?l6000001/0003o00<0oooo0000o`000?l04`000?l005X0003o00<0oooo0000 o`000?l02@000?l00`3oool0003o0000o`1R0000o`030?ooo`000?l0003o01P0003o00<000000000 o`0000000`00003j0000o`@0000070000?l00`3oool0003o0000o`0C0000o`00F@000?l00`3oool0 003o0000o`090000o`030?ooo`000?l0003o06@0003o00<0oooo0000o`000?l060000?l600000?T0 003o00<000000000o`000?l07@000?l00`3oool0003o0000o`0C0000o`00F0000?l00`3oool0003o 0000o`090000o`030?ooo`000?l0003o06H0003o00<0oooo0000o`000?l05P000?l800000?L0003o 00<000000000o`000?l07`000?l00`3oool0003o0000o`0B0000o`00E`000?l00`3oool0003o0000 o`090000o`030?ooo`000?l0003o06L0003o00<0oooo0000o`000?l05@000?l:00000?H0003o00<0 00000000o`000?l07`000?l00`3oool0003o0000o`0B0000o`00EP000?l00`3oool0003o0000o`09 0000o`030?ooo`000?l0003o06T0003o00<0oooo0000o`000?l050000?l:00000?D0003o00<00000 0000o`000?l080000?l00`3oool0003o0000o`0B0000o`00E@000?l00`3oool0003o0000o`080000 o`80ooooK@000?l00`3oool0003o0000o`0C0000o`X00000m@000?l00`000000003o0000o`0P0000 o`030?ooo`000?l0003o0180003o001D0000o`030?ooo`000?l0003o00P0003o00<0oooo0000o`00 0?l0K@000?l00`3oool0003o0000o`0C0000o`X00000m@000?l00`000000003o0000o`0P0000o`03 0?ooo`000?l0003o0180003o001C0000o`030?ooo`000?l0003o00P0003o00<0oooo0000o`000?l0 K`000?l00`3oool0003o0000o`0C0000o`T00000m0000?l00`000000003o0000o`0Q0000o`030?oo o`000?l0003o0180003o001B0000o`030?ooo`000?l0003o00P0003o00<0oooo0000o`000?l0L000 0?l00`3oool0003o0000o`0D0000o`H000000P000?l00`000000003o0000o`3a0000o`0300000000 0?l0003o0240003o00<0oooo0000o`000?l04P000?l00540003o00<0oooo0000o`000?l020000?l0 0`3oool0003o0000o`1b0000o`030?ooo`000?l0003o01@0003o100000040000o`03000000000?l0 003o0>l0003o00<000000000o`000?l08P000?l00`3oool0003o0000o`0B0000o`00D0000?l00`3o ool0003o0000o`080000o`030?ooo`000?l0003o07@0003o00<0oooo0000o`000?l070000?l00`00 0000003o0000o`3^0000o`03000000000?l0003o0280003o00<0oooo0000o`000?l04P000?l00500 003o00<0oooo0000o`000?l01`000?l00`3oool0003o0000o`1e0000o`030?ooo`000?l0003o01d0 003o0P00003^0000o`03000000000?l0003o0280003o00<0oooo0000o`000?l04P000?l004l0003o 00<0oooo0000o`000?l01P000?l20?ooogT0003o00<0oooo0000o`000?l07P000?l00`000000003o 0000o`3Z0000o`03000000000?l0003o02<0003o00<0oooo0000o`000?l04P000?l004h0003o00<0 oooo0000o`000?l01P000?l00`3oool0003o0000o`1j0000o`030?ooo`000?l0003o01h0003o00<0 00000000o`000?l0j@000?l00`000000003o0000o`0S0000o`030?ooo`000?l0003o0180003o001= 0000o`030?ooo`000?l0003o00H0003o00<0oooo0000o`000?l0N`000?l00`3oool0003o0000o`0O 0000o`03000000000?l0003o0>L0003o00<000000000o`000?l090000?l00`3oool0003o0000o`0B 0000o`00C0000?l00`3oool0003o0000o`060000o`030?ooo`000?l0003o07d0003o00<0oooo0000 o`000?l07`000?l00`000000003o0000o`3V0000o`03000000000?l0003o02D0003o00<0oooo0000 o`000?l04@000?l004/0003o00<0oooo0000o`000?l01P000?l00`3oool0003o0000o`1o0000o`03 0?ooo`000?l0003o01l0003o0P00003V0000o`03000000000?l0003o02D0003o00<0oooo0000o`00 0?l04@000?l004X0003o00<0oooo0000o`000?l01P000?l00`3oool0003o0000o`200000o`030?oo o`000?l0003o0240003o00<000000000o`000?l0hP000?l00`000000003o0000o`0V0000o`030?oo o`000?l0003o0140003o00190000o`030?ooo`000?l0003o00H0003o00<0oooo0000o`000?l0PP00 0?l00`3oool0003o0000o`0Q0000o`03000000000?l0003o0>40003o00<000000000o`000?l09P00 0?l00`3oool0003o0000o`0A0000o`00B0000?l00`3oool0003o0000o`050000o`80ooooQP000?l0 0`3oool0003o0000o`0Q0000o`03000000000?l0003o0=l0003o00<000000000o`000?l09`000?l0 0`3oool0003o0000o`0A0000o`00A`000?l00`3oool0003o0000o`050000o`030?ooo`000?l0003o 08H0003o00<0oooo0000o`000?l08P000?l00`000000003o0000o`3N0000o`03000000000?l0003o 02L0003o00<0oooo0000o`000?l04@000?l004H0003o00<0oooo0000o`000?l01@000?l00`3oool0 003o0000o`280000o`030?ooo`000?l0003o0280003o0P00003J0000o`D00000:@000?l00`3oool0 003o0000o`0A0000o`00A@000?l00`3oool0003o0000o`050000o`030?ooo`000?l0003o08T0003o 00<0oooo0000o`000?l090000?l00`000000003o0000o`3F0000o`H00000:@000?l00`3oool0003o 0000o`0A0000o`00A0000?l00`3oool0003o0000o`050000o`030?ooo`000?l0003o08/0003o00<0 oooo0000o`000?l090000?l00`000000003o0000o`3D0000o`P00000:0000?l00`3oool0003o0000 o`0A0000o`00@`000?l00`3oool0003o0000o`050000o`030?ooo`000?l0003o08d0003o00<0oooo 0000o`000?l090000?l00`000000003o0000o`0400000P000?l00`3oool0003o0000o`030000o`80ooooWP000?l00`3oool0003o0000 o`0R0000o`@000001@000?l200000@000?l00`3oool0003o0000o`030000o`030?ooo`000?l0003o09l0003o00<0oooo 0000o`000?l0;0000?l200000<<0003o00<000000000o`000?l0<@000?l00`3oool0003o0000o`0@ 0000o`00>0000?l00`3oool0003o0000o`030000o`030?ooo`000?l0003o0:40003o00<0oooo0000 o`000?l0;@000?l00`000000003o0000o`2o0000o`03000000000?l0003o0380003o00<0oooo0000 o`000?l040000?l003L0003o00<0oooo0000o`000?l00`000?l00`3oool0003o0000o`2R0000o`03 0?ooo`000?l0003o02h0003o0P00002n0000o`03000000000?l0003o03<0003o00<0oooo0000o`00 0?l040000?l003H0003o00<0oooo0000o`000?l00`000?l00`3oool0003o0000o`2T0000o`030?oo o`000?l0003o02l0003o00<000000000o`000?l0^`000?l00`000000003o0000o`0c0000o`030?oo o`000?l0003o0100003o000e0000o`030?ooo`000?l0003o00<0003o00<0oooo0000o`000?l0YP00 0?l00`3oool0003o0000o`0_0000o`800000^P000?l00`000000003o0000o`0d0000o`030?ooo`00 0?l0003o0100003o000d0000o`030?ooo`000?l0003o00<0003o00<0oooo0000o`000?l0Y`000?l0 0`3oool0003o0000o`0a0000o`03000000000?l0003o0;H0003o00<000000000o`000?l0=@000?l0 0`3oool0003o0000o`0@0000o`00<`000?l00`3oool0003o0000o`020000o`80ooooZ`000?l00`3o ool0003o0000o`0a0000o`800000]@000?l00`000000003o0000o`0f0000o`030?ooo`000?l0003o 0100003o000b0000o`030?ooo`000?l0003o0080003o00<0oooo0000o`000?l0[0000?l00`3oool0 003o0000o`0b0000o`03000000000?l0003o0;40003o00<000000000o`000?l0=`000?l00`3oool0 003o0000o`0@0000o`00<@000?l00`3oool0003o0000o`020000o`030?ooo`000?l0003o0:d0003o 00<0oooo0000o`000?l0<`000?l200000;40003o00<000000000o`000?l0>0000?l00`3oool0003o 0000o`0?0000o`00<0000?l00`3oool0003o0000o`020000o`030?ooo`000?l0003o0:l0003o00<0 oooo0000o`000?l0=0000?l200000:h0003o00<000000000o`000?l0>@000?l00`3oool0003o0000 o`0?0000o`00;`000?l00`3oool0003o0000o`020000o`030?ooo`000?l0003o0;40003o00<0oooo 0000o`000?l0=@000?l010000000003o0000o`000?l400000:00003o100000000`000?l000000000 o`0k0000o`030?ooo`000?l0003o00l0003o000^0000o`030?ooo`000?l0003o0080003o00<0oooo 0000o`000?l0/P000?l00`3oool0003o0000o`0f0000o`P00000WP000?l6000003d0003o00<0oooo 0000o`000?l03`000?l002d0003o00<0oooo0000o`000?l00P000?l00`3oool0003o0000o`2d0000 o`030?ooo`000?l0003o03H0003o2000002L0000o`P00000?0000?l00`3oool0003o0000o`0?0000 o`00;0000?l0103oool0003o0000o`000?l20?oookL0003o00<0oooo0000o`000?l0=@000?l:0000 09X0003o2P00000k0000o`030?ooo`000?l0003o00l0003o000[0000o`050?ooo`000?l0003o0000 o`3oool0^P000?l00`3oool0003o0000o`0d0000o`X00000VP000?l:000003/0003o00<0oooo0000 o`000?l03`000?l002X0003o00D0oooo0000o`000?l0003o0?ooo`2l0000o`030?ooo`000?l0003o 03<0003o2P00002J0000o`X00000>`000?l00`3oool0003o0000o`0?0000o`00:@000?l01@3oool0 003o0000o`000?l0oooo0;d0003o00<0oooo0000o`000?l0<`000?l;000009T0003o2P00000k0000 o`030?ooo`000?l0003o00l0003o000X0000o`050?ooo`000?l0003o0000o`3oool0_`000?l00`3o ool0003o0000o`0c0000o`P000000P000?l2000009P0003o2000000l0000o`030?ooo`000?l0003o 00l0003o000W0000o`050?ooo`000?l0003o0000o`3oool0`@000?l00`3oool0003o0000o`0c0000 o`H000001@000?l2000009D0003o00<000000000o`0000001@00000m0000o`030?ooo`000?l0003o 00l0003o000V0000o`050?ooo`000?l0003o0000o`3oool0`P000?l00`3oool0003o0000o`0d0000 o`@0000020000?l200000940003o0P0000030000o`@00000?P000?l00`3oool0003o0000o`0?0000 o`009@000?l00`3oool0003o0000o`020?oool@0003o00<0oooo0000o`000?l0@@000?l2000008h0 003o00<000000000o`000?l0A@000?l00`3oool0003o0000o`0?0000o`0090000?l0103oool0003o 0000o`3oooo70000o`030?ooo`000?l0003o0480003o0P00002;0000o`03000000000?l0003o04L0 003o00<0oooo0000o`000?l03P000?l002<0003o00@0oooo0000o`000?l0oooob0000?l00`3oool0 003o0000o`140000o`800000Q`000?l2000004X0003o00<0oooo0000o`000?l03P000?l00280003o 00@0oooo0000o`000?l0oooobP000?l00`3oool0003o0000o`150000o`800000Q0000?l00`000000 003o0000o`1:0000o`030?ooo`000?l0003o00h0003o000Q0000o`040?ooo`000?l0003o0?oool`0 003o00<0oooo0000o`000?l0AP000?l2000000L0003o1000001f0000o`03000000000?l0003o04/0 003o00<0oooo0000o`000?l03P000?l00200003o00@0oooo0000o`000?l0ooooc@000?l00`3oool0 003o0000o`180000o`80000010000?l6000006/0003o100000040000o`800000CP000?l00`3oool0 003o0000o`0>0000o`007`000?l0103oool0003o0000o`3oooo?0000o`030?ooo`000?l0003o04T0 003o0P0000000`000?l0000000000006000006T0003o1P0000020000o`03000000000?l0003o04h0 003o00<0oooo0000o`000?l03P000?l001h0003o00@0oooo0000o`3oool0ooood0000?l00`3oool0 003o0000o`1;0000o`X00000I`000?l900000540003o00<0oooo0000o`000?l03P000?l001d0003o 00<0oooo0000o`3oool0d`000?l00`3oool0003o0000o`1:0000o`X00000IP000?l:00000540003o 00<0oooo0000o`000?l03P000?l001`0003o00<0oooo0000o`3oool0e@000?l00`3oool0003o0000 o`190000o`X00000IP000?l:00000540003o00<0oooo0000o`000?l03P000?l001/0003o00<0oooo 0000o`3oool0eP000?l00`3oool0003o0000o`190000o`/00000I@000?l:00000540003o00<0oooo 0000o`000?l03P000?l001X0003o00<0oooo0000o`3oool0f0000?l00`3oool0003o0000o`190000 o`P000000P000?l300000680003o2P00001A0000o`030?ooo`000?l0003o00h0003o000I0000o`03 0?ooo`000?l0oooo0=X0003o00<0oooo0000o`000?l0B@000?l6000000H0003o1000001M0000o`X0 0000DP000?l00`3oool0003o0000o`0>0000o`0060000?l00`3oool0003o0?ooo`3K0000o`030?oo o`000?l0003o04X0003o1000000;0000o`<00000E`000?l3000000<0003o1P00001C0000o`030?oo o`000?l0003o00h0003o000G0000o`<0oooog@000?l00`3oool0003o0000o`1K0000o`<000002P00 0?l4000003@0003o1000000;0000o`<000001`000?l4000005@0003o00<0oooo0000o`000?l03P00 0?l001H0003o0P3ooooP0000o`030?ooo`000?l0003o05d0003o100000050000o`H00000000000030000o`000000 000000P00000J`000?l00`3oool0003o0000o`0=0000o`0040000?l20?ooonT0003o00<0oooo0000 o`000?l0HP000?l8000001@0003o3000000@0000o`P00000K0000?l00`3oool0003o0000o`0=0000 o`003`000?l00`3oool0003o0000o`3Z0000o`030?ooo`000?l0003o0680003o1P00000E0000o`X0 00004`000?l6000006d0003o00<0oooo0000o`000?l03@000?l000h0003o00<0oooo0000o`000?l0 k0000?l00`3oool0003o0000o`1R0000o`@000005P000?l:000001@0003o1000001^0000o`030?oo o`000?l0003o00d0003o000=0000o`030?ooo`000?l0003o0>d0003o00<0oooo0000o`000?l0O@00 0?l8000008L0003o00<0oooo0000o`000?l03@000?l000`0003o00<0oooo0000o`000?l0k`000?l6 0?ooogX0003o1P0000280000o`030?ooo`000?l0003o00d0003o003o0000o`D0003o303ooom_0000 o`@00000R@000?l00`3oool0003o0000o`0=0000o`00o`000?lA0000o``0ooool0000?l00`3oool0 003o0000o`0=0000o`00o`000?lM0000o``0ooooi@000?l00`3oool0003o0000o`0<0000o`00o`00 0?lY0000o``0oooof@000?l00`3oool0003o0000o`0<0000o`00o`000?le0000o``0ooooc@000?l0 0`3oool0003o0000o`0<0000o`00o`000?m10000o`/0oooo`P000?l00`3oool0003o0000o`0<0000 o`00o`000?m<0000o``0oooo]P000?l00`3oool0003o0000o`0<0000o`00o`000?mH0000o``0oooo ZP000?l00`3oool0003o0000o`0<0000o`00o`000?mT0000o``0ooooWP000?l00`3oool0003o0000 o`0<0000o`00o`000?m`0000o``0ooooTP000?l00`3oool0003o0000o`0<0000o`00o`000?ml0000 o``0ooooQP000?l00`3oool0003o0000o`0<0000o`00o`000?n80000o`/0ooooN`000?l00`3oool0 003o0000o`0<0000o`00o`000?nC0000o``0ooooK`000?l00`3oool0003o0000o`0<0000o`00o`00 0?nO0000o``0ooooH`000?l00`3oool0003o0000o`0<0000o`00o`000?n[0000o``0ooooE`000?l0 0`3oool0003o0000o`0<0000o`00o`000?ng0000o``0ooooB`000?l00`3oool0003o0000o`0<0000 o`00o`000?o30000o`/0oooo@@000?l00`3oool0003o0000o`0;0000o`00o`000?o>0000o``0oooo =@000?l00`3oool0003o0000o`0;0000o`00o`000?oJ0000o``0oooo:@000?l00`3oool0003o0000 o`0;0000o`00o`000?oV0000o``0oooo7@000?l00`3oool0003o0000o`0;0000o`00o`000?ob0000 o``0oooo4@000?l00`3oool0003o0000o`0;0000o`00o`000?on0000o``0oooo1@000?l00`3oool0 003o0000o`0;0000o`00o`000?oo0000o`/0003o1P3oool=0000o`00o`000?oo0000oah0003o003o 0000ool0003o7P000?l00?l0003oo`000?lN0000o`00o`000?oo0000oah0003o003o0000ool0003o 7P000?l00?l0003oo`000?lN0000o`00o`000?oo0000oah0003o003o0000ool0003o7P000?l00?l0 003oo`000?lN0000o`00o`000?oo0000oah0003o003o0000ool0003o7P000?l00?l0003oo`000?lN 0000o`00\ \>"], ImageRangeCache->{{{0, 539}, {539, 0}} -> {0.21502, -0.0227394, 0.00173295, 0.00221443}}]], "Input", ShowSelection->False, Background->RGBColor[0, 0, 1], CellTags->"viewport"], Cell["The buttons below control the interactive subdivider", "Text"], Cell[BoxData[ StyleBox[GridBox[{ { ButtonBox[\(make\ square\), ButtonFunction:>Function[ {}, dispPolygon[ Set[ thePolygon, Set[ initPolygon, square]]]], ButtonEvaluator->Automatic], ButtonBox[\(make\ eight\), ButtonFunction:>Function[ {}, dispPolygon[ Set[ thePolygon, Set[ initPolygon, eight]]]], ButtonEvaluator->Automatic], ButtonBox[\(make\ random\), ButtonFunction:>Function[ {}, dispPolygon[ Set[ thePolygon, Set[ initPolygon, Table[ { Random[ Real], Random[ Real]}, {i, Random[ Integer, {3, 10}]}]]]]], ButtonEvaluator->Automatic]}, { ButtonBox[\(linear\ subdivision\), ButtonFunction:>Function[ {}, dispPolygon[ Set[ thePolygon, linearSub[ thePolygon]]]], ButtonEvaluator->Automatic], ButtonBox[\(quadratic\ average\), ButtonFunction:>Function[ {}, dispPolygon[ Set[ thePolygon, quadAver[ thePolygon]]]], ButtonEvaluator->Automatic], ButtonBox[\(cubic\ subdivision\), ButtonFunction:>Function[ {}, dispPolygon[ Set[ thePolygon, cubicSub[ thePolygon]]]], ButtonEvaluator->Automatic]} }, RowSpacings->2, ColumnSpacings->2, RowLines->True, ColumnLines->True], Background->GrayLevel[0.900008]]], "Input", Active->True] }, Closed]] }, Open ]] }, Open ]] }, FrontEndVersion->"4.0 for Microsoft Windows", ScreenRectangle->{{0, 1280}, {0, 951}}, AutoGeneratedPackage->None, WindowSize->{1015, 668}, WindowMargins->{{0, Automatic}, {Automatic, 0}}, Magnification->1.25, StyleDefinitions -> Notebook[{ Cell[CellGroupData[{ Cell["Style Definitions", "Subtitle"], Cell["\<\ Modify the definitions below to change the default appearance of all cells in \ a given style. Make modifications to any definition using commands in the \ Format menu.\ \>", "Text"], Cell[CellGroupData[{ Cell["Style Environment Names", "Section"],