(* Content-type: application/vnd.wolfram.mathematica *)

(*** Wolfram Notebook File ***)
(* http://www.wolfram.com/nb *)

(* CreatedBy='Wolfram 15.0' *)

(*CacheID: 234*)
(* Internal cache information:
NotebookFileLineBreakTest
NotebookFileLineBreakTest
NotebookDataPosition[       154,          7]
NotebookDataLength[     80104,       2084]
NotebookOptionsPosition[     64191,       1804]
NotebookOutlinePosition[     66847,       1861]
CellTagsIndexPosition[     66769,       1856]
WindowTitle->HashChain
WindowFrame->Normal*)

(* Beginning of Notebook Content *)
Notebook[{
Cell[BoxData[GridBox[{
   {GridBox[{
      {
       ItemBox[Cell[BoxData[
         RowBox[{
          TemplateBox[{12},
           "Spacer1"], Cell[
          "WOLFRAM INSTITUTE/ PUZZLES SYMBOL", "PacletNameCell",
           TextAlignment->Center,ExpressionUUID->
           "51e8ade8-34ed-4ad0-8eca-846430e0dce2"], 
          TemplateBox[{8},
           "Spacer1"]}]],
         TextAlignment->Center,ExpressionUUID->
         "6fb6c5c8-ba8a-4137-ad9c-4237b595c919"],
        Background->LightDarkSwitched[
          RGBColor[0.490196, 0.576471, 0.690196]],
        ItemSize->Full], ""}
     },
     GridBoxAlignment->{"Rows" -> {{Center}}},
     GridBoxItemSize->{"Columns" -> {Full, 
         Scaled[0.02]}, "Rows" -> {{2.5}}}], Cell[TextData[{
     Cell[BoxData[
      TagBox[
       ActionMenuBox[
        FrameBox[Cell[TextData[{
          "See Also",
          " ",
          Cell[BoxData[
           GraphicsBox[
            {GrayLevel[0.66667], Thickness[0.13], 
             LineBox[{{-1.8, 0.5}, {0, 0}, {1.8, 0.5}}]},
            AspectRatio->1,
            ImageSize->20,
            PlotRange->{{-3, 4}, {-1, 1}}]],ExpressionUUID->
           "083e3c5b-907b-44c4-867f-9a24b7c67d8a"]
         }],ExpressionUUID->"eb0254cf-1f58-4f7b-9c91-9fc0dd74db17"],
         StripOnInput->False],{
        StyleBox["\"Hash\"", "SeeAlsoRelated", StripOnInput -> False] :> 
         Documentation`HelpLookup["paclet:ref/Hash"], 
         StyleBox["\"BaseDecode\"", "SeeAlsoRelated", StripOnInput -> False] :> 
         Documentation`HelpLookup["paclet:ref/BaseDecode"], Delimiter, 
         StyleBox[
          "\"Functions\"", "SeeAlsoSection", FontSize -> 14, FontSlant -> 
           "Italic", StripOnInput -> False] :> 
         NotebookFind[EvaluationNotebook[], "SeeAlsoSection", All, CellStyle],
          StyleBox[
          StyleBox[
           "\"PuzzleOracle\"", "SeeAlsoRelated", StripOnInput -> False], 
           "SeeAlsoRelated", StripOnInput -> False] :> 
         Documentation`HelpLookup[
          "paclet:WolframInstitute/Puzzles/ref/PuzzleOracle"], 
         StyleBox[
          StyleBox["\"OracleScan\"", "SeeAlsoRelated", StripOnInput -> False],
            "SeeAlsoRelated", StripOnInput -> False] :> 
         Documentation`HelpLookup[
          "paclet:WolframInstitute/Puzzles/ref/OracleScan"], 
         StyleBox[
          StyleBox[
           "\"$OracleHashMethods\"", "SeeAlsoRelated", StripOnInput -> False],
            "SeeAlsoRelated", StripOnInput -> False] :> 
         Documentation`HelpLookup[
          "paclet:WolframInstitute/Puzzles/ref/$OracleHashMethods"], 
         StyleBox[
          StyleBox[
           "\"$OracleCompiledDigests\"", "SeeAlsoRelated", StripOnInput -> 
            False], "SeeAlsoRelated", StripOnInput -> False] :> 
         Documentation`HelpLookup[
          "paclet:WolframInstitute/Puzzles/ref/$OracleCompiledDigests"]},
        Appearance->None,
        MenuAppearance->Automatic,
        MenuStyle->"SeeAlso"],
       MouseAppearanceTag["LinkHand"]]],
      LineSpacing->{1.4, 0},ExpressionUUID->
      "08259f3f-2ee1-40bd-909c-51862a2ba94a"],
     "\[ThickSpace]\[ThickSpace]\[ThickSpace]\[ThickSpace]\[ThickSpace]\
\[ThickSpace]",
     Cell[BoxData[
      TagBox[
       ActionMenuBox[
        FrameBox[Cell[TextData[{
          "Related Guides",
          " ",
          Cell[BoxData[
           GraphicsBox[
            {GrayLevel[0.66667], Thickness[0.13], 
             LineBox[{{-1.8, 0.5}, {0, 0}, {1.8, 0.5}}]},
            AspectRatio->1,
            ImageSize->20,
            PlotRange->{{-3, 4}, {-1, 1}}]],ExpressionUUID->
           "17e817e2-85f4-4116-900f-d96b00953ffa"]
         }],ExpressionUUID->"a402e842-a7d2-4c12-809b-50baf21f347a"],
         StripOnInput->False],{
        "\"Oracles\"" :> 
         Documentation`HelpLookup[
          "paclet:WolframInstitute/Puzzles/guide/Oracles"]},
        Appearance->None,
        MenuAppearance->Automatic,
        MenuStyle->"MoreAbout"],
       MouseAppearanceTag["LinkHand"]]],
      LineSpacing->{1.4, 0},ExpressionUUID->
      "0d4ba65d-a120-430f-931c-7b1aeb0ce9fb"],
     "\[ThickSpace]\[ThickSpace]\[ThickSpace]\[ThickSpace]\[ThickSpace]\
\[ThickSpace]",
     Cell[BoxData[
      TagBox[
       ActionMenuBox[
        FrameBox[Cell[TextData[{
          "URL",
          " ",
          Cell[BoxData[
           GraphicsBox[
            {GrayLevel[0.66667], Thickness[0.13], 
             LineBox[{{-1.8, 0.5}, {0, 0}, {1.8, 0.5}}]},
            AspectRatio->1,
            ImageSize->20,
            PlotRange->{{-3, 4}, {-1, 1}}]],ExpressionUUID->
           "2a54be07-175f-46e5-b105-4bd5733897d3"]
         }],ExpressionUUID->"6839390d-e377-4749-89a5-d3cb922c3dce"],
         StripOnInput->False],{
        "\"WolframInstitute/Puzzles/ref/HashChain\"" :> None, 
         "\"Copy Wolfram Documentation Center URL\"" :> 
         CopyToClipboard["WolframInstitute/Puzzles/ref/HashChain"], Delimiter,
          "\"Copy web URL\"" :> 
         Module[{DocumentationSearch`Private`nb$}, 
           DocumentationSearch`Private`nb$ = 
            NotebookPut[
             Notebook[{
               Cell[BoxData[
                 MakeBoxes[
                  Hyperlink[
                   "http://reference.wolfram.com/language/WolframInstitute/\
Puzzles/ref/HashChain.html"], StandardForm]], "Input", TextClipboardType -> 
                 "PlainText"]}, Visible -> False]]; 
           SelectionMove[DocumentationSearch`Private`nb$, All, Notebook]; 
           FrontEndTokenExecute[DocumentationSearch`Private`nb$, "Copy"]; 
           NotebookClose[DocumentationSearch`Private`nb$]; Null], 
         "\"Go to web URL\"" :> 
         FrontEndExecute[{
           NotebookLocate[{
             URL[If[TrueQ[False], 
                 "http://reference.wolfram.com/system-modeler/", 
                 "http://reference.wolfram.com/language/"] <> 
               "WolframInstitute/Puzzles/ref/HashChain" <> ".html"], None}]}]},
        Appearance->None,
        MenuAppearance->Automatic,
        MenuStyle->"URLMenu"],
       MouseAppearanceTag["LinkHand"]]],
      LineSpacing->{1.4, 0},ExpressionUUID->
      "7e27b6c9-d940-4483-a367-a886181f4914"]
    }], "AnchorBar",
     CacheGraphics->False,ExpressionUUID->
     "e89baf74-c6b3-4eb5-adf7-4d76c5fd57a8"]}
  }]], "AnchorBarGrid",
 CellID->1,ExpressionUUID->"6f28add2-248c-412a-ae3b-d0a370b06a1d"],

Cell["WolframInstitute`Puzzles`", "ContextNameCell",ExpressionUUID->"161d8210-691d-461e-b82a-0ca022f0cae5"],

Cell[CellGroupData[{

Cell[BoxData[GridBox[{
   {Cell[TextData[{
     Cell[
     "HashChain", "ObjectName",ExpressionUUID->
      "004644ce-1adf-4e64-9667-0cedc4961c11"],
     Cell[BoxData[
      TemplateBox[{8},
       "Spacer1"]],ExpressionUUID->"e4782ba9-adc4-416a-b544-92eed9dc2ff5"],
     Cell[BoxData[
     ""], "ObjectNameTranslation",ExpressionUUID->
      "af5a851f-c717-4f58-a35e-38c32e51fd92"]
    }],ExpressionUUID->"2a544652-b758-48c8-b276-84ffe89d6912"], 
    "\[SpanFromLeft]"}
  }]], "ObjectNameGrid",ExpressionUUID->"5dea34ec-46c3-4dbc-a5ff-\
b3ee6717667e"],

Cell[BoxData[GridBox[{
   {"", Cell[TextData[{
     Cell[BoxData[
      RowBox[{
       TemplateBox[{
         Cell[
          TextData["HashChain"]], 
         "paclet:WolframInstitute/Puzzles/ref/HashChain", 
         "WolframInstitute/Puzzles Package Symbol"},
        "PackageLink",
        BaseStyle->"InlineFormula"], "[", 
       RowBox[{
        StyleBox["data", "TI"], ",", " ", 
        StyleBox["method", "TI"]}], "]"}]], "InlineFormula",
      FontFamily->"Source Sans Pro",
      FontSize->0.9 Inherited,ExpressionUUID->
      "0cd54864-bd98-44fd-bdfa-f5a9aceec116"],
     "\[LineSeparator]",
     "gives the lowercase hexadecimal digest of ",
     StyleBox["data", "TI"],
     " under the named hash method."
    }],ExpressionUUID->"902aaed2-5dd4-4ed0-98ec-64510b0a4c6f"]},
   {"", Cell[TextData[{
     Cell[BoxData[
      RowBox[{
       TemplateBox[{
         Cell[
          TextData["HashChain"]], 
         "paclet:WolframInstitute/Puzzles/ref/HashChain", 
         "WolframInstitute/Puzzles Package Symbol"},
        "PackageLink",
        BaseStyle->"InlineFormula"], "[", 
       RowBox[{
        StyleBox["data", "TI"], ",", " ", 
        StyleBox["method", "TI"], ",", " ", 
        StyleBox["n", "TI"]}], "]"}]], "InlineFormula",
      FontFamily->"Source Sans Pro",
      FontSize->0.9 Inherited,ExpressionUUID->
      "9d5a2d4c-3cec-4203-afc9-d4dff6253e4b"],
     "\[LineSeparator]",
     "gives the ",
     Cell[BoxData[
      StyleBox["n", "TI"]], "InlineFormula",
      FontFamily->"Source Sans Pro",
      FontSize->0.9 Inherited,ExpressionUUID->
      "7be2bcab-7be9-4b9b-a773-60f03216824c"],
     "-fold iterated digest, hashing the raw digest bytes again at each of \
the ",
     Cell[BoxData[
      StyleBox["n", "TI"]], "InlineFormula",
      FontFamily->"Source Sans Pro",
      FontSize->0.9 Inherited,ExpressionUUID->
      "1144a9c2-d552-4c05-a66f-fe13245bf377"],
     " steps."
    }],ExpressionUUID->"30b253b2-f2d0-4c44-95ad-add431213326"]},
   {"", Cell[TextData[{
     Cell[BoxData[
      RowBox[{
       TemplateBox[{
         Cell[
          TextData["HashChain"]], 
         "paclet:WolframInstitute/Puzzles/ref/HashChain", 
         "WolframInstitute/Puzzles Package Symbol"},
        "PackageLink",
        BaseStyle->"InlineFormula"], "[", 
       RowBox[{
        StyleBox["data", "TI"], ",", " ", 
        StyleBox["method", "TI"], ",", " ", 
        StyleBox["n", "TI"], ",", " ", 
        StyleBox["form", "TI"]}], "]"}]], "InlineFormula",
      FontFamily->"Source Sans Pro",
      FontSize->0.9 Inherited,ExpressionUUID->
      "78dc2321-2605-4b88-b359-a61387e46da0"],
     "\[LineSeparator]",
     "returns the digest as a ",
     Cell[BoxData["\"\<HexString\>\""], "InlineFormula",
      FontFamily->"Source Sans Pro",
      FontSize->0.9 Inherited,ExpressionUUID->
      "842bfdd3-e0e6-4d96-ac45-87dd738b677a"],
     ", a ",
     Cell[BoxData["\"\<ByteArray\>\""], "InlineFormula",
      FontFamily->"Source Sans Pro",
      FontSize->0.9 Inherited,ExpressionUUID->
      "b5aad531-04e4-4469-89e5-5870dfacb343"],
     " or an ",
     Cell[BoxData["\"\<Integer\>\""], "InlineFormula",
      FontFamily->"Source Sans Pro",
      FontSize->0.9 Inherited,ExpressionUUID->
      "967bc10e-d424-4c7d-9576-14aef619c217"],
     "."
    }],ExpressionUUID->"ef7fe059-c996-4b61-983f-caa6a302909e"]},
   {"", Cell[TextData[{
     Cell[BoxData[
      RowBox[{
       TemplateBox[{
         Cell[
          TextData["HashChain"]], 
         "paclet:WolframInstitute/Puzzles/ref/HashChain", 
         "WolframInstitute/Puzzles Package Symbol"},
        "PackageLink",
        BaseStyle->"InlineFormula"], "[", 
       RowBox[{
        RowBox[{"{", 
         RowBox[{
          SubscriptBox[
           StyleBox["data", "TI"], 
           StyleBox["1", "TR"]], ",", " ", 
          SubscriptBox[
           StyleBox["data", "TI"], 
           StyleBox["2", "TR"]], ",", " ", "\[Ellipsis]"}], "}"}], ",", " ", 
        "\[Ellipsis]"}], "]"}]], "InlineFormula",
      FontFamily->"Source Sans Pro",
      FontSize->0.9 Inherited,ExpressionUUID->
      "2da2e14c-f9f1-4028-a549-7bea912ad79d"],
     "\[LineSeparator]",
     "gives the list of digests, hashing the whole batch in one pass."
    }],ExpressionUUID->"f9a32915-6cef-4720-9949-f2faee863f2d"]}
  }]], "Usage",ExpressionUUID->"037f004f-361a-403e-8a96-7882f236f37f"]
}, Open  ]],

Cell[CellGroupData[{

Cell[TextData[Cell[BoxData[Cell[TextData[{
  Cell[BoxData[
   DynamicBox[ToBoxes[
     If[CurrentValue[
        EvaluationCell[], "CellGroupOpen"] =!= Closed, 
      Style[
       Graphics[{
         Thickness[0.18], 
         RGBColor[0.8509803921568627, 0.396078431372549, 0], 
         Line[{{-1.8, 0.5}, {0, 0}, {1.8, 0.5}}]}, AspectRatio -> 1, 
        PlotRange -> {{-3, 4}, {-1, 1}}, ImageSize -> 20], Magnification -> 
       0.68 Inherited], 
      Rotate[
       Style[
        Graphics[{
          Thickness[0.18], 
          RGBColor[0.8509803921568627, 0.396078431372549, 0], 
          Line[{{-1.8, 0.5}, {0, 0}, {1.8, 0.5}}]}, AspectRatio -> 1, 
         PlotRange -> {{-3, 4}, {-1, 1}}, ImageSize -> 20], Magnification -> 
        0.68 Inherited], Rational[1, 2] Pi, {-1.65, -1}]]],
    ImageSizeCache->{
     13.600000000000001`, {-0.1685058593749993, 13.768505859375}}]],
   ExpressionUUID->"547db958-1f38-4173-a159-927604719366"],
  Cell[BoxData[
   TemplateBox[{1},
    "Spacer1"]],ExpressionUUID->"4aa12a22-886a-418f-9c07-d9d462b1249c"],
  "Details and Options"
 }], "NotesFrameText",ExpressionUUID->
  "3c2de165-bcd4-4c7a-9f5a-8d71b07492af"]],ExpressionUUID->"a9e97456-6691-\
4cee-99d0-a63063b26a55"]], "NotesSection",
 ShowGroupOpener->"Thumbnail",
 WholeCellGroupOpener->True,
 CellGroupingRules->{"SectionGrouping", 50},
 CacheGraphics->False,
 CellID->1254830402,ExpressionUUID->"3e92f8f9-c9ff-478d-be16-440c2ab92266"],

Cell[TextData[{
 StyleBox["data", "TI"],
 " is a ",
 Cell[BoxData["String"], "InlineFormula",
  FontFamily->"Source Sans Pro",
  FontSize->0.9 Inherited,ExpressionUUID->
  "4eba9b2d-a47a-4f12-9418-9ef981f5bcca"],
 ", hashed as its UTF-8 bytes, or a ",
 Cell[BoxData[
  TemplateBox[{
    Cell[
     TextData["ByteArray"]], "paclet:ref/ByteArray"},
   "RefLink",
   BaseStyle->"InlineFormula"]], "InlineFormula",
  FontFamily->"Source Sans Pro",
  FontSize->0.9 Inherited,ExpressionUUID->
  "3f3b658e-119e-45be-ab80-311d299b26ad"],
 ", hashed as its raw bytes."
}], "Notes",ExpressionUUID->"47e34c28-3354-477f-924a-eed0954f1739"],

Cell[TextData[{
 StyleBox["method", "TI"],
 " must be a member of ",
 Cell[BoxData[
  TemplateBox[{
    Cell[
     TextData["$OracleHashMethods"]], 
    "paclet:WolframInstitute/Puzzles/ref/$OracleHashMethods", 
    "WolframInstitute/Puzzles Package Symbol"},
   "PackageLink",
   BaseStyle->"InlineFormula"]], "InlineFormula",
  FontFamily->"Source Sans Pro",
  FontSize->0.9 Inherited,ExpressionUUID->
  "d3e437a5-1db3-467f-8a19-666a66768aa2"],
 "; any other method leaves the call unevaluated."
}], "Notes",ExpressionUUID->"4a26655c-7a83-45b1-9606-2aac1e655d66"],

Cell[TextData[{
 Cell[BoxData[
  StyleBox["n", "TI"]], "InlineFormula",
  FontFamily->"Source Sans Pro",
  FontSize->0.9 Inherited,ExpressionUUID->
  "16f2e29d-807c-4d38-9053-6248b15353f6"],
 " must be a non-negative integer. ",
 Cell[BoxData[
  RowBox[{
   StyleBox["n", "TI"], "=", "0"}]], "InlineFormula",
  FontFamily->"Source Sans Pro",
  FontSize->0.9 Inherited,ExpressionUUID->
  "c87663a5-0416-4c01-884e-fc0af49509fd"],
 " gives ",
 StyleBox["data", "TI"],
 " itself, so ",
 Cell[BoxData[
  RowBox[{
   TemplateBox[{
     Cell[
      TextData["HashChain"]], "paclet:WolframInstitute/Puzzles/ref/HashChain",
      "WolframInstitute/Puzzles Package Symbol"},
    "PackageLink",
    BaseStyle->"InlineFormula"], "[", 
   RowBox[{
    StyleBox["data", "TI"], ",", " ", 
    StyleBox["method", "TI"], ",", " ", "0"}], "]"}]], "InlineFormula",
  FontFamily->"Source Sans Pro",
  FontSize->0.9 Inherited,ExpressionUUID->
  "1e7d84ff-c07b-4b17-8f9e-5f145edc316a"],
 " is the hexadecimal form of the input bytes."
}], "Notes",ExpressionUUID->"6d2c6486-8c1c-49d1-a769-b32842c5e55c"],

Cell["\<\
Each iteration hashes the raw bytes of the previous digest, not its \
hexadecimal text.\
\>", "Notes",ExpressionUUID->"c0960e6e-19b7-414b-907b-5183c4488030"],

Cell[TextData[{
 Cell[BoxData[
  RowBox[{
   StyleBox["n", "TI"], "=", "2"}]], "InlineFormula",
  FontFamily->"Source Sans Pro",
  FontSize->0.9 Inherited,ExpressionUUID->
  "a4d21028-478d-4c73-a1bc-b5051ec7af2f"],
 " with ",
 Cell[BoxData["\<\"SHA256\"\>"], "InlineFormula",
  FontFamily->"Source Sans Pro",
  FontSize->0.9 Inherited,ExpressionUUID->
  "eab0d70f-dd7f-46ee-9bfe-e282050282b0"],
 " is Bitcoin's double SHA-256, the digest behind block ids, transaction ids \
and the Base58Check checksum."
}], "Notes",ExpressionUUID->"dec6e525-cd53-400c-874b-4591344aeb94"],

Cell[TextData[{
 Cell[BoxData["\<\"RIPEMD160SHA256\"\>"], "InlineFormula",
  FontFamily->"Source Sans Pro",
  FontSize->0.9 Inherited,ExpressionUUID->
  "304590a7-514f-426d-b49d-035d698d6fd4"],
 " is Bitcoin's HASH160, the RIPEMD-160 of the SHA-256 of the input, and is \
the digest behind a pay-to-public-key-hash address."
}], "Notes",ExpressionUUID->"3365cc60-3eb0-4cfa-91e6-0be8ac58ff5d"],

Cell[TextData[{
 Cell[BoxData["\<\"Keccak256\"\>"], "InlineFormula",
  FontFamily->"Source Sans Pro",
  FontSize->0.9 Inherited,ExpressionUUID->
  "13d05501-dd48-42a4-ab9d-78bd63e8ce4f"],
 " is the digest Ethereum addresses and event topics are built from, and is \
distinct from ",
 Cell[BoxData["\<\"SHA3-256\"\>"], "InlineFormula",
  FontFamily->"Source Sans Pro",
  FontSize->0.9 Inherited,ExpressionUUID->
  "ca8224a3-0f67-443f-9316-6f32495063c4"],
 "."
}], "Notes",ExpressionUUID->"48adce04-e4b2-4a16-bf81-c3b991d4bb11"],

Cell[TextData[{
 StyleBox["form", "TI"],
 " is one of ",
 Cell[BoxData["\<\"HexString\"\>"], "InlineFormula",
  FontFamily->"Source Sans Pro",
  FontSize->0.9 Inherited,ExpressionUUID->
  "69379b83-388d-41d7-b4c3-d808cc367cf0"],
 " (the default), ",
 Cell[BoxData["\<\"ByteArray\"\>"], "InlineFormula",
  FontFamily->"Source Sans Pro",
  FontSize->0.9 Inherited,ExpressionUUID->
  "78306263-db3a-4e5f-a5b8-2580eb8b8376"],
 " or ",
 Cell[BoxData["\<\"Integer\"\>"], "InlineFormula",
  FontFamily->"Source Sans Pro",
  FontSize->0.9 Inherited,ExpressionUUID->
  "dec5df18-8313-417f-96b0-d25887f964d1"],
 ". The ",
 Cell[BoxData["\<\"Integer\"\>"], "InlineFormula",
  FontFamily->"Source Sans Pro",
  FontSize->0.9 Inherited,ExpressionUUID->
  "8da87eb0-2c32-469b-ace2-2fc859784c18"],
 " form is the big-endian value of the digest bytes and does not record \
leading zero bytes."
}], "Notes",ExpressionUUID->"ad9fffa1-b17e-49c7-9b9c-cb12f914df6e"],

Cell["\<\
A batch is converted, hashed and formatted in one pass each, which is several \
times faster than mapping the single-argument form over the same list.\
\>", "Notes",ExpressionUUID->"8f55acb0-4460-42ab-b99f-957647a8bb3c"],

Cell[TextData[{
 "The digests are computed by the kernel's ",
 Cell[BoxData[
  TemplateBox[{
    Cell[
     TextData["Hash"]], "paclet:ref/Hash"},
   "RefLink",
   BaseStyle->"InlineFormula"]], "InlineFormula",
  FontFamily->"Source Sans Pro",
  FontSize->0.9 Inherited,ExpressionUUID->
  "74da4688-1fbb-49f4-b26f-5d3d83cd0455"],
 ", except for ",
 Cell[BoxData["\<\"SHA256\"\>"], "InlineFormula",
  FontFamily->"Source Sans Pro",
  FontSize->0.9 Inherited,ExpressionUUID->
  "45837431-7648-411e-bb7a-5aed1c0d6cfb"],
 ", ",
 Cell[BoxData["\<\"RIPEMD160\"\>"], "InlineFormula",
  FontFamily->"Source Sans Pro",
  FontSize->0.9 Inherited,ExpressionUUID->
  "eb9b09ac-ba12-45da-bcb9-52b6fdbce903"],
 " and ",
 Cell[BoxData["\<\"RIPEMD160SHA256\"\>"], "InlineFormula",
  FontFamily->"Source Sans Pro",
  FontSize->0.9 Inherited,ExpressionUUID->
  "94ea060c-9ea3-4813-9163-eb0504f32673"],
 ", which have a compiled kernel listed in ",
 Cell[BoxData[
  TemplateBox[{
    Cell[
     TextData["$OracleCompiledDigests"]], 
    "paclet:WolframInstitute/Puzzles/ref/$OracleCompiledDigests", 
    "WolframInstitute/Puzzles Package Symbol"},
   "PackageLink",
   BaseStyle->"InlineFormula"]], "InlineFormula",
  FontFamily->"Source Sans Pro",
  FontSize->0.9 Inherited,ExpressionUUID->
  "5b93979e-7e13-4356-bca9-84b21e8774d6"],
 "."
}], "Notes",ExpressionUUID->"7228f55b-9678-48c6-8899-fdff3a3b0e80"],

Cell[TextData[{
 "A compiled kernel is built and validated against the kernel's ",
 Cell[BoxData[
  TemplateBox[{
    Cell[
     TextData["Hash"]], "paclet:ref/Hash"},
   "RefLink",
   BaseStyle->"InlineFormula"]], "InlineFormula",
  FontFamily->"Source Sans Pro",
  FontSize->0.9 Inherited,ExpressionUUID->
  "902e7824-4626-4983-9f42-5c53e96619ea"],
 " the first time it is needed, which takes a few seconds once per session."
}], "Notes",ExpressionUUID->"905f3a84-d67d-48dd-88f7-a56c7e2f4cbb"],

Cell[TextData[{
 Cell[BoxData[
  RowBox[{"\<\"Implementation\"\>", " ", "->", " ", "\<\"Compiled\"\>"}]], 
  "InlineFormula",
  FontFamily->"Source Sans Pro",
  FontSize->0.9 Inherited,ExpressionUUID->
  "a5e1f0d9-10fe-443f-a3a1-6309b8ce867e"],
 " on a method with no compiled kernel leaves the call unevaluated rather \
than falling back to a slower path silently."
}], "Notes",ExpressionUUID->"d039b0db-a6a4-4082-95e2-169f2ee3c2bd"],

Cell[BoxData[GridBox[{
   {Cell["      ", "TableRowIcon",ExpressionUUID->
     "aa504bf9-73dc-44a2-8870-00fa69d19493"], Cell["", "TableText",
     FontWeight->Bold,ExpressionUUID->"4acab4f8-fece-4f13-81fb-5beaff2c73bd"],
     Cell["", "TableText",
     FontWeight->Bold,ExpressionUUID->"144a4767-d5a3-4b7e-871a-0d498bd5cd1b"],
     Cell["", "TableText",
     FontWeight->Bold,ExpressionUUID->"e8bad859-0fe5-4651-b796-347fe1e80dee"]},
   {Cell["      ", "TableRowIcon",ExpressionUUID->
     "43cb88a6-1311-42b5-b793-90c35402c758"], Cell[TextData[Cell[
    BoxData["\"\<Implementation\>\""], "InlineFormula",
     FontFamily->"Source Sans Pro",
     FontSize->0.9 Inherited,ExpressionUUID->
     "c53d9182-15ee-4d57-ae27-5c947ebf24ca"]], "TableText",ExpressionUUID->
     "7efdf78b-3c81-4e23-b332-abd2c1adf15c"], Cell[TextData[Cell[BoxData[
     TemplateBox[{
       Cell[
        TextData["Automatic"]], "paclet:ref/Automatic"},
      "RefLink",
      BaseStyle->"InlineFormula"]], "InlineFormula",
     FontFamily->"Source Sans Pro",
     FontSize->0.9 Inherited,ExpressionUUID->
     "cd469089-09c8-4495-abfd-6fe73b0b2732"]], "TableText",ExpressionUUID->
     "ef71b7b0-d832-4ba9-83de-d5fdbbf6fd12"], Cell[TextData[{
     "which digest implementation to use: ",
     Cell[BoxData["Automatic"], "InlineFormula",
      FontFamily->"Source Sans Pro",
      FontSize->0.9 Inherited,ExpressionUUID->
      "e6135f9d-07bb-4fc4-8c64-4f082088463d"],
     " prefers a compiled kernel where one exists, ",
     Cell[BoxData["\"\<Compiled\>\""], "InlineFormula",
      FontFamily->"Source Sans Pro",
      FontSize->0.9 Inherited,ExpressionUUID->
      "c9480e29-ad89-46a7-9788-d4e1c798ac44"],
     " requires one, and ",
     Cell[BoxData["\"\<Kernel\>\""], "InlineFormula",
      FontFamily->"Source Sans Pro",
      FontSize->0.9 Inherited,ExpressionUUID->
      "5043c1fa-11db-4a99-83c1-1ebe5791ec28"],
     " forces the kernel's ",
     Cell[BoxData[
      TemplateBox[{
        Cell[
         TextData["Hash"]], "paclet:ref/Hash"},
       "RefLink",
       BaseStyle->"InlineFormula"]], "InlineFormula",
      FontFamily->"Source Sans Pro",
      FontSize->0.9 Inherited,ExpressionUUID->
      "d6a89c4f-6876-4b34-b551-bb6a5320c16d"]
    }], "TableText",ExpressionUUID->"5060448d-16fb-4dc0-9db0-dd7426b60556"]}
  }]], "3ColumnTableMod",
 GridBoxOptions->{
 GridBoxBackground->{"Columns" -> {{None}}, "Rows" -> {None, {None}}},
 GridBoxDividers->{
  "Rows" -> {{
     True, True, 
      True}}}},ExpressionUUID->"bcecf9c1-4ee3-4830-b0ea-b3cf1d8e419b"]
}, Closed]],

Cell["", "PageDelimiter",ExpressionUUID->"fed1f01f-0b01-42ee-a162-ba075763df84"],

Cell[CellGroupData[{

Cell[TextData[{
 Cell[BoxData[
  DynamicBox[ToBoxes[
    If[
     MatchQ[
      CurrentValue[
       EvaluationNotebook[], {
       TaggingRules, "Openers", "PrimaryExamplesSection"}, Open], 
      Alternatives[True, Open]], 
     Style[
      Graphics[{
        Thickness[0.18], 
        RGBColor[0.8509803921568627, 0.396078431372549, 0], 
        Line[{{-1.8, 0.5}, {0, 0}, {1.8, 0.5}}]}, AspectRatio -> 1, 
       PlotRange -> {{-3, 4}, {-1, 1}}, ImageSize -> 20], Magnification -> 
      0.68 Inherited], 
     Rotate[
      Style[
       Graphics[{
         Thickness[0.18], 
         RGBColor[0.8509803921568627, 0.396078431372549, 0], 
         Line[{{-1.8, 0.5}, {0, 0}, {1.8, 0.5}}]}, AspectRatio -> 1, 
        PlotRange -> {{-3, 4}, {-1, 1}}, ImageSize -> 20], Magnification -> 
       0.68 Inherited], Rational[1, 2] Pi, {-1.65, -1}]]],
   ImageSizeCache->{
    13.600000000000001`, {4.251494140625001, 9.348505859375}}]],
  ExpressionUUID->"9070040b-316a-4f04-980a-20d2c81cea28"],
 Cell[BoxData[
  TemplateBox[{1},
   "Spacer1"]],ExpressionUUID->"742b878c-506d-4e5b-84b2-a96d23cf62da"],
 "Examples",
 "\[NonBreakingSpace]\[NonBreakingSpace]",
 Cell["(23)", "ExampleCount",ExpressionUUID->
  "8872f6c9-c3cc-4c1d-beea-bea174c41ba2"]
}], "PrimaryExamplesSection",
 WholeCellGroupOpener->True,
 CacheGraphics->False,
 CellID->1645152874,ExpressionUUID->"58c18036-a868-452d-a4be-9fedb50b4cfe"],

Cell[BoxData[
 RowBox[{"Needs", "[", "\"\<WolframInstitute`Puzzles`\>\"", "]"}]], "Input", \
"ExampleInitialization",
 CellLabel->"In[1]:=",
 CellID->1969679695,ExpressionUUID->"3cb5efb1-e63f-463e-bd58-ca2d3cf68ad6"],

Cell[CellGroupData[{

Cell[TextData[{
 Cell[BoxData[
  DynamicBox[ToBoxes[
    If[CurrentValue[
       EvaluationCell[], "CellGroupOpen"] =!= Closed, 
     Style[
      Graphics[{
        Thickness[0.18], 
        RGBColor[0.8509803921568627, 0.396078431372549, 0], 
        Line[{{-1.8, 0.5}, {0, 0}, {1.8, 0.5}}]}, AspectRatio -> 1, 
       PlotRange -> {{-3, 4}, {-1, 1}}, ImageSize -> 20], Magnification -> 
      0.68 Inherited], 
     Rotate[
      Style[
       Graphics[{
         Thickness[0.18], 
         RGBColor[0.8509803921568627, 0.396078431372549, 0], 
         Line[{{-1.8, 0.5}, {0, 0}, {1.8, 0.5}}]}, AspectRatio -> 1, 
        PlotRange -> {{-3, 4}, {-1, 1}}, ImageSize -> 20], Magnification -> 
       0.68 Inherited], Rational[1, 2] Pi, {-1.65, -1}]]]]],ExpressionUUID->
  "207c9cd6-91a5-4195-bfd9-d36a7fea29d0"],
 Cell[BoxData[
  TemplateBox[{1},
   "Spacer1"]],ExpressionUUID->"ae193c49-7fc0-4520-86fc-b562278087eb"],
 "Basic Examples",
 "\[NonBreakingSpace]\[NonBreakingSpace]",
 Cell["(3)", "ExampleCount",ExpressionUUID->
  "c7d67ad1-1f6a-4fe5-b77d-5e9cd1480d49"]
}], "ExampleSection", "ExampleSection",
 WholeCellGroupOpener->True,
 CacheGraphics->False,
 CellID->1232398193,ExpressionUUID->"3e91027a-92cf-4117-8b6e-3553251b2546"],

Cell["The SHA-256 digest of a string, as lowercase hexadecimal:", \
"ExampleText",
 CellTags->
  "TextAnnotation",ExpressionUUID->"2dbd49df-1101-4cff-a920-24deb2c99379"],

Cell[CellGroupData[{

Cell[BoxData[
 RowBox[{"HashChain", "[", 
  RowBox[{"\"\<abc\>\"", ",", " ", "\"\<SHA256\>\""}], "]"}]], "Input",
 CellProlog:>Needs["WolframInstitute`Puzzles`"],
 CellLabel->"In[1]:=",ExpressionUUID->"1ba886f1-7a95-44ab-b423-7373393c36b3"],

Cell[BoxData["\<\"\
ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad\"\>"], \
"Output",
 CellLabel->"Out[1]= ",ExpressionUUID->"7d6a4497-1a5b-46f2-b94b-1fa9f540c590"]
}, Open  ]],

Cell[CellGroupData[{

Cell[BoxData[
 InterpretationBox[Cell[
  "\t", "ExampleDelimiter",ExpressionUUID->
   "81093530-a4f2-4b90-a7ec-a369f6f75389"],
  $Line = 0; Null]], "ExampleDelimiter",ExpressionUUID->"18611066-9663-4687-\
be7f-726744303760"],

Cell["Applying the digest twice is Bitcoin's double SHA-256:", "ExampleText",ExpressionUUID->"e7e9e82c-23ee-4d28-a8ab-f6ee86728389"],

Cell[CellGroupData[{

Cell[BoxData[
 RowBox[{"HashChain", "[", 
  RowBox[{"\"\<abc\>\"", ",", " ", "\"\<SHA256\>\"", ",", " ", "2"}], 
  "]"}]], "Input",
 CellProlog:>Needs["WolframInstitute`Puzzles`"],
 CellLabel->"In[1]:=",ExpressionUUID->"b6bcb371-cf06-4d84-8a52-8b985ac2e304"],

Cell[BoxData["\<\"\
4f8b42c22dd3729b519ba6f68d2da7cc5b2d606d05daed5ad5128cc03e6c6358\"\>"], \
"Output",
 CellLabel->"Out[1]= ",ExpressionUUID->"7be3ad9e-24df-4e3a-b19a-cf70480b7bbb"]
}, Open  ]]
}, Open  ]],

Cell[CellGroupData[{

Cell[BoxData[
 InterpretationBox[Cell[
  "\t", "ExampleDelimiter",ExpressionUUID->
   "de031c56-7a7e-418e-ae45-7d1bf14ecc38"],
  $Line = 0; Null]], "ExampleDelimiter",ExpressionUUID->"5fe2f4a5-0686-4b9f-\
bd02-4c43e04a4c83"],

Cell["A whole batch is hashed in one pass:", "ExampleText",ExpressionUUID->"003c1f8b-a90b-42bc-96e5-80c3ee6654fc"],

Cell[CellGroupData[{

Cell[BoxData[
 RowBox[{"HashChain", "[", 
  RowBox[{
   RowBox[{"{", 
    RowBox[{"\"\<a\>\"", ",", " ", "\"\<b\>\"", ",", " ", "\"\<c\>\""}], 
    "}"}], ",", " ", "\"\<SHA256\>\""}], "]"}]], "Input",
 CellProlog:>Needs["WolframInstitute`Puzzles`"],
 CellLabel->"In[1]:=",ExpressionUUID->"9f32a4d9-fc8e-48cb-a17f-c150f906d189"],

Cell[BoxData[
 RowBox[{"{", 
  RowBox[{"\<\"\
ca978112ca1bbdcafac231b39a23dc4da786eff8147c4e72b9807785afee48bb\"\>", 
   ",", "\<\"3e23e8160039594a33894f6564e1b1348bbd7a0088d42c4acb73eeaed59c009d\
\"\>", ",", \
"\<\"2e7d2c03a9507ae265ecf5b5356885a53393a2029d241394997265a1a25aefc6\"\>"}], 
  "}"}]], "Output",
 CellLabel->"Out[1]= ",ExpressionUUID->"ee91e6ba-1f30-4714-8ae9-0762ec5f3320"]
}, Open  ]]
}, Open  ]]
}, Open  ]],

Cell[CellGroupData[{

Cell[TextData[{
 Cell[BoxData[
  DynamicBox[ToBoxes[
    If[CurrentValue[
       EvaluationCell[], "CellGroupOpen"] =!= Closed, 
     Style[
      Graphics[{
        Thickness[0.18], 
        RGBColor[0.8509803921568627, 0.396078431372549, 0], 
        Line[{{-1.8, 0.5}, {0, 0}, {1.8, 0.5}}]}, AspectRatio -> 1, 
       PlotRange -> {{-3, 4}, {-1, 1}}, ImageSize -> 20], Magnification -> 
      0.68 Inherited], 
     Rotate[
      Style[
       Graphics[{
         Thickness[0.18], 
         RGBColor[0.8509803921568627, 0.396078431372549, 0], 
         Line[{{-1.8, 0.5}, {0, 0}, {1.8, 0.5}}]}, AspectRatio -> 1, 
        PlotRange -> {{-3, 4}, {-1, 1}}, ImageSize -> 20], Magnification -> 
       0.68 Inherited], Rational[1, 2] Pi, {-1.65, -1}]]]]],ExpressionUUID->
  "93ad063f-db9e-4796-8083-d367de6dcd50"],
 Cell[BoxData[
  TemplateBox[{1},
   "Spacer1"]],ExpressionUUID->"7801cd9f-eafb-4b79-ba48-e8d2b4882a0b"],
 "Scope",
 "\[NonBreakingSpace]\[NonBreakingSpace]",
 Cell["(9)", "ExampleCount",ExpressionUUID->
  "904c834a-2696-4638-b094-b917ba724967"]
}], "ExampleSection", "ExampleSection",
 WholeCellGroupOpener->True,
 CacheGraphics->False,
 CellID->1293636265,ExpressionUUID->"e9e3434f-d756-45b9-b11a-982ce9c93784"],

Cell[TextData[{
 "Raw bytes are given as a ",
 Cell[BoxData[
  TemplateBox[{
    Cell[
     TextData["ByteArray"]], "paclet:ref/ByteArray"},
   "RefLink",
   BaseStyle->"InlineFormula"]], "InlineFormula",
  FontFamily->"Source Sans Pro",
  FontSize->0.9 Inherited,ExpressionUUID->
  "d41131f3-b0fe-42a8-8803-7e7c15ec7065"],
 ", which is hashed as-is rather than as text:"
}], "ExampleText",ExpressionUUID->"f39909c8-e21b-4a8f-8708-ada3ea925851"],

Cell[CellGroupData[{

Cell[BoxData[
 RowBox[{"HashChain", "[", 
  RowBox[{
   RowBox[{"ByteArray", "[", 
    RowBox[{"{", 
     RowBox[{"0", ",", " ", "1", ",", " ", "2"}], "}"}], "]"}], ",", 
   " ", "\"\<SHA256\>\""}], "]"}]], "Input",
 CellProlog:>Needs["WolframInstitute`Puzzles`"],
 CellLabel->"In[1]:=",ExpressionUUID->"5c68d80d-ce3f-4324-8dc7-f968c462511e"],

Cell[BoxData["\<\"\
ae4b3280e56e2faf83f414a6e3dabe9d5fbe18976544c05fed121accb85b53fc\"\>"], \
"Output",
 CellLabel->"Out[1]= ",ExpressionUUID->"0e8cff28-9e58-41ae-8300-f38c47a222ea"]
}, Open  ]],

Cell[CellGroupData[{

Cell[BoxData[
 InterpretationBox[Cell[
  "\t", "ExampleDelimiter",ExpressionUUID->
   "12c5826e-2938-41ac-a3a0-ebf6b0347529"],
  $Line = 0; Null]], "ExampleDelimiter",ExpressionUUID->"30502cab-d3c9-454b-\
8718-30979c1fef6f"],

Cell["\<\
RIPEMD-160 gives a 160-bit digest, twenty bytes rather than thirty-two:\
\>", "ExampleText",ExpressionUUID->"d1938ab3-4587-4891-bcee-42ae444d7dc1"],

Cell[CellGroupData[{

Cell[BoxData[
 RowBox[{"HashChain", "[", 
  RowBox[{"\"\<abc\>\"", ",", " ", "\"\<RIPEMD160\>\""}], "]"}]], "Input",
 CellProlog:>Needs["WolframInstitute`Puzzles`"],
 CellLabel->"In[1]:=",ExpressionUUID->"7eb7b2e5-533d-4305-a3a3-b6a3bbfb7649"],

Cell[BoxData["\<\"8eb208f7e05d987a9b044a8e98c6b087f15a0bfc\"\>"], "Output",
 CellLabel->"Out[1]= ",ExpressionUUID->"b27f0eea-6315-479f-9c7f-87e54a00e049"]
}, Open  ]]
}, Open  ]],

Cell[CellGroupData[{

Cell[BoxData[
 InterpretationBox[Cell[
  "\t", "ExampleDelimiter",ExpressionUUID->
   "aab6987a-c68b-4048-a167-46193e3a74da"],
  $Line = 0; Null]], "ExampleDelimiter",ExpressionUUID->"68a6207f-b957-4bb8-\
8e0d-d18e5af5316b"],

Cell["\<\
Keccak-256 is the Ethereum digest, and differs from SHA3-256 on the same \
input:\
\>", "ExampleText",ExpressionUUID->"d48b3176-d8f3-48a2-a56e-58fc23d827eb"],

Cell[CellGroupData[{

Cell[BoxData[
 RowBox[{"HashChain", "[", 
  RowBox[{"\"\<\>\"", ",", " ", "\"\<Keccak256\>\""}], "]"}]], "Input",
 CellProlog:>Needs["WolframInstitute`Puzzles`"],
 CellLabel->"In[1]:=",ExpressionUUID->"26c9eff0-09ca-4fd5-88aa-d97c8225886d"],

Cell[BoxData["\<\"\
c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470\"\>"], \
"Output",
 CellLabel->"Out[1]= ",ExpressionUUID->"7f0444b9-e7c6-4296-b392-c8e5037721f9"]
}, Open  ]]
}, Open  ]],

Cell[CellGroupData[{

Cell[BoxData[
 InterpretationBox[Cell[
  "\t", "ExampleDelimiter",ExpressionUUID->
   "d7ac094a-3255-4ffe-a38f-0ce9997279bd"],
  $Line = 0; Null]], "ExampleDelimiter",ExpressionUUID->"266d18b2-5b4a-481d-\
ad66-1aecb5390d12"],

Cell["\<\
Zero iterations is the identity, giving the input bytes in hexadecimal:\
\>", "ExampleText",ExpressionUUID->"6b93c01d-17fb-494c-8d17-deec1286a8ed"],

Cell[CellGroupData[{

Cell[BoxData[
 RowBox[{"HashChain", "[", 
  RowBox[{"\"\<abc\>\"", ",", " ", "\"\<SHA256\>\"", ",", " ", "0"}], 
  "]"}]], "Input",
 CellProlog:>Needs["WolframInstitute`Puzzles`"],
 CellLabel->"In[1]:=",ExpressionUUID->"628705c1-f76d-4ea4-ac26-aad0ceb71a13"],

Cell[BoxData["\<\"616263\"\>"], "Output",
 CellLabel->"Out[1]= ",ExpressionUUID->"0b19d05d-28a3-4407-974c-6c94ec40cc86"]
}, Open  ]]
}, Open  ]],

Cell[CellGroupData[{

Cell[BoxData[
 InterpretationBox[Cell[
  "\t", "ExampleDelimiter",ExpressionUUID->
   "14a6322f-00eb-4052-861d-36782c16a35c"],
  $Line = 0; Null]], "ExampleDelimiter",ExpressionUUID->"8de8deba-9f43-4b3b-\
a74e-5d08530395c3"],

Cell["\<\
A long chain costs one call, since the iteration happens inside the compiled \
kernel:\
\>", "ExampleText",ExpressionUUID->"406b3d64-426f-483b-b322-312e7f104162"],

Cell[CellGroupData[{

Cell[BoxData[
 RowBox[{"HashChain", "[", 
  RowBox[{"\"\<abc\>\"", ",", " ", "\"\<SHA256\>\"", ",", " ", "5"}], 
  "]"}]], "Input",
 CellProlog:>Needs["WolframInstitute`Puzzles`"],
 CellLabel->"In[1]:=",ExpressionUUID->"8b7e0535-45e7-4dd8-ac9f-7fa160c37bb9"],

Cell[BoxData["\<\"\
184f6d6e82554c051b33f15e7ffffecb0cc0f461a29096c41c214e168e34c21d\"\>"], \
"Output",
 CellLabel->"Out[1]= ",ExpressionUUID->"87a81fca-dc38-4c79-9832-b7303efd8e7a"]
}, Open  ]]
}, Open  ]],

Cell[CellGroupData[{

Cell[BoxData[
 InterpretationBox[Cell[
  "\t", "ExampleDelimiter",ExpressionUUID->
   "6de8d167-ad2c-4615-aba2-a7640f681012"],
  $Line = 0; Null]], "ExampleDelimiter",ExpressionUUID->"46445a8a-6682-434e-\
8ac4-e9517461c99c"],

Cell["The digest can be returned as raw bytes rather than as text:", \
"ExampleText",ExpressionUUID->"244edb14-9361-40d9-95fe-fbd54a3e2f11"],

Cell[CellGroupData[{

Cell[BoxData[
 RowBox[{"HashChain", "[", 
  RowBox[{"\"\<abc\>\"", ",", " ", "\"\<SHA256\>\"", ",", " ", "1", ",", 
   " ", "\"\<ByteArray\>\""}], "]"}]], "Input",
 CellProlog:>Needs["WolframInstitute`Puzzles`"],
 CellLabel->"In[1]:=",ExpressionUUID->"ef93a021-6665-4c58-a4a9-60cb825cad03"],

Cell[BoxData[
 InterpretationBox[
  RowBox[{
   TagBox["ByteArray",
    "SummaryHead"], "[", 
   DynamicModuleBox[{Typeset`open$$ = False, Typeset`embedState$$ = "Ready"}, 
    
    TemplateBox[{
      PaneSelectorBox[{False -> GridBox[{{
            GridBox[{{
               TagBox["\"32 bytes\"", "SummaryItem"]}}, 
             GridBoxAlignment -> {
              "Columns" -> {{Left}}, "Rows" -> {{Automatic}}}, AutoDelete -> 
             False, GridBoxItemSize -> {
              "Columns" -> {{Automatic}}, "Rows" -> {{Automatic}}}, 
             GridBoxSpacings -> {"Columns" -> {{2}}, "Rows" -> {{Automatic}}},
              BaseStyle -> {
              ShowStringCharacters -> False, NumberMarks -> False, 
               PrintPrecision -> 3, ShowSyntaxStyles -> False}]}}, 
          GridBoxAlignment -> {"Columns" -> {{Left}}, "Rows" -> {{Top}}}, 
          AutoDelete -> False, 
          GridBoxItemSize -> {
           "Columns" -> {{Automatic}}, "Rows" -> {{Automatic}}}, 
          BaselinePosition -> {1, 1}], True -> GridBox[{{
            GridBox[{{
               TagBox["\"32 bytes\"", "SummaryItem"]}}, 
             GridBoxAlignment -> {
              "Columns" -> {{Left}}, "Rows" -> {{Automatic}}}, AutoDelete -> 
             False, GridBoxItemSize -> {
              "Columns" -> {{Automatic}}, "Rows" -> {{Automatic}}}, 
             GridBoxSpacings -> {"Columns" -> {{2}}, "Rows" -> {{Automatic}}},
              BaseStyle -> {
              ShowStringCharacters -> False, NumberMarks -> False, 
               PrintPrecision -> 3, ShowSyntaxStyles -> False}]}}, 
          GridBoxAlignment -> {"Columns" -> {{Left}}, "Rows" -> {{Top}}}, 
          AutoDelete -> False, 
          GridBoxItemSize -> {
           "Columns" -> {{Automatic}}, "Rows" -> {{Automatic}}}, 
          BaselinePosition -> {1, 1}]}, 
       Dynamic[Typeset`open$$], ImageSize -> Automatic]},
     "SummaryPanel"],
    DynamicModuleValues:>{}], "]"}],
  ByteArray[{186, 120, 22, 191, 143, 1, 207, 234, 65, 65, 64, 222, 93, 174, 
   34, 35, 176, 3, 97, 163, 150, 23, 122, 156, 180, 16, 255, 97, 242, 0, 21, 
   173}],
  Editable->False,
  SelectWithContents->True,
  Selectable->False]], "Output",
 CellLabel->"Out[1]= ",ExpressionUUID->"ae003e0d-e9f6-461c-8035-62f456ef4368"]
}, Open  ]]
}, Open  ]],

