<div dir="ltr">Der All,<div><br></div><div><a href="https://numpypprint-fsfarimani.notebooks.azure.com/j/notebooks/pprint.ipynb">Here in this NoteBook</a> I tried to compare my unicode implementation with Eric's HTML version plus links to the discussions on different forums if you like to follow</div><div><br></div><div>For example:</div><div><br></div><div><div><img src="cid:ii_jo6y7e9n1" alt="chrome_2018-11-07_10-15-20.png" width="562" height="333"><br></div></div><div><br></div><div>Best regards,</div><div>Foad</div><div><br></div></div><br><div class="gmail_quote"><div dir="ltr">On Wed, Nov 7, 2018 at 9:24 AM Foad Sojoodi Farimani <<a href="mailto:f.s.farimani@gmail.com">f.s.farimani@gmail.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr">Dear Eric,<div><br></div><div>In between your lines:</div><br><div class="gmail_quote"><div dir="ltr">On Wed, Nov 7, 2018 at 7:23 AM Eric Wieser <<a href="mailto:wieser.eric%2Bnumpy@gmail.com" target="_blank">wieser.eric+numpy@gmail.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><div class="m_-7001588795020417617m_8110254814164099615markdown-here-wrapper" style="font-size:1em;font-family:Helvetica,arial,freesans,clean,sans-serif;color:rgb(34,34,34);background-color:rgb(255,255,255);border:none;line-height:1.2"><p style="margin:1em 0px">Foad:</p>
<blockquote style="margin:1em 0px;border-left:4px solid rgb(221,221,221);padding:0px 1em;color:rgb(119,119,119);quotes:none">
<p style="margin:1em 0px">having the functionality for conventional consols would also help</p>
</blockquote>
<p style="margin:1em 0px">I think the most important thing in a conventional console is to output the array in a format that allows you to reconstruct the object. That makes it way easier for people to reproduce each others problems without having their full dataset. If your goal is to visualize complex arrays, I think the console is a pretty limited tool, and numpy already does as much as is worthwhile there.</p></div></div></blockquote><div>I agree with most of what you say:</div><div><ol><li>the current representation of numpy array with print() is of course already there and it is not my goal to replace it. but rather add something like Sympy's pprint function, an alternative representation. <br></li><li>the reason I'm using console is first because there are people who use it and secondly because I have no idea how to do what you are doing :)) there is room for both I think</li></ol></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><div class="m_-7001588795020417617m_8110254814164099615markdown-here-wrapper" style="font-size:1em;font-family:Helvetica,arial,freesans,clean,sans-serif;color:rgb(34,34,34);background-color:rgb(255,255,255);border:none;line-height:1.2">
<blockquote style="margin:1em 0px;border-left:4px solid rgb(221,221,221);padding:0px 1em;color:rgb(119,119,119);quotes:none">
<p style="margin:1em 0px">I don’t think putting everything in boxes is helping. it is confusing. I would rather having horizontal and vertical square brackets represent each nested array</p>
</blockquote>
<p style="margin:1em 0px">See my update at the same link, which shows an alternative which draws those brackets as you envi</p></div></div></blockquote><div>wow this is awesome:</div><div><br></div><div><br></div><div><div><img src="cid:ii_jo6w1mvw1" alt="2018-11-07_09-07-37.gif" width="562" height="148"><br></div></div><div><br></div><div>I wonder if you could make this the default view without the need of those other inputs or the lamda function? this is almost 80% of what I had in mind</div><div><br></div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><div class="m_-7001588795020417617m_8110254814164099615markdown-here-wrapper" style="font-size:1em;font-family:Helvetica,arial,freesans,clean,sans-serif;color:rgb(34,34,34);background-color:rgb(255,255,255);border:none;line-height:1.2">
<blockquote style="margin:1em 0px;border-left:4px solid rgb(221,221,221);padding:0px 1em;color:rgb(119,119,119);quotes:none">
<p style="margin:1em 0px">it would be awesome if in IPython/Jupyter hovering over an element a popup would show the index</p>
</blockquote>
<p style="margin:1em 0px">It… already does?</p></div></div></blockquote><div>it doesn't on my browser :( </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><div class="m_-7001588795020417617m_8110254814164099615markdown-here-wrapper" style="font-size:1em;font-family:Helvetica,arial,freesans,clean,sans-serif;color:rgb(34,34,34);background-color:rgb(255,255,255);border:none;line-height:1.2">
<blockquote style="margin:1em 0px;border-left:4px solid rgb(221,221,221);padding:0px 1em;color:rgb(119,119,119);quotes:none">
<p style="margin:1em 0px"> to show L R U P or combination of these plus some numbers</p>
</blockquote>
<p style="margin:1em 0px">I don’t know what you mean by this.</p></div></div></blockquote><div>imaging the Pandas .head() and .tail functions which accept positive integer inputs to show specific number of rows. now our print function could have  two inputs one string which should be L for left, R for right, U for up and D for down. respectively UL, UR, DL and DR for corners. another input is a tuple of integers which in the case of U,D,L,R is only one integer showing the number of rows or columns. and in the case of UL, UR, DL, DR two integers showing the number of rows and columns in that specific corner to be shown. </div><div><br></div><div>What could be added:</div><div><ol><li>adding slide bars for big datasets</li><li>compressing the result according to the terminals dimensions (as Pandas does)</li><li>editing the variables like Spyders variable explorer</li><li>adding dimensions or rows/columns within a dimension or elements in rows/columns</li></ol><div>Again thanks a lot for your help. I appreciate your kind support. </div></div><div><br></div><div>Best,</div><div>Foad</div><div><br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><div class="m_-7001588795020417617m_8110254814164099615markdown-here-wrapper" style="font-size:1em;font-family:Helvetica,arial,freesans,clean,sans-serif;color:rgb(34,34,34);background-color:rgb(255,255,255);border:none;line-height:1.2">
<p style="margin:1em 0px">Eric</p>
<p style="margin:1em 0px">On Tue, 6 Nov 2018 at 00:56 Foad Sojoodi Farimani <a href="http://mailto:f.s.farimani@gmail.com" style="color:rgb(51,51,238);text-decoration:none" target="_blank">f.s.farimani@gmail.com</a> wrote:</p>
<p style="margin:1em 0px"></p><div class="m_-7001588795020417617m_8110254814164099615markdown-here-exclude"><p></p><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><div dir="ltr"><div dir="ltr">Wow, this is awesome.<div>Some points though:</div><div><ul><li>not everybody uses IPython/Jupyter having the functionality for conventional consols would also help. something like Sypy's init_printing/init_session which smartly chooses the right representation considering the terminal.</li><li>I don't think putting everything in boxes is helping. it is confusing. I would rather having horizontal and vertical square brackets represent each nested array</li><li>it would be awesome if in IPython/Jupyter hovering over an element a popup would show the index</li><li>one could read the width and height of the terminal and other options I mentioned in reply Mark to show L R U P or combination of these plus some numbers (similar to Pandas .head .tail) methods and then show the rest by unicod 3dot</li></ul><div>P.S. I had no idea our university Microsoft services also offers Azure Notebooks awesome :P</div></div><div><br></div><div>F.</div></div></div></div><br><div class="gmail_quote"><div dir="ltr">On Tue, Nov 6, 2018 at 9:45 AM Eric Wieser <<a href="mailto:wieser.eric%2Bnumpy@gmail.com" target="_blank">wieser.eric+numpy@gmail.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr">Here's how that could look<div><br><div><a href="https://numpyintegration-ericwieser.notebooks.azure.com/j/notebooks/pprint.ipynb" target="_blank">https://numpyintegration-ericwieser.notebooks.azure.com/j/notebooks/pprint.ipynb</a><br></div><div><br></div><div>Feel free to play around and see if you can produce something more useful</div><div><br></div><div><br></div></div></div><br><div class="gmail_quote"><div dir="ltr">On Mon, 5 Nov 2018 at 23:28 Foad Sojoodi Farimani <<a href="mailto:f.s.farimani@gmail.com" target="_blank">f.s.farimani@gmail.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><div>It is not highking if I asked for it :))</div><div>for IPython/Jupyter using Markdown/LaTeX would be awesome </div><div>or even better using HTML to add sliders just like Pandas...</div></div><div dir="ltr"><div><br></div><div>F.</div></div><br><div class="gmail_quote"><div dir="ltr">On Tue, Nov 6, 2018 at 6:51 AM Eric Wieser <<a href="mailto:wieser.eric%2Bnumpy@gmail.com" target="_blank">wieser.eric+numpy@gmail.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr">Hijacking this thread while on the topic of pprint - we might want to look into a table-based `_html_repr_` or `_latex_repr_` for use in ipython - where we can print the full array and let scrollbars replace ellipses.<div><br></div><div>Eric</div></div><br><div class="gmail_quote"><div dir="ltr">On Mon, 5 Nov 2018 at 21:11 Mark Harfouche <<a href="mailto:mark.harfouche@gmail.com" target="_blank">mark.harfouche@gmail.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><div class="m_-7001588795020417617m_8110254814164099615m_6438190517421370132m_7333245440517467936m_-185302057857518534m_8848907058574152615m_5127269352113638813markdown-here-wrapper"><p style="margin:0px 0px 1.2em!important">Foad, </p>
<p style="margin:0px 0px 1.2em!important">Visualizing data is definitely a complex field. I definitely feel your pain.<br>Printing your data is but one way of visualizing it, and probably only useful for very small and constrained datasets.<br>Have you looked into <a href="https://docs.scipy.org/doc/numpy-1.15.1/reference/generated/numpy.set_printoptions.html" target="_blank"><code style="font-size:0.85em;font-family:Consolas,Inconsolata,Courier,monospace;margin:0px 0.15em;padding:0px 0.3em;white-space:pre-wrap;border:1px solid rgb(234,234,234);background-color:rgb(248,248,248);border-radius:3px;display:inline">set_printoptions</code></a> to see how numpy’s existing capabilities might help you with your visualization?</p>
<p style="margin:0px 0px 1.2em!important">The code you showed seems quite good. I wouldn’t worry about performance when it comes to functions that will seldom be called in tight loops.<br>As you’ll learn more about python and numpy, you’ll keep expanding it to include more use cases.<br>For many of my projects, I create small submodules for visualization tailored to the specific needs of the particular project.<br>I’ll try to incorporate your functions and see how I use them.</p>
<p style="margin:0px 0px 1.2em!important">Your original post seems to have some confusion about C Style vs F Style ordering. I hope that has been resolved.<br>There is also a lot of good documentation<br><a href="https://docs.scipy.org/doc/numpy/user/numpy-for-matlab-users.html#numpy-for-matlab-users-notes" target="_blank">https://docs.scipy.org/doc/numpy/user/numpy-for-matlab-users.html#numpy-for-matlab-users-notes</a><br>about transitioning from matlab.</p></div></div><div dir="ltr"><div class="m_-7001588795020417617m_8110254814164099615m_6438190517421370132m_7333245440517467936m_-185302057857518534m_8848907058574152615m_5127269352113638813markdown-here-wrapper">
<p style="margin:0px 0px 1.2em!important">Mark</p>
<div title="MDH:PGRpdiBkaXI9Imx0ciI+PGRpdiBkaXI9Imx0ciI+PGRpdj5Gb2FkLCZuYnNwOzxicj48L2Rpdj48
ZGl2Pjxicj48L2Rpdj48ZGl2PlZpc3VhbGl6aW5nIGRhdGEgaXMgZGVmaW5pdGVseSBhIGNvbXBs
ZXggZmllbGQuIEkgZGVmaW5pdGVseSBmZWVsIHlvdXIgcGFpbi48L2Rpdj48ZGl2PlByaW50aW5n
IHlvdXIgZGF0YSBpcyBidXQgb25lIHdheSBvZiB2aXN1YWxpemluZyBpdCwgYW5kIHByb2JhYmx5
IG9ubHkgdXNlZnVsIGZvciB2ZXJ5IHNtYWxsIGFuZCBjb25zdHJhaW5lZCBkYXRhc2V0cy48L2Rp
dj48ZGl2PkhhdmUgeW91IGxvb2tlZCBpbnRvIFtgc2V0X3ByaW50b3B0aW9uc2BdKDxhIGhyZWY9
Imh0dHBzOi8vZG9jcy5zY2lweS5vcmcvZG9jL251bXB5LTEuMTUuMS9yZWZlcmVuY2UvZ2VuZXJh
dGVkL251bXB5LnNldF9wcmludG9wdGlvbnMuaHRtbCIgdGFyZ2V0PSJfYmxhbmsiIGRhdGEtc2Fm
ZXJlZGlyZWN0dXJsPSJodHRwczovL3d3dy5nb29nbGUuY29tL3VybD9xPWh0dHBzOi8vZG9jcy5z
Y2lweS5vcmcvZG9jL251bXB5LTEuMTUuMS9yZWZlcmVuY2UvZ2VuZXJhdGVkL251bXB5LnNldF9w
cmludG9wdGlvbnMuaHRtbCZhbXA7c291cmNlPWdtYWlsJmFtcDt1c3Q9MTU0MTU2NjY0MjYyMjAw
MCZhbXA7dXNnPUFGUWpDTkVlcVotUFRYeHpuYWpOY2dvV3lOQm8xc2x0MHciPmh0dHBzOi8vPHdi
cj5kb2NzLnNjaXB5Lm9yZy9kb2MvbnVtcHktMS4xNS48d2JyPjEvcmVmZXJlbmNlL2dlbmVyYXRl
ZC9udW1weS48d2JyPnNldF9wcmludG9wdGlvbnMuaHRtbDwvYT4pIHRvIHNlZSBob3cgbnVtcHkn
cyBleGlzdGluZyBjYXBhYmlsaXRpZXMgbWlnaHQgaGVscCB5b3Ugd2l0aCB5b3VyIHZpc3VhbGl6
YXRpb24/PGJyPjwvZGl2PjxkaXY+PGJyPjwvZGl2PjxkaXY+VGhlIGNvZGUgeW91IHNob3dlZCBz
ZWVtcyBxdWl0ZSBnb29kLiBJIHdvdWxkbid0IHdvcnJ5IGFib3V0IHBlcmZvcm1hbmNlIHdoZW4g
aXQgY29tZXMgdG8gZnVuY3Rpb25zIHRoYXQgd2lsbCBzZWxkb20gYmUgY2FsbGVkIGluIHRpZ2h0
IGxvb3BzLjwvZGl2PjxkaXY+QXMgeW91J2xsIGxlYXJuIG1vcmUgYWJvdXQgcHl0aG9uIGFuZCBu
dW1weSwgeW91J2xsIGtlZXAgZXhwYW5kaW5nIGl0IHRvIGluY2x1ZGUgbW9yZSB1c2UgY2FzZXMu
PC9kaXY+PGRpdj5Gb3IgbWFueSBvZiBteSBwcm9qZWN0cywgSSBjcmVhdGUgc21hbGwgc3VibW9k
dWxlcyBmb3IgdmlzdWFsaXphdGlvbiB0YWlsb3JlZCB0byB0aGUgc3BlY2lmaWMgbmVlZHMgb2Yg
dGhlIHBhcnRpY3VsYXIgcHJvamVjdC48L2Rpdj48ZGl2PkknbGwgdHJ5IHRvIGluY29ycG9yYXRl
IHlvdXIgZnVuY3Rpb25zIGFuZCBzZWUgaG93IEkgdXNlIHRoZW0uPGJyPjwvZGl2PjxkaXY+PGJy
PjwvZGl2PjxkaXY+WW91ciBvcmlnaW5hbCBwb3N0IHNlZW1zIHRvIGhhdmUgc29tZSBjb25mdXNp
b24gYWJvdXQgQyBTdHlsZSB2cyBGIFN0eWxlIG9yZGVyaW5nLiBJIGhvcGUgdGhhdCBoYXMgYmVl
biByZXNvbHZlZC4gPGJyPjwvZGl2PjxkaXY+VGhlcmUgaXMgYWxzbyBhIGxvdCBvZiBnb29kIGRv
Y3VtZW50YXRpb248L2Rpdj48ZGl2PjxhIGhyZWY9Imh0dHBzOi8vZG9jcy5zY2lweS5vcmcvZG9j
L251bXB5L3VzZXIvbnVtcHktZm9yLW1hdGxhYi11c2Vycy5odG1sI251bXB5LWZvci1tYXRsYWIt
dXNlcnMtbm90ZXMiIHRhcmdldD0iX2JsYW5rIiBkYXRhLXNhZmVyZWRpcmVjdHVybD0iaHR0cHM6
Ly93d3cuZ29vZ2xlLmNvbS91cmw/cT1odHRwczovL2RvY3Muc2NpcHkub3JnL2RvYy9udW1weS91
c2VyL251bXB5LWZvci1tYXRsYWItdXNlcnMuaHRtbCUyM251bXB5LWZvci1tYXRsYWItdXNlcnMt
bm90ZXMmYW1wO3NvdXJjZT1nbWFpbCZhbXA7dXN0PTE1NDE1NjY2NDI2MjIwMDAmYW1wO3VzZz1B
RlFqQ05HTFVvTjBVZUMza1l5T3o3TlhqYUpZcXFWZ0hnIj5odHRwczovL2RvY3Muc2NpcHkub3Jn
L2RvYy88d2JyPm51bXB5L3VzZXIvbnVtcHktZm9yLW1hdGxhYi08d2JyPnVzZXJzLmh0bWwjbnVt
cHktZm9yLW1hdGxhYi08d2JyPnVzZXJzLW5vdGVzPC9hPjwvZGl2PjxkaXY+YWJvdXQgdHJhbnNp
dGlvbmluZyBmcm9tIG1hdGxhYi48L2Rpdj48ZGl2Pjxicj48L2Rpdj48ZGl2Pk1hcms8YnI+PC9k
aXY+PGRpdj48YnI+PC9kaXY+PC9kaXY+PC9kaXY+" style="height:0;width:0;max-height:0;max-width:0;overflow:hidden;font-size:0em;padding:0;margin:0"></div></div></div><br><div class="gmail_quote"><div dir="ltr">On Mon, Nov 5, 2018 at 4:46 PM Foad Sojoodi Farimani <<a href="mailto:f.s.farimani@gmail.com" target="_blank">f.s.farimani@gmail.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><div>Hello everyone,</div><div><br></div><div>Following <a href="https://stackoverflow.com/q/53126305/4999991" target="_blank">this question</a>, I'm convinced that numpy ndarrays are not MATLAB/mathematical multidimentional matrices and I should stop expecting them to be. However I still think it would have a lot of benefit to have a function like sympy's pprint to pretty print. something like pandas .head and .tail method plus  .left .right .UpLeft .UpRight .DownLeft .DownRight methods. when nothing mentioned it would show 4 corners and put dots in the middle if the array is to big for the terminal. </div><div><br></div><div>Best,</div><div>Foad</div></div>
_______________________________________________<br>
NumPy-Discussion mailing list<br>
<a href="mailto:NumPy-Discussion@python.org" target="_blank">NumPy-Discussion@python.org</a><br>
<a href="https://mail.python.org/mailman/listinfo/numpy-discussion" rel="noreferrer" target="_blank">https://mail.python.org/mailman/listinfo/numpy-discussion</a><br>
</blockquote></div>
_______________________________________________<br>
NumPy-Discussion mailing list<br>
<a href="mailto:NumPy-Discussion@python.org" target="_blank">NumPy-Discussion@python.org</a><br>
<a href="https://mail.python.org/mailman/listinfo/numpy-discussion" rel="noreferrer" target="_blank">https://mail.python.org/mailman/listinfo/numpy-discussion</a><br>
</blockquote></div>
_______________________________________________<br>
NumPy-Discussion mailing list<br>
<a href="mailto:NumPy-Discussion@python.org" target="_blank">NumPy-Discussion@python.org</a><br>
<a href="https://mail.python.org/mailman/listinfo/numpy-discussion" rel="noreferrer" target="_blank">https://mail.python.org/mailman/listinfo/numpy-discussion</a><br>
</blockquote></div>
_______________________________________________<br>
NumPy-Discussion mailing list<br>
<a href="mailto:NumPy-Discussion@python.org" target="_blank">NumPy-Discussion@python.org</a><br>
<a href="https://mail.python.org/mailman/listinfo/numpy-discussion" rel="noreferrer" target="_blank">https://mail.python.org/mailman/listinfo/numpy-discussion</a><br>
</blockquote></div>
_______________________________________________<br>
NumPy-Discussion mailing list<br>
<a href="mailto:NumPy-Discussion@python.org" target="_blank">NumPy-Discussion@python.org</a><br>
<a href="https://mail.python.org/mailman/listinfo/numpy-discussion" rel="noreferrer" target="_blank">https://mail.python.org/mailman/listinfo/numpy-discussion</a><br>
</blockquote></div>
_______________________________________________<br>
NumPy-Discussion mailing list<br>
<a href="mailto:NumPy-Discussion@python.org" target="_blank">NumPy-Discussion@python.org</a><br>
<a href="https://mail.python.org/mailman/listinfo/numpy-discussion" rel="noreferrer" target="_blank">https://mail.python.org/mailman/listinfo/numpy-discussion</a><br>
</blockquote><p></p></div><p style="margin:1em 0px"></p>
<div title="MDH:PGRpdj5Gb2FkOjwvZGl2PjxkaXY+PGJyPjwvZGl2PjxkaXY+Jmd0OyBoYXZpbmcgdGhlIGZ1bmN0
aW9uYWxpdHkgZm9yIGNvbnZlbnRpb25hbCBjb25zb2xzIHdvdWxkIGFsc28gaGVscDwvZGl2Pjxk
aXY+PGJyPjwvZGl2PjxkaXY+SSB0aGluayB0aGUgbW9zdCBpbXBvcnRhbnQgdGhpbmcgaW4gYSBj
b252ZW50aW9uYWwgY29uc29sZSBpcyB0byBvdXRwdXQgdGhlIGFycmF5IGluIGEgZm9ybWF0IHRo
YXQgYWxsb3dzIHlvdSB0byByZWNvbnN0cnVjdCB0aGUgb2JqZWN0LiBUaGF0IG1ha2VzIGl0IHdh
eSBlYXNpZXIgZm9yIHBlb3BsZSB0byByZXByb2R1Y2UgZWFjaCBvdGhlcnMgcHJvYmxlbXMgd2l0
aG91dCBoYXZpbmcgdGhlaXIgZnVsbCBkYXRhc2V0LiBJZiB5b3VyIGdvYWwgaXMgdG8gdmlzdWFs
aXplIGNvbXBsZXggYXJyYXlzLCBJIHRoaW5rIHRoZSBjb25zb2xlIGlzIGEgcHJldHR5IGxpbWl0
ZWQgdG9vbCwgYW5kIG51bXB5IGFscmVhZHkgZG9lcyBhcyBtdWNoIGFzIGlzIHdvcnRod2hpbGUg
dGhlcmUuPC9kaXY+PGRpdj48YnI+PC9kaXY+PGRpdj4mZ3Q7IEkgZG9uJ3QgdGhpbmsgcHV0dGlu
ZyBldmVyeXRoaW5nIGluIGJveGVzIGlzIGhlbHBpbmcuIGl0IGlzIGNvbmZ1c2luZy4gSSB3b3Vs
ZCByYXRoZXIgaGF2aW5nIGhvcml6b250YWwgYW5kIHZlcnRpY2FsIHNxdWFyZSBicmFja2V0cyBy
ZXByZXNlbnQgZWFjaCBuZXN0ZWQgYXJyYXk8L2Rpdj48ZGl2Pjxicj48L2Rpdj48ZGl2PlNlZSBt
eSB1cGRhdGUgYXQgdGhlIHNhbWUgbGluaywgd2hpY2ggc2hvd3MgYW4gYWx0ZXJuYXRpdmUgd2hp
Y2ggZHJhd3MgdGhvc2UgYnJhY2tldHMgYXMgeW91IGVudmk8L2Rpdj48ZGl2Pjxicj48L2Rpdj48
ZGl2PiZndDsgaXQgd291bGQgYmUgYXdlc29tZSBpZiBpbiBJUHl0aG9uL0p1cHl0ZXIgaG92ZXJp
bmcgb3ZlciBhbiBlbGVtZW50IGEgcG9wdXAgd291bGQgc2hvdyB0aGUgaW5kZXg8L2Rpdj48ZGl2
Pjxicj48L2Rpdj48ZGl2Pkl0Li4uIGFscmVhZHkgZG9lcz88L2Rpdj48ZGl2Pjxicj48L2Rpdj48
ZGl2PiZndDsmbmJzcDsgdG8gc2hvdyBMIFIgVSBQIG9yIGNvbWJpbmF0aW9uIG9mIHRoZXNlIHBs
dXMgc29tZSBudW1iZXJzPGJyPjxicj5JIGRvbid0IGtub3cgd2hhdCB5b3UgbWVhbiBieSB0aGlz
LjwvZGl2PjxkaXY+PGJyPjwvZGl2PjxkaXY+RXJpYzxicj48YnI+PGRpdiBjbGFzcz0iZ21haWxf
cXVvdGUiPjxkaXYgZGlyPSJsdHIiPk9uIFR1ZSwgNiBOb3YgMjAxOCBhdCAwMDo1NiBGb2FkIFNv
am9vZGkgRmFyaW1hbmkgJmx0O2Yucy5mYXJpbWFuaUBnbWFpbC5jb20mZ3Q7IHdyb3RlOjxicj48
L2Rpdj48YmxvY2txdW90ZSBjbGFzcz0iZ21haWxfcXVvdGUiIHN0eWxlPSJtYXJnaW46MCAwIDAg
LjhleDtib3JkZXItbGVmdDoxcHggI2NjYyBzb2xpZDtwYWRkaW5nLWxlZnQ6MWV4OyI+PGRpdiBk
aXI9Imx0ciI+PGRpdiBkaXI9Imx0ciI+PGRpdiBkaXI9Imx0ciI+V293LCB0aGlzIGlzIGF3ZXNv
bWUuPGRpdj5Tb21lIHBvaW50cyB0aG91Z2g6PC9kaXY+PGRpdj48dWw+PGxpPm5vdCBldmVyeWJv
ZHkgdXNlcyBJUHl0aG9uL0p1cHl0ZXIgaGF2aW5nIHRoZSBmdW5jdGlvbmFsaXR5IGZvciBjb252
ZW50aW9uYWwgY29uc29scyB3b3VsZCBhbHNvIGhlbHAuIHNvbWV0aGluZyBsaWtlIFN5cHkncyZu
YnNwO2luaXRfcHJpbnRpbmcvaW5pdF88d2JyPnNlc3Npb24gd2hpY2ggc21hcnRseSBjaG9vc2Vz
IHRoZSByaWdodCByZXByZXNlbnRhdGlvbiBjb25zaWRlcmluZyB0aGUgdGVybWluYWwuPC9saT48
bGk+SSBkb24ndCB0aGluayBwdXR0aW5nIGV2ZXJ5dGhpbmcgaW4gYm94ZXMgaXMgaGVscGluZy4g
aXQgaXMgY29uZnVzaW5nLiBJIHdvdWxkIHJhdGhlciBoYXZpbmcgaG9yaXpvbnRhbCBhbmQgdmVy
dGljYWwgc3F1YXJlIGJyYWNrZXRzIHJlcHJlc2VudCBlYWNoIG5lc3RlZCBhcnJheTwvbGk+PGxp
Pml0IHdvdWxkIGJlIGF3ZXNvbWUgaWYgaW4gSVB5dGhvbi9KdXB5dGVyIGhvdmVyaW5nIG92ZXIg
YW4gZWxlbWVudCBhIHBvcHVwIHdvdWxkIHNob3cgdGhlIGluZGV4PC9saT48bGk+b25lIGNvdWxk
IHJlYWQgdGhlIHdpZHRoIGFuZCBoZWlnaHQgb2YgdGhlIHRlcm1pbmFsIGFuZCBvdGhlciBvcHRp
b25zIEkgbWVudGlvbmVkIGluIHJlcGx5IE1hcmsgdG8gc2hvdyBMIFIgVSBQIG9yIGNvbWJpbmF0
aW9uIG9mIHRoZXNlIHBsdXMgc29tZSBudW1iZXJzIChzaW1pbGFyIHRvIFBhbmRhcyAuaGVhZCAu
dGFpbCkgbWV0aG9kcyBhbmQgdGhlbiBzaG93IHRoZSByZXN0IGJ5IHVuaWNvZCAzZG90PC9saT48
L3VsPjxkaXY+UC5TLiBJIGhhZCBubyBpZGVhIG91ciB1bml2ZXJzaXR5IE1pY3Jvc29mdCBzZXJ2
aWNlcyBhbHNvIG9mZmVycyBBenVyZSBOb3RlYm9va3MgYXdlc29tZSA6UDwvZGl2PjwvZGl2Pjxk
aXY+PGJyPjwvZGl2PjxkaXY+Ri48L2Rpdj48L2Rpdj48L2Rpdj48L2Rpdj48YnI+PGRpdiBjbGFz
cz0iZ21haWxfcXVvdGUiPjxkaXYgZGlyPSJsdHIiPk9uIFR1ZSwgTm92IDYsIDIwMTggYXQgOTo0
NSBBTSBFcmljIFdpZXNlciAmbHQ7PGEgaHJlZj0ibWFpbHRvOndpZXNlci5lcmljJTJCbnVtcHlA
Z21haWwuY29tIiB0YXJnZXQ9Il9ibGFuayI+d2llc2VyLmVyaWMrbnVtcHlAZ21haWwuY29tPC9h
PiZndDsgd3JvdGU6PGJyPjwvZGl2PjxibG9ja3F1b3RlIGNsYXNzPSJnbWFpbF9xdW90ZSIgc3R5
bGU9Im1hcmdpbjowIDAgMCAuOGV4O2JvcmRlci1sZWZ0OjFweCAjY2NjIHNvbGlkO3BhZGRpbmct
bGVmdDoxZXgiPjxkaXYgZGlyPSJsdHIiPkhlcmUncyBob3cgdGhhdCBjb3VsZCBsb29rPGRpdj48
YnI+PGRpdj48YSBocmVmPSJodHRwczovL251bXB5aW50ZWdyYXRpb24tZXJpY3dpZXNlci5ub3Rl
Ym9va3MuYXp1cmUuY29tL2ovbm90ZWJvb2tzL3BwcmludC5pcHluYiIgdGFyZ2V0PSJfYmxhbmsi
IGRhdGEtc2FmZXJlZGlyZWN0dXJsPSJodHRwczovL3d3dy5nb29nbGUuY29tL3VybD9xPWh0dHBz
Oi8vbnVtcHlpbnRlZ3JhdGlvbi1lcmljd2llc2VyLm5vdGVib29rcy5henVyZS5jb20vai9ub3Rl
Ym9va3MvcHByaW50LmlweW5iJmFtcDtzb3VyY2U9Z21haWwmYW1wO3VzdD0xNTQxNjQ1NDA4NjM0
MDAwJmFtcDt1c2c9QUZRakNOSFY5VTlhSFd4aEE3QzU4cEYtMmFUWlFyUzBCQSI+aHR0cHM6Ly9u
dW1weWludGVncmF0aW9uLTx3YnI+ZXJpY3dpZXNlci5ub3RlYm9va3MuYXp1cmUuPHdicj5jb20v
ai9ub3RlYm9va3MvcHByaW50LmlweW5iPC9hPjxicj48L2Rpdj48ZGl2Pjxicj48L2Rpdj48ZGl2
PkZlZWwgZnJlZSB0byBwbGF5IGFyb3VuZCBhbmQgc2VlIGlmIHlvdSBjYW4gcHJvZHVjZSBzb21l
dGhpbmcgbW9yZSB1c2VmdWw8L2Rpdj48ZGl2Pjxicj48L2Rpdj48ZGl2Pjxicj48L2Rpdj48L2Rp
dj48L2Rpdj48YnI+PGRpdiBjbGFzcz0iZ21haWxfcXVvdGUiPjxkaXYgZGlyPSJsdHIiPk9uIE1v
biwgNSBOb3YgMjAxOCBhdCAyMzoyOCBGb2FkIFNvam9vZGkgRmFyaW1hbmkgJmx0OzxhIGhyZWY9
Im1haWx0bzpmLnMuZmFyaW1hbmlAZ21haWwuY29tIiB0YXJnZXQ9Il9ibGFuayI+Zi5zLmZhcmlt
YW5pQGdtYWlsLmNvbTwvYT4mZ3Q7IHdyb3RlOjxicj48L2Rpdj48YmxvY2txdW90ZSBjbGFzcz0i
Z21haWxfcXVvdGUiIHN0eWxlPSJtYXJnaW46MCAwIDAgLjhleDtib3JkZXItbGVmdDoxcHggI2Nj
YyBzb2xpZDtwYWRkaW5nLWxlZnQ6MWV4Ij48ZGl2IGRpcj0ibHRyIj48ZGl2Pkl0IGlzIG5vdCBo
aWdoa2luZyBpZiBJIGFza2VkIGZvciBpdCA6KSk8L2Rpdj48ZGl2PmZvciBJUHl0aG9uL0p1cHl0
ZXIgdXNpbmcgTWFya2Rvd24vTGFUZVggd291bGQgYmUgYXdlc29tZSZuYnNwOzwvZGl2PjxkaXY+
b3IgZXZlbiBiZXR0ZXIgdXNpbmcgSFRNTCB0byBhZGQgc2xpZGVycyBqdXN0IGxpa2UgUGFuZGFz
Li4uPC9kaXY+PC9kaXY+PGRpdiBkaXI9Imx0ciI+PGRpdj48YnI+PC9kaXY+PGRpdj5GLjwvZGl2
PjwvZGl2Pjxicj48ZGl2IGNsYXNzPSJnbWFpbF9xdW90ZSI+PGRpdiBkaXI9Imx0ciI+T24gVHVl
LCBOb3YgNiwgMjAxOCBhdCA2OjUxIEFNIEVyaWMgV2llc2VyICZsdDs8YSBocmVmPSJtYWlsdG86
d2llc2VyLmVyaWMlMkJudW1weUBnbWFpbC5jb20iIHRhcmdldD0iX2JsYW5rIj53aWVzZXIuZXJp
YytudW1weUBnbWFpbC5jb208L2E+Jmd0OyB3cm90ZTo8YnI+PC9kaXY+PGJsb2NrcXVvdGUgY2xh
c3M9ImdtYWlsX3F1b3RlIiBzdHlsZT0ibWFyZ2luOjAgMCAwIC44ZXg7Ym9yZGVyLWxlZnQ6MXB4
ICNjY2Mgc29saWQ7cGFkZGluZy1sZWZ0OjFleCI+PGRpdiBkaXI9Imx0ciI+SGlqYWNraW5nIHRo
aXMgdGhyZWFkIHdoaWxlIG9uIHRoZSB0b3BpYyBvZiBwcHJpbnQgLSB3ZSBtaWdodCB3YW50IHRv
IGxvb2sgaW50byBhIHRhYmxlLWJhc2VkIGBfaHRtbF9yZXByX2Agb3IgYF9sYXRleF9yZXByX2Ag
Zm9yIHVzZSBpbiBpcHl0aG9uIC0gd2hlcmUgd2UgY2FuIHByaW50IHRoZSBmdWxsIGFycmF5IGFu
ZCBsZXQgc2Nyb2xsYmFycyByZXBsYWNlIGVsbGlwc2VzLjxkaXY+PGJyPjwvZGl2PjxkaXY+RXJp
YzwvZGl2PjwvZGl2Pjxicj48ZGl2IGNsYXNzPSJnbWFpbF9xdW90ZSI+PGRpdiBkaXI9Imx0ciI+
T24gTW9uLCA1IE5vdiAyMDE4IGF0IDIxOjExIE1hcmsgSGFyZm91Y2hlICZsdDs8YSBocmVmPSJt
YWlsdG86bWFyay5oYXJmb3VjaGVAZ21haWwuY29tIiB0YXJnZXQ9Il9ibGFuayI+bWFyay5oYXJm
b3VjaGVAZ21haWwuY29tPC9hPiZndDsgd3JvdGU6PGJyPjwvZGl2PjxibG9ja3F1b3RlIGNsYXNz
PSJnbWFpbF9xdW90ZSIgc3R5bGU9Im1hcmdpbjowIDAgMCAuOGV4O2JvcmRlci1sZWZ0OjFweCAj
Y2NjIHNvbGlkO3BhZGRpbmctbGVmdDoxZXgiPjxkaXYgZGlyPSJsdHIiPjxkaXYgY2xhc3M9Im1f
NjQzODE5MDUxNzQyMTM3MDEzMm1fNzMzMzI0NTQ0MDUxNzQ2NzkzNm1fLTE4NTMwMjA1Nzg1NzUx
ODUzNG1fODg0ODkwNzA1ODU3NDE1MjYxNW1fNTEyNzI2OTM1MjExMzYzODgxM21hcmtkb3duLWhl
cmUtd3JhcHBlciI+PHAgc3R5bGU9Im1hcmdpbjowcHggMHB4IDEuMmVtIWltcG9ydGFudCI+Rm9h
ZCwgPC9wPgo8cCBzdHlsZT0ibWFyZ2luOjBweCAwcHggMS4yZW0haW1wb3J0YW50Ij5WaXN1YWxp
emluZyBkYXRhIGlzIGRlZmluaXRlbHkgYSBjb21wbGV4IGZpZWxkLiBJIGRlZmluaXRlbHkgZmVl
bCB5b3VyIHBhaW4uPGJyPlByaW50aW5nIHlvdXIgZGF0YSBpcyBidXQgb25lIHdheSBvZiB2aXN1
YWxpemluZyBpdCwgYW5kIHByb2JhYmx5IG9ubHkgdXNlZnVsIGZvciB2ZXJ5IHNtYWxsIGFuZCBj
b25zdHJhaW5lZCBkYXRhc2V0cy48YnI+SGF2ZSB5b3UgbG9va2VkIGludG8gPGEgaHJlZj0iaHR0
cHM6Ly9kb2NzLnNjaXB5Lm9yZy9kb2MvbnVtcHktMS4xNS4xL3JlZmVyZW5jZS9nZW5lcmF0ZWQv
bnVtcHkuc2V0X3ByaW50b3B0aW9ucy5odG1sIiB0YXJnZXQ9Il9ibGFuayIgZGF0YS1zYWZlcmVk
aXJlY3R1cmw9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vdXJsP3E9aHR0cHM6Ly9kb2NzLnNjaXB5
Lm9yZy9kb2MvbnVtcHktMS4xNS4xL3JlZmVyZW5jZS9nZW5lcmF0ZWQvbnVtcHkuc2V0X3ByaW50
b3B0aW9ucy5odG1sJmFtcDtzb3VyY2U9Z21haWwmYW1wO3VzdD0xNTQxNjQ1NDA4NjM0MDAwJmFt
cDt1c2c9QUZRakNORVpfVkY3OG44eEFqZWZoZTQ4NGZORGRLbDZDdyI+PGNvZGUgc3R5bGU9ImZv
bnQtc2l6ZTowLjg1ZW07Zm9udC1mYW1pbHk6Q29uc29sYXMsSW5jb25zb2xhdGEsQ291cmllcixt
b25vc3BhY2U7bWFyZ2luOjBweCAwLjE1ZW07cGFkZGluZzowcHggMC4zZW07d2hpdGUtc3BhY2U6
cHJlLXdyYXA7Ym9yZGVyOjFweCBzb2xpZCByZ2IoMjM0LDIzNCwyMzQpO2JhY2tncm91bmQtY29s
b3I6cmdiKDI0OCwyNDgsMjQ4KTtib3JkZXItcmFkaXVzOjNweDtkaXNwbGF5OmlubGluZSI+c2V0
X3ByaW50b3B0aW9uczwvY29kZT48L2E+IHRvIHNlZSBob3cgbnVtcHnigJlzIGV4aXN0aW5nIGNh
cGFiaWxpdGllcyBtaWdodCBoZWxwIHlvdSB3aXRoIHlvdXIgdmlzdWFsaXphdGlvbj88L3A+Cjxw
IHN0eWxlPSJtYXJnaW46MHB4IDBweCAxLjJlbSFpbXBvcnRhbnQiPlRoZSBjb2RlIHlvdSBzaG93
ZWQgc2VlbXMgcXVpdGUgZ29vZC4gSSB3b3VsZG7igJl0IHdvcnJ5IGFib3V0IHBlcmZvcm1hbmNl
IHdoZW4gaXQgY29tZXMgdG8gZnVuY3Rpb25zIHRoYXQgd2lsbCBzZWxkb20gYmUgY2FsbGVkIGlu
IHRpZ2h0IGxvb3BzLjxicj5BcyB5b3XigJlsbCBsZWFybiBtb3JlIGFib3V0IHB5dGhvbiBhbmQg
bnVtcHksIHlvdeKAmWxsIGtlZXAgZXhwYW5kaW5nIGl0IHRvIGluY2x1ZGUgbW9yZSB1c2UgY2Fz
ZXMuPGJyPkZvciBtYW55IG9mIG15IHByb2plY3RzLCBJIGNyZWF0ZSBzbWFsbCBzdWJtb2R1bGVz
IGZvciB2aXN1YWxpemF0aW9uIHRhaWxvcmVkIHRvIHRoZSBzcGVjaWZpYyBuZWVkcyBvZiB0aGUg
cGFydGljdWxhciBwcm9qZWN0Ljxicj5J4oCZbGwgdHJ5IHRvIGluY29ycG9yYXRlIHlvdXIgZnVu
Y3Rpb25zIGFuZCBzZWUgaG93IEkgdXNlIHRoZW0uPC9wPgo8cCBzdHlsZT0ibWFyZ2luOjBweCAw
cHggMS4yZW0haW1wb3J0YW50Ij5Zb3VyIG9yaWdpbmFsIHBvc3Qgc2VlbXMgdG8gaGF2ZSBzb21l
IGNvbmZ1c2lvbiBhYm91dCBDIFN0eWxlIHZzIEYgU3R5bGUgb3JkZXJpbmcuIEkgaG9wZSB0aGF0
IGhhcyBiZWVuIHJlc29sdmVkLjxicj5UaGVyZSBpcyBhbHNvIGEgbG90IG9mIGdvb2QgZG9jdW1l
bnRhdGlvbjxicj48YSBocmVmPSJodHRwczovL2RvY3Muc2NpcHkub3JnL2RvYy9udW1weS91c2Vy
L251bXB5LWZvci1tYXRsYWItdXNlcnMuaHRtbCNudW1weS1mb3ItbWF0bGFiLXVzZXJzLW5vdGVz
IiB0YXJnZXQ9Il9ibGFuayIgZGF0YS1zYWZlcmVkaXJlY3R1cmw9Imh0dHBzOi8vd3d3Lmdvb2ds
ZS5jb20vdXJsP3E9aHR0cHM6Ly9kb2NzLnNjaXB5Lm9yZy9kb2MvbnVtcHkvdXNlci9udW1weS1m
b3ItbWF0bGFiLXVzZXJzLmh0bWwlMjNudW1weS1mb3ItbWF0bGFiLXVzZXJzLW5vdGVzJmFtcDtz
b3VyY2U9Z21haWwmYW1wO3VzdD0xNTQxNjQ1NDA4NjM0MDAwJmFtcDt1c2c9QUZRakNOR1l2UVNE
Wmk0WGh5LVhUaV9QWkhIbWtWako0USI+aHR0cHM6Ly9kb2NzLnNjaXB5Lm9yZy9kb2MvPHdicj5u
dW1weS91c2VyL251bXB5LWZvci1tYXRsYWItPHdicj51c2Vycy5odG1sI251bXB5LWZvci1tYXRs
YWItPHdicj51c2Vycy1ub3RlczwvYT48YnI+YWJvdXQgdHJhbnNpdGlvbmluZyBmcm9tIG1hdGxh
Yi48L3A+PC9kaXY+PC9kaXY+PGRpdiBkaXI9Imx0ciI+PGRpdiBjbGFzcz0ibV82NDM4MTkwNTE3
NDIxMzcwMTMybV83MzMzMjQ1NDQwNTE3NDY3OTM2bV8tMTg1MzAyMDU3ODU3NTE4NTM0bV84ODQ4
OTA3MDU4NTc0MTUyNjE1bV81MTI3MjY5MzUyMTEzNjM4ODEzbWFya2Rvd24taGVyZS13cmFwcGVy
Ij4KPHAgc3R5bGU9Im1hcmdpbjowcHggMHB4IDEuMmVtIWltcG9ydGFudCI+TWFyazwvcD4KPGRp
diB0aXRsZT0iTURIOlBHUnBkaUJrYVhJOUlteDBjaUkrUEdScGRpQmthWEk5SW14MGNpSStQR1Jw
ZGo1R2IyRmtMQ1p1WW5Od096eGljajQ4TDJScGRqNDgKWkdsMlBqeGljajQ4TDJScGRqNDhaR2wy
UGxacGMzVmhiR2w2YVc1bklHUmhkR0VnYVhNZ1pHVm1hVzVwZEdWc2VTQmhJR052YlhCcwpaWGdn
Wm1sbGJHUXVJRWtnWkdWbWFXNXBkR1ZzZVNCbVpXVnNJSGx2ZFhJZ2NHRnBiaTQ4TDJScGRqNDha
R2wyUGxCeWFXNTBhVzVuCklIbHZkWElnWkdGMFlTQnBjeUJpZFhRZ2IyNWxJSGRoZVNCdlppQjJh
WE4xWVd4cGVtbHVaeUJwZEN3Z1lXNWtJSEJ5YjJKaFlteDUKSUc5dWJIa2dkWE5sWm5Wc0lHWnZj
aUIyWlhKNUlITnRZV3hzSUdGdVpDQmpiMjV6ZEhKaGFXNWxaQ0JrWVhSaGMyVjBjeTQ4TDJScApk
ajQ4WkdsMlBraGhkbVVnZVc5MUlHeHZiMnRsWkNCcGJuUnZJRnRnYzJWMFgzQnlhVzUwYjNCMGFX
OXVjMkJkS0R4aElHaHlaV1k5CkltaDBkSEJ6T2k4dlpHOWpjeTV6WTJsd2VTNXZjbWN2Wkc5akwy
NTFiWEI1TFRFdU1UVXVNUzl5WldabGNtVnVZMlV2WjJWdVpYSmgKZEdWa0wyNTFiWEI1TG5ObGRG
OXdjbWx1ZEc5d2RHbHZibk11YUhSdGJDSWdkR0Z5WjJWMFBTSmZZbXhoYm1zaUlHUmhkR0V0YzJG
bQpaWEpsWkdseVpXTjBkWEpzUFNKb2RIUndjem92TDNkM2R5NW5iMjluYkdVdVkyOXRMM1Z5YkQ5
eFBXaDBkSEJ6T2k4dlpHOWpjeTV6ClkybHdlUzV2Y21jdlpHOWpMMjUxYlhCNUxURXVNVFV1TVM5
eVpXWmxjbVZ1WTJVdloyVnVaWEpoZEdWa0wyNTFiWEI1TG5ObGRGOXcKY21sdWRHOXdkR2x2Ym5N
dWFIUnRiQ1poYlhBN2MyOTFjbU5sUFdkdFlXbHNKbUZ0Y0R0MWMzUTlNVFUwTVRVMk5qWTBNall5
TWpBdwpNQ1poYlhBN2RYTm5QVUZHVVdwRFRrVmxjVm90VUZSWWVIcHVZV3BPWTJkdlYzbE9RbTh4
YzJ4ME1IY2lQbWgwZEhCek9pOHZQSGRpCmNqNWtiMk56TG5OamFYQjVMbTl5Wnk5a2IyTXZiblZ0
Y0hrdE1TNHhOUzQ4ZDJKeVBqRXZjbVZtWlhKbGJtTmxMMmRsYm1WeVlYUmwKWkM5dWRXMXdlUzQ4
ZDJKeVBuTmxkRjl3Y21sdWRHOXdkR2x2Ym5NdWFIUnRiRHd2WVQ0cElIUnZJSE5sWlNCb2IzY2di
blZ0Y0hrbgpjeUJsZUdsemRHbHVaeUJqWVhCaFltbHNhWFJwWlhNZ2JXbG5hSFFnYUdWc2NDQjVi
M1VnZDJsMGFDQjViM1Z5SUhacGMzVmhiR2w2CllYUnBiMjQvUEdKeVBqd3ZaR2wyUGp4a2FYWStQ
R0p5UGp3dlpHbDJQanhrYVhZK1ZHaGxJR052WkdVZ2VXOTFJSE5vYjNkbFpDQnoKWldWdGN5Qnhk
V2wwWlNCbmIyOWtMaUJKSUhkdmRXeGtiaWQwSUhkdmNuSjVJR0ZpYjNWMElIQmxjbVp2Y20xaGJt
TmxJSGRvWlc0ZwphWFFnWTI5dFpYTWdkRzhnWm5WdVkzUnBiMjV6SUhSb1lYUWdkMmxzYkNCelpX
eGtiMjBnWW1VZ1kyRnNiR1ZrSUdsdUlIUnBaMmgwCklHeHZiM0J6TGp3dlpHbDJQanhrYVhZK1FY
TWdlVzkxSjJ4c0lHeGxZWEp1SUcxdmNtVWdZV0p2ZFhRZ2NIbDBhRzl1SUdGdVpDQnUKZFcxd2VT
d2dlVzkxSjJ4c0lHdGxaWEFnWlhod1lXNWthVzVuSUdsMElIUnZJR2x1WTJ4MVpHVWdiVzl5WlNC
MWMyVWdZMkZ6WlhNdQpQQzlrYVhZK1BHUnBkajVHYjNJZ2JXRnVlU0J2WmlCdGVTQndjbTlxWldO
MGN5d2dTU0JqY21WaGRHVWdjMjFoYkd3Z2MzVmliVzlrCmRXeGxjeUJtYjNJZ2RtbHpkV0ZzYVhw
aGRHbHZiaUIwWVdsc2IzSmxaQ0IwYnlCMGFHVWdjM0JsWTJsbWFXTWdibVZsWkhNZ2IyWWcKZEdo
bElIQmhjblJwWTNWc1lYSWdjSEp2YW1WamRDNDhMMlJwZGo0OFpHbDJQa2tuYkd3Z2RISjVJSFJ2
SUdsdVkyOXljRzl5WVhSbApJSGx2ZFhJZ1puVnVZM1JwYjI1eklHRnVaQ0J6WldVZ2FHOTNJRWtn
ZFhObElIUm9aVzB1UEdKeVBqd3ZaR2wyUGp4a2FYWStQR0p5ClBqd3ZaR2wyUGp4a2FYWStXVzkx
Y2lCdmNtbG5hVzVoYkNCd2IzTjBJSE5sWlcxeklIUnZJR2hoZG1VZ2MyOXRaU0JqYjI1bWRYTnAK
YjI0Z1lXSnZkWFFnUXlCVGRIbHNaU0IyY3lCR0lGTjBlV3hsSUc5eVpHVnlhVzVuTGlCSklHaHZj
R1VnZEdoaGRDQm9ZWE1nWW1WbApiaUJ5WlhOdmJIWmxaQzRnUEdKeVBqd3ZaR2wyUGp4a2FYWStW
R2hsY21VZ2FYTWdZV3h6YnlCaElHeHZkQ0J2WmlCbmIyOWtJR1J2ClkzVnRaVzUwWVhScGIyNDhM
MlJwZGo0OFpHbDJQanhoSUdoeVpXWTlJbWgwZEhCek9pOHZaRzlqY3k1elkybHdlUzV2Y21jdlpH
OWoKTDI1MWJYQjVMM1Z6WlhJdmJuVnRjSGt0Wm05eUxXMWhkR3hoWWkxMWMyVnljeTVvZEcxc0ky
NTFiWEI1TFdadmNpMXRZWFJzWVdJdApkWE5sY25NdGJtOTBaWE1pSUhSaGNtZGxkRDBpWDJKc1lX
NXJJaUJrWVhSaExYTmhabVZ5WldScGNtVmpkSFZ5YkQwaWFIUjBjSE02Ckx5OTNkM2N1WjI5dloy
eGxMbU52YlM5MWNtdy9jVDFvZEhSd2N6b3ZMMlJ2WTNNdWMyTnBjSGt1YjNKbkwyUnZZeTl1ZFcx
d2VTOTEKYzJWeUwyNTFiWEI1TFdadmNpMXRZWFJzWVdJdGRYTmxjbk11YUhSdGJDVXlNMjUxYlhC
NUxXWnZjaTF0WVhSc1lXSXRkWE5sY25NdApibTkwWlhNbVlXMXdPM052ZFhKalpUMW5iV0ZwYkNa
aGJYQTdkWE4wUFRFMU5ERTFOalkyTkRJMk1qSXdNREFtWVcxd08zVnpaejFCClJsRnFRMDVIVEZW
dlRqQlZaVU16YTFsNVQzbzNUbGhxWVVwWmNYRldaMGhuSWo1b2RIUndjem92TDJSdlkzTXVjMk5w
Y0hrdWIzSm4KTDJSdll5ODhkMkp5UG01MWJYQjVMM1Z6WlhJdmJuVnRjSGt0Wm05eUxXMWhkR3ho
WWkwOGQySnlQblZ6WlhKekxtaDBiV3dqYm5WdApjSGt0Wm05eUxXMWhkR3hoWWkwOGQySnlQblZ6
WlhKekxXNXZkR1Z6UEM5aFBqd3ZaR2wyUGp4a2FYWStZV0p2ZFhRZ2RISmhibk5wCmRHbHZibWx1
WnlCbWNtOXRJRzFoZEd4aFlpNDhMMlJwZGo0OFpHbDJQanhpY2o0OEwyUnBkajQ4WkdsMlBrMWhj
bXM4WW5JK1BDOWsKYVhZK1BHUnBkajQ4WW5JK1BDOWthWFkrUEM5a2FYWStQQzlrYVhZKyIgc3R5
bGU9ImhlaWdodDowO3dpZHRoOjA7bWF4LWhlaWdodDowO21heC13aWR0aDowO292ZXJmbG93Omhp
ZGRlbjtmb250LXNpemU6MGVtO3BhZGRpbmc6MDttYXJnaW46MCI+PC9kaXY+PC9kaXY+PC9kaXY+
PGJyPjxkaXYgY2xhc3M9ImdtYWlsX3F1b3RlIj48ZGl2IGRpcj0ibHRyIj5PbiBNb24sIE5vdiA1
LCAyMDE4IGF0IDQ6NDYgUE0gRm9hZCBTb2pvb2RpIEZhcmltYW5pICZsdDs8YSBocmVmPSJtYWls
dG86Zi5zLmZhcmltYW5pQGdtYWlsLmNvbSIgdGFyZ2V0PSJfYmxhbmsiPmYucy5mYXJpbWFuaUBn
bWFpbC5jb208L2E+Jmd0OyB3cm90ZTo8YnI+PC9kaXY+PGJsb2NrcXVvdGUgY2xhc3M9ImdtYWls
X3F1b3RlIiBzdHlsZT0ibWFyZ2luOjAgMCAwIC44ZXg7Ym9yZGVyLWxlZnQ6MXB4ICNjY2Mgc29s
aWQ7cGFkZGluZy1sZWZ0OjFleCI+PGRpdiBkaXI9Imx0ciI+PGRpdj5IZWxsbyBldmVyeW9uZSw8
L2Rpdj48ZGl2Pjxicj48L2Rpdj48ZGl2PkZvbGxvd2luZyA8YSBocmVmPSJodHRwczovL3N0YWNr
b3ZlcmZsb3cuY29tL3EvNTMxMjYzMDUvNDk5OTk5MSIgdGFyZ2V0PSJfYmxhbmsiIGRhdGEtc2Fm
ZXJlZGlyZWN0dXJsPSJodHRwczovL3d3dy5nb29nbGUuY29tL3VybD9xPWh0dHBzOi8vc3RhY2tv
dmVyZmxvdy5jb20vcS81MzEyNjMwNS80OTk5OTkxJmFtcDtzb3VyY2U9Z21haWwmYW1wO3VzdD0x
NTQxNjQ1NDA4NjM0MDAwJmFtcDt1c2c9QUZRakNORnRkNTRiTnUtczllMUt4cDVXTk91aThhTDRG
ZyI+dGhpcyBxdWVzdGlvbjwvYT4sIEknbSBjb252aW5jZWQgdGhhdCBudW1weSBuZGFycmF5cyBh
cmUgbm90IE1BVExBQi9tYXRoZW1hdGljYWwgbXVsdGlkaW1lbnRpb25hbCBtYXRyaWNlcyBhbmQg
SSBzaG91bGQgc3RvcCBleHBlY3RpbmcgdGhlbSB0byBiZS4gSG93ZXZlciBJIHN0aWxsIHRoaW5r
IGl0IHdvdWxkIGhhdmUgYSBsb3Qgb2YgYmVuZWZpdCB0byBoYXZlIGEgZnVuY3Rpb24gbGlrZSBz
eW1weSdzIHBwcmludCB0byBwcmV0dHkgcHJpbnQuIHNvbWV0aGluZyBsaWtlIHBhbmRhcyAuaGVh
ZCBhbmQgLnRhaWwgbWV0aG9kIHBsdXMmbmJzcDsgLmxlZnQgLnJpZ2h0IC5VcExlZnQgLlVwUmln
aHQgLkRvd25MZWZ0IC5Eb3duUmlnaHQgbWV0aG9kcy4gd2hlbiBub3RoaW5nIG1lbnRpb25lZCBp
dCB3b3VsZCBzaG93IDQgY29ybmVycyBhbmQgcHV0IGRvdHMgaW4gdGhlIG1pZGRsZSBpZiB0aGUg
YXJyYXkgaXMgdG8gYmlnIGZvciB0aGUgdGVybWluYWwuJm5ic3A7PC9kaXY+PGRpdj48YnI+PC9k
aXY+PGRpdj5CZXN0LDwvZGl2PjxkaXY+Rm9hZDwvZGl2PjwvZGl2PgpfX19fX19fX19fX19fX19f
X19fX19fX19fX19fX188d2JyPl9fX19fX19fX19fX19fX19fPGJyPgpOdW1QeS1EaXNjdXNzaW9u
IG1haWxpbmcgbGlzdDxicj4KPGEgaHJlZj0ibWFpbHRvOk51bVB5LURpc2N1c3Npb25AcHl0aG9u
Lm9yZyIgdGFyZ2V0PSJfYmxhbmsiPk51bVB5LURpc2N1c3Npb25AcHl0aG9uLm9yZzwvYT48YnI+
CjxhIGhyZWY9Imh0dHBzOi8vbWFpbC5weXRob24ub3JnL21haWxtYW4vbGlzdGluZm8vbnVtcHkt
ZGlzY3Vzc2lvbiIgcmVsPSJub3JlZmVycmVyIiB0YXJnZXQ9Il9ibGFuayIgZGF0YS1zYWZlcmVk
aXJlY3R1cmw9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vdXJsP3E9aHR0cHM6Ly9tYWlsLnB5dGhv
bi5vcmcvbWFpbG1hbi9saXN0aW5mby9udW1weS1kaXNjdXNzaW9uJmFtcDtzb3VyY2U9Z21haWwm
YW1wO3VzdD0xNTQxNjQ1NDA4NjM0MDAwJmFtcDt1c2c9QUZRakNORUFOOTRBY19HMjBTSGF6TjhU
LUlVUnFGcHpfQSI+aHR0cHM6Ly9tYWlsLnB5dGhvbi5vcmcvPHdicj5tYWlsbWFuL2xpc3RpbmZv
L251bXB5LTx3YnI+ZGlzY3Vzc2lvbjwvYT48YnI+CjwvYmxvY2txdW90ZT48L2Rpdj4KX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fPHdicj5fX19fX19fX19fX19fX19fXzxicj4KTnVtUHkt
RGlzY3Vzc2lvbiBtYWlsaW5nIGxpc3Q8YnI+CjxhIGhyZWY9Im1haWx0bzpOdW1QeS1EaXNjdXNz
aW9uQHB5dGhvbi5vcmciIHRhcmdldD0iX2JsYW5rIj5OdW1QeS1EaXNjdXNzaW9uQHB5dGhvbi5v
cmc8L2E+PGJyPgo8YSBocmVmPSJodHRwczovL21haWwucHl0aG9uLm9yZy9tYWlsbWFuL2xpc3Rp
bmZvL251bXB5LWRpc2N1c3Npb24iIHJlbD0ibm9yZWZlcnJlciIgdGFyZ2V0PSJfYmxhbmsiIGRh
dGEtc2FmZXJlZGlyZWN0dXJsPSJodHRwczovL3d3dy5nb29nbGUuY29tL3VybD9xPWh0dHBzOi8v
bWFpbC5weXRob24ub3JnL21haWxtYW4vbGlzdGluZm8vbnVtcHktZGlzY3Vzc2lvbiZhbXA7c291
cmNlPWdtYWlsJmFtcDt1c3Q9MTU0MTY0NTQwODYzNDAwMCZhbXA7dXNnPUFGUWpDTkVBTjk0QWNf
RzIwU0hhek44VC1JVVJxRnB6X0EiPmh0dHBzOi8vbWFpbC5weXRob24ub3JnLzx3YnI+bWFpbG1h
bi9saXN0aW5mby9udW1weS08d2JyPmRpc2N1c3Npb248L2E+PGJyPgo8L2Jsb2NrcXVvdGU+PC9k
aXY+Cl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fXzx3YnI+X19fX19fX19fX19fX19fX188
YnI+Ck51bVB5LURpc2N1c3Npb24gbWFpbGluZyBsaXN0PGJyPgo8YSBocmVmPSJtYWlsdG86TnVt
UHktRGlzY3Vzc2lvbkBweXRob24ub3JnIiB0YXJnZXQ9Il9ibGFuayI+TnVtUHktRGlzY3Vzc2lv
bkBweXRob24ub3JnPC9hPjxicj4KPGEgaHJlZj0iaHR0cHM6Ly9tYWlsLnB5dGhvbi5vcmcvbWFp
bG1hbi9saXN0aW5mby9udW1weS1kaXNjdXNzaW9uIiByZWw9Im5vcmVmZXJyZXIiIHRhcmdldD0i
X2JsYW5rIiBkYXRhLXNhZmVyZWRpcmVjdHVybD0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS91cmw/
cT1odHRwczovL21haWwucHl0aG9uLm9yZy9tYWlsbWFuL2xpc3RpbmZvL251bXB5LWRpc2N1c3Np
b24mYW1wO3NvdXJjZT1nbWFpbCZhbXA7dXN0PTE1NDE2NDU0MDg2MzQwMDAmYW1wO3VzZz1BRlFq
Q05FQU45NEFjX0cyMFNIYXpOOFQtSVVScUZwel9BIj5odHRwczovL21haWwucHl0aG9uLm9yZy88
d2JyPm1haWxtYW4vbGlzdGluZm8vbnVtcHktPHdicj5kaXNjdXNzaW9uPC9hPjxicj4KPC9ibG9j
a3F1b3RlPjwvZGl2PgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX188d2JyPl9fX19fX19f
X19fX19fX19fPGJyPgpOdW1QeS1EaXNjdXNzaW9uIG1haWxpbmcgbGlzdDxicj4KPGEgaHJlZj0i
bWFpbHRvOk51bVB5LURpc2N1c3Npb25AcHl0aG9uLm9yZyIgdGFyZ2V0PSJfYmxhbmsiPk51bVB5
LURpc2N1c3Npb25AcHl0aG9uLm9yZzwvYT48YnI+CjxhIGhyZWY9Imh0dHBzOi8vbWFpbC5weXRo
b24ub3JnL21haWxtYW4vbGlzdGluZm8vbnVtcHktZGlzY3Vzc2lvbiIgcmVsPSJub3JlZmVycmVy
IiB0YXJnZXQ9Il9ibGFuayIgZGF0YS1zYWZlcmVkaXJlY3R1cmw9Imh0dHBzOi8vd3d3Lmdvb2ds
ZS5jb20vdXJsP3E9aHR0cHM6Ly9tYWlsLnB5dGhvbi5vcmcvbWFpbG1hbi9saXN0aW5mby9udW1w
eS1kaXNjdXNzaW9uJmFtcDtzb3VyY2U9Z21haWwmYW1wO3VzdD0xNTQxNjQ1NDA4NjM0MDAwJmFt
cDt1c2c9QUZRakNORUFOOTRBY19HMjBTSGF6TjhULUlVUnFGcHpfQSI+aHR0cHM6Ly9tYWlsLnB5
dGhvbi5vcmcvPHdicj5tYWlsbWFuL2xpc3RpbmZvL251bXB5LTx3YnI+ZGlzY3Vzc2lvbjwvYT48
YnI+CjwvYmxvY2txdW90ZT48L2Rpdj4KX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fPHdi
cj5fX19fX19fX19fX19fX19fXzxicj4KTnVtUHktRGlzY3Vzc2lvbiBtYWlsaW5nIGxpc3Q8YnI+
CjxhIGhyZWY9Im1haWx0bzpOdW1QeS1EaXNjdXNzaW9uQHB5dGhvbi5vcmciIHRhcmdldD0iX2Js
YW5rIj5OdW1QeS1EaXNjdXNzaW9uQHB5dGhvbi5vcmc8L2E+PGJyPgo8YSBocmVmPSJodHRwczov
L21haWwucHl0aG9uLm9yZy9tYWlsbWFuL2xpc3RpbmZvL251bXB5LWRpc2N1c3Npb24iIHJlbD0i
bm9yZWZlcnJlciIgdGFyZ2V0PSJfYmxhbmsiIGRhdGEtc2FmZXJlZGlyZWN0dXJsPSJodHRwczov
L3d3dy5nb29nbGUuY29tL3VybD9xPWh0dHBzOi8vbWFpbC5weXRob24ub3JnL21haWxtYW4vbGlz
dGluZm8vbnVtcHktZGlzY3Vzc2lvbiZhbXA7c291cmNlPWdtYWlsJmFtcDt1c3Q9MTU0MTY0NTQw
ODYzNDAwMCZhbXA7dXNnPUFGUWpDTkVBTjk0QWNfRzIwU0hhek44VC1JVVJxRnB6X0EiPmh0dHBz
Oi8vbWFpbC5weXRob24ub3JnLzx3YnI+bWFpbG1hbi9saXN0aW5mby9udW1weS08d2JyPmRpc2N1
c3Npb248L2E+PGJyPgo8L2Jsb2NrcXVvdGU+PC9kaXY+Cl9fX19fX19fX19fX19fX19fX19fX19f
X19fX19fXzx3YnI+X19fX19fX19fX19fX19fX188YnI+Ck51bVB5LURpc2N1c3Npb24gbWFpbGlu
ZyBsaXN0PGJyPgo8YSBocmVmPSJtYWlsdG86TnVtUHktRGlzY3Vzc2lvbkBweXRob24ub3JnIiB0
YXJnZXQ9Il9ibGFuayI+TnVtUHktRGlzY3Vzc2lvbkBweXRob24ub3JnPC9hPjxicj4KPGEgaHJl
Zj0iaHR0cHM6Ly9tYWlsLnB5dGhvbi5vcmcvbWFpbG1hbi9saXN0aW5mby9udW1weS1kaXNjdXNz
aW9uIiByZWw9Im5vcmVmZXJyZXIiIHRhcmdldD0iX2JsYW5rIiBkYXRhLXNhZmVyZWRpcmVjdHVy
bD0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS91cmw/cT1odHRwczovL21haWwucHl0aG9uLm9yZy9t
YWlsbWFuL2xpc3RpbmZvL251bXB5LWRpc2N1c3Npb24mYW1wO3NvdXJjZT1nbWFpbCZhbXA7dXN0
PTE1NDE2NDU0MDg2MzQwMDAmYW1wO3VzZz1BRlFqQ05FQU45NEFjX0cyMFNIYXpOOFQtSVVScUZw
el9BIj5odHRwczovL21haWwucHl0aG9uLm9yZy9tYWlsbWE8d2JyPm4vbGlzdGluZm8vbnVtcHkt
ZGlzY3Vzc2lvbjwvYT48YnI+CjwvYmxvY2txdW90ZT48L2Rpdj48L2Rpdj4=" style="height:0;width:0;max-height:0;max-width:0;overflow:hidden;font-size:0em;padding:0;margin:0"></div></div></div>
_______________________________________________<br>
NumPy-Discussion mailing list<br>
<a href="mailto:NumPy-Discussion@python.org" target="_blank">NumPy-Discussion@python.org</a><br>
<a href="https://mail.python.org/mailman/listinfo/numpy-discussion" rel="noreferrer" target="_blank">https://mail.python.org/mailman/listinfo/numpy-discussion</a><br>
</blockquote></div></div>
</blockquote></div>