(* Content-type: application/mathematica *) (*** Wolfram Notebook File ***) (* http://www.wolfram.com/nb *) (* CreatedBy='Mathematica 7.0' *) (*CacheID: 234*) (* Internal cache information: NotebookFileLineBreakTest NotebookFileLineBreakTest NotebookDataPosition[ 145, 7] NotebookDataLength[ 23223, 661] NotebookOptionsPosition[ 19803, 543] NotebookOutlinePosition[ 20651, 573] CellTagsIndexPosition[ 20525, 567] WindowFrame->Normal*) (* Beginning of Notebook Content *) Notebook[{ Cell[CellGroupData[{ Cell[TextData[{ "Controling the NXT from within ", StyleBox["Mathematica:", FontSlant->"Italic"], " First steps." }], "Title", CellChangeTimes->{{3.52477821825*^9, 3.524778228328125*^9}, { 3.52518680196875*^9, 3.52518680459375*^9}, {3.5276246927176356`*^9, 3.527624696336842*^9}}], Cell["A How-to guide.", "Subsubtitle", CellChangeTimes->{{3.524778253109375*^9, 3.5247782618125*^9}}], Cell[CellGroupData[{ Cell["The first time you connext a NXT to this computer", "Section", CellChangeTimes->{{3.5247732335625*^9, 3.524773235*^9}, { 3.524773344078125*^9, 3.524773358578125*^9}, {3.52518636946875*^9, 3.525186380546875*^9}}], Cell[CellGroupData[{ Cell["First step", "Subsection", CellChangeTimes->{{3.52518638534375*^9, 3.525186386859375*^9}}], Cell[TextData[{ "If not already done, copy the package SerialIO in one directory used by ", StyleBox["Mathematica", FontSlant->"Italic"], ", e.g. C:\\Program Files\\Wolfram \ Research\\Mathematica\\7.0\\AddOns\\Packages. Rename the program SerialIO \ found in Microsoft as SerialIO.exe, so that it can run on your operating \ system." }], "Text", CellChangeTimes->{{3.524773248515625*^9, 3.5247733374375*^9}}] }, Open ]], Cell[CellGroupData[{ Cell["Second step", "Subsection", CellChangeTimes->{{3.52477336215625*^9, 3.524773363359375*^9}, { 3.52518639290625*^9, 3.525186393953125*^9}}], Cell["\<\ Turn on the NXT, activate Bluetooth using the Settings option. On your PC, \ open the Bluetooth panel and look for devices. Find the NXT device, and \ activate a connection, choose the DEV service offered by the NXT (the only \ service anyway). If you need an appariement code, use the default of the NXT, \ \"1234\". The connection should be established and a virtual communication \ (COM) port created.\ \>", "Text", CellChangeTimes->{{3.524773365515625*^9, 3.524773382703125*^9}, { 3.52477341409375*^9, 3.524773544609375*^9}, {3.5251864076875*^9, 3.525186409609375*^9}, {3.525186515*^9, 3.525186538390625*^9}}] }, Open ]], Cell[CellGroupData[{ Cell["Third step", "Subsection", CellChangeTimes->{{3.52477354634375*^9, 3.5247735503125*^9}, { 3.5251863973125*^9, 3.52518639790625*^9}}], Cell["\<\ Get the port number used to communicate between the computer and the NXT. It \ is written between parenthesis in the Bluetooth panel (e.g. \"COM12\"). \ Alternativaly, on Windows, you can go to Accesories/System tools/System \ information. To to the section Summary/Components/Port/Serial. The com ports \ currently in used are listed there with their properties. The port number is \ arbitrary but will remains constant for that NXT and that computer. You can \ now close the connection (disconnect).\ \>", "Text", CellChangeTimes->{{3.524773560265625*^9, 3.52477369871875*^9}, { 3.524774244640625*^9, 3.5247742615*^9}, {3.525186425109375*^9, 3.525186452609375*^9}}] }, Open ]] }, Open ]], Cell[CellGroupData[{ Cell[TextData[{ "Connecting ", StyleBox["Mathematica", FontSlant->"Italic"], " to a NXT" }], "Section", CellChangeTimes->{{3.524773709296875*^9, 3.524773714828125*^9}, { 3.52518646625*^9, 3.525186476703125*^9}}], Cell[CellGroupData[{ Cell["First step: Load a Serial communication package", "Subsection", CellChangeTimes->{{3.525186484671875*^9, 3.52518648596875*^9}, { 3.52518663425*^9, 3.525186643203125*^9}}], Cell[TextData[{ "In ", StyleBox["Mathematica", FontSlant->"Italic"], ", you must start the package that can communicate with the serial ports of \ your computer, SerialIO, installed above:" }], "Text", CellChangeTimes->{{3.52477372015625*^9, 3.524773721484375*^9}, { 3.5247737903125*^9, 3.52477382925*^9}, {3.5251864938125*^9, 3.52518649859375*^9}}], Cell[BoxData[ RowBox[{"<<", " ", "SerialIO`"}]], "Input", CellChangeTimes->{{3.52477316978125*^9, 3.5247731895625*^9}}], Cell["\<\ This program needs to start the .exe relevant to you computer that will \ handle the communications. When the \[OpenCurlyDoubleQuote]Choose a mathlink \ program to start\[CloseCurlyDoubleQuote] dialog appears, locate the program \ corresponding to your operation system under the SerialIO folder.\ \>", "Text", CellChangeTimes->{{3.52477383884375*^9, 3.524773857140625*^9}, { 3.52518656828125*^9, 3.52518657978125*^9}, {3.5277204420947747`*^9, 3.527720500241101*^9}, {3.5277206823155146`*^9, 3.527720692147077*^9}}], Cell["To know what commands are available from this package, use", "Text", CellChangeTimes->{{3.524773860484375*^9, 3.524773884609375*^9}}], Cell[CellGroupData[{ Cell[BoxData[ RowBox[{"Names", "[", "\"\\"", "]"}]], "Input", CellChangeTimes->{{3.52477388621875*^9, 3.5247738985625*^9}, { 3.52477399240625*^9, 3.524774000015625*^9}}], Cell[BoxData[ RowBox[{"{", RowBox[{"\<\"SerialClose\"\>", ",", "\<\"SerialOpen\"\>", ",", "\<\"SerialPort\"\>", ",", "\<\"SerialRead\"\>", ",", "\<\"SerialReadyQ\"\>", ",", "\<\"SerialSetOptions\"\>", ",", "\<\"SerialWrite\"\>"}], "}"}]], "Output", CellChangeTimes->{ 3.52477400096875*^9, 3.524776908171875*^9, 3.52477800471875*^9, { 3.52512653984375*^9, 3.525126547796875*^9}, 3.525186583890625*^9, 3.525515240866752*^9, 3.5255152871832333`*^9}] }, Open ]], Cell["\<\ Sadly, the author of this package hasn't provided any usage information with \ these commands:\ \>", "Text", CellChangeTimes->{{3.52477400684375*^9, 3.5247740336875*^9}}], Cell[CellGroupData[{ Cell[BoxData[ RowBox[{"?", " ", "SerialClose"}]], "Input", CellChangeTimes->{{3.5247740354375*^9, 3.524774041375*^9}}], Cell[BoxData[ StyleBox["\<\"\"\>", "MSG"]], "Print", "PrintUsage", CellChangeTimes->{3.5255152433471565`*^9}, CellTags->"Info3525500843-8655580"] }, Open ]], Cell[CellGroupData[{ Cell[BoxData[ RowBox[{"??", " ", "SerialWrite"}]], "Input", CellChangeTimes->{{3.5247754856875*^9, 3.524775491328125*^9}, { 3.524775550046875*^9, 3.524775550640625*^9}}], Cell[CellGroupData[{ Cell[BoxData[ StyleBox["\<\"\"\>", "MSG"]], "Print", "PrintUsage", CellChangeTimes->{3.5255152443299584`*^9}, CellTags->"Info3525500844-8655580"], Cell[BoxData[ InterpretationBox[GridBox[{ {GridBox[{ { RowBox[{ RowBox[{"SerialWrite", "[", RowBox[{ RowBox[{"SerialIO`Private`port", ":", RowBox[{"SerialPort", "[", RowBox[{"_String", ",", "_Integer"}], "]"}]}], ",", "SerialIO`Private`data_String"}], "]"}], ":=", RowBox[{"SerialIO`Private`serialWrite", "[", RowBox[{ RowBox[{ "SerialIO`Private`serialPortNumber", "[", "SerialIO`Private`port", "]"}], ",", "SerialIO`Private`data"}], "]"}]}]}, {" "}, { RowBox[{ RowBox[{"SerialWrite", "[", RowBox[{ RowBox[{"SerialIO`Private`port", ":", RowBox[{"SerialPort", "[", RowBox[{"_String", ",", "_Integer"}], "]"}]}], ",", "SerialIO`Private`expr_"}], "]"}], ":=", RowBox[{"SerialWrite", "[", RowBox[{"SerialIO`Private`port", ",", RowBox[{"ToString", "[", "SerialIO`Private`expr", "]"}]}], "]"}]}]}, {" "}, { RowBox[{ RowBox[{"SerialWrite", "[", RowBox[{ RowBox[{"SerialIO`Private`port", ":", RowBox[{"SerialPort", "[", RowBox[{"_String", ",", "_Integer"}], "]"}]}], ",", "SerialIO`Private`exprs__"}], "]"}], ":=", RowBox[{ RowBox[{"(", RowBox[{ RowBox[{"SerialWrite", "[", RowBox[{"SerialIO`Private`port", ",", "#1"}], "]"}], "&"}], ")"}], "/@", RowBox[{"{", "SerialIO`Private`exprs", "}"}]}]}]} }, BaselinePosition->{Baseline, {1, 1}}, GridBoxAlignment->{ "Columns" -> {{Left}}, "ColumnsIndexed" -> {}, "Rows" -> {{Baseline}}, "RowsIndexed" -> {}}, GridBoxItemSize->{"Columns" -> {{ Scaled[0.999]}}, "ColumnsIndexed" -> {}, "Rows" -> {{1.}}, "RowsIndexed" -> {}}]} }, BaselinePosition->{Baseline, {1, 1}}, GridBoxAlignment->{ "Columns" -> {{Left}}, "ColumnsIndexed" -> {}, "Rows" -> {{Baseline}}, "RowsIndexed" -> {}}], Definition[SerialIO`SerialWrite], Editable->False]], "Print", CellChangeTimes->{3.525515244345558*^9}, CellTags->"Info3525500844-8655580"] }, Open ]] }, Open ]], Cell["\<\ All these commands works on characters. If a number is sent, it is first \ converted into an expression, then each individual character of that \ expressions are sent. The letter, coded with the ASCII character encoding \ (0..255) is sent by is numeric position in the ASCII standard. For example, \ when you send the letter A, you send its code, 65, as a byte\ \[CloseCurlyDoubleQuote]\ \>", "Text", CellChangeTimes->{{3.52477868128125*^9, 3.524778790265625*^9}, { 3.5277205222593603`*^9, 3.5277205821867876`*^9}}], Cell[CellGroupData[{ Cell[BoxData[ RowBox[{"ToCharacterCode", "[", "\"\\"", "]"}]], "Input", CellChangeTimes->{{3.527720583569867*^9, 3.5277205902972517`*^9}}], Cell[BoxData[ RowBox[{"{", "65", "}"}]], "Output", CellChangeTimes->{3.527720591074296*^9}] }, Open ]], Cell["\<\ All these commands have an internal timeout (default 10 seconds) in case the \ connection is broken or you are attempting to read from the brick when it isn\ \[CloseCurlyQuote]t sending information.\ \>", "Text", CellChangeTimes->{{3.5247794603125*^9, 3.524779472984375*^9}, { 3.5277206002588215`*^9, 3.527720642790254*^9}}] }, Open ]], Cell[CellGroupData[{ Cell["Second step: Establish a connection", "Subsection", CellChangeTimes->{{3.524774077734375*^9, 3.524774079578125*^9}, { 3.525186598359375*^9, 3.525186601140625*^9}, {3.525186648171875*^9, 3.525186654859375*^9}}], Cell["You are ready to use the brick! Start a link:", "Text", CellChangeTimes->{{3.524774081796875*^9, 3.524774120671875*^9}}], Cell[CellGroupData[{ Cell[BoxData[ RowBox[{"mybrick", " ", "=", " ", RowBox[{"SerialOpen", "[", "\"\\"", "]"}]}]], "Input", CellChangeTimes->{{3.524774126015625*^9, 3.52477413846875*^9}, 3.524774232703125*^9, 3.524776732171875*^9, 3.524776796671875*^9, { 3.52477804909375*^9, 3.5247780990625*^9}, {3.52477900675*^9, 3.524779007234375*^9}, {3.5255152514123707`*^9, 3.525515251568371*^9}}], Cell[BoxData[ InterpretationBox["\<\"SerialPort[]\"\>", StringForm["SerialPort[<`1`>]", "COM11"], Editable->False]], "Output", CellChangeTimes->{ 3.524774141765625*^9, 3.52477423321875*^9, {3.5247766938125*^9, 3.524776733265625*^9}, {3.52477678825*^9, 3.524776797140625*^9}, 3.52477695071875*^9, {3.524778034484375*^9, 3.524778099375*^9}, 3.52477900903125*^9, 3.524779090984375*^9, 3.524779131421875*^9, 3.5247791665*^9, {3.524779380953125*^9, 3.524779402*^9}, 3.5247803730625*^9, 3.52512655465625*^9, 3.525186612796875*^9, { 3.5255152490411663`*^9, 3.525515261957989*^9}, 3.525515293563645*^9}] }, Open ]], Cell["\<\ SerialOpen returns an object \"SerialPort\". It is used in all SerialIO \ commands. Don't forget to close the link when finished (see below).\ \>", "Text", CellChangeTimes->{{3.524774275640625*^9, 3.5247742860625*^9}, { 3.5247757283125*^9, 3.524775761703125*^9}, {3.525186665484375*^9, 3.525186669125*^9}}], Cell["\<\ If you go on the \"Status\" (left click) of the bluetooth connection, you \ will see the number of bytes sent and received.\ \>", "Text", CellChangeTimes->{{3.52478005128125*^9, 3.524780086890625*^9}}], Cell["\<\ This should ckeck that the serial port is working, but does not seems to be \ working...:\ \>", "Text", CellChangeTimes->{{3.524780118015625*^9, 3.524780130375*^9}, { 3.524780384421875*^9, 3.52478039096875*^9}}], Cell[CellGroupData[{ Cell[BoxData[ RowBox[{"SerialReadyQ", "[", "mybrick", "]"}]], "Input", CellChangeTimes->{{3.5247780369375*^9, 3.524778043515625*^9}, { 3.5265127666266165`*^9, 3.5265127798242397`*^9}}], Cell[BoxData["False"], "Output", CellChangeTimes->{{3.524778044015625*^9, 3.524778104328125*^9}, 3.5247790958125*^9, {3.524779384734375*^9, 3.524779407015625*^9}, 3.52478009115625*^9, 3.524780378109375*^9, 3.525186672421875*^9, 3.525515297245251*^9, {3.5265127613382072`*^9, 3.5265127802298403`*^9}}] }, Open ]] }, Open ]], Cell[CellGroupData[{ Cell["Third step: Send commands to the NXT and receive replies", "Subsection", CellChangeTimes->{{3.524774367421875*^9, 3.52477437121875*^9}, { 3.525186625765625*^9, 3.525186626328125*^9}, {3.5251866754375*^9, 3.525186684046875*^9}}], Cell["\<\ Control the brick by sending valid \[OpenCurlyDoubleQuote]direct commands\ \[CloseCurlyDoubleQuote]. One is PlayTone. It must be preceeded by the length \ of the message (here 6 bytes). (0x denotes a one byte information 0..255 \ whereas UWORD denotes a two-byte information).\ \>", "Text", CellChangeTimes->{{3.5247743735625*^9, 3.524774394875*^9}, { 3.524775805359375*^9, 3.524775824765625*^9}, {3.524776008796875*^9, 3.524776051859375*^9}, {3.5277207405608463`*^9, 3.527720749280345*^9}, { 3.5277207835033026`*^9, 3.527720790091679*^9}}], Cell["\<\ From the Appendix 2 of the Mindstorm Bluetooth developer kit, to send a \ PlayTone direct command, send the following bytes, PRECEEDED by the length of \ the message UWORD (here 6): \tbyte 0: 0x00 or 0x80 \tbyte 1: 0x03 \tbyte 2-3: frequency UWORD (between 200 and 14000) \tbyte 4-5: duration UWORD in ms If byte 0 is zero, a reply is expected PRECEEDED by the length of the \ returned message. For this command, the reply message is composed of three \ bytes: \tbyte 0: 0x02 \tbyte 1: 0x03 \tbyte 2: status (0 if succeeded). If byte 0 is 0x80 in your command, no reply is sent by the brick\ \>", "Text", CellChangeTimes->{{3.52477521840625*^9, 3.52477544425*^9}, { 3.524780263875*^9, 3.524780273546875*^9}, {3.524780309859375*^9, 3.5247803225625*^9}, {3.526512830571129*^9, 3.52651285400237*^9}, { 3.5276262226307025`*^9, 3.5276262477311463`*^9}, {3.527720769007473*^9, 3.527720959497369*^9}}], Cell["\<\ In order to know the most significant and the least significant byte of a \ UWORD, use the following\ \>", "Text", CellChangeTimes->{{3.52477840815625*^9, 3.524778440984375*^9}}], Cell[BoxData[ RowBox[{ RowBox[{"UWORD", "[", "value_", "]"}], ":=", RowBox[{"{", RowBox[{ RowBox[{"Mod", "[", RowBox[{"value", ",", "256"}], "]"}], ",", RowBox[{"Quotient", "[", RowBox[{"value", ",", "256"}], "]"}]}], "}"}]}]], "Input", CellChangeTimes->{{3.5247784449375*^9, 3.52477846621875*^9}}], Cell[CellGroupData[{ Cell[BoxData[ RowBox[{ RowBox[{"(*", RowBox[{"this", " ", "is", " ", "a", " ", "D"}], "*)"}], RowBox[{ RowBox[{"UWORD", "[", "480", "]"}], "\[IndentingNewLine]", RowBox[{"(*", RowBox[{"this", " ", "is", " ", "2", " ", "seconds"}], "*)"}], RowBox[{"UWORD", "[", "200", "]"}]}]}]], "Input", CellChangeTimes->{{3.5247784804375*^9, 3.524778507*^9}, 3.52478023715625*^9, {3.524780430578125*^9, 3.524780431328125*^9}}], Cell[BoxData[ RowBox[{"{", RowBox[{"224", ",", "1"}], "}"}]], "Output", CellChangeTimes->{{3.52477848584375*^9, 3.524778507625*^9}, 3.5247791909375*^9, 3.524780237515625*^9, 3.524780432203125*^9, 3.525186695859375*^9, 3.5255153026584606`*^9}], Cell[BoxData[ RowBox[{"{", RowBox[{"200", ",", "0"}], "}"}]], "Output", CellChangeTimes->{{3.52477848584375*^9, 3.524778507625*^9}, 3.5247791909375*^9, 3.524780237515625*^9, 3.524780432203125*^9, 3.525186695859375*^9, 3.5255153026584606`*^9}] }, Open ]], Cell[BoxData[{ RowBox[{ RowBox[{"SerialWrite", "[", RowBox[{"mybrick", ",", RowBox[{"FromCharacterCode", "[", "6", "]"}]}], "]"}], ";"}], "\[IndentingNewLine]", RowBox[{ RowBox[{"SerialWrite", "[", RowBox[{"mybrick", ",", RowBox[{"FromCharacterCode", "[", "0", "]"}]}], "]"}], ";"}], "\[IndentingNewLine]", RowBox[{ RowBox[{"SerialWrite", "[", RowBox[{"mybrick", ",", RowBox[{"FromCharacterCode", "[", "0", "]"}]}], "]"}], ";"}], "\[IndentingNewLine]", RowBox[{ RowBox[{"SerialWrite", "[", RowBox[{"mybrick", ",", RowBox[{"FromCharacterCode", "[", "3", "]"}]}], "]"}], ";"}], "\[IndentingNewLine]", RowBox[{ RowBox[{"SerialWrite", "[", RowBox[{"mybrick", ",", RowBox[{"FromCharacterCode", "[", "224", "]"}]}], "]"}], ";"}], "\[IndentingNewLine]", RowBox[{ RowBox[{"SerialWrite", "[", RowBox[{"mybrick", ",", RowBox[{"FromCharacterCode", "[", "1", "]"}]}], "]"}], ";"}], "\[IndentingNewLine]", RowBox[{ RowBox[{"SerialWrite", "[", RowBox[{"mybrick", ",", RowBox[{"FromCharacterCode", "[", "50", "]"}]}], "]"}], ";"}], "\[IndentingNewLine]", RowBox[{ RowBox[{"SerialWrite", "[", RowBox[{"mybrick", ",", RowBox[{"FromCharacterCode", "[", "1", "]"}]}], "]"}], ";"}]}], "Input", CellChangeTimes->{{3.5247754494375*^9, 3.52477545425*^9}, { 3.524775797046875*^9, 3.524775799609375*^9}, {3.524776156046875*^9, 3.524776188203125*^9}, {3.524776542921875*^9, 3.524776548953125*^9}, { 3.524776609671875*^9, 3.524776611546875*^9}, {3.524777776078125*^9, 3.5247777885*^9}, {3.524778628*^9, 3.524778662109375*^9}, { 3.524779197375*^9, 3.524779209203125*^9}, 3.524780169390625*^9, { 3.524780244921875*^9, 3.52478024740625*^9}, {3.52478041934375*^9, 3.524780437703125*^9}, {3.52512660296875*^9, 3.52512663109375*^9}, { 3.525126680546875*^9, 3.525126689140625*^9}, {3.52518673109375*^9, 3.525186744765625*^9}, {3.5277209835797462`*^9, 3.5277209868779345`*^9}}], Cell[CellGroupData[{ Cell[BoxData[ RowBox[{ RowBox[{"SerialRead", "[", "mybrick", "]"}], "//", "FullForm"}]], "Input", CellChangeTimes->{{3.52477662021875*^9, 3.524776669640625*^9}, { 3.52477741603125*^9, 3.52477742175*^9}, {3.5247776464375*^9, 3.524777651296875*^9}, {3.52477922075*^9, 3.524779223859375*^9}, { 3.524779802828125*^9, 3.524779806984375*^9}, {3.524780195625*^9, 3.5247802174375*^9}}], Cell[BoxData[ TagBox[ StyleBox["\"\<\\.03\\.00\\.02\\.03\\.00\>\"", ShowSpecialCharacters->False, ShowStringCharacters->True, NumberMarks->True], FullForm]], "Output", CellChangeTimes->{ 3.524776984890625*^9, 3.52477743953125*^9, 3.52477749278125*^9, 3.5247776000625*^9, 3.52477766175*^9, {3.5247792161875*^9, 3.524779234296875*^9}, 3.524779451421875*^9, 3.524779664703125*^9, 3.5247798176875*^9, {3.524779999078125*^9, 3.524780041890625*^9}, { 3.524780191796875*^9, 3.52478024996875*^9}, 3.52478028721875*^9, { 3.5247803348125*^9, 3.52478034190625*^9}, {3.5247804111875*^9, 3.524780439359375*^9}, 3.5251266611875*^9, 3.525126696046875*^9, 3.525186701875*^9, 3.525186758*^9, 3.5255153103648744`*^9}] }, Open ]] }, Open ]], Cell[CellGroupData[{ Cell["Fourth step: When finished, close the connection", "Subsection", CellChangeTimes->{{3.524778819015625*^9, 3.5247788214375*^9}, { 3.525186763953125*^9, 3.52518678134375*^9}}], Cell["Don't forget to close the link:", "Text", CellChangeTimes->{{3.52477882459375*^9, 3.52477883359375*^9}}], Cell[BoxData[ RowBox[{"SerialClose", "[", "mybrick", "]"}]], "Input", CellChangeTimes->{{3.524778835296875*^9, 3.52477884078125*^9}}] }, Open ]] }, Open ]] }, Open ]] }, WindowSize->{1119, 754}, WindowMargins->{{Automatic, 2}, {Automatic, 5}}, ShowSelection->True, Magnification:>FEPrivate`If[ FEPrivate`Equal[FEPrivate`$VersionNumber, 6.], 1.5, 1.5 Inherited], FrontEndVersion->"8.0 for Microsoft Windows (64-bit) (February 23, 2011)", StyleDefinitions->"Default.nb" ] (* End of Notebook Content *) (* Internal cache information *) (*CellTagsOutline CellTagsIndex->{ "Info3525500843-8655580"->{ Cell[6096, 175, 148, 3, 63, "Print", CellTags->"Info3525500843-8655580"]}, "Info3525500844-8655580"->{ Cell[6479, 190, 148, 3, 63, "Print", CellTags->"Info3525500844-8655580"], Cell[6630, 195, 2281, 60, 279, "Print", CellTags->"Info3525500844-8655580"]} } *) (*CellTagsIndex CellTagsIndex->{ {"Info3525500843-8655580", 20231, 556}, {"Info3525500844-8655580", 20340, 559} } *) (*NotebookFileOutline Notebook[{ Cell[CellGroupData[{ Cell[567, 22, 291, 8, 203, "Title"], Cell[861, 32, 102, 1, 42, "Subsubtitle"], Cell[CellGroupData[{ Cell[988, 37, 223, 3, 105, "Section"], Cell[CellGroupData[{ Cell[1236, 44, 97, 1, 54, "Subsection"], Cell[1336, 47, 415, 9, 90, "Text"] }, Open ]], Cell[CellGroupData[{ Cell[1788, 61, 146, 2, 54, "Subsection"], Cell[1937, 65, 629, 10, 115, "Text"] }, Open ]], Cell[CellGroupData[{ Cell[2603, 80, 141, 2, 54, "Subsection"], Cell[2747, 84, 683, 11, 115, "Text"] }, Open ]] }, Open ]], Cell[CellGroupData[{ Cell[3479, 101, 219, 7, 105, "Section"], Cell[CellGroupData[{ Cell[3723, 112, 179, 2, 54, "Subsection"], Cell[3905, 116, 360, 9, 41, "Text"], Cell[4268, 127, 121, 2, 43, "Input"], Cell[4392, 131, 531, 8, 66, "Text"], Cell[4926, 141, 140, 1, 41, "Text"], Cell[CellGroupData[{ Cell[5091, 146, 186, 3, 43, "Input"], Cell[5280, 151, 472, 9, 68, "Output"] }, Open ]], Cell[5767, 163, 181, 4, 41, "Text"], Cell[CellGroupData[{ Cell[5973, 171, 120, 2, 43, "Input"], Cell[6096, 175, 148, 3, 63, "Print", CellTags->"Info3525500843-8655580"] }, Open ]], Cell[CellGroupData[{ Cell[6281, 183, 173, 3, 43, "Input"], Cell[CellGroupData[{ Cell[6479, 190, 148, 3, 63, "Print", CellTags->"Info3525500844-8655580"], Cell[6630, 195, 2281, 60, 279, "Print", CellTags->"Info3525500844-8655580"] }, Open ]] }, Open ]], Cell[8938, 259, 528, 9, 90, "Text"], Cell[CellGroupData[{ Cell[9491, 272, 144, 2, 43, "Input"], Cell[9638, 276, 93, 2, 42, "Output"] }, Open ]], Cell[9746, 281, 337, 6, 66, "Text"] }, Open ]], Cell[CellGroupData[{ Cell[10120, 292, 221, 3, 54, "Subsection"], Cell[10344, 297, 127, 1, 41, "Text"], Cell[CellGroupData[{ Cell[10496, 302, 390, 6, 43, "Input"], Cell[10889, 310, 633, 11, 42, "Output"] }, Open ]], Cell[11537, 324, 322, 6, 66, "Text"], Cell[11862, 332, 212, 4, 41, "Text"], Cell[12077, 338, 224, 5, 41, "Text"], Cell[CellGroupData[{ Cell[12326, 347, 188, 3, 43, "Input"], Cell[12517, 352, 313, 4, 42, "Output"] }, Open ]] }, Open ]], Cell[CellGroupData[{ Cell[12879, 362, 239, 3, 54, "Subsection"], Cell[13121, 367, 558, 9, 66, "Text"], Cell[13682, 378, 915, 20, 311, "Text"], Cell[14600, 400, 189, 4, 41, "Text"], Cell[14792, 406, 330, 9, 43, "Input"], Cell[CellGroupData[{ Cell[15147, 419, 443, 10, 71, "Input"], Cell[15593, 431, 255, 5, 42, "Output"], Cell[15851, 438, 255, 5, 42, "Output"] }, Open ]], Cell[16121, 446, 1998, 49, 233, "Input"], Cell[CellGroupData[{ Cell[18144, 499, 391, 7, 43, "Input"], Cell[18538, 508, 742, 15, 42, "Output"] }, Open ]] }, Open ]], Cell[CellGroupData[{ Cell[19329, 529, 182, 2, 54, "Subsection"], Cell[19514, 533, 111, 1, 41, "Text"], Cell[19628, 536, 135, 2, 43, "Input"] }, Open ]] }, Open ]] }, Open ]] } ] *) (* End of internal cache information *)