Cell[CellGroupData[{

Cell[BoxData[
 InterpretationBox[Cell[
  "\t", "ExampleDelimiter",ExpressionUUID->
   "0209d96d-fe58-4963-9a64-8cfa726ce0fd"],
  $Line = 0; Null]], "ExampleDelimiter",ExpressionUUID->"177729c8-eeba-4a95-\
a439-3b6485da38db"],

Cell["Or as the big-endian integer the bytes spell:", "ExampleText",ExpressionUUID->"1eeb1a1b-8406-4dfe-8c83-a213031db152"],

Cell[CellGroupData[{

Cell[BoxData[
 RowBox[{"HashChain", "[", 
  RowBox[{"\"\<abc\>\"", ",", " ", "\"\<SHA256\>\"", ",", " ", "1", ",", 
   " ", "\"\<Integer\>\""}], "]"}]], "Input",
 CellProlog:>Needs["WolframInstitute`Puzzles`"],
 CellLabel->"In[1]:=",ExpressionUUID->"00c6f769-1767-43b8-9160-e480344f744a"],

Cell[BoxData[\
"84342368487090800366523834928142263660104883695016514377462985829716817089965\
"], "Output",
 CellLabel->"Out[1]= ",ExpressionUUID->"869d6d51-f9b7-4d70-971c-f83024b52602"]
}, Open  ]]
}, Open  ]],

