<!DOCTYPE html><html><head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title></title>
</head>
<body>
<div class="markdown-here-wrapper">
<p>Hi,<br>
some performance tweaks have landed in the JDK 24 early access
build (build 24):</p>
<p><a href="https://jdk.java.net/24/" style="border-block-color: rgb(11, 108, 218); border-bottom-color: rgb(11, 108, 218); border-inline-color: rgb(11, 108, 218); border-left-color: rgb(11, 108, 218); border-right-color: rgb(11, 108, 218); border-top-color: rgb(11, 108, 218); caret-color: rgb(11, 108, 218); color: rgb(11, 108, 218); column-rule-color: rgb(11, 108, 218); outline-color: rgb(11, 108, 218); text-decoration-color: rgb(11, 108, 218); text-decoration-line: underline; text-emphasis-color: rgb(11, 108, 218);" class="moz-txt-link-freetext">https://jdk.java.net/24/</a></p>
<p>They are:</p>
<p><a href="https://git.openjdk.org/jdk/pull/21764" style="border-block-color: rgb(11, 108, 218); border-bottom-color: rgb(11, 108, 218); border-inline-color: rgb(11, 108, 218); border-left-color: rgb(11, 108, 218); border-right-color: rgb(11, 108, 218); border-top-color: rgb(11, 108, 218); caret-color: rgb(11, 108, 218); color: rgb(11, 108, 218); column-rule-color: rgb(11, 108, 218); outline-color: rgb(11, 108, 218); text-decoration-color: rgb(11, 108, 218); text-decoration-line: underline; text-emphasis-color: rgb(11, 108, 218);" class="moz-txt-link-freetext">https://git.openjdk.org/jdk/pull/21764</a><br>
<a href="https://git.openjdk.org/jdk/pull/21810" style="border-block-color: rgb(11, 108, 218); border-bottom-color: rgb(11, 108, 218); border-inline-color: rgb(11, 108, 218); border-left-color: rgb(11, 108, 218); border-right-color: rgb(11, 108, 218); border-top-color: rgb(11, 108, 218); caret-color: rgb(11, 108, 218); color: rgb(11, 108, 218); column-rule-color: rgb(11, 108, 218); outline-color: rgb(11, 108, 218); text-decoration-color: rgb(11, 108, 218); text-decoration-line: underline; text-emphasis-color: rgb(11, 108, 218);" class="moz-txt-link-freetext">https://git.openjdk.org/jdk/pull/21810</a></p>
<p>The former contains some optimizations for `MemorySegment</p>
<p>` which should improve scalarization - see [1]. The second
contains an improvement to the way we perform the liveness
check, which should make such check provably redundant for
segments backed by the global arena. This should improve the
performance of workarounds using an “everything” segment to
access off-heap memory with minimal impact from bound checks
[2].</p>
<p>As JDK 24 is moving closer to rampdown phase [3], it would be
great to give such changes a try and report back.</p>
<p>Cheers<br>
Maurizio</p>
<p>[1] - <a href="https://mail.openjdk.org/pipermail/panama-dev/2024-October/020702.html" style="border-block-color: rgb(11, 108, 218); border-bottom-color: rgb(11, 108, 218); border-inline-color: rgb(11, 108, 218); border-left-color: rgb(11, 108, 218); border-right-color: rgb(11, 108, 218); border-top-color: rgb(11, 108, 218); caret-color: rgb(11, 108, 218); color: rgb(11, 108, 218); column-rule-color: rgb(11, 108, 218); outline-color: rgb(11, 108, 218); text-decoration-color: rgb(11, 108, 218); text-decoration-line: underline; text-emphasis-color: rgb(11, 108, 218);" class="moz-txt-link-freetext">https://mail.openjdk.org/pipermail/panama-dev/2024-October/020702.html</a><br>
[2] - <a href="https://mail.openjdk.org/pipermail/panama-dev/2024-October/020736.html" style="border-block-color: rgb(11, 108, 218); border-bottom-color: rgb(11, 108, 218); border-inline-color: rgb(11, 108, 218); border-left-color: rgb(11, 108, 218); border-right-color: rgb(11, 108, 218); border-top-color: rgb(11, 108, 218); caret-color: rgb(11, 108, 218); color: rgb(11, 108, 218); column-rule-color: rgb(11, 108, 218); outline-color: rgb(11, 108, 218); text-decoration-color: rgb(11, 108, 218); text-decoration-line: underline; text-emphasis-color: rgb(11, 108, 218);" class="moz-txt-link-freetext">https://mail.openjdk.org/pipermail/panama-dev/2024-October/020736.html</a><br>
[3] - <a href="https://openjdk.org/projects/jdk/24/" style="border-block-color: rgb(11, 108, 218); border-bottom-color: rgb(11, 108, 218); border-inline-color: rgb(11, 108, 218); border-left-color: rgb(11, 108, 218); border-right-color: rgb(11, 108, 218); border-top-color: rgb(11, 108, 218); caret-color: rgb(11, 108, 218); color: rgb(11, 108, 218); column-rule-color: rgb(11, 108, 218); outline-color: rgb(11, 108, 218); text-decoration-color: rgb(11, 108, 218); text-decoration-line: underline; text-emphasis-color: rgb(11, 108, 218);" class="moz-txt-link-freetext">https://openjdk.org/projects/jdk/24/</a></p>
<div class="mdhr-raw" style="font-size: 0px; padding: 0px; margin: 0px; block-size: 0px; height: 0px; inline-size: 0px; max-block-size: 0px; max-height: 0px; max-inline-size: 0px; max-width: 0px; overflow-block: hidden; overflow-inline: hidden; overflow: hidden; width: 0px;" aria-hidden="true" title="MDH:PHA+SGksPGJyPnNvbWUgcGVyZm9ybWFuY2UgdHdlYWtzIGhhdmUgbGFuZGVkIGluIHRoZSBKREsgMjQgZWFybHkgYWNjZXNzIGJ1aWxkIChidWlsZCAyNCk6PC9wPjxwPmh0dHBzOi8vamRrLmphdmEubmV0LzI0LzwvcD48cD5UaGV5IGFyZTo8L3A+PHA+KiBodHRwczovL2dpdC5vcGVuamRrLm9yZy9qZGsvcHVsbC8yMTc2NDxicj4qIGh0dHBzOi8vZ2l0Lm9wZW5qZGsub3JnL2pkay9wdWxsLzIxODEwPC9wPjxwPlRoZSBmb3JtZXIgY29udGFpbnMgc29tZSBvcHRpbWl6YXRpb25zIGZvciBgTWVtb3J5U2VnbWVudDo6b2ZCdWZmZXJgIHdoaWNoIHNob3VsZCBpbXByb3ZlIHNjYWxhcml6YXRpb24gLSBzZWUgWzFdLiBUaGUgc2Vjb25kIGNvbnRhaW5zIGFuIGltcHJvdmVtZW50IHRvIHRoZSB3YXkgd2UgcGVyZm9ybSB0aGUgbGl2ZW5lc3MgY2hlY2ssIHdoaWNoIHNob3VsZCBtYWtlIHN1Y2ggY2hlY2sgcHJvdmFibHkgcmVkdW5kYW50IGZvciBzZWdtZW50cyBiYWNrZWQgYnkgdGhlIGdsb2JhbCBhcmVuYS4gVGhpcyBzaG91bGQgaW1wcm92ZSB0aGUgcGVyZm9ybWFuY2Ugb2Ygd29ya2Fyb3VuZHMgdXNpbmcgYW4gImV2ZXJ5dGhpbmciIHNlZ21lbnQgdG8gYWNjZXNzIG9mZi1oZWFwIG1lbW9yeSB3aXRoIG1pbmltYWwgaW1wYWN0IGZyb20gYm91bmQgY2hlY2tzIFsyXS48L3A+PHA+QXMgSkRLIDI0IGlzIG1vdmluZyBjbG9zZXIgdG8gcmFtcGRvd24gcGhhc2UgWzNdLCBpdCB3b3VsZCBiZSBncmVhdCB0byBnaXZlIHN1Y2ggY2hhbmdlcyBhIHRyeSBhbmQgcmVwb3J0IGJhY2suPC9wPjxwPkNoZWVyczxicj5NYXVyaXppbzxicj48L3A+PHA+WzFdIC0gaHR0cHM6Ly9tYWlsLm9wZW5qZGsub3JnL3BpcGVybWFpbC9wYW5hbWEtZGV2LzIwMjQtT2N0b2Jlci8wMjA3MDIuaHRtbDxicj5bMl0gLSBodHRwczovL21haWwub3Blbmpkay5vcmcvcGlwZXJtYWlsL3BhbmFtYS1kZXYvMjAyNC1PY3RvYmVyLzAyMDczNi5odG1sPGJyPlszXSAtIGh0dHBzOi8vb3Blbmpkay5vcmcvcHJvamVjdHMvamRrLzI0Lzxicj48L3A+PHA+PGJyPjwvcD48cD48YnI+PC9wPjx1bCBjbGFzcz0iZHJvcGRvd24tbWVudSB0ZXh0Y29tcGxldGUtZHJvcGRvd24iIHN0eWxlPSJkaXNwbGF5OiBub25lOyBwb3NpdGlvbjogYWJzb2x1dGU7IHotaW5kZXg6IDEwMDA7IGxlZnQ6IDU3NC44ODNweDsgdG9wOiAxOTdweDsgYm90dG9tOiBhdXRvOyIgY29udGVudGVkaXRhYmxlPSJmYWxzZSIgZGF0YS1zdHJhdGVneT0iZW1vamkiPjwvdWw+">​</div>
<br>
<div title="MDH:PGRpdiBjbGFzcz0ibWFya2Rvd24taGVyZS13cmFwcGVyIj48cCBzdHlsZT0ibWFyZ2luLWJsb2NrOiAwcHggMTkuMnB4OyBtYXJnaW4tYm90dG9tOiAxOS4ycHg7IG1hcmdpbi10b3A6IDBweDsiPkhpLDxicj5zb21lIHBlcmZvcm1hbmNlIHR3ZWFrcyBoYXZlIGxhbmRlZCBpbiB0aGUgSkRLIDI0IGVhcmx5IGFjY2VzcyBidWlsZCAoYnVpbGQgMjQpOjwvcD4KPHAgc3R5bGU9Im1hcmdpbi1ibG9jazogMHB4IDE5LjJweDsgbWFyZ2luLWJvdHRvbTogMTkuMnB4OyBtYXJnaW4tdG9wOiAwcHg7Ij48YSBocmVmPSJodHRwczovL2pkay5qYXZhLm5ldC8yNC8iIHN0eWxlPSJib3JkZXItYmxvY2stY29sb3I6IHJnYigxMSwgMTA4LCAyMTgpOyBib3JkZXItYm90dG9tLWNvbG9yOiByZ2IoMTEsIDEwOCwgMjE4KTsgYm9yZGVyLWlubGluZS1jb2xvcjogcmdiKDExLCAxMDgsIDIxOCk7IGJvcmRlci1sZWZ0LWNvbG9yOiByZ2IoMTEsIDEwOCwgMjE4KTsgYm9yZGVyLXJpZ2h0LWNvbG9yOiByZ2IoMTEsIDEwOCwgMjE4KTsgYm9yZGVyLXRvcC1jb2xvcjogcmdiKDExLCAxMDgsIDIxOCk7IGNhcmV0LWNvbG9yOiByZ2IoMTEsIDEwOCwgMjE4KTsgY29sb3I6IHJnYigxMSwgMTA4LCAyMTgpOyBjb2x1bW4tcnVsZS1jb2xvcjogcmdiKDExLCAxMDgsIDIxOCk7IG91dGxpbmUtY29sb3I6IHJnYigxMSwgMTA4LCAyMTgpOyB0ZXh0LWRlY29yYXRpb24tY29sb3I6IHJnYigxMSwgMTA4LCAyMTgpOyB0ZXh0LWRlY29yYXRpb24tbGluZTogdW5kZXJsaW5lOyB0ZXh0LWVtcGhhc2lzLWNvbG9yOiByZ2IoMTEsIDEwOCwgMjE4KTsiPmh0dHBzOi8vamRrLmphdmEubmV0LzI0LzwvYT48L3A+CjxwIHN0eWxlPSJtYXJnaW4tYmxvY2s6IDBweCAxOS4ycHg7IG1hcmdpbi1ib3R0b206IDE5LjJweDsgbWFyZ2luLXRvcDogMHB4OyI+VGhleSBhcmU6PC9wPgo8dWwgc3R5bGU9Im1hcmdpbi1ibG9jazogMTkuMnB4OyBtYXJnaW4tYm90dG9tOiAxOS4ycHg7IG1hcmdpbi10b3A6IDE5LjJweDsgcGFkZGluZy1pbmxpbmUtc3RhcnQ6IDMycHg7IHBhZGRpbmctbGVmdDogMzJweDsiPgo8bGkgc3R5bGU9Im1hcmdpbi1ibG9jazogOHB4OyBtYXJnaW4tYm90dG9tOiA4cHg7IG1hcmdpbi10b3A6IDhweDsiPjxhIGhyZWY9Imh0dHBzOi8vZ2l0Lm9wZW5qZGsub3JnL2pkay9wdWxsLzIxNzY0IiBzdHlsZT0iYm9yZGVyLWJsb2NrLWNvbG9yOiByZ2IoMTEsIDEwOCwgMjE4KTsgYm9yZGVyLWJvdHRvbS1jb2xvcjogcmdiKDExLCAxMDgsIDIxOCk7IGJvcmRlci1pbmxpbmUtY29sb3I6IHJnYigxMSwgMTA4LCAyMTgpOyBib3JkZXItbGVmdC1jb2xvcjogcmdiKDExLCAxMDgsIDIxOCk7IGJvcmRlci1yaWdodC1jb2xvcjogcmdiKDExLCAxMDgsIDIxOCk7IGJvcmRlci10b3AtY29sb3I6IHJnYigxMSwgMTA4LCAyMTgpOyBjYXJldC1jb2xvcjogcmdiKDExLCAxMDgsIDIxOCk7IGNvbG9yOiByZ2IoMTEsIDEwOCwgMjE4KTsgY29sdW1uLXJ1bGUtY29sb3I6IHJnYigxMSwgMTA4LCAyMTgpOyBvdXRsaW5lLWNvbG9yOiByZ2IoMTEsIDEwOCwgMjE4KTsgdGV4dC1hbGlnbjogbGVmdDsgdGV4dC1kZWNvcmF0aW9uLWNvbG9yOiByZ2IoMTEsIDEwOCwgMjE4KTsgdGV4dC1kZWNvcmF0aW9uLWxpbmU6IHVuZGVybGluZTsgdGV4dC1lbXBoYXNpcy1jb2xvcjogcmdiKDExLCAxMDgsIDIxOCk7Ij5odHRwczovL2dpdC5vcGVuamRrLm9yZy9qZGsvcHVsbC8yMTc2NDwvYT48L2xpPgo8bGkgc3R5bGU9Im1hcmdpbi1ibG9jazogOHB4OyBtYXJnaW4tYm90dG9tOiA4cHg7IG1hcmdpbi10b3A6IDhweDsiPjxhIGhyZWY9Imh0dHBzOi8vZ2l0Lm9wZW5qZGsub3JnL2pkay9wdWxsLzIxODEwIiBzdHlsZT0iYm9yZGVyLWJsb2NrLWNvbG9yOiByZ2IoMTEsIDEwOCwgMjE4KTsgYm9yZGVyLWJvdHRvbS1jb2xvcjogcmdiKDExLCAxMDgsIDIxOCk7IGJvcmRlci1pbmxpbmUtY29sb3I6IHJnYigxMSwgMTA4LCAyMTgpOyBib3JkZXItbGVmdC1jb2xvcjogcmdiKDExLCAxMDgsIDIxOCk7IGJvcmRlci1yaWdodC1jb2xvcjogcmdiKDExLCAxMDgsIDIxOCk7IGJvcmRlci10b3AtY29sb3I6IHJnYigxMSwgMTA4LCAyMTgpOyBjYXJldC1jb2xvcjogcmdiKDExLCAxMDgsIDIxOCk7IGNvbG9yOiByZ2IoMTEsIDEwOCwgMjE4KTsgY29sdW1uLXJ1bGUtY29sb3I6IHJnYigxMSwgMTA4LCAyMTgpOyBvdXRsaW5lLWNvbG9yOiByZ2IoMTEsIDEwOCwgMjE4KTsgdGV4dC1hbGlnbjogbGVmdDsgdGV4dC1kZWNvcmF0aW9uLWNvbG9yOiByZ2IoMTEsIDEwOCwgMjE4KTsgdGV4dC1kZWNvcmF0aW9uLWxpbmU6IHVuZGVybGluZTsgdGV4dC1lbXBoYXNpcy1jb2xvcjogcmdiKDExLCAxMDgsIDIxOCk7Ij5odHRwczovL2dpdC5vcGVuamRrLm9yZy9qZGsvcHVsbC8yMTgxMDwvYT48L2xpPgo8L3VsPgo8cCBzdHlsZT0ibWFyZ2luLWJsb2NrOiAwcHggMTkuMnB4OyBtYXJnaW4tYm90dG9tOiAxOS4ycHg7IG1hcmdpbi10b3A6IDBweDsiPlRoZSBmb3JtZXIgY29udGFpbnMgc29tZSBvcHRpbWl6YXRpb25zIGZvciBgTWVtb3J5U2VnbWVudDwvcD4KCjxwIHN0eWxlPSJtYXJnaW4tYmxvY2s6IDBweCAxOS4ycHg7IG1hcmdpbi1ib3R0b206IDE5LjJweDsgbWFyZ2luLXRvcDogMHB4OyI+YCB3aGljaCBzaG91bGQgaW1wcm92ZSBzY2FsYXJpemF0aW9uIC0gc2VlIFsxXS4gVGhlIHNlY29uZCBjb250YWlucyBhbiBpbXByb3ZlbWVudCB0byB0aGUgd2F5IHdlIHBlcmZvcm0gdGhlIGxpdmVuZXNzIGNoZWNrLCB3aGljaCBzaG91bGQgbWFrZSBzdWNoIGNoZWNrIHByb3ZhYmx5IHJlZHVuZGFudCBmb3Igc2VnbWVudHMgYmFja2VkIGJ5IHRoZSBnbG9iYWwgYXJlbmEuIFRoaXMgc2hvdWxkIGltcHJvdmUgdGhlIHBlcmZvcm1hbmNlIG9mIHdvcmthcm91bmRzIHVzaW5nIGFuIOKAnGV2ZXJ5dGhpbmfigJ0gc2VnbWVudCB0byBhY2Nlc3Mgb2ZmLWhlYXAgbWVtb3J5IHdpdGggbWluaW1hbCBpbXBhY3QgZnJvbSBib3VuZCBjaGVja3MgWzJdLjwvcD4KPHAgc3R5bGU9Im1hcmdpbi1ibG9jazogMHB4IDE5LjJweDsgbWFyZ2luLWJvdHRvbTogMTkuMnB4OyBtYXJnaW4tdG9wOiAwcHg7Ij5BcyBKREsgMjQgaXMgbW92aW5nIGNsb3NlciB0byByYW1wZG93biBwaGFzZSBbM10sIGl0IHdvdWxkIGJlIGdyZWF0IHRvIGdpdmUgc3VjaCBjaGFuZ2VzIGEgdHJ5IGFuZCByZXBvcnQgYmFjay48L3A+CjxwIHN0eWxlPSJtYXJnaW4tYmxvY2s6IDBweCAxOS4ycHg7IG1hcmdpbi1ib3R0b206IDE5LjJweDsgbWFyZ2luLXRvcDogMHB4OyI+Q2hlZXJzPGJyPk1hdXJpemlvPC9wPgo8cCBzdHlsZT0ibWFyZ2luLWJsb2NrOiAwcHggMTkuMnB4OyBtYXJnaW4tYm90dG9tOiAxOS4ycHg7IG1hcmdpbi10b3A6IDBweDsiPlsxXSAtIDxhIGhyZWY9Imh0dHBzOi8vbWFpbC5vcGVuamRrLm9yZy9waXBlcm1haWwvcGFuYW1hLWRldi8yMDI0LU9jdG9iZXIvMDIwNzAyLmh0bWwiIHN0eWxlPSJib3JkZXItYmxvY2stY29sb3I6IHJnYigxMSwgMTA4LCAyMTgpOyBib3JkZXItYm90dG9tLWNvbG9yOiByZ2IoMTEsIDEwOCwgMjE4KTsgYm9yZGVyLWlubGluZS1jb2xvcjogcmdiKDExLCAxMDgsIDIxOCk7IGJvcmRlci1sZWZ0LWNvbG9yOiByZ2IoMTEsIDEwOCwgMjE4KTsgYm9yZGVyLXJpZ2h0LWNvbG9yOiByZ2IoMTEsIDEwOCwgMjE4KTsgYm9yZGVyLXRvcC1jb2xvcjogcmdiKDExLCAxMDgsIDIxOCk7IGNhcmV0LWNvbG9yOiByZ2IoMTEsIDEwOCwgMjE4KTsgY29sb3I6IHJnYigxMSwgMTA4LCAyMTgpOyBjb2x1bW4tcnVsZS1jb2xvcjogcmdiKDExLCAxMDgsIDIxOCk7IG91dGxpbmUtY29sb3I6IHJnYigxMSwgMTA4LCAyMTgpOyB0ZXh0LWRlY29yYXRpb24tY29sb3I6IHJnYigxMSwgMTA4LCAyMTgpOyB0ZXh0LWRlY29yYXRpb24tbGluZTogdW5kZXJsaW5lOyB0ZXh0LWVtcGhhc2lzLWNvbG9yOiByZ2IoMTEsIDEwOCwgMjE4KTsiPmh0dHBzOi8vbWFpbC5vcGVuamRrLm9yZy9waXBlcm1haWwvcGFuYW1hLWRldi8yMDI0LU9jdG9iZXIvMDIwNzAyLmh0bWw8L2E+PGJyPlsyXSAtIDxhIGhyZWY9Imh0dHBzOi8vbWFpbC5vcGVuamRrLm9yZy9waXBlcm1haWwvcGFuYW1hLWRldi8yMDI0LU9jdG9iZXIvMDIwNzM2Lmh0bWwiIHN0eWxlPSJib3JkZXItYmxvY2stY29sb3I6IHJnYigxMSwgMTA4LCAyMTgpOyBib3JkZXItYm90dG9tLWNvbG9yOiByZ2IoMTEsIDEwOCwgMjE4KTsgYm9yZGVyLWlubGluZS1jb2xvcjogcmdiKDExLCAxMDgsIDIxOCk7IGJvcmRlci1sZWZ0LWNvbG9yOiByZ2IoMTEsIDEwOCwgMjE4KTsgYm9yZGVyLXJpZ2h0LWNvbG9yOiByZ2IoMTEsIDEwOCwgMjE4KTsgYm9yZGVyLXRvcC1jb2xvcjogcmdiKDExLCAxMDgsIDIxOCk7IGNhcmV0LWNvbG9yOiByZ2IoMTEsIDEwOCwgMjE4KTsgY29sb3I6IHJnYigxMSwgMTA4LCAyMTgpOyBjb2x1bW4tcnVsZS1jb2xvcjogcmdiKDExLCAxMDgsIDIxOCk7IG91dGxpbmUtY29sb3I6IHJnYigxMSwgMTA4LCAyMTgpOyB0ZXh0LWRlY29yYXRpb24tY29sb3I6IHJnYigxMSwgMTA4LCAyMTgpOyB0ZXh0LWRlY29yYXRpb24tbGluZTogdW5kZXJsaW5lOyB0ZXh0LWVtcGhhc2lzLWNvbG9yOiByZ2IoMTEsIDEwOCwgMjE4KTsiPmh0dHBzOi8vbWFpbC5vcGVuamRrLm9yZy9waXBlcm1haWwvcGFuYW1hLWRldi8yMDI0LU9jdG9iZXIvMDIwNzM2Lmh0bWw8L2E+PGJyPlszXSAtIDxhIGhyZWY9Imh0dHBzOi8vb3Blbmpkay5vcmcvcHJvamVjdHMvamRrLzI0LyIgc3R5bGU9ImJvcmRlci1ibG9jay1jb2xvcjogcmdiKDExLCAxMDgsIDIxOCk7IGJvcmRlci1ib3R0b20tY29sb3I6IHJnYigxMSwgMTA4LCAyMTgpOyBib3JkZXItaW5saW5lLWNvbG9yOiByZ2IoMTEsIDEwOCwgMjE4KTsgYm9yZGVyLWxlZnQtY29sb3I6IHJnYigxMSwgMTA4LCAyMTgpOyBib3JkZXItcmlnaHQtY29sb3I6IHJnYigxMSwgMTA4LCAyMTgpOyBib3JkZXItdG9wLWNvbG9yOiByZ2IoMTEsIDEwOCwgMjE4KTsgY2FyZXQtY29sb3I6IHJnYigxMSwgMTA4LCAyMTgpOyBjb2xvcjogcmdiKDExLCAxMDgsIDIxOCk7IGNvbHVtbi1ydWxlLWNvbG9yOiByZ2IoMTEsIDEwOCwgMjE4KTsgb3V0bGluZS1jb2xvcjogcmdiKDExLCAxMDgsIDIxOCk7IHRleHQtZGVjb3JhdGlvbi1jb2xvcjogcmdiKDExLCAxMDgsIDIxOCk7IHRleHQtZGVjb3JhdGlvbi1saW5lOiB1bmRlcmxpbmU7IHRleHQtZW1waGFzaXMtY29sb3I6IHJnYigxMSwgMTA4LCAyMTgpOyI+aHR0cHM6Ly9vcGVuamRrLm9yZy9wcm9qZWN0cy9qZGsvMjQvPC9hPjwvcD4KPGRpdiB0aXRsZT0iTURIOlBIQStTR2tzUEdKeVBuTnZiV1VnY0dWeVptOXliV0Z1WTJVZ2RIZGxZV3R6SUdoaGRtVWdiR0Z1WkdWa0lHbHVJSFJvWlNCS1JFc2dNalFnWldGeWJIa2dZV05qWlhOeklHSjFhV3hrSUNoaWRXbHNaQ0F5TkNrNlBDOXdQanh3UG1oMGRIQnpPaTh2YW1SckxtcGhkbUV1Ym1WMEx6STBMend2Y0Q0OGNENVVhR1Y1SUdGeVpUbzhMM0ErUEhBK0tpQm9kSFJ3Y3pvdkwyZHBkQzV2Y0dWdWFtUnJMbTl5Wnk5cVpHc3ZjSFZzYkM4eU1UYzJORHhpY2o0cUlHaDBkSEJ6T2k4dloybDBMbTl3Wlc1cVpHc3ViM0puTDJwa2F5OXdkV3hzTHpJeE9ERXdQQzl3UGp4d1BsUm9aU0JtYjNKdFpYSWdZMjl1ZEdGcGJuTWdjMjl0WlNCdmNIUnBiV2w2WVhScGIyNXpJR1p2Y2lCZ1RXVnRiM0o1VTJWbmJXVnVkRG82YjJaQ2RXWm1aWEpnSUhkb2FXTm9JSE5vYjNWc1pDQnBiWEJ5YjNabElITmpZV3hoY21sNllYUnBiMjRnTFNCelpXVWdXekZkTGlCVWFHVWdjMlZqYjI1a0lHTnZiblJoYVc1eklHRnVJR2x0Y0hKdmRtVnRaVzUwSUhSdklIUm9aU0IzWVhrZ2QyVWdjR1Z5Wm05eWJTQjBhR1VnYkdsMlpXNWxjM01nWTJobFkyc3NJSGRvYVdOb0lITm9iM1ZzWkNCdFlXdGxJSE4xWTJnZ1kyaGxZMnNnY0hKdmRtRmliSGtnY21Wa2RXNWtZVzUwSUdadmNpQnpaV2R0Wlc1MGN5QmlZV05yWldRZ1lua2dkR2hsSUdkc2IySmhiQ0JoY21WdVlTNGdWR2hwY3lCemFHOTFiR1FnYVcxd2NtOTJaU0IwYUdVZ2NHVnlabTl5YldGdVkyVWdiMllnZDI5eWEyRnliM1Z1WkhNZ2RYTnBibWNnWVc0Z0ltVjJaWEo1ZEdocGJtY2lJSE5sWjIxbGJuUWdkRzhnWVdOalpYTnpJRzltWmkxb1pXRndJRzFsYlc5eWVTQjNhWFJvSUcxcGJtbHRZV3dnYVcxd1lXTjBJR1p5YjIwZ1ltOTFibVFnWTJobFkydHpJRnN5WFM0OEwzQStQSEErUVhNZ1NrUkxJREkwSUdseklHMXZkbWx1WnlCamJHOXpaWElnZEc4Z2NtRnRjR1J2ZDI0Z2NHaGhjMlVnV3pOZExDQnBkQ0IzYjNWc1pDQmlaU0JuY21WaGRDQjBieUJuYVhabElITjFZMmdnWTJoaGJtZGxjeUJoSUhSeWVTQmhibVFnY21Wd2IzSjBJR0poWTJzdVBDOXdQanh3UGtOb1pXVnljenhpY2o1TllYVnlhWHBwYnp4aWNqNDhMM0ErUEhBK1d6RmRJQzBnYUhSMGNITTZMeTl0WVdsc0xtOXdaVzVxWkdzdWIzSm5MM0JwY0dWeWJXRnBiQzl3WVc1aGJXRXRaR1YyTHpJd01qUXRUMk4wYjJKbGNpOHdNakEzTURJdWFIUnRiRHhpY2o1Yk1sMGdMU0JvZEhSd2N6b3ZMMjFoYVd3dWIzQmxibXBrYXk1dmNtY3ZjR2x3WlhKdFlXbHNMM0JoYm1GdFlTMWtaWFl2TWpBeU5DMVBZM1J2WW1WeUx6QXlNRGN6Tmk1b2RHMXNQR0p5UGxzelhTQXRJR2gwZEhCek9pOHZiM0JsYm1wa2F5NXZjbWN2Y0hKdmFtVmpkSE12YW1Sckx6STBMenhpY2o0OEwzQStQSEErUEdKeVBqd3ZjRDQ4Y0Q0OFluSStQQzl3UGp4MWJDQmpiR0Z6Y3owaVpISnZjR1J2ZDI0dGJXVnVkU0IwWlhoMFkyOXRjR3hsZEdVdFpISnZjR1J2ZDI0aUlITjBlV3hsUFNKa2FYTndiR0Y1T2lCdWIyNWxPeUJ3YjNOcGRHbHZiam9nWVdKemIyeDFkR1U3SUhvdGFXNWtaWGc2SURFd01EQTdJR3hsWm5RNklEVTNOQzQ0T0ROd2VEc2dkRzl3T2lBeE9UZHdlRHNnWW05MGRHOXRPaUJoZFhSdk95SWdZMjl1ZEdWdWRHVmthWFJoWW14bFBTSm1ZV3h6WlNJZ1pHRjBZUzF6ZEhKaGRHVm5lVDBpWlcxdmFta2lQand2ZFd3KyIgYXJpYS1oaWRkZW49InRydWUiIHN0eWxlPSJmb250LXNpemU6IDBweDsgcGFkZGluZzogMHB4OyBtYXJnaW46IDBweDsgYmxvY2stc2l6ZTogMHB4OyBoZWlnaHQ6IDBweDsgaW5saW5lLXNpemU6IDBweDsgbWF4LWJsb2NrLXNpemU6IDBweDsgbWF4LWhlaWdodDogMHB4OyBtYXgtaW5saW5lLXNpemU6IDBweDsgbWF4LXdpZHRoOiAwcHg7IG92ZXJmbG93LWJsb2NrOiBoaWRkZW47IG92ZXJmbG93LWlubGluZTogaGlkZGVuOyBvdmVyZmxvdzogaGlkZGVuOyB3aWR0aDogMHB4OyIgY2xhc3M9Im1kaHItcmF3Ij4mYW1wOyM4MjAzOzwvZGl2PgoKPC9kaXY+CgoK" aria-hidden="true" style="font-size: 0px; padding: 0px; margin: 0px; block-size: 0px; height: 0px; inline-size: 0px; max-block-size: 0px; max-height: 0px; max-inline-size: 0px; max-width: 0px; overflow-block: hidden; overflow-inline: hidden; overflow: hidden; width: 0px;" class="mdhr-raw">​</div>
</div>
</body>
</html>