<mxfile host="app.diagrams.net" agent="architecture-diagram" version="24.0.0">
  <diagram name="The Cache Key — How a Request Becomes a Key, and When It Refuses" id="13-cache-key-contract">
    <mxGraphModel dx="1400" dy="900" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="1470" pageHeight="470" math="0" shadow="0">
      <root>
        <mxCell id="0" />
        <mxCell id="1" parent="0" />
        <mxCell id="_st1" value="Resolve" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;fontSize=10;fontStyle=1;fontColor=#8a97a5;fontFamily=Segoe UI;" vertex="1" parent="1">
          <mxGeometry x="40" y="60" width="180" height="20" as="geometry" />
        </mxCell>
        <mxCell id="n.q-host" value="&lt;b&gt;Host + SNI&lt;/b&gt;&lt;br&gt;&lt;font style=&quot;font-size:10px;color:#5b6b7d&quot;&gt;exactly one property&lt;/font&gt;" style="rounded=1;arcSize=8;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;fontColor=#1a2b45;fontSize=12;fontFamily=Segoe UI;verticalAlign=middle;align=center;spacingLeft=38;" vertex="1" parent="1">
          <mxGeometry x="40" y="90" width="180" height="90" as="geometry" />
        </mxCell>
        <mxCell id="_ico2" value="" style="shape=image;html=1;imageAspect=1;aspect=fixed;movable=0;resizable=0;rotatable=0;connectable=0;editable=0;deletable=0;noLabel=1;image=data:image/png,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAABmJLR0QA/wD/AP+gvaeTAAAD+0lEQVRoge2ZW4hNURjHf2fGjNvMmBm3mSmXmDy4y4Q8eEIkFEIuIXkXmkQoJC9SiPLAA2Uik/Ag5oFcktymJEqNhuR+mZGZMcz2sNae/Z199mXtfc6Z8TD/Wp2z9vqv7/t/e639rbXXhh50L3KzbL8c+Av8ybKftDHUVV8AvAIsoB04DZSK9n5AUddI80cBsBV4BiwR19eh7rrlKk9wgsgBbgI1wMyukesgD9gGfNLCrom2iUAbqeLtclFwp+EEegOYnG3hAFVAvUvUVN2WAB74CJdFjlatuN4OHAR6Z0v8auCXS8x90b7IQLyFmnI5us8cj/ZHwPBMi9/nI2a94Nw2DMAC5us+CeClR/tbYEymxO/3EdEGFGpOJdARIYAaYX+vD+ettpsWNgaIqBO83RHEW0ALKosBzAjgvQAGxBVfBbQGGN8iuPciBmABC3XfHOBjAO9SHPF5pGYbd5miuSWolTZqAEeFvwsh3DVRA6gOMdgK5GvuvBjiLeCx8Lc9hPsRKDYV35/gIbWAh4K/I2YAv4E+2sZcA/5uL7G9PK5VoZb5INwR/5tQUyAOBgNvULk/zEYFKu1aMX31ICtIuOrLgOUG/XahVtAC4FQa/uuAk/p/NWr6BsEC1qKeH0+cx+wBnKT5wwz5fuWM8H3OsM8U0adzU2Uj7A7YaNa/hYGscMj+zb6sZEyVFRlALjDC0Eh3BjBKVmQAxaSOiB+6MwD5apok2HTT9Ae1EoOzIYuLOAGUyIoMoM3QQK7o127Yxw8ym+T7spLRIisygK+GBhKo7QaY3zU/yP6m0zFJpwygBfhpaMQ+EslkAKbT8bOsuB/aekMjtrNMBmB6TvRUVtwBPMQM9nB3xxSS2/CUrcQAYKCBkXeoTJQDjDR07IUmnClRhjqxC4IFNKTh7/+DewRA5dkSj+sS8s4NxclKURF1JBsweB+YTviG6qrgHzHg+5UKbWOcAfeuQYCduB5i7J3gbogp/r2wscaAPztKABNRq2SQwXLNnRAzgCvC3+EQ7uUo4m0cCDG6WPMSwIcYAWwWvoLOlZpQ7x2RkQfcCjB8QnDPxghgrO5biv+5Ugdmb4i+KAMafYw3Ct7SiOJfiL6rAnj70hFvoxJ19OHlwP4o0Rv4EiGAHcK+36vk4UyItzEaeO7h5JjgHDIU34qTPgehNpHuabMX7zUqLRSiPhFJZz9w9jDlpH4A8SrHhU33EeZ3kr/gZAUrUTncK5vsCRBuoVbvMs3tA7wWbbU4I5N1FKHm8SfgGzBEX89DfXbyEv8Xde5kY6e+XgfM6hLVHugLrCA51ZWSGsRvYJPg9Ecd1o5PV0DGHxSNXNQJ2izUKJ0mOXX2oAf/C/4Bt1R3sMQzHWwAAAAASUVORK5CYII=;" vertex="1" parent="n.q-host">
          <mxGeometry x="9" y="33" width="24" height="24" as="geometry" />
        </mxCell>
        <mxCell id="n.q-unk" value="&lt;b&gt;Known host?&lt;/b&gt;&lt;br&gt;&lt;font style=&quot;font-size:10px;color:#5b6b7d&quot;&gt;no → 421&lt;/font&gt;" style="shape=hexagon;perimeter=hexagonPerimeter2;size=0.12;whiteSpace=wrap;html=1;fillColor=#fff2cc;strokeColor=#d6b656;fontColor=#4a3c00;fontSize=12;fontFamily=Segoe UI;verticalAlign=middle;align=center;spacingLeft=38;" vertex="1" parent="1">
          <mxGeometry x="40" y="210" width="180" height="90" as="geometry" />
        </mxCell>
        <mxCell id="_ico3" value="" style="shape=image;html=1;imageAspect=1;aspect=fixed;movable=0;resizable=0;rotatable=0;connectable=0;editable=0;deletable=0;noLabel=1;image=data:image/png,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAABmJLR0QA/wD/AP+gvaeTAAADLElEQVRoge3YT6hVVRTH8c97vjQyjVQESStCkEQQChV0GIqBg8AMI4IgUpyIRjNp0MgiB0YY4UghrYEURCQIWj2I6I8mBAlF+F9LB5mK9krvbbDvrdtxn3/3nXfOE/zC5vHO2nvt39rnrn3W3tyhWQZK9l+I57EY9+ICPsMu/FapsoqZiHdxE+1Iu4KXGlOXwyA+FheebJsa0pjJRsXEt3EDC5qRGWcQ5xQPoI09dQrMS+LF+Dry/Bd8gTWYkrD9gfuFYPJY2GmTcQbDnfGV8Yz4Kj/Ssa9Lsc/I8bsCP0TGjeAdYQEKMZhjT1vFmYm/SVoZPjdiv3iuTMQGfIUHcrQVYoH4Cl/Ftx2hSdu5DH9PSt+Kk+0bTBhtAAP4seCE3fZ2hb5eGG0AsLrEhJcxO8XPooxxsTfZxsEqAoA3C4gfwaoMH+tTxq3EPfgkYvu9qgAIyXUpRcQxLMsZ/0pk3HUMdewvR+w3la/XMpmCzxOTbFUs2Z6LCGxjr7A4sQ/m6SrFd3k/MUnRIm62UGqUSeLdeU7zvgNVcgb7SvRv4a28TnUGAJtxtmDfN3Akr1PdAZzHE/gpo09LEL9lrET0mwO93C2cHc4mfA1jSRlHdb+BLn9iu7D99rJTvPpNpakACFvv/MSzovnxL00GsBazev6/ge/KOhnK71I5A3gKOxLPPxUuB0pRRwD3YY7wc3kcT/vvQNSlhdf7cV5VAEPC8XMp5uIhPIiHhUItj63CIaYWktvol/hVuRKht1h7rS7hXZIB9Ct8v5J7fow6cqAlXDsex2Fhpzkk1EajpsoAruGAcJY9IZTCp4Ty4e8K5xk1sZ/QDkxtUlQRJuNVXPR/8dfwrIpPTlUzDz/LTswPcVdTArOYgZOK7S4fGIdvYqdyW+SaZmTGmSrcHJQJYLgRpSksFxf5nlCQHY3Y/sKkJsTGSLsKmdaxp91ez7rF0xiRdx5Iuxl7URC5NmJrZ4yrnZnK3+V8X6fAvDdwQSi6yrCrPyljx6PCSanI6h81jhK4l5XC1XmW+GPCQWbcMg8fuTUnLmObcHSsnX4++9PxmCD4vFDfj1Qp6g63E/8AKx6wsTVHQH0AAAAASUVORK5CYII=;" vertex="1" parent="n.q-unk">
          <mxGeometry x="19" y="33" width="24" height="24" as="geometry" />
        </mxCell>
        <mxCell id="_st4" value="Match" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;fontSize=10;fontStyle=1;fontColor=#8a97a5;fontFamily=Segoe UI;" vertex="1" parent="1">
          <mxGeometry x="270" y="60" width="200" height="20" as="geometry" />
        </mxCell>
        <mxCell id="n.q-rule" value="&lt;b&gt;Path rule&lt;/b&gt;&lt;br&gt;&lt;font style=&quot;font-size:10px;color:#5b6b7d&quot;&gt;declared pattern&lt;/font&gt;" style="rounded=1;arcSize=8;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;fontColor=#1a2b45;fontSize=12;fontFamily=Segoe UI;verticalAlign=middle;align=center;spacingLeft=38;" vertex="1" parent="1">
          <mxGeometry x="270" y="90" width="200" height="90" as="geometry" />
        </mxCell>
        <mxCell id="_ico5" value="" style="shape=image;html=1;imageAspect=1;aspect=fixed;movable=0;resizable=0;rotatable=0;connectable=0;editable=0;deletable=0;noLabel=1;image=data:image/png,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAABmJLR0QA/wD/AP+gvaeTAAADLElEQVRoge3YT6hVVRTH8c97vjQyjVQESStCkEQQChV0GIqBg8AMI4IgUpyIRjNp0MgiB0YY4UghrYEURCQIWj2I6I8mBAlF+F9LB5mK9krvbbDvrdtxn3/3nXfOE/zC5vHO2nvt39rnrn3W3tyhWQZK9l+I57EY9+ICPsMu/FapsoqZiHdxE+1Iu4KXGlOXwyA+FheebJsa0pjJRsXEt3EDC5qRGWcQ5xQPoI09dQrMS+LF+Dry/Bd8gTWYkrD9gfuFYPJY2GmTcQbDnfGV8Yz4Kj/Ssa9Lsc/I8bsCP0TGjeAdYQEKMZhjT1vFmYm/SVoZPjdiv3iuTMQGfIUHcrQVYoH4Cl/Ftx2hSdu5DH9PSt+Kk+0bTBhtAAP4seCE3fZ2hb5eGG0AsLrEhJcxO8XPooxxsTfZxsEqAoA3C4gfwaoMH+tTxq3EPfgkYvu9qgAIyXUpRcQxLMsZ/0pk3HUMdewvR+w3la/XMpmCzxOTbFUs2Z6LCGxjr7A4sQ/m6SrFd3k/MUnRIm62UGqUSeLdeU7zvgNVcgb7SvRv4a28TnUGAJtxtmDfN3Akr1PdAZzHE/gpo09LEL9lrET0mwO93C2cHc4mfA1jSRlHdb+BLn9iu7D99rJTvPpNpakACFvv/MSzovnxL00GsBazev6/ge/KOhnK71I5A3gKOxLPPxUuB0pRRwD3YY7wc3kcT/vvQNSlhdf7cV5VAEPC8XMp5uIhPIiHhUItj63CIaYWktvol/hVuRKht1h7rS7hXZIB9Ct8v5J7fow6cqAlXDsex2Fhpzkk1EajpsoAruGAcJY9IZTCp4Ty4e8K5xk1sZ/QDkxtUlQRJuNVXPR/8dfwrIpPTlUzDz/LTswPcVdTArOYgZOK7S4fGIdvYqdyW+SaZmTGmSrcHJQJYLgRpSksFxf5nlCQHY3Y/sKkJsTGSLsKmdaxp91ez7rF0xiRdx5Iuxl7URC5NmJrZ4yrnZnK3+V8X6fAvDdwQSi6yrCrPyljx6PCSanI6h81jhK4l5XC1XmW+GPCQWbcMg8fuTUnLmObcHSsnX4++9PxmCD4vFDfj1Qp6g63E/8AKx6wsTVHQH0AAAAASUVORK5CYII=;" vertex="1" parent="n.q-rule">
          <mxGeometry x="9" y="33" width="24" height="24" as="geometry" />
        </mxCell>
        <mxCell id="n.q-decl" value="&lt;b&gt;Cacheable declared?&lt;/b&gt;&lt;br&gt;&lt;font style=&quot;font-size:10px;color:#5b6b7d&quot;&gt;no → bypass&lt;/font&gt;" style="shape=hexagon;perimeter=hexagonPerimeter2;size=0.12;whiteSpace=wrap;html=1;fillColor=#fff2cc;strokeColor=#d6b656;fontColor=#4a3c00;fontSize=12;fontFamily=Segoe UI;verticalAlign=middle;align=center;spacingLeft=38;" vertex="1" parent="1">
          <mxGeometry x="270" y="210" width="200" height="90" as="geometry" />
        </mxCell>
        <mxCell id="_ico6" value="" style="shape=image;html=1;imageAspect=1;aspect=fixed;movable=0;resizable=0;rotatable=0;connectable=0;editable=0;deletable=0;noLabel=1;image=data:image/png,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAABmJLR0QA/wD/AP+gvaeTAAADLElEQVRoge3YT6hVVRTH8c97vjQyjVQESStCkEQQChV0GIqBg8AMI4IgUpyIRjNp0MgiB0YY4UghrYEURCQIWj2I6I8mBAlF+F9LB5mK9krvbbDvrdtxn3/3nXfOE/zC5vHO2nvt39rnrn3W3tyhWQZK9l+I57EY9+ICPsMu/FapsoqZiHdxE+1Iu4KXGlOXwyA+FheebJsa0pjJRsXEt3EDC5qRGWcQ5xQPoI09dQrMS+LF+Dry/Bd8gTWYkrD9gfuFYPJY2GmTcQbDnfGV8Yz4Kj/Ssa9Lsc/I8bsCP0TGjeAdYQEKMZhjT1vFmYm/SVoZPjdiv3iuTMQGfIUHcrQVYoH4Cl/Ftx2hSdu5DH9PSt+Kk+0bTBhtAAP4seCE3fZ2hb5eGG0AsLrEhJcxO8XPooxxsTfZxsEqAoA3C4gfwaoMH+tTxq3EPfgkYvu9qgAIyXUpRcQxLMsZ/0pk3HUMdewvR+w3la/XMpmCzxOTbFUs2Z6LCGxjr7A4sQ/m6SrFd3k/MUnRIm62UGqUSeLdeU7zvgNVcgb7SvRv4a28TnUGAJtxtmDfN3Akr1PdAZzHE/gpo09LEL9lrET0mwO93C2cHc4mfA1jSRlHdb+BLn9iu7D99rJTvPpNpakACFvv/MSzovnxL00GsBazev6/ge/KOhnK71I5A3gKOxLPPxUuB0pRRwD3YY7wc3kcT/vvQNSlhdf7cV5VAEPC8XMp5uIhPIiHhUItj63CIaYWktvol/hVuRKht1h7rS7hXZIB9Ct8v5J7fow6cqAlXDsex2Fhpzkk1EajpsoAruGAcJY9IZTCp4Ty4e8K5xk1sZ/QDkxtUlQRJuNVXPR/8dfwrIpPTlUzDz/LTswPcVdTArOYgZOK7S4fGIdvYqdyW+SaZmTGmSrcHJQJYLgRpSksFxf5nlCQHY3Y/sKkJsTGSLsKmdaxp91ez7rF0xiRdx5Iuxl7URC5NmJrZ4yrnZnK3+V8X6fAvDdwQSi6yrCrPyljx6PCSanI6h81jhK4l5XC1XmW+GPCQWbcMg8fuTUnLmObcHSsnX4++9PxmCD4vFDfj1Qp6g63E/8AKx6wsTVHQH0AAAAASUVORK5CYII=;" vertex="1" parent="n.q-decl">
          <mxGeometry x="19" y="33" width="24" height="24" as="geometry" />
        </mxCell>
        <mxCell id="_st7" value="Normalise" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;fontSize=10;fontStyle=1;fontColor=#8a97a5;fontFamily=Segoe UI;" vertex="1" parent="1">
          <mxGeometry x="520" y="60" width="210" height="20" as="geometry" />
        </mxCell>
        <mxCell id="n.q-norm" value="&lt;b&gt;Normaliser&lt;/b&gt;&lt;br&gt;&lt;font style=&quot;font-size:10px;color:#5b6b7d&quot;&gt;case · %-encoding · order&lt;/font&gt;" style="rounded=1;arcSize=8;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;fontColor=#1a2b45;fontSize=12;fontFamily=Segoe UI;verticalAlign=middle;align=center;spacingLeft=38;" vertex="1" parent="1">
          <mxGeometry x="520" y="90" width="210" height="90" as="geometry" />
        </mxCell>
        <mxCell id="_ico8" value="" style="shape=image;html=1;imageAspect=1;aspect=fixed;movable=0;resizable=0;rotatable=0;connectable=0;editable=0;deletable=0;noLabel=1;image=data:image/png,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAABmJLR0QA/wD/AP+gvaeTAAABLklEQVRoge2ZMUoDQRSGP0XQ2lQKgm0gINikTOMJrLyHl7AWrDxBLFKk9waCHiI3SBVZ0UIGF8yys5s3+7/A+2Bg2V12vm+6x0Kg5aB2fQE8AhPgUKPTyhp4Bp62PVwA33uyrpN0/aTP+xyJiLNtN2+BL/Sn27begOOmsjugciDZtN6BUZO894gsea8RneS9RfSS9xKxk7w6wkReFWEqP3REEfmhIorKl44YRL5UxKDyCasIiXxi1wipfKJvhAv5RNcIV/KJF/IDrqw2tZx9Nx3e/bTa1Ovwnk0EqIkANRGgJgLURICaCFATAWosAyrDb2VjGfBq+C0Z9/xOZm0j5VglmMME+GCPAwBOgAeafxq6D0jcACv+B1wKnTpzCsz5k19qdfozBWbAkVoksOQHFdEP62lvaNQAAAAASUVORK5CYII=;" vertex="1" parent="n.q-norm">
          <mxGeometry x="9" y="33" width="24" height="24" as="geometry" />
        </mxCell>
        <mxCell id="n.q-allow" value="&lt;b&gt;Allow-list&lt;/b&gt;&lt;br&gt;&lt;font style=&quot;font-size:10px;color:#5b6b7d&quot;&gt;other params dropped&lt;/font&gt;" style="rounded=1;arcSize=8;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;fontColor=#1a2b45;fontSize=12;fontFamily=Segoe UI;verticalAlign=middle;align=center;spacingLeft=38;" vertex="1" parent="1">
          <mxGeometry x="520" y="210" width="210" height="90" as="geometry" />
        </mxCell>
        <mxCell id="_ico9" value="" style="shape=image;html=1;imageAspect=1;aspect=fixed;movable=0;resizable=0;rotatable=0;connectable=0;editable=0;deletable=0;noLabel=1;image=data:image/png,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAABmJLR0QA/wD/AP+gvaeTAAACeUlEQVRoge3ZTYhNYRzH8c+MUcSgyYS8ZTALC2lkQ9iyUErSJMrGy8aeBSsbCy8RqYkdShYUsxDNgo2avC2kDMpGsfBSE2FYPOd2zxzn3Nt9mXPv5H7rqed5znOe+/vf8/8/5/88hxYt/m/aUvo60R3V32EsNzV1oAOv8CcqxxsrpzztifZO9Mbas3PUUhUdifYwLuFABXNsxeq6KSrPC9wtNWCFogudKjPZ+tjYPMvGgoCkC1XK4hrvr5alhUqtBjScWg34VRcVNfxuMoinY1asPQ1z8DljoiEh8HvqKK4cb3E/7cJ8jEoPmqN5qauUuAt1CU8gjYU5aKmKuAu9wYD0l9eNfOS0mHwks9GZ6McaYal6hJv4nbOuqujBiH9XoGHjl9am5azs3ONYA3WVJL4KncBa4d8+icNYF13ry7i/C4NYOVECUxgRMuBPpQbNxRPFJ3AxY9wOtWWV1ZZdBQFpudAWPBcCmRDMAxkGJFORvJhaqCQNOIQ7WBC1v2OPEMhNTx9+Kj6me8ZvL9PYoDEutKkgIP4euIx9Uf0jrkSD4RqeZRixDavKGFpPXuJ22oXHsi0+n5e6SonHwJcS475NtJBqibvQFLG9ZoL3Qny0qDfJZG4eZiT6RvEhHzm1sUjIOpMBPCbfVaYi4kHcKf3N3CZ7q9lw4i7UgSOCC/VjSdR/PWpn0XRHi/sV3eehcLSSRdMdLS7DuVi7FwdLGNB0R4vtiukD4UPHaezNQVRVJA0YEfx5O27F+ndn3N9UR4vdOIOneG38Rv5HxkRDmuho8YLsoKnkg0fDuCpd/KCQJzUlyVRic1SW4yseCLEwqb5UtmjRYhLxFy9S+A/BNjD9AAAAAElFTkSuQmCC;" vertex="1" parent="n.q-allow">
          <mxGeometry x="9" y="33" width="24" height="24" as="geometry" />
        </mxCell>
        <mxCell id="_st10" value="Compose" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;fontSize=10;fontStyle=1;fontColor=#8a97a5;fontFamily=Segoe UI;" vertex="1" parent="1">
          <mxGeometry x="770" y="60" width="170" height="20" as="geometry" />
        </mxCell>
        <mxCell id="n.q-parts" value="&lt;b&gt;Key parts&lt;/b&gt;&lt;br&gt;&lt;font style=&quot;font-size:10px;color:#5b6b7d&quot;&gt;declared list only&lt;/font&gt;" style="rounded=1;arcSize=8;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;fontColor=#1a2b45;fontSize=12;fontFamily=Segoe UI;verticalAlign=middle;align=center;spacingLeft=38;" vertex="1" parent="1">
          <mxGeometry x="770" y="90" width="170" height="90" as="geometry" />
        </mxCell>
        <mxCell id="_ico11" value="" style="shape=image;html=1;imageAspect=1;aspect=fixed;movable=0;resizable=0;rotatable=0;connectable=0;editable=0;deletable=0;noLabel=1;image=data:image/png,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAABmJLR0QA/wD/AP+gvaeTAAACxUlEQVRoge3Yy4sUVxgF8F9HhQTBiUGz8AFKjzGCjwQfCw0iSFyGQTGJq2zi3o2uk53uEnQdAv4B6kZcJKDBbILjRp2JQRAS4/iIZtAwUUenXdxu6amurqm6NdPdMH3g0tVV9zt1zr236vvq0kcf8xuVkvGL8DGqeIlRXC8rqlP4HGOoJdpvWNdFXbkwhCmt4hvtNhZ3TV0ODGsvvtG+6oSQtyJjNufo92EEd2HEGJjCZI5+/0RwdwwXZS+fSXzQLXF5MCTbwPHuScuHCi5LFz+Kd7onLT82CskraWBPFzUVxk+mi3/YaQExb6FmLEz8fxHBUcFOfFJSS2HswyvTZ2AKO3LELsAunMAtJZZeczF3FhO4Vif9E/fwSCja4H1sr4s/pHUG1Pt/gwv14wpWYK3w3OwSRnugKeZ/vCtuBt9gxMzlwVy1X2NFl30GZgvDsYF9A7OEK7GBvWLgVmxgLxgYx/PY4F4xEI1eMLCkTHBaIuo0BvA2niXOr8HX+EjI3FfxPR60I+pmIvsyYeg74blI9hvDYC8aGBfKj29xd4a+PzeLbq6FRrChnbs2uIMbQhk9iC068zGzCn8nTxaZgcfYr3Vnbyl+KMAT2/amucprYAq7M0angjNzbOCzMgYuZ4hvYOccG1jfuFFMHriWo8/vBfgmcURY15uFj5ysfacR/NHuQh73p3OIGszJVcOplPgt0rcvnwqz29ZZnhv+JSSWLBwrYODTNhwLcVj4UryEkzJyQBEDNRzN4FmBfwtwrc0SVQRFDExgUwpHBecL8NSwshsGakINnyzEvijIUZM+ELlRphqtCmu0GQcjeFaX0FC6nE5m4pgyotQMNKPoErqJ9xIcQ1o3u2Zq58qIbh7BKrYKyaQq1OPLsUwoHwhvl2H8gh/xXwrnNhyoczUMPhFK4Qe4L2yYPaz/3q1f66OPPuYjXgOFSOhQ2bt/6QAAAABJRU5ErkJggg==;" vertex="1" parent="n.q-parts">
          <mxGeometry x="9" y="33" width="24" height="24" as="geometry" />
        </mxCell>
        <mxCell id="n.q-hash" value="&lt;b&gt;Key hash&lt;/b&gt;&lt;br&gt;&lt;font style=&quot;font-size:10px;color:#5b6b7d&quot;&gt;BLAKE3 · 128 bit&lt;/font&gt;" style="shape=cylinder3;boundedLbl=1;backgroundOutline=1;size=11;whiteSpace=wrap;html=1;fillColor=#d5e8d4;strokeColor=#82b366;fontColor=#1e3a1e;fontSize=12;fontFamily=Segoe UI;verticalAlign=middle;align=center;spacingLeft=38;" vertex="1" parent="1">
          <mxGeometry x="770" y="210" width="170" height="90" as="geometry" />
        </mxCell>
        <mxCell id="_ico12" value="" style="shape=image;html=1;imageAspect=1;aspect=fixed;movable=0;resizable=0;rotatable=0;connectable=0;editable=0;deletable=0;noLabel=1;image=data:image/png,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAABmJLR0QA/wD/AP+gvaeTAAACsElEQVRoge2ZPWtUQRSGn11CxIifKEYUJDFEAn5AGjtbBVvxB6j4CwQLsbUVJaUggo2NoL2ghWAhiAlJNJGIWtkYBJf4kc1azC5c7565Z+bc2d2g94Up9tz7zjnvzNyZM2ehQoX/G7WEfR0ChjO/PwHrCqcOHM7EsQ58BloJ4wrCjbbTbHsYwHsk8K7FOK5HhenHWcG2PcD3GQOvq5OyqAHHBPsbhTcBjAj22RjnKQSMATsE+5zCO+Gx912ANZDjgm0NWI5x3isBv4AlA28BaMY4TyFAGslFnIhYXtTyARgKfG8E2OJ5Jo3kMrBb6W9MsK94eL+B70UBFuFyu4P8ft3vdl0KLmQJnSd8pnoJacaCBJxMHIgV4vehCdgLjKaPxQSTgD09CMSCNTwne0g2ehrY73l2H9iasz0BHhT0NwrcEey3gRcezhJ6ahKNA8i7xSWFd87Dm7YEUeYgs6YQEq+JO/yikVrABi4dKIJ0Ar/DrfNolBEgBfIeaBh4WubqRWoB2vIZBiYFe98FDAFThkCm+Pve3EF0EteBVcBR5OTO8gGH8LywCvAFos2AtOy+4SoYJlgFSIE0gA8G3hwlyigpZ2AWt41aeGb4Uolp4C6w0/P8IN3fQAP4ovgbF2yr7ZZHE5hBTjtUzDD4C0wLeKoF6ltCm+UOMK+9IAnwFaoGAfWAkwTsarfNgNfaC9JddxW4AhzxcC4C+3K2t8DjAj914Crdm8Zz4KWH8xF4VdCnCTXcwZP/2G4qvEmB0wIulA0o9hwYZ4B1UAmxAqSTNCQQifeDyDqohFgB0kj+RK+DSgLmiayDSkgxA4u4yl0RkqcQHaSYAW39b0OuqpkvMVnECKgjb63aSE54/CSZgZia5wbuD7hTGdtX4J7CWwBu4f7F7GAFeBbhu0KFCv8q/gAUR8fcNgtMcQAAAABJRU5ErkJggg==;" vertex="1" parent="n.q-hash">
          <mxGeometry x="12" y="39" width="24" height="24" as="geometry" />
        </mxCell>
        <mxCell id="_st13" value="Store gate" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;fontSize=10;fontStyle=1;fontColor=#8a97a5;fontFamily=Segoe UI;" vertex="1" parent="1">
          <mxGeometry x="990" y="60" width="190" height="20" as="geometry" />
        </mxCell>
        <mxCell id="n.q-priv" value="&lt;b&gt;Private response?&lt;/b&gt;&lt;br&gt;&lt;font style=&quot;font-size:10px;color:#5b6b7d&quot;&gt;no-store · Set-Cookie&lt;/font&gt;" style="shape=hexagon;perimeter=hexagonPerimeter2;size=0.12;whiteSpace=wrap;html=1;fillColor=#fff2cc;strokeColor=#d6b656;fontColor=#4a3c00;fontSize=12;fontFamily=Segoe UI;verticalAlign=middle;align=center;spacingLeft=38;" vertex="1" parent="1">
          <mxGeometry x="990" y="90" width="190" height="90" as="geometry" />
        </mxCell>
        <mxCell id="_ico14" value="" style="shape=image;html=1;imageAspect=1;aspect=fixed;movable=0;resizable=0;rotatable=0;connectable=0;editable=0;deletable=0;noLabel=1;image=data:image/png,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAABmJLR0QA/wD/AP+gvaeTAAADLElEQVRoge3YT6hVVRTH8c97vjQyjVQESStCkEQQChV0GIqBg8AMI4IgUpyIRjNp0MgiB0YY4UghrYEURCQIWj2I6I8mBAlF+F9LB5mK9krvbbDvrdtxn3/3nXfOE/zC5vHO2nvt39rnrn3W3tyhWQZK9l+I57EY9+ICPsMu/FapsoqZiHdxE+1Iu4KXGlOXwyA+FheebJsa0pjJRsXEt3EDC5qRGWcQ5xQPoI09dQrMS+LF+Dry/Bd8gTWYkrD9gfuFYPJY2GmTcQbDnfGV8Yz4Kj/Ssa9Lsc/I8bsCP0TGjeAdYQEKMZhjT1vFmYm/SVoZPjdiv3iuTMQGfIUHcrQVYoH4Cl/Ftx2hSdu5DH9PSt+Kk+0bTBhtAAP4seCE3fZ2hb5eGG0AsLrEhJcxO8XPooxxsTfZxsEqAoA3C4gfwaoMH+tTxq3EPfgkYvu9qgAIyXUpRcQxLMsZ/0pk3HUMdewvR+w3la/XMpmCzxOTbFUs2Z6LCGxjr7A4sQ/m6SrFd3k/MUnRIm62UGqUSeLdeU7zvgNVcgb7SvRv4a28TnUGAJtxtmDfN3Akr1PdAZzHE/gpo09LEL9lrET0mwO93C2cHc4mfA1jSRlHdb+BLn9iu7D99rJTvPpNpakACFvv/MSzovnxL00GsBazev6/ge/KOhnK71I5A3gKOxLPPxUuB0pRRwD3YY7wc3kcT/vvQNSlhdf7cV5VAEPC8XMp5uIhPIiHhUItj63CIaYWktvol/hVuRKht1h7rS7hXZIB9Ct8v5J7fow6cqAlXDsex2Fhpzkk1EajpsoAruGAcJY9IZTCp4Ty4e8K5xk1sZ/QDkxtUlQRJuNVXPR/8dfwrIpPTlUzDz/LTswPcVdTArOYgZOK7S4fGIdvYqdyW+SaZmTGmSrcHJQJYLgRpSksFxf5nlCQHY3Y/sKkJsTGSLsKmdaxp91ez7rF0xiRdx5Iuxl7URC5NmJrZ4yrnZnK3+V8X6fAvDdwQSi6yrCrPyljx6PCSanI6h81jhK4l5XC1XmW+GPCQWbcMg8fuTUnLmObcHSsnX4++9PxmCD4vFDfj1Qp6g63E/8AKx6wsTVHQH0AAAAASUVORK5CYII=;" vertex="1" parent="n.q-priv">
          <mxGeometry x="19" y="33" width="24" height="24" as="geometry" />
        </mxCell>
        <mxCell id="n.q-vary" value="&lt;b&gt;Vary inside key?&lt;/b&gt;&lt;br&gt;&lt;font style=&quot;font-size:10px;color:#5b6b7d&quot;&gt;else config error&lt;/font&gt;" style="shape=hexagon;perimeter=hexagonPerimeter2;size=0.12;whiteSpace=wrap;html=1;fillColor=#fff2cc;strokeColor=#d6b656;fontColor=#4a3c00;fontSize=12;fontFamily=Segoe UI;verticalAlign=middle;align=center;spacingLeft=38;" vertex="1" parent="1">
          <mxGeometry x="990" y="210" width="190" height="90" as="geometry" />
        </mxCell>
        <mxCell id="_ico15" value="" style="shape=image;html=1;imageAspect=1;aspect=fixed;movable=0;resizable=0;rotatable=0;connectable=0;editable=0;deletable=0;noLabel=1;image=data:image/png,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAABmJLR0QA/wD/AP+gvaeTAAADLElEQVRoge3YT6hVVRTH8c97vjQyjVQESStCkEQQChV0GIqBg8AMI4IgUpyIRjNp0MgiB0YY4UghrYEURCQIWj2I6I8mBAlF+F9LB5mK9krvbbDvrdtxn3/3nXfOE/zC5vHO2nvt39rnrn3W3tyhWQZK9l+I57EY9+ICPsMu/FapsoqZiHdxE+1Iu4KXGlOXwyA+FheebJsa0pjJRsXEt3EDC5qRGWcQ5xQPoI09dQrMS+LF+Dry/Bd8gTWYkrD9gfuFYPJY2GmTcQbDnfGV8Yz4Kj/Ssa9Lsc/I8bsCP0TGjeAdYQEKMZhjT1vFmYm/SVoZPjdiv3iuTMQGfIUHcrQVYoH4Cl/Ftx2hSdu5DH9PSt+Kk+0bTBhtAAP4seCE3fZ2hb5eGG0AsLrEhJcxO8XPooxxsTfZxsEqAoA3C4gfwaoMH+tTxq3EPfgkYvu9qgAIyXUpRcQxLMsZ/0pk3HUMdewvR+w3la/XMpmCzxOTbFUs2Z6LCGxjr7A4sQ/m6SrFd3k/MUnRIm62UGqUSeLdeU7zvgNVcgb7SvRv4a28TnUGAJtxtmDfN3Akr1PdAZzHE/gpo09LEL9lrET0mwO93C2cHc4mfA1jSRlHdb+BLn9iu7D99rJTvPpNpakACFvv/MSzovnxL00GsBazev6/ge/KOhnK71I5A3gKOxLPPxUuB0pRRwD3YY7wc3kcT/vvQNSlhdf7cV5VAEPC8XMp5uIhPIiHhUItj63CIaYWktvol/hVuRKht1h7rS7hXZIB9Ct8v5J7fow6cqAlXDsex2Fhpzkk1EajpsoAruGAcJY9IZTCp4Ty4e8K5xk1sZ/QDkxtUlQRJuNVXPR/8dfwrIpPTlUzDz/LTswPcVdTArOYgZOK7S4fGIdvYqdyW+SaZmTGmSrcHJQJYLgRpSksFxf5nlCQHY3Y/sKkJsTGSLsKmdaxp91ez7rF0xiRdx5Iuxl7URC5NmJrZ4yrnZnK3+V8X6fAvDdwQSi6yrCrPyljx6PCSanI6h81jhK4l5XC1XmW+GPCQWbcMg8fuTUnLmObcHSsnX4++9PxmCD4vFDfj1Qp6g63E/8AKx6wsTVHQH0AAAAASUVORK5CYII=;" vertex="1" parent="n.q-vary">
          <mxGeometry x="19" y="33" width="24" height="24" as="geometry" />
        </mxCell>
        <mxCell id="_st16" value="Outcome" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;fontSize=10;fontStyle=1;fontColor=#8a97a5;fontFamily=Segoe UI;" vertex="1" parent="1">
          <mxGeometry x="1230" y="60" width="200" height="20" as="geometry" />
        </mxCell>
        <mxCell id="n.q-ok" value="&lt;b&gt;Stored&lt;/b&gt;&lt;br&gt;&lt;font style=&quot;font-size:10px;color:#5b6b7d&quot;&gt;under key + tags&lt;/font&gt;" style="rounded=1;arcSize=8;whiteSpace=wrap;html=1;fillColor=#d5e8d4;strokeColor=#82b366;fontColor=#1e3a1e;fontSize=12;fontFamily=Segoe UI;verticalAlign=middle;align=center;spacingLeft=38;" vertex="1" parent="1">
          <mxGeometry x="1230" y="90" width="200" height="90" as="geometry" />
        </mxCell>
        <mxCell id="_ico17" value="" style="shape=image;html=1;imageAspect=1;aspect=fixed;movable=0;resizable=0;rotatable=0;connectable=0;editable=0;deletable=0;noLabel=1;image=data:image/png,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAABmJLR0QA/wD/AP+gvaeTAAACnUlEQVRoge3az4tNYRzH8ZeZ8TMLSZPxowizUBLyI0lSilLIH0DWs7CQtY0U2ZBIWVlQbAaJhWJhRrKxUUp+lTt+pDB+jDGGxbm3rjv3jOfe+5xzNvOpb/d07vN8v+/PPec5zznPuUyoWE2KnGsttmIlFmEGfuELnuIObmMwYt2WNRk9eIY/ATGEa1hTBGytdkp+2RDw2hjFZczPnVpyuhwpQzQDXx0lrM8Tvg0XI4BXxw/sysvA0QCgl+jFOfQHmviG1VnD75F+2oziElbV9JmCd4EmXmNOVvDT8Sal8HtsTuk3B58DDfzB6awMHEopWMLiqnZtkqvTGdyQmGtkPAxjaWz4jhSQn/69gqzA4waB68XZ2Aa2pBSqPtyrJTNujKtSSXIko+lknSIj6Cp/Pw0vIsFXYkMIWKjLesn6MFDe3i+594mpTSGNQg101dnXX7W9OzBPI1oS0ijUwNw6+95UbXcH5mlEs0IahRqod9s9r/zZiQWBeRrRSMxkL40dZL9xUzJ7xhy8lTgRAhZ6BAbq7GvDDiwMzNGoSiGNQg30tQDSrO7HTLZNNqdJWnwQeSKbirc5GjgfE76iwznBj2BZFgZmyucoXMgCvqLt4jwHp8VrzM7SABzPCH4YG7OGJ3k2uJuBgYN5wFfUhY8R4XvzhK9oX5OwtfFJQYtbcC8A8H/Rkzt1ldZp7ar0XLLsUqhuad7AgQJ4x2iv5uAHJZNjS+poNYFkqfyYxm++nuBrhPoTKlSxXjFdEfgQXqXrONVq4RhjgGRht7PBPk9jFI761FOEYhkYbqJPlGWTWAYeNtHnQaTaUdSN78InsX60F0I6jtJegNTGEJYXxDiu2nHV+PDDktvwaIr5V4NKvg3qr5WO4hFeRa45oUL1F4RjSvd3c7OYAAAAAElFTkSuQmCC;" vertex="1" parent="n.q-ok">
          <mxGeometry x="9" y="33" width="24" height="24" as="geometry" />
        </mxCell>
        <mxCell id="n.q-no" value="&lt;b&gt;Refused&lt;/b&gt;&lt;br&gt;&lt;font style=&quot;font-size:10px;color:#5b6b7d&quot;&gt;counted · owner alerted&lt;/font&gt;" style="rounded=1;arcSize=8;whiteSpace=wrap;html=1;fillColor=#f8cecc;strokeColor=#b85450;fontColor=#5c1a17;fontSize=12;fontFamily=Segoe UI;verticalAlign=middle;align=center;spacingLeft=38;" vertex="1" parent="1">
          <mxGeometry x="1230" y="210" width="200" height="90" as="geometry" />
        </mxCell>
        <mxCell id="_ico18" value="" style="shape=image;html=1;imageAspect=1;aspect=fixed;movable=0;resizable=0;rotatable=0;connectable=0;editable=0;deletable=0;noLabel=1;image=data:image/png,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAABmJLR0QA/wD/AP+gvaeTAAACo0lEQVRoge2YTYiNURjHf2MuNb5iNsTMpNxSruQjG3ai1N1YSBasWFAsJspCIbGZhRILq1usFLJQGslqdkj5SNgw02AzikEz4ToWZ97mveOc93y975xb3n89Nd3p+T+/Z+b03HMeKFXq/1Zngd41oA6sAoaB3wXWylUdwGVApGIU2BwTykVHaIVPYhhYGJHLSkuBMdQNCOBCPDQ7XUEPL4BJoBqNzqC1wC+yGxDArViAJt3HDJ/EzkiMWu3GHl4AL4FKFFKF5gFvcWtAAIdjwKp0End4AXwGuiPwtmgZ8AW/BgRwcfaRW9XAH14gp1Zt1qmntBFoGgBt4kEIREdA3hCwTfG7JvAc+DPj8+XASo1fHbjnyeKlfbif68XIG6kq5zUwt1jkaXUB7zUgWfedTuR/RZfXXyR0WmczIATyKq3SEkPeV+QxK1Q9wHcDyDVNbp8hTwBXC2QH4IYFxB1N7jqL3CYFPny2kn2Gk3iYkW8zVofwn45azQEeWQI81njssswXwJ68GzjoUPyNxmOvg8cIMD8v+EXAR4finzQ+hxw8BHAqrwYGHAv/0Pj0e/j0hcJXke9Yl8IC9WPljIfPdROgabHVwO+2OAlMACumogocR16/XbQeGAQ+eDCwHfe/WBHxBDkFnVRBvlt9i44Bx4BNyPF5O7CJA64NHA0oNg6sVnheCvAcxWGr1418r/oWG9D4LgB+Bviet21g5mLWNfZneL8K8J1AbrozVcNuu5YVpzXeFeRsD/G+aWpgMLCAQH5rq9YlJ3LwFsAOHXw9pwICeIEcw11AL3COsPOfjqdobqt3c2yg6NiSQKe/IHpUXbWpepMf0g08iwDiI4Fc2/yjNcA34h8PUzSyutuAnETjbQCajibwDjmi22YtX6pUqRz0FyGU+wg7R1qJAAAAAElFTkSuQmCC;" vertex="1" parent="n.q-no">
          <mxGeometry x="9" y="33" width="24" height="24" as="geometry" />
        </mxCell>
        <mxCell id="_spine19" value="" style="html=1;endArrow=block;endFill=1;strokeColor=#b8c4d0;strokeWidth=2;" edge="1" parent="1">
          <mxGeometry relative="1" as="geometry">
            <mxPoint x="230" y="190" as="sourcePoint" />
            <mxPoint x="260" y="190" as="targetPoint" />
          </mxGeometry>
        </mxCell>
        <mxCell id="_spine20" value="" style="html=1;endArrow=block;endFill=1;strokeColor=#b8c4d0;strokeWidth=2;" edge="1" parent="1">
          <mxGeometry relative="1" as="geometry">
            <mxPoint x="480" y="190" as="sourcePoint" />
            <mxPoint x="510" y="190" as="targetPoint" />
          </mxGeometry>
        </mxCell>
        <mxCell id="_spine21" value="" style="html=1;endArrow=block;endFill=1;strokeColor=#b8c4d0;strokeWidth=2;" edge="1" parent="1">
          <mxGeometry relative="1" as="geometry">
            <mxPoint x="740" y="190" as="sourcePoint" />
            <mxPoint x="760" y="190" as="targetPoint" />
          </mxGeometry>
        </mxCell>
        <mxCell id="_spine22" value="" style="html=1;endArrow=block;endFill=1;strokeColor=#b8c4d0;strokeWidth=2;" edge="1" parent="1">
          <mxGeometry relative="1" as="geometry">
            <mxPoint x="950" y="190" as="sourcePoint" />
            <mxPoint x="980" y="190" as="targetPoint" />
          </mxGeometry>
        </mxCell>
        <mxCell id="_spine23" value="" style="html=1;endArrow=block;endFill=1;strokeColor=#b8c4d0;strokeWidth=2;" edge="1" parent="1">
          <mxGeometry relative="1" as="geometry">
            <mxPoint x="1190" y="190" as="sourcePoint" />
            <mxPoint x="1220" y="190" as="targetPoint" />
          </mxGeometry>
        </mxCell>
        <mxCell id="_e24" value="mismatch" style="edgeStyle=orthogonalEdgeStyle;rounded=1;html=1;jettySize=auto;orthogonalLoop=1;dashed=1;endArrow=block;endFill=1;strokeColor=#b85450;strokeWidth=1.4;fontSize=10;fontColor=#42536a;labelBackgroundColor=#ffffff;verticalAlign=bottom;fontFamily=Segoe UI;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="1" source="n.q-vary" target="n.q-no">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="title" value="The Cache Key — How a Request Becomes a Key, and When It Refuses" style="text;html=1;strokeColor=none;fillColor=none;align=left;verticalAlign=middle;whiteSpace=wrap;fontSize=20;fontStyle=1;fontColor=#16202c;fontFamily=Segoe UI;" vertex="1" parent="1">
          <mxGeometry x="40" y="20" width="1380" height="30" as="geometry" />
        </mxCell>
        <mxCell id="rule" value="" style="line;strokeWidth=1;html=1;strokeColor=#c9d3de;" vertex="1" parent="1">
          <mxGeometry x="40" y="50" width="1380" height="10" as="geometry" />
        </mxCell>
        <mxCell id="_lg25" value="" style="rounded=1;arcSize=30;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;" vertex="1" parent="1">
          <mxGeometry x="40" y="380" width="20" height="10" as="geometry" />
        </mxCell>
        <mxCell id="_lg26" value="Application we own" style="text;html=1;strokeColor=none;fillColor=none;align=left;verticalAlign=middle;whiteSpace=wrap;fontSize=10;fontColor=#7b8794;fontFamily=Segoe UI;" vertex="1" parent="1">
          <mxGeometry x="70" y="370" width="110" height="20" as="geometry" />
        </mxCell>
        <mxCell id="_lg27" value="" style="rounded=1;arcSize=30;html=1;fillColor=#fff2cc;strokeColor=#d6b656;" vertex="1" parent="1">
          <mxGeometry x="200" y="380" width="20" height="10" as="geometry" />
        </mxCell>
        <mxCell id="_lg28" value="Decision point" style="text;html=1;strokeColor=none;fillColor=none;align=left;verticalAlign=middle;whiteSpace=wrap;fontSize=10;fontColor=#7b8794;fontFamily=Segoe UI;" vertex="1" parent="1">
          <mxGeometry x="230" y="370" width="90" height="20" as="geometry" />
        </mxCell>
        <mxCell id="_lg29" value="" style="rounded=1;arcSize=30;html=1;fillColor=#d5e8d4;strokeColor=#82b366;" vertex="1" parent="1">
          <mxGeometry x="340" y="380" width="20" height="10" as="geometry" />
        </mxCell>
        <mxCell id="_lg30" value="Data store" style="text;html=1;strokeColor=none;fillColor=none;align=left;verticalAlign=middle;whiteSpace=wrap;fontSize=10;fontColor=#7b8794;fontFamily=Segoe UI;" vertex="1" parent="1">
          <mxGeometry x="370" y="370" width="70" height="20" as="geometry" />
        </mxCell>
        <mxCell id="_lg31" value="" style="rounded=1;arcSize=30;html=1;fillColor=#d5e8d4;strokeColor=#82b366;" vertex="1" parent="1">
          <mxGeometry x="460" y="380" width="20" height="10" as="geometry" />
        </mxCell>
        <mxCell id="_lg32" value="Opportunity" style="text;html=1;strokeColor=none;fillColor=none;align=left;verticalAlign=middle;whiteSpace=wrap;fontSize=10;fontColor=#7b8794;fontFamily=Segoe UI;" vertex="1" parent="1">
          <mxGeometry x="480" y="370" width="70" height="20" as="geometry" />
        </mxCell>
        <mxCell id="_lg33" value="" style="rounded=1;arcSize=30;html=1;fillColor=#f8cecc;strokeColor=#b85450;" vertex="1" parent="1">
          <mxGeometry x="580" y="380" width="20" height="10" as="geometry" />
        </mxCell>
        <mxCell id="_lg34" value="Risk / gap" style="text;html=1;strokeColor=none;fillColor=none;align=left;verticalAlign=middle;whiteSpace=wrap;fontSize=10;fontColor=#7b8794;fontFamily=Segoe UI;" vertex="1" parent="1">
          <mxGeometry x="600" y="370" width="70" height="20" as="geometry" />
        </mxCell>
        <mxCell id="_lg35" value="" style="html=1;endArrow=none;dashed=1;strokeColor=#b85450;strokeWidth=1.4;" edge="1" parent="1">
          <mxGeometry relative="1" as="geometry">
            <mxPoint x="690" y="380" as="sourcePoint" />
            <mxPoint x="710" y="380" as="targetPoint" />
          </mxGeometry>
        </mxCell>
        <mxCell id="_lg36" value="failure / alternate" style="text;html=1;strokeColor=none;fillColor=none;align=left;verticalAlign=middle;whiteSpace=wrap;fontSize=10;fontColor=#7b8794;fontFamily=Segoe UI;" vertex="1" parent="1">
          <mxGeometry x="720" y="370" width="110" height="20" as="geometry" />
        </mxCell>
        <mxCell id="note" value="One Rust library computes this in the cache plugin, the validator and the explain API, so the three cannot disagree." style="text;html=1;strokeColor=none;fillColor=none;align=left;verticalAlign=middle;whiteSpace=wrap;fontSize=10;fontColor=#8a97a5;fontFamily=Segoe UI;" vertex="1" parent="1">
          <mxGeometry x="40" y="400" width="1380" height="20" as="geometry" />
        </mxCell>
        <mxCell id="foot-rule" value="" style="line;strokeWidth=1;html=1;strokeColor=#e3e9ef;" vertex="1" parent="1">
          <mxGeometry x="40" y="420" width="1380" height="10" as="geometry" />
        </mxCell>
        <mxCell id="foot" value="v 1.0   ·   owner Edge Platform   ·   date 2026-09" style="text;html=1;strokeColor=none;fillColor=none;align=left;verticalAlign=middle;whiteSpace=wrap;fontSize=9;fontColor=#9aa7b4;fontFamily=Segoe UI;" vertex="1" parent="1">
          <mxGeometry x="40" y="440" width="1380" height="10" as="geometry" />
        </mxCell>
      </root>
    </mxGraphModel>
  </diagram>
</mxfile>