Cell[CellGroupData[{

Cell[BoxData[
 InterpretationBox[Cell[
  "\t", "ExampleDelimiter",ExpressionUUID->
   "9e419cd5-6c6b-41e7-8b54-6782979331cf"],
  $Line = 0; Null]], "ExampleDelimiter",ExpressionUUID->"d572b9b3-e58a-4f03-\
b868-7507cb90dab2"],

Cell["\<\
A method the kernel does not provide is out of scope and is returned \
unevaluated:\
\>", "ExampleText",ExpressionUUID->"10d2b400-e239-4b0f-b737-e6211e24f2f5"],

Cell[CellGroupData[{

Cell[BoxData[
 RowBox[{"HashChain", "[", 
  RowBox[{"\"\<abc\>\"", ",", " ", "\"\<SHA255\>\""}], "]"}]], "Input",
 CellProlog:>Needs["WolframInstitute`Puzzles`"],
 CellLabel->"In[1]:=",ExpressionUUID->"e556e155-c501-44ae-b1f6-129cf18efe07"],

Cell[BoxData[
 RowBox[{"HashChain", "[", 
  RowBox[{"\<\"abc\"\>", ",", "\<\"SHA255\"\>"}], "]"}]], "Output",
 CellLabel->"Out[1]= ",ExpressionUUID->"c272da6e-6c88-42f1-99b5-104e5e6b4be6"]
}, Open  ]]
}, Open  ]],

Cell[CellGroupData[{

Cell[BoxData[
 InterpretationBox[Cell[
  "\t", "ExampleDelimiter",ExpressionUUID->
   "65205918-fe86-4e24-a6aa-d8fc5e384b46"],
  $Line = 0; Null]], "ExampleDelimiter",ExpressionUUID->"836dadc7-affa-4217-\
9f2b-48dcdc0eecbe"],

Cell["So is a negative iteration count:", "ExampleText",ExpressionUUID->"821ef138-0a8e-496b-b7b5-968b46b44d13"],

Cell[CellGroupData[{

Cell[BoxData[
 RowBox[{"HashChain", "[", 
  RowBox[{"\"\<abc\>\"", ",", " ", "\"\<SHA256\>\"", ",", " ", 
   RowBox[{"-", "1"}]}], "]"}]], "Input",
 CellProlog:>Needs["WolframInstitute`Puzzles`"],
 CellLabel->"In[1]:=",ExpressionUUID->"e1140111-b880-48c4-a162-3161b98081cf"],

Cell[BoxData[
 RowBox[{"HashChain", "[", 
  RowBox[{"\<\"abc\"\>", ",", "\<\"SHA256\"\>", ",", 
   RowBox[{"-", "1"}]}], "]"}]], "Output",
 CellLabel->"Out[1]= ",ExpressionUUID->"26bd6fcd-ac7c-444d-9ef1-9d02f5fabe0e"]
}, Open  ]]
}, Open  ]]
}, Closed]],

Cell[CellGroupData[{

Cell[TextData[{
 Cell[BoxData[
  DynamicBox[ToBoxes[
    If[CurrentValue[
       EvaluationCell[], "CellGroupOpen"] =!= Closed, 
     Style[
      Graphics[{
        Thickness[0.18], 
        RGBColor[0.8509803921568627, 0.396078431372549, 0], 
        Line[{{-1.8, 0.5}, {0, 0}, {1.8, 0.5}}]}, AspectRatio -> 1, 
       PlotRange -> {{-3, 4}, {-1, 1}}, ImageSize -> 20], Magnification -> 
      0.68 Inherited], 
     Rotate[
      Style[
       Graphics[{
         Thickness[0.18], 
         RGBColor[0.8509803921568627, 0.396078431372549, 0], 
         Line[{{-1.8, 0.5}, {0, 0}, {1.8, 0.5}}]}, AspectRatio -> 1, 
        PlotRange -> {{-3, 4}, {-1, 1}}, ImageSize -> 20], Magnification -> 
       0.68 Inherited], Rational[1, 2] Pi, {-1.65, -1}]]]]],ExpressionUUID->
  "aa992681-6c74-48f5-a8cc-b4dd9d2ef13e"],
 Cell[BoxData[
  TemplateBox[{1},
   "Spacer1"]],ExpressionUUID->"9129273f-21e8-48ef-b5ad-d46885c1b25d"],
 "Options",
 "\[NonBreakingSpace]\[NonBreakingSpace]",
 Cell["(2)", "ExampleCount",ExpressionUUID->
  "1abab096-87cf-4527-b9bb-1086d5e15917"]
}], "ExampleSection", "ExampleSection",
 WholeCellGroupOpener->True,
 CacheGraphics->False,
 CellID->2061341341,ExpressionUUID->"282511f3-e9e0-4585-9824-13958cd5bc98"],

Cell[TextData[{
 "Setting ",
 Cell[BoxData["\<\"Implementation\"\>"], "InlineFormula",
  FontFamily->"Source Sans Pro",
  FontSize->0.9 Inherited,ExpressionUUID->
  "fcb79111-a0ce-4056-b2e3-0b3ba0bff0a3"],
 " to ",
 Cell[BoxData["\<\"Kernel\"\>"], "InlineFormula",
  FontFamily->"Source Sans Pro",
  FontSize->0.9 Inherited,ExpressionUUID->
  "0cbefd01-8a7a-4939-a790-63bce51ae9ad"],
 " computes the digest with the kernel's ",
 Cell[BoxData[
  TemplateBox[{
    Cell[
     TextData["Hash"]], "paclet:ref/Hash"},
   "RefLink",
   BaseStyle->"InlineFormula"]], "InlineFormula",
  FontFamily->"Source Sans Pro",
  FontSize->0.9 Inherited,ExpressionUUID->
  "62dc2606-3897-4bb3-bc85-2e31bdd777a5"],
 " instead of the compiled kernel, giving the same result:"
}], "ExampleText",ExpressionUUID->"dc11fd4e-6bd8-4291-8bd0-32b0b0d6d948"],

Cell[CellGroupData[{

Cell[BoxData[
 RowBox[{"HashChain", "[", 
  RowBox[{"\"\<abc\>\"", ",", " ", "\"\<SHA256\>\"", ",", " ", "1", ",", 
   " ", "\"\<HexString\>\"", ",", " ", 
   RowBox[{"\"\<Implementation\>\"", " ", "->", " ", "\"\<Kernel\>\""}]}], 
  "]"}]], "Input",
 CellProlog:>Needs["WolframInstitute`Puzzles`"],
 CellLabel->"In[1]:=",ExpressionUUID->"fbb3ade5-0343-404d-9973-9c0dc80e2f45"],

Cell[BoxData["\<\"\
ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad\"\>"], \
"Output",
 CellLabel->"Out[1]= ",ExpressionUUID->"34e0d88b-3f31-4809-b273-5dd22ab549b4"]
}, Open  ]],

Cell[CellGroupData[{

Cell[BoxData[
 InterpretationBox[Cell[
  "\t", "ExampleDelimiter",ExpressionUUID->
   "a0bd7f22-89d6-4500-bddb-90675b54725d"],
  $Line = 0; Null]], "ExampleDelimiter",ExpressionUUID->"f5d5536e-4e35-4bf0-\
beda-b26086d30525"],

Cell["\<\
The two implementations agree on every method that has both, which is what \
makes the compiled path safe to prefer:\
\>", "ExampleText",ExpressionUUID->"24f2dfb7-29e6-4d6d-8ed1-49215259ce02"],

Cell[CellGroupData[{

Cell[BoxData[
 RowBox[{
  RowBox[{"HashChain", "[", 
   RowBox[{
    RowBox[{"{", 
     RowBox[{"\"\<\>\"", ",", " ", "\"\<a\>\"", ",", " ", "\"\<satoshi\>\""}],
      "}"}], ",", " ", "\"\<RIPEMD160SHA256\>\"", ",", " ", "2", ",", 
    " ", "\"\<HexString\>\"", ",", " ", 
    RowBox[{"\"\<Implementation\>\"", " ", "->", " ", "\"\<Compiled\>\""}]}], 
   "]"}], " ", "===", "\n", "\t", 
  RowBox[{"HashChain", "[", 
   RowBox[{
    RowBox[{"{", 
     RowBox[{"\"\<\>\"", ",", " ", "\"\<a\>\"", ",", " ", "\"\<satoshi\>\""}],
      "}"}], ",", " ", "\"\<RIPEMD160SHA256\>\"", ",", " ", "2", ",", 
    " ", "\"\<HexString\>\"", ",", " ", 
    RowBox[{"\"\<Implementation\>\"", " ", "->", " ", "\"\<Kernel\>\""}]}], 
   "]"}]}]], "Input",
 CellProlog:>Needs["WolframInstitute`Puzzles`"],
 CellLabel->"In[1]:=",ExpressionUUID->"62578e30-e0dd-49b4-834a-251e7fe12e1b"],

Cell[BoxData["True"], "Output",
 CellLabel->"Out[1]= ",ExpressionUUID->"7640dc6a-e60c-4158-b4c3-0155adf59747"]
}, Open  ]]
}, Open  ]]
}, Closed]],

Cell[CellGroupData[{

Cell[TextData[{
 Cell[BoxData[
  DynamicBox[ToBoxes[
    If[CurrentValue[
       EvaluationCell[], "CellGroupOpen"] =!= Closed, 
     Style[
      Graphics[{
        Thickness[0.18], 
        RGBColor[0.8509803921568627, 0.396078431372549, 0], 
        Line[{{-1.8, 0.5}, {0, 0}, {1.8, 0.5}}]}, AspectRatio -> 1, 
       PlotRange -> {{-3, 4}, {-1, 1}}, ImageSize -> 20], Magnification -> 
      0.68 Inherited], 
     Rotate[
      Style[
       Graphics[{
         Thickness[0.18], 
         RGBColor[0.8509803921568627, 0.396078431372549, 0], 
         Line[{{-1.8, 0.5}, {0, 0}, {1.8, 0.5}}]}, AspectRatio -> 1, 
        PlotRange -> {{-3, 4}, {-1, 1}}, ImageSize -> 20], Magnification -> 
       0.68 Inherited], Rational[1, 2] Pi, {-1.65, -1}]]]]],ExpressionUUID->
  "b429075f-b49f-4f36-8077-4892b667d6b0"],
 Cell[BoxData[
  TemplateBox[{1},
   "Spacer1"]],ExpressionUUID->"1d178069-ce59-4653-bd39-46222e23da29"],
 "Applications",
 "\[NonBreakingSpace]\[NonBreakingSpace]",
 Cell["(4)", "ExampleCount",ExpressionUUID->
  "12dd2ae2-8e17-4c84-a825-d73b320c81ae"]
}], "ExampleSection", "ExampleSection",
 WholeCellGroupOpener->True,
 CacheGraphics->False,
 CellID->258228157,ExpressionUUID->"a1c16e37-b815-469e-8516-b041cc9a107a"],

Cell["\<\
The double SHA-256 of the eighty serialized bytes of the Bitcoin genesis \
block header:\
\>", "ExampleText",ExpressionUUID->"554281d8-7386-4e57-8a0b-b4cd772fff7d"],

Cell[CellGroupData[{

Cell[BoxData[
 RowBox[{"HashChain", "[", "\n", "\t", 
  RowBox[{
   RowBox[{"BaseDecode", "[", "\n", "\t\t", 
    RowBox[{
     RowBox[{"\"\<\
0100000000000000000000000000000000000000000000000000000000000000\>\"", " ", "<>",
       "\n", "\t\t", \
"\"\<000000003ba3edfd7a7b12b27ac72c3e67768f617fc81bc3888a51323a9fb8aa\>\"", 
      " ", "<>", "\n", "\t\t", "\"\<4b1e5e4a29ab5f49ffff001d1dac2b7c\>\""}], ",",
      "\n", "\t\t", "\"\<Base16\>\""}], "\n", "\t", "]"}], ",", "\n", 
   "\t", "\"\<SHA256\>\"", ",", " ", "2"}], "\n", "]"}]], "Input",
 CellProlog:>Needs["WolframInstitute`Puzzles`"],
 CellLabel->"In[1]:=",ExpressionUUID->"da0fc705-6036-4929-8fdf-250f69ca6818"],

Cell[BoxData["\<\"\
6fe28c0ab6f1b372c1a6a246ae63f74f931e8365e15a089c68d6190000000000\"\>"], \
"Output",
 CellLabel->"Out[1]= ",ExpressionUUID->"f916631f-f45a-40a3-86f0-1981b24437ed"]
}, Open  ]],

Cell[CellGroupData[{

Cell[BoxData[
 InterpretationBox[Cell[
  "\t", "ExampleDelimiter",ExpressionUUID->
   "b40d26e7-da41-40ce-aaee-596fc6c4fc4c"],
  $Line = 0; Null]], "ExampleDelimiter",ExpressionUUID->"a5b9c652-51cf-432c-\
8212-b2e364f1c458"],

Cell["\<\
Block hashes are quoted byte-reversed, which turns that digest into the \
published genesis block id:\
\>", "ExampleText",ExpressionUUID->"93955672-0afa-4e44-a860-8c070429d9d8"],

Cell[CellGroupData[{

Cell[BoxData[
 RowBox[{"StringJoin", "[", 
  RowBox[{"Reverse", "[", 
   RowBox[{"StringPartition", "[", "\n", "\t", 
    RowBox[{
     RowBox[{"HashChain", "[", "\n", "\t\t", 
      RowBox[{
       RowBox[{"BaseDecode", "[", "\n", "\t\t\t", 
        RowBox[{
         RowBox[{"\"\<\
0100000000000000000000000000000000000000000000000000000000000000\>\"", " ", "<>",
           "\n", "\t\t\t", \
"\"\<000000003ba3edfd7a7b12b27ac72c3e67768f617fc81bc3888a51323a9fb8aa\>\"", 
          " ", "<>", "\n", 
          "\t\t\t", "\"\<4b1e5e4a29ab5f49ffff001d1dac2b7c\>\""}], ",", "\n", 
         "\t\t\t", "\"\<Base16\>\""}], "\n", "\t\t", "]"}], ",", "\n", 
       "\t\t", "\"\<SHA256\>\"", ",", " ", "2"}], "\n", "\t", "]"}], ",", 
     "\n", "\t", "2"}], "\n", "]"}], "]"}], "]"}]], "Input",
 CellProlog:>Needs["WolframInstitute`Puzzles`"],
 CellLabel->"In[1]:=",ExpressionUUID->"24626306-d5c2-4a39-b6d8-ab808f9e1a8e"],

Cell[BoxData["\<\"\
000000000019d6689c085ae165831e934ff763ae46a2a6c172b3f1b60a8ce26f\"\>"], \
"Output",
 CellLabel->"Out[1]= ",ExpressionUUID->"67616312-35f8-437b-a8dd-8614e8cd5bba"]
}, Open  ]]
}, Open  ]],

Cell[CellGroupData[{

Cell[BoxData[
 InterpretationBox[Cell[
  "\t", "ExampleDelimiter",ExpressionUUID->
   "93472e70-06fc-48c7-89eb-2cdb8cf9636a"],
  $Line = 0; Null]], "ExampleDelimiter",ExpressionUUID->"28a46d18-276e-43f4-\
b7c1-12f0f71ac2a0"],

Cell["\<\
The HASH160 of an uncompressed public key is the payload of its \
pay-to-public-key-hash address:\
\>", "ExampleText",ExpressionUUID->"aae269dd-7fc4-48b9-9aa8-c7f3770a82cf"],

Cell[CellGroupData[{

Cell[BoxData[
 RowBox[{"HashChain", "[", "\n", "\t", 
  RowBox[{
   RowBox[{"BaseDecode", "[", "\n", "\t\t", 
    RowBox[{
     RowBox[{"\"\<\
0450863ad64a87ae8a2fe83c1af1a8403cb53f53e486d8511dad8a04887e5b23\>\"", " ", "<>",
       "\n", "\t\t", \
"\"\<522cd470243453a299fa9e77237716103abc11a1df38855ed6f2ee187e9c582b\>\"", 
      " ", "<>", "\n", "\t\t", "\"\<a6\>\""}], ",", "\n", 
     "\t\t", "\"\<Base16\>\""}], "\n", "\t", "]"}], ",", "\n", 
   "\t", "\"\<RIPEMD160SHA256\>\""}], "\n", "]"}]], "Input",
 CellProlog:>Needs["WolframInstitute`Puzzles`"],
 CellLabel->"In[1]:=",ExpressionUUID->"98d546ce-7af7-4153-a16c-5652bb1d1c53"],

Cell[BoxData["\<\"010966776006953d5567439e5e39f86a0d273bee\"\>"], "Output",
 CellLabel->"Out[1]= ",ExpressionUUID->"5a92ab4d-afe9-4c1c-a029-3bd46c266589"]
}, Open  ]]
}, Open  ]],

Cell[CellGroupData[{

Cell[BoxData[
 InterpretationBox[Cell[
  "\t", "ExampleDelimiter",ExpressionUUID->
   "36b5015e-181d-4c94-8173-949a35a21420"],
  $Line = 0; Null]], "ExampleDelimiter",ExpressionUUID->"93338f01-0889-4b29-\
a4a5-2d1324cfb426"],

Cell["\<\
The first four bytes of the double SHA-256 of the versioned payload are that \
address's Base58Check checksum:\
\>", "ExampleText",ExpressionUUID->"7aaa572c-5fa4-4cf8-935e-414a8063fbf6"],

Cell[CellGroupData[{

Cell[BoxData[
 RowBox[{"StringTake", "[", 
  RowBox[{
   RowBox[{"HashChain", "[", 
    RowBox[{
     RowBox[{"BaseDecode", "[", 
      RowBox[{"\"\<00010966776006953d5567439e5e39f86a0d273bee\>\"", ",", 
       " ", "\"\<Base16\>\""}], "]"}], ",", " ", "\"\<SHA256\>\"", ",", " ", 
     "2"}], "]"}], ",", " ", "8"}], "]"}]], "Input",
 CellProlog:>Needs["WolframInstitute`Puzzles`"],
 CellLabel->"In[1]:=",ExpressionUUID->"4217c471-ca26-497e-a4bf-d80f3242889f"],

Cell[BoxData["\<\"d61967f6\"\>"], "Output",
 CellLabel->"Out[1]= ",ExpressionUUID->"855020f7-a654-4614-b310-c2c1211950fd"]
}, Open  ]]
}, Open  ]]
}, Closed]],

Cell[CellGroupData[{

Cell[TextData[{
 Cell[BoxData[
  DynamicBox[ToBoxes[
    If[CurrentValue[
       EvaluationCell[], "CellGroupOpen"] =!= Closed, 
     Style[
      Graphics[{
        Thickness[0.18], 
        RGBColor[0.8509803921568627, 0.396078431372549, 0], 
        Line[{{-1.8, 0.5}, {0, 0}, {1.8, 0.5}}]}, AspectRatio -> 1, 
       PlotRange -> {{-3, 4}, {-1, 1}}, ImageSize -> 20], Magnification -> 
      0.68 Inherited], 
     Rotate[
      Style[
       Graphics[{
         Thickness[0.18], 
         RGBColor[0.8509803921568627, 0.396078431372549, 0], 
         Line[{{-1.8, 0.5}, {0, 0}, {1.8, 0.5}}]}, AspectRatio -> 1, 
        PlotRange -> {{-3, 4}, {-1, 1}}, ImageSize -> 20], Magnification -> 
       0.68 Inherited], Rational[1, 2] Pi, {-1.65, -1}]]]]],ExpressionUUID->
  "2d3ddafd-96bb-4d6b-a1a0-737701496f46"],
 Cell[BoxData[
  TemplateBox[{1},
   "Spacer1"]],ExpressionUUID->"0569907e-4c2d-40c5-b664-0d64b52c9ac6"],
 "Properties & Relations",
 "\[NonBreakingSpace]\[NonBreakingSpace]",
 Cell["(3)", "ExampleCount",ExpressionUUID->
  "9a815ac0-c5ec-4c5b-b5a2-ea65fad31a82"]
}], "ExampleSection", "ExampleSection",
 WholeCellGroupOpener->True,
 CacheGraphics->False,
 CellID->2123667759,ExpressionUUID->"61c5c24b-5f10-4cab-a49d-7c29f934745a"],

Cell[TextData[{
 "A single digest agrees with the kernel's ",
 Cell[BoxData[
  TemplateBox[{
    Cell[
     TextData["Hash"]], "paclet:ref/Hash"},
   "RefLink",
   BaseStyle->"InlineFormula"]], "InlineFormula",
  FontFamily->"Source Sans Pro",
  FontSize->0.9 Inherited,ExpressionUUID->
  "f4988ad5-afdd-45fa-a9ce-18a1750e03f6"],
 ", which computes the same quantity without the chain, the batch form, or \
the compiled kernel:"
}], "ExampleText",ExpressionUUID->"ecd17315-9add-4c95-bcc2-5de20075cc3c"],

Cell[CellGroupData[{

Cell[BoxData[
 RowBox[{
  RowBox[{"HashChain", "[", 
   RowBox[{"\"\<abc\>\"", ",", " ", "\"\<SHA256\>\""}], "]"}], " ", "===", 
  " ", 
  RowBox[{"Hash", "[", 
   RowBox[{"\"\<abc\>\"", ",", " ", "\"\<SHA256\>\"", ",", 
    " ", "\"\<HexString\>\""}], "]"}]}]], "Input",
 CellProlog:>Needs["WolframInstitute`Puzzles`"],
 CellLabel->"In[1]:=",ExpressionUUID->"4386a7be-d871-413f-a88b-5ca4c709884f"],

Cell[BoxData["True"], "Output",
 CellLabel->"Out[1]= ",ExpressionUUID->"23259cf2-c516-498d-afcd-5455c9f395cf"]
}, Open  ]],

Cell[CellGroupData[{

Cell[BoxData[
 InterpretationBox[Cell[
  "\t", "ExampleDelimiter",ExpressionUUID->
   "bc29a7f4-4a94-4a00-9a86-0d64ebfe20f1"],
  $Line = 0; Null]], "ExampleDelimiter",ExpressionUUID->"03320880-f78a-4625-\
953f-dac89cd0be78"],

Cell[TextData[{
 "An ",
 Cell[BoxData[
  StyleBox["n", "TI"]], "InlineFormula",
  FontFamily->"Source Sans Pro",
  FontSize->0.9 Inherited,ExpressionUUID->
  "338edd3d-91c7-4272-97a0-f0b39d140d87"],
 "-fold chain is the digest of the raw bytes of the ",
 Cell[BoxData[
  RowBox[{
   StyleBox["(",
    SpanMaxSize->1], 
   RowBox[{
    StyleBox["n", "TI"], "-", "1"}], 
   StyleBox[")",
    SpanMaxSize->1]}]], "InlineFormula",
  FontFamily->"Source Sans Pro",
  FontSize->0.9 Inherited,ExpressionUUID->
  "abc5f557-d766-4194-8395-bc665cb3c3f3"],
 "-fold chain:"
}], "ExampleText",ExpressionUUID->"4ba99c0c-4e60-4cb1-804c-5c69cf0e0ac8"],

Cell[CellGroupData[{

Cell[BoxData[
 RowBox[{
  RowBox[{"HashChain", "[", 
   RowBox[{"\"\<abc\>\"", ",", " ", "\"\<SHA256\>\"", ",", " ", "2"}], "]"}], 
  " ", "===", " ", 
  RowBox[{"HashChain", "[", 
   RowBox[{
    RowBox[{"HashChain", "[", 
     RowBox[{"\"\<abc\>\"", ",", " ", "\"\<SHA256\>\"", ",", " ", "1", ",", 
      " ", "\"\<ByteArray\>\""}], "]"}], ",", " ", "\"\<SHA256\>\""}], 
   "]"}]}]], "Input",
 CellProlog:>Needs["WolframInstitute`Puzzles`"],
 CellLabel->"In[1]:=",ExpressionUUID->"f3d212d1-5e19-485b-9a2f-8c3311568a4c"],

Cell[BoxData["True"], "Output",
 CellLabel->"Out[1]= ",ExpressionUUID->"85f150ec-3956-4112-ac5f-b78bfe72fbcd"]
}, Open  ]]
}, Open  ]],

Cell[CellGroupData[{

Cell[BoxData[
 InterpretationBox[Cell[
  "\t", "ExampleDelimiter",ExpressionUUID->
   "aabfdb5e-0b0d-42b9-bb2e-60fa650bb77f"],
  $Line = 0; Null]], "ExampleDelimiter",ExpressionUUID->"251aca21-eea6-4aa8-\
a641-ee249ecf7246"],

Cell["\<\
A string is hashed as its UTF-8 bytes, so it agrees with the same bytes given \
directly:\
\>", "ExampleText",ExpressionUUID->"598e1479-4fc0-44c9-a3b0-61aa64144b03"],

Cell[CellGroupData[{

Cell[BoxData[
 RowBox[{
  RowBox[{"HashChain", "[", 
   RowBox[{"\"\<abc\>\"", ",", " ", "\"\<SHA256\>\""}], "]"}], " ", "===", 
  " ", 
  RowBox[{"HashChain", "[", 
   RowBox[{
    RowBox[{"ByteArray", "[", 
     RowBox[{"{", 
      RowBox[{"97", ",", " ", "98", ",", " ", "99"}], "}"}], "]"}], ",", 
    " ", "\"\<SHA256\>\""}], "]"}]}]], "Input",
 CellProlog:>Needs["WolframInstitute`Puzzles`"],
 CellLabel->"In[1]:=",ExpressionUUID->"8621ef91-7b73-4b95-ab1b-aa39d6614047"],

Cell[BoxData["True"], "Output",
 CellLabel->"Out[1]= ",ExpressionUUID->"7af48307-2433-4cbe-a5ea-301c4a11e946"]
}, Open  ]]
}, Open  ]]
}, Closed]],

Cell[CellGroupData[{

Cell[TextData[{
 Cell[BoxData[
  DynamicBox[ToBoxes[
    If[CurrentValue[
       EvaluationCell[], "CellGroupOpen"] =!= Closed, 
     Style[
      Graphics[{
        Thickness[0.18], 
        RGBColor[0.8509803921568627, 0.396078431372549, 0], 
        Line[{{-1.8, 0.5}, {0, 0}, {1.8, 0.5}}]}, AspectRatio -> 1, 
       PlotRange -> {{-3, 4}, {-1, 1}}, ImageSize -> 20], Magnification -> 
      0.68 Inherited], 
     Rotate[
      Style[
       Graphics[{
         Thickness[0.18], 
         RGBColor[0.8509803921568627, 0.396078431372549, 0], 
         Line[{{-1.8, 0.5}, {0, 0}, {1.8, 0.5}}]}, AspectRatio -> 1, 
        PlotRange -> {{-3, 4}, {-1, 1}}, ImageSize -> 20], Magnification -> 
       0.68 Inherited], Rational[1, 2] Pi, {-1.65, -1}]]]]],ExpressionUUID->
  "47f17bba-8827-4ed9-8e8c-1a084c60483f"],
 Cell[BoxData[
  TemplateBox[{1},
   "Spacer1"]],ExpressionUUID->"b9c68741-9fa0-4f42-a052-ae37664fe82e"],
 "Possible Issues",
 "\[NonBreakingSpace]\[NonBreakingSpace]",
 Cell["(2)", "ExampleCount",ExpressionUUID->
  "f0aead48-500c-4cd7-b73f-e463b7081e61"]
}], "ExampleSection", "ExampleSection",
 WholeCellGroupOpener->True,
 CacheGraphics->False,
 CellID->1305812373,ExpressionUUID->"22102b52-d1ad-43a6-9fcb-c6bf6a44f6dc"],

Cell[TextData[{
 "The ",
 Cell[BoxData["\<\"Integer\"\>"], "InlineFormula",
  FontFamily->"Source Sans Pro",
  FontSize->0.9 Inherited,ExpressionUUID->
  "f473b20e-0ec3-468b-8f06-bac2d224782c"],
 " form is the numeric value of the digest bytes, so a digest beginning with \
a zero byte has fewer than the expected number of hexadecimal digits when \
converted back by hand:"
}], "ExampleText",ExpressionUUID->"68ce98e1-c694-4871-ad85-6b39ba1d4eef"],

Cell[CellGroupData[{

Cell[BoxData[
 RowBox[{"HashChain", "[", 
  RowBox[{
   RowBox[{"ByteArray", "[", 
    RowBox[{"{", "18", "}"}], "]"}], ",", " ", "\"\<SHA256\>\"", ",", " ", 
   "1", ",", " ", "\"\<Integer\>\""}], "]"}]], "Input",
 CellProlog:>Needs["WolframInstitute`Puzzles`"],
 CellLabel->"In[1]:=",ExpressionUUID->"5a65f1a6-dc35-4478-88ab-bb7f94ac34e2"],

Cell[BoxData[\
"10973087284760918847830945157214812215033080207200058505076324994240321306343\
6"], "Output",
 CellLabel->"Out[1]= ",ExpressionUUID->"4e638a64-947a-48af-963c-562cdf8a26b6"]
}, Open  ]],

Cell[CellGroupData[{

Cell[BoxData[
 InterpretationBox[Cell[
  "\t", "ExampleDelimiter",ExpressionUUID->
   "5d2b675d-7097-4b11-b97c-4dc815acb4da"],
  $Line = 0; Null]], "ExampleDelimiter",ExpressionUUID->"97ce9645-2c94-4d8c-\
bdf9-59c4d4f8b200"],

Cell[TextData[{
 "The first call that needs a compiled kernel builds and validates it, which \
takes a few seconds; every later call in the session is immediate. Which \
kernels are already built is visible in ",
 Cell[BoxData[
  TemplateBox[{
    Cell[
     TextData["$OracleCompiledDigests"]], 
    "paclet:WolframInstitute/Puzzles/ref/$OracleCompiledDigests", 
    "WolframInstitute/Puzzles Package Symbol"},
   "PackageLink",
   BaseStyle->"InlineFormula"]], "InlineFormula",
  FontFamily->"Source Sans Pro",
  FontSize->0.9 Inherited,ExpressionUUID->
  "86fe64b2-9efe-4c63-9dd6-8d9da0c2b3f2"],
 ":"
}], "ExampleText",ExpressionUUID->"445b2d96-ee97-4c0c-8044-bd99097f9f01"],

Cell[CellGroupData[{

Cell[BoxData["$OracleCompiledDigests"], "Input",
 CellProlog:>Needs["WolframInstitute`Puzzles`"],
 CellLabel->"In[1]:=",ExpressionUUID->"d4653a55-8ca8-4a57-ad75-e1b02cd761d4"],

Cell[BoxData[
 RowBox[{"\[LeftAssociation]", 
  RowBox[{
   RowBox[{"\<\"RIPEMD160\"\>", "\[Rule]", "\<\"C\"\>"}], ",", 
   RowBox[{"\<\"SHA256\"\>", "\[Rule]", "\<\"C\"\>"}], ",", 
   RowBox[{"\<\"SHA512\"\>", "\[Rule]", "\<\"C\"\>"}]}], 
  "\[RightAssociation]"}]], "Output",
 CellLabel->"Out[1]= ",ExpressionUUID->"fae1e57b-faa7-4232-bd57-3e2c6d5caa90"]
}, Open  ]]
}, Open  ]]
}, Closed]]
}, Open  ]],

Cell[BoxData[GridBox[{
   {
    DynamicBox[FEPrivate`ImportImage[
      FrontEnd`FileName[{"Documentation", "FooterIcons"}, 
       "RelatedFunction.png"]]], GridBox[{
      {
       StyleBox[
        RowBox[{"See", " ", "Also"}], "SeeAlsoSection"]},
      {Cell[TextData[{
        Cell[BoxData[
         TemplateBox[{
           Cell[
            TextData["PuzzleOracle"]], 
           "paclet:WolframInstitute/Puzzles/ref/PuzzleOracle", 
           "WolframInstitute/Puzzles Package Symbol"},
          "PackageLink",
          BaseStyle->"InlineFormula"]], "InlineFormula",
         FontFamily->"Source Sans Pro",ExpressionUUID->
         "1560542f-33d5-4097-b603-f5d606b5ac45"],
        "\[NonBreakingSpace]",
        StyleBox[
        "\[MediumSpace]\[FilledVerySmallSquare]\[MediumSpace]", 
         "InlineSeparator"],
        " ",
        Cell[BoxData[
         TemplateBox[{
           Cell[
            TextData["OracleScan"]], 
           "paclet:WolframInstitute/Puzzles/ref/OracleScan", 
           "WolframInstitute/Puzzles Package Symbol"},
          "PackageLink",
          BaseStyle->"InlineFormula"]], "InlineFormula",
         FontFamily->"Source Sans Pro",ExpressionUUID->
         "22234859-4eaa-4713-b58f-be0ae444a163"],
        "\[NonBreakingSpace]",
        StyleBox[
        "\[MediumSpace]\[FilledVerySmallSquare]\[MediumSpace]", 
         "InlineSeparator"],
        " ",
        Cell[BoxData[
         TemplateBox[{
           Cell[
            TextData["$OracleHashMethods"]], 
           "paclet:WolframInstitute/Puzzles/ref/$OracleHashMethods", 
           "WolframInstitute/Puzzles Package Symbol"},
          "PackageLink",
          BaseStyle->"InlineFormula"]], "InlineFormula",
         FontFamily->"Source Sans Pro",ExpressionUUID->
         "5696fb75-d8c1-4605-ba45-31e94776a952"],
        "\[NonBreakingSpace]",
        StyleBox[
        "\[MediumSpace]\[FilledVerySmallSquare]\[MediumSpace]", 
         "InlineSeparator"],
        " ",
        Cell[BoxData[
         TemplateBox[{
           Cell[
            TextData["$OracleCompiledDigests"]], 
           "paclet:WolframInstitute/Puzzles/ref/$OracleCompiledDigests", 
           "WolframInstitute/Puzzles Package Symbol"},
          "PackageLink",
          BaseStyle->"InlineFormula"]], "InlineFormula",
         FontFamily->"Source Sans Pro",ExpressionUUID->
         "ff6a7ff0-2cda-44dc-9337-8e338e09e5fc"],
        "\[NonBreakingSpace]",
        StyleBox[
        "\[MediumSpace]\[FilledVerySmallSquare]\[MediumSpace]", 
         "InlineSeparator"],
        " ",
        Cell[BoxData[
         TemplateBox[{
           Cell[
            TextData["Hash"]], "paclet:ref/Hash"},
          "RefLink",
          BaseStyle->"InlineFormula"]], "InlineFormula",
         FontFamily->"Source Sans Pro",ExpressionUUID->
         "5bbd756c-3fa7-45a1-b7ba-68ef72e221c8"],
        "\[NonBreakingSpace]",
        StyleBox[
        "\[MediumSpace]\[FilledVerySmallSquare]\[MediumSpace]", 
         "InlineSeparator"],
        " ",
        Cell[BoxData[
         TemplateBox[{
           Cell[
            TextData["BaseDecode"]], "paclet:ref/BaseDecode"},
          "RefLink",
          BaseStyle->"InlineFormula"]], "InlineFormula",
         FontFamily->"Source Sans Pro",ExpressionUUID->
         "d1225b24-a213-4eee-bacf-340a2bc33643"]
       }], "SeeAlso",ExpressionUUID->"e50cce5a-2020-4ec3-9b04-df351e13ad99"]}
     }]}
  }]], "SeeAlsoSection",ExpressionUUID->"4bedb7fa-db46-449b-a877-\
f444964452c6"],

Cell[BoxData[GridBox[{
   {
    DynamicBox[FEPrivate`ImportImage[
      FrontEnd`FileName[{"Documentation", "FooterIcons"}, 
       "RelatedGuide.png"]]], GridBox[{
      {
       StyleBox[
        RowBox[{"Related", " ", "Guides"}], "MoreAboutSection"]},
      {
       RowBox[{"\[FilledVerySmallSquare]", Cell[BoxData[
         TemplateBox[{
           Cell[
            TextData["Oracles"]], 
           "paclet:WolframInstitute/Puzzles/guide/Oracles"},
          "RefLinkPlain",
          BaseStyle->{"MoreAbout"}]], "MoreAbout",ExpressionUUID->
         "b9eb7578-49c0-4844-841a-018eec712f4b"]}]}
     }]}
  }]], "MoreAboutSection",ExpressionUUID->"4d4fcfe1-bd8f-48bc-895a-\
580b03e9512f"],

Cell[" ", "FooterCell",ExpressionUUID->"c776673a-9cd5-44e4-819f-6b4a53882409"]
},
Saveable->False,
ScreenStyleEnvironment->"Working",
WindowSize->{900, 830},
WindowMargins->{{0, Automatic}, {Automatic, 0}},
WindowTitle->"HashChain",
TaggingRules->{
 "ModificationHighlight" -> False, "ColorType" -> "", "LinkTrails" -> "", 
  "ExampleCounter" -> 1, 
  "Openers" -> {
   "PrimaryExamplesSection" -> Open, "ExampleSection" -> {"0" -> Open}, 
    "AllOptsTable" -> Closed}, "NewStyles" -> True, 
  "CitationPopupData" -> $Failed, "ShowCitation" -> False, "HasOptions" -> 
  True, "RootCaptions" -> "", "HeaderCoreAreaLink" -> {}, 
  "Metadata" -> {
   "built" -> "{2026, 8, 27, 0, 11, 34.220578}", 
    "history" -> {"XX", "", "", ""}, "context" -> "WolframInstitute`Puzzles`",
     "keywords" -> {}, "specialkeywords" -> {}, 
    "tutorialcollectionlinks" -> {}, "index" -> True, "label" -> 
    "Wolfram Institute/ Puzzles Symbol", "language" -> "en", "paclet" -> 
    "WolframInstitute/Puzzles", "status" -> "None", "summary" -> 
    "PackageLink[HashChain,paclet : WolframInstitute/Puzzles/ref/HashChain, \
WolframInstitute/Puzzles Package Symbol][data, method] gives the lowercase \
hexadecimal digest of data under the named hash method. \
PackageLink[HashChain,paclet : WolframInstitute/Puzzles/ref/HashChain, \
WolframInstitute/Puzzles Package Symbol][data, method, n] gives the n-fold \
iterated digest, hashing the raw digest bytes again at each of the n steps. \
PackageLink[HashChain,paclet : WolframInstitute/Puzzles/ref/HashChain, \
WolframInstitute/Puzzles Package Symbol][data, method, n, form] returns the \
digest as a HexString, a ByteArray or an Integer. \
PackageLink[HashChain,paclet : WolframInstitute/Puzzles/ref/HashChain, \
WolframInstitute/Puzzles Package Symbol][{data1, data2, ...}, ...] gives the \
list of digests, hashing the whole batch in one pass.", "synonyms" -> {}, 
    "tabletags" -> {}, "title" -> "HashChain", "titlemodifier" -> "", 
    "metadescription" -> "", "windowtitle" -> "HashChain", "type" -> "Symbol",
     "uri" -> "WolframInstitute/Puzzles/ref/HashChain", "WorkflowDockedCell" -> 
    ""}, "SearchTextTranslated" -> ""},
CellContext->CellGroup,
FrontEndVersion->"15.0 for Mac OS X ARM (64-bit) (May 19, 2026)",
StyleDefinitions->FrontEnd`FileName[{"Wolfram"}, "Reference.nb"],
ExpressionUUID->"7afc9e79-f6c7-47c8-a381-153c02b39926"
]
(* End of Notebook Content *)

(* Internal cache information *)
(*CellTagsOutline
CellTagsIndex->{
 "TextAnnotation"->{
  Cell[26510, 708, 169, 3, 70, "ExampleText",ExpressionUUID->"2dbd49df-1101-4cff-a920-24deb2c99379",
   CellTags->"TextAnnotation"]}
 }
*)
(*CellTagsIndex
CellTagsIndex->{
 {"TextAnnotation", 66612, 1850}
 }
*)
(*NotebookFileOutline
Notebook[{
Cell[577, 21, 6388, 153, 70, "AnchorBarGrid",ExpressionUUID->"6f28add2-248c-412a-ae3b-d0a370b06a1d",
 CellID->1],
Cell[6968, 176, 107, 0, 70, "ContextNameCell",ExpressionUUID->"161d8210-691d-461e-b82a-0ca022f0cae5"],
Cell[CellGroupData[{
Cell[7100, 180, 552, 14, 70, "ObjectNameGrid",ExpressionUUID->"5dea34ec-46c3-4dbc-a5ff-b3ee6717667e"],
Cell[7655, 196, 4364, 117, 70, "Usage",ExpressionUUID->"037f004f-361a-403e-8a96-7882f236f37f"]
}, Open  ]],
Cell[CellGroupData[{
Cell[12056, 318, 1444, 34, 70, "NotesSection",ExpressionUUID->"3e92f8f9-c9ff-478d-be16-440c2ab92266",
 CellGroupingRules->{"SectionGrouping", 50},
 CellID->1254830402],
Cell[13503, 354, 627, 18, 70, "Notes",ExpressionUUID->"47e34c28-3354-477f-924a-eed0954f1739"],
Cell[14133, 374, 565, 15, 70, "Notes",ExpressionUUID->"4a26655c-7a83-45b1-9606-2aac1e655d66"],
Cell[14701, 391, 1080, 31, 70, "Notes",ExpressionUUID->"6d2c6486-8c1c-49d1-a769-b32842c5e55c"],
Cell[15784, 424, 167, 3, 70, "Notes",ExpressionUUID->"c0960e6e-19b7-414b-907b-5183c4488030"],
Cell[15954, 429, 572, 14, 70, "Notes",ExpressionUUID->"dec6e525-cd53-400c-874b-4591344aeb94"],
Cell[16529, 445, 392, 7, 70, "Notes",ExpressionUUID->"3365cc60-3eb0-4cfa-91e6-0be8ac58ff5d"],
Cell[16924, 454, 526, 12, 70, "Notes",ExpressionUUID->"48adce04-e4b2-4a16-bf81-c3b991d4bb11"],
Cell[17453, 468, 944, 24, 70, "Notes",ExpressionUUID->"ad9fffa1-b17e-49c7-9b9c-cb12f914df6e"],
Cell[18400, 494, 230, 3, 70, "Notes",ExpressionUUID->"8f55acb0-4460-42ab-b99f-957647a8bb3c"],
Cell[18633, 499, 1388, 39, 70, "Notes",ExpressionUUID->"7228f55b-9678-48c6-8899-fdff3a3b0e80"],
Cell[20024, 540, 495, 12, 70, "Notes",ExpressionUUID->"905f3a84-d67d-48dd-88f7-a56c7e2f4cbb"],
Cell[20522, 554, 434, 9, 70, "Notes",ExpressionUUID->"d039b0db-a6a4-4082-95e2-169f2ee3c2bd"],
Cell[20959, 565, 2546, 56, 70, "3ColumnTableMod",ExpressionUUID->"bcecf9c1-4ee3-4830-b0ea-b3cf1d8e419b"]
}, Closed]],
Cell[23520, 624, 80, 0, 70, "PageDelimiter",ExpressionUUID->"fed1f01f-0b01-42ee-a162-ba075763df84"],
Cell[CellGroupData[{
Cell[23625, 628, 1402, 37, 70, "PrimaryExamplesSection",ExpressionUUID->"58c18036-a868-452d-a4be-9fedb50b4cfe",
 CellID->1645152874],
Cell[25030, 667, 216, 4, 70, "Input",ExpressionUUID->"3cb5efb1-e63f-463e-bd58-ca2d3cf68ad6",
 CellID->1969679695],
Cell[CellGroupData[{
Cell[25271, 675, 1236, 31, 70, "ExampleSection",ExpressionUUID->"3e91027a-92cf-4117-8b6e-3553251b2546",
 CellID->1232398193],
Cell[26510, 708, 169, 3, 70, "ExampleText",ExpressionUUID->"2dbd49df-1101-4cff-a920-24deb2c99379",
 CellTags->"TextAnnotation"],
Cell[CellGroupData[{
Cell[26704, 715, 240, 4, 70, "Input",ExpressionUUID->"1ba886f1-7a95-44ab-b423-7373393c36b3"],
Cell[26947, 721, 182, 3, 70, "Output",ExpressionUUID->"7d6a4497-1a5b-46f2-b94b-1fa9f540c590"]
}, Open  ]],
Cell[CellGroupData[{
Cell[27166, 729, 224, 5, 70, "ExampleDelimiter",ExpressionUUID->"18611066-9663-4687-be7f-726744303760"],
Cell[27393, 736, 132, 0, 70, "ExampleText",ExpressionUUID->"e7e9e82c-23ee-4d28-a8ab-f6ee86728389"],
Cell[CellGroupData[{
Cell[27550, 740, 258, 5, 70, "Input",ExpressionUUID->"b6bcb371-cf06-4d84-8a52-8b985ac2e304"],
Cell[27811, 747, 182, 3, 70, "Output",ExpressionUUID->"7be3ad9e-24df-4e3a-b19a-cf70480b7bbb"]
}, Open  ]]
}, Open  ]],
Cell[CellGroupData[{
Cell[28042, 756, 224, 5, 70, "ExampleDelimiter",ExpressionUUID->"5fe2f4a5-0686-4b9f-bd02-4c43e04a4c83"],
Cell[28269, 763, 114, 0, 70, "ExampleText",ExpressionUUID->"003c1f8b-a90b-42bc-96e5-80c3ee6654fc"],
Cell[CellGroupData[{
Cell[28408, 767, 328, 7, 70, "Input",ExpressionUUID->"9f32a4d9-fc8e-48cb-a17f-c150f906d189"],
Cell[28739, 776, 388, 8, 70, "Output",ExpressionUUID->"ee91e6ba-1f30-4714-8ae9-0762ec5f3320"]
}, Open  ]]
}, Open  ]]
}, Open  ]],
Cell[CellGroupData[{
Cell[29188, 791, 1227, 31, 70, "ExampleSection",ExpressionUUID->"e9e3434f-d756-45b9-b11a-982ce9c93784",
 CellID->1293636265],
Cell[30418, 824, 445, 12, 70, "ExampleText",ExpressionUUID->"f39909c8-e21b-4a8f-8708-ada3ea925851"],
Cell[CellGroupData[{
Cell[30888, 840, 342, 8, 70, "Input",ExpressionUUID->"5c68d80d-ce3f-4324-8dc7-f968c462511e"],
Cell[31233, 850, 182, 3, 70, "Output",ExpressionUUID->"0e8cff28-9e58-41ae-8300-f38c47a222ea"]
}, Open  ]],
Cell[CellGroupData[{
Cell[31452, 858, 224, 5, 70, "ExampleDelimiter",ExpressionUUID->"30502cab-d3c9-454b-8718-30979c1fef6f"],
Cell[31679, 865, 157, 2, 70, "ExampleText",ExpressionUUID->"d1938ab3-4587-4891-bcee-42ae444d7dc1"],
Cell[CellGroupData[{
Cell[31861, 871, 243, 4, 70, "Input",ExpressionUUID->"7eb7b2e5-533d-4305-a3a3-b6a3bbfb7649"],
Cell[32107, 877, 154, 1, 70, "Output",ExpressionUUID->"b27f0eea-6315-479f-9c7f-87e54a00e049"]
}, Open  ]]
}, Open  ]],
Cell[CellGroupData[{
Cell[32310, 884, 224, 5, 70, "ExampleDelimiter",ExpressionUUID->"68a6207f-b957-4bb8-8e0d-d18e5af5316b"],
Cell[32537, 891, 167, 3, 70, "ExampleText",ExpressionUUID->"d48b3176-d8f3-48a2-a56e-58fc23d827eb"],
Cell[CellGroupData[{
Cell[32729, 898, 240, 4, 70, "Input",ExpressionUUID->"26c9eff0-09ca-4fd5-88aa-d97c8225886d"],
Cell[32972, 904, 182, 3, 70, "Output",ExpressionUUID->"7f0444b9-e7c6-4296-b392-c8e5037721f9"]
}, Open  ]]
}, Open  ]],
Cell[CellGroupData[{
Cell[33203, 913, 224, 5, 70, "ExampleDelimiter",ExpressionUUID->"266d18b2-5b4a-481d-ad66-1aecb5390d12"],
Cell[33430, 920, 157, 2, 70, "ExampleText",ExpressionUUID->"6b93c01d-17fb-494c-8d17-deec1286a8ed"],
Cell[CellGroupData[{
Cell[33612, 926, 258, 5, 70, "Input",ExpressionUUID->"628705c1-f76d-4ea4-ac26-aad0ceb71a13"],
Cell[33873, 933, 120, 1, 70, "Output",ExpressionUUID->"0b19d05d-28a3-4407-974c-6c94ec40cc86"]
}, Open  ]]
}, Open  ]],
Cell[CellGroupData[{
Cell[34042, 940, 224, 5, 70, "ExampleDelimiter",ExpressionUUID->"8de8deba-9f43-4b3b-a74e-5d08530395c3"],
Cell[34269, 947, 172, 3, 70, "ExampleText",ExpressionUUID->"406b3d64-426f-483b-b322-312e7f104162"],
Cell[CellGroupData[{
Cell[34466, 954, 258, 5, 70, "Input",ExpressionUUID->"8b7e0535-45e7-4dd8-ac9f-7fa160c37bb9"],
Cell[34727, 961, 182, 3, 70, "Output",ExpressionUUID->"87a81fca-dc38-4c79-9832-b7303efd8e7a"]
}, Open  ]]
}, Open  ]],
Cell[CellGroupData[{
Cell[34958, 970, 224, 5, 70, "ExampleDelimiter",ExpressionUUID->"46445a8a-6682-434e-8ac4-e9517461c99c"],
Cell[35185, 977, 140, 1, 70, "ExampleText",ExpressionUUID->"244edb14-9361-40d9-95fe-fbd54a3e2f11"],
Cell[CellGroupData[{
Cell[35350, 982, 290, 5, 70, "Input",ExpressionUUID->"ef93a021-6665-4c58-a4a9-60cb825cad03"],
Cell[35643, 989, 2280, 48, 70, "Output",ExpressionUUID->"ae003e0d-e9f6-461c-8035-62f456ef4368"]
}, Open  ]]
}, Open  ]],
Cell[CellGroupData[{
Cell[37972, 1043, 224, 5, 70, "ExampleDelimiter",ExpressionUUID->"177729c8-eeba-4a95-a439-3b6485da38db"],
Cell[38199, 1050, 123, 0, 70, "ExampleText",ExpressionUUID->"1eeb1a1b-8406-4dfe-8c83-a213031db152"],
Cell[CellGroupData[{
Cell[38347, 1054, 288, 5, 70, "Input",ExpressionUUID->"00c6f769-1767-43b8-9160-e480344f744a"],
Cell[38638, 1061, 187, 3, 70, "Output",ExpressionUUID->"869d6d51-f9b7-4d70-971c-f83024b52602"]
}, Open  ]]
}, Open  ]],
Cell[CellGroupData[{
Cell[38874, 1070, 224, 5, 70, "ExampleDelimiter",ExpressionUUID->"d572b9b3-e58a-4f03-b868-7507cb90dab2"],
Cell[39101, 1077, 169, 3, 70, "ExampleText",ExpressionUUID->"10d2b400-e239-4b0f-b737-e6211e24f2f5"],
Cell[CellGroupData[{
Cell[39295, 1084, 240, 4, 70, "Input",ExpressionUUID->"e556e155-c501-44ae-b1f6-129cf18efe07"],
Cell[39538, 1090, 188, 3, 70, "Output",ExpressionUUID->"c272da6e-6c88-42f1-99b5-104e5e6b4be6"]
}, Open  ]]
}, Open  ]],
Cell[CellGroupData[{
Cell[39775, 1099, 224, 5, 70, "ExampleDelimiter",ExpressionUUID->"836dadc7-affa-4217-9f2b-48dcdc0eecbe"],
Cell[40002, 1106, 111, 0, 70, "ExampleText",ExpressionUUID->"821ef138-0a8e-496b-b7b5-968b46b44d13"],
Cell[CellGroupData[{
Cell[40138, 1110, 274, 5, 70, "Input",ExpressionUUID->"e1140111-b880-48c4-a162-3161b98081cf"],
Cell[40415, 1117, 217, 4, 70, "Output",ExpressionUUID->"26bd6fcd-ac7c-444d-9ef1-9d02f5fabe0e"]
}, Open  ]]
}, Open  ]]
}, Closed]],
Cell[CellGroupData[{
Cell[40693, 1128, 1229, 31, 70, "ExampleSection",ExpressionUUID->"282511f3-e9e0-4585-9824-13958cd5bc98",
 CellID->2061341341],
Cell[41925, 1161, 829, 22, 70, "ExampleText",ExpressionUUID->"dc11fd4e-6bd8-4291-8bd0-32b0b0d6d948"],
Cell[CellGroupData[{
Cell[42779, 1187, 377, 7, 70, "Input",ExpressionUUID->"fbb3ade5-0343-404d-9973-9c0dc80e2f45"],
Cell[43159, 1196, 182, 3, 70, "Output",ExpressionUUID->"34e0d88b-3f31-4809-b273-5dd22ab549b4"]
}, Open  ]],
Cell[CellGroupData[{
Cell[43378, 1204, 224, 5, 70, "ExampleDelimiter",ExpressionUUID->"f5d5536e-4e35-4bf0-beda-b26086d30525"],
Cell[43605, 1211, 202, 3, 70, "ExampleText",ExpressionUUID->"24f2dfb7-29e6-4d6d-8ed1-49215259ce02"],
Cell[CellGroupData[{
Cell[43832, 1218, 863, 19, 70, "Input",ExpressionUUID->"62578e30-e0dd-49b4-834a-251e7fe12e1b"],
Cell[44698, 1239, 110, 1, 70, "Output",ExpressionUUID->"7640dc6a-e60c-4158-b4c3-0155adf59747"]
}, Open  ]]
}, Open  ]]
}, Closed]],
Cell[CellGroupData[{
Cell[44869, 1247, 1233, 31, 70, "ExampleSection",ExpressionUUID->"a1c16e37-b815-469e-8516-b041cc9a107a",
 CellID->258228157],
Cell[46105, 1280, 174, 3, 70, "ExampleText",ExpressionUUID->"554281d8-7386-4e57-8a0b-b4cd772fff7d"],
Cell[CellGroupData[{
Cell[46304, 1287, 671, 13, 70, "Input",ExpressionUUID->"da0fc705-6036-4929-8fdf-250f69ca6818"],
Cell[46978, 1302, 182, 3, 70, "Output",ExpressionUUID->"f916631f-f45a-40a3-86f0-1981b24437ed"]
}, Open  ]],
Cell[CellGroupData[{
Cell[47197, 1310, 224, 5, 70, "ExampleDelimiter",ExpressionUUID->"a5b9c652-51cf-432c-8212-b2e364f1c458"],
Cell[47424, 1317, 187, 3, 70, "ExampleText",ExpressionUUID->"93955672-0afa-4e44-a860-8c070429d9d8"],
Cell[CellGroupData[{
Cell[47636, 1324, 912, 19, 70, "Input",ExpressionUUID->"24626306-d5c2-4a39-b6d8-ab808f9e1a8e"],
Cell[48551, 1345, 182, 3, 70, "Output",ExpressionUUID->"67616312-35f8-437b-a8dd-8614e8cd5bba"]
}, Open  ]]
}, Open  ]],
Cell[CellGroupData[{
Cell[48782, 1354, 224, 5, 70, "ExampleDelimiter",ExpressionUUID->"28a46d18-276e-43f4-b7c1-12f0f71ac2a0"],
Cell[49009, 1361, 183, 3, 70, "ExampleText",ExpressionUUID->"aae269dd-7fc4-48b9-9aa8-c7f3770a82cf"],
Cell[CellGroupData[{
Cell[49217, 1368, 635, 13, 70, "Input",ExpressionUUID->"98d546ce-7af7-4153-a16c-5652bb1d1c53"],
Cell[49855, 1383, 154, 1, 70, "Output",ExpressionUUID->"5a92ab4d-afe9-4c1c-a029-3bd46c266589"]
}, Open  ]]
}, Open  ]],
Cell[CellGroupData[{
Cell[50058, 1390, 224, 5, 70, "ExampleDelimiter",ExpressionUUID->"93338f01-0889-4b29-a4a5-2d1324cfb426"],
Cell[50285, 1397, 196, 3, 70, "ExampleText",ExpressionUUID->"7aaa572c-5fa4-4cf8-935e-414a8063fbf6"],
Cell[CellGroupData[{
Cell[50506, 1404, 461, 10, 70, "Input",ExpressionUUID->"4217c471-ca26-497e-a4bf-d80f3242889f"],
Cell[50970, 1416, 122, 1, 70, "Output",ExpressionUUID->"855020f7-a654-4614-b310-c2c1211950fd"]
}, Open  ]]
}, Open  ]]
}, Closed]],
Cell[CellGroupData[{
Cell[51153, 1424, 1244, 31, 70, "ExampleSection",ExpressionUUID->"61c5c24b-5f10-4cab-a49d-7c29f934745a",
 CellID->2123667759],
Cell[52400, 1457, 502, 13, 70, "ExampleText",ExpressionUUID->"ecd17315-9add-4c95-bcc2-5de20075cc3c"],
Cell[CellGroupData[{
Cell[52927, 1474, 398, 9, 70, "Input",ExpressionUUID->"4386a7be-d871-413f-a88b-5ca4c709884f"],
Cell[53328, 1485, 110, 1, 70, "Output",ExpressionUUID->"23259cf2-c516-498d-afcd-5455c9f395cf"]
}, Open  ]],
Cell[CellGroupData[{
Cell[53475, 1491, 224, 5, 70, "ExampleDelimiter",ExpressionUUID->"03320880-f78a-4625-953f-dac89cd0be78"],
Cell[53702, 1498, 635, 20, 70, "ExampleText",ExpressionUUID->"4ba99c0c-4e60-4cb1-804c-5c69cf0e0ac8"],
Cell[CellGroupData[{
Cell[54362, 1522, 521, 12, 70, "Input",ExpressionUUID->"f3d212d1-5e19-485b-9a2f-8c3311568a4c"],
Cell[54886, 1536, 110, 1, 70, "Output",ExpressionUUID->"85f150ec-3956-4112-ac5f-b78bfe72fbcd"]
}, Open  ]]
}, Open  ]],
Cell[CellGroupData[{
Cell[55045, 1543, 224, 5, 70, "ExampleDelimiter",ExpressionUUID->"251aca21-eea6-4aa8-a641-ee249ecf7246"],
Cell[55272, 1550, 175, 3, 70, "ExampleText",ExpressionUUID->"598e1479-4fc0-44c9-a3b0-61aa64144b03"],
Cell[CellGroupData[{
Cell[55472, 1557, 476, 12, 70, "Input",ExpressionUUID->"8621ef91-7b73-4b95-ab1b-aa39d6614047"],
Cell[55951, 1571, 110, 1, 70, "Output",ExpressionUUID->"7af48307-2433-4cbe-a5ea-301c4a11e946"]
}, Open  ]]
}, Open  ]]
}, Closed]],
Cell[CellGroupData[{
Cell[56122, 1579, 1237, 31, 70, "ExampleSection",ExpressionUUID->"22102b52-d1ad-43a6-9fcb-c6bf6a44f6dc",
 CellID->1305812373],
Cell[57362, 1612, 448, 9, 70, "ExampleText",ExpressionUUID->"68ce98e1-c694-4871-ad85-6b39ba1d4eef"],
Cell[CellGroupData[{
Cell[57835, 1625, 341, 7, 70, "Input",ExpressionUUID->"5a65f1a6-dc35-4478-88ab-bb7f94ac34e2"],
Cell[58179, 1634, 188, 3, 70, "Output",ExpressionUUID->"4e638a64-947a-48af-963c-562cdf8a26b6"]
}, Open  ]],
Cell[CellGroupData[{
Cell[58404, 1642, 224, 5, 70, "ExampleDelimiter",ExpressionUUID->"97ce9645-2c94-4d8c-bdf9-59c4d4f8b200"],
Cell[58631, 1649, 677, 16, 70, "ExampleText",ExpressionUUID->"445b2d96-ee97-4c0c-8044-bd99097f9f01"],
Cell[CellGroupData[{
Cell[59333, 1669, 175, 2, 70, "Input",ExpressionUUID->"d4653a55-8ca8-4a57-ad75-e1b02cd761d4"],
Cell[59511, 1673, 356, 7, 70, "Output",ExpressionUUID->"fae1e57b-faa7-4232-bd57-3e2c6d5caa90"]
}, Open  ]]
}, Open  ]]
}, Closed]]
}, Open  ]],
Cell[59918, 1686, 3491, 93, 70, "SeeAlsoSection",ExpressionUUID->"4bedb7fa-db46-449b-a877-f444964452c6"],
Cell[63412, 1781, 694, 19, 70, "MoreAboutSection",ExpressionUUID->"4d4fcfe1-bd8f-48bc-895a-580b03e9512f"],
Cell[64109, 1802, 78, 0, 70, "FooterCell",ExpressionUUID->"c776673a-9cd5-44e4-819f-6b4a53882409"]
}
]
*)

(* End of internal cache information *)

