Files
UnrealEngine/Engine/Source/Runtime/OodleDataCompression/Sdks/2.9.14/help/oodle2.html
Brandyn / Techy fcc1b09210 init
2026-04-04 15:40:51 -05:00

82643 lines
4.2 MiB

<!DOCTYPE html>
<head>
<meta charset='UTF-8'>
<title>Oodle SDK Documentation</title>
<style>
body
{
font-family: sans-serif;
font-size: 10pt;
padding: 10px 0px 0px 10px;
}
img
{
border: none;
}
table
{
font-size: 10pt;
}
a
{
color: #000000;
text-decoration: none;
}
a.blue
{
color: #0000FF;
}
a.blue:visited
{
color: #0000FF;
}
a.paragraph:link
{
color: #336699;
}
a.paragraph:visited
{
color: #336699;
}
a:hover
{
text-decoration: underline;
}
a.nohover:hover
{
text-decoration: none;
}
table.bar
{
background-color: #B3B9AF;
margin: 2px 0px 0px 0px;
width: 100%;
}
table.bar td
{
padding: 8px 8px 8px 8px;
}
td.title
{
font-size: 140%;
}
td.biline
{
font-style: italic;
margin: 5px 0px 0px 0px;
}
div.menu
{
position:absolute;
visibility:hidden;
}
div.rightmenuouter
{
position:relative;
width:100%;
}
div.rightmenu
{
position:absolute;
width:100%;
visibility:hidden;
}
table.spacer td
{
padding: 0px;
margin: 0px;
}
table.dropmenu
{
border:2px solid #444444;
background-color: #B3B9AF;
padding: 2px 2px 2px 2px;
float: right;
width: 350px;
}
table.dropmenu td
{
padding: 0px;
}
pre
{
margin: 0px;
padding: 0px;
overflow: hidden;
}
div.prototype
{
background-color: #DDDDDD;
margin: 10px 0px 10px 0px;
padding: 10px 10px 10px 10px;
font-family: monospace;
}
div.prototype_header
{
color:#007700;
margin: 0px 0px 10px 0px;
}
div.prototype_left
{
float:left;
height: 100%;
}
span.prototype_type
{
color:#0000FF;
}
div.discussion_heading
{
font-weight: bold;
margin: 10px 0px 10px 0px;
}
td.paramname
{
padding: 4px 4px 4px 4px;
/*text-align: right;*/
font-style: italic;
}
td.paramdesc
{
padding: 4px 4px 4px 4px;
}
table.notes
{
background-color: #DDDDDD;
width: 100%;
margin: 10px 0px 10px 0px;
}
img.TOCGroup
{
cursor: hand;
list-style-type: none;
}
ul.TOCItem
{
list-style-type: none;
}
/* makehelp css starts here */
/* to allow independent scrolling regions, make the main page fullsize */
html,body {
height: 100%;
overflow: hidden;
margin: 0;
}
section.main {
height: 98%;
overflow: auto;
box-sizing: border-box;
padding: 0.5em;
}
nav.sidebar {
float: left;
resize: horizontal;
width: 20%;
height: 98%;
overflow: auto;
box-sizing: border-box;
padding: 0.5em;
white-space: nowrap;
background-color: #F0F0F0;
}
/* Style the tab buttons */
.tablink {
background-color: #555;
color: white;
float: left;
border: none;
outline: none;
cursor: pointer;
padding: 14px 16px;
width: 33%;
}
/* Change background color of buttons on hover */
.tablink:hover {
background-color: #777;
}
/* Set default styles for tab content */
.tabcontent {
color: white;
display: none;
padding: 50px;
text-align: center;
}
/* Sidebar text is smaller */
.sidebar_innards {
font-size:0.85em;
}
.search_result {
padding-top: 8px;
line-height: 135%;
}
/* TOC nodes have no list marker */
ul.sysTOC {
list-style-type: none;
}
ul.sysTOCItem {
list-style-type: none;
}
ul { margin-left: 1em; padding-left: 1em; }
ul.sysTree { margin-left: 1em; padding-left: 0.5em; }
ul.sysTree > ul.sysTree { margin-left: 1em; padding-left: 0.5em; }
ul.sysIndex {
list-style-type: none;
}
span.closedbook_icon {background:url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAB8AAAAPCAYAAAAceBSiAAAACXBIWXMAAAsTAAALEwEAmpwYAAAChElEQVQ4y72V205TQRSGv5lOKT1QAeVCg5FXUCJcEfAA0cilvIMxMWA4ecBuWtTIhTHRW3wHQzgED4kYvfYV6kWjGCw9IO2m3bO8QGtrkGIC/skkK5nDN/9aa++BQ9JJ2qWddtlrjTloaAvNEiLIueN9WODl51fylTW121p1UNA22iRKlIut5wluh/CXDZ4Rcg05XqVf84mkOnB4AL+EaeLyiUu0fG8muhUlUAoAUPZ5FP0u2VCOxfQCKVI1PBWPxwXAWotSCqV25kWkEjuOo3YHB+Tj/EceXLvP0fwxIsUIxjP4rA8AqyxW71wgF8qxkl4hWZUBIyI4jlMDq44TicQeDeMncT3B85k5YjecnT3y+55aNNqDoATQ0szA0X5efJuv9ICupOAnrNp9PTVgiG4dIXbjHomnM2Qbs5RNCbBVA5T4CJQChIsRBo7300abAOj9gnbvVo2xPrQ1jI+N8ejxLK6/QNEU8bRglVD2eZSMS6GhgOt38bStlKzG+b+697C4xsVqS7jQhDMcI/Fshnw4z7bZxmq7U+/gJmvNa8xn5llKLTE6NYqLq7SIVOr8t/hvypJRb9bfkG/cBGXRnmF8dIKHT2bJBrOsN6VJRzdYzi2z/GWZkdsjZLwNXL+7v59MvQwkSarF9IIMtg4SLTYR2Qpx5+Ykk3MTnB7qxGKZunWXnos9dPd18+79e5xpB0C01rrmsD+dWmvrpj9FSq2kV8g15hGtsArODHUyEh8mIxt0Xe6i+8JZ3n14S29fT8WXERHi8XjN5/Vn9+9HSZJqIb0gV1oH8XQZD0ssFmN1dZXe3t7qc9RhvSd00CFXTw1JmLBMT08L8Gv8H4UIi8HUhf4ApzghWt8C8+0AAAAASUVORK5CYII=')
no-repeat center top;display: inline-block;width: 31px;height: 15px;}
span.openbook_icon {background:url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAB8AAAAPCAYAAAAceBSiAAAACXBIWXMAAAsTAAALEwEAmpwYAAACEklEQVQ4y8WUQWsTURSFv/tm6CRWKlSapIuAkJW4slCQUiZ2pbhUEBfmR4ibqqQziWJB18Wdf8BdFwVBjKX5A+1GdyIRmjYQEdqaaTJzXYS0k9KalAY88JgH784955737oURoVTylP+B5RfLWq1sqO8vnUuAfVHiKaZ048MGi94ioYkQsdTzPInH+L6vACJC/OzC5A4OTtuBCFzXpVKpHF9FuahCQLH4BIBXpdf9lZdKJVVVRLqCevv41/d9GVbMwsICIqIAS8WnQAOosVOvMWaajIMq4xywL7aq4nnemcnK5fK5nHBdl3w+z/r6OhCyU/9GOnOFdGYCwwF7e8qd2bt8+fpZzSgenOrZ7yydyQKwu/sTK7SgDYlDB4ONGSbBIPSu7DRBO/UaAKlUFiMCEViRhQFM70djDCLSt4aBQZB/6D6uvHYkqBffV/nJNQzadLqbAGgBYdwNi+3tJjBBKnUD9DLosVMDbR8kokWACjy+XoDfQDtO7jA9PQNkKb98j5t/CAoR3ZxHtsdtjhMOsv8XTal+ryJqKNwswCFcIkmylYDA5u3zFd48e8e9W4+Ymc1DB+zQRrCwoyg6aqeTVfb6fBAaNOTT9keduzYHAUxylc3VLTZXt7h/+wG5fK4buA/8gbGOgwFklDN+kkmdz81jRdbpszy0cdoOrbGAtR9royUHSJA8Y3iYbmdgCAkJCPgL5obYnwJQhzYAAAAASUVORK5CYII=')
no-repeat center top;display: inline-block;width: 31px;height: 15px;}
span.reference {background:url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAAZiS0dEAP8A/wD/oL2nkwAAAAlwSFlzAAALEwAACxMBAJqcGAAAAAd0SU1FB9kMBxMUGfVnUEMAAAAZdEVYdENvbW1lbnQAQ3JlYXRlZCB3aXRoIEdJTVBXgQ4XAAAAuklEQVQ4y9XSsYoCQQwG4G9VzkNf4ITrr1+4l7nntdVSPMRKtLE9RDh1bKaIi7uOpT+EZJJJ/iQzvBLqLIJ+CgukhhThLeglLl0FZg2GNX5D/C/7Lzih7j1gn+In20eMscUKFQzC5VGwq0ahLYbY4zN0e4NRGCFil32bey32CpY4wT++8/mGYFBQII6Tujo4dCRX6Gd7jve2EepGcgrM53vEbSOkBztpfa6UW4yxj/CZvnKBqmRxJS/kChdLKqzwpHoxAAAAAElFTkSuQmCC')
no-repeat center top;display: inline-block;width: 16px;height: 16px;}
span.topic_icon {background:url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAB8AAAAPCAYAAAAceBSiAAAACXBIWXMAAAsTAAALEwEAmpwYAAAB3ElEQVQ4y7WUvW4TURCFv3u9a0OMkgIFx9dZQiQKCipSoshvQEvDI9BQbEPDA/gREA2Cno7eIkJGQkKRkEIc/LteZwEhZK3jrMneobBjfqoIrae892jOmTOao8iofN+Xi+BqtZoLnJFl+b4vIj9FJJbRKJD9/TcyHn+Xk5OJpGki3d5r8X1fLiryP8hjCcO6iPyQZCoymYg0j0TOUhGRtuRdRGkEEAAnWwkO5fItRNYw5Yek6TquE+A4HRqN5yTTmHr9PdVqFQCdJbVIgU63SLl8D7Gr9HpP2Nt7SppeZWfnMUlS/EdqhqUAz1tBqzGu28V1wPMglTWwlxFheeSohGj4kXD4AihgU2i2Zo647iFuHqzNL+A6252fYkwB6BNFb9G5hN27D1B6zLvGS3I6RuvpssgVX6IAuESpdAfPu43SMeHgGde3csC3GUqpTG1f9LlW2gQc+sEp7U6TdB4nYXiAMUWUHiHz5Wc1+SKxouM+UMCYbSrmPqbyCGvBmJuzi7Cry7IdShseAP3+GFRCTn9FawgGQ2CJp3Y+eWljmxtbBY6HrwgGR+TdEZsVD8iBai2HvF7/AKzw6TACPgNXAGi3QgCstWjt/JULmQUc6nfD8zxRmlm4yB+P869fJsHTXvDk+GsAAAAASUVORK5CYII=')
no-repeat center top;display: inline-block;width: 31px;height: 15px;}
span.arrowleft {background:url('data:image/.png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAAZiS0dEAP8A/wD/oL2nkwAAAAlwSFlzAAALEwAACxMBAJqcGAAAAAd0SU1FB9kMBxIPGsSaoFQAAAAZdEVYdENvbW1lbnQAQ3JlYXRlZCB3aXRoIEdJTVBXgQ4XAAAAiElEQVQ4y72TwQ6DIBAFZxFiUtN48dL+/w/q2Wova0JWqEATX8IFssOwAOQj3B33b5EA3qz7GrADghYNrXaDQmzewFwCeGTmdx1FJt5obxHgdBz3o7GjFtn3sF2Z9EY7Hn3J3a+R7rFj3GS5MhCgU8jHGFQ98SewJADFkUQvmjLVAkLij7xygC/RzR+h+Jt0lwAAAABJRU5ErkJggg==')
no-repeat center top;display: inline-block;width: 16px;height: 16px;}
span.arrowright {background:url('data:image/.png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAAZiS0dEAP8A/wD/oL2nkwAAAAlwSFlzAAALEwAACxMBAJqcGAAAAAd0SU1FB9kMBxINKD57k1YAAAAZdEVYdENvbW1lbnQAQ3JlYXRlZCB3aXRoIEdJTVBXgQ4XAAAAm0lEQVQ4y51T0QrDMAg83cJCm76MvrT//4PtS2Fjy14ciJjV7CAkEj1PY4A2CH/g6tgcDWYASYJG5+4UFwlMPZI1c5X1DPo3kYRoMY2kKElWauZeJQRgUgTVZL9FmKqxdwBFzqOQ/VRQjIKX7MkbMHayF2W/lc/DU8hOSdS4p0g3c6O0e3T2DwCDKYl7/sOXtDqv0TXeG4A14vwB3PAZ3oA2UFkAAAAASUVORK5CYII=')
no-repeat center top;display: inline-block;width: 16px;height: 16px;}
span.arrowup {background:url('data:image/.png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAAZiS0dEAP8A/wD/oL2nkwAAAAlwSFlzAAALEwAACxMBAJqcGAAAAAd0SU1FB9kMBxIQIM/Md3gAAAAZdEVYdENvbW1lbnQAQ3JlYXRlZCB3aXRoIEdJTVBXgQ4XAAAAg0lEQVQ4y71SywqAMAzLHiooHhQv+v8/qOe5eemgFOfcBAM9jJK0XQKkofA39FeS+ioQagRMoUAPoGXDfVzbksApTtKs5wE4AA29Xc4287DVgIz/I5FjTaUuHXQOF5Gwd5MXQeIiPpebVZBTtaXOCS9rL/mLGUBXG3clrNUl8VaClCRf1DAufSmOL44AAAAASUVORK5CYII=')
no-repeat center top;display: inline-block;width: 16px;height: 16px;}
span.company {background:url('data:image/.png;base64,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')
no-repeat center top;display: inline-block;width: 90px;height: 90px;}
span.oodle1 {background:url('data:image/.png;base64,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')
no-repeat center top;display: inline-block;width: 264px;height: 113px;}
span.oodle140 {background:url('data:image/.png;base64,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')
no-repeat center top;display: inline-block;width: 140px;height: 54px;}
span.oodle140shad {background:url('data:image/.png;base64,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')
no-repeat center top;display: inline-block;width: 140px;height: 60px;}
span.oodle210 {background:url('data:image/.png;base64,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')
no-repeat center top;display: inline-block;width: 210px;height: 81px;}
span.oodle210shad {background:url('data:image/.png;base64,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')
no-repeat center top;display: inline-block;width: 210px;height: 90px;}
span.product {background:url('data:image/.png;base64,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')
no-repeat center top;display: inline-block;width: 210px;height: 81px;}
span.seven_ratio_chart {background:url('data:image/.png;base64,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')
no-repeat center top;display: inline-block;width: 900px;height: 320px;}
span.seven_speed_chart {background:url('data:image/.png;base64,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')
no-repeat center top;display: inline-block;width: 900px;height: 320px;}
span.smallproduct {background:url('data:image/.png;base64,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')
no-repeat center top;display: inline-block;width: 140px;height: 54px;}
span.t {background:url('data:image/.png;base64,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')
no-repeat center top;display: inline-block;width: 141px;height: 60px;}
span.arrowleft {background:url('data:image/.png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAAZiS0dEAP8A/wD/oL2nkwAAAAlwSFlzAAALEwAACxMBAJqcGAAAAAd0SU1FB9kMBxIPGsSaoFQAAAAZdEVYdENvbW1lbnQAQ3JlYXRlZCB3aXRoIEdJTVBXgQ4XAAAAiElEQVQ4y72TwQ6DIBAFZxFiUtN48dL+/w/q2Wova0JWqEATX8IFssOwAOQj3B33b5EA3qz7GrADghYNrXaDQmzewFwCeGTmdx1FJt5obxHgdBz3o7GjFtn3sF2Z9EY7Hn3J3a+R7rFj3GS5MhCgU8jHGFQ98SewJADFkUQvmjLVAkLij7xygC/RzR+h+Jt0lwAAAABJRU5ErkJggg==')
no-repeat center top;display: inline-block;width: 16px;height: 16px;}
span.arrowright {background:url('data:image/.png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAAZiS0dEAP8A/wD/oL2nkwAAAAlwSFlzAAALEwAACxMBAJqcGAAAAAd0SU1FB9kMBxINKD57k1YAAAAZdEVYdENvbW1lbnQAQ3JlYXRlZCB3aXRoIEdJTVBXgQ4XAAAAm0lEQVQ4y51T0QrDMAg83cJCm76MvrT//4PtS2Fjy14ciJjV7CAkEj1PY4A2CH/g6tgcDWYASYJG5+4UFwlMPZI1c5X1DPo3kYRoMY2kKElWauZeJQRgUgTVZL9FmKqxdwBFzqOQ/VRQjIKX7MkbMHayF2W/lc/DU8hOSdS4p0g3c6O0e3T2DwCDKYl7/sOXtDqv0TXeG4A14vwB3PAZ3oA2UFkAAAAASUVORK5CYII=')
no-repeat center top;display: inline-block;width: 16px;height: 16px;}
span.arrowup {background:url('data:image/.png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAAZiS0dEAP8A/wD/oL2nkwAAAAlwSFlzAAALEwAACxMBAJqcGAAAAAd0SU1FB9kMBxIQIM/Md3gAAAAZdEVYdENvbW1lbnQAQ3JlYXRlZCB3aXRoIEdJTVBXgQ4XAAAAg0lEQVQ4y71SywqAMAzLHiooHhQv+v8/qOe5eemgFOfcBAM9jJK0XQKkofA39FeS+ioQagRMoUAPoGXDfVzbksApTtKs5wE4AA29Xc4287DVgIz/I5FjTaUuHXQOF5Gwd5MXQeIiPpebVZBTtaXOCS9rL/mLGUBXG3clrNUl8VaClCRf1DAufSmOL44AAAAASUVORK5CYII=')
no-repeat center top;display: inline-block;width: 16px;height: 16px;}
span.company {background:url('data:image/.png;base64,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')
no-repeat center top;display: inline-block;width: 90px;height: 90px;}
span.smallproduct {background:url('data:image/.png;base64,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')
no-repeat center top;display: inline-block;width: 140px;height: 54px;}
span.product {background:url('data:image/.png;base64,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')
no-repeat center top;display: inline-block;width: 210px;height: 81px;}
span.white_pixel {background:url('data:image/.jpg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQH/2wBDAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQH/wAARCAABAAEDASIAAhEBAxEB/8QAFQABAQAAAAAAAAAAAAAAAAAAAAr/xAAUEAEAAAAAAAAAAAAAAAAAAAAA/8QAFAEBAAAAAAAAAAAAAAAAAAAAAP/EABQRAQAAAAAAAAAAAAAAAAAAAAD/2gAMAwEAAhEDEQA/AL+AAf/Z')
no-repeat center top;display: inline-block;width: 1px;height: 1px;}
</style>
<script>
function sysinit() {
var h = document.location.hash;if (h)
show(h.slice(1));
else
show('index.html');
window.onpopstate = function(event) { if (!anchoring) { show_raw(event.state); } }
window.onclick = HandleClick;
document.getElementById('searchbox').addEventListener('input', full_text_search);
document.getElementById('sidebar_b1').style.backgroundColor = '#CCC';}
var anchoring=false;
function show_raw(id)
{
if(window.themenu) {
window.themenu.style.visibility='hidden';
window.themenu = undefined;
}
if (window.active_article)
window.active_article.style.display = 'none';
window.active_article = document.getElementById(id);
window.active_article.style.display = 'block';
document.getElementById('sys_main').scrollTop = 0;
}function show(id,anchor){show_raw(id);
if (anchor) { anchoring=true; document.location += '#'+anchor; anchoring=false; }
window.history.pushState(id,id);
}
function IsClass(foo,bar) { return foo && foo.classList != undefined && foo.classList.contains(bar); }
function HandleClick(e, menuname)
{if(!e) {var e = window.e;}
if(window.event) {e.cancelBubble=true;} else {e.stopPropagation();}
var whichone = undefined;
if(menuname)
{
whichone = document.getElementById(menuname);
}
if(window.themenu)
{
if (whichone && (whichone.id == window.themenu.id))
{
whichone = undefined;
}
window.themenu.style.visibility='hidden';
}
window.themenu = whichone;
if(window.themenu)
{
window.themenu.style.visibility = 'visible';
}
imagetarget = e.target;
if(!imagetarget) {imagetarget = e.srcElement;}
if(imagetarget.classList.contains('TOCGroup'))
{
nested = imagetarget;
if( nested && !IsClass(nested, 'TOCItem')) {nested = nested.nextSibling;}
if( nested && !IsClass(nested, 'TOCItem')) {nested = nested.nextSibling;}
if( nested && !IsClass(nested, 'TOCItem')) {nested = nested.nextSibling;}
if( nested && !IsClass(nested, 'TOCItem')) {nested = nested.nextSibling;}
if(!nested || !IsClass(nested, 'TOCItem')) {nested = imagetarget.parentNode;}
if( nested && !IsClass(nested, 'TOCItem')) {nested = nested.nextSibling;}
if( nested && !IsClass(nested, 'TOCItem')) {nested = nested.nextSibling;}
if( nested && !IsClass(nested, 'TOCItem')) {nested = nested.nextSibling;}
if( nested && !IsClass(nested, 'TOCItem')) {nested = nested.nextSibling;}
if( nested && IsClass(nested, 'TOCItem'))
{
if(nested.style.display=='none')
{
nested.style.display='';
imagetarget.src='openbook_icon.png';
}
else
{
nested.style.display='none';
imagetarget.src='closedbook_icon.png';
}
}
}
};
function Sidebar(name,butt)
{
var q,buttonlist;
q=document.getElementById('SysContents'); if (q) q.style.display = 'none';
q=document.getElementById('SysIndex' ); if (q) q.style.display = 'none';
q=document.getElementById('SysSearch' ); if (q) q.style.display = 'none';
buttonlist = document.getElementsByClassName('systablink');
for (var i=0; i < buttonlist.length; ++i) {
buttonlist[i].style.backgroundColor = '';
}
if (butt && butt.style)
butt.style.backgroundColor = '#CCC';
document.getElementById(name).style.display = 'block';
}
function SysHandleClick(e)
{
imagetarget = e.target;
if(!imagetarget){imagetarget = e.srcElement;}
if(IsClass(imagetarget, 'sysTOCGroup')) {
nested = imagetarget;
if( nested && !IsClass(nested, 'sysTOCItem')) {nested = nested.nextSibling;}
if( nested && !IsClass(nested, 'sysTOCItem')) {nested = nested.nextSibling;}
if( nested && !IsClass(nested, 'sysTOCItem')) {nested = nested.nextSibling;}
if( nested && !IsClass(nested, 'sysTOCItem')) {nested = nested.nextSibling;}
if(!nested || !IsClass(nested, 'sysTOCItem')) {nested = nested.nextSibling;}
if( nested && !IsClass(nested, 'sysTOCItem')) {nested = nested.nextSibling;}
if( nested && !IsClass(nested, 'sysTOCItem')) {nested = nested.nextSibling;}
if( nested && !IsClass(nested, 'sysTOCItem')) {nested = nested.nextSibling;}
if( nested && !IsClass(nested, 'sysTOCItem')) {nested = nested.nextSibling;}
if( nested && IsClass(nested, 'sysTOCItem')) {
if(nested.style.display=='none'){
nested.style.display='';
imagetarget.className='openbook_icon sysTOCGroup';
}else{
nested.style.display='none';
imagetarget.className='closedbook_icon sysTOCGroup';
}
}
}
e.preventDefault();
}
var initialized=false;
// a mapping from word numbers to strings
var word_for_number = [];
function initialize_search()
{
for (var word in word_dictionary) {
word_for_number[word_dictionary[word]] = word;
}
}
function full_text_search(ev)
{
const max_results = 1000;
var matches = null;
var v = ev.target.value;
if (v == 'Search...') return;
if (initialized == false) {
initialized = true;
initialize_search();
}
var failed = false;
if (v=='')
failed = true;
else
v = v.toLowerCase();
// search is an array of word numbers followed by a final string word
var word=null;
var last_word_numbers = [];
var exact_word=null;
var words_text = v.split(' ');
var words_num = [];
for (var i=0; i < words_text.length-1; ++i) {
if (words_text[i] != '') {
var n = word_dictionary[words_text[i]];
if (n == null) {
failed = true;
break;
}
words_num.push(n);
}
}
if (words_text.length == 0)
failed = true;
if (!failed) {
word = words_text[words_text.length-1];
if (word != '') {
var firstchar = word.charCodeAt(0);
var possible_words=[];
if (firstchar < 256)
possible_words = firstchar_list[firstchar];
for (var i=0; i < possible_words.length; ++i) {
var word_str = word_for_number[possible_words[i]];
if (word_str.startsWith(word)) {
last_word_numbers.push(possible_words[i]);
if (word_str == word)
exact_word = possible_words[i];
}
}
if (last_word_numbers.length == 0)
failed = true;
}
}
// if there are exact matches for the first word, force those through the existing path
if (exact_word != null && words_num.length == 0) {
words_num.push(exact_word);
last_word_numbers = null;
}
if (last_word_numbers && last_word_numbers.length == 0)
last_word_numbers = null;
if (words_num.length == 0 && last_word_numbers == null)
failed = true;
if (!failed) {
var pages = [];
if (words_num.length == 0) {
if (last_word_numbers) {
var potential_words = [];
for (i=0; i < last_word_numbers.length; ++i)
potential_words.push(word_for_number[last_word_numbers[i]]);
matches = potential_words.join('<br>');
matches = '<b>Matching words:</b><br><i>' + matches + '</i>';
} else {
failed = true;
}
} else if (words_num.length == 1) {
if (last_word_numbers) {
// handle phrases of length 1+
pages = {};
for (i=0; i < last_word_numbers.length; ++i) {
var wi = word_index[last_word_numbers[i]];
var places = wi[words_num[0]];
if (places != null) {
for (j=0; j < places.length; ++j)
pages[places[j][0]] = true;
}
}
pages = Object.keys(pages);
} else {
// handle phrases of length 1
pages = {};
var wi = word_index[words_num[0]];
if (wi != null) {
for (var second in wi) {
var places = wi[second];
for (var i=0; i < places.length; ++i)
pages[places[i][0]] = true;
}
}
pages = Object.keys(pages);
}
} else {
// start looking for bigrams for the first pair of words
var wi = word_index[words_num[1]];
var places = wi[words_num[0]];
if (places == null)
failed = true;
else {
var candidates = [];
for (var i=0; i < places.length; ++i)
candidates.push(places[i]);
// now, for each succeeding pair of words, check if any candidates are extended
for (var off=2; off < words_num.length; ++off) {
wi = word_index[words_num[off]];
places = wi[words_num[off-1]];
if (places == null || places.length == 0) {
// this bigram does not appear anywhere in the file, so bail
failed = true;
break;
}
// inefficiently we copy the candidates each time to keep the code simpler
var extended_candidates = [];
for (var i=0; i < candidates.length; ++i) {
for (var k=0; k < places.length; ++k) {
if (candidates[i][0] == places[k][0]) { // same page
if (candidates[i][1]+off-1 == places[k][1]) { // word index aligns
extended_candidates.push(candidates[i]);
break; // stop searching k, we found it
}
}
}
}
candidates = extended_candidates;
if (candidates.length == 0)
break;
}
}
if (!failed && last_word_numbers) {
// now check if the last word matches any of these
var extended_candidates = [];
var last_full_word = words_num[words_num.length-1];
for (i=0; i < candidates.length; ++i) {
var desired_offset = candidates[i][1] + words_num.length - 1;
match_search:
for (var j=0; j < last_word_numbers.length; ++j) {
var wi = word_index[last_word_numbers[j]];
var places = wi[last_full_word];
if (places == null || places.length == 0)
continue;
for (var k=0; k < places.length; ++k) {
if (candidates[i][0] == places[k][0]) {
if (desired_offset == places[k][1]) {
extended_candidates.push(candidates[i]);
break match_search;
}
}
}
}
}
candidates = extended_candidates;
}
if (!failed) {
// dedupe
pages = {};
for (var i=0; i < candidates.length; ++i)
pages[candidates[i][0]] = true;
pages = Object.keys(pages);
}
}
if (!failed && pages.length != 0 && matches == null) {
// convert from page numbers to page names
for (var i=0; i < pages.length; ++i)
pages[i] = [ page_name[pages[i]], page_list[pages[i]] ];
pages.sort();
for (var i=0; i < pages.length; ++i)
pages[i] = '<a href=\'javascript:show("' + pages[i][1] + '")\'>' + pages[i][0] + '</a>';
matches = pages.join('<br>\n', max_results);
matches = '<b>Matching pages:</b><br>\n' + matches;
if (pages.length > max_results)
matches += '<i>...additional matches omitted</i>';
}
}
if (matches == null)
matches = '<i>...none...</i>';
document.getElementById('SysSearch').innerHTML = matches;
Sidebar('SysSearch', ev.target.value);
}</script>
</head>
<body onload="sysinit();">
<nav class='sidebar' style='border:1px solid; padding-right:3px; margin-right:3px;'>
<button class='systablink' onclick='Sidebar("SysContents", this)' id='sidebar_b1'>Contents</button><button class='systablink' onclick='Sidebar("SysIndex" , this)'>Index</button><input class='systablink' type=text id=searchbox value='Search...' style='width:5em; margin-left:1em;' onfocus='this.select();'></input><div class='sidebar_innards' id = 'SysContents'>
<ul class='sysTree sysTOC'>
<li><span class='topic_icon'></span> <a href="javascript:show('index.html')" style='cursor:pointer;'>Welcome to Oodle</a></li>
<li><span class='closedbook_icon sysTOCGroup' onclick="SysHandleClick(event,null);return false"></span> <a href="javascript:show('Oodle_About.html')" style='cursor:pointer;'>About Oodle</a>
<ul class='sysTree sysTOCItem' style='display:none;'>
<li><span class='topic_icon'></span> <a href="javascript:show('Oodle_About_Index.html')" style='cursor:pointer;'>Index of Abouts</a></li>
<li><span class='topic_icon'></span> <a href="javascript:show('Oodle_About_ozip.html')" style='cursor:pointer;'>About Oodle ozip</a></li>
<li><span class='closedbook_icon sysTOCGroup' onclick="SysHandleClick(event,null);return false"></span> <a href="javascript:show('Oodle_About_Platforms.html')" style='cursor:pointer;'>About Oodle on Platforms</a>
<ul class='sysTree sysTOCItem' style='display:none;'>
<li><span class='closedbook_icon sysTOCGroup' onclick="SysHandleClick(event,null);return false"></span> <a href="javascript:show('Oodle_About_Windows.html')" style='cursor:pointer;'>About Oodle on Windows</a>
<ul class='sysTree sysTOCItem' style='display:none;'>
<li><span class='topic_icon'></span> <a href="javascript:show('Oodle_About_Windows_UWP.html')" style='cursor:pointer;'>About Oodle on Windows UWP</a></li>
</ul>
</li>
<li><span class='topic_icon'></span> <a href="javascript:show('Oodle_About_PS4.html')" style='cursor:pointer;'>About Oodle on PS4</a></li>
<li><span class='topic_icon'></span> <a href="javascript:show('Oodle_About_Switch.html')" style='cursor:pointer;'>About Oodle on Nintendo Switch</a></li>
<li><span class='topic_icon'></span> <a href="javascript:show('Oodle_About_Mac.html')" style='cursor:pointer;'>About Oodle on Mac</a></li>
<li><span class='topic_icon'></span> <a href="javascript:show('Oodle_About_XboxOne.html')" style='cursor:pointer;'>About Oodle on Xbox One</a></li>
<li><span class='topic_icon'></span> <a href="javascript:show('Oodle_About_Linux.html')" style='cursor:pointer;'>About Oodle on Linux</a></li>
<li><span class='topic_icon'></span> <a href="javascript:show('Oodle_About_IOS.html')" style='cursor:pointer;'>About Oodle on IOS</a></li>
<li><span class='topic_icon'></span> <a href="javascript:show('Oodle_About_Android.html')" style='cursor:pointer;'>About Oodle on Android</a></li>
<li><span class='topic_icon'></span> <a href="javascript:show('Oodle_About_WASM.html')" style='cursor:pointer;'>About Oodle on WASM</a></li>
</ul>
</li>
<li><span class='topic_icon'></span> <a href="javascript:show('Oodle_About_Job_Threading_Plugins.html')" style='cursor:pointer;'>About Oodle Job Threading Plugins</a></li>
<li><span class='topic_icon'></span> <a href="javascript:show('Oodle_About_Compression_Scratch_Mem.html')" style='cursor:pointer;'>About Compression Scratch Memory</a></li>
</ul>
</li>
<li><span class='closedbook_icon sysTOCGroup' onclick="SysHandleClick(event,null);return false"></span> <a href="javascript:show('Oodle_FAQ.html')" style='cursor:pointer;'>Frequently Asked Questions</a>
<ul class='sysTree sysTOCItem' style='display:none;'>
<li><span class='topic_icon'></span> <a href="javascript:show('Oodle_FAQ_OodleLZ_Decompress_Failed.html')" style='cursor:pointer;'>FAQ: OodleLZ_Decompress is failing how do I diagnose it?</a></li>
<li><span class='topic_icon'></span> <a href="javascript:show('Oodle_FAQ_UseOodleWithNoAllocator.html')" style='cursor:pointer;'>FAQ: How do I use Oodle with no allocator?</a></li>
<li><span class='topic_icon'></span> <a href="javascript:show('Oodle_FAQ_limit_encoder_memory_use.html')" style='cursor:pointer;'>FAQ: How do I limit the encoder memory use?</a></li>
<li><span class='topic_icon'></span> <a href="javascript:show('Oodle_FAQ_MemoryUse.html')" style='cursor:pointer;'>FAQ: How much memory do the Oodle compressors use ?</a></li>
<li><span class='topic_icon'></span> <a href="javascript:show('Oodle_FAQ_deprecated_compressors.html')" style='cursor:pointer;'>FAQ: What are the Oodle deprecated compressors ?</a></li>
<li><span class='topic_icon'></span> <a href="javascript:show('Oodle_FAQ_data_compatibility.html')" style='cursor:pointer;'>FAQ: Do new Oodle versions break data compatibility ?</a></li>
<li><span class='topic_icon'></span> <a href="javascript:show('Oodle_FAQ_vs_other_compressors.html')" style='cursor:pointer;'>FAQ: How does OodleLZ compare with other compressors ?</a></li>
<li><span class='topic_icon'></span> <a href="javascript:show('Oodle_FAQ_WhichLZ.html')" style='cursor:pointer;'>FAQ: Which OodleLZ should I use?</a></li>
<li><span class='topic_icon'></span> <a href="javascript:show('Oodle_FAQ_LZCompareTable.html')" style='cursor:pointer;'>FAQ: What are the speeds and ratios of the OodleLZ compressors and levels?</a></li>
<li><span class='topic_icon'></span> <a href="javascript:show('Oodle_FAQ_DecompressingToGraphicsMemoryIsSlow.html')" style='cursor:pointer;'>FAQ: How do I decompress to graphics memory quickly?</a></li>
<li><span class='topic_icon'></span> <a href="javascript:show('Oodle_FAQ_HowDoIGetOodleLogs.html')" style='cursor:pointer;'>FAQ: How do I get the Oodle logs?</a></li>
<li><span class='topic_icon'></span> <a href="javascript:show('Oodle_FAQ_BadWriteContents.html')" style='cursor:pointer;'>FAQ: I write a file with IOQ but the contents are garbage?</a></li>
<li><span class='topic_icon'></span> <a href="javascript:show('Oodle_FAQ_OutOfHandles.html')" style='cursor:pointer;'>FAQ: I ran out of OodleHandle table slots; what do I do?</a></li>
<li><span class='topic_icon'></span> <a href="javascript:show('Oodle_FAQ_S64_And_SINTa.html')" style='cursor:pointer;'>FAQ: What is SINTa? How do I load files bigger than 2 GB?</a></li>
<li><span class='topic_icon'></span> <a href="javascript:show('Oodle_FAQ_FindingIOProblems.html')" style='cursor:pointer;'>FAQ: My Files aren't loading right and I can't track it down</a></li>
</ul>
</li>
<li><span class='closedbook_icon sysTOCGroup' onclick="SysHandleClick(event,null);return false"></span> <a href="javascript:show('OodleCoreAPI.html')" style='cursor:pointer;'>Oodle2 Core API Documentation</a>
<ul class='sysTree sysTOCItem' style='display:none;'>
<li><span class='closedbook_icon sysTOCGroup' onclick="SysHandleClick(event,null);return false"></span> <a href="javascript:show('OodleAPI_Base.html')" style='cursor:pointer;'>Core Base</a>
<ul class='sysTree sysTOCItem' style='display:none;'>
<li><span class='closedbook_icon sysTOCGroup' onclick="SysHandleClick(event,null);return false"></span> <a style='cursor:pointer;'>Defines</a>
<ul class='sysTree sysTOCItem' style='display:none;'>
<li><span class='topic_icon'></span> <a href="javascript:show('OODLE_MALLOC_MINIMUM_ALIGNMENT.html')" style='cursor:pointer;'>OODLE_MALLOC_MINIMUM_ALIGNMENT</a></li>
<li><span class='topic_icon'></span> <a href="javascript:show('OODLE_JOB_MAX_DEPENDENCIES.html')" style='cursor:pointer;'>OODLE_JOB_MAX_DEPENDENCIES</a></li>
<li><span class='topic_icon'></span> <a href="javascript:show('OODLE_JOB_NULL_HANDLE.html')" style='cursor:pointer;'>OODLE_JOB_NULL_HANDLE</a></li>
<li><span class='topic_icon'></span> <a href="javascript:show('t_fp_Oodle_Job.html')" style='cursor:pointer;'>t_fp_Oodle_Job</a></li>
<li><span class='topic_icon'></span> <a href="javascript:show('OODLE_HEADER_VERSION.html')" style='cursor:pointer;'>OODLE_HEADER_VERSION</a></li>
<li><span class='topic_icon'></span> <a href="javascript:show('OodleNetworkVersion.html')" style='cursor:pointer;'>OodleNetworkVersion</a></li>
</ul>
</li>
<li><span class='closedbook_icon sysTOCGroup' onclick="SysHandleClick(event,null);return false"></span> <a style='cursor:pointer;'>Enumerants</a>
<ul class='sysTree sysTOCItem' style='display:none;'>
<li><span class='topic_icon'></span> <a href="javascript:show('Oodle_UsageWarnings.html')" style='cursor:pointer;'>Oodle_UsageWarnings</a></li>
</ul>
</li>
<li><span class='closedbook_icon sysTOCGroup' onclick="SysHandleClick(event,null);return false"></span> <a style='cursor:pointer;'>Structures</a>
<ul class='sysTree sysTOCItem' style='display:none;'>
<li><span class='topic_icon'></span> <a href="javascript:show('OodleConfigValues.html')" style='cursor:pointer;'>OodleConfigValues</a></li>
</ul>
</li>
<li><span class='closedbook_icon sysTOCGroup' onclick="SysHandleClick(event,null);return false"></span> <a style='cursor:pointer;'>Functions</a>
<ul class='sysTree sysTOCItem' style='display:none;'>
<li><span class='topic_icon'></span> <a href="javascript:show('Oodle_GetConfigValues.html')" style='cursor:pointer;'>Oodle_GetConfigValues</a></li>
<li><span class='topic_icon'></span> <a href="javascript:show('Oodle_SetConfigValues.html')" style='cursor:pointer;'>Oodle_SetConfigValues</a></li>
<li><span class='topic_icon'></span> <a href="javascript:show('Oodle_SetUsageWarnings.html')" style='cursor:pointer;'>Oodle_SetUsageWarnings</a></li>
<li><span class='topic_icon'></span> <a href="javascript:show('Oodle_CheckVersion.html')" style='cursor:pointer;'>Oodle_CheckVersion</a></li>
<li><span class='topic_icon'></span> <a href="javascript:show('Oodle_LogHeader.html')" style='cursor:pointer;'>Oodle_LogHeader</a></li>
</ul>
</li>
<li><span class='closedbook_icon sysTOCGroup' onclick="SysHandleClick(event,null);return false"></span> <a style='cursor:pointer;'>Typedefs</a>
<ul class='sysTree sysTOCItem' style='display:none;'>
<li><span class='topic_icon'></span> <a href="javascript:show('t_OodleFPVoidVoid.html')" style='cursor:pointer;'>t_OodleFPVoidVoid</a></li>
<li><span class='topic_icon'></span> <a href="javascript:show('t_OodleFPVoidVoidStar.html')" style='cursor:pointer;'>t_OodleFPVoidVoidStar</a></li>
</ul>
</li>
</ul>
</li>
<li><span class='closedbook_icon sysTOCGroup' onclick="SysHandleClick(event,null);return false"></span> <a href="javascript:show('OodleAPI_OodleCore_Plugins.html')" style='cursor:pointer;'>Core plugins</a>
<ul class='sysTree sysTOCItem' style='display:none;'>
<li><span class='closedbook_icon sysTOCGroup' onclick="SysHandleClick(event,null);return false"></span> <a style='cursor:pointer;'>Functions</a>
<ul class='sysTree sysTOCItem' style='display:none;'>
<li><span class='topic_icon'></span> <a href="javascript:show('OodleCore_Plugins_SetAllocators.html')" style='cursor:pointer;'>OodleCore_Plugins_SetAllocators</a></li>
<li><span class='topic_icon'></span> <a href="javascript:show('OodleCore_Plugins_SetJobSystem.html')" style='cursor:pointer;'>OodleCore_Plugins_SetJobSystem</a></li>
<li><span class='topic_icon'></span> <a href="javascript:show('OodleCore_Plugins_SetJobSystemAndCount.html')" style='cursor:pointer;'>OodleCore_Plugins_SetJobSystemAndCount</a></li>
<li><span class='topic_icon'></span> <a href="javascript:show('OodleCore_Plugins_SetPrintf.html')" style='cursor:pointer;'>OodleCore_Plugins_SetPrintf</a></li>
<li><span class='topic_icon'></span> <a href="javascript:show('OodleCore_Plugins_SetAssertion.html')" style='cursor:pointer;'>OodleCore_Plugins_SetAssertion</a></li>
</ul>
</li>
<li><span class='closedbook_icon sysTOCGroup' onclick="SysHandleClick(event,null);return false"></span> <a style='cursor:pointer;'>Typedefs</a>
<ul class='sysTree sysTOCItem' style='display:none;'>
<li><span class='topic_icon'></span> <a href="javascript:show('t_fp_OodleCore_Plugin_MallocAligned.html')" style='cursor:pointer;'>t_fp_OodleCore_Plugin_MallocAligned</a></li>
<li><span class='topic_icon'></span> <a href="javascript:show('t_fp_OodleCore_Plugin_Free.html')" style='cursor:pointer;'>t_fp_OodleCore_Plugin_Free</a></li>
<li><span class='topic_icon'></span> <a href="javascript:show('t_fp_OodleCore_Plugin_RunJob.html')" style='cursor:pointer;'>t_fp_OodleCore_Plugin_RunJob</a></li>
<li><span class='topic_icon'></span> <a href="javascript:show('t_fp_OodleCore_Plugin_WaitJob.html')" style='cursor:pointer;'>t_fp_OodleCore_Plugin_WaitJob</a></li>
<li><span class='topic_icon'></span> <a href="javascript:show('t_fp_OodleCore_Plugin_Printf.html')" style='cursor:pointer;'>t_fp_OodleCore_Plugin_Printf</a></li>
<li><span class='topic_icon'></span> <a href="javascript:show('t_fp_OodleCore_Plugin_DisplayAssertion.html')" style='cursor:pointer;'>t_fp_OodleCore_Plugin_DisplayAssertion</a></li>
</ul>
</li>
</ul>
</li>
<li><span class='closedbook_icon sysTOCGroup' onclick="SysHandleClick(event,null);return false"></span> <a href="javascript:show('OodleAPI_LZ.html')" style='cursor:pointer;'>Core LZ compression</a>
<ul class='sysTree sysTOCItem' style='display:none;'>
<li><span class='topic_icon'></span> <a href="javascript:show('OodleLZ_About.html')" style='cursor:pointer;'>About OodleLZ</a></li>
<li><span class='topic_icon'></span> <a href="javascript:show('OodleLZ_About_ThreadPhasedDecode.html')" style='cursor:pointer;'>About OodleLZ ThreadPhased Decode</a></li>
<li><span class='topic_icon'></span> <a href="javascript:show('OodleLZ_About_Hydra.html')" style='cursor:pointer;'>About OodleLZ Hydra</a></li>
<li><span class='closedbook_icon sysTOCGroup' onclick="SysHandleClick(event,null);return false"></span> <a href="javascript:show('OodleAPI_LZ_Compressors.html')" style='cursor:pointer;'>OodleAPI_LZ_Compressors</a>
<ul class='sysTree sysTOCItem' style='display:none;'>
<li><span class='closedbook_icon sysTOCGroup' onclick="SysHandleClick(event,null);return false"></span> <a style='cursor:pointer;'>Defines</a>
<ul class='sysTree sysTOCItem' style='display:none;'>
<li><span class='topic_icon'></span> <a href="javascript:show('OODLE_ALLOW_DEPRECATED_COMPRESSORS.html')" style='cursor:pointer;'>OODLE_ALLOW_DEPRECATED_COMPRESSORS</a></li>
<li><span class='topic_icon'></span> <a href="javascript:show('OODLELZ_LOCALDICTIONARYSIZE_MAX.html')" style='cursor:pointer;'>OODLELZ_LOCALDICTIONARYSIZE_MAX</a></li>
<li><span class='topic_icon'></span> <a href="javascript:show('OODLELZ_SPACESPEEDTRADEOFFBYTES_DEFAULT.html')" style='cursor:pointer;'>OODLELZ_SPACESPEEDTRADEOFFBYTES_DEFAULT</a></li>
<li><span class='topic_icon'></span> <a href="javascript:show('OODLELZ_BLOCK_LEN.html')" style='cursor:pointer;'>OODLELZ_BLOCK_LEN</a></li>
<li><span class='topic_icon'></span> <a href="javascript:show('OODLELZ_BLOCK_MAX_COMPLEN.html')" style='cursor:pointer;'>OODLELZ_BLOCK_MAX_COMPLEN</a></li>
<li><span class='topic_icon'></span> <a href="javascript:show('OODLELZ_QUANTUM_LEN.html')" style='cursor:pointer;'>OODLELZ_QUANTUM_LEN</a></li>
<li><span class='topic_icon'></span> <a href="javascript:show('OODLELZ_FAILED.html')" style='cursor:pointer;'>OODLELZ_FAILED</a></li>
<li><span class='topic_icon'></span> <a href="javascript:show('OODLELZ_SCRATCH_MEM_NO_BOUND.html')" style='cursor:pointer;'>OODLELZ_SCRATCH_MEM_NO_BOUND</a></li>
</ul>
</li>
<li><span class='closedbook_icon sysTOCGroup' onclick="SysHandleClick(event,null);return false"></span> <a style='cursor:pointer;'>Enumerants</a>
<ul class='sysTree sysTOCItem' style='display:none;'>
<li><span class='topic_icon'></span> <a href="javascript:show('OodleLZ_Verbosity.html')" style='cursor:pointer;'>OodleLZ_Verbosity</a></li>
<li><span class='topic_icon'></span> <a href="javascript:show('OodleLZ_Compressor.html')" style='cursor:pointer;'>OodleLZ_Compressor</a></li>
<li><span class='topic_icon'></span> <a href="javascript:show('OodleLZ_PackedRawOverlap.html')" style='cursor:pointer;'>OodleLZ_PackedRawOverlap</a></li>
<li><span class='topic_icon'></span> <a href="javascript:show('OodleLZ_CheckCRC.html')" style='cursor:pointer;'>OodleLZ_CheckCRC</a></li>
<li><span class='topic_icon'></span> <a href="javascript:show('OodleLZ_Profile.html')" style='cursor:pointer;'>OodleLZ_Profile</a></li>
<li><span class='topic_icon'></span> <a href="javascript:show('OodleDecompressCallbackRet.html')" style='cursor:pointer;'>OodleDecompressCallbackRet</a></li>
<li><span class='topic_icon'></span> <a href="javascript:show('OodleLZ_CompressionLevel.html')" style='cursor:pointer;'>OodleLZ_CompressionLevel</a></li>
<li><span class='topic_icon'></span> <a href="javascript:show('OodleLZ_Jobify.html')" style='cursor:pointer;'>OodleLZ_Jobify</a></li>
<li><span class='topic_icon'></span> <a href="javascript:show('OodleLZ_Decode_ThreadPhase.html')" style='cursor:pointer;'>OodleLZ_Decode_ThreadPhase</a></li>
<li><span class='topic_icon'></span> <a href="javascript:show('OodleLZ_FuzzSafe.html')" style='cursor:pointer;'>OodleLZ_FuzzSafe</a></li>
<li><span class='topic_icon'></span> <a href="javascript:show('OodleLZSeekTable_Flags.html')" style='cursor:pointer;'>OodleLZSeekTable_Flags</a></li>
<li><span class='topic_icon'></span> <a href="javascript:show('OodleLZ_CompressScratchMemBoundType.html')" style='cursor:pointer;'>OodleLZ_CompressScratchMemBoundType</a></li>
</ul>
</li>
<li><span class='closedbook_icon sysTOCGroup' onclick="SysHandleClick(event,null);return false"></span> <a style='cursor:pointer;'>Structures</a>
<ul class='sysTree sysTOCItem' style='display:none;'>
<li><span class='topic_icon'></span> <a href="javascript:show('OodleLZ_CompressOptions.html')" style='cursor:pointer;'>OodleLZ_CompressOptions</a></li>
<li><span class='topic_icon'></span> <a href="javascript:show('OodleLZ_DecodeSome_Out.html')" style='cursor:pointer;'>OodleLZ_DecodeSome_Out</a></li>
<li><span class='topic_icon'></span> <a href="javascript:show('OodleLZDecoder.html')" style='cursor:pointer;'>OodleLZDecoder</a></li>
<li><span class='topic_icon'></span> <a href="javascript:show('OodleLZ_SeekTable.html')" style='cursor:pointer;'>OodleLZ_SeekTable</a></li>
</ul>
</li>
<li><span class='closedbook_icon sysTOCGroup' onclick="SysHandleClick(event,null);return false"></span> <a style='cursor:pointer;'>Functions</a>
<ul class='sysTree sysTOCItem' style='display:none;'>
<li><span class='topic_icon'></span> <a href="javascript:show('OodleLZ_Compress.html')" style='cursor:pointer;'>OodleLZ_Compress</a></li>
<li><span class='topic_icon'></span> <a href="javascript:show('OodleLZ_Decompress.html')" style='cursor:pointer;'>OodleLZ_Decompress</a></li>
<li><span class='topic_icon'></span> <a href="javascript:show('OodleLZDecoder_Create.html')" style='cursor:pointer;'>OodleLZDecoder_Create</a></li>
<li><span class='topic_icon'></span> <a href="javascript:show('OodleLZDecoder_MemorySizeNeeded.html')" style='cursor:pointer;'>OodleLZDecoder_MemorySizeNeeded</a></li>
<li><span class='topic_icon'></span> <a href="javascript:show('OodleLZ_ThreadPhased_BlockDecoderMemorySizeNeeded.html')" style='cursor:pointer;'>OodleLZ_ThreadPhased_BlockDecoderMemorySizeNeeded</a></li>
<li><span class='topic_icon'></span> <a href="javascript:show('OodleLZDecoder_Destroy.html')" style='cursor:pointer;'>OodleLZDecoder_Destroy</a></li>
<li><span class='topic_icon'></span> <a href="javascript:show('OodleLZDecoder_Reset.html')" style='cursor:pointer;'>OodleLZDecoder_Reset</a></li>
<li><span class='topic_icon'></span> <a href="javascript:show('OodleLZDecoder_DecodeSome.html')" style='cursor:pointer;'>OodleLZDecoder_DecodeSome</a></li>
<li><span class='topic_icon'></span> <a href="javascript:show('OodleLZDecoder_MakeValidCircularWindowSize.html')" style='cursor:pointer;'>OodleLZDecoder_MakeValidCircularWindowSize</a></li>
<li><span class='topic_icon'></span> <a href="javascript:show('OodleLZ_MakeSeekChunkLen.html')" style='cursor:pointer;'>OodleLZ_MakeSeekChunkLen</a></li>
<li><span class='topic_icon'></span> <a href="javascript:show('OodleLZ_GetNumSeekChunks.html')" style='cursor:pointer;'>OodleLZ_GetNumSeekChunks</a></li>
<li><span class='topic_icon'></span> <a href="javascript:show('OodleLZ_GetSeekTableMemorySizeNeeded.html')" style='cursor:pointer;'>OodleLZ_GetSeekTableMemorySizeNeeded</a></li>
<li><span class='topic_icon'></span> <a href="javascript:show('OodleLZ_FillSeekTable.html')" style='cursor:pointer;'>OodleLZ_FillSeekTable</a></li>
<li><span class='topic_icon'></span> <a href="javascript:show('OodleLZ_CreateSeekTable.html')" style='cursor:pointer;'>OodleLZ_CreateSeekTable</a></li>
<li><span class='topic_icon'></span> <a href="javascript:show('OodleLZ_FreeSeekTable.html')" style='cursor:pointer;'>OodleLZ_FreeSeekTable</a></li>
<li><span class='topic_icon'></span> <a href="javascript:show('OodleLZ_CheckSeekTableCRCs.html')" style='cursor:pointer;'>OodleLZ_CheckSeekTableCRCs</a></li>
<li><span class='topic_icon'></span> <a href="javascript:show('OodleLZ_FindSeekEntry.html')" style='cursor:pointer;'>OodleLZ_FindSeekEntry</a></li>
<li><span class='topic_icon'></span> <a href="javascript:show('OodleLZ_GetSeekEntryPackedPos.html')" style='cursor:pointer;'>OodleLZ_GetSeekEntryPackedPos</a></li>
<li><span class='topic_icon'></span> <a href="javascript:show('OodleLZ_CompressionLevel_GetName.html')" style='cursor:pointer;'>OodleLZ_CompressionLevel_GetName</a></li>
<li><span class='topic_icon'></span> <a href="javascript:show('OodleLZ_Compressor_GetName.html')" style='cursor:pointer;'>OodleLZ_Compressor_GetName</a></li>
<li><span class='topic_icon'></span> <a href="javascript:show('OodleLZ_Jobify_GetName.html')" style='cursor:pointer;'>OodleLZ_Jobify_GetName</a></li>
<li><span class='topic_icon'></span> <a href="javascript:show('OodleLZ_CompressOptions_GetDefault.html')" style='cursor:pointer;'>OodleLZ_CompressOptions_GetDefault</a></li>
<li><span class='topic_icon'></span> <a href="javascript:show('OodleLZ_CompressOptions_Validate.html')" style='cursor:pointer;'>OodleLZ_CompressOptions_Validate</a></li>
<li><span class='topic_icon'></span> <a href="javascript:show('OodleLZ_Compressor_UsesWholeBlockQuantum.html')" style='cursor:pointer;'>OodleLZ_Compressor_UsesWholeBlockQuantum</a></li>
<li><span class='topic_icon'></span> <a href="javascript:show('OodleLZ_Compressor_UsesLargeWindow.html')" style='cursor:pointer;'>OodleLZ_Compressor_UsesLargeWindow</a></li>
<li><span class='topic_icon'></span> <a href="javascript:show('OodleLZ_Compressor_CanDecodeInCircularWindow.html')" style='cursor:pointer;'>OodleLZ_Compressor_CanDecodeInCircularWindow</a></li>
<li><span class='topic_icon'></span> <a href="javascript:show('OodleLZ_Compressor_CanDecodeThreadPhased.html')" style='cursor:pointer;'>OodleLZ_Compressor_CanDecodeThreadPhased</a></li>
<li><span class='topic_icon'></span> <a href="javascript:show('OodleLZ_Compressor_CanDecodeInPlace.html')" style='cursor:pointer;'>OodleLZ_Compressor_CanDecodeInPlace</a></li>
<li><span class='topic_icon'></span> <a href="javascript:show('OodleLZ_Compressor_MustDecodeWithoutResets.html')" style='cursor:pointer;'>OodleLZ_Compressor_MustDecodeWithoutResets</a></li>
<li><span class='topic_icon'></span> <a href="javascript:show('OodleLZ_Compressor_CanDecodeFuzzSafe.html')" style='cursor:pointer;'>OodleLZ_Compressor_CanDecodeFuzzSafe</a></li>
<li><span class='topic_icon'></span> <a href="javascript:show('OodleLZ_Compressor_RespectsDictionarySize.html')" style='cursor:pointer;'>OodleLZ_Compressor_RespectsDictionarySize</a></li>
<li><span class='topic_icon'></span> <a href="javascript:show('OodleLZ_GetCompressScratchMemBound.html')" style='cursor:pointer;'>OodleLZ_GetCompressScratchMemBound</a></li>
<li><span class='topic_icon'></span> <a href="javascript:show('OodleLZ_GetCompressScratchMemBoundEx.html')" style='cursor:pointer;'>OodleLZ_GetCompressScratchMemBoundEx</a></li>
<li><span class='topic_icon'></span> <a href="javascript:show('OodleLZ_GetCompressedBufferSizeNeeded.html')" style='cursor:pointer;'>OodleLZ_GetCompressedBufferSizeNeeded</a></li>
<li><span class='topic_icon'></span> <a href="javascript:show('OodleLZ_GetDecodeBufferSize.html')" style='cursor:pointer;'>OodleLZ_GetDecodeBufferSize</a></li>
<li><span class='topic_icon'></span> <a href="javascript:show('OodleLZ_GetInPlaceDecodeBufferSize.html')" style='cursor:pointer;'>OodleLZ_GetInPlaceDecodeBufferSize</a></li>
<li><span class='topic_icon'></span> <a href="javascript:show('OodleLZ_GetCompressedStepForRawStep.html')" style='cursor:pointer;'>OodleLZ_GetCompressedStepForRawStep</a></li>
<li><span class='topic_icon'></span> <a href="javascript:show('OodleLZ_GetAllChunksCompressor.html')" style='cursor:pointer;'>OodleLZ_GetAllChunksCompressor</a></li>
<li><span class='topic_icon'></span> <a href="javascript:show('OodleLZ_GetFirstChunkCompressor.html')" style='cursor:pointer;'>OodleLZ_GetFirstChunkCompressor</a></li>
<li><span class='topic_icon'></span> <a href="javascript:show('OodleLZ_GetChunkCompressor.html')" style='cursor:pointer;'>OodleLZ_GetChunkCompressor</a></li>
</ul>
</li>
<li><span class='closedbook_icon sysTOCGroup' onclick="SysHandleClick(event,null);return false"></span> <a style='cursor:pointer;'>Typedefs</a>
<ul class='sysTree sysTOCItem' style='display:none;'>
<li><span class='topic_icon'></span> <a href="javascript:show('OodleDecompressCallback.html')" style='cursor:pointer;'>OodleDecompressCallback</a></li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
<li><span class='closedbook_icon sysTOCGroup' onclick="SysHandleClick(event,null);return false"></span> <a href="javascript:show('OodleExtAPI.html')" style='cursor:pointer;'>Oodle2 Ext API Documentation</a>
<ul class='sysTree sysTOCItem' style='display:none;'>
<li><span class='closedbook_icon sysTOCGroup' onclick="SysHandleClick(event,null);return false"></span> <a href="javascript:show('OodleXAPI_LZ.html')" style='cursor:pointer;'>OodleX LZ compression</a>
<ul class='sysTree sysTOCItem' style='display:none;'>
<li><span class='closedbook_icon sysTOCGroup' onclick="SysHandleClick(event,null);return false"></span> <a href="javascript:show('OodleXAPI_LZ_Async.html')" style='cursor:pointer;'>OodleXAPI_LZ_Async</a>
<ul class='sysTree sysTOCItem' style='display:none;'>
<li><span class='closedbook_icon sysTOCGroup' onclick="SysHandleClick(event,null);return false"></span> <a style='cursor:pointer;'>Structures</a>
<ul class='sysTree sysTOCItem' style='display:none;'>
<li><span class='topic_icon'></span> <a href="javascript:show('OodleDecompressCallback_WriteFile_Data.html')" style='cursor:pointer;'>OodleDecompressCallback_WriteFile_Data</a></li>
</ul>
</li>
<li><span class='closedbook_icon sysTOCGroup' onclick="SysHandleClick(event,null);return false"></span> <a style='cursor:pointer;'>Functions</a>
<ul class='sysTree sysTOCItem' style='display:none;'>
<li><span class='topic_icon'></span> <a href="javascript:show('OodleXLZ_Decompress_ThreadPhased_Narrow_Async.html')" style='cursor:pointer;'>OodleXLZ_Decompress_ThreadPhased_Narrow_Async</a></li>
<li><span class='topic_icon'></span> <a href="javascript:show('OodleXLZ_Decompress_Narrow_Async.html')" style='cursor:pointer;'>OodleXLZ_Decompress_Narrow_Async</a></li>
<li><span class='topic_icon'></span> <a href="javascript:show('OodleXLZ_ReadAndDecompress_Wide_Async.html')" style='cursor:pointer;'>OodleXLZ_ReadAndDecompress_Wide_Async</a></li>
<li><span class='topic_icon'></span> <a href="javascript:show('OodleXLZ_Decompress_Wide_Async.html')" style='cursor:pointer;'>OodleXLZ_Decompress_Wide_Async</a></li>
<li><span class='topic_icon'></span> <a href="javascript:show('OodleXLZ_Decompress_MakeSeekTable_Wide_Async.html')" style='cursor:pointer;'>OodleXLZ_Decompress_MakeSeekTable_Wide_Async</a></li>
<li><span class='topic_icon'></span> <a href="javascript:show('OodleXLZ_Compress_Async.html')" style='cursor:pointer;'>OodleXLZ_Compress_Async</a></li>
<li><span class='topic_icon'></span> <a href="javascript:show('OodleXLZ_Compress_Wait_GetResult.html')" style='cursor:pointer;'>OodleXLZ_Compress_Wait_GetResult</a></li>
<li><span class='topic_icon'></span> <a href="javascript:show('OodleXLZ_Compress_AsyncAndWait.html')" style='cursor:pointer;'>OodleXLZ_Compress_AsyncAndWait</a></li>
<li><span class='topic_icon'></span> <a href="javascript:show('OodleXLZ_ReadAndDecompress_Stream_Async.html')" style='cursor:pointer;'>OodleXLZ_ReadAndDecompress_Stream_Async</a></li>
<li><span class='topic_icon'></span> <a href="javascript:show('OodleXDecompressCallback_WriteFile_Data_Init.html')" style='cursor:pointer;'>OodleXDecompressCallback_WriteFile_Data_Init</a></li>
<li><span class='topic_icon'></span> <a href="javascript:show('OodleDecompressCallback_WriteFile.html')" style='cursor:pointer;'>OodleDecompressCallback_WriteFile</a></li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
<li><span class='closedbook_icon sysTOCGroup' onclick="SysHandleClick(event,null);return false"></span> <a href="javascript:show('OodleXAPI_Init.html')" style='cursor:pointer;'>OodleX Startup and Shutdown</a>
<ul class='sysTree sysTOCItem' style='display:none;'>
<li><span class='closedbook_icon sysTOCGroup' onclick="SysHandleClick(event,null);return false"></span> <a style='cursor:pointer;'>Defines</a>
<ul class='sysTree sysTOCItem' style='display:none;'>
<li><span class='topic_icon'></span> <a href="javascript:show('OODLE_WORKERS_COUNT_ALL_PHYSICAL_CORES.html')" style='cursor:pointer;'>OODLE_WORKERS_COUNT_ALL_PHYSICAL_CORES</a></li>
<li><span class='topic_icon'></span> <a href="javascript:show('OODLE_WORKERS_COUNT_ALL_HYPER_CORES.html')" style='cursor:pointer;'>OODLE_WORKERS_COUNT_ALL_HYPER_CORES</a></li>
</ul>
</li>
<li><span class='closedbook_icon sysTOCGroup' onclick="SysHandleClick(event,null);return false"></span> <a style='cursor:pointer;'>Enumerants</a>
<ul class='sysTree sysTOCItem' style='display:none;'>
<li><span class='topic_icon'></span> <a href="javascript:show('OodleX_Init_GetDefaults_DebugSystems.html')" style='cursor:pointer;'>OodleX_Init_GetDefaults_DebugSystems</a></li>
<li><span class='topic_icon'></span> <a href="javascript:show('OodleX_Init_GetDefaults_Threads.html')" style='cursor:pointer;'>OodleX_Init_GetDefaults_Threads</a></li>
<li><span class='topic_icon'></span> <a href="javascript:show('OodleX_Shutdown_LogLeaks.html')" style='cursor:pointer;'>OodleX_Shutdown_LogLeaks</a></li>
<li><span class='topic_icon'></span> <a href="javascript:show('OodleX_Shutdown_DebugBreakOnLeaks.html')" style='cursor:pointer;'>OodleX_Shutdown_DebugBreakOnLeaks</a></li>
</ul>
</li>
<li><span class='closedbook_icon sysTOCGroup' onclick="SysHandleClick(event,null);return false"></span> <a style='cursor:pointer;'>Structures</a>
<ul class='sysTree sysTOCItem' style='display:none;'>
<li><span class='topic_icon'></span> <a href="javascript:show('OodleXInitOptions.html')" style='cursor:pointer;'>OodleXInitOptions</a></li>
<li><span class='topic_icon'></span> <a href="javascript:show('OodleXConfigValues.html')" style='cursor:pointer;'>OodleXConfigValues</a></li>
</ul>
</li>
<li><span class='closedbook_icon sysTOCGroup' onclick="SysHandleClick(event,null);return false"></span> <a style='cursor:pointer;'>Functions</a>
<ul class='sysTree sysTOCItem' style='display:none;'>
<li><span class='topic_icon'></span> <a href="javascript:show('OodleX_Init_ThreadProfilerInit.html')" style='cursor:pointer;'>OodleX_Init_ThreadProfilerInit</a></li>
<li><span class='topic_icon'></span> <a href="javascript:show('OodleX_Init_GetDefaults.html')" style='cursor:pointer;'>OodleX_Init_GetDefaults</a></li>
<li><span class='topic_icon'></span> <a href="javascript:show('OodleX_Init_GetDefaults_Minimal.html')" style='cursor:pointer;'>OodleX_Init_GetDefaults_Minimal</a></li>
<li><span class='topic_icon'></span> <a href="javascript:show('OodleX_Init.html')" style='cursor:pointer;'>OodleX_Init</a></li>
<li><span class='topic_icon'></span> <a href="javascript:show('OodleX_Init_Default.html')" style='cursor:pointer;'>OodleX_Init_Default</a></li>
<li><span class='topic_icon'></span> <a href="javascript:show('OodleX_LogSystemInfo.html')" style='cursor:pointer;'>OodleX_LogSystemInfo</a></li>
<li><span class='topic_icon'></span> <a href="javascript:show('OodleX_Shutdown.html')" style='cursor:pointer;'>OodleX_Shutdown</a></li>
<li><span class='topic_icon'></span> <a href="javascript:show('OodleX_Init_NoThreads.html')" style='cursor:pointer;'>OodleX_Init_NoThreads</a></li>
<li><span class='topic_icon'></span> <a href="javascript:show('OodleX_Shutdown_NoThreads.html')" style='cursor:pointer;'>OodleX_Shutdown_NoThreads</a></li>
<li><span class='topic_icon'></span> <a href="javascript:show('OodleX_GetConfigValues.html')" style='cursor:pointer;'>OodleX_GetConfigValues</a></li>
<li><span class='topic_icon'></span> <a href="javascript:show('OodleX_SetConfigValues.html')" style='cursor:pointer;'>OodleX_SetConfigValues</a></li>
</ul>
</li>
</ul>
</li>
<li><span class='closedbook_icon sysTOCGroup' onclick="SysHandleClick(event,null);return false"></span> <a href="javascript:show('OodleXAPI_Malloc.html')" style='cursor:pointer;'>OodleX Memory Allocators</a>
<ul class='sysTree sysTOCItem' style='display:none;'>
<li><span class='topic_icon'></span> <a href="javascript:show('OodleXMalloc_About.html')" style='cursor:pointer;'>About OodleXMalloc</a></li>
<li><span class='closedbook_icon sysTOCGroup' onclick="SysHandleClick(event,null);return false"></span> <a style='cursor:pointer;'>Enumerants</a>
<ul class='sysTree sysTOCItem' style='display:none;'>
<li><span class='topic_icon'></span> <a href="javascript:show('OodleXMalloc_OS_Options.html')" style='cursor:pointer;'>OodleXMalloc_OS_Options</a></li>
</ul>
</li>
<li><span class='closedbook_icon sysTOCGroup' onclick="SysHandleClick(event,null);return false"></span> <a style='cursor:pointer;'>Structures</a>
<ul class='sysTree sysTOCItem' style='display:none;'>
<li><span class='topic_icon'></span> <a href="javascript:show('OodleXMallocVTable.html')" style='cursor:pointer;'>OodleXMallocVTable</a></li>
</ul>
</li>
<li><span class='closedbook_icon sysTOCGroup' onclick="SysHandleClick(event,null);return false"></span> <a style='cursor:pointer;'>Functions</a>
<ul class='sysTree sysTOCItem' style='display:none;'>
<li><span class='topic_icon'></span> <a href="javascript:show('OodleXMalloc_InstallVTable.html')" style='cursor:pointer;'>OodleXMalloc_InstallVTable</a></li>
<li><span class='topic_icon'></span> <a href="javascript:show('OodleXMalloc_SetFailedHandler.html')" style='cursor:pointer;'>OodleXMalloc_SetFailedHandler</a></li>
<li><span class='topic_icon'></span> <a href="javascript:show('OodleXMalloc.html')" style='cursor:pointer;'>OodleXMalloc</a></li>
<li><span class='topic_icon'></span> <a href="javascript:show('OodleXMallocAligned.html')" style='cursor:pointer;'>OodleXMallocAligned</a></li>
<li><span class='topic_icon'></span> <a href="javascript:show('OodleXFree.html')" style='cursor:pointer;'>OodleXFree</a></li>
<li><span class='topic_icon'></span> <a href="javascript:show('OodleXFreeSized.html')" style='cursor:pointer;'>OodleXFreeSized</a></li>
<li><span class='topic_icon'></span> <a href="javascript:show('OodleXMallocBigAlignment.html')" style='cursor:pointer;'>OodleXMallocBigAlignment</a></li>
<li><span class='topic_icon'></span> <a href="javascript:show('OodleXMallocBig.html')" style='cursor:pointer;'>OodleXMallocBig</a></li>
<li><span class='topic_icon'></span> <a href="javascript:show('OodleXFreeBig.html')" style='cursor:pointer;'>OodleXFreeBig</a></li>
<li><span class='topic_icon'></span> <a href="javascript:show('OodleXMalloc_ValidatePointer.html')" style='cursor:pointer;'>OodleXMalloc_ValidatePointer</a></li>
<li><span class='topic_icon'></span> <a href="javascript:show('OodleXMalloc_IOAligned.html')" style='cursor:pointer;'>OodleXMalloc_IOAligned</a></li>
<li><span class='topic_icon'></span> <a href="javascript:show('OodleXFree_IOAligned.html')" style='cursor:pointer;'>OodleXFree_IOAligned</a></li>
<li><span class='topic_icon'></span> <a href="javascript:show('OodleXMalloc_GetVTable_Clib.html')" style='cursor:pointer;'>OodleXMalloc_GetVTable_Clib</a></li>
<li><span class='topic_icon'></span> <a href="javascript:show('OodleXMalloc_GetVTable_OS.html')" style='cursor:pointer;'>OodleXMalloc_GetVTable_OS</a></li>
</ul>
</li>
<li><span class='closedbook_icon sysTOCGroup' onclick="SysHandleClick(event,null);return false"></span> <a style='cursor:pointer;'>Typedefs</a>
<ul class='sysTree sysTOCItem' style='display:none;'>
<li><span class='topic_icon'></span> <a href="javascript:show('OodleXMallocFailedHandler.html')" style='cursor:pointer;'>OodleXMallocFailedHandler</a></li>
</ul>
</li>
</ul>
</li>
<li><span class='closedbook_icon sysTOCGroup' onclick="SysHandleClick(event,null);return false"></span> <a href="javascript:show('OodleXAPI_Handle.html')" style='cursor:pointer;'>OodleX async handle operations</a>
<ul class='sysTree sysTOCItem' style='display:none;'>
<li><span class='topic_icon'></span> <a href="javascript:show('OodleXHandle_About.html')" style='cursor:pointer;'>About OodleXHandle</a></li>
<li><span class='closedbook_icon sysTOCGroup' onclick="SysHandleClick(event,null);return false"></span> <a style='cursor:pointer;'>Defines</a>
<ul class='sysTree sysTOCItem' style='display:none;'>
<li><span class='topic_icon'></span> <a href="javascript:show('OODLEX_ASYNC_HANDLE_INVALID.html')" style='cursor:pointer;'>OODLEX_ASYNC_HANDLE_INVALID</a></li>
<li><span class='topic_icon'></span> <a href="javascript:show('OODLEX_ASYNC_HANDLE_PENDING.html')" style='cursor:pointer;'>OODLEX_ASYNC_HANDLE_PENDING</a></li>
<li><span class='topic_icon'></span> <a href="javascript:show('OODLEX_ASYNC_HANDLE_DONE.html')" style='cursor:pointer;'>OODLEX_ASYNC_HANDLE_DONE</a></li>
<li><span class='topic_icon'></span> <a href="javascript:show('OODLEX_ASYNC_HANDLE_ERROR.html')" style='cursor:pointer;'>OODLEX_ASYNC_HANDLE_ERROR</a></li>
</ul>
</li>
<li><span class='closedbook_icon sysTOCGroup' onclick="SysHandleClick(event,null);return false"></span> <a style='cursor:pointer;'>Enumerants</a>
<ul class='sysTree sysTOCItem' style='display:none;'>
<li><span class='topic_icon'></span> <a href="javascript:show('OodleXPriority.html')" style='cursor:pointer;'>OodleXPriority</a></li>
<li><span class='topic_icon'></span> <a href="javascript:show('OodleXAsyncSelect.html')" style='cursor:pointer;'>OodleXAsyncSelect</a></li>
<li><span class='topic_icon'></span> <a href="javascript:show('OodleXStatus.html')" style='cursor:pointer;'>OodleXStatus</a></li>
<li><span class='topic_icon'></span> <a href="javascript:show('OodleXHandleAutoDelete.html')" style='cursor:pointer;'>OodleXHandleAutoDelete</a></li>
<li><span class='topic_icon'></span> <a href="javascript:show('OodleXHandleKickDelayed.html')" style='cursor:pointer;'>OodleXHandleKickDelayed</a></li>
<li><span class='topic_icon'></span> <a href="javascript:show('OodleXHandleDeleteIfDone.html')" style='cursor:pointer;'>OodleXHandleDeleteIfDone</a></li>
</ul>
</li>
<li><span class='closedbook_icon sysTOCGroup' onclick="SysHandleClick(event,null);return false"></span> <a style='cursor:pointer;'>Functions</a>
<ul class='sysTree sysTOCItem' style='display:none;'>
<li><span class='topic_icon'></span> <a href="javascript:show('OodleX_GetStatus.html')" style='cursor:pointer;'>OodleX_GetStatus</a></li>
<li><span class='topic_icon'></span> <a href="javascript:show('OodleX_Wait.html')" style='cursor:pointer;'>OodleX_Wait</a></li>
<li><span class='topic_icon'></span> <a href="javascript:show('OodleX_WaitAll.html')" style='cursor:pointer;'>OodleX_WaitAll</a></li>
<li><span class='topic_icon'></span> <a href="javascript:show('OodleX_WaitDoneAllPending.html')" style='cursor:pointer;'>OodleX_WaitDoneAllPending</a></li>
<li><span class='topic_icon'></span> <a href="javascript:show('OodleX_SetHandleAutoDelete.html')" style='cursor:pointer;'>OodleX_SetHandleAutoDelete</a></li>
<li><span class='topic_icon'></span> <a href="javascript:show('OodleX_GetAvailableAsyncSelect.html')" style='cursor:pointer;'>OodleX_GetAvailableAsyncSelect</a></li>
<li><span class='topic_icon'></span> <a href="javascript:show('OodleXHandleEvent_Alloc.html')" style='cursor:pointer;'>OodleXHandleEvent_Alloc</a></li>
<li><span class='topic_icon'></span> <a href="javascript:show('OodleXHandleEvent_SetDone.html')" style='cursor:pointer;'>OodleXHandleEvent_SetDone</a></li>
<li><span class='topic_icon'></span> <a href="javascript:show('OodleXHandleEvent_SetError.html')" style='cursor:pointer;'>OodleXHandleEvent_SetError</a></li>
<li><span class='topic_icon'></span> <a href="javascript:show('OodleXHandleCountdown_Alloc.html')" style='cursor:pointer;'>OodleXHandleCountdown_Alloc</a></li>
<li><span class='topic_icon'></span> <a href="javascript:show('OodleXHandleCountdown_Decrement.html')" style='cursor:pointer;'>OodleXHandleCountdown_Decrement</a></li>
</ul>
</li>
<li><span class='closedbook_icon sysTOCGroup' onclick="SysHandleClick(event,null);return false"></span> <a style='cursor:pointer;'>Typedefs</a>
<ul class='sysTree sysTOCItem' style='display:none;'>
<li><span class='topic_icon'></span> <a href="javascript:show('OodleXHandle.html')" style='cursor:pointer;'>OodleXHandle</a></li>
</ul>
</li>
</ul>
</li>
<li><span class='closedbook_icon sysTOCGroup' onclick="SysHandleClick(event,null);return false"></span> <a href="javascript:show('OodleXAPI_Threading.html')" style='cursor:pointer;'>OodleX threading util</a>
<ul class='sysTree sysTOCItem' style='display:none;'>
<li><span class='closedbook_icon sysTOCGroup' onclick="SysHandleClick(event,null);return false"></span> <a style='cursor:pointer;'>Functions</a>
<ul class='sysTree sysTOCItem' style='display:none;'>
<li><span class='topic_icon'></span> <a href="javascript:show('OodleX_Semaphore_Post.html')" style='cursor:pointer;'>OodleX_Semaphore_Post</a></li>
<li><span class='topic_icon'></span> <a href="javascript:show('OodleX_Semaphore_Wait.html')" style='cursor:pointer;'>OodleX_Semaphore_Wait</a></li>
<li><span class='topic_icon'></span> <a href="javascript:show('OodleX_CreateThread.html')" style='cursor:pointer;'>OodleX_CreateThread</a></li>
<li><span class='topic_icon'></span> <a href="javascript:show('OodleX_WaitAndDestroyThread.html')" style='cursor:pointer;'>OodleX_WaitAndDestroyThread</a></li>
<li><span class='topic_icon'></span> <a href="javascript:show('OodleX_ReleaseThreadTLS.html')" style='cursor:pointer;'>OodleX_ReleaseThreadTLS</a></li>
<li><span class='topic_icon'></span> <a href="javascript:show('OodleX_CorePlugin_RunJob.html')" style='cursor:pointer;'>OodleX_CorePlugin_RunJob</a></li>
<li><span class='topic_icon'></span> <a href="javascript:show('OodleX_CorePlugin_WaitJob.html')" style='cursor:pointer;'>OodleX_CorePlugin_WaitJob</a></li>
<li><span class='topic_icon'></span> <a href="javascript:show('OodleX_GetNumWorkerThreads.html')" style='cursor:pointer;'>OodleX_GetNumWorkerThreads</a></li>
</ul>
</li>
<li><span class='closedbook_icon sysTOCGroup' onclick="SysHandleClick(event,null);return false"></span> <a style='cursor:pointer;'>Typedefs</a>
<ul class='sysTree sysTOCItem' style='display:none;'>
<li><span class='topic_icon'></span> <a href="javascript:show('OodleX_Semaphore.html')" style='cursor:pointer;'>OodleX_Semaphore</a></li>
<li><span class='topic_icon'></span> <a href="javascript:show('OodleX_ThreadFunc.html')" style='cursor:pointer;'>OodleX_ThreadFunc</a></li>
</ul>
</li>
</ul>
</li>
<li><span class='closedbook_icon sysTOCGroup' onclick="SysHandleClick(event,null);return false"></span> <a href="javascript:show('OodleXAPI_IOQ.html')" style='cursor:pointer;'>OodleX low level async io</a>
<ul class='sysTree sysTOCItem' style='display:none;'>
<li><span class='topic_icon'></span> <a href="javascript:show('OodleXIOQ_About.html')" style='cursor:pointer;'>About OodleIOQ</a></li>
<li><span class='closedbook_icon sysTOCGroup' onclick="SysHandleClick(event,null);return false"></span> <a style='cursor:pointer;'>Defines</a>
<ul class='sysTree sysTOCItem' style='display:none;'>
<li><span class='topic_icon'></span> <a href="javascript:show('OODLEX_IO_MAX_ALIGNMENT.html')" style='cursor:pointer;'>OODLEX_IO_MAX_ALIGNMENT</a></li>
<li><span class='topic_icon'></span> <a href="javascript:show('OODLEX_BUFFER_SIZE_DEFAULT.html')" style='cursor:pointer;'>OODLEX_BUFFER_SIZE_DEFAULT</a></li>
<li><span class='topic_icon'></span> <a href="javascript:show('OODLEX_FILEINFO_FLAG_INVALID.html')" style='cursor:pointer;'>OODLEX_FILEINFO_FLAG_INVALID</a></li>
<li><span class='topic_icon'></span> <a href="javascript:show('OODLEX_FILEINFO_MODTIME_INVALID.html')" style='cursor:pointer;'>OODLEX_FILEINFO_MODTIME_INVALID</a></li>
<li><span class='topic_icon'></span> <a href="javascript:show('OODLEX_FILE_SIZE_INVALID.html')" style='cursor:pointer;'>OODLEX_FILE_SIZE_INVALID</a></li>
<li><span class='topic_icon'></span> <a href="javascript:show('OODLEX_FILE_OPEN_NO_RESERVE_SIZE.html')" style='cursor:pointer;'>OODLEX_FILE_OPEN_NO_RESERVE_SIZE</a></li>
<li><span class='topic_icon'></span> <a href="javascript:show('OODLEX_FILE_CLOSE_NO_TRUNCATE_SIZE.html')" style='cursor:pointer;'>OODLEX_FILE_CLOSE_NO_TRUNCATE_SIZE</a></li>
</ul>
</li>
<li><span class='closedbook_icon sysTOCGroup' onclick="SysHandleClick(event,null);return false"></span> <a style='cursor:pointer;'>Enumerants</a>
<ul class='sysTree sysTOCItem' style='display:none;'>
<li><span class='topic_icon'></span> <a href="javascript:show('OodleXCopyFileFlags.html')" style='cursor:pointer;'>OodleXCopyFileFlags</a></li>
<li><span class='topic_icon'></span> <a href="javascript:show('OodleFileNotFoundIsAnError.html')" style='cursor:pointer;'>OodleFileNotFoundIsAnError</a></li>
<li><span class='topic_icon'></span> <a href="javascript:show('OODLEX_FILEINFO_FLAGS.html')" style='cursor:pointer;'>OODLEX_FILEINFO_FLAGS</a></li>
<li><span class='topic_icon'></span> <a href="javascript:show('OodleXError.html')" style='cursor:pointer;'>OodleXError</a></li>
<li><span class='topic_icon'></span> <a href="javascript:show('OodleXFileMode.html')" style='cursor:pointer;'>OodleXFileMode</a></li>
<li><span class='topic_icon'></span> <a href="javascript:show('OodleXFileOpenFlags.html')" style='cursor:pointer;'>OodleXFileOpenFlags</a></li>
</ul>
</li>
<li><span class='closedbook_icon sysTOCGroup' onclick="SysHandleClick(event,null);return false"></span> <a style='cursor:pointer;'>Structures</a>
<ul class='sysTree sysTOCItem' style='display:none;'>
<li><span class='topic_icon'></span> <a href="javascript:show('OodleXFileOpsVTable.html')" style='cursor:pointer;'>OodleXFileOpsVTable</a></li>
<li><span class='topic_icon'></span> <a href="javascript:show('OodleXFileInfo.html')" style='cursor:pointer;'>OodleXFileInfo</a></li>
</ul>
</li>
<li><span class='closedbook_icon sysTOCGroup' onclick="SysHandleClick(event,null);return false"></span> <a style='cursor:pointer;'>Functions</a>
<ul class='sysTree sysTOCItem' style='display:none;'>
<li><span class='topic_icon'></span> <a href="javascript:show('OodleXIOQ_WaitDoneAllPending.html')" style='cursor:pointer;'>OodleXIOQ_WaitDoneAllPending</a></li>
<li><span class='topic_icon'></span> <a href="javascript:show('OodleXIOQ_KickAnyDelayed.html')" style='cursor:pointer;'>OodleXIOQ_KickAnyDelayed</a></li>
<li><span class='topic_icon'></span> <a href="javascript:show('OodleXIOQ_GetStatus.html')" style='cursor:pointer;'>OodleXIOQ_GetStatus</a></li>
<li><span class='topic_icon'></span> <a href="javascript:show('OodleXIOQ_GetErrorDetails.html')" style='cursor:pointer;'>OodleXIOQ_GetErrorDetails</a></li>
<li><span class='topic_icon'></span> <a href="javascript:show('OodleXIOQ_GetErrorEnum.html')" style='cursor:pointer;'>OodleXIOQ_GetErrorEnum</a></li>
<li><span class='topic_icon'></span> <a href="javascript:show('OodleXIOQ_LogError.html')" style='cursor:pointer;'>OodleXIOQ_LogError</a></li>
<li><span class='topic_icon'></span> <a href="javascript:show('OodleXIOQ_Wait.html')" style='cursor:pointer;'>OodleXIOQ_Wait</a></li>
<li><span class='topic_icon'></span> <a href="javascript:show('OodleXIOQ_GetInfo.html')" style='cursor:pointer;'>OodleXIOQ_GetInfo</a></li>
<li><span class='topic_icon'></span> <a href="javascript:show('OodleXIOQ_Wait_GetInfo.html')" style='cursor:pointer;'>OodleXIOQ_Wait_GetInfo</a></li>
<li><span class='topic_icon'></span> <a href="javascript:show('OodleXIOQ_GetLastPendingOpOnFile.html')" style='cursor:pointer;'>OodleXIOQ_GetLastPendingOpOnFile</a></li>
<li><span class='topic_icon'></span> <a href="javascript:show('OodleXIOQ_GetName.html')" style='cursor:pointer;'>OodleXIOQ_GetName</a></li>
<li><span class='topic_icon'></span> <a href="javascript:show('OodleXIOQ_GetLastError.html')" style='cursor:pointer;'>OodleXIOQ_GetLastError</a></li>
<li><span class='topic_icon'></span> <a href="javascript:show('OodleXIOQ_ClearError.html')" style='cursor:pointer;'>OodleXIOQ_ClearError</a></li>
<li><span class='topic_icon'></span> <a href="javascript:show('OodleXIOQ_LogLastError.html')" style='cursor:pointer;'>OodleXIOQ_LogLastError</a></li>
<li><span class='topic_icon'></span> <a href="javascript:show('OodleXIOQ_GetOSHandle.html')" style='cursor:pointer;'>OodleXIOQ_GetOSHandle</a></li>
<li><span class='topic_icon'></span> <a href="javascript:show('OodleXIOQ_SetVTable.html')" style='cursor:pointer;'>OodleXIOQ_SetVTable</a></li>
<li><span class='topic_icon'></span> <a href="javascript:show('OodleXIOQ_Fence_Async.html')" style='cursor:pointer;'>OodleXIOQ_Fence_Async</a></li>
<li><span class='topic_icon'></span> <a href="javascript:show('OodleXIOQ_OpenForRead_Async.html')" style='cursor:pointer;'>OodleXIOQ_OpenForRead_Async</a></li>
<li><span class='topic_icon'></span> <a href="javascript:show('OodleXIOQ_OpenAndRead_Async.html')" style='cursor:pointer;'>OodleXIOQ_OpenAndRead_Async</a></li>
<li><span class='topic_icon'></span> <a href="javascript:show('OodleXIOQ_OpenForWriteCreate_Async.html')" style='cursor:pointer;'>OodleXIOQ_OpenForWriteCreate_Async</a></li>
<li><span class='topic_icon'></span> <a href="javascript:show('OodleXIOQ_OpenForWriteTempName_Async.html')" style='cursor:pointer;'>OodleXIOQ_OpenForWriteTempName_Async</a></li>
<li><span class='topic_icon'></span> <a href="javascript:show('OodleXIOQ_CloseFile_Async.html')" style='cursor:pointer;'>OodleXIOQ_CloseFile_Async</a></li>
<li><span class='topic_icon'></span> <a href="javascript:show('OodleXIOQ_CloseFileRename_Async.html')" style='cursor:pointer;'>OodleXIOQ_CloseFileRename_Async</a></li>
<li><span class='topic_icon'></span> <a href="javascript:show('OodleXIOQ_Read_Async.html')" style='cursor:pointer;'>OodleXIOQ_Read_Async</a></li>
<li><span class='topic_icon'></span> <a href="javascript:show('OodleXIOQ_Write_Async.html')" style='cursor:pointer;'>OodleXIOQ_Write_Async</a></li>
<li><span class='topic_icon'></span> <a href="javascript:show('OodleXIOQ_SetFileSize_Async.html')" style='cursor:pointer;'>OodleXIOQ_SetFileSize_Async</a></li>
<li><span class='topic_icon'></span> <a href="javascript:show('OodleXIOQ_ReserveFileSizeForWrite_Async.html')" style='cursor:pointer;'>OodleXIOQ_ReserveFileSizeForWrite_Async</a></li>
<li><span class='topic_icon'></span> <a href="javascript:show('OodleXIOQ_ForceWriteable_Async.html')" style='cursor:pointer;'>OodleXIOQ_ForceWriteable_Async</a></li>
<li><span class='topic_icon'></span> <a href="javascript:show('OodleXIOQ_Delete_Async.html')" style='cursor:pointer;'>OodleXIOQ_Delete_Async</a></li>
<li><span class='topic_icon'></span> <a href="javascript:show('OodleXIOQ_Rename_Async.html')" style='cursor:pointer;'>OodleXIOQ_Rename_Async</a></li>
<li><span class='topic_icon'></span> <a href="javascript:show('OodleXIOQ_MakeDir_Async.html')" style='cursor:pointer;'>OodleXIOQ_MakeDir_Async</a></li>
<li><span class='topic_icon'></span> <a href="javascript:show('OodleXIOQ_FreeBufferIOAligned_Async.html')" style='cursor:pointer;'>OodleXIOQ_FreeBufferIOAligned_Async</a></li>
<li><span class='topic_icon'></span> <a href="javascript:show('OodleXIOQ_GetInfoByName_Async.html')" style='cursor:pointer;'>OodleXIOQ_GetInfoByName_Async</a></li>
<li><span class='topic_icon'></span> <a href="javascript:show('OodleXIOQ_GetInfoByName_GetResult.html')" style='cursor:pointer;'>OodleXIOQ_GetInfoByName_GetResult</a></li>
<li><span class='topic_icon'></span> <a href="javascript:show('OodleXIOQ_SetInfoByName_Async.html')" style='cursor:pointer;'>OodleXIOQ_SetInfoByName_Async</a></li>
<li><span class='topic_icon'></span> <a href="javascript:show('OodleXIOQ_ReadMallocWholeFile_Async.html')" style='cursor:pointer;'>OodleXIOQ_ReadMallocWholeFile_Async</a></li>
<li><span class='topic_icon'></span> <a href="javascript:show('OodleXIOQ_ReadMallocWholeFile_GetResult.html')" style='cursor:pointer;'>OodleXIOQ_ReadMallocWholeFile_GetResult</a></li>
<li><span class='topic_icon'></span> <a href="javascript:show('OodleXIOQ_OpenAndReadMallocWholeFile_Async.html')" style='cursor:pointer;'>OodleXIOQ_OpenAndReadMallocWholeFile_Async</a></li>
<li><span class='topic_icon'></span> <a href="javascript:show('OodleXIOQ_OpenAndReadMallocWholeFileAndClose_Async.html')" style='cursor:pointer;'>OodleXIOQ_OpenAndReadMallocWholeFileAndClose_Async</a></li>
<li><span class='topic_icon'></span> <a href="javascript:show('OodleXIOQ_OpenWriteWholeFileClose_Async.html')" style='cursor:pointer;'>OodleXIOQ_OpenWriteWholeFileClose_Async</a></li>
<li><span class='topic_icon'></span> <a href="javascript:show('OodleXIOQ_OpenWriteWholeFileCloseTempName_Async.html')" style='cursor:pointer;'>OodleXIOQ_OpenWriteWholeFileCloseTempName_Async</a></li>
<li><span class='topic_icon'></span> <a href="javascript:show('OodleXIOQ_ReadUnalignedAdjustPointer_Async.html')" style='cursor:pointer;'>OodleXIOQ_ReadUnalignedAdjustPointer_Async</a></li>
<li><span class='topic_icon'></span> <a href="javascript:show('OodleXIOQ_MakeAllDirs_Async.html')" style='cursor:pointer;'>OodleXIOQ_MakeAllDirs_Async</a></li>
<li><span class='topic_icon'></span> <a href="javascript:show('OodleXIOQ_CopyFile_Async.html')" style='cursor:pointer;'>OodleXIOQ_CopyFile_Async</a></li>
<li><span class='topic_icon'></span> <a href="javascript:show('OodleXIOQ_ReadMallocWholeFile_AsyncAndWait.html')" style='cursor:pointer;'>OodleXIOQ_ReadMallocWholeFile_AsyncAndWait</a></li>
<li><span class='topic_icon'></span> <a href="javascript:show('OodleXIOQ_WriteWholeFile_AsyncAndWait.html')" style='cursor:pointer;'>OodleXIOQ_WriteWholeFile_AsyncAndWait</a></li>
<li><span class='topic_icon'></span> <a href="javascript:show('OodleXIOQ_CopyFile_AsyncAndWait.html')" style='cursor:pointer;'>OodleXIOQ_CopyFile_AsyncAndWait</a></li>
<li><span class='topic_icon'></span> <a href="javascript:show('OodleXIOQ_GetInfoByName_AsyncAndWait.html')" style='cursor:pointer;'>OodleXIOQ_GetInfoByName_AsyncAndWait</a></li>
<li><span class='topic_icon'></span> <a href="javascript:show('OodleXIOQ_SetInfoByName_AsyncAndWait.html')" style='cursor:pointer;'>OodleXIOQ_SetInfoByName_AsyncAndWait</a></li>
<li><span class='topic_icon'></span> <a href="javascript:show('OodleXIOQ_MakeAllDirs_AsyncAndWait.html')" style='cursor:pointer;'>OodleXIOQ_MakeAllDirs_AsyncAndWait</a></li>
<li><span class='topic_icon'></span> <a href="javascript:show('OodleXIOQ_Delete_AsyncAndWait.html')" style='cursor:pointer;'>OodleXIOQ_Delete_AsyncAndWait</a></li>
<li><span class='topic_icon'></span> <a href="javascript:show('OodleXIOQ_Rename_AsyncAndWait.html')" style='cursor:pointer;'>OodleXIOQ_Rename_AsyncAndWait</a></li>
<li><span class='topic_icon'></span> <a href="javascript:show('OodleXIOQ_GetFileSize_AsyncAndWait.html')" style='cursor:pointer;'>OodleXIOQ_GetFileSize_AsyncAndWait</a></li>
<li><span class='topic_icon'></span> <a href="javascript:show('OodleXIOQ_NameIsDir_AsyncAndWait.html')" style='cursor:pointer;'>OodleXIOQ_NameIsDir_AsyncAndWait</a></li>
<li><span class='topic_icon'></span> <a href="javascript:show('OodleX_GetOSFileOps.html')" style='cursor:pointer;'>OodleX_GetOSFileOps</a></li>
<li><span class='topic_icon'></span> <a href="javascript:show('OodleX_GetDefaultFileOps.html')" style='cursor:pointer;'>OodleX_GetDefaultFileOps</a></li>
<li><span class='topic_icon'></span> <a href="javascript:show('OodleX_SetDefaultFileOps.html')" style='cursor:pointer;'>OodleX_SetDefaultFileOps</a></li>
</ul>
</li>
<li><span class='closedbook_icon sysTOCGroup' onclick="SysHandleClick(event,null);return false"></span> <a style='cursor:pointer;'>Typedefs</a>
<ul class='sysTree sysTOCItem' style='display:none;'>
<li><span class='topic_icon'></span> <a href="javascript:show('OodleXIOQFile.html')" style='cursor:pointer;'>OodleXIOQFile</a></li>
<li><span class='topic_icon'></span> <a href="javascript:show('OodleXOSFile.html')" style='cursor:pointer;'>OodleXOSFile</a></li>
<li><span class='topic_icon'></span> <a href="javascript:show('OodleXOSFileListing.html')" style='cursor:pointer;'>OodleXOSFileListing</a></li>
</ul>
</li>
</ul>
</li>
<li><span class='closedbook_icon sysTOCGroup' onclick="SysHandleClick(event,null);return false"></span> <a href="javascript:show('OodleXAPI_Debug.html')" style='cursor:pointer;'>OodleX Debug aids</a>
<ul class='sysTree sysTOCItem' style='display:none;'>
<li><span class='closedbook_icon sysTOCGroup' onclick="SysHandleClick(event,null);return false"></span> <a style='cursor:pointer;'>Defines</a>
<ul class='sysTree sysTOCItem' style='display:none;'>
<li><span class='topic_icon'></span> <a href="javascript:show('OodleXLog_Printf.html')" style='cursor:pointer;'>OodleXLog_Printf</a></li>
</ul>
</li>
<li><span class='closedbook_icon sysTOCGroup' onclick="SysHandleClick(event,null);return false"></span> <a style='cursor:pointer;'>Enumerants</a>
<ul class='sysTree sysTOCItem' style='display:none;'>
<li><span class='topic_icon'></span> <a href="javascript:show('OodleXLog_StateFlags.html')" style='cursor:pointer;'>OodleXLog_StateFlags</a></li>
<li><span class='topic_icon'></span> <a href="javascript:show('OodleXLog_VerboseLevel.html')" style='cursor:pointer;'>OodleXLog_VerboseLevel</a></li>
<li><span class='topic_icon'></span> <a href="javascript:show('OodleXLogCallbackRetRet.html')" style='cursor:pointer;'>OodleXLogCallbackRetRet</a></li>
</ul>
</li>
<li><span class='closedbook_icon sysTOCGroup' onclick="SysHandleClick(event,null);return false"></span> <a style='cursor:pointer;'>Functions</a>
<ul class='sysTree sysTOCItem' style='display:none;'>
<li><span class='topic_icon'></span> <a href="javascript:show('OodleXLog_SetState.html')" style='cursor:pointer;'>OodleXLog_SetState</a></li>
<li><span class='topic_icon'></span> <a href="javascript:show('OodleXLog_SetEcho.html')" style='cursor:pointer;'>OodleXLog_SetEcho</a></li>
<li><span class='topic_icon'></span> <a href="javascript:show('OodleXLog_GetEcho.html')" style='cursor:pointer;'>OodleXLog_GetEcho</a></li>
<li><span class='topic_icon'></span> <a href="javascript:show('OodleXLog_SetCallback.html')" style='cursor:pointer;'>OodleXLog_SetCallback</a></li>
<li><span class='topic_icon'></span> <a href="javascript:show('OodleXLog_GetCallback.html')" style='cursor:pointer;'>OodleXLog_GetCallback</a></li>
<li><span class='topic_icon'></span> <a href="javascript:show('OodleXLog_GetVerboseLevel.html')" style='cursor:pointer;'>OodleXLog_GetVerboseLevel</a></li>
<li><span class='topic_icon'></span> <a href="javascript:show('OodleXLog_SetVerboseLevel.html')" style='cursor:pointer;'>OodleXLog_SetVerboseLevel</a></li>
<li><span class='topic_icon'></span> <a href="javascript:show('OodleXLog_Flush.html')" style='cursor:pointer;'>OodleXLog_Flush</a></li>
<li><span class='topic_icon'></span> <a href="javascript:show('OodleXLog_PrintfError.html')" style='cursor:pointer;'>OodleXLog_PrintfError</a></li>
</ul>
</li>
<li><span class='closedbook_icon sysTOCGroup' onclick="SysHandleClick(event,null);return false"></span> <a style='cursor:pointer;'>Typedefs</a>
<ul class='sysTree sysTOCItem' style='display:none;'>
<li><span class='topic_icon'></span> <a href="javascript:show('OodleXLogCallbackRet.html')" style='cursor:pointer;'>OodleXLogCallbackRet</a></li>
</ul>
</li>
</ul>
</li>
<li><span class='closedbook_icon sysTOCGroup' onclick="SysHandleClick(event,null);return false"></span> <a href="javascript:show('OodleXAPI_Util.html')" style='cursor:pointer;'>OodleX Utils</a>
<ul class='sysTree sysTOCItem' style='display:none;'>
<li><span class='closedbook_icon sysTOCGroup' onclick="SysHandleClick(event,null);return false"></span> <a style='cursor:pointer;'>Defines</a>
<ul class='sysTree sysTOCItem' style='display:none;'>
<li><span class='topic_icon'></span> <a href="javascript:show('OODLEX_PATH_DELIM.html')" style='cursor:pointer;'>OODLEX_PATH_DELIM</a></li>
</ul>
</li>
<li><span class='closedbook_icon sysTOCGroup' onclick="SysHandleClick(event,null);return false"></span> <a style='cursor:pointer;'>Functions</a>
<ul class='sysTree sysTOCItem' style='display:none;'>
<li><span class='topic_icon'></span> <a href="javascript:show('OodleX_GetExtensionKey.html')" style='cursor:pointer;'>OodleX_GetExtensionKey</a></li>
<li><span class='topic_icon'></span> <a href="javascript:show('OodleX_MakeExtensionKey.html')" style='cursor:pointer;'>OodleX_MakeExtensionKey</a></li>
<li><span class='topic_icon'></span> <a href="javascript:show('OodleX_IOAlignUpS32.html')" style='cursor:pointer;'>OodleX_IOAlignUpS32</a></li>
<li><span class='topic_icon'></span> <a href="javascript:show('OodleX_IOAlignUpS64.html')" style='cursor:pointer;'>OodleX_IOAlignUpS64</a></li>
<li><span class='topic_icon'></span> <a href="javascript:show('OodleX_IOAlignUpSINTa.html')" style='cursor:pointer;'>OodleX_IOAlignUpSINTa</a></li>
<li><span class='topic_icon'></span> <a href="javascript:show('OodleX_IOAlignDownS32.html')" style='cursor:pointer;'>OodleX_IOAlignDownS32</a></li>
<li><span class='topic_icon'></span> <a href="javascript:show('OodleX_IOAlignDownS64.html')" style='cursor:pointer;'>OodleX_IOAlignDownS64</a></li>
<li><span class='topic_icon'></span> <a href="javascript:show('OodleX_IOAlignDownSINTa.html')" style='cursor:pointer;'>OodleX_IOAlignDownSINTa</a></li>
<li><span class='topic_icon'></span> <a href="javascript:show('OodleX_S64_to_SINTa_check.html')" style='cursor:pointer;'>OodleX_S64_to_SINTa_check</a></li>
<li><span class='topic_icon'></span> <a href="javascript:show('OodleX_GetSeconds.html')" style='cursor:pointer;'>OodleX_GetSeconds</a></li>
<li><span class='topic_icon'></span> <a href="javascript:show('OodleXUtil_ConvertUTF8ToUTF16.html')" style='cursor:pointer;'>OodleXUtil_ConvertUTF8ToUTF16</a></li>
<li><span class='topic_icon'></span> <a href="javascript:show('OodleXUtil_ConvertUTF16ToUTF8.html')" style='cursor:pointer;'>OodleXUtil_ConvertUTF16ToUTF8</a></li>
<li><span class='topic_icon'></span> <a href="javascript:show('OodleX_CombinePaths.html')" style='cursor:pointer;'>OodleX_CombinePaths</a></li>
<li><span class='topic_icon'></span> <a href="javascript:show('OodleX_GetOSCwd.html')" style='cursor:pointer;'>OodleX_GetOSCwd</a></li>
<li><span class='topic_icon'></span> <a href="javascript:show('OodleX_PrefixOSCwd.html')" style='cursor:pointer;'>OodleX_PrefixOSCwd</a></li>
</ul>
</li>
</ul>
</li>
<li><span class='topic_icon'></span> <a href="javascript:show('Oodle_AboutExt.html')" style='cursor:pointer;'>About Oodle Ext</a></li>
</ul>
</li>
<li><span class='closedbook_icon sysTOCGroup' onclick="SysHandleClick(event,null);return false"></span> <a href="javascript:show('OodleNetworkAPI.html')" style='cursor:pointer;'>Oodle2 Network API Documentation</a>
<ul class='sysTree sysTOCItem' style='display:none;'>
<li><span class='closedbook_icon sysTOCGroup' onclick="SysHandleClick(event,null);return false"></span> <a href="javascript:show('OodleAPI_Network.html')" style='cursor:pointer;'>Oodle Network compression</a>
<ul class='sysTree sysTOCItem' style='display:none;'>
<li><span class='closedbook_icon sysTOCGroup' onclick="SysHandleClick(event,null);return false"></span> <a href="javascript:show('OodleAPI_OodleNetwork1.html')" style='cursor:pointer;'>OodleAPI_OodleNetwork1</a>
<ul class='sysTree sysTOCItem' style='display:none;'>
<li><span class='topic_icon'></span> <a href="javascript:show('OodleNetwork1_About.html')" style='cursor:pointer;'>About OodleNetwork1</a></li>
<li><span class='closedbook_icon sysTOCGroup' onclick="SysHandleClick(event,null);return false"></span> <a style='cursor:pointer;'>Defines</a>
<ul class='sysTree sysTOCItem' style='display:none;'>
<li><span class='topic_icon'></span> <a href="javascript:show('OODLENETWORK1_MAX_DICTIONARY_SIZE.html')" style='cursor:pointer;'>OODLENETWORK1_MAX_DICTIONARY_SIZE</a></li>
<li><span class='topic_icon'></span> <a href="javascript:show('OODLENETWORK1_HASH_BITS_DEFAULT.html')" style='cursor:pointer;'>OODLENETWORK1_HASH_BITS_DEFAULT</a></li>
<li><span class='topic_icon'></span> <a href="javascript:show('OODLENETWORK1_DECOMP_BUF_OVERREAD_LEN.html')" style='cursor:pointer;'>OODLENETWORK1_DECOMP_BUF_OVERREAD_LEN</a></li>
</ul>
</li>
<li><span class='closedbook_icon sysTOCGroup' onclick="SysHandleClick(event,null);return false"></span> <a style='cursor:pointer;'>Structures</a>
<ul class='sysTree sysTOCItem' style='display:none;'>
<li><span class='topic_icon'></span> <a href="javascript:show('OodleNetwork1_Shared.html')" style='cursor:pointer;'>OodleNetwork1_Shared</a></li>
<li><span class='topic_icon'></span> <a href="javascript:show('OodleNetwork1TCP_State.html')" style='cursor:pointer;'>OodleNetwork1TCP_State</a></li>
<li><span class='topic_icon'></span> <a href="javascript:show('OodleNetwork1UDP_State.html')" style='cursor:pointer;'>OodleNetwork1UDP_State</a></li>
<li><span class='topic_icon'></span> <a href="javascript:show('OodleNetwork1UDP_StateCompacted.html')" style='cursor:pointer;'>OodleNetwork1UDP_StateCompacted</a></li>
</ul>
</li>
<li><span class='closedbook_icon sysTOCGroup' onclick="SysHandleClick(event,null);return false"></span> <a style='cursor:pointer;'>Functions</a>
<ul class='sysTree sysTOCItem' style='display:none;'>
<li><span class='topic_icon'></span> <a href="javascript:show('OodleNetwork1_Shared_Size.html')" style='cursor:pointer;'>OodleNetwork1_Shared_Size</a></li>
<li><span class='topic_icon'></span> <a href="javascript:show('OodleNetwork1TCP_State_Size.html')" style='cursor:pointer;'>OodleNetwork1TCP_State_Size</a></li>
<li><span class='topic_icon'></span> <a href="javascript:show('OodleNetwork1_CompressedBufferSizeNeeded.html')" style='cursor:pointer;'>OodleNetwork1_CompressedBufferSizeNeeded</a></li>
<li><span class='topic_icon'></span> <a href="javascript:show('OodleNetwork1_Shared_SetWindow.html')" style='cursor:pointer;'>OodleNetwork1_Shared_SetWindow</a></li>
<li><span class='topic_icon'></span> <a href="javascript:show('OodleNetwork1TCP_State_Reset.html')" style='cursor:pointer;'>OodleNetwork1TCP_State_Reset</a></li>
<li><span class='topic_icon'></span> <a href="javascript:show('OodleNetwork1TCP_State_InitAsCopy.html')" style='cursor:pointer;'>OodleNetwork1TCP_State_InitAsCopy</a></li>
<li><span class='topic_icon'></span> <a href="javascript:show('OodleNetwork1TCP_Train.html')" style='cursor:pointer;'>OodleNetwork1TCP_Train</a></li>
<li><span class='topic_icon'></span> <a href="javascript:show('OodleNetwork1TCP_Encode.html')" style='cursor:pointer;'>OodleNetwork1TCP_Encode</a></li>
<li><span class='topic_icon'></span> <a href="javascript:show('OodleNetwork1TCP_Decode.html')" style='cursor:pointer;'>OodleNetwork1TCP_Decode</a></li>
<li><span class='topic_icon'></span> <a href="javascript:show('OodleNetwork1UDP_Train.html')" style='cursor:pointer;'>OodleNetwork1UDP_Train</a></li>
<li><span class='topic_icon'></span> <a href="javascript:show('OodleNetwork1UDP_State_Size.html')" style='cursor:pointer;'>OodleNetwork1UDP_State_Size</a></li>
<li><span class='topic_icon'></span> <a href="javascript:show('OodleNetwork1UDP_Encode.html')" style='cursor:pointer;'>OodleNetwork1UDP_Encode</a></li>
<li><span class='topic_icon'></span> <a href="javascript:show('OodleNetwork1UDP_Decode.html')" style='cursor:pointer;'>OodleNetwork1UDP_Decode</a></li>
<li><span class='topic_icon'></span> <a href="javascript:show('OodleNetwork1UDP_StateCompacted_MaxSize.html')" style='cursor:pointer;'>OodleNetwork1UDP_StateCompacted_MaxSize</a></li>
<li><span class='topic_icon'></span> <a href="javascript:show('OodleNetwork1UDP_State_Compact_ForVersion.html')" style='cursor:pointer;'>OodleNetwork1UDP_State_Compact_ForVersion</a></li>
<li><span class='topic_icon'></span> <a href="javascript:show('OodleNetwork1UDP_State_Compact.html')" style='cursor:pointer;'>OodleNetwork1UDP_State_Compact</a></li>
<li><span class='topic_icon'></span> <a href="javascript:show('OodleNetwork1UDP_State_Uncompact_ForVersion.html')" style='cursor:pointer;'>OodleNetwork1UDP_State_Uncompact_ForVersion</a></li>
<li><span class='topic_icon'></span> <a href="javascript:show('OodleNetwork1UDP_State_Uncompact.html')" style='cursor:pointer;'>OodleNetwork1UDP_State_Uncompact</a></li>
<li><span class='topic_icon'></span> <a href="javascript:show('OodleNetwork1_SelectDictionarySupported.html')" style='cursor:pointer;'>OodleNetwork1_SelectDictionarySupported</a></li>
<li><span class='topic_icon'></span> <a href="javascript:show('OodleNetwork1_SelectDictionaryFromPackets.html')" style='cursor:pointer;'>OodleNetwork1_SelectDictionaryFromPackets</a></li>
<li><span class='topic_icon'></span> <a href="javascript:show('OodleNetwork1_SelectDictionaryFromPackets_Trials.html')" style='cursor:pointer;'>OodleNetwork1_SelectDictionaryFromPackets_Trials</a></li>
</ul>
</li>
</ul>
</li>
<li><span class='closedbook_icon sysTOCGroup' onclick="SysHandleClick(event,null);return false"></span> <a href="javascript:show('OodleNetwork_About.html')" style='cursor:pointer;'>About Oodle Network Compression</a>
<ul class='sysTree sysTOCItem' style='display:none;'>
<li><span class='topic_icon'></span> <a href="javascript:show('OodleNetwork_About_CapturingTrainingData.html')" style='cursor:pointer;'>Capturing Training data for OodleNetwork</a></li>
<li><span class='topic_icon'></span> <a href="javascript:show('OodleNetwork_About_FormingPacketsForMaximumCompression.html')" style='cursor:pointer;'>Forming Packets for Maximum Compression</a></li>
</ul>
</li>
</ul>
</li>
<li><span class='closedbook_icon sysTOCGroup' onclick="SysHandleClick(event,null);return false"></span> <a href="javascript:show('OodleAPI_OodleNet_Plugins.html')" style='cursor:pointer;'>Network plugins</a>
<ul class='sysTree sysTOCItem' style='display:none;'>
<li><span class='closedbook_icon sysTOCGroup' onclick="SysHandleClick(event,null);return false"></span> <a style='cursor:pointer;'>Functions</a>
<ul class='sysTree sysTOCItem' style='display:none;'>
<li><span class='topic_icon'></span> <a href="javascript:show('OodleNet_Plugins_SetAllocators.html')" style='cursor:pointer;'>OodleNet_Plugins_SetAllocators</a></li>
<li><span class='topic_icon'></span> <a href="javascript:show('OodleNet_Plugins_SetJobSystem.html')" style='cursor:pointer;'>OodleNet_Plugins_SetJobSystem</a></li>
<li><span class='topic_icon'></span> <a href="javascript:show('OodleNet_Plugins_SetJobSystemAndCount.html')" style='cursor:pointer;'>OodleNet_Plugins_SetJobSystemAndCount</a></li>
<li><span class='topic_icon'></span> <a href="javascript:show('OodleNet_Plugins_SetPrintf.html')" style='cursor:pointer;'>OodleNet_Plugins_SetPrintf</a></li>
<li><span class='topic_icon'></span> <a href="javascript:show('OodleNet_Plugins_SetAssertion.html')" style='cursor:pointer;'>OodleNet_Plugins_SetAssertion</a></li>
</ul>
</li>
<li><span class='closedbook_icon sysTOCGroup' onclick="SysHandleClick(event,null);return false"></span> <a style='cursor:pointer;'>Typedefs</a>
<ul class='sysTree sysTOCItem' style='display:none;'>
<li><span class='topic_icon'></span> <a href="javascript:show('t_fp_OodleNet_Plugin_MallocAligned.html')" style='cursor:pointer;'>t_fp_OodleNet_Plugin_MallocAligned</a></li>
<li><span class='topic_icon'></span> <a href="javascript:show('t_fp_OodleNet_Plugin_Free.html')" style='cursor:pointer;'>t_fp_OodleNet_Plugin_Free</a></li>
<li><span class='topic_icon'></span> <a href="javascript:show('t_fp_OodleNet_Plugin_RunJob.html')" style='cursor:pointer;'>t_fp_OodleNet_Plugin_RunJob</a></li>
<li><span class='topic_icon'></span> <a href="javascript:show('t_fp_OodleNet_Plugin_WaitJob.html')" style='cursor:pointer;'>t_fp_OodleNet_Plugin_WaitJob</a></li>
<li><span class='topic_icon'></span> <a href="javascript:show('t_fp_OodleNet_Plugin_Printf.html')" style='cursor:pointer;'>t_fp_OodleNet_Plugin_Printf</a></li>
<li><span class='topic_icon'></span> <a href="javascript:show('t_fp_OodleNet_Plugin_DisplayAssertion.html')" style='cursor:pointer;'>t_fp_OodleNet_Plugin_DisplayAssertion</a></li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
<li><span class='closedbook_icon sysTOCGroup' onclick="SysHandleClick(event,null);return false"></span> <a href="javascript:show('examples.html')" style='cursor:pointer;'>Examples</a>
<ul class='sysTree sysTOCItem' style='display:none;'>
<li><span class='topic_icon'></span> <a href="javascript:show('Oodle_About_Examples.html')" style='cursor:pointer;'>How to build and use the Oodle examples</a></li>
<li><span class='topic_icon'></span> <a href="javascript:show('example_lz.html')" style='cursor:pointer;'>example_lz : Example demonstrating LZ compression and decompression</a></li>
<li><span class='topic_icon'></span> <a href="javascript:show('example_lz_chart.html')" style='cursor:pointer;'>example_lz_chart : Example that makes a chart of OodleLZ options</a></li>
<li><span class='topic_icon'></span> <a href="javascript:show('example_lz_noallocs.html')" style='cursor:pointer;'>example_lz_noallocs : Example demonstrating Oodle compression with no allocations</a></li>
<li><span class='topic_icon'></span> <a href="javascript:show('example_lz_overlap.html')" style='cursor:pointer;'>example_lz_overlap : Example demonstrating parallel overlap with OodleLZ</a></li>
<li><span class='topic_icon'></span> <a href="javascript:show('example_lz_simple.html')" style='cursor:pointer;'>example_lz_simple : Example demonstrating very simple LZ memory->memory compression using only Oodle Core</a></li>
<li><span class='topic_icon'></span> <a href="javascript:show('example_lz_threadphased.html')" style='cursor:pointer;'>example_lz_threadphased : Example of 2-thread ThreadPhased decoding</a></li>
<li><span class='topic_icon'></span> <a href="javascript:show('example_network_client.html')" style='cursor:pointer;'>example_network_client : Example with simple network client support</a></li>
<li><span class='topic_icon'></span> <a href="javascript:show('example_packet.html')" style='cursor:pointer;'>example_packet : Example demonstrating network packet compression</a></li>
</ul>
</li>
<li><span class='closedbook_icon sysTOCGroup' onclick="SysHandleClick(event,null);return false"></span> <a href="javascript:show('acknowledgements.html')" style='cursor:pointer;'>Acknowledgements</a>
<ul class='sysTree sysTOCItem' style='display:none;'>
<li><span class='topic_icon'></span> <a href="javascript:show('licenses.html')" style='cursor:pointer;'>Third Party License Notices</a></li>
</ul>
</li>
<li><span class='topic_icon'></span> <a href="javascript:show('changelog.html')" style='cursor:pointer;'>Change Log</a></li>
<li><span class='topic_icon'></span> <a href="javascript:show('start_OodleNetwork.html')" style='cursor:pointer;'>Getting Started with Oodle Network</a></li>
<li><span class='topic_icon'></span> <a href="javascript:show('start_newLeviathan.html')" style='cursor:pointer;'>Introducing the new Oodle Leviathan</a></li>
<li><span class='topic_icon'></span> <a href="javascript:show('start_CoreVsExt.html')" style='cursor:pointer;'>Oodle2 Core vs Oodle2 Ext</a></li>
<li><span class='topic_icon'></span> <a href="javascript:show('start_Benchmarking.html')" style='cursor:pointer;'>Tips for benchmarking a compressor</a></li>
<li><span class='topic_icon'></span> <a href="javascript:show('start_OodleData.html')" style='cursor:pointer;'>Getting Started with Oodle LZ Data Compression</a></li>
<li><span class='topic_icon'></span> <a href="javascript:show('start_NetworkSplit.html')" style='cursor:pointer;'>Oodle Network and Data SDK separation</a></li>
</ul>
</div><div class='sidebar_innards' id = 'SysIndex' style='display:none;'>
<ul class='sysIndex'>
<li><a onclick="show('Oodle_About_Compression_Scratch_Mem.html')">About Compression Scratch Memory</a></li>
<li><a onclick="show('Oodle_About.html')">About Oodle</a></li>
<li><a onclick="show('Oodle_AboutExt.html')">About Oodle Ext</a></li>
<li><a onclick="show('Oodle_About_Job_Threading_Plugins.html')">About Oodle Job Threading Plugins</a></li>
<li><a onclick="show('OodleNetwork_About.html')">About Oodle Network Compression</a></li>
<li><a onclick="show('Oodle_About_Android.html')">About Oodle on Android</a></li>
<li><a onclick="show('Oodle_About_IOS.html')">About Oodle on IOS</a></li>
<li><a onclick="show('Oodle_About_Linux.html')">About Oodle on Linux</a></li>
<li><a onclick="show('Oodle_About_Mac.html')">About Oodle on Mac</a></li>
<li><a onclick="show('Oodle_About_Switch.html')">About Oodle on Nintendo Switch</a></li>
<li><a onclick="show('Oodle_About_PS4.html')">About Oodle on PS4</a></li>
<li><a onclick="show('Oodle_About_Platforms.html')">About Oodle on Platforms</a></li>
<li><a onclick="show('Oodle_About_WASM.html')">About Oodle on WASM</a></li>
<li><a onclick="show('Oodle_About_Windows.html')">About Oodle on Windows</a></li>
<li><a onclick="show('Oodle_About_Windows_UWP.html')">About Oodle on Windows UWP</a></li>
<li><a onclick="show('Oodle_About_XboxOne.html')">About Oodle on Xbox One</a></li>
<li><a onclick="show('Oodle_About_ozip.html')">About Oodle ozip</a></li>
<li><a onclick="show('OodleXIOQ_About.html')">About OodleIOQ</a></li>
<li><a onclick="show('OodleLZ_About.html')">About OodleLZ</a></li>
<li><a onclick="show('OodleLZ_About_Hydra.html')">About OodleLZ Hydra</a></li>
<li><a onclick="show('OodleLZ_About_ThreadPhasedDecode.html')">About OodleLZ ThreadPhased Decode</a></li>
<li><a onclick="show('OodleNetwork1_About.html')">About OodleNetwork1</a></li>
<li><a onclick="show('OodleXHandle_About.html')">About OodleXHandle</a></li>
<li><a onclick="show('OodleXMalloc_About.html')">About OodleXMalloc</a></li>
<li><a onclick="show('acknowledgements.html')">Acknowledgements</a></li>
<li><a onclick="show('OodleNetwork_About_CapturingTrainingData.html')">Capturing Training data for OodleNetwork</a></li>
<li><a onclick="show('changelog.html')">Change Log</a></li>
<li><a onclick="show('OodleAPI_Base.html')">Core Base</a></li>
<li><a onclick="show('OodleAPI_LZ.html')">Core LZ compression</a></li>
<li><a onclick="show('OodleAPI_OodleCore_Plugins.html')">Core plugins</a></li>
<li><a onclick="show('examples.html')">Examples</a></li>
<li><a onclick="show('Oodle_FAQ_data_compatibility.html')">FAQ: Do new Oodle versions break data compatibility ?</a></li>
<li><a onclick="show('Oodle_FAQ_DecompressingToGraphicsMemoryIsSlow.html')">FAQ: How do I decompress to graphics memory quickly?</a></li>
<li><a onclick="show('Oodle_FAQ_HowDoIGetOodleLogs.html')">FAQ: How do I get the Oodle logs?</a></li>
<li><a onclick="show('Oodle_FAQ_limit_encoder_memory_use.html')">FAQ: How do I limit the encoder memory use?</a></li>
<li><a onclick="show('Oodle_FAQ_UseOodleWithNoAllocator.html')">FAQ: How do I use Oodle with no allocator?</a></li>
<li><a onclick="show('Oodle_FAQ_vs_other_compressors.html')">FAQ: How does OodleLZ compare with other compressors ?</a></li>
<li><a onclick="show('Oodle_FAQ_MemoryUse.html')">FAQ: How much memory do the Oodle compressors use ?</a></li>
<li><a onclick="show('Oodle_FAQ_OutOfHandles.html')">FAQ: I ran out of OodleHandle table slots; what do I do?</a></li>
<li><a onclick="show('Oodle_FAQ_BadWriteContents.html')">FAQ: I write a file with IOQ but the contents are garbage?</a></li>
<li><a onclick="show('Oodle_FAQ_FindingIOProblems.html')">FAQ: My Files aren't loading right and I can't track it down</a></li>
<li><a onclick="show('Oodle_FAQ_OodleLZ_Decompress_Failed.html')">FAQ: OodleLZ_Decompress is failing how do I diagnose it?</a></li>
<li><a onclick="show('Oodle_FAQ_deprecated_compressors.html')">FAQ: What are the Oodle deprecated compressors ?</a></li>
<li><a onclick="show('Oodle_FAQ_LZCompareTable.html')">FAQ: What are the speeds and ratios of the OodleLZ compressors and levels?</a></li>
<li><a onclick="show('Oodle_FAQ_S64_And_SINTa.html')">FAQ: What is SINTa? How do I load files bigger than 2 GB?</a></li>
<li><a onclick="show('Oodle_FAQ_WhichLZ.html')">FAQ: Which OodleLZ should I use?</a></li>
<li><a onclick="show('OodleNetwork_About_FormingPacketsForMaximumCompression.html')">Forming Packets for Maximum Compression</a></li>
<li><a onclick="show('Oodle_FAQ.html')">Frequently Asked Questions</a></li>
<li><a onclick="show('start_OodleData.html')">Getting Started with Oodle LZ Data Compression</a></li>
<li><a onclick="show('start_OodleNetwork.html')">Getting Started with Oodle Network</a></li>
<li><a onclick="show('Oodle_About_Examples.html')">How to build and use the Oodle examples</a></li>
<li><a onclick="show('Oodle_About_Index.html')">Index of Abouts</a></li>
<li><a onclick="show('start_newLeviathan.html')">Introducing the new Oodle Leviathan</a></li>
<li><a onclick="show('OodleAPI_OodleNet_Plugins.html')">Network plugins</a></li>
<li><a onclick="show('OODLELZ_BLOCK_LEN.html')">OODLELZ_BLOCK_LEN</a></li>
<li><a onclick="show('OODLELZ_BLOCK_MAX_COMPLEN.html')">OODLELZ_BLOCK_MAX_COMPLEN</a></li>
<li><a onclick="show('OODLELZ_FAILED.html')">OODLELZ_FAILED</a></li>
<li><a onclick="show('OODLELZ_LOCALDICTIONARYSIZE_MAX.html')">OODLELZ_LOCALDICTIONARYSIZE_MAX</a></li>
<li><a onclick="show('OODLELZ_QUANTUM_LEN.html')">OODLELZ_QUANTUM_LEN</a></li>
<li><a onclick="show('OODLELZ_SCRATCH_MEM_NO_BOUND.html')">OODLELZ_SCRATCH_MEM_NO_BOUND</a></li>
<li><a onclick="show('OODLELZ_SPACESPEEDTRADEOFFBYTES_DEFAULT.html')">OODLELZ_SPACESPEEDTRADEOFFBYTES_DEFAULT</a></li>
<li><a onclick="show('OODLENETWORK1_DECOMP_BUF_OVERREAD_LEN.html')">OODLENETWORK1_DECOMP_BUF_OVERREAD_LEN</a></li>
<li><a onclick="show('OODLENETWORK1_HASH_BITS_DEFAULT.html')">OODLENETWORK1_HASH_BITS_DEFAULT</a></li>
<li><a onclick="show('OODLENETWORK1_MAX_DICTIONARY_SIZE.html')">OODLENETWORK1_MAX_DICTIONARY_SIZE</a></li>
<li><a onclick="show('OodleXLog_StateFlags.html')">OODLEXLOG_AUTOFLUSH_THREADLOG</a></li>
<li><a onclick="show('OodleXLog_StateFlags.html')">OODLEXLOG_CALLBACK</a></li>
<li><a onclick="show('OodleXLog_StateFlags.html')">OODLEXLOG_ECHO</a></li>
<li><a onclick="show('OodleXLog_StateFlags.html')">OODLEXLOG_FILE_LINE</a></li>
<li><a onclick="show('OodleXLog_StateFlags.html')">OODLEXLOG_FLUSH_EVERY_WRITE</a></li>
<li><a onclick="show('OodleXLog_StateFlags.html')">OODLEXLOG_PREFIX_THREAD_TIME</a></li>
<li><a onclick="show('OodleXLog_StateFlags.html')">OODLEXLOG_STATE_VERBOSITY0</a></li>
<li><a onclick="show('OodleXLog_StateFlags.html')">OODLEXLOG_STATE_VERBOSITY1</a></li>
<li><a onclick="show('OodleXLog_StateFlags.html')">OODLEXLOG_STATE_VERBOSITY2</a></li>
<li><a onclick="show('OodleXLog_StateFlags.html')">OODLEXLOG_STATE_VERBOSITY_NONE</a></li>
<li><a onclick="show('OodleXLog_StateFlags.html')">OODLEXLOG_TO_DEBUGGER</a></li>
<li><a onclick="show('OodleXLog_StateFlags.html')">OODLEXLOG_TO_FILE</a></li>
<li><a onclick="show('OODLEX_ASYNC_HANDLE_DONE.html')">OODLEX_ASYNC_HANDLE_DONE</a></li>
<li><a onclick="show('OODLEX_ASYNC_HANDLE_ERROR.html')">OODLEX_ASYNC_HANDLE_ERROR</a></li>
<li><a onclick="show('OODLEX_ASYNC_HANDLE_INVALID.html')">OODLEX_ASYNC_HANDLE_INVALID</a></li>
<li><a onclick="show('OODLEX_ASYNC_HANDLE_PENDING.html')">OODLEX_ASYNC_HANDLE_PENDING</a></li>
<li><a onclick="show('OODLEX_BUFFER_SIZE_DEFAULT.html')">OODLEX_BUFFER_SIZE_DEFAULT</a></li>
<li><a onclick="show('OODLEX_FILEINFO_FLAGS.html')">OODLEX_FILEINFO_FLAGS</a></li>
<li><a onclick="show('OODLEX_FILEINFO_FLAGS.html')">OODLEX_FILEINFO_FLAG_DIR</a></li>
<li><a onclick="show('OODLEX_FILEINFO_FLAGS.html')">OODLEX_FILEINFO_FLAG_Force32</a></li>
<li><a onclick="show('OODLEX_FILEINFO_FLAGS.html')">OODLEX_FILEINFO_FLAG_HIDDEN</a></li>
<li><a onclick="show('OODLEX_FILEINFO_FLAG_INVALID.html')">OODLEX_FILEINFO_FLAG_INVALID</a></li>
<li><a onclick="show('OODLEX_FILEINFO_FLAGS.html')">OODLEX_FILEINFO_FLAG_OFFLINE</a></li>
<li><a onclick="show('OODLEX_FILEINFO_FLAGS.html')">OODLEX_FILEINFO_FLAG_READONLY</a></li>
<li><a onclick="show('OODLEX_FILEINFO_FLAGS.html')">OODLEX_FILEINFO_FLAG_SYMLINK</a></li>
<li><a onclick="show('OODLEX_FILEINFO_FLAGS.html')">OODLEX_FILEINFO_FLAG_TEMPORARY</a></li>
<li><a onclick="show('OODLEX_FILEINFO_MODTIME_INVALID.html')">OODLEX_FILEINFO_MODTIME_INVALID</a></li>
<li><a onclick="show('OODLEX_FILE_CLOSE_NO_TRUNCATE_SIZE.html')">OODLEX_FILE_CLOSE_NO_TRUNCATE_SIZE</a></li>
<li><a onclick="show('OODLEX_FILE_OPEN_NO_RESERVE_SIZE.html')">OODLEX_FILE_OPEN_NO_RESERVE_SIZE</a></li>
<li><a onclick="show('OODLEX_FILE_SIZE_INVALID.html')">OODLEX_FILE_SIZE_INVALID</a></li>
<li><a onclick="show('OODLEX_IO_MAX_ALIGNMENT.html')">OODLEX_IO_MAX_ALIGNMENT</a></li>
<li><a onclick="show('OODLEX_PATH_DELIM.html')">OODLEX_PATH_DELIM</a></li>
<li><a onclick="show('OODLE_ALLOW_DEPRECATED_COMPRESSORS.html')">OODLE_ALLOW_DEPRECATED_COMPRESSORS</a></li>
<li><a onclick="show('OODLE_HEADER_VERSION.html')">OODLE_HEADER_VERSION</a></li>
<li><a onclick="show('OODLE_JOB_MAX_DEPENDENCIES.html')">OODLE_JOB_MAX_DEPENDENCIES</a></li>
<li><a onclick="show('OODLE_JOB_NULL_HANDLE.html')">OODLE_JOB_NULL_HANDLE</a></li>
<li><a onclick="show('OODLE_MALLOC_MINIMUM_ALIGNMENT.html')">OODLE_MALLOC_MINIMUM_ALIGNMENT</a></li>
<li><a onclick="show('OODLE_WORKERS_COUNT_ALL_HYPER_CORES.html')">OODLE_WORKERS_COUNT_ALL_HYPER_CORES</a></li>
<li><a onclick="show('OODLE_WORKERS_COUNT_ALL_PHYSICAL_CORES.html')">OODLE_WORKERS_COUNT_ALL_PHYSICAL_CORES</a></li>
<li><a onclick="show('start_NetworkSplit.html')">Oodle Network and Data SDK separation</a></li>
<li><a onclick="show('OodleAPI_Network.html')">Oodle Network compression</a></li>
<li><a onclick="show('OodleCoreAPI.html')">Oodle2 Core API Documentation</a></li>
<li><a onclick="show('start_CoreVsExt.html')">Oodle2 Core vs Oodle2 Ext</a></li>
<li><a onclick="show('OodleExtAPI.html')">Oodle2 Ext API Documentation</a></li>
<li><a onclick="show('OodleNetworkAPI.html')">Oodle2 Network API Documentation</a></li>
<li><a onclick="show('OodleAPI_LZ_Compressors.html')">OodleAPI_LZ_Compressors</a></li>
<li><a onclick="show('OodleAPI_OodleNetwork1.html')">OodleAPI_OodleNetwork1</a></li>
<li><a onclick="show('OodleConfigValues.html')">OodleConfigValues</a></li>
<li><a onclick="show('OodleCore_Plugins_SetAllocators.html')">OodleCore_Plugins_SetAllocators</a></li>
<li><a onclick="show('OodleCore_Plugins_SetAssertion.html')">OodleCore_Plugins_SetAssertion</a></li>
<li><a onclick="show('OodleCore_Plugins_SetJobSystem.html')">OodleCore_Plugins_SetJobSystem</a></li>
<li><a onclick="show('OodleCore_Plugins_SetJobSystemAndCount.html')">OodleCore_Plugins_SetJobSystemAndCount</a></li>
<li><a onclick="show('OodleCore_Plugins_SetPrintf.html')">OodleCore_Plugins_SetPrintf</a></li>
<li><a onclick="show('OodleDecompressCallback.html')">OodleDecompressCallback</a></li>
<li><a onclick="show('OodleDecompressCallbackRet.html')">OodleDecompressCallbackRet</a></li>
<li><a onclick="show('OodleDecompressCallbackRet.html')">OodleDecompressCallbackRet_Cancel</a></li>
<li><a onclick="show('OodleDecompressCallbackRet.html')">OodleDecompressCallbackRet_Continue</a></li>
<li><a onclick="show('OodleDecompressCallbackRet.html')">OodleDecompressCallbackRet_Force32</a></li>
<li><a onclick="show('OodleDecompressCallbackRet.html')">OodleDecompressCallbackRet_Invalid</a></li>
<li><a onclick="show('OodleDecompressCallback_WriteFile.html')">OodleDecompressCallback_WriteFile</a></li>
<li><a onclick="show('OodleDecompressCallback_WriteFile_Data.html')">OodleDecompressCallback_WriteFile_Data</a></li>
<li><a onclick="show('OodleFileNotFoundIsAnError.html')">OodleFileNotFoundIsAnError</a></li>
<li><a onclick="show('OodleFileNotFoundIsAnError.html')">OodleFileNotFoundIsAnError_Force32</a></li>
<li><a onclick="show('OodleFileNotFoundIsAnError.html')">OodleFileNotFoundIsAnError_No</a></li>
<li><a onclick="show('OodleFileNotFoundIsAnError.html')">OodleFileNotFoundIsAnError_Yes</a></li>
<li><a onclick="show('OodleLZDecoder.html')">OodleLZDecoder</a></li>
<li><a onclick="show('OodleLZDecoder_Create.html')">OodleLZDecoder_Create</a></li>
<li><a onclick="show('OodleLZDecoder_DecodeSome.html')">OodleLZDecoder_DecodeSome</a></li>
<li><a onclick="show('OodleLZDecoder_Destroy.html')">OodleLZDecoder_Destroy</a></li>
<li><a onclick="show('OodleLZDecoder_MakeValidCircularWindowSize.html')">OodleLZDecoder_MakeValidCircularWindowSize</a></li>
<li><a onclick="show('OodleLZDecoder_MemorySizeNeeded.html')">OodleLZDecoder_MemorySizeNeeded</a></li>
<li><a onclick="show('OodleLZDecoder_Reset.html')">OodleLZDecoder_Reset</a></li>
<li><a onclick="show('OodleLZSeekTable_Flags.html')">OodleLZSeekTable_Flags</a></li>
<li><a onclick="show('OodleLZSeekTable_Flags.html')">OodleLZSeekTable_Flags_Force32</a></li>
<li><a onclick="show('OodleLZSeekTable_Flags.html')">OodleLZSeekTable_Flags_MakeRawCRCs</a></li>
<li><a onclick="show('OodleLZSeekTable_Flags.html')">OodleLZSeekTable_Flags_None</a></li>
<li><a onclick="show('OodleLZ_CheckCRC.html')">OodleLZ_CheckCRC</a></li>
<li><a onclick="show('OodleLZ_CheckCRC.html')">OodleLZ_CheckCRC_Force32</a></li>
<li><a onclick="show('OodleLZ_CheckCRC.html')">OodleLZ_CheckCRC_No</a></li>
<li><a onclick="show('OodleLZ_CheckCRC.html')">OodleLZ_CheckCRC_Yes</a></li>
<li><a onclick="show('OodleLZ_CheckSeekTableCRCs.html')">OodleLZ_CheckSeekTableCRCs</a></li>
<li><a onclick="show('OodleLZ_Compress.html')">OodleLZ_Compress</a></li>
<li><a onclick="show('OodleLZ_CompressOptions.html')">OodleLZ_CompressOptions</a></li>
<li><a onclick="show('OodleLZ_CompressOptions_GetDefault.html')">OodleLZ_CompressOptions_GetDefault</a></li>
<li><a onclick="show('OodleLZ_CompressOptions_Validate.html')">OodleLZ_CompressOptions_Validate</a></li>
<li><a onclick="show('OodleLZ_CompressScratchMemBoundType.html')">OodleLZ_CompressScratchMemBoundType</a></li>
<li><a onclick="show('OodleLZ_CompressScratchMemBoundType.html')">OodleLZ_CompressScratchMemBoundType_Force32</a></li>
<li><a onclick="show('OodleLZ_CompressScratchMemBoundType.html')">OodleLZ_CompressScratchMemBoundType_Typical</a></li>
<li><a onclick="show('OodleLZ_CompressScratchMemBoundType.html')">OodleLZ_CompressScratchMemBoundType_WorstCase</a></li>
<li><a onclick="show('OodleLZ_CompressionLevel.html')">OodleLZ_CompressionLevel</a></li>
<li><a onclick="show('OodleLZ_CompressionLevel.html')">OodleLZ_CompressionLevel_Fast</a></li>
<li><a onclick="show('OodleLZ_CompressionLevel.html')">OodleLZ_CompressionLevel_Force32</a></li>
<li><a onclick="show('OodleLZ_CompressionLevel_GetName.html')">OodleLZ_CompressionLevel_GetName</a></li>
<li><a onclick="show('OodleLZ_CompressionLevel.html')">OodleLZ_CompressionLevel_HyperFast</a></li>
<li><a onclick="show('OodleLZ_CompressionLevel.html')">OodleLZ_CompressionLevel_HyperFast1</a></li>
<li><a onclick="show('OodleLZ_CompressionLevel.html')">OodleLZ_CompressionLevel_HyperFast2</a></li>
<li><a onclick="show('OodleLZ_CompressionLevel.html')">OodleLZ_CompressionLevel_HyperFast3</a></li>
<li><a onclick="show('OodleLZ_CompressionLevel.html')">OodleLZ_CompressionLevel_HyperFast4</a></li>
<li><a onclick="show('OodleLZ_CompressionLevel.html')">OodleLZ_CompressionLevel_Invalid</a></li>
<li><a onclick="show('OodleLZ_CompressionLevel.html')">OodleLZ_CompressionLevel_Max</a></li>
<li><a onclick="show('OodleLZ_CompressionLevel.html')">OodleLZ_CompressionLevel_Min</a></li>
<li><a onclick="show('OodleLZ_CompressionLevel.html')">OodleLZ_CompressionLevel_None</a></li>
<li><a onclick="show('OodleLZ_CompressionLevel.html')">OodleLZ_CompressionLevel_Normal</a></li>
<li><a onclick="show('OodleLZ_CompressionLevel.html')">OodleLZ_CompressionLevel_Optimal</a></li>
<li><a onclick="show('OodleLZ_CompressionLevel.html')">OodleLZ_CompressionLevel_Optimal1</a></li>
<li><a onclick="show('OodleLZ_CompressionLevel.html')">OodleLZ_CompressionLevel_Optimal2</a></li>
<li><a onclick="show('OodleLZ_CompressionLevel.html')">OodleLZ_CompressionLevel_Optimal3</a></li>
<li><a onclick="show('OodleLZ_CompressionLevel.html')">OodleLZ_CompressionLevel_Optimal4</a></li>
<li><a onclick="show('OodleLZ_CompressionLevel.html')">OodleLZ_CompressionLevel_Optimal5</a></li>
<li><a onclick="show('OodleLZ_CompressionLevel.html')">OodleLZ_CompressionLevel_SuperFast</a></li>
<li><a onclick="show('OodleLZ_CompressionLevel.html')">OodleLZ_CompressionLevel_VeryFast</a></li>
<li><a onclick="show('OodleLZ_Compressor.html')">OodleLZ_Compressor</a></li>
<li><a onclick="show('OodleLZ_Compressor.html')">OodleLZ_Compressor_BitKnit</a></li>
<li><a onclick="show('OodleLZ_Compressor_CanDecodeFuzzSafe.html')">OodleLZ_Compressor_CanDecodeFuzzSafe</a></li>
<li><a onclick="show('OodleLZ_Compressor_CanDecodeInCircularWindow.html')">OodleLZ_Compressor_CanDecodeInCircularWindow</a></li>
<li><a onclick="show('OodleLZ_Compressor_CanDecodeInPlace.html')">OodleLZ_Compressor_CanDecodeInPlace</a></li>
<li><a onclick="show('OodleLZ_Compressor_CanDecodeThreadPhased.html')">OodleLZ_Compressor_CanDecodeThreadPhased</a></li>
<li><a onclick="show('OodleLZ_Compressor.html')">OodleLZ_Compressor_Count</a></li>
<li><a onclick="show('OodleLZ_Compressor.html')">OodleLZ_Compressor_Force32</a></li>
<li><a onclick="show('OodleLZ_Compressor_GetName.html')">OodleLZ_Compressor_GetName</a></li>
<li><a onclick="show('OodleLZ_Compressor.html')">OodleLZ_Compressor_Hydra</a></li>
<li><a onclick="show('OodleLZ_Compressor.html')">OodleLZ_Compressor_Invalid</a></li>
<li><a onclick="show('OodleLZ_Compressor.html')">OodleLZ_Compressor_Kraken</a></li>
<li><a onclick="show('OodleLZ_Compressor.html')">OodleLZ_Compressor_LZA</a></li>
<li><a onclick="show('OodleLZ_Compressor.html')">OodleLZ_Compressor_LZB16</a></li>
<li><a onclick="show('OodleLZ_Compressor.html')">OodleLZ_Compressor_LZBLW</a></li>
<li><a onclick="show('OodleLZ_Compressor.html')">OodleLZ_Compressor_LZH</a></li>
<li><a onclick="show('OodleLZ_Compressor.html')">OodleLZ_Compressor_LZHLW</a></li>
<li><a onclick="show('OodleLZ_Compressor.html')">OodleLZ_Compressor_LZNA</a></li>
<li><a onclick="show('OodleLZ_Compressor.html')">OodleLZ_Compressor_LZNIB</a></li>
<li><a onclick="show('OodleLZ_Compressor.html')">OodleLZ_Compressor_Leviathan</a></li>
<li><a onclick="show('OodleLZ_Compressor.html')">OodleLZ_Compressor_Mermaid</a></li>
<li><a onclick="show('OodleLZ_Compressor_MustDecodeWithoutResets.html')">OodleLZ_Compressor_MustDecodeWithoutResets</a></li>
<li><a onclick="show('OodleLZ_Compressor.html')">OodleLZ_Compressor_None</a></li>
<li><a onclick="show('OodleLZ_Compressor_RespectsDictionarySize.html')">OodleLZ_Compressor_RespectsDictionarySize</a></li>
<li><a onclick="show('OodleLZ_Compressor.html')">OodleLZ_Compressor_Selkie</a></li>
<li><a onclick="show('OodleLZ_Compressor_UsesLargeWindow.html')">OodleLZ_Compressor_UsesLargeWindow</a></li>
<li><a onclick="show('OodleLZ_Compressor_UsesWholeBlockQuantum.html')">OodleLZ_Compressor_UsesWholeBlockQuantum</a></li>
<li><a onclick="show('OodleLZ_CreateSeekTable.html')">OodleLZ_CreateSeekTable</a></li>
<li><a onclick="show('OodleLZ_DecodeSome_Out.html')">OodleLZ_DecodeSome_Out</a></li>
<li><a onclick="show('OodleLZ_Decode_ThreadPhase.html')">OodleLZ_Decode_ThreadPhase</a></li>
<li><a onclick="show('OodleLZ_Decode_ThreadPhase.html')">OodleLZ_Decode_ThreadPhase1</a></li>
<li><a onclick="show('OodleLZ_Decode_ThreadPhase.html')">OodleLZ_Decode_ThreadPhase2</a></li>
<li><a onclick="show('OodleLZ_Decode_ThreadPhase.html')">OodleLZ_Decode_ThreadPhaseAll</a></li>
<li><a onclick="show('OodleLZ_Decode_ThreadPhase.html')">OodleLZ_Decode_Unthreaded</a></li>
<li><a onclick="show('OodleLZ_Decompress.html')">OodleLZ_Decompress</a></li>
<li><a onclick="show('OodleLZ_FillSeekTable.html')">OodleLZ_FillSeekTable</a></li>
<li><a onclick="show('OodleLZ_FindSeekEntry.html')">OodleLZ_FindSeekEntry</a></li>
<li><a onclick="show('OodleLZ_FreeSeekTable.html')">OodleLZ_FreeSeekTable</a></li>
<li><a onclick="show('OodleLZ_FuzzSafe.html')">OodleLZ_FuzzSafe</a></li>
<li><a onclick="show('OodleLZ_FuzzSafe.html')">OodleLZ_FuzzSafe_No</a></li>
<li><a onclick="show('OodleLZ_FuzzSafe.html')">OodleLZ_FuzzSafe_Yes</a></li>
<li><a onclick="show('OodleLZ_GetAllChunksCompressor.html')">OodleLZ_GetAllChunksCompressor</a></li>
<li><a onclick="show('OodleLZ_GetChunkCompressor.html')">OodleLZ_GetChunkCompressor</a></li>
<li><a onclick="show('OodleLZ_GetCompressScratchMemBound.html')">OodleLZ_GetCompressScratchMemBound</a></li>
<li><a onclick="show('OodleLZ_GetCompressScratchMemBoundEx.html')">OodleLZ_GetCompressScratchMemBoundEx</a></li>
<li><a onclick="show('OodleLZ_GetCompressedBufferSizeNeeded.html')">OodleLZ_GetCompressedBufferSizeNeeded</a></li>
<li><a onclick="show('OodleLZ_GetCompressedStepForRawStep.html')">OodleLZ_GetCompressedStepForRawStep</a></li>
<li><a onclick="show('OodleLZ_GetDecodeBufferSize.html')">OodleLZ_GetDecodeBufferSize</a></li>
<li><a onclick="show('OodleLZ_GetFirstChunkCompressor.html')">OodleLZ_GetFirstChunkCompressor</a></li>
<li><a onclick="show('OodleLZ_GetInPlaceDecodeBufferSize.html')">OodleLZ_GetInPlaceDecodeBufferSize</a></li>
<li><a onclick="show('OodleLZ_GetNumSeekChunks.html')">OodleLZ_GetNumSeekChunks</a></li>
<li><a onclick="show('OodleLZ_GetSeekEntryPackedPos.html')">OodleLZ_GetSeekEntryPackedPos</a></li>
<li><a onclick="show('OodleLZ_GetSeekTableMemorySizeNeeded.html')">OodleLZ_GetSeekTableMemorySizeNeeded</a></li>
<li><a onclick="show('OodleLZ_Jobify.html')">OodleLZ_Jobify</a></li>
<li><a onclick="show('OodleLZ_Jobify.html')">OodleLZ_Jobify_Aggressive</a></li>
<li><a onclick="show('OodleLZ_Jobify.html')">OodleLZ_Jobify_Count</a></li>
<li><a onclick="show('OodleLZ_Jobify.html')">OodleLZ_Jobify_Default</a></li>
<li><a onclick="show('OodleLZ_Jobify.html')">OodleLZ_Jobify_Disable</a></li>
<li><a onclick="show('OodleLZ_Jobify.html')">OodleLZ_Jobify_Force32</a></li>
<li><a onclick="show('OodleLZ_Jobify_GetName.html')">OodleLZ_Jobify_GetName</a></li>
<li><a onclick="show('OodleLZ_Jobify.html')">OodleLZ_Jobify_Normal</a></li>
<li><a onclick="show('OodleLZ_MakeSeekChunkLen.html')">OodleLZ_MakeSeekChunkLen</a></li>
<li><a onclick="show('OodleLZ_PackedRawOverlap.html')">OodleLZ_PackedRawOverlap</a></li>
<li><a onclick="show('OodleLZ_PackedRawOverlap.html')">OodleLZ_PackedRawOverlap_Force32</a></li>
<li><a onclick="show('OodleLZ_PackedRawOverlap.html')">OodleLZ_PackedRawOverlap_No</a></li>
<li><a onclick="show('OodleLZ_PackedRawOverlap.html')">OodleLZ_PackedRawOverlap_Yes</a></li>
<li><a onclick="show('OodleLZ_Profile.html')">OodleLZ_Profile</a></li>
<li><a onclick="show('OodleLZ_Profile.html')">OodleLZ_Profile_Force32</a></li>
<li><a onclick="show('OodleLZ_Profile.html')">OodleLZ_Profile_Main</a></li>
<li><a onclick="show('OodleLZ_Profile.html')">OodleLZ_Profile_Reduced</a></li>
<li><a onclick="show('OodleLZ_SeekTable.html')">OodleLZ_SeekTable</a></li>
<li><a onclick="show('OodleLZ_ThreadPhased_BlockDecoderMemorySizeNeeded.html')">OodleLZ_ThreadPhased_BlockDecoderMemorySizeNeeded</a></li>
<li><a onclick="show('OodleLZ_Verbosity.html')">OodleLZ_Verbosity</a></li>
<li><a onclick="show('OodleLZ_Verbosity.html')">OodleLZ_Verbosity_Force32</a></li>
<li><a onclick="show('OodleLZ_Verbosity.html')">OodleLZ_Verbosity_Lots</a></li>
<li><a onclick="show('OodleLZ_Verbosity.html')">OodleLZ_Verbosity_Minimal</a></li>
<li><a onclick="show('OodleLZ_Verbosity.html')">OodleLZ_Verbosity_None</a></li>
<li><a onclick="show('OodleLZ_Verbosity.html')">OodleLZ_Verbosity_Some</a></li>
<li><a onclick="show('OodleNet_Plugins_SetAllocators.html')">OodleNet_Plugins_SetAllocators</a></li>
<li><a onclick="show('OodleNet_Plugins_SetAssertion.html')">OodleNet_Plugins_SetAssertion</a></li>
<li><a onclick="show('OodleNet_Plugins_SetJobSystem.html')">OodleNet_Plugins_SetJobSystem</a></li>
<li><a onclick="show('OodleNet_Plugins_SetJobSystemAndCount.html')">OodleNet_Plugins_SetJobSystemAndCount</a></li>
<li><a onclick="show('OodleNet_Plugins_SetPrintf.html')">OodleNet_Plugins_SetPrintf</a></li>
<li><a onclick="show('OodleNetwork1TCP_Decode.html')">OodleNetwork1TCP_Decode</a></li>
<li><a onclick="show('OodleNetwork1TCP_Encode.html')">OodleNetwork1TCP_Encode</a></li>
<li><a onclick="show('OodleNetwork1TCP_State.html')">OodleNetwork1TCP_State</a></li>
<li><a onclick="show('OodleNetwork1TCP_State_InitAsCopy.html')">OodleNetwork1TCP_State_InitAsCopy</a></li>
<li><a onclick="show('OodleNetwork1TCP_State_Reset.html')">OodleNetwork1TCP_State_Reset</a></li>
<li><a onclick="show('OodleNetwork1TCP_State_Size.html')">OodleNetwork1TCP_State_Size</a></li>
<li><a onclick="show('OodleNetwork1TCP_Train.html')">OodleNetwork1TCP_Train</a></li>
<li><a onclick="show('OodleNetwork1UDP_Decode.html')">OodleNetwork1UDP_Decode</a></li>
<li><a onclick="show('OodleNetwork1UDP_Encode.html')">OodleNetwork1UDP_Encode</a></li>
<li><a onclick="show('OodleNetwork1UDP_State.html')">OodleNetwork1UDP_State</a></li>
<li><a onclick="show('OodleNetwork1UDP_StateCompacted.html')">OodleNetwork1UDP_StateCompacted</a></li>
<li><a onclick="show('OodleNetwork1UDP_StateCompacted_MaxSize.html')">OodleNetwork1UDP_StateCompacted_MaxSize</a></li>
<li><a onclick="show('OodleNetwork1UDP_State_Compact.html')">OodleNetwork1UDP_State_Compact</a></li>
<li><a onclick="show('OodleNetwork1UDP_State_Compact_ForVersion.html')">OodleNetwork1UDP_State_Compact_ForVersion</a></li>
<li><a onclick="show('OodleNetwork1UDP_State_Size.html')">OodleNetwork1UDP_State_Size</a></li>
<li><a onclick="show('OodleNetwork1UDP_State_Uncompact.html')">OodleNetwork1UDP_State_Uncompact</a></li>
<li><a onclick="show('OodleNetwork1UDP_State_Uncompact_ForVersion.html')">OodleNetwork1UDP_State_Uncompact_ForVersion</a></li>
<li><a onclick="show('OodleNetwork1UDP_Train.html')">OodleNetwork1UDP_Train</a></li>
<li><a onclick="show('OodleNetwork1_CompressedBufferSizeNeeded.html')">OodleNetwork1_CompressedBufferSizeNeeded</a></li>
<li><a onclick="show('OodleNetwork1_SelectDictionaryFromPackets.html')">OodleNetwork1_SelectDictionaryFromPackets</a></li>
<li><a onclick="show('OodleNetwork1_SelectDictionaryFromPackets_Trials.html')">OodleNetwork1_SelectDictionaryFromPackets_Trials</a></li>
<li><a onclick="show('OodleNetwork1_SelectDictionarySupported.html')">OodleNetwork1_SelectDictionarySupported</a></li>
<li><a onclick="show('OodleNetwork1_Shared.html')">OodleNetwork1_Shared</a></li>
<li><a onclick="show('OodleNetwork1_Shared_SetWindow.html')">OodleNetwork1_Shared_SetWindow</a></li>
<li><a onclick="show('OodleNetwork1_Shared_Size.html')">OodleNetwork1_Shared_Size</a></li>
<li><a onclick="show('OodleNetworkVersion.html')">OodleNetworkVersion</a></li>
<li><a onclick="show('OodleXAPI_Debug.html')">OodleX Debug aids</a></li>
<li><a onclick="show('OodleXAPI_LZ.html')">OodleX LZ compression</a></li>
<li><a onclick="show('OodleXAPI_Malloc.html')">OodleX Memory Allocators</a></li>
<li><a onclick="show('OodleXAPI_Init.html')">OodleX Startup and Shutdown</a></li>
<li><a onclick="show('OodleXAPI_Util.html')">OodleX Utils</a></li>
<li><a onclick="show('OodleXAPI_Handle.html')">OodleX async handle operations</a></li>
<li><a onclick="show('OodleXAPI_IOQ.html')">OodleX low level async io</a></li>
<li><a onclick="show('OodleXAPI_Threading.html')">OodleX threading util</a></li>
<li><a onclick="show('OodleXAPI_LZ_Async.html')">OodleXAPI_LZ_Async</a></li>
<li><a onclick="show('OodleXAsyncSelect.html')">OodleXAsyncSelect</a></li>
<li><a onclick="show('OodleXAsyncSelect.html')">OodleXAsyncSelect_All</a></li>
<li><a onclick="show('OodleXAsyncSelect.html')">OodleXAsyncSelect_Force32</a></li>
<li><a onclick="show('OodleXAsyncSelect.html')">OodleXAsyncSelect_Full</a></li>
<li><a onclick="show('OodleXAsyncSelect.html')">OodleXAsyncSelect_NoFlagsMask</a></li>
<li><a onclick="show('OodleXAsyncSelect.html')">OodleXAsyncSelect_None</a></li>
<li><a onclick="show('OodleXAsyncSelect.html')">OodleXAsyncSelect_Wide</a></li>
<li><a onclick="show('OodleXAsyncSelect.html')">OodleXAsyncSelect_Workers</a></li>
<li><a onclick="show('OodleXConfigValues.html')">OodleXConfigValues</a></li>
<li><a onclick="show('OodleXCopyFileFlags.html')">OodleXCopyFileFlags</a></li>
<li><a onclick="show('OodleXCopyFileFlags.html')">OodleXCopyFileFlags_Default</a></li>
<li><a onclick="show('OodleXCopyFileFlags.html')">OodleXCopyFileFlags_DontOverwriteExisting</a></li>
<li><a onclick="show('OodleXCopyFileFlags.html')">OodleXCopyFileFlags_Force32</a></li>
<li><a onclick="show('OodleXCopyFileFlags.html')">OodleXCopyFileFlags_Mask</a></li>
<li><a onclick="show('OodleXCopyFileFlags.html')">OodleXCopyFileFlags_Overwrite</a></li>
<li><a onclick="show('OodleXCopyFileFlags.html')">OodleXCopyFileFlags_OverwriteOnlyIfDifferentSize</a></li>
<li><a onclick="show('OodleXCopyFileFlags.html')">OodleXCopyFileFlags_OverwriteOnlyIfNewer</a></li>
<li><a onclick="show('OodleXCopyFileFlags.html')">OodleXCopyFileFlags_OverwriteOnlyIfNewerOrDifferentSize</a></li>
<li><a onclick="show('OodleXDecompressCallback_WriteFile_Data_Init.html')">OodleXDecompressCallback_WriteFile_Data_Init</a></li>
<li><a onclick="show('OodleXError.html')">OodleXError</a></li>
<li><a onclick="show('OodleXError.html')">OodleXError_Alignment</a></li>
<li><a onclick="show('OodleXError.html')">OodleXError_BadParameters</a></li>
<li><a onclick="show('OodleXError.html')">OodleXError_Close</a></li>
<li><a onclick="show('OodleXError.html')">OodleXError_Compressor</a></li>
<li><a onclick="show('OodleXError.html')">OodleXError_Corrupt</a></li>
<li><a onclick="show('OodleXError.html')">OodleXError_Count</a></li>
<li><a onclick="show('OodleXError.html')">OodleXError_FileNotFound</a></li>
<li><a onclick="show('OodleXError.html')">OodleXError_Force32</a></li>
<li><a onclick="show('OodleXError.html')">OodleXError_InvalidHandle</a></li>
<li><a onclick="show('OodleXError.html')">OodleXError_Malloc</a></li>
<li><a onclick="show('OodleXError.html')">OodleXError_NoAccess</a></li>
<li><a onclick="show('OodleXError.html')">OodleXError_Ok</a></li>
<li><a onclick="show('OodleXError.html')">OodleXError_PreviousAsyncFailed</a></li>
<li><a onclick="show('OodleXError.html')">OodleXError_UnexpectedEOF</a></li>
<li><a onclick="show('OodleXError.html')">OodleXError_Unknown</a></li>
<li><a onclick="show('OodleXFileInfo.html')">OodleXFileInfo</a></li>
<li><a onclick="show('OodleXFileMode.html')">OodleXFileMode</a></li>
<li><a onclick="show('OodleXFileMode.html')">OodleXFileMode_Force32</a></li>
<li><a onclick="show('OodleXFileMode.html')">OodleXFileMode_Invalid</a></li>
<li><a onclick="show('OodleXFileMode.html')">OodleXFileMode_Read</a></li>
<li><a onclick="show('OodleXFileMode.html')">OodleXFileMode_ReadWrite</a></li>
<li><a onclick="show('OodleXFileMode.html')">OodleXFileMode_Write</a></li>
<li><a onclick="show('OodleXFileMode.html')">OodleXFileMode_WriteCreate</a></li>
<li><a onclick="show('OodleXFileOpenFlags.html')">OodleXFileOpenFlags</a></li>
<li><a onclick="show('OodleXFileOpenFlags.html')">OodleXFileOpenFlags_Buffered</a></li>
<li><a onclick="show('OodleXFileOpenFlags.html')">OodleXFileOpenFlags_Default</a></li>
<li><a onclick="show('OodleXFileOpenFlags.html')">OodleXFileOpenFlags_Force32</a></li>
<li><a onclick="show('OodleXFileOpenFlags.html')">OodleXFileOpenFlags_NotBuffered</a></li>
<li><a onclick="show('OodleXFileOpenFlags.html')">OodleXFileOpenFlags_WriteCreateDontStomp</a></li>
<li><a onclick="show('OodleXFileOpsVTable.html')">OodleXFileOpsVTable</a></li>
<li><a onclick="show('OodleXFree.html')">OodleXFree</a></li>
<li><a onclick="show('OodleXFreeBig.html')">OodleXFreeBig</a></li>
<li><a onclick="show('OodleXFreeSized.html')">OodleXFreeSized</a></li>
<li><a onclick="show('OodleXFree_IOAligned.html')">OodleXFree_IOAligned</a></li>
<li><a onclick="show('OodleXHandle.html')">OodleXHandle</a></li>
<li><a onclick="show('OodleXHandleAutoDelete.html')">OodleXHandleAutoDelete</a></li>
<li><a onclick="show('OodleXHandleAutoDelete.html')">OodleXHandleAutoDelete_Force32</a></li>
<li><a onclick="show('OodleXHandleAutoDelete.html')">OodleXHandleAutoDelete_No</a></li>
<li><a onclick="show('OodleXHandleAutoDelete.html')">OodleXHandleAutoDelete_Yes</a></li>
<li><a onclick="show('OodleXHandleCountdown_Alloc.html')">OodleXHandleCountdown_Alloc</a></li>
<li><a onclick="show('OodleXHandleCountdown_Decrement.html')">OodleXHandleCountdown_Decrement</a></li>
<li><a onclick="show('OodleXHandleDeleteIfDone.html')">OodleXHandleDeleteIfDone</a></li>
<li><a onclick="show('OodleXHandleDeleteIfDone.html')">OodleXHandleDeleteIfDone_Force32</a></li>
<li><a onclick="show('OodleXHandleDeleteIfDone.html')">OodleXHandleDeleteIfDone_No</a></li>
<li><a onclick="show('OodleXHandleDeleteIfDone.html')">OodleXHandleDeleteIfDone_Yes</a></li>
<li><a onclick="show('OodleXHandleEvent_Alloc.html')">OodleXHandleEvent_Alloc</a></li>
<li><a onclick="show('OodleXHandleEvent_SetDone.html')">OodleXHandleEvent_SetDone</a></li>
<li><a onclick="show('OodleXHandleEvent_SetError.html')">OodleXHandleEvent_SetError</a></li>
<li><a onclick="show('OodleXHandleKickDelayed.html')">OodleXHandleKickDelayed</a></li>
<li><a onclick="show('OodleXHandleKickDelayed.html')">OodleXHandleKickDelayed_Force32</a></li>
<li><a onclick="show('OodleXHandleKickDelayed.html')">OodleXHandleKickDelayed_No</a></li>
<li><a onclick="show('OodleXHandleKickDelayed.html')">OodleXHandleKickDelayed_Yes</a></li>
<li><a onclick="show('OodleXIOQFile.html')">OodleXIOQFile</a></li>
<li><a onclick="show('OodleXIOQ_ClearError.html')">OodleXIOQ_ClearError</a></li>
<li><a onclick="show('OodleXIOQ_CloseFileRename_Async.html')">OodleXIOQ_CloseFileRename_Async</a></li>
<li><a onclick="show('OodleXIOQ_CloseFile_Async.html')">OodleXIOQ_CloseFile_Async</a></li>
<li><a onclick="show('OodleXIOQ_CopyFile_Async.html')">OodleXIOQ_CopyFile_Async</a></li>
<li><a onclick="show('OodleXIOQ_CopyFile_AsyncAndWait.html')">OodleXIOQ_CopyFile_AsyncAndWait</a></li>
<li><a onclick="show('OodleXIOQ_Delete_Async.html')">OodleXIOQ_Delete_Async</a></li>
<li><a onclick="show('OodleXIOQ_Delete_AsyncAndWait.html')">OodleXIOQ_Delete_AsyncAndWait</a></li>
<li><a onclick="show('OodleXIOQ_Fence_Async.html')">OodleXIOQ_Fence_Async</a></li>
<li><a onclick="show('OodleXIOQ_ForceWriteable_Async.html')">OodleXIOQ_ForceWriteable_Async</a></li>
<li><a onclick="show('OodleXIOQ_FreeBufferIOAligned_Async.html')">OodleXIOQ_FreeBufferIOAligned_Async</a></li>
<li><a onclick="show('OodleXIOQ_GetErrorDetails.html')">OodleXIOQ_GetErrorDetails</a></li>
<li><a onclick="show('OodleXIOQ_GetErrorEnum.html')">OodleXIOQ_GetErrorEnum</a></li>
<li><a onclick="show('OodleXIOQ_GetFileSize_AsyncAndWait.html')">OodleXIOQ_GetFileSize_AsyncAndWait</a></li>
<li><a onclick="show('OodleXIOQ_GetInfo.html')">OodleXIOQ_GetInfo</a></li>
<li><a onclick="show('OodleXIOQ_GetInfoByName_Async.html')">OodleXIOQ_GetInfoByName_Async</a></li>
<li><a onclick="show('OodleXIOQ_GetInfoByName_AsyncAndWait.html')">OodleXIOQ_GetInfoByName_AsyncAndWait</a></li>
<li><a onclick="show('OodleXIOQ_GetInfoByName_GetResult.html')">OodleXIOQ_GetInfoByName_GetResult</a></li>
<li><a onclick="show('OodleXIOQ_GetLastError.html')">OodleXIOQ_GetLastError</a></li>
<li><a onclick="show('OodleXIOQ_GetLastPendingOpOnFile.html')">OodleXIOQ_GetLastPendingOpOnFile</a></li>
<li><a onclick="show('OodleXIOQ_GetName.html')">OodleXIOQ_GetName</a></li>
<li><a onclick="show('OodleXIOQ_GetOSHandle.html')">OodleXIOQ_GetOSHandle</a></li>
<li><a onclick="show('OodleXIOQ_GetStatus.html')">OodleXIOQ_GetStatus</a></li>
<li><a onclick="show('OodleXIOQ_KickAnyDelayed.html')">OodleXIOQ_KickAnyDelayed</a></li>
<li><a onclick="show('OodleXIOQ_LogError.html')">OodleXIOQ_LogError</a></li>
<li><a onclick="show('OodleXIOQ_LogLastError.html')">OodleXIOQ_LogLastError</a></li>
<li><a onclick="show('OodleXIOQ_MakeAllDirs_Async.html')">OodleXIOQ_MakeAllDirs_Async</a></li>
<li><a onclick="show('OodleXIOQ_MakeAllDirs_AsyncAndWait.html')">OodleXIOQ_MakeAllDirs_AsyncAndWait</a></li>
<li><a onclick="show('OodleXIOQ_MakeDir_Async.html')">OodleXIOQ_MakeDir_Async</a></li>
<li><a onclick="show('OodleXIOQ_NameIsDir_AsyncAndWait.html')">OodleXIOQ_NameIsDir_AsyncAndWait</a></li>
<li><a onclick="show('OodleXIOQ_OpenAndReadMallocWholeFileAndClose_Async.html')">OodleXIOQ_OpenAndReadMallocWholeFileAndClose_Async</a></li>
<li><a onclick="show('OodleXIOQ_OpenAndReadMallocWholeFile_Async.html')">OodleXIOQ_OpenAndReadMallocWholeFile_Async</a></li>
<li><a onclick="show('OodleXIOQ_OpenAndRead_Async.html')">OodleXIOQ_OpenAndRead_Async</a></li>
<li><a onclick="show('OodleXIOQ_OpenForRead_Async.html')">OodleXIOQ_OpenForRead_Async</a></li>
<li><a onclick="show('OodleXIOQ_OpenForWriteCreate_Async.html')">OodleXIOQ_OpenForWriteCreate_Async</a></li>
<li><a onclick="show('OodleXIOQ_OpenForWriteTempName_Async.html')">OodleXIOQ_OpenForWriteTempName_Async</a></li>
<li><a onclick="show('OodleXIOQ_OpenWriteWholeFileCloseTempName_Async.html')">OodleXIOQ_OpenWriteWholeFileCloseTempName_Async</a></li>
<li><a onclick="show('OodleXIOQ_OpenWriteWholeFileClose_Async.html')">OodleXIOQ_OpenWriteWholeFileClose_Async</a></li>
<li><a onclick="show('OodleXIOQ_ReadMallocWholeFile_Async.html')">OodleXIOQ_ReadMallocWholeFile_Async</a></li>
<li><a onclick="show('OodleXIOQ_ReadMallocWholeFile_AsyncAndWait.html')">OodleXIOQ_ReadMallocWholeFile_AsyncAndWait</a></li>
<li><a onclick="show('OodleXIOQ_ReadMallocWholeFile_GetResult.html')">OodleXIOQ_ReadMallocWholeFile_GetResult</a></li>
<li><a onclick="show('OodleXIOQ_ReadUnalignedAdjustPointer_Async.html')">OodleXIOQ_ReadUnalignedAdjustPointer_Async</a></li>
<li><a onclick="show('OodleXIOQ_Read_Async.html')">OodleXIOQ_Read_Async</a></li>
<li><a onclick="show('OodleXIOQ_Rename_Async.html')">OodleXIOQ_Rename_Async</a></li>
<li><a onclick="show('OodleXIOQ_Rename_AsyncAndWait.html')">OodleXIOQ_Rename_AsyncAndWait</a></li>
<li><a onclick="show('OodleXIOQ_ReserveFileSizeForWrite_Async.html')">OodleXIOQ_ReserveFileSizeForWrite_Async</a></li>
<li><a onclick="show('OodleXIOQ_SetFileSize_Async.html')">OodleXIOQ_SetFileSize_Async</a></li>
<li><a onclick="show('OodleXIOQ_SetInfoByName_Async.html')">OodleXIOQ_SetInfoByName_Async</a></li>
<li><a onclick="show('OodleXIOQ_SetInfoByName_AsyncAndWait.html')">OodleXIOQ_SetInfoByName_AsyncAndWait</a></li>
<li><a onclick="show('OodleXIOQ_SetVTable.html')">OodleXIOQ_SetVTable</a></li>
<li><a onclick="show('OodleXIOQ_Wait.html')">OodleXIOQ_Wait</a></li>
<li><a onclick="show('OodleXIOQ_WaitDoneAllPending.html')">OodleXIOQ_WaitDoneAllPending</a></li>
<li><a onclick="show('OodleXIOQ_Wait_GetInfo.html')">OodleXIOQ_Wait_GetInfo</a></li>
<li><a onclick="show('OodleXIOQ_WriteWholeFile_AsyncAndWait.html')">OodleXIOQ_WriteWholeFile_AsyncAndWait</a></li>
<li><a onclick="show('OodleXIOQ_Write_Async.html')">OodleXIOQ_Write_Async</a></li>
<li><a onclick="show('OodleXInitOptions.html')">OodleXInitOptions</a></li>
<li><a onclick="show('OodleXLZ_Compress_Async.html')">OodleXLZ_Compress_Async</a></li>
<li><a onclick="show('OodleXLZ_Compress_AsyncAndWait.html')">OodleXLZ_Compress_AsyncAndWait</a></li>
<li><a onclick="show('OodleXLZ_Compress_Wait_GetResult.html')">OodleXLZ_Compress_Wait_GetResult</a></li>
<li><a onclick="show('OodleXLZ_Decompress_MakeSeekTable_Wide_Async.html')">OodleXLZ_Decompress_MakeSeekTable_Wide_Async</a></li>
<li><a onclick="show('OodleXLZ_Decompress_Narrow_Async.html')">OodleXLZ_Decompress_Narrow_Async</a></li>
<li><a onclick="show('OodleXLZ_Decompress_ThreadPhased_Narrow_Async.html')">OodleXLZ_Decompress_ThreadPhased_Narrow_Async</a></li>
<li><a onclick="show('OodleXLZ_Decompress_Wide_Async.html')">OodleXLZ_Decompress_Wide_Async</a></li>
<li><a onclick="show('OodleXLZ_ReadAndDecompress_Stream_Async.html')">OodleXLZ_ReadAndDecompress_Stream_Async</a></li>
<li><a onclick="show('OodleXLZ_ReadAndDecompress_Wide_Async.html')">OodleXLZ_ReadAndDecompress_Wide_Async</a></li>
<li><a onclick="show('OodleXLogCallbackRet.html')">OodleXLogCallbackRet</a></li>
<li><a onclick="show('OodleXLogCallbackRetRet.html')">OodleXLogCallbackRetRet</a></li>
<li><a onclick="show('OodleXLogCallbackRetRet.html')">OodleXLogCallbackRetRet_Continue</a></li>
<li><a onclick="show('OodleXLogCallbackRetRet.html')">OodleXLogCallbackRetRet_Force32</a></li>
<li><a onclick="show('OodleXLogCallbackRetRet.html')">OodleXLogCallbackRetRet_Terminate</a></li>
<li><a onclick="show('OodleXLog_Flush.html')">OodleXLog_Flush</a></li>
<li><a onclick="show('OodleXLog_GetCallback.html')">OodleXLog_GetCallback</a></li>
<li><a onclick="show('OodleXLog_GetEcho.html')">OodleXLog_GetEcho</a></li>
<li><a onclick="show('OodleXLog_GetVerboseLevel.html')">OodleXLog_GetVerboseLevel</a></li>
<li><a onclick="show('OodleXLog_Printf.html')">OodleXLog_Printf</a></li>
<li><a onclick="show('OodleXLog_PrintfError.html')">OodleXLog_PrintfError</a></li>
<li><a onclick="show('OodleXLog_SetCallback.html')">OodleXLog_SetCallback</a></li>
<li><a onclick="show('OodleXLog_SetEcho.html')">OodleXLog_SetEcho</a></li>
<li><a onclick="show('OodleXLog_SetState.html')">OodleXLog_SetState</a></li>
<li><a onclick="show('OodleXLog_SetVerboseLevel.html')">OodleXLog_SetVerboseLevel</a></li>
<li><a onclick="show('OodleXLog_StateFlags.html')">OodleXLog_StateFlags</a></li>
<li><a onclick="show('OodleXLog_VerboseLevel.html')">OodleXLog_VerboseLevel</a></li>
<li><a onclick="show('OodleXLog_VerboseLevel.html')">OodleXLog_Verbose_Force32</a></li>
<li><a onclick="show('OodleXLog_VerboseLevel.html')">OodleXLog_Verbose_Lots</a></li>
<li><a onclick="show('OodleXLog_VerboseLevel.html')">OodleXLog_Verbose_Minimal</a></li>
<li><a onclick="show('OodleXLog_VerboseLevel.html')">OodleXLog_Verbose_None</a></li>
<li><a onclick="show('OodleXLog_VerboseLevel.html')">OodleXLog_Verbose_Some</a></li>
<li><a onclick="show('OodleXMalloc.html')">OodleXMalloc</a></li>
<li><a onclick="show('OodleXMallocAligned.html')">OodleXMallocAligned</a></li>
<li><a onclick="show('OodleXMallocBig.html')">OodleXMallocBig</a></li>
<li><a onclick="show('OodleXMallocBigAlignment.html')">OodleXMallocBigAlignment</a></li>
<li><a onclick="show('OodleXMallocFailedHandler.html')">OodleXMallocFailedHandler</a></li>
<li><a onclick="show('OodleXMallocVTable.html')">OodleXMallocVTable</a></li>
<li><a onclick="show('OodleXMalloc_GetVTable_Clib.html')">OodleXMalloc_GetVTable_Clib</a></li>
<li><a onclick="show('OodleXMalloc_GetVTable_OS.html')">OodleXMalloc_GetVTable_OS</a></li>
<li><a onclick="show('OodleXMalloc_IOAligned.html')">OodleXMalloc_IOAligned</a></li>
<li><a onclick="show('OodleXMalloc_InstallVTable.html')">OodleXMalloc_InstallVTable</a></li>
<li><a onclick="show('OodleXMalloc_OS_Options.html')">OodleXMalloc_OS_Options</a></li>
<li><a onclick="show('OodleXMalloc_OS_Options.html')">OodleXMalloc_OS_Options_Count</a></li>
<li><a onclick="show('OodleXMalloc_OS_Options.html')">OodleXMalloc_OS_Options_Force32</a></li>
<li><a onclick="show('OodleXMalloc_OS_Options.html')">OodleXMalloc_OS_Options_GuardBig</a></li>
<li><a onclick="show('OodleXMalloc_OS_Options.html')">OodleXMalloc_OS_Options_GuardBoth</a></li>
<li><a onclick="show('OodleXMalloc_OS_Options.html')">OodleXMalloc_OS_Options_GuardFrees</a></li>
<li><a onclick="show('OodleXMalloc_OS_Options.html')">OodleXMalloc_OS_Options_None</a></li>
<li><a onclick="show('OodleXMalloc_SetFailedHandler.html')">OodleXMalloc_SetFailedHandler</a></li>
<li><a onclick="show('OodleXMalloc_ValidatePointer.html')">OodleXMalloc_ValidatePointer</a></li>
<li><a onclick="show('OodleXOSFile.html')">OodleXOSFile</a></li>
<li><a onclick="show('OodleXOSFileListing.html')">OodleXOSFileListing</a></li>
<li><a onclick="show('OodleXPriority.html')">OodleXPriority</a></li>
<li><a onclick="show('OodleXPriority.html')">OodleXPriority_Default</a></li>
<li><a onclick="show('OodleXPriority.html')">OodleXPriority_Force32</a></li>
<li><a onclick="show('OodleXPriority.html')">OodleXPriority_NoPopOnWait</a></li>
<li><a onclick="show('OodleXPriority.html')">OodleXPriority_Normal</a></li>
<li><a onclick="show('OodleXStatus.html')">OodleXStatus</a></li>
<li><a onclick="show('OodleXStatus.html')">OodleXStatus_Count</a></li>
<li><a onclick="show('OodleXStatus.html')">OodleXStatus_Done</a></li>
<li><a onclick="show('OodleXStatus.html')">OodleXStatus_Error</a></li>
<li><a onclick="show('OodleXStatus.html')">OodleXStatus_Force32</a></li>
<li><a onclick="show('OodleXStatus.html')">OodleXStatus_Invalid</a></li>
<li><a onclick="show('OodleXStatus.html')">OodleXStatus_Pending</a></li>
<li><a onclick="show('OodleXUtil_ConvertUTF16ToUTF8.html')">OodleXUtil_ConvertUTF16ToUTF8</a></li>
<li><a onclick="show('OodleXUtil_ConvertUTF8ToUTF16.html')">OodleXUtil_ConvertUTF8ToUTF16</a></li>
<li><a onclick="show('OodleX_CombinePaths.html')">OodleX_CombinePaths</a></li>
<li><a onclick="show('OodleX_CorePlugin_RunJob.html')">OodleX_CorePlugin_RunJob</a></li>
<li><a onclick="show('OodleX_CorePlugin_WaitJob.html')">OodleX_CorePlugin_WaitJob</a></li>
<li><a onclick="show('OodleX_CreateThread.html')">OodleX_CreateThread</a></li>
<li><a onclick="show('OodleX_GetAvailableAsyncSelect.html')">OodleX_GetAvailableAsyncSelect</a></li>
<li><a onclick="show('OodleX_GetConfigValues.html')">OodleX_GetConfigValues</a></li>
<li><a onclick="show('OodleX_GetDefaultFileOps.html')">OodleX_GetDefaultFileOps</a></li>
<li><a onclick="show('OodleX_GetExtensionKey.html')">OodleX_GetExtensionKey</a></li>
<li><a onclick="show('OodleX_GetNumWorkerThreads.html')">OodleX_GetNumWorkerThreads</a></li>
<li><a onclick="show('OodleX_GetOSCwd.html')">OodleX_GetOSCwd</a></li>
<li><a onclick="show('OodleX_GetOSFileOps.html')">OodleX_GetOSFileOps</a></li>
<li><a onclick="show('OodleX_GetSeconds.html')">OodleX_GetSeconds</a></li>
<li><a onclick="show('OodleX_GetStatus.html')">OodleX_GetStatus</a></li>
<li><a onclick="show('OodleX_IOAlignDownS32.html')">OodleX_IOAlignDownS32</a></li>
<li><a onclick="show('OodleX_IOAlignDownS64.html')">OodleX_IOAlignDownS64</a></li>
<li><a onclick="show('OodleX_IOAlignDownSINTa.html')">OodleX_IOAlignDownSINTa</a></li>
<li><a onclick="show('OodleX_IOAlignUpS32.html')">OodleX_IOAlignUpS32</a></li>
<li><a onclick="show('OodleX_IOAlignUpS64.html')">OodleX_IOAlignUpS64</a></li>
<li><a onclick="show('OodleX_IOAlignUpSINTa.html')">OodleX_IOAlignUpSINTa</a></li>
<li><a onclick="show('OodleX_Init.html')">OodleX_Init</a></li>
<li><a onclick="show('OodleX_Init_Default.html')">OodleX_Init_Default</a></li>
<li><a onclick="show('OodleX_Init_GetDefaults.html')">OodleX_Init_GetDefaults</a></li>
<li><a onclick="show('OodleX_Init_GetDefaults_DebugSystems.html')">OodleX_Init_GetDefaults_DebugSystems</a></li>
<li><a onclick="show('OodleX_Init_GetDefaults_DebugSystems.html')">OodleX_Init_GetDefaults_DebugSystems_Force32</a></li>
<li><a onclick="show('OodleX_Init_GetDefaults_DebugSystems.html')">OodleX_Init_GetDefaults_DebugSystems_No</a></li>
<li><a onclick="show('OodleX_Init_GetDefaults_DebugSystems.html')">OodleX_Init_GetDefaults_DebugSystems_Yes</a></li>
<li><a onclick="show('OodleX_Init_GetDefaults_Minimal.html')">OodleX_Init_GetDefaults_Minimal</a></li>
<li><a onclick="show('OodleX_Init_GetDefaults_Threads.html')">OodleX_Init_GetDefaults_Threads</a></li>
<li><a onclick="show('OodleX_Init_GetDefaults_Threads.html')">OodleX_Init_GetDefaults_Threads_Force32</a></li>
<li><a onclick="show('OodleX_Init_GetDefaults_Threads.html')">OodleX_Init_GetDefaults_Threads_No</a></li>
<li><a onclick="show('OodleX_Init_GetDefaults_Threads.html')">OodleX_Init_GetDefaults_Threads_Yes</a></li>
<li><a onclick="show('OodleX_Init_NoThreads.html')">OodleX_Init_NoThreads</a></li>
<li><a onclick="show('OodleX_Init_ThreadProfilerInit.html')">OodleX_Init_ThreadProfilerInit</a></li>
<li><a onclick="show('OodleX_LogSystemInfo.html')">OodleX_LogSystemInfo</a></li>
<li><a onclick="show('OodleX_MakeExtensionKey.html')">OodleX_MakeExtensionKey</a></li>
<li><a onclick="show('OodleX_PrefixOSCwd.html')">OodleX_PrefixOSCwd</a></li>
<li><a onclick="show('OodleX_ReleaseThreadTLS.html')">OodleX_ReleaseThreadTLS</a></li>
<li><a onclick="show('OodleX_S64_to_SINTa_check.html')">OodleX_S64_to_SINTa_check</a></li>
<li><a onclick="show('OodleX_Semaphore.html')">OodleX_Semaphore</a></li>
<li><a onclick="show('OodleX_Semaphore_Post.html')">OodleX_Semaphore_Post</a></li>
<li><a onclick="show('OodleX_Semaphore_Wait.html')">OodleX_Semaphore_Wait</a></li>
<li><a onclick="show('OodleX_SetConfigValues.html')">OodleX_SetConfigValues</a></li>
<li><a onclick="show('OodleX_SetDefaultFileOps.html')">OodleX_SetDefaultFileOps</a></li>
<li><a onclick="show('OodleX_SetHandleAutoDelete.html')">OodleX_SetHandleAutoDelete</a></li>
<li><a onclick="show('OodleX_Shutdown.html')">OodleX_Shutdown</a></li>
<li><a onclick="show('OodleX_Shutdown_DebugBreakOnLeaks.html')">OodleX_Shutdown_DebugBreakOnLeaks</a></li>
<li><a onclick="show('OodleX_Shutdown_DebugBreakOnLeaks.html')">OodleX_Shutdown_DebugBreakOnLeaks_Force32</a></li>
<li><a onclick="show('OodleX_Shutdown_DebugBreakOnLeaks.html')">OodleX_Shutdown_DebugBreakOnLeaks_No</a></li>
<li><a onclick="show('OodleX_Shutdown_DebugBreakOnLeaks.html')">OodleX_Shutdown_DebugBreakOnLeaks_Yes</a></li>
<li><a onclick="show('OodleX_Shutdown_LogLeaks.html')">OodleX_Shutdown_LogLeaks</a></li>
<li><a onclick="show('OodleX_Shutdown_LogLeaks.html')">OodleX_Shutdown_LogLeaks_Force32</a></li>
<li><a onclick="show('OodleX_Shutdown_LogLeaks.html')">OodleX_Shutdown_LogLeaks_No</a></li>
<li><a onclick="show('OodleX_Shutdown_LogLeaks.html')">OodleX_Shutdown_LogLeaks_Yes</a></li>
<li><a onclick="show('OodleX_Shutdown_NoThreads.html')">OodleX_Shutdown_NoThreads</a></li>
<li><a onclick="show('OodleX_ThreadFunc.html')">OodleX_ThreadFunc</a></li>
<li><a onclick="show('OodleX_Wait.html')">OodleX_Wait</a></li>
<li><a onclick="show('OodleX_WaitAll.html')">OodleX_WaitAll</a></li>
<li><a onclick="show('OodleX_WaitAndDestroyThread.html')">OodleX_WaitAndDestroyThread</a></li>
<li><a onclick="show('OodleX_WaitDoneAllPending.html')">OodleX_WaitDoneAllPending</a></li>
<li><a onclick="show('Oodle_CheckVersion.html')">Oodle_CheckVersion</a></li>
<li><a onclick="show('Oodle_GetConfigValues.html')">Oodle_GetConfigValues</a></li>
<li><a onclick="show('Oodle_LogHeader.html')">Oodle_LogHeader</a></li>
<li><a onclick="show('Oodle_SetConfigValues.html')">Oodle_SetConfigValues</a></li>
<li><a onclick="show('Oodle_SetUsageWarnings.html')">Oodle_SetUsageWarnings</a></li>
<li><a onclick="show('Oodle_UsageWarnings.html')">Oodle_UsageWarnings</a></li>
<li><a onclick="show('Oodle_UsageWarnings.html')">Oodle_UsageWarnings_Disabled</a></li>
<li><a onclick="show('Oodle_UsageWarnings.html')">Oodle_UsageWarnings_Enabled</a></li>
<li><a onclick="show('Oodle_UsageWarnings.html')">Oodle_UsageWarnings_Force32</a></li>
<li><a onclick="show('licenses.html')">Third Party License Notices</a></li>
<li><a onclick="show('start_Benchmarking.html')">Tips for benchmarking a compressor</a></li>
<li><a onclick="show('index.html')">Welcome to Oodle</a></li>
<li><a onclick="show('OodleDecompressCallback_WriteFile_Data.html')">closeH</a></li>
<li><a onclick="show('OodleLZ_DecodeSome_Out.html')">compBufUsed</a></li>
<li><a onclick="show('OodleLZ_SeekTable.html')">compressor</a></li>
<li><a onclick="show('OodleLZ_DecodeSome_Out.html')">curQuantumCompLen</a></li>
<li><a onclick="show('OodleLZ_DecodeSome_Out.html')">curQuantumRawLen</a></li>
<li><a onclick="show('OodleLZ_DecodeSome_Out.html')">decodedCount</a></li>
<li><a onclick="show('OodleXFileOpsVTable.html')">delete_file</a></li>
<li><a onclick="show('OodleLZ_CompressOptions.html')">dictionarySize</a></li>
<li><a onclick="show('OodleDecompressCallback_WriteFile_Data.html')">doCloseFile</a></li>
<li><a onclick="show('example_lz.html')">example_lz : Example demonstrating LZ compression and decompression</a></li>
<li><a onclick="show('example_lz_chart.html')">example_lz_chart : Example that makes a chart of OodleLZ options</a></li>
<li><a onclick="show('example_lz_noallocs.html')">example_lz_noallocs : Example demonstrating Oodle compression with no allocations</a></li>
<li><a onclick="show('example_lz_overlap.html')">example_lz_overlap : Example demonstrating parallel overlap with OodleLZ</a></li>
<li><a onclick="show('example_lz_simple.html')">example_lz_simple : Example demonstrating very simple LZ memory->memory compression using only Oodle Core</a></li>
<li><a onclick="show('example_lz_threadphased.html')">example_lz_threadphased : Example of 2-thread ThreadPhased decoding</a></li>
<li><a onclick="show('example_network_client.html')">example_network_client : Example with simple network client support</a></li>
<li><a onclick="show('example_packet.html')">example_packet : Example demonstrating network packet compression</a></li>
<li><a onclick="show('OodleLZ_CompressOptions.html')">farMatchMinLen</a></li>
<li><a onclick="show('OodleLZ_CompressOptions.html')">farMatchOffsetLog2</a></li>
<li><a onclick="show('OodleDecompressCallback_WriteFile_Data.html')">file</a></li>
<li><a onclick="show('OodleXFileOpsVTable.html')">fileops_data</a></li>
<li><a onclick="show('OodleXFileInfo.html')">flags</a></li>
<li><a onclick="show('OodleXFileOpsVTable.html')">force_writeable</a></li>
<li><a onclick="show('OodleXFileOpsVTable.html')">get_error_enum</a></li>
<li><a onclick="show('OodleXFileOpsVTable.html')">get_error_string</a></li>
<li><a onclick="show('OodleXFileOpsVTable.html')">get_filename_info</a></li>
<li><a onclick="show('OodleXFileOpsVTable.html')">get_last_error</a></li>
<li><a onclick="show('OodleLZ_CompressOptions.html')">jobify</a></li>
<li><a onclick="show('OodleLZ_CompressOptions.html')">jobifyUserPtr</a></li>
<li><a onclick="show('OodleDecompressCallback_WriteFile_Data.html')">lastWriteH</a></li>
<li><a onclick="show('OodleXFileOpsVTable.html')">listdir_close</a></li>
<li><a onclick="show('OodleXFileOpsVTable.html')">listdir_next</a></li>
<li><a onclick="show('OodleXFileOpsVTable.html')">listdir_open</a></li>
<li><a onclick="show('OodleXConfigValues.html')">m_OodleIOQStream_MaxReadSize</a></li>
<li><a onclick="show('OodleXConfigValues.html')">m_OodleIOQStream_MinReadSize</a></li>
<li><a onclick="show('OodleXConfigValues.html')">m_OodleIOQStream_OffsetAlignment</a></li>
<li><a onclick="show('OodleXInitOptions.html')">m_OodleInit_BreakOnLogError</a></li>
<li><a onclick="show('OodleXInitOptions.html')">m_OodleInit_DebugAllocator</a></li>
<li><a onclick="show('OodleXInitOptions.html')">m_OodleInit_FuzzTest</a></li>
<li><a onclick="show('OodleXInitOptions.html')">m_OodleInit_IOQ</a></li>
<li><a onclick="show('OodleXInitOptions.html')">m_OodleInit_IOQ_BreakOnError</a></li>
<li><a onclick="show('OodleXInitOptions.html')">m_OodleInit_IOQ_CheckAlignment</a></li>
<li><a onclick="show('OodleXInitOptions.html')">m_OodleInit_IOQ_Log</a></li>
<li><a onclick="show('OodleXInitOptions.html')">m_OodleInit_IOQ_Threaded</a></li>
<li><a onclick="show('OodleXInitOptions.html')">m_OodleInit_LeakTrack</a></li>
<li><a onclick="show('OodleXInitOptions.html')">m_OodleInit_Log</a></li>
<li><a onclick="show('OodleXInitOptions.html')">m_OodleInit_Log_FileName</a></li>
<li><a onclick="show('OodleXInitOptions.html')">m_OodleInit_Log_FlushEachWrite</a></li>
<li><a onclick="show('OodleXInitOptions.html')">m_OodleInit_Log_Header</a></li>
<li><a onclick="show('OodleXInitOptions.html')">m_OodleInit_SimpleProf</a></li>
<li><a onclick="show('OodleXInitOptions.html')">m_OodleInit_StackTrace</a></li>
<li><a onclick="show('OodleXInitOptions.html')">m_OodleInit_Telemetry</a></li>
<li><a onclick="show('OodleXInitOptions.html')">m_OodleInit_Telemetry_Context</a></li>
<li><a onclick="show('OodleXInitOptions.html')">m_OodleInit_ThreadLog</a></li>
<li><a onclick="show('OodleXInitOptions.html')">m_OodleInit_ThreadProfiler_funcptr</a></li>
<li><a onclick="show('OodleXInitOptions.html')">m_OodleInit_Workers</a></li>
<li><a onclick="show('OodleXInitOptions.html')">m_OodleInit_Workers_Count</a></li>
<li><a onclick="show('OodleConfigValues.html')">m_OodleLZ_BackwardsCompatible_MajorVersion</a></li>
<li><a onclick="show('OodleConfigValues.html')">m_OodleLZ_Decoder_Max_Stack_Size</a></li>
<li><a onclick="show('OodleConfigValues.html')">m_OodleLZ_LW_LRM_hashLength</a></li>
<li><a onclick="show('OodleConfigValues.html')">m_OodleLZ_LW_LRM_jumpbits</a></li>
<li><a onclick="show('OodleConfigValues.html')">m_OodleLZ_LW_LRM_step</a></li>
<li><a onclick="show('OodleConfigValues.html')">m_OodleLZ_Small_Buffer_LZ_Fallback_Size_Unused</a></li>
<li><a onclick="show('OodleXConfigValues.html')">m_Oodle_DefaultIOBufferSize</a></li>
<li><a onclick="show('OodleXConfigValues.html')">m_Oodle_DefaultWriteReserveSize</a></li>
<li><a onclick="show('OodleXConfigValues.html')">m_Oodle_MaxSingleIOSize</a></li>
<li><a onclick="show('OodleXConfigValues.html')">m_Oodle_OSFileOpen_Default_Read_Buffered</a></li>
<li><a onclick="show('OodleXConfigValues.html')">m_Oodle_OSFileOpen_Default_Write_Buffered</a></li>
<li><a onclick="show('OodleXConfigValues.html')">m_Oodle_PathsCaseSensitive</a></li>
<li><a onclick="show('OodleXConfigValues.html')">m_Oodle_very_long_wait_seconds</a></li>
<li><a onclick="show('OodleXMallocVTable.html')">m_bigAlignment</a></li>
<li><a onclick="show('OodleXMallocVTable.html')">m_context</a></li>
<li><a onclick="show('OodleXConfigValues.html')">m_deprecated_Desired_Parallel_BranchFactor</a></li>
<li><a onclick="show('OodleXInitOptions.html')">m_num_handles_log2</a></li>
<li>m_oodle_header_version:
<ul class='sysIndex'>
<li><a class='blue' onclick="show('OodleConfigValues.html')">OodleConfigValues</a></li>
<li><a class='blue' onclick="show('OodleXConfigValues.html')">OodleXConfigValues</a></li>
</ul></li>
<li><a onclick="show('OodleXInitOptions.html')">m_pBaseVTable</a></li>
<li><a onclick="show('OodleXMallocVTable.html')">m_pFree</a></li>
<li><a onclick="show('OodleXMallocVTable.html')">m_pFreeBig</a></li>
<li><a onclick="show('OodleXMallocVTable.html')">m_pFreeSized</a></li>
<li><a onclick="show('OodleXMallocVTable.html')">m_pMalloc</a></li>
<li><a onclick="show('OodleXMallocVTable.html')">m_pMallocAligned</a></li>
<li><a onclick="show('OodleXMallocVTable.html')">m_pMallocBig</a></li>
<li><a onclick="show('OodleXMallocVTable.html')">m_pValidatePointer</a></li>
<li><a onclick="show('OodleLZ_CompressOptions.html')">makeLongRangeMatcher</a></li>
<li><a onclick="show('OodleXFileOpsVTable.html')">make_dir</a></li>
<li><a onclick="show('OodleLZ_CompressOptions.html')">matchTableSizeLog2</a></li>
<li><a onclick="show('OodleLZ_CompressOptions.html')">maxLocalDictionarySize</a></li>
<li><a onclick="show('OodleLZ_CompressOptions.html')">minMatchLen</a></li>
<li><a onclick="show('OodleXFileInfo.html')">modTime</a></li>
<li><a onclick="show('OodleLZ_SeekTable.html')">numSeekChunks</a></li>
<li><a onclick="show('OodleXFileInfo.html')">pad</a></li>
<li><a onclick="show('OodleLZ_CompressOptions.html')">profile</a></li>
<li><a onclick="show('OodleLZ_SeekTable.html')">rawCRCs</a></li>
<li><a onclick="show('OodleXFileOpsVTable.html')">rename_file</a></li>
<li><a onclick="show('OodleLZ_CompressOptions.html')">reserved</a></li>
<li><a onclick="show('OodleLZ_SeekTable.html')">seekChunkCompLens</a></li>
<li>seekChunkLen:
<ul class='sysIndex'>
<li><a class='blue' onclick="show('OodleLZ_CompressOptions.html')">OodleLZ_CompressOptions</a></li>
<li><a class='blue' onclick="show('OodleLZ_SeekTable.html')">OodleLZ_SeekTable</a></li>
</ul></li>
<li><a onclick="show('OodleLZ_CompressOptions.html')">seekChunkReset</a></li>
<li><a onclick="show('OodleLZ_SeekTable.html')">seekChunksIndependent</a></li>
<li><a onclick="show('OodleLZ_CompressOptions.html')">sendQuantumCRCs</a></li>
<li><a onclick="show('OodleXFileOpsVTable.html')">set_filename_info</a></li>
<li><a onclick="show('OodleXFileInfo.html')">size</a></li>
<li><a onclick="show('OodleLZ_CompressOptions.html')">spaceSpeedTradeoffBytes</a></li>
<li><a onclick="show('OodleXFileOpsVTable.html')">sync_close</a></li>
<li><a onclick="show('OodleXFileOpsVTable.html')">sync_get_file_info</a></li>
<li><a onclick="show('OodleXFileOpsVTable.html')">sync_open</a></li>
<li><a onclick="show('OodleXFileOpsVTable.html')">sync_read</a></li>
<li><a onclick="show('OodleXFileOpsVTable.html')">sync_set_file_size</a></li>
<li><a onclick="show('OodleXFileOpsVTable.html')">sync_write</a></li>
<li><a onclick="show('t_OodleFPVoidVoid.html')">t_OodleFPVoidVoid</a></li>
<li><a onclick="show('t_OodleFPVoidVoidStar.html')">t_OodleFPVoidVoidStar</a></li>
<li><a onclick="show('t_fp_OodleCore_Plugin_DisplayAssertion.html')">t_fp_OodleCore_Plugin_DisplayAssertion</a></li>
<li><a onclick="show('t_fp_OodleCore_Plugin_Free.html')">t_fp_OodleCore_Plugin_Free</a></li>
<li><a onclick="show('t_fp_OodleCore_Plugin_MallocAligned.html')">t_fp_OodleCore_Plugin_MallocAligned</a></li>
<li><a onclick="show('t_fp_OodleCore_Plugin_Printf.html')">t_fp_OodleCore_Plugin_Printf</a></li>
<li><a onclick="show('t_fp_OodleCore_Plugin_RunJob.html')">t_fp_OodleCore_Plugin_RunJob</a></li>
<li><a onclick="show('t_fp_OodleCore_Plugin_WaitJob.html')">t_fp_OodleCore_Plugin_WaitJob</a></li>
<li><a onclick="show('t_fp_OodleNet_Plugin_DisplayAssertion.html')">t_fp_OodleNet_Plugin_DisplayAssertion</a></li>
<li><a onclick="show('t_fp_OodleNet_Plugin_Free.html')">t_fp_OodleNet_Plugin_Free</a></li>
<li><a onclick="show('t_fp_OodleNet_Plugin_MallocAligned.html')">t_fp_OodleNet_Plugin_MallocAligned</a></li>
<li><a onclick="show('t_fp_OodleNet_Plugin_Printf.html')">t_fp_OodleNet_Plugin_Printf</a></li>
<li><a onclick="show('t_fp_OodleNet_Plugin_RunJob.html')">t_fp_OodleNet_Plugin_RunJob</a></li>
<li><a onclick="show('t_fp_OodleNet_Plugin_WaitJob.html')">t_fp_OodleNet_Plugin_WaitJob</a></li>
<li><a onclick="show('t_fp_Oodle_Job.html')">t_fp_Oodle_Job</a></li>
<li><a onclick="show('OodleLZ_SeekTable.html')">totalCompLen</a></li>
<li><a onclick="show('OodleLZ_SeekTable.html')">totalRawLen</a></li>
<li><a onclick="show('OodleLZ_CompressOptions.html')">unused_was_maxHuffmansPerChunk</a></li>
<li><a onclick="show('OodleLZ_CompressOptions.html')">unused_was_verbosity</a></li>
<li><a onclick="show('OodleDecompressCallback_WriteFile_Data.html')">written</a></li>
</ul>
</div><div class='sidebar_innards search_result' id = 'SysSearch' style='display:none;'>
</div></nav>
<section class='main' id='sys_main'>
<article id="Oodle_About_Switch.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>About Oodle on Nintendo Switch</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "Oodle_About_Switch.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="Oodle_About_Switch.html_backmenu">
<table class=dropmenu>
<tr><td><span class='arrowleft'></span>&nbsp;<a href="javascript:show('Oodle_About_PS4.html')" class="paragraph">About Oodle on PS4</a></td></tr><tr><td><span class='arrowup'></span>&nbsp;<a href="javascript:show('Oodle_About_Platforms.html')" class="paragraph">About Oodle on Platforms</a></td></tr><tr><td><span class='arrowright'></span>&nbsp;<a href="javascript:show('Oodle_About_Mac.html')" class="paragraph">About Oodle on Mac</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<P>
Oodle for Switch is provided as a lib.
</p>
<p><div class=prototype>
<PRE>
lib/liboo2coreswitch.a
lib/liboo2extswitch.a
</PRE>
</div>
</p>
<p>The debug build of the Oodle lib is also provided. Generally the release build of Oodle should be linked
with all versions of your game (do not link the debug build of Oodle with the
debug build of your game typically). The debug build of Oodle is provided to help you track down problems.
</p>
<p><hr>
</p>
<p>OodleX file IO on Switch uses stdio.
</p>
<p>OodleX Malloc on Switch uses stdlib malloc.
</p>
<p>NOTE to run the examples on Switch, you must mount some directory for them to work on,
and change the paths used to be relative to that mount.
</p>
<p>You could add :
</p>
<p><div class=prototype>
<PRE>
nn::fs::MountHostRoot();
</PRE>
</div>
</p>
<p>then run "example_lz_chart c:test_file"
</p>
<p>In <a href="javascript:show('example_lz.html')" class="paragraph">example_lz : Example demonstrating LZ compression and decompression</a> these would need to be changed to be relative to the mount point with an
absolute path :
</p>
<p><div class=prototype>
<PRE>
static const char * in_name = "oodle_example_input_file";
static const char * out_name = "oodle_example_output_file";
</PRE>
</div><br>&nbsp;<br> <table class=bar> <tr>
<td width=33% align=left><span class='arrowleft'></span><a href="javascript:show('Oodle_About_PS4.html')" class="paragraph">About Oodle on PS4</a></td><td width=33% align=center><span class='arrowup'></span><a href="javascript:show('Oodle_About_Platforms.html')" class="paragraph">About Oodle on Platforms</a></td><td width=33% align=right><span class='arrowright'></span><a href="javascript:show('Oodle_About_Mac.html')" class="paragraph">About Oodle on Mac</a></td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="OodleX_Init_NoThreads.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>OodleX_Init_NoThreads</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "OodleX_Init_NoThreads.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="OodleX_Init_NoThreads.html_backmenu">
<table class=dropmenu>
<tr><td><span class='arrowleft'></span>&nbsp;<a href="javascript:show('OodleX_Shutdown.html')" class="paragraph">OodleX_Shutdown</a></td></tr><tr><td><span class='arrowright'></span>&nbsp;<a href="javascript:show('OodleX_Shutdown_NoThreads.html')" class="paragraph">OodleX_Shutdown_NoThreads</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<div class=prototype><div class=prototype_header>// Function prototype:</div><pre>OO_BOOL <span class=prototype_type><a href="javascript:show('OodleX_Init_NoThreads.html')" class="blue">OodleX_Init_NoThreads</a></span>( OO_U32 oodle_header_version,
const <span class=prototype_type><a href="javascript:show('OodleXInitOptions.html')" class="blue">OodleXInitOptions</a></span> * pOptions );</pre></div><div class=discussion_heading>Discussion</div>Initialize Oodle with no threads and minimal systems<div class=discussion_heading>Parameters</div> <table> <tr> <td style='vertical-align: top;' class=paramname><a id="OodleX_Init_NoThreads.html_oodle_header_version" class=nohover>oodle_header_version</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> pass <a href="javascript:show('OODLE_HEADER_VERSION.html')" class="paragraph">OODLE_HEADER_VERSION</a> here
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleX_Init_NoThreads.html_pOptions" class=nohover>pOptions</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> options for Init; must not be NULL; use <a href="javascript:show('OodleX_Init_GetDefaults_Minimal.html')" class="paragraph">OodleX_Init_GetDefaults_Minimal</a> to fill out
</td></tr></table><div class=discussion_heading>Return Value</div> <table> <tr> <td style='vertical-align: top;' class=paramname><a id="OodleX_Init_NoThreads.html_return" class=nohover>return</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> false if <a href="javascript:show('OODLE_HEADER_VERSION.html')" class="paragraph">OODLE_HEADER_VERSION</a> is not compatible with this lib
</td></tr></table><div class=discussion_heading>Discussion</div></p>
<p> You must call <a href="javascript:show('OodleX_Init.html')" class="paragraph">OodleX_Init</a> or <a href="javascript:show('OodleX_Init_NoThreads.html')" class="paragraph">OodleX_Init_NoThreads</a> before any other Oodle function that you expect to work.
</p>
<p> Pair with <a href="javascript:show('OodleX_Shutdown_NoThreads.html')" class="paragraph">OodleX_Shutdown_NoThreads</a>.
</p>
<p> This function does not enable the Oodle IOQ or WorkMgr. No async jobs or IO will work.
</p>
<p> All memory->memory compressors will work.
</p>
<p> Pair with <a href="javascript:show('OodleX_Shutdown_NoThreads.html')" class="paragraph">OodleX_Shutdown_NoThreads</a>
<br>&nbsp;<br> <table class=bar> <tr>
<td width=33% align=left><span class='arrowleft'></span><a href="javascript:show('OodleX_Shutdown.html')" class="paragraph">OodleX_Shutdown</a></td><td width=33% align=center><span class='arrowup'></span><a href="javascript:show('OodleXAPI_Init.html')" class="paragraph">OodleX Startup and Shutdown</a></td><td width=33% align=right><span class='arrowright'></span><a href="javascript:show('OodleX_Shutdown_NoThreads.html')" class="paragraph">OodleX_Shutdown_NoThreads</a></td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="OodleXFree_IOAligned.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>OodleXFree_IOAligned</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "OodleXFree_IOAligned.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="OodleXFree_IOAligned.html_backmenu">
<table class=dropmenu>
<tr><td><span class='arrowleft'></span>&nbsp;<a href="javascript:show('OodleXMalloc_IOAligned.html')" class="paragraph">OodleXMalloc_IOAligned</a></td></tr><tr><td><span class='arrowright'></span>&nbsp;<a href="javascript:show('OodleXMalloc_GetVTable_Clib.html')" class="paragraph">OodleXMalloc_GetVTable_Clib</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<div class=prototype><div class=prototype_header>// Function prototype:</div><pre>void <span class=prototype_type><a href="javascript:show('OodleXFree_IOAligned.html')" class="blue">OodleXFree_IOAligned</a></span>( void * ptr );</pre></div><div class=discussion_heading>Discussion</div>Free a pointer allocated with <a href="javascript:show('OodleXMalloc_IOAligned.html')" class="paragraph">OodleXMalloc_IOAligned</a> <div class=discussion_heading>Parameters</div> <table> <tr> <td style='vertical-align: top;' class=paramname><a id="OodleXFree_IOAligned.html_ptr" class=nohover>ptr</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> pointer to free
</td></tr></table><br>&nbsp;<br> <table class=bar> <tr>
<td width=33% align=left><span class='arrowleft'></span><a href="javascript:show('OodleXMalloc_IOAligned.html')" class="paragraph">OodleXMalloc_IOAligned</a></td><td width=33% align=center><span class='arrowup'></span><a href="javascript:show('OodleXAPI_Malloc.html')" class="paragraph">OodleX Memory Allocators</a></td><td width=33% align=right><span class='arrowright'></span><a href="javascript:show('OodleXMalloc_GetVTable_Clib.html')" class="paragraph">OodleXMalloc_GetVTable_Clib</a></td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="OodleXMallocBigAlignment.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>OodleXMallocBigAlignment</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "OodleXMallocBigAlignment.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="OodleXMallocBigAlignment.html_backmenu">
<table class=dropmenu>
<tr><td><span class='arrowleft'></span>&nbsp;<a href="javascript:show('OodleXFreeSized.html')" class="paragraph">OodleXFreeSized</a></td></tr><tr><td><span class='arrowright'></span>&nbsp;<a href="javascript:show('OodleXMallocBig.html')" class="paragraph">OodleXMallocBig</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<div class=prototype><div class=prototype_header>// Function prototype:</div><pre>OO_S32 <span class=prototype_type><a href="javascript:show('OodleXMallocBigAlignment.html')" class="blue">OodleXMallocBigAlignment</a></span>( );</pre></div><div class=discussion_heading>Discussion</div>returns the alignment of <a href="javascript:show('OodleXMallocBig.html')" class="paragraph">OodleXMallocBig</a> pointers <div class=discussion_heading>Return Value</div> <table> <tr> <td style='vertical-align: top;' class=paramname><a id="OodleXMallocBigAlignment.html_return" class=nohover>return</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> the alignment of <a href="javascript:show('OodleXMallocBig.html')" class="paragraph">OodleXMallocBig</a> pointers
</td></tr></table><div class=discussion_heading>Discussion</div></p>
<p> Should be >= <a href="javascript:show('OODLEX_IO_MAX_ALIGNMENT.html')" class="paragraph">OODLEX_IO_MAX_ALIGNMENT</a>
<br>&nbsp;<br> <table class=bar> <tr>
<td width=33% align=left><span class='arrowleft'></span><a href="javascript:show('OodleXFreeSized.html')" class="paragraph">OodleXFreeSized</a></td><td width=33% align=center><span class='arrowup'></span><a href="javascript:show('OodleXAPI_Malloc.html')" class="paragraph">OodleX Memory Allocators</a></td><td width=33% align=right><span class='arrowright'></span><a href="javascript:show('OodleXMallocBig.html')" class="paragraph">OodleXMallocBig</a></td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="OodleX_CreateThread.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>OodleX_CreateThread</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "OodleX_CreateThread.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="OodleX_CreateThread.html_backmenu">
<table class=dropmenu>
<tr><td><span class='arrowleft'></span>&nbsp;<a href="javascript:show('OodleX_Semaphore_Wait.html')" class="paragraph">OodleX_Semaphore_Wait</a></td></tr><tr><td><span class='arrowright'></span>&nbsp;<a href="javascript:show('OodleX_WaitAndDestroyThread.html')" class="paragraph">OodleX_WaitAndDestroyThread</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<div class=prototype><div class=prototype_header>// Function prototype:</div><pre>OodleX_Thread <span class=prototype_type><a href="javascript:show('OodleX_CreateThread.html')" class="blue">OodleX_CreateThread</a></span>( <span class=prototype_type><a href="javascript:show('OodleX_ThreadFunc.html')" class="blue">OodleX_ThreadFunc</a></span> * func,
void * userdata );</pre></div><div class=discussion_heading>Discussion</div>Start a thread running threadfunc<div class=discussion_heading>Discussion</div>NOTE : it is not intended that you use these in production. They are for use in the Oodle
examples. Replace with your own thread functions for shipping.
<br>&nbsp;<br> <table class=bar> <tr>
<td width=33% align=left><span class='arrowleft'></span><a href="javascript:show('OodleX_Semaphore_Wait.html')" class="paragraph">OodleX_Semaphore_Wait</a></td><td width=33% align=center><span class='arrowup'></span><a href="javascript:show('OodleXAPI_Threading.html')" class="paragraph">OodleX threading util</a></td><td width=33% align=right><span class='arrowright'></span><a href="javascript:show('OodleX_WaitAndDestroyThread.html')" class="paragraph">OodleX_WaitAndDestroyThread</a></td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="OodleXHandleDeleteIfDone.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>OodleXHandleDeleteIfDone</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "OodleXHandleDeleteIfDone.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="OodleXHandleDeleteIfDone.html_backmenu">
<table class=dropmenu>
<tr><td><span class='arrowleft'></span>&nbsp;<a href="javascript:show('OodleXHandleKickDelayed.html')" class="paragraph">OodleXHandleKickDelayed</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<div class=prototype><div class=prototype_header>// Enumerant:</div><pre><span class=prototype_type>enum</span> <a href="javascript:show('OodleXHandleDeleteIfDone.html')">OodleXHandleDeleteIfDone</a>
{
&nbsp;&nbsp;&nbsp;&nbsp;OodleXHandleDeleteIfDone_No = 0,
&nbsp;&nbsp;&nbsp;&nbsp;OodleXHandleDeleteIfDone_Yes = 1,
&nbsp;&nbsp;&nbsp;&nbsp;OodleXHandleDeleteIfDone_Force32 = 0x40000000
};
</pre></div><div class=discussion_heading>Discussion</div> Pass OodleXHandleDeleteIfDone_Yes to handle status checks to delete the handle if it's done.
This is the main way to free an <a href="javascript:show('OodleXHandle.html')" class="paragraph">OodleXHandle</a>
<div class=discussion_heading>Enumerants</div> <table> <tr> <td style='vertical-align: top;' class=paramname><a id="OodleXHandleDeleteIfDone.html_OodleXHandleDeleteIfDone_No" class=nohover>OodleXHandleDeleteIfDone_No</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> (default) do not delete the handle</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXHandleDeleteIfDone.html_OodleXHandleDeleteIfDone_Yes" class=nohover>OodleXHandleDeleteIfDone_Yes</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> delete the handle if it's Status is Done or Error</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXHandleDeleteIfDone.html_OodleXHandleDeleteIfDone_Force32" class=nohover>OodleXHandleDeleteIfDone_Force32</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc></td></tr></table><br>&nbsp;<br> <table class=bar> <tr>
<td width=33% align=left><span class='arrowleft'></span><a href="javascript:show('OodleXHandleKickDelayed.html')" class="paragraph">OodleXHandleKickDelayed</a></td><td width=33% align=center><span class='arrowup'></span><a href="javascript:show('OodleXAPI_Handle.html')" class="paragraph">OodleX async handle operations</a></td><td width=33% align=right><span class='arrowright'></span><a href="javascript:show('OodleX_GetStatus.html')" class="paragraph">OodleX_GetStatus</a></td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="OodleXMalloc_ValidatePointer.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>OodleXMalloc_ValidatePointer</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "OodleXMalloc_ValidatePointer.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="OodleXMalloc_ValidatePointer.html_backmenu">
<table class=dropmenu>
<tr><td><span class='arrowleft'></span>&nbsp;<a href="javascript:show('OodleXFreeBig.html')" class="paragraph">OodleXFreeBig</a></td></tr><tr><td><span class='arrowright'></span>&nbsp;<a href="javascript:show('OodleXMalloc_IOAligned.html')" class="paragraph">OodleXMalloc_IOAligned</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<div class=prototype><div class=prototype_header>// Function prototype:</div><pre>OO_BOOL <span class=prototype_type><a href="javascript:show('OodleXMalloc_ValidatePointer.html')" class="blue">OodleXMalloc_ValidatePointer</a></span>( const void * ptr,
OO_SINTa bytes );</pre></div><div class=discussion_heading>Discussion</div>debug check if a pointer is a valid malloc<div class=discussion_heading>Parameters</div> <table> <tr> <td style='vertical-align: top;' class=paramname><a id="OodleXMalloc_ValidatePointer.html_ptr" class=nohover>ptr</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> pointer to validate
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXMalloc_ValidatePointer.html_bytes" class=nohover>bytes</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> size of allocation if known; -1 if not
</td></tr></table><div class=discussion_heading>Return Value</div> <table> <tr> <td style='vertical-align: top;' class=paramname><a id="OodleXMalloc_ValidatePointer.html_return" class=nohover>return</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> true if the malloc headers are all okay
</td></tr></table><div class=discussion_heading>Discussion</div></p>
<p> Should work on <a href="javascript:show('OodleXMalloc.html')" class="paragraph">OodleXMalloc</a> and <a href="javascript:show('OodleXMallocBig.html')" class="paragraph">OodleXMallocBig</a> pointers.
Bytes can be -1 if unknown, but there will be less validation checks.
ValidatePointer is most useful if the OodleXMalloc debug thunk layer is installed in <a href="javascript:show('OodleX_Init.html')" class="paragraph">OodleX_Init</a>.
<br>&nbsp;<br> <table class=bar> <tr>
<td width=33% align=left><span class='arrowleft'></span><a href="javascript:show('OodleXFreeBig.html')" class="paragraph">OodleXFreeBig</a></td><td width=33% align=center><span class='arrowup'></span><a href="javascript:show('OodleXAPI_Malloc.html')" class="paragraph">OodleX Memory Allocators</a></td><td width=33% align=right><span class='arrowright'></span><a href="javascript:show('OodleXMalloc_IOAligned.html')" class="paragraph">OodleXMalloc_IOAligned</a></td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="Oodle_FAQ.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>Frequently Asked Questions</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "Oodle_FAQ.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="Oodle_FAQ.html_backmenu">
<table class=dropmenu>
<tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<P>
<h1> Oodle FAQ</h1>
</p>
<p>Frequently Asked Questions :
</p>
<p><p><ul class='TOCItem'>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('Oodle_FAQ_OodleLZ_Decompress_Failed.html')">FAQ: OodleLZ_Decompress is failing how do I diagnose it?</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('Oodle_FAQ_UseOodleWithNoAllocator.html')">FAQ: How do I use Oodle with no allocator?</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('Oodle_FAQ_limit_encoder_memory_use.html')">FAQ: How do I limit the encoder memory use?</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('Oodle_FAQ_MemoryUse.html')">FAQ: How much memory do the Oodle compressors use ?</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('Oodle_FAQ_deprecated_compressors.html')">FAQ: What are the Oodle deprecated compressors ?</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('Oodle_FAQ_data_compatibility.html')">FAQ: Do new Oodle versions break data compatibility ?</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('Oodle_FAQ_vs_other_compressors.html')">FAQ: How does OodleLZ compare with other compressors ?</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('Oodle_FAQ_WhichLZ.html')">FAQ: Which OodleLZ should I use?</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('Oodle_FAQ_LZCompareTable.html')">FAQ: What are the speeds and ratios of the OodleLZ compressors and levels?</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('Oodle_FAQ_DecompressingToGraphicsMemoryIsSlow.html')">FAQ: How do I decompress to graphics memory quickly?</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('Oodle_FAQ_HowDoIGetOodleLogs.html')">FAQ: How do I get the Oodle logs?</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('Oodle_FAQ_BadWriteContents.html')">FAQ: I write a file with IOQ but the contents are garbage?</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('Oodle_FAQ_OutOfHandles.html')">FAQ: I ran out of OodleHandle table slots; what do I do?</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('Oodle_FAQ_S64_And_SINTa.html')">FAQ: What is SINTa? How do I load files bigger than 2 GB?</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('Oodle_FAQ_FindingIOProblems.html')">FAQ: My Files aren't loading right and I can't track it down</a></li>
</ul>
<br>&nbsp;<br> <table class=bar> <tr>
<td width=33%>&nbsp;</td><td width=33%>&nbsp;</td><td width=33% align=right><span class='arrowright'></span><a href="javascript:show('Oodle_FAQ_OodleLZ_Decompress_Failed.html')" class="paragraph">FAQ: OodleLZ_Decompress is failing how do I diagnose it?</a></td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="OODLE_JOB_MAX_DEPENDENCIES.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>OODLE_JOB_MAX_DEPENDENCIES</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "OODLE_JOB_MAX_DEPENDENCIES.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="OODLE_JOB_MAX_DEPENDENCIES.html_backmenu">
<table class=dropmenu>
<tr><td><span class='arrowleft'></span>&nbsp;<a href="javascript:show('OODLE_MALLOC_MINIMUM_ALIGNMENT.html')" class="paragraph">OODLE_MALLOC_MINIMUM_ALIGNMENT</a></td></tr><tr><td><span class='arrowright'></span>&nbsp;<a href="javascript:show('OODLE_JOB_NULL_HANDLE.html')" class="paragraph">OODLE_JOB_NULL_HANDLE</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<div class=prototype><div class=prototype_header>// Preprocessor definition:</div><pre><span class=prototype_type>#define</span> <a href="javascript:show('OODLE_JOB_MAX_DEPENDENCIES.html')">OODLE_JOB_MAX_DEPENDENCIES</a> (4)</pre></div><div class=discussion_heading>Discussion</div> Maximum number of dependencies Oodle will ever pass to a RunJob callback
<br>&nbsp;<br> <table class=bar> <tr>
<td width=33% align=left><span class='arrowleft'></span><a href="javascript:show('OODLE_MALLOC_MINIMUM_ALIGNMENT.html')" class="paragraph">OODLE_MALLOC_MINIMUM_ALIGNMENT</a></td><td width=33% align=center><span class='arrowup'></span><a href="javascript:show('OodleAPI_Base.html')" class="paragraph">Core Base</a></td><td width=33% align=right><span class='arrowright'></span><a href="javascript:show('OODLE_JOB_NULL_HANDLE.html')" class="paragraph">OODLE_JOB_NULL_HANDLE</a></td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="t_fp_OodleCore_Plugin_RunJob.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>t_fp_OodleCore_Plugin_RunJob</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "t_fp_OodleCore_Plugin_RunJob.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="t_fp_OodleCore_Plugin_RunJob.html_backmenu">
<table class=dropmenu>
<tr><td><span class='arrowleft'></span>&nbsp;<a href="javascript:show('t_fp_OodleCore_Plugin_Free.html')" class="paragraph">t_fp_OodleCore_Plugin_Free</a></td></tr><tr><td><span class='arrowright'></span>&nbsp;<a href="javascript:show('t_fp_OodleCore_Plugin_WaitJob.html')" class="paragraph">t_fp_OodleCore_Plugin_WaitJob</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<div class=prototype><div class=prototype_header>// Function typedef:</div><pre>OODEFFUNC OO_U64( OODLE_CALLBACK <span class=prototype_type><a href="javascript:show('t_fp_OodleCore_Plugin_RunJob.html')" class="blue">t_fp_OodleCore_Plugin_RunJob</a></span> )( <span class=prototype_type><a href="javascript:show('t_fp_Oodle_Job.html')" class="blue">t_fp_Oodle_Job</a></span> * fp_job,
void * job_data,
OO_U64 * dependencies,
int num_dependencies,
void * user_ptr );</pre></div><div class=discussion_heading>Discussion</div>Function pointer type for OodleCore_Plugins_SetJobSystem<div class=discussion_heading>Parameters</div> <table> <tr> <td style='vertical-align: top;' class=paramname><a id="t_fp_OodleCore_Plugin_RunJob.html_dependencies" class=nohover>dependencies</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> array of handles of other pending jobs. All guaranteed to be nonzero.
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="t_fp_OodleCore_Plugin_RunJob.html_num_dependencies" class=nohover>num_dependencies</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> number of dependencies. Guaranteed to be no more than OODLE_JOB_MAX_DEPENDENCIES.
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="t_fp_OodleCore_Plugin_RunJob.html_user_ptr" class=nohover>user_ptr</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> is passed through from the OodleLZ_CompressOptions.
</td></tr></table><div class=discussion_heading>Return Value</div> <table> <tr> <td style='vertical-align: top;' class=paramname><a id="t_fp_OodleCore_Plugin_RunJob.html_return" class=nohover>return</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> handle to the async job, or 0 if it was run synchronously
</td></tr></table><div class=discussion_heading>Discussion</div></p>
<p> RunJob will call fp_job(job_data)
</p>
<p> it may be done on a thread, or it may run the function synchronously and return 0, indicating the job is already done.
The returned OO_U64 is a handle passed to WaitJob, unless it is 0, in which case WaitJob won't get called.
</p>
<p> fp_job should not run until all the dependencies are done. This function should not delete the dependencies.
</p>
<p> RunJob must be callable from within an Oodle Job, i.e. jobs may spawn their own sub-jobs directly.
However, the matching WaitJob calls will only ever occur on the thread that called the
internally threaded Oodle API function.
</p>
<p> See <a href="javascript:show('Oodle_About_Job_Threading_Plugins.html')" class="paragraph">About Oodle Job Threading Plugins</a>
<br>&nbsp;<br> <table class=bar> <tr>
<td width=33% align=left><span class='arrowleft'></span><a href="javascript:show('t_fp_OodleCore_Plugin_Free.html')" class="paragraph">t_fp_OodleCore_Plugin_Free</a></td><td width=33% align=center><span class='arrowup'></span><a href="javascript:show('OodleAPI_OodleCore_Plugins.html')" class="paragraph">Core plugins</a></td><td width=33% align=right><span class='arrowright'></span><a href="javascript:show('t_fp_OodleCore_Plugin_WaitJob.html')" class="paragraph">t_fp_OodleCore_Plugin_WaitJob</a></td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="OodleXLZ_Decompress_Wide_Async.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>OodleXLZ_Decompress_Wide_Async</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "OodleXLZ_Decompress_Wide_Async.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="OodleXLZ_Decompress_Wide_Async.html_backmenu">
<table class=dropmenu>
<tr><td><span class='arrowleft'></span>&nbsp;<a href="javascript:show('OodleXLZ_ReadAndDecompress_Wide_Async.html')" class="paragraph">OodleXLZ_ReadAndDecompress_Wide_Async</a></td></tr><tr><td><span class='arrowright'></span>&nbsp;<a href="javascript:show('OodleXLZ_Decompress_MakeSeekTable_Wide_Async.html')" class="paragraph">OodleXLZ_Decompress_MakeSeekTable_Wide_Async</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<div class=prototype><div class=prototype_header>// Function prototype:</div><pre><span class=prototype_type><a href="javascript:show('OodleXHandle.html')" class="blue">OodleXHandle</a></span> <span class=prototype_type><a href="javascript:show('OodleXLZ_Decompress_Wide_Async.html')" class="blue">OodleXLZ_Decompress_Wide_Async</a></span>( OO_U32 asyncSelect,
const <span class=prototype_type><a href="javascript:show('OodleLZ_SeekTable.html')" class="blue">OodleLZ_SeekTable</a></span> * seekTable,
const void * packedDataPtr,
OO_SINTa packedLen,
void * rawArray,
OO_SINTa rawArrayLen,
<span class=prototype_type><a href="javascript:show('OodleLZ_FuzzSafe.html')" class="blue">OodleLZ_FuzzSafe</a></span> fuzzSafe OODEFAULT( OodleLZ_FuzzSafe_No ),
<span class=prototype_type><a href="javascript:show('OodleLZ_CheckCRC.html')" class="blue">OodleLZ_CheckCRC</a></span> checkCRC OODEFAULT( OodleLZ_CheckCRC_No ),
<span class=prototype_type><a href="javascript:show('OodleLZ_Verbosity.html')" class="blue">OodleLZ_Verbosity</a></span> verbosity OODEFAULT( OodleLZ_Verbosity_None ),
void * decBufBase OODEFAULT( NULL ),
OO_SINTa decBufSize OODEFAULT( 0 ),
<span class=prototype_type><a href="javascript:show('OodleLZ_PackedRawOverlap.html')" class="blue">OodleLZ_PackedRawOverlap</a></span> packedRawOverlap OODEFAULT( OodleLZ_PackedRawOverlap_No ),
<span class=prototype_type><a href="javascript:show('OodleXIOQFile.html')" class="blue">OodleXIOQFile</a></span> writeToFile OODEFAULT( 0 ),
OO_S64 writeToFileStartPos OODEFAULT( 0 ),
<span class=prototype_type><a href="javascript:show('OodleXHandle.html')" class="blue">OodleXHandle</a></span> * pWriteHandleGroup OODEFAULT( 0 ),
<span class=prototype_type><a href="javascript:show('OodleXHandleAutoDelete.html')" class="blue">OodleXHandleAutoDelete</a></span> autoDelete OODEFAULT( OodleXHandleAutoDelete_No ),
const <span class=prototype_type><a href="javascript:show('OodleXHandle.html')" class="blue">OodleXHandle</a></span> * dependencies OODEFAULT( NULL ),
OO_S32 numDependencies OODEFAULT( 0 ) );</pre></div><div class=discussion_heading>Discussion</div>Start an async LZ decompress, possibly write raw data<div class=discussion_heading>Parameters</div> <table> <tr> <td style='vertical-align: top;' class=paramname><a id="OodleXLZ_Decompress_Wide_Async.html_asyncSelect" class=nohover>asyncSelect</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> logical OR of <a href="javascript:show('OodleXAsyncSelect.html')" class="paragraph">OodleXAsyncSelect</a> flags determine how the async is run
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXLZ_Decompress_Wide_Async.html_seekTable" class=nohover>seekTable</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> seek locations as created by <a href="javascript:show('OodleLZ_CreateSeekTable.html')" class="paragraph">OodleLZ_CreateSeekTable</a>
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXLZ_Decompress_Wide_Async.html_packedDataPtr" class=nohover>packedDataPtr</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> pointer to LZ compressed data
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXLZ_Decompress_Wide_Async.html_packedLen" class=nohover>packedLen</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> compressed data length
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXLZ_Decompress_Wide_Async.html_rawArray" class=nohover>rawArray</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> pointer to memory filled with decompressed data
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXLZ_Decompress_Wide_Async.html_rawArrayLen" class=nohover>rawArrayLen</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> length of decompressed data
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXLZ_Decompress_Wide_Async.html_checkCRC" class=nohover>checkCRC</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> if OodleLZ_CheckCRC_Yes, the decompressor checks the crc to ensure data integrity
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXLZ_Decompress_Wide_Async.html_verbosity" class=nohover>verbosity</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> (optional) if not OodleLZ_Verbosity_None, will log some information
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXLZ_Decompress_Wide_Async.html_decBufBase" class=nohover>decBufBase</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> (optional) if not NULL, provides preceding data to prime the dictionary; must be contiguous with rawBuf, the data between the pointers <i>dictionaryBase</i> and <i>rawBuf</i> is used as the preconditioning data. The exact same precondition must be passed to encoder and decoder.
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXLZ_Decompress_Wide_Async.html_decBufSize" class=nohover>decBufSize</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> (optional) size of circular buffer starting at decBufBase
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXLZ_Decompress_Wide_Async.html_packedRawOverlap" class=nohover>packedRawOverlap</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> (optional) if OodleLZ_PackedRawOverlap_Yes, the compressed data is in the same memory array as the output raw data
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXLZ_Decompress_Wide_Async.html_writeToFile" class=nohover>writeToFile</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> (optional) OodleXIOQFile to write raw data to
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXLZ_Decompress_Wide_Async.html_writeToFileStartPos" class=nohover>writeToFileStartPos</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> (optional) file position where writeToFile should start (must be <a href="javascript:show('OODLEX_IO_MAX_ALIGNMENT.html')" class="paragraph">OODLEX_IO_MAX_ALIGNMENT</a> aligned)
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXLZ_Decompress_Wide_Async.html_pWriteHandleGroup" class=nohover>pWriteHandleGroup</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> (optional) if writeToFile is given, this is filled with an OodleAsyncGroup OodleXHandle containing all the file IO operations
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXLZ_Decompress_Wide_Async.html_autoDelete" class=nohover>autoDelete</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> (optional) see <a href="javascript:show('OodleXHandleAutoDelete.html')" class="paragraph">OodleXHandleAutoDelete</a>
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXLZ_Decompress_Wide_Async.html_dependencies" class=nohover>dependencies</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> (optional) dependencies; the async op won't start until these are all complete; note : these are not freed, they must be autodelete or you must free them some other way.
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXLZ_Decompress_Wide_Async.html_numDependencies" class=nohover>numDependencies</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> (optional) number of handles in <i>deps</i> array
</td></tr></table><div class=discussion_heading>Return Value</div> <table> <tr> <td style='vertical-align: top;' class=paramname><a id="OodleXLZ_Decompress_Wide_Async.html_return" class=nohover>return</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> OodleXHandle to the operation, or OodleXHandle_Null for invalid arguments
</td></tr></table><div class=discussion_heading>Discussion</div></p>
<p> </p>
<p> Same as <a href="javascript:show('OodleXLZ_ReadAndDecompress_Wide_Async.html')" class="paragraph">OodleXLZ_ReadAndDecompress_Wide_Async</a>, except this API doesn't include the option to read
the packed data, it must be already fully loaded.
</p>
<p><br>&nbsp;<br> <table class=bar> <tr>
<td width=33% align=left><span class='arrowleft'></span><a href="javascript:show('OodleXLZ_ReadAndDecompress_Wide_Async.html')" class="paragraph">OodleXLZ_ReadAndDecompress_Wide_Async</a></td><td width=33% align=center><span class='arrowup'></span><a href="javascript:show('OodleXAPI_LZ_Async.html')" class="paragraph">OodleXAPI_LZ_Async</a></td><td width=33% align=right><span class='arrowright'></span><a href="javascript:show('OodleXLZ_Decompress_MakeSeekTable_Wide_Async.html')" class="paragraph">OodleXLZ_Decompress_MakeSeekTable_Wide_Async</a></td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="OodleNetwork1TCP_State_Reset.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>OodleNetwork1TCP_State_Reset</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "OodleNetwork1TCP_State_Reset.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="OodleNetwork1TCP_State_Reset.html_backmenu">
<table class=dropmenu>
<tr><td><span class='arrowleft'></span>&nbsp;<a href="javascript:show('OodleNetwork1_Shared_SetWindow.html')" class="paragraph">OodleNetwork1_Shared_SetWindow</a></td></tr><tr><td><span class='arrowright'></span>&nbsp;<a href="javascript:show('OodleNetwork1TCP_State_InitAsCopy.html')" class="paragraph">OodleNetwork1TCP_State_InitAsCopy</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<div class=prototype><div class=prototype_header>// Function prototype:</div><pre>void <span class=prototype_type><a href="javascript:show('OodleNetwork1TCP_State_Reset.html')" class="blue">OodleNetwork1TCP_State_Reset</a></span>( <span class=prototype_type><a href="javascript:show('OodleNetwork1TCP_State.html')" class="blue">OodleNetwork1TCP_State</a></span> * state );</pre></div><div class=discussion_heading>Discussion</div>Initialize a <a href="javascript:show('OodleNetwork1TCP_State.html')" class="paragraph">OodleNetwork1TCP_State</a><div class=discussion_heading>Parameters</div> <table> <tr> <td style='vertical-align: top;' class=paramname><a id="OodleNetwork1TCP_State_Reset.html_state" class=nohover>state</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> <a href="javascript:show('OodleNetwork1TCP_State.html')" class="paragraph">OodleNetwork1TCP_State</a> to initialize
</td></tr></table><div class=discussion_heading>Discussion</div></p>
<p> Resets <i>state</i> to a null state.
</p>
<p> Generally it is better to make a trained initial state with <a href="javascript:show('OodleNetwork1TCP_Train.html')" class="paragraph">OodleNetwork1TCP_Train</a>
and then use <a href="javascript:show('OodleNetwork1TCP_State_InitAsCopy.html')" class="paragraph">OodleNetwork1TCP_State_InitAsCopy</a>.
<br>&nbsp;<br> <table class=bar> <tr>
<td width=33% align=left><span class='arrowleft'></span><a href="javascript:show('OodleNetwork1_Shared_SetWindow.html')" class="paragraph">OodleNetwork1_Shared_SetWindow</a></td><td width=33% align=center><span class='arrowup'></span><a href="javascript:show('OodleAPI_OodleNetwork1.html')" class="paragraph">OodleAPI_OodleNetwork1</a></td><td width=33% align=right><span class='arrowright'></span><a href="javascript:show('OodleNetwork1TCP_State_InitAsCopy.html')" class="paragraph">OodleNetwork1TCP_State_InitAsCopy</a></td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="start_OodleNetwork.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>Getting Started with Oodle Network</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "start_OodleNetwork.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="start_OodleNetwork.html_backmenu">
<table class=dropmenu>
<tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<P>
Oodle Network compresses packets for bandwidth reduction and improved player experience in networked
games. It works with both TCP and UDP.
</p>
<p>To compress packages or downloadable content, see <a href="javascript:show('start_OodleData.html')" class="paragraph">Getting Started with Oodle LZ Data Compression</a>
</p>
<p>If you are using the Unreal Engine, ask us about our Unreal integration.
</p>
<p>Oodle Network does most of its work in an offline training phase. You capture a large sample of
packets. It uses that capture to build a model of your data and learns how to compress it. That
model is saved to disk, and will be shipped with your game.
</p>
<p>The runtime component loads the saved model and uses it to compress packets on the fly.
</p>
<p>The trained model is what makes it work even on UDP packets, and even on very small packets.
</p>
<p>The compression of packets is zero-latency (no extra buffering is introduced). UDP mode compresses
packets independently. TCP mode learns from the previous data sent over each connection.
</p>
<p><a href="javascript:show('example_network_client.html')" class="paragraph">example_network_client : Example with simple network client support</a> provides a simple example of how you would use a previously trained model to
compress packets in your shipping game.
</p>
<p>To evalute Oodle for network packet compression, you need to first get a capture of your typical
network stream to test on.
</p>
<p>You should try to capture packets from a realistic game run (perhaps from your QA department
playing the game). The captured packets should be without any encryption or other compression
algorithms applied. You may continue to use your bit-packing or delta scheme. Try to
capture 100 MB of packet data.
</p>
<p>The more realistic and varied your packet capture is, the more the test will reflect real world
performance. The capture should not include network protocol headers.
</p>
<p>The packet capture format that example_packet loads is :
</p>
<p><div class=prototype>
<PRE>
packet.bin :
U32 [LE] : numbers of channels (num_channels)
repeatedly :
{
U32 [LE] : channel index in [0,num_channels-1]
U32 [LE] : number of bytes of data in this packet (num_bytes)
U8 * num_bytes : payload of this packet
}
// (for UDP set num_channels to 1 and all the channel indices to 0)
</PRE>
</div>
</p>
<p>Once you have a capture, you can run <a href="javascript:show('example_packet.html')" class="paragraph">example_packet : Example demonstrating network packet compression</a> to test Oodle's compressors on it.
Or you can send to us, and we'll run the tests for you. Contact oodle@radgametools.com for details.
</p>
<p>NOTE : captured packets should have any existing compression and encryption disabled. Packets should not
contain IP headers. Usually it is best to log the packet data from your network code, don't try to use
an external packet logger. If possible, log packets before splitting them into MTU units. The goal is to
log the raw packet payloads.
</p>
<p>See <a href="javascript:show('OodleNetwork_About_CapturingTrainingData.html')" class="paragraph">Capturing Training data for OodleNetwork</a>.
</p>
<p>What example_packet does is load the captured packets, and splits them into a training set and a testing
set. It then trains a model (TestOodleNetwork_SelectDictionaryAndTrain), and saves it to disk
(OodleNetwork1_Compressor_WriteToFile). It then loads the model from disk, as the game runtime would
(OodleNetwork1_Compressor_LoadFromFileData), and then tests the performance of the model on the
test holdout packets (TestOodleNetwork1UDPPacketCoder_Transmission).
</p>
<p>The APIs used for the actual runtime packet compression are <a href="javascript:show('OodleNetwork1UDP_Encode.html')" class="paragraph">OodleNetwork1UDP_Encode</a> and
<a href="javascript:show('OodleNetwork1UDP_Decode.html')" class="paragraph">OodleNetwork1UDP_Decode</a> . (for UDP, similar variants for TCP; toggle testing UDP or TCP with
a #define in example_packet).
</p>
<p>See <a href="javascript:show('example_packet.html')" class="paragraph">example_packet : Example demonstrating network packet compression</a> for details. It provides a model trainer which you can either use directly, or use as a
starting point for incorporating your own variant in your own tools.
</p>
<p>See <a href="javascript:show('example_network_client.html')" class="paragraph">example_network_client : Example with simple network client support</a> for example of how to use Oodle Network in your shipping runtime.
</p>
<p>For more, see <a href="javascript:show('OodleNetwork1_About.html')" class="paragraph">About OodleNetwork1</a>, also <a href="javascript:show('OodleNetwork_About_CapturingTrainingData.html')" class="paragraph">Capturing Training data for OodleNetwork</a> and <a href="javascript:show('OodleNetwork_About_FormingPacketsForMaximumCompression.html')" class="paragraph">Forming Packets for Maximum Compression</a>
</p>
<p>For a guide to how to build with the Oodle library on your platform, see <a href="javascript:show('Oodle_About_Platforms.html')" class="paragraph">About Oodle on Platforms</a>.
For information about the Core vs Ext libs see <a href="javascript:show('start_CoreVsExt.html')" class="paragraph">Oodle2 Core vs Oodle2 Ext</a>.<br>&nbsp;<br> <table class=bar> <tr>
<td width=33%>&nbsp;</td><td width=33%>&nbsp;</td><td width=33%>&nbsp;</td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="OodleNetwork1UDP_State_Size.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>OodleNetwork1UDP_State_Size</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "OodleNetwork1UDP_State_Size.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="OodleNetwork1UDP_State_Size.html_backmenu">
<table class=dropmenu>
<tr><td><span class='arrowleft'></span>&nbsp;<a href="javascript:show('OodleNetwork1UDP_Train.html')" class="paragraph">OodleNetwork1UDP_Train</a></td></tr><tr><td><span class='arrowright'></span>&nbsp;<a href="javascript:show('OodleNetwork1UDP_Encode.html')" class="paragraph">OodleNetwork1UDP_Encode</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<div class=prototype><div class=prototype_header>// Function prototype:</div><pre>OO_SINTa <span class=prototype_type><a href="javascript:show('OodleNetwork1UDP_State_Size.html')" class="blue">OodleNetwork1UDP_State_Size</a></span>( void );</pre></div><div class=discussion_heading>Discussion</div>Returns the size of memory required for an <a href="javascript:show('OodleNetwork1UDP_State.html')" class="paragraph">OodleNetwork1UDP_State</a> object<div class=discussion_heading>Discussion</div>Shared and State are allocated with malloc( Size() )
</p>
<p><br>&nbsp;<br> <table class=bar> <tr>
<td width=33% align=left><span class='arrowleft'></span><a href="javascript:show('OodleNetwork1UDP_Train.html')" class="paragraph">OodleNetwork1UDP_Train</a></td><td width=33% align=center><span class='arrowup'></span><a href="javascript:show('OodleAPI_OodleNetwork1.html')" class="paragraph">OodleAPI_OodleNetwork1</a></td><td width=33% align=right><span class='arrowright'></span><a href="javascript:show('OodleNetwork1UDP_Encode.html')" class="paragraph">OodleNetwork1UDP_Encode</a></td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="OodleDecompressCallbackRet.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>OodleDecompressCallbackRet</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "OodleDecompressCallbackRet.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="OodleDecompressCallbackRet.html_backmenu">
<table class=dropmenu>
<tr><td><span class='arrowleft'></span>&nbsp;<a href="javascript:show('OodleLZ_Profile.html')" class="paragraph">OodleLZ_Profile</a></td></tr><tr><td><span class='arrowright'></span>&nbsp;<a href="javascript:show('OodleLZ_CompressionLevel.html')" class="paragraph">OodleLZ_CompressionLevel</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<div class=prototype><div class=prototype_header>// Enumerant:</div><pre><span class=prototype_type>enum</span> <a href="javascript:show('OodleDecompressCallbackRet.html')">OodleDecompressCallbackRet</a>
{
&nbsp;&nbsp;&nbsp;&nbsp;OodleDecompressCallbackRet_Continue = 0,
&nbsp;&nbsp;&nbsp;&nbsp;OodleDecompressCallbackRet_Cancel = 1,
&nbsp;&nbsp;&nbsp;&nbsp;OodleDecompressCallbackRet_Invalid = 2,
&nbsp;&nbsp;&nbsp;&nbsp;OodleDecompressCallbackRet_Force32 = 0x40000000
};
</pre></div><div class=discussion_heading>Discussion</div> Return value for <a href="javascript:show('OodleDecompressCallback.html')" class="paragraph">OodleDecompressCallback</a>
return OodleDecompressCallbackRet_Cancel to abort the in-progress decompression
<br>&nbsp;<br> <table class=bar> <tr>
<td width=33% align=left><span class='arrowleft'></span><a href="javascript:show('OodleLZ_Profile.html')" class="paragraph">OodleLZ_Profile</a></td><td width=33% align=center><span class='arrowup'></span><a href="javascript:show('OodleAPI_LZ_Compressors.html')" class="paragraph">OodleAPI_LZ_Compressors</a></td><td width=33% align=right><span class='arrowright'></span><a href="javascript:show('OodleLZ_CompressionLevel.html')" class="paragraph">OodleLZ_CompressionLevel</a></td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="OODLELZ_QUANTUM_LEN.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>OODLELZ_QUANTUM_LEN</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "OODLELZ_QUANTUM_LEN.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="OODLELZ_QUANTUM_LEN.html_backmenu">
<table class=dropmenu>
<tr><td><span class='arrowleft'></span>&nbsp;<a href="javascript:show('OODLELZ_BLOCK_MAX_COMPLEN.html')" class="paragraph">OODLELZ_BLOCK_MAX_COMPLEN</a></td></tr><tr><td><span class='arrowright'></span>&nbsp;<a href="javascript:show('OODLELZ_FAILED.html')" class="paragraph">OODLELZ_FAILED</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<div class=prototype><div class=prototype_header>// Preprocessor definition:</div><pre><span class=prototype_type>#define</span> <a href="javascript:show('OODLELZ_QUANTUM_LEN.html')">OODLELZ_QUANTUM_LEN</a> (1&lt;&lt;14)</pre></div><div class=discussion_heading>Discussion</div> Minimum decompression quantum (for old legacy codecs only)<div class=discussion_heading>Discussion</div> Deprecated.
</p>
<p> The new sea monster family of compressors use a whole block quantum (OODLELZ_BLOCK_LEN).
Check <a href="javascript:show('OodleLZ_Compressor_UsesWholeBlockQuantum.html')" class="paragraph">OodleLZ_Compressor_UsesWholeBlockQuantum</a>
<br>&nbsp;<br> <table class=bar> <tr>
<td width=33% align=left><span class='arrowleft'></span><a href="javascript:show('OODLELZ_BLOCK_MAX_COMPLEN.html')" class="paragraph">OODLELZ_BLOCK_MAX_COMPLEN</a></td><td width=33% align=center><span class='arrowup'></span><a href="javascript:show('OodleAPI_LZ_Compressors.html')" class="paragraph">OodleAPI_LZ_Compressors</a></td><td width=33% align=right><span class='arrowright'></span><a href="javascript:show('OODLELZ_FAILED.html')" class="paragraph">OODLELZ_FAILED</a></td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="OodleX_Shutdown_NoThreads.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>OodleX_Shutdown_NoThreads</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "OodleX_Shutdown_NoThreads.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="OodleX_Shutdown_NoThreads.html_backmenu">
<table class=dropmenu>
<tr><td><span class='arrowleft'></span>&nbsp;<a href="javascript:show('OodleX_Init_NoThreads.html')" class="paragraph">OodleX_Init_NoThreads</a></td></tr><tr><td><span class='arrowright'></span>&nbsp;<a href="javascript:show('OodleX_GetConfigValues.html')" class="paragraph">OodleX_GetConfigValues</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<div class=prototype><div class=prototype_header>// Function prototype:</div><pre>void <span class=prototype_type><a href="javascript:show('OodleX_Shutdown_NoThreads.html')" class="blue">OodleX_Shutdown_NoThreads</a></span>( const char * threadProfileLogName OODEFAULT( NULL ),
<span class=prototype_type><a href="javascript:show('OodleX_Shutdown_LogLeaks.html')" class="blue">OodleX_Shutdown_LogLeaks</a></span> logLeaks OODEFAULT( OodleX_Shutdown_LogLeaks_Yes ),
OO_U64 allocStartCounter OODEFAULT( 0 ),
<span class=prototype_type><a href="javascript:show('OodleX_Shutdown_DebugBreakOnLeaks.html')" class="blue">OodleX_Shutdown_DebugBreakOnLeaks</a></span> debugBreakOnLeaks OODEFAULT( OodleX_Shutdown_DebugBreakOnLeaks_No ) );</pre></div><div class=discussion_heading>Discussion</div>Shut down Oodle at app exit time.<div class=discussion_heading>Parameters</div> <table> <tr> <td style='vertical-align: top;' class=paramname><a id="OodleX_Shutdown_NoThreads.html_threadProfileLogName" class=nohover>threadProfileLogName</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> (optional) if not NULL, and the ThreadProfiler is enabled, writes the threadprofiler output to this file name
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleX_Shutdown_NoThreads.html_logLeaks" class=nohover>logLeaks</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> (optional) if true and the LeakTracker is enabled, logs any leaks or memory or handles
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleX_Shutdown_NoThreads.html_allocStartCounter" class=nohover>allocStartCounter</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> (optional) initial counter for the LeakTrack log
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleX_Shutdown_NoThreads.html_debugBreakOnLeaks" class=nohover>debugBreakOnLeaks</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> (optional) if there are any leaks, do a debug break
</td></tr></table><div class=discussion_heading>Discussion</div></p>
<p> Pair with <a href="javascript:show('OodleX_Init_NoThreads.html')" class="paragraph">OodleX_Init_NoThreads</a>. No Oodle functions should be called after Shutdown.
</p>
<p> Call Shutdown from the same thread that called Init.
</p>
<p> Do not shutdown Oodle then init again. Only call Init and Shutdown once per run.
<br>&nbsp;<br> <table class=bar> <tr>
<td width=33% align=left><span class='arrowleft'></span><a href="javascript:show('OodleX_Init_NoThreads.html')" class="paragraph">OodleX_Init_NoThreads</a></td><td width=33% align=center><span class='arrowup'></span><a href="javascript:show('OodleXAPI_Init.html')" class="paragraph">OodleX Startup and Shutdown</a></td><td width=33% align=right><span class='arrowright'></span><a href="javascript:show('OodleX_GetConfigValues.html')" class="paragraph">OodleX_GetConfigValues</a></td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="OodleXMalloc_GetVTable_Clib.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>OodleXMalloc_GetVTable_Clib</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "OodleXMalloc_GetVTable_Clib.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="OodleXMalloc_GetVTable_Clib.html_backmenu">
<table class=dropmenu>
<tr><td><span class='arrowleft'></span>&nbsp;<a href="javascript:show('OodleXFree_IOAligned.html')" class="paragraph">OodleXFree_IOAligned</a></td></tr><tr><td><span class='arrowright'></span>&nbsp;<a href="javascript:show('OodleXMalloc_GetVTable_OS.html')" class="paragraph">OodleXMalloc_GetVTable_OS</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<div class=prototype><div class=prototype_header>// Function prototype:</div><pre>const <span class=prototype_type><a href="javascript:show('OodleXMallocVTable.html')" class="blue">OodleXMallocVTable</a></span> * <span class=prototype_type><a href="javascript:show('OodleXMalloc_GetVTable_Clib.html')" class="blue">OodleXMalloc_GetVTable_Clib</a></span>( <span class=prototype_type><a href="javascript:show('OodleXMalloc_OS_Options.html')" class="blue">OodleXMalloc_OS_Options</a></span> options );</pre></div><div class=discussion_heading>Discussion</div>get an OodleMalloc VTable that contains allocators based on the std clib malloc/free <br>&nbsp;<br> <table class=bar> <tr>
<td width=33% align=left><span class='arrowleft'></span><a href="javascript:show('OodleXFree_IOAligned.html')" class="paragraph">OodleXFree_IOAligned</a></td><td width=33% align=center><span class='arrowup'></span><a href="javascript:show('OodleXAPI_Malloc.html')" class="paragraph">OodleX Memory Allocators</a></td><td width=33% align=right><span class='arrowright'></span><a href="javascript:show('OodleXMalloc_GetVTable_OS.html')" class="paragraph">OodleXMalloc_GetVTable_OS</a></td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="OodleX_PrefixOSCwd.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>OodleX_PrefixOSCwd</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "OodleX_PrefixOSCwd.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="OodleX_PrefixOSCwd.html_backmenu">
<table class=dropmenu>
<tr><td><span class='arrowleft'></span>&nbsp;<a href="javascript:show('OodleX_GetOSCwd.html')" class="paragraph">OodleX_GetOSCwd</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<div class=prototype><div class=prototype_header>// Function prototype:</div><pre>void <span class=prototype_type><a href="javascript:show('OodleX_PrefixOSCwd.html')" class="blue">OodleX_PrefixOSCwd</a></span>( char * addTo,
OO_S32 addToSize );</pre></div><div class=discussion_heading>Discussion</div>Make a relative path absolute by prefixing the current dir<div class=discussion_heading>Parameters</div> <table> <tr> <td style='vertical-align: top;' class=paramname><a id="OodleX_PrefixOSCwd.html_addTo" class=nohover>addTo</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> string which will be modified
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleX_PrefixOSCwd.html_addToSize" class=nohover>addToSize</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> total size of addTo (not the strlen)
</td></tr></table><div class=discussion_heading>Discussion</div></p>
<p> If addTo is an absolute path already it is not changed. If it is relative, the
OS cwd is retrieved with <a href="javascript:show('OodleX_GetOSCwd.html')" class="paragraph">OodleX_GetOSCwd</a> and then prefixed in front of addTo.
<br>&nbsp;<br> <table class=bar> <tr>
<td width=33% align=left><span class='arrowleft'></span><a href="javascript:show('OodleX_GetOSCwd.html')" class="paragraph">OodleX_GetOSCwd</a></td><td width=33% align=center><span class='arrowup'></span><a href="javascript:show('OodleXAPI_Util.html')" class="paragraph">OodleX Utils</a></td><td width=33% align=right><span class='arrowright'></span><a href="javascript:show('Oodle_AboutExt.html')" class="paragraph">About Oodle Ext</a></td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="OodleNetworkAPI.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>Oodle2 Network API Documentation</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "OodleNetworkAPI.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="OodleNetworkAPI.html_backmenu">
<table class=dropmenu>
<tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<ul class='TOCItem'>
<li><span onClick="HandleClick(event, null); return false" class='TOCGroup closedbook_icon'></span>&nbsp;<a href="javascript:show('OodleAPI_Network.html')">Oodle Network compression</a></li>
<ul style="display:none" class='TOCItem'>
<li><span onClick="HandleClick(event, null); return false" class='TOCGroup closedbook_icon'></span>&nbsp;<a href="javascript:show('OodleAPI_OodleNetwork1.html')">OodleAPI_OodleNetwork1</a></li>
<ul style="display:none" class='TOCItem'>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleNetwork1_About.html')">About OodleNetwork1</a></li>
<li><span onClick="HandleClick(event, null); return false" class='TOCGroup closedbook_icon'></span>&nbsp;Defines</li>
<ul style="display:none" class='TOCItem'>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OODLENETWORK1_MAX_DICTIONARY_SIZE.html')">OODLENETWORK1_MAX_DICTIONARY_SIZE</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OODLENETWORK1_HASH_BITS_DEFAULT.html')">OODLENETWORK1_HASH_BITS_DEFAULT</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OODLENETWORK1_DECOMP_BUF_OVERREAD_LEN.html')">OODLENETWORK1_DECOMP_BUF_OVERREAD_LEN</a></li>
</ul>
<li><span onClick="HandleClick(event, null); return false" class='TOCGroup closedbook_icon'></span>&nbsp;Structures</li>
<ul style="display:none" class='TOCItem'>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleNetwork1_Shared.html')">OodleNetwork1_Shared</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleNetwork1TCP_State.html')">OodleNetwork1TCP_State</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleNetwork1UDP_State.html')">OodleNetwork1UDP_State</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleNetwork1UDP_StateCompacted.html')">OodleNetwork1UDP_StateCompacted</a></li>
</ul>
<li><span onClick="HandleClick(event, null); return false" class='TOCGroup closedbook_icon'></span>&nbsp;Functions</li>
<ul style="display:none" class='TOCItem'>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleNetwork1_Shared_Size.html')">OodleNetwork1_Shared_Size</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleNetwork1TCP_State_Size.html')">OodleNetwork1TCP_State_Size</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleNetwork1_CompressedBufferSizeNeeded.html')">OodleNetwork1_CompressedBufferSizeNeeded</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleNetwork1_Shared_SetWindow.html')">OodleNetwork1_Shared_SetWindow</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleNetwork1TCP_State_Reset.html')">OodleNetwork1TCP_State_Reset</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleNetwork1TCP_State_InitAsCopy.html')">OodleNetwork1TCP_State_InitAsCopy</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleNetwork1TCP_Train.html')">OodleNetwork1TCP_Train</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleNetwork1TCP_Encode.html')">OodleNetwork1TCP_Encode</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleNetwork1TCP_Decode.html')">OodleNetwork1TCP_Decode</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleNetwork1UDP_Train.html')">OodleNetwork1UDP_Train</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleNetwork1UDP_State_Size.html')">OodleNetwork1UDP_State_Size</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleNetwork1UDP_Encode.html')">OodleNetwork1UDP_Encode</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleNetwork1UDP_Decode.html')">OodleNetwork1UDP_Decode</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleNetwork1UDP_StateCompacted_MaxSize.html')">OodleNetwork1UDP_StateCompacted_MaxSize</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleNetwork1UDP_State_Compact_ForVersion.html')">OodleNetwork1UDP_State_Compact_ForVersion</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleNetwork1UDP_State_Compact.html')">OodleNetwork1UDP_State_Compact</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleNetwork1UDP_State_Uncompact_ForVersion.html')">OodleNetwork1UDP_State_Uncompact_ForVersion</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleNetwork1UDP_State_Uncompact.html')">OodleNetwork1UDP_State_Uncompact</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleNetwork1_SelectDictionarySupported.html')">OodleNetwork1_SelectDictionarySupported</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleNetwork1_SelectDictionaryFromPackets.html')">OodleNetwork1_SelectDictionaryFromPackets</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleNetwork1_SelectDictionaryFromPackets_Trials.html')">OodleNetwork1_SelectDictionaryFromPackets_Trials</a></li>
</ul>
</ul>
<li><span onClick="HandleClick(event, null); return false" class='TOCGroup closedbook_icon'></span>&nbsp;<a href="javascript:show('OodleNetwork_About.html')">About Oodle Network Compression</a></li>
<ul style="display:none" class='TOCItem'>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleNetwork_About_CapturingTrainingData.html')">Capturing Training data for OodleNetwork</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleNetwork_About_FormingPacketsForMaximumCompression.html')">Forming Packets for Maximum Compression</a></li>
</ul>
</ul>
<li><span onClick="HandleClick(event, null); return false" class='TOCGroup closedbook_icon'></span>&nbsp;<a href="javascript:show('OodleAPI_OodleNet_Plugins.html')">Network plugins</a></li>
<ul style="display:none" class='TOCItem'>
<li><span onClick="HandleClick(event, null); return false" class='TOCGroup closedbook_icon'></span>&nbsp;Functions</li>
<ul style="display:none" class='TOCItem'>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleNet_Plugins_SetAllocators.html')">OodleNet_Plugins_SetAllocators</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleNet_Plugins_SetJobSystem.html')">OodleNet_Plugins_SetJobSystem</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleNet_Plugins_SetJobSystemAndCount.html')">OodleNet_Plugins_SetJobSystemAndCount</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleNet_Plugins_SetPrintf.html')">OodleNet_Plugins_SetPrintf</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleNet_Plugins_SetAssertion.html')">OodleNet_Plugins_SetAssertion</a></li>
</ul>
<li><span onClick="HandleClick(event, null); return false" class='TOCGroup closedbook_icon'></span>&nbsp;Typedefs</li>
<ul style="display:none" class='TOCItem'>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('t_fp_OodleNet_Plugin_MallocAligned.html')">t_fp_OodleNet_Plugin_MallocAligned</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('t_fp_OodleNet_Plugin_Free.html')">t_fp_OodleNet_Plugin_Free</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('t_fp_OodleNet_Plugin_RunJob.html')">t_fp_OodleNet_Plugin_RunJob</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('t_fp_OodleNet_Plugin_WaitJob.html')">t_fp_OodleNet_Plugin_WaitJob</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('t_fp_OodleNet_Plugin_Printf.html')">t_fp_OodleNet_Plugin_Printf</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('t_fp_OodleNet_Plugin_DisplayAssertion.html')">t_fp_OodleNet_Plugin_DisplayAssertion</a></li>
</ul>
</ul>
</ul>
<br>&nbsp;<br> <table class=bar> <tr>
<td width=33%>&nbsp;</td><td width=33%>&nbsp;</td><td width=33% align=right><span class='arrowright'></span><a href="javascript:show('OodleAPI_Network.html')" class="paragraph">Oodle Network compression</a></td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="OodleXIOQ_Rename_Async.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>OodleXIOQ_Rename_Async</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "OodleXIOQ_Rename_Async.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="OodleXIOQ_Rename_Async.html_backmenu">
<table class=dropmenu>
<tr><td><span class='arrowleft'></span>&nbsp;<a href="javascript:show('OodleXIOQ_Delete_Async.html')" class="paragraph">OodleXIOQ_Delete_Async</a></td></tr><tr><td><span class='arrowright'></span>&nbsp;<a href="javascript:show('OodleXIOQ_MakeDir_Async.html')" class="paragraph">OodleXIOQ_MakeDir_Async</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<div class=prototype><div class=prototype_header>// Function prototype:</div><pre><span class=prototype_type><a href="javascript:show('OodleXHandle.html')" class="blue">OodleXHandle</a></span> <span class=prototype_type><a href="javascript:show('OodleXIOQ_Rename_Async.html')" class="blue">OodleXIOQ_Rename_Async</a></span>( const char * fm,
const char * to,
OO_BOOL overwrite,
<span class=prototype_type><a href="javascript:show('OodleXHandleAutoDelete.html')" class="blue">OodleXHandleAutoDelete</a></span> autoDelete OODEFAULT( OodleXHandleAutoDelete_No ),
<span class=prototype_type><a href="javascript:show('OodleXPriority.html')" class="blue">OodleXPriority</a></span> priority OODEFAULT( OodleXPriority_Normal ),
const <span class=prototype_type><a href="javascript:show('OodleXHandle.html')" class="blue">OodleXHandle</a></span> * dependencies OODEFAULT( NULL ),
OO_S32 numDependencies OODEFAULT( 0 ) );</pre></div><div class=discussion_heading>Discussion</div>Start a renamefile request.<div class=discussion_heading>Parameters</div> <table> <tr> <td style='vertical-align: top;' class=paramname><a id="OodleXIOQ_Rename_Async.html_fm" class=nohover>fm</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> the file to rename (VFS, UTF-8)
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXIOQ_Rename_Async.html_to" class=nohover>to</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> the new file name (VFS, UTF-8)
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXIOQ_Rename_Async.html_overwrite" class=nohover>overwrite</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> if true, any existing file of name "to" will be overwrriten
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXIOQ_Rename_Async.html_autoDelete" class=nohover>autoDelete</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> (optional) see <a href="javascript:show('OodleXHandleAutoDelete.html')" class="paragraph">OodleXHandleAutoDelete</a>
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXIOQ_Rename_Async.html_priority" class=nohover>priority</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> (optional) priority of the operation ; see <a href="javascript:show('OodleXPriority.html')" class="paragraph">OodleXPriority</a>
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXIOQ_Rename_Async.html_dependencies" class=nohover>dependencies</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> (optional) dependencies; the async op won't start until these are all complete; note : these are not freed, they must be autodelete or you must free them some other way.
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXIOQ_Rename_Async.html_numDependencies" class=nohover>numDependencies</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> (optional) number of handles in <i>deps</i> array
</td></tr></table><div class=discussion_heading>Return Value</div> <table> <tr> <td style='vertical-align: top;' class=paramname><a id="OodleXIOQ_Rename_Async.html_return" class=nohover>return</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> handle to the operation, or 0 if it could not be started (usually due to invalid args)
</td></tr></table><div class=discussion_heading>Discussion</div></p>
<p> Asynchronously rename a file.
</p>
<p> Use OodleXIOQ_ForceWriteable_Async (on the to name) before the rename to force the ovewriting of read-only and other no-access conditions.
<br>&nbsp;<br> <table class=bar> <tr>
<td width=33% align=left><span class='arrowleft'></span><a href="javascript:show('OodleXIOQ_Delete_Async.html')" class="paragraph">OodleXIOQ_Delete_Async</a></td><td width=33% align=center><span class='arrowup'></span><a href="javascript:show('OodleXAPI_IOQ.html')" class="paragraph">OodleX low level async io</a></td><td width=33% align=right><span class='arrowright'></span><a href="javascript:show('OodleXIOQ_MakeDir_Async.html')" class="paragraph">OodleXIOQ_MakeDir_Async</a></td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="Oodle_About_PS4.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>About Oodle on PS4</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "Oodle_About_PS4.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="Oodle_About_PS4.html_backmenu">
<table class=dropmenu>
<tr><td><span class='arrowleft'></span>&nbsp;<a href="javascript:show('Oodle_About_Windows.html')" class="paragraph">About Oodle on Windows</a></td></tr><tr><td><span class='arrowup'></span>&nbsp;<a href="javascript:show('Oodle_About_Platforms.html')" class="paragraph">About Oodle on Platforms</a></td></tr><tr><td><span class='arrowright'></span>&nbsp;<a href="javascript:show('Oodle_About_Switch.html')" class="paragraph">About Oodle on Nintendo Switch</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<P>
Oodle for PS4 is provided as a lib.
</p>
<p><div class=prototype>
<PRE>
lib/liboo2coreps4.a
lib/liboo2extps4.a
</PRE>
</div>
</p>
<p>The debug build of the Oodle lib is also provided. Generally the release build of Oodle should be linked
with all versions of your game (do not link the debug build of Oodle with the
debug build of your game typically). The debug build of Oodle is provided to help you track down problems.
</p>
<p><hr>
</p>
<p>OodleX file IO on PS4 goes through the sceKernel low level routines, not FIOS.
</p>
<p>OodleX Malloc on PS4 uses sceKernelAllocateDirectMemory for large allocations, and clib malloc for small ones.
</p>
<p>NOTE : to build the examples on PS4 without worrying about running out of memory, I use :
</p>
<p><div class=prototype>
<PRE>
<h1>ifdef <i>_RADPS4</i>_
unsigned int sceLibcHeapExtendedAlloc = 1; /* Switch to dynamic allocation */
size_t sceLibcHeapSize = SCE_LIBC_HEAP_SIZE_EXTENDED_ALLOC_NO_LIMIT; /* no upper limit for heap area */
<h1>endif
</PRE></h1>
</div>
</p>
<p><hr>
</p>
<p>Do not decompress directly into uncached graphics memory.
See <a href="javascript:show('Oodle_FAQ_DecompressingToGraphicsMemoryIsSlow.html')" class="paragraph">FAQ: How do I decompress to graphics memory quickly?</a>.
</p>
<p>Oodle now automatically detects this and warns about it.<br>&nbsp;<br> <table class=bar> <tr>
<td width=33% align=left><span class='arrowleft'></span><a href="javascript:show('Oodle_About_Windows_UWP.html')" class="paragraph">About Oodle on Windows UWP</a></td><td width=33% align=center><span class='arrowup'></span><a href="javascript:show('Oodle_About_Platforms.html')" class="paragraph">About Oodle on Platforms</a></td><td width=33% align=right><span class='arrowright'></span><a href="javascript:show('Oodle_About_Switch.html')" class="paragraph">About Oodle on Nintendo Switch</a></td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="OodleXAPI_Threading.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>OodleX threading util</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "OodleXAPI_Threading.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="OodleXAPI_Threading.html_backmenu">
<table class=dropmenu>
<tr><td><span class='arrowleft'></span>&nbsp;<a href="javascript:show('OodleXAPI_Handle.html')" class="paragraph">OodleX async handle operations</a></td></tr><tr><td><span class='arrowup'></span>&nbsp;<a href="javascript:show('OodleExtAPI.html')" class="paragraph">Oodle2 Ext API Documentation</a></td></tr><tr><td><span class='arrowright'></span>&nbsp;<a href="javascript:show('OodleXAPI_IOQ.html')" class="paragraph">OodleX low level async io</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<P>
Threading utilities.
</p>
<p> <p><ul class='TOCItem'>
<li><span onClick="HandleClick(event, null); return false" class='TOCGroup closedbook_icon'></span>&nbsp;Functions</li>
<ul style="display:none" class='TOCItem'>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleX_Semaphore_Post.html')">OodleX_Semaphore_Post</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleX_Semaphore_Wait.html')">OodleX_Semaphore_Wait</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleX_CreateThread.html')">OodleX_CreateThread</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleX_WaitAndDestroyThread.html')">OodleX_WaitAndDestroyThread</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleX_ReleaseThreadTLS.html')">OodleX_ReleaseThreadTLS</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleX_CorePlugin_RunJob.html')">OodleX_CorePlugin_RunJob</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleX_CorePlugin_WaitJob.html')">OodleX_CorePlugin_WaitJob</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleX_GetNumWorkerThreads.html')">OodleX_GetNumWorkerThreads</a></li>
</ul>
<li><span onClick="HandleClick(event, null); return false" class='TOCGroup closedbook_icon'></span>&nbsp;Typedefs</li>
<ul style="display:none" class='TOCItem'>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleX_Semaphore.html')">OodleX_Semaphore</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleX_ThreadFunc.html')">OodleX_ThreadFunc</a></li>
</ul>
</ul>
<br>&nbsp;<br> <table class=bar> <tr>
<td width=33% align=left><span class='arrowleft'></span><a href="javascript:show('OodleXHandleCountdown_Decrement.html')" class="paragraph">OodleXHandleCountdown_Decrement</a></td><td width=33% align=center><span class='arrowup'></span><a href="javascript:show('OodleExtAPI.html')" class="paragraph">Oodle2 Ext API Documentation</a></td><td width=33% align=right><span class='arrowright'></span><a href="javascript:show('OodleX_Semaphore_Post.html')" class="paragraph">OodleX_Semaphore_Post</a></td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="OodleCore_Plugins_SetPrintf.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>OodleCore_Plugins_SetPrintf</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "OodleCore_Plugins_SetPrintf.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="OodleCore_Plugins_SetPrintf.html_backmenu">
<table class=dropmenu>
<tr><td><span class='arrowleft'></span>&nbsp;<a href="javascript:show('OodleCore_Plugins_SetJobSystemAndCount.html')" class="paragraph">OodleCore_Plugins_SetJobSystemAndCount</a></td></tr><tr><td><span class='arrowright'></span>&nbsp;<a href="javascript:show('OodleCore_Plugins_SetAssertion.html')" class="paragraph">OodleCore_Plugins_SetAssertion</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<div class=prototype><div class=prototype_header>// Function prototype:</div><pre><span class=prototype_type><a href="javascript:show('t_fp_OodleCore_Plugin_Printf.html')" class="blue">t_fp_OodleCore_Plugin_Printf</a></span> * <span class=prototype_type><a href="javascript:show('OodleCore_Plugins_SetPrintf.html')" class="blue">OodleCore_Plugins_SetPrintf</a></span>( <span class=prototype_type><a href="javascript:show('t_fp_OodleCore_Plugin_Printf.html')" class="blue">t_fp_OodleCore_Plugin_Printf</a></span> * fp_rrRawPrintf );</pre></div><div class=discussion_heading>Discussion</div>Install the callback used by Oodle Core for logging<div class=discussion_heading>Parameters</div> <table> <tr> <td style='vertical-align: top;' class=paramname><a id="OodleCore_Plugins_SetPrintf.html_fp_rrRawPrintf" class=nohover>fp_rrRawPrintf</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> function pointer to your log function; may be NULL to disable all logging
</td></tr></table><div class=discussion_heading>Return Value</div> <table> <tr> <td style='vertical-align: top;' class=paramname><a id="OodleCore_Plugins_SetPrintf.html_return" class=nohover>return</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> returns the previous function pointer
</td></tr></table><div class=discussion_heading>Discussion</div></p>
<p> Use this function to install your own printf for Oodle Core.
</p>
<p> The default implementation in debug builds, if you install nothing, uses the C stdio printf for logging.
On Microsoft platforms, it uses OutputDebugString and not stdio.
</p>
<p> To disable all logging, call OodleCore_Plugins_SetPrintf(NULL)
</p>
<p> WARNING : this function is NOT thread safe! It should be done only once and done in a place where the caller can guarantee thread safety.
</p>
<p> In the debug build of Oodle, you can install OodleCore_Plugin_Printf_Verbose to get more verbose logging
</p>
<p><br>&nbsp;<br> <table class=bar> <tr>
<td width=33% align=left><span class='arrowleft'></span><a href="javascript:show('OodleCore_Plugins_SetJobSystemAndCount.html')" class="paragraph">OodleCore_Plugins_SetJobSystemAndCount</a></td><td width=33% align=center><span class='arrowup'></span><a href="javascript:show('OodleAPI_OodleCore_Plugins.html')" class="paragraph">Core plugins</a></td><td width=33% align=right><span class='arrowright'></span><a href="javascript:show('OodleCore_Plugins_SetAssertion.html')" class="paragraph">OodleCore_Plugins_SetAssertion</a></td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="OodleXIOQ_Rename_AsyncAndWait.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>OodleXIOQ_Rename_AsyncAndWait</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "OodleXIOQ_Rename_AsyncAndWait.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="OodleXIOQ_Rename_AsyncAndWait.html_backmenu">
<table class=dropmenu>
<tr><td><span class='arrowleft'></span>&nbsp;<a href="javascript:show('OodleXIOQ_Delete_AsyncAndWait.html')" class="paragraph">OodleXIOQ_Delete_AsyncAndWait</a></td></tr><tr><td><span class='arrowright'></span>&nbsp;<a href="javascript:show('OodleXIOQ_GetFileSize_AsyncAndWait.html')" class="paragraph">OodleXIOQ_GetFileSize_AsyncAndWait</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<div class=prototype><div class=prototype_header>// Function prototype:</div><pre>OO_BOOL <span class=prototype_type><a href="javascript:show('OodleXIOQ_Rename_AsyncAndWait.html')" class="blue">OodleXIOQ_Rename_AsyncAndWait</a></span>( const char * fm,
const char * to,
OO_BOOL overwrite );</pre></div><div class=discussion_heading>Discussion</div>See <a href="javascript:show('OodleXIOQ_Rename_Async.html')" class="paragraph">OodleXIOQ_Rename_Async</a>
<br>&nbsp;<br> <table class=bar> <tr>
<td width=33% align=left><span class='arrowleft'></span><a href="javascript:show('OodleXIOQ_Delete_AsyncAndWait.html')" class="paragraph">OodleXIOQ_Delete_AsyncAndWait</a></td><td width=33% align=center><span class='arrowup'></span><a href="javascript:show('OodleXAPI_IOQ.html')" class="paragraph">OodleX low level async io</a></td><td width=33% align=right><span class='arrowright'></span><a href="javascript:show('OodleXIOQ_GetFileSize_AsyncAndWait.html')" class="paragraph">OodleXIOQ_GetFileSize_AsyncAndWait</a></td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="OodleXMalloc_IOAligned.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>OodleXMalloc_IOAligned</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "OodleXMalloc_IOAligned.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="OodleXMalloc_IOAligned.html_backmenu">
<table class=dropmenu>
<tr><td><span class='arrowleft'></span>&nbsp;<a href="javascript:show('OodleXMalloc_ValidatePointer.html')" class="paragraph">OodleXMalloc_ValidatePointer</a></td></tr><tr><td><span class='arrowright'></span>&nbsp;<a href="javascript:show('OodleXFree_IOAligned.html')" class="paragraph">OodleXFree_IOAligned</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<div class=prototype><div class=prototype_header>// Function prototype:</div><pre>void * <span class=prototype_type><a href="javascript:show('OodleXMalloc_IOAligned.html')" class="blue">OodleXMalloc_IOAligned</a></span>( OO_SINTa size );</pre></div><div class=discussion_heading>Discussion</div>OodleXMalloc_IOAligned result is guaranteed to be aligned to <a href="javascript:show('OODLEX_IO_MAX_ALIGNMENT.html')" class="paragraph">OODLEX_IO_MAX_ALIGNMENT</a><div class=discussion_heading>Parameters</div> <table> <tr> <td style='vertical-align: top;' class=paramname><a id="OodleXMalloc_IOAligned.html_size" class=nohover>size</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> bytes to allocate ; will be aligned up to <a href="javascript:show('OODLEX_IO_MAX_ALIGNMENT.html')" class="paragraph">OODLEX_IO_MAX_ALIGNMENT</a> !
</td></tr></table><div class=discussion_heading>Return Value</div> <table> <tr> <td style='vertical-align: top;' class=paramname><a id="OodleXMalloc_IOAligned.html_return" class=nohover>return</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> pointer to the allocated memory
</td></tr></table><div class=discussion_heading>Discussion</div></p>
<p> OodleXMalloc_IOAligned should be used to get memory that can be used in OodleIOQ and other places
that require disk-aligned pointers.
OodleXMalloc_IOAligned may just pass through to <a href="javascript:show('OodleXMallocBig.html')" class="paragraph">OodleXMallocBig</a> provided by the client, or it may not
if the <a href="javascript:show('OodleXMallocBigAlignment.html')" class="paragraph">OodleXMallocBigAlignment</a> is very large.
<br>&nbsp;<br> <table class=bar> <tr>
<td width=33% align=left><span class='arrowleft'></span><a href="javascript:show('OodleXMalloc_ValidatePointer.html')" class="paragraph">OodleXMalloc_ValidatePointer</a></td><td width=33% align=center><span class='arrowup'></span><a href="javascript:show('OodleXAPI_Malloc.html')" class="paragraph">OodleX Memory Allocators</a></td><td width=33% align=right><span class='arrowright'></span><a href="javascript:show('OodleXFree_IOAligned.html')" class="paragraph">OodleXFree_IOAligned</a></td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="OodleX_GetAvailableAsyncSelect.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>OodleX_GetAvailableAsyncSelect</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "OodleX_GetAvailableAsyncSelect.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="OodleX_GetAvailableAsyncSelect.html_backmenu">
<table class=dropmenu>
<tr><td><span class='arrowleft'></span>&nbsp;<a href="javascript:show('OodleX_SetHandleAutoDelete.html')" class="paragraph">OodleX_SetHandleAutoDelete</a></td></tr><tr><td><span class='arrowright'></span>&nbsp;<a href="javascript:show('OodleXHandleEvent_Alloc.html')" class="paragraph">OodleXHandleEvent_Alloc</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<div class=prototype><div class=prototype_header>// Function prototype:</div><pre>OO_U32 <span class=prototype_type><a href="javascript:show('OodleX_GetAvailableAsyncSelect.html')" class="blue">OodleX_GetAvailableAsyncSelect</a></span>( );</pre></div><div class=discussion_heading>Discussion</div>Get the currently available async systems<div class=discussion_heading>Return Value</div> <table> <tr> <td style='vertical-align: top;' class=paramname><a id="OodleX_GetAvailableAsyncSelect.html_return" class=nohover>return</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> a bitwise OR of <a href="javascript:show('OodleXAsyncSelect.html')" class="paragraph">OodleXAsyncSelect</a> flags
</td></tr></table><div class=discussion_heading>Discussion</div></p>
<p> The <a href="javascript:show('OodleXAsyncSelect.html','OodleXAsyncSelect.html_OodleXAsyncSelect_Wide')" class="paragraph">OodleXAsyncSelect_Wide</a> bit is set if there is more than one runner available.
<br>&nbsp;<br> <table class=bar> <tr>
<td width=33% align=left><span class='arrowleft'></span><a href="javascript:show('OodleX_SetHandleAutoDelete.html')" class="paragraph">OodleX_SetHandleAutoDelete</a></td><td width=33% align=center><span class='arrowup'></span><a href="javascript:show('OodleXAPI_Handle.html')" class="paragraph">OodleX async handle operations</a></td><td width=33% align=right><span class='arrowright'></span><a href="javascript:show('OodleXHandleEvent_Alloc.html')" class="paragraph">OodleXHandleEvent_Alloc</a></td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="OodleXIOQ_GetLastPendingOpOnFile.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>OodleXIOQ_GetLastPendingOpOnFile</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "OodleXIOQ_GetLastPendingOpOnFile.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="OodleXIOQ_GetLastPendingOpOnFile.html_backmenu">
<table class=dropmenu>
<tr><td><span class='arrowleft'></span>&nbsp;<a href="javascript:show('OodleXIOQ_Wait_GetInfo.html')" class="paragraph">OodleXIOQ_Wait_GetInfo</a></td></tr><tr><td><span class='arrowright'></span>&nbsp;<a href="javascript:show('OodleXIOQ_GetName.html')" class="paragraph">OodleXIOQ_GetName</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<div class=prototype><div class=prototype_header>// Function prototype:</div><pre><span class=prototype_type><a href="javascript:show('OodleXHandle.html')" class="blue">OodleXHandle</a></span> <span class=prototype_type><a href="javascript:show('OodleXIOQ_GetLastPendingOpOnFile.html')" class="blue">OodleXIOQ_GetLastPendingOpOnFile</a></span>( <span class=prototype_type><a href="javascript:show('OodleXIOQFile.html')" class="blue">OodleXIOQFile</a></span> file );</pre></div><div class=discussion_heading>Discussion</div>Get an operation on this file, if any<div class=discussion_heading>Parameters</div> <table> <tr> <td style='vertical-align: top;' class=paramname><a id="OodleXIOQ_GetLastPendingOpOnFile.html_file" class=nohover>file</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> the IOQFile to query
</td></tr></table><div class=discussion_heading>Return Value</div> <table> <tr> <td style='vertical-align: top;' class=paramname><a id="OodleXIOQ_GetLastPendingOpOnFile.html_return" class=nohover>return</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> the operation found, or 0 if none
</td></tr></table><div class=discussion_heading>Discussion</div></p>
<p> The operation returned may no longer be pending (nor the last) by the time you check it.
<br>&nbsp;<br> <table class=bar> <tr>
<td width=33% align=left><span class='arrowleft'></span><a href="javascript:show('OodleXIOQ_Wait_GetInfo.html')" class="paragraph">OodleXIOQ_Wait_GetInfo</a></td><td width=33% align=center><span class='arrowup'></span><a href="javascript:show('OodleXAPI_IOQ.html')" class="paragraph">OodleX low level async io</a></td><td width=33% align=right><span class='arrowright'></span><a href="javascript:show('OodleXIOQ_GetName.html')" class="paragraph">OodleXIOQ_GetName</a></td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="OodleX_S64_to_SINTa_check.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>OodleX_S64_to_SINTa_check</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "OodleX_S64_to_SINTa_check.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="OodleX_S64_to_SINTa_check.html_backmenu">
<table class=dropmenu>
<tr><td><span class='arrowleft'></span>&nbsp;<a href="javascript:show('OodleX_IOAlignDownSINTa.html')" class="paragraph">OodleX_IOAlignDownSINTa</a></td></tr><tr><td><span class='arrowright'></span>&nbsp;<a href="javascript:show('OodleX_GetSeconds.html')" class="paragraph">OodleX_GetSeconds</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<div class=prototype><div class=prototype_header>// Function prototype:</div><pre>OO_SINTa <span class=prototype_type><a href="javascript:show('OodleX_S64_to_SINTa_check.html')" class="blue">OodleX_S64_to_SINTa_check</a></span>( const OO_S64 x );</pre></div><div class=discussion_heading>Discussion</div>Convert OO_S64 to OO_SINTa and check<div class=discussion_heading>Discussion</div>Used for loading 64-bit file sizes into memory buffers.
Converts type and checks that file size fits in memory.
</p>
<p> In 64 bit builds, this is a no-op.
On 32 bit builds it ensures you to don't lose bits in the cast accidentally.
</p>
<p> See also <a href="javascript:show('Oodle_FAQ_S64_And_SINTa.html')" class="paragraph">FAQ: What is SINTa? How do I load files bigger than 2 GB?</a>.
<br>&nbsp;<br> <table class=bar> <tr>
<td width=33% align=left><span class='arrowleft'></span><a href="javascript:show('OodleX_IOAlignDownSINTa.html')" class="paragraph">OodleX_IOAlignDownSINTa</a></td><td width=33% align=center><span class='arrowup'></span><a href="javascript:show('OodleXAPI_Util.html')" class="paragraph">OodleX Utils</a></td><td width=33% align=right><span class='arrowright'></span><a href="javascript:show('OodleX_GetSeconds.html')" class="paragraph">OodleX_GetSeconds</a></td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="t_fp_OodleNet_Plugin_RunJob.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>t_fp_OodleNet_Plugin_RunJob</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "t_fp_OodleNet_Plugin_RunJob.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="t_fp_OodleNet_Plugin_RunJob.html_backmenu">
<table class=dropmenu>
<tr><td><span class='arrowleft'></span>&nbsp;<a href="javascript:show('t_fp_OodleNet_Plugin_Free.html')" class="paragraph">t_fp_OodleNet_Plugin_Free</a></td></tr><tr><td><span class='arrowright'></span>&nbsp;<a href="javascript:show('t_fp_OodleNet_Plugin_WaitJob.html')" class="paragraph">t_fp_OodleNet_Plugin_WaitJob</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<div class=prototype><div class=prototype_header>// Function typedef:</div><pre>OODEFFUNC OO_U64( OODLE_CALLBACK <span class=prototype_type><a href="javascript:show('t_fp_OodleNet_Plugin_RunJob.html')" class="blue">t_fp_OodleNet_Plugin_RunJob</a></span> )( <span class=prototype_type><a href="javascript:show('t_fp_Oodle_Job.html')" class="blue">t_fp_Oodle_Job</a></span> * fp_job,
void * job_data,
OO_U64 * dependencies,
int num_dependencies,
void * user_ptr );</pre></div><div class=discussion_heading>Discussion</div>Function pointer type for OodleNet_Plugins_SetJobSystem<div class=discussion_heading>Parameters</div> <table> <tr> <td style='vertical-align: top;' class=paramname><a id="t_fp_OodleNet_Plugin_RunJob.html_dependencies" class=nohover>dependencies</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> array of handles of other pending jobs. All guaranteed to be nonzero.
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="t_fp_OodleNet_Plugin_RunJob.html_num_dependencies" class=nohover>num_dependencies</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> number of dependencies. Guaranteed to be no more than OODLE_JOB_MAX_DEPENDENCIES.
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="t_fp_OodleNet_Plugin_RunJob.html_user_ptr" class=nohover>user_ptr</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> is passed through from the OodleLZ_CompressOptions.
</td></tr></table><div class=discussion_heading>Return Value</div> <table> <tr> <td style='vertical-align: top;' class=paramname><a id="t_fp_OodleNet_Plugin_RunJob.html_return" class=nohover>return</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> handle to the async job, or 0 if it was run synchronously
</td></tr></table><div class=discussion_heading>Discussion</div></p>
<p> RunJob will call fp_job(job_data)
</p>
<p> it may be done on a thread, or it may run the function synchronously and return 0, indicating the job is already done.
The returned OO_U64 is a handle passed to WaitJob, unless it is 0, in which case WaitJob won't get called.
</p>
<p> fp_job should not run until all the dependencies are done. This function should not delete the dependencies.
</p>
<p> RunJob must be callable from within an Oodle Job, i.e. jobs may spawn their own sub-jobs directly.
However, the matching WaitJob calls will only ever occur on the thread that called the
internally threaded Oodle API function.
</p>
<p> See <a href="javascript:show('Oodle_About_Job_Threading_Plugins.html')" class="paragraph">About Oodle Job Threading Plugins</a>
<br>&nbsp;<br> <table class=bar> <tr>
<td width=33% align=left><span class='arrowleft'></span><a href="javascript:show('t_fp_OodleNet_Plugin_Free.html')" class="paragraph">t_fp_OodleNet_Plugin_Free</a></td><td width=33% align=center><span class='arrowup'></span><a href="javascript:show('OodleAPI_OodleNet_Plugins.html')" class="paragraph">Network plugins</a></td><td width=33% align=right><span class='arrowright'></span><a href="javascript:show('t_fp_OodleNet_Plugin_WaitJob.html')" class="paragraph">t_fp_OodleNet_Plugin_WaitJob</a></td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="Oodle_FAQ_DecompressingToGraphicsMemoryIsSlow.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>FAQ: How do I decompress to graphics memory quickly?</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "Oodle_FAQ_DecompressingToGraphicsMemoryIsSlow.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="Oodle_FAQ_DecompressingToGraphicsMemoryIsSlow.html_backmenu">
<table class=dropmenu>
<tr><td><span class='arrowleft'></span>&nbsp;<a href="javascript:show('Oodle_FAQ_LZCompareTable.html')" class="paragraph">FAQ: What are the speeds and ratios of the OodleLZ compressors and levels?</a></td></tr><tr><td><span class='arrowup'></span>&nbsp;<a href="javascript:show('Oodle_FAQ.html')" class="paragraph">Frequently Asked Questions</a></td></tr><tr><td><span class='arrowright'></span>&nbsp;<a href="javascript:show('Oodle_FAQ_HowDoIGetOodleLogs.html')" class="paragraph">FAQ: How do I get the Oodle logs?</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<P>
The OodleLZ decompressors must read back from the buffer that they are decompressing into.
</p>
<p>If you try to decompress directly into uncached memory (or write combined memory, such as graphics buffers),
you may see very bad performance. Several of Oodle's supported targets don't offer an efficient way to
check memory types underlying virtual addresses; instead, Oodle performs a quick check to determine how
fast repeated byte reads from the same location (the first byte of the destination buffer) are and logs
a warning when they are repeatedly very slow. Generally, this means the destination is uncached.
</p>
<p>There are a few ways to decode for graphics, depending on your platform and exact usage.
</p>
<p>The simplest way is to decompress into a temporary buffer of normal cached memory, and then memcpy from there into the
graphics memory.
</p>
<p>For unbounded-window LZ, you would decode into a cached buffer equal to the size of the target. You can copy this buffer
to the final graphics memory either all at once after decoding, or incrementally after each LZ BLOCK or QUANTUM decode from DecodeSome.
</p>
<p>You can also use a bounded window by setting the dictionarySize
CompressOption, in which case you can use a sliding window of cached CPU memory, and copy out chunks to the final
target graphics memory as you decode.
</p>
<p>See lz_test_11 in <a href="javascript:show('example_lz.html')" class="paragraph">example_lz : Example demonstrating LZ compression and decompression</a> for a demonstration of this style of decompression.
</p>
<p>On platforms where it is possible, it can be fastest to set your buffer memory type to cached,
do the Oodle decompression into that buffer, then flush the cache, then change the memory type to uncached/GPU.
You must ensure the buffer is not sent to the GPU until the cache flush is done.
</p>
<p>When loading levels, ideally you'd do lots of LZ decodes and then only flush the cache once, not after every
resource is decoded.
</p>
<p>On the PS4 you could decode into WB_ONION memory, and after the decode is complete, change the memory to WB_GARLIC
using sceKernelMtypeprotect or sceKernelBatchMap.
</p>
<p>On the Xbox One you can reserve a range of memory with VirtualAlloc, commit it as READWRITE and cached on the CPU
to do the LZ decode, then decommit the memory and commit the same address again as GPU_READONLY. This is a workaround
which allows you to change the cache type of a memory range (because VirtualProtect does not allow it).
</p>
<p>Contact Oodle support for help if you wish to explore these advanced memory type manipulations.
</p>
<p>NOTE : on some platforms, Oodle now automatically detects it if you try to decode into uncached memory,
and logs a usage warning about it. See <a href="javascript:show('Oodle_SetUsageWarnings.html')" class="paragraph">Oodle_SetUsageWarnings</a><br>&nbsp;<br> <table class=bar> <tr>
<td width=33% align=left><span class='arrowleft'></span><a href="javascript:show('Oodle_FAQ_LZCompareTable.html')" class="paragraph">FAQ: What are the speeds and ratios of the OodleLZ compressors and levels?</a></td><td width=33% align=center><span class='arrowup'></span><a href="javascript:show('Oodle_FAQ.html')" class="paragraph">Frequently Asked Questions</a></td><td width=33% align=right><span class='arrowright'></span><a href="javascript:show('Oodle_FAQ_HowDoIGetOodleLogs.html')" class="paragraph">FAQ: How do I get the Oodle logs?</a></td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="OodleLZSeekTable_Flags.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>OodleLZSeekTable_Flags</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "OodleLZSeekTable_Flags.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="OodleLZSeekTable_Flags.html_backmenu">
<table class=dropmenu>
<tr><td><span class='arrowleft'></span>&nbsp;<a href="javascript:show('OodleLZ_FuzzSafe.html')" class="paragraph">OodleLZ_FuzzSafe</a></td></tr><tr><td><span class='arrowright'></span>&nbsp;<a href="javascript:show('OodleLZ_CompressScratchMemBoundType.html')" class="paragraph">OodleLZ_CompressScratchMemBoundType</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<div class=prototype><div class=prototype_header>// Enumerant:</div><pre><span class=prototype_type>enum</span> <a href="javascript:show('OodleLZSeekTable_Flags.html')">OodleLZSeekTable_Flags</a>
{
&nbsp;&nbsp;&nbsp;&nbsp;OodleLZSeekTable_Flags_None = 0,
&nbsp;&nbsp;&nbsp;&nbsp;OodleLZSeekTable_Flags_MakeRawCRCs = 1,
&nbsp;&nbsp;&nbsp;&nbsp;OodleLZSeekTable_Flags_Force32 = 0x40000000
};
</pre></div><div class=discussion_heading>Discussion</div> Options for <a href="javascript:show('OodleLZ_CreateSeekTable.html')" class="paragraph">OodleLZ_CreateSeekTable</a><div class=discussion_heading>Enumerants</div> <table> <tr> <td style='vertical-align: top;' class=paramname><a id="OodleLZSeekTable_Flags.html_OodleLZSeekTable_Flags_None" class=nohover>OodleLZSeekTable_Flags_None</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> default</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleLZSeekTable_Flags.html_OodleLZSeekTable_Flags_MakeRawCRCs" class=nohover>OodleLZSeekTable_Flags_MakeRawCRCs</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> make the <i>rawCRCs</i> member of <a href="javascript:show('OodleLZ_SeekTable.html')" class="paragraph">OodleLZ_SeekTable</a></td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleLZSeekTable_Flags.html_OodleLZSeekTable_Flags_Force32" class=nohover>OodleLZSeekTable_Flags_Force32</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc></td></tr></table><br>&nbsp;<br> <table class=bar> <tr>
<td width=33% align=left><span class='arrowleft'></span><a href="javascript:show('OodleLZ_FuzzSafe.html')" class="paragraph">OodleLZ_FuzzSafe</a></td><td width=33% align=center><span class='arrowup'></span><a href="javascript:show('OodleAPI_LZ_Compressors.html')" class="paragraph">OodleAPI_LZ_Compressors</a></td><td width=33% align=right><span class='arrowright'></span><a href="javascript:show('OodleLZ_CompressScratchMemBoundType.html')" class="paragraph">OodleLZ_CompressScratchMemBoundType</a></td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="OODLENETWORK1_HASH_BITS_DEFAULT.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>OODLENETWORK1_HASH_BITS_DEFAULT</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "OODLENETWORK1_HASH_BITS_DEFAULT.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="OODLENETWORK1_HASH_BITS_DEFAULT.html_backmenu">
<table class=dropmenu>
<tr><td><span class='arrowleft'></span>&nbsp;<a href="javascript:show('OODLENETWORK1_MAX_DICTIONARY_SIZE.html')" class="paragraph">OODLENETWORK1_MAX_DICTIONARY_SIZE</a></td></tr><tr><td><span class='arrowright'></span>&nbsp;<a href="javascript:show('OODLENETWORK1_DECOMP_BUF_OVERREAD_LEN.html')" class="paragraph">OODLENETWORK1_DECOMP_BUF_OVERREAD_LEN</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<div class=prototype><div class=prototype_header>// Preprocessor definition:</div><pre><span class=prototype_type>#define</span> <a href="javascript:show('OODLENETWORK1_HASH_BITS_DEFAULT.html')">OODLENETWORK1_HASH_BITS_DEFAULT</a> (19)</pre></div><div class=discussion_heading>Discussion</div> Good default value for OodleNetwork1 hash table size log2
<br>&nbsp;<br> <table class=bar> <tr>
<td width=33% align=left><span class='arrowleft'></span><a href="javascript:show('OODLENETWORK1_MAX_DICTIONARY_SIZE.html')" class="paragraph">OODLENETWORK1_MAX_DICTIONARY_SIZE</a></td><td width=33% align=center><span class='arrowup'></span><a href="javascript:show('OodleAPI_OodleNetwork1.html')" class="paragraph">OodleAPI_OodleNetwork1</a></td><td width=33% align=right><span class='arrowright'></span><a href="javascript:show('OODLENETWORK1_DECOMP_BUF_OVERREAD_LEN.html')" class="paragraph">OODLENETWORK1_DECOMP_BUF_OVERREAD_LEN</a></td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="OODLEX_ASYNC_HANDLE_DONE.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>OODLEX_ASYNC_HANDLE_DONE</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "OODLEX_ASYNC_HANDLE_DONE.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="OODLEX_ASYNC_HANDLE_DONE.html_backmenu">
<table class=dropmenu>
<tr><td><span class='arrowleft'></span>&nbsp;<a href="javascript:show('OODLEX_ASYNC_HANDLE_PENDING.html')" class="paragraph">OODLEX_ASYNC_HANDLE_PENDING</a></td></tr><tr><td><span class='arrowright'></span>&nbsp;<a href="javascript:show('OODLEX_ASYNC_HANDLE_ERROR.html')" class="paragraph">OODLEX_ASYNC_HANDLE_ERROR</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<div class=prototype><div class=prototype_header>// Preprocessor definition:</div><pre><span class=prototype_type>#define</span> <a href="javascript:show('OODLEX_ASYNC_HANDLE_DONE.html')">OODLEX_ASYNC_HANDLE_DONE</a> ((<span class=prototype_type><a href="javascript:show('OodleXHandle.html')" class="blue">OodleXHandle</a></span>)0x0000000100000001ULL)</pre></div><div class=discussion_heading>Discussion</div> OodleXHandle to a special always-done handle.
Calls to <a href="javascript:show('OodleX_GetStatus.html')" class="paragraph">OodleX_GetStatus</a> on this handle value will return &amp;OodleXStatus_Done.
This handle must not be deleted! Do not call <a href="javascript:show('OodleX_Wait.html')" class="paragraph">OodleX_Wait</a> on it with deleteIfDone = true.
<br>&nbsp;<br> <table class=bar> <tr>
<td width=33% align=left><span class='arrowleft'></span><a href="javascript:show('OODLEX_ASYNC_HANDLE_PENDING.html')" class="paragraph">OODLEX_ASYNC_HANDLE_PENDING</a></td><td width=33% align=center><span class='arrowup'></span><a href="javascript:show('OodleXAPI_Handle.html')" class="paragraph">OodleX async handle operations</a></td><td width=33% align=right><span class='arrowright'></span><a href="javascript:show('OODLEX_ASYNC_HANDLE_ERROR.html')" class="paragraph">OODLEX_ASYNC_HANDLE_ERROR</a></td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="OodleXIOQ_MakeDir_Async.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>OodleXIOQ_MakeDir_Async</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "OodleXIOQ_MakeDir_Async.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="OodleXIOQ_MakeDir_Async.html_backmenu">
<table class=dropmenu>
<tr><td><span class='arrowleft'></span>&nbsp;<a href="javascript:show('OodleXIOQ_Rename_Async.html')" class="paragraph">OodleXIOQ_Rename_Async</a></td></tr><tr><td><span class='arrowright'></span>&nbsp;<a href="javascript:show('OodleXIOQ_FreeBufferIOAligned_Async.html')" class="paragraph">OodleXIOQ_FreeBufferIOAligned_Async</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<div class=prototype><div class=prototype_header>// Function prototype:</div><pre><span class=prototype_type><a href="javascript:show('OodleXHandle.html')" class="blue">OodleXHandle</a></span> <span class=prototype_type><a href="javascript:show('OodleXIOQ_MakeDir_Async.html')" class="blue">OodleXIOQ_MakeDir_Async</a></span>( const char * name,
<span class=prototype_type><a href="javascript:show('OodleXHandleAutoDelete.html')" class="blue">OodleXHandleAutoDelete</a></span> autoDelete OODEFAULT( OodleXHandleAutoDelete_No ),
<span class=prototype_type><a href="javascript:show('OodleXPriority.html')" class="blue">OodleXPriority</a></span> priority OODEFAULT( OodleXPriority_Normal ),
const <span class=prototype_type><a href="javascript:show('OodleXHandle.html')" class="blue">OodleXHandle</a></span> * dependencies OODEFAULT( NULL ),
OO_S32 numDependencies OODEFAULT( 0 ) );</pre></div><div class=discussion_heading>Discussion</div>Start a make dir request.<div class=discussion_heading>Parameters</div> <table> <tr> <td style='vertical-align: top;' class=paramname><a id="OodleXIOQ_MakeDir_Async.html_name" class=nohover>name</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> the dir to make (VFS, UTF-8)
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXIOQ_MakeDir_Async.html_autoDelete" class=nohover>autoDelete</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> (optional) see <a href="javascript:show('OodleXHandleAutoDelete.html')" class="paragraph">OodleXHandleAutoDelete</a>
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXIOQ_MakeDir_Async.html_priority" class=nohover>priority</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> (optional) priority of the operation ; see <a href="javascript:show('OodleXPriority.html')" class="paragraph">OodleXPriority</a>
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXIOQ_MakeDir_Async.html_dependencies" class=nohover>dependencies</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> (optional) dependencies; the async op won't start until these are all complete; note : these are not freed, they must be autodelete or you must free them some other way.
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXIOQ_MakeDir_Async.html_numDependencies" class=nohover>numDependencies</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> (optional) number of handles in <i>deps</i> array
</td></tr></table><div class=discussion_heading>Return Value</div> <table> <tr> <td style='vertical-align: top;' class=paramname><a id="OodleXIOQ_MakeDir_Async.html_return" class=nohover>return</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> handle to the operation, or 0 if it could not be started (usually due to invalid args)
</td></tr></table><div class=discussion_heading>Discussion</div></p>
<p> Asynchronously make a dir.
<br>&nbsp;<br> <table class=bar> <tr>
<td width=33% align=left><span class='arrowleft'></span><a href="javascript:show('OodleXIOQ_Rename_Async.html')" class="paragraph">OodleXIOQ_Rename_Async</a></td><td width=33% align=center><span class='arrowup'></span><a href="javascript:show('OodleXAPI_IOQ.html')" class="paragraph">OodleX low level async io</a></td><td width=33% align=right><span class='arrowright'></span><a href="javascript:show('OodleXIOQ_FreeBufferIOAligned_Async.html')" class="paragraph">OodleXIOQ_FreeBufferIOAligned_Async</a></td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="OodleAPI_OodleCore_Plugins.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>Core plugins</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "OodleAPI_OodleCore_Plugins.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="OodleAPI_OodleCore_Plugins.html_backmenu">
<table class=dropmenu>
<tr><td><span class='arrowleft'></span>&nbsp;<a href="javascript:show('OodleAPI_Base.html')" class="paragraph">Core Base</a></td></tr><tr><td><span class='arrowup'></span>&nbsp;<a href="javascript:show('OodleCoreAPI.html')" class="paragraph">Oodle2 Core API Documentation</a></td></tr><tr><td><span class='arrowright'></span>&nbsp;<a href="javascript:show('OodleAPI_LZ.html')" class="paragraph">Core LZ compression</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<ul class='TOCItem'>
<li><span onClick="HandleClick(event, null); return false" class='TOCGroup closedbook_icon'></span>&nbsp;Functions</li>
<ul style="display:none" class='TOCItem'>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleCore_Plugins_SetAllocators.html')">OodleCore_Plugins_SetAllocators</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleCore_Plugins_SetJobSystem.html')">OodleCore_Plugins_SetJobSystem</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleCore_Plugins_SetJobSystemAndCount.html')">OodleCore_Plugins_SetJobSystemAndCount</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleCore_Plugins_SetPrintf.html')">OodleCore_Plugins_SetPrintf</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleCore_Plugins_SetAssertion.html')">OodleCore_Plugins_SetAssertion</a></li>
</ul>
<li><span onClick="HandleClick(event, null); return false" class='TOCGroup closedbook_icon'></span>&nbsp;Typedefs</li>
<ul style="display:none" class='TOCItem'>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('t_fp_OodleCore_Plugin_MallocAligned.html')">t_fp_OodleCore_Plugin_MallocAligned</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('t_fp_OodleCore_Plugin_Free.html')">t_fp_OodleCore_Plugin_Free</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('t_fp_OodleCore_Plugin_RunJob.html')">t_fp_OodleCore_Plugin_RunJob</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('t_fp_OodleCore_Plugin_WaitJob.html')">t_fp_OodleCore_Plugin_WaitJob</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('t_fp_OodleCore_Plugin_Printf.html')">t_fp_OodleCore_Plugin_Printf</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('t_fp_OodleCore_Plugin_DisplayAssertion.html')">t_fp_OodleCore_Plugin_DisplayAssertion</a></li>
</ul>
</ul>
<br>&nbsp;<br> <table class=bar> <tr>
<td width=33% align=left><span class='arrowleft'></span><a href="javascript:show('Oodle_LogHeader.html')" class="paragraph">Oodle_LogHeader</a></td><td width=33% align=center><span class='arrowup'></span><a href="javascript:show('OodleCoreAPI.html')" class="paragraph">Oodle2 Core API Documentation</a></td><td width=33% align=right><span class='arrowright'></span><a href="javascript:show('OodleCore_Plugins_SetAllocators.html')" class="paragraph">OodleCore_Plugins_SetAllocators</a></td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="OodleXIOQ_FreeBufferIOAligned_Async.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>OodleXIOQ_FreeBufferIOAligned_Async</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "OodleXIOQ_FreeBufferIOAligned_Async.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="OodleXIOQ_FreeBufferIOAligned_Async.html_backmenu">
<table class=dropmenu>
<tr><td><span class='arrowleft'></span>&nbsp;<a href="javascript:show('OodleXIOQ_MakeDir_Async.html')" class="paragraph">OodleXIOQ_MakeDir_Async</a></td></tr><tr><td><span class='arrowright'></span>&nbsp;<a href="javascript:show('OodleXIOQ_GetInfoByName_Async.html')" class="paragraph">OodleXIOQ_GetInfoByName_Async</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<div class=prototype><div class=prototype_header>// Function prototype:</div><pre><span class=prototype_type><a href="javascript:show('OodleXHandle.html')" class="blue">OodleXHandle</a></span> <span class=prototype_type><a href="javascript:show('OodleXIOQ_FreeBufferIOAligned_Async.html')" class="blue">OodleXIOQ_FreeBufferIOAligned_Async</a></span>( <span class=prototype_type><a href="javascript:show('OodleXIOQFile.html')" class="blue">OodleXIOQFile</a></span> file,
void * buffer,
<span class=prototype_type><a href="javascript:show('OodleXHandleAutoDelete.html')" class="blue">OodleXHandleAutoDelete</a></span> autoDelete OODEFAULT( OodleXHandleAutoDelete_No ),
<span class=prototype_type><a href="javascript:show('OodleXPriority.html')" class="blue">OodleXPriority</a></span> priority OODEFAULT( OodleXPriority_Normal ),
const <span class=prototype_type><a href="javascript:show('OodleXHandle.html')" class="blue">OodleXHandle</a></span> * dependencies OODEFAULT( NULL ),
OO_S32 numDependencies OODEFAULT( 0 ) );</pre></div><div class=discussion_heading>Discussion</div>Start a free-buffer request<div class=discussion_heading>Parameters</div> <table> <tr> <td style='vertical-align: top;' class=paramname><a id="OodleXIOQ_FreeBufferIOAligned_Async.html_file" class=nohover>file</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> the request is scheduled on this file
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXIOQ_FreeBufferIOAligned_Async.html_buffer" class=nohover>buffer</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> the buffer to free
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXIOQ_FreeBufferIOAligned_Async.html_autoDelete" class=nohover>autoDelete</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> (optional) see <a href="javascript:show('OodleXHandleAutoDelete.html')" class="paragraph">OodleXHandleAutoDelete</a>
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXIOQ_FreeBufferIOAligned_Async.html_priority" class=nohover>priority</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> (optional) priority of the operation ; see <a href="javascript:show('OodleXPriority.html')" class="paragraph">OodleXPriority</a>
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXIOQ_FreeBufferIOAligned_Async.html_dependencies" class=nohover>dependencies</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> (optional) dependencies; the async op won't start until these are all complete; note : these are not freed, they must be autodelete or you must free them some other way.
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXIOQ_FreeBufferIOAligned_Async.html_numDependencies" class=nohover>numDependencies</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> (optional) number of handles in <i>deps</i> array
</td></tr></table><div class=discussion_heading>Return Value</div> <table> <tr> <td style='vertical-align: top;' class=paramname><a id="OodleXIOQ_FreeBufferIOAligned_Async.html_return" class=nohover>return</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> handle to the operation, or 0 if it could not be started (usually due to invalid args)
</td></tr></table><div class=discussion_heading>Discussion</div></p>
<p> Runs <a href="javascript:show('OodleXFree_IOAligned.html')" class="paragraph">OodleXFree_IOAligned</a> as an IO operation on the file's sequential list of ops.
</p>
<p> This is mainly useful with <a href="javascript:show('OodleXIOQ_Write_Async.html')" class="paragraph">OodleXIOQ_Write_Async</a>. When you write a buffer, you can't free it until the write
is done, with this you can just call Write and then FreeBuffer ; the FreeBuffer will be run when the Write is done.
<br>&nbsp;<br> <table class=bar> <tr>
<td width=33% align=left><span class='arrowleft'></span><a href="javascript:show('OodleXIOQ_MakeDir_Async.html')" class="paragraph">OodleXIOQ_MakeDir_Async</a></td><td width=33% align=center><span class='arrowup'></span><a href="javascript:show('OodleXAPI_IOQ.html')" class="paragraph">OodleX low level async io</a></td><td width=33% align=right><span class='arrowright'></span><a href="javascript:show('OodleXIOQ_GetInfoByName_Async.html')" class="paragraph">OodleXIOQ_GetInfoByName_Async</a></td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="OodleXLog_SetVerboseLevel.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>OodleXLog_SetVerboseLevel</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "OodleXLog_SetVerboseLevel.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="OodleXLog_SetVerboseLevel.html_backmenu">
<table class=dropmenu>
<tr><td><span class='arrowleft'></span>&nbsp;<a href="javascript:show('OodleXLog_GetVerboseLevel.html')" class="paragraph">OodleXLog_GetVerboseLevel</a></td></tr><tr><td><span class='arrowright'></span>&nbsp;<a href="javascript:show('OodleXLog_Flush.html')" class="paragraph">OodleXLog_Flush</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<div class=prototype><div class=prototype_header>// Function prototype:</div><pre>int <span class=prototype_type><a href="javascript:show('OodleXLog_SetVerboseLevel.html')" class="blue">OodleXLog_SetVerboseLevel</a></span>( int v );</pre></div><div class=discussion_heading>Discussion</div>Set the global verbose level<div class=discussion_heading>Parameters</div> <table> <tr> <td style='vertical-align: top;' class=paramname><a id="OodleXLog_SetVerboseLevel.html_v" class=nohover>v</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> verbose level to use
</td></tr></table><div class=discussion_heading>Return Value</div> <table> <tr> <td style='vertical-align: top;' class=paramname><a id="OodleXLog_SetVerboseLevel.html_return" class=nohover>return</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> the previous verbose level
</td></tr></table><div class=discussion_heading>Discussion</div></p>
<p> The verbose level should typically be one of <a href="javascript:show('OodleXLog_VerboseLevel.html')" class="paragraph">OodleXLog_VerboseLevel</a> ,
but that's not required.
</p>
<p> If the verbose level is N, calls to <a href="javascript:show('OodleXLog_Printf.html')" class="paragraph">OodleXLog_Printf</a>(M,..) will be
skipped any time M > N. eg. at the default development level of
<a href="javascript:show('OodleXLog_VerboseLevel.html','OodleXLog_VerboseLevel.html_OodleXLog_Verbose_Some')" class="paragraph">OodleXLog_Verbose_Some</a> (1), all logs will be output except for
OodleXLog_Printf_v2.
</p>
<p><br>&nbsp;<br> <table class=bar> <tr>
<td width=33% align=left><span class='arrowleft'></span><a href="javascript:show('OodleXLog_GetVerboseLevel.html')" class="paragraph">OodleXLog_GetVerboseLevel</a></td><td width=33% align=center><span class='arrowup'></span><a href="javascript:show('OodleXAPI_Debug.html')" class="paragraph">OodleX Debug aids</a></td><td width=33% align=right><span class='arrowright'></span><a href="javascript:show('OodleXLog_Flush.html')" class="paragraph">OodleXLog_Flush</a></td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="OodleXAPI_IOQ.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>OodleX low level async io</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "OodleXAPI_IOQ.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="OodleXAPI_IOQ.html_backmenu">
<table class=dropmenu>
<tr><td><span class='arrowleft'></span>&nbsp;<a href="javascript:show('OodleXAPI_Threading.html')" class="paragraph">OodleX threading util</a></td></tr><tr><td><span class='arrowup'></span>&nbsp;<a href="javascript:show('OodleExtAPI.html')" class="paragraph">Oodle2 Ext API Documentation</a></td></tr><tr><td><span class='arrowright'></span>&nbsp;<a href="javascript:show('OodleXAPI_Debug.html')" class="paragraph">OodleX Debug aids</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<P>
OodleIOQ low level, stateless, asychronous IO.
</p>
<p> <p><ul class='TOCItem'>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleXIOQ_About.html')">About OodleIOQ</a></li>
<li><span onClick="HandleClick(event, null); return false" class='TOCGroup closedbook_icon'></span>&nbsp;Defines</li>
<ul style="display:none" class='TOCItem'>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OODLEX_IO_MAX_ALIGNMENT.html')">OODLEX_IO_MAX_ALIGNMENT</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OODLEX_BUFFER_SIZE_DEFAULT.html')">OODLEX_BUFFER_SIZE_DEFAULT</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OODLEX_FILEINFO_FLAG_INVALID.html')">OODLEX_FILEINFO_FLAG_INVALID</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OODLEX_FILEINFO_MODTIME_INVALID.html')">OODLEX_FILEINFO_MODTIME_INVALID</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OODLEX_FILE_SIZE_INVALID.html')">OODLEX_FILE_SIZE_INVALID</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OODLEX_FILE_OPEN_NO_RESERVE_SIZE.html')">OODLEX_FILE_OPEN_NO_RESERVE_SIZE</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OODLEX_FILE_CLOSE_NO_TRUNCATE_SIZE.html')">OODLEX_FILE_CLOSE_NO_TRUNCATE_SIZE</a></li>
</ul>
<li><span onClick="HandleClick(event, null); return false" class='TOCGroup closedbook_icon'></span>&nbsp;Enumerants</li>
<ul style="display:none" class='TOCItem'>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleXCopyFileFlags.html')">OodleXCopyFileFlags</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleFileNotFoundIsAnError.html')">OodleFileNotFoundIsAnError</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OODLEX_FILEINFO_FLAGS.html')">OODLEX_FILEINFO_FLAGS</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleXError.html')">OodleXError</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleXFileMode.html')">OodleXFileMode</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleXFileOpenFlags.html')">OodleXFileOpenFlags</a></li>
</ul>
<li><span onClick="HandleClick(event, null); return false" class='TOCGroup closedbook_icon'></span>&nbsp;Structures</li>
<ul style="display:none" class='TOCItem'>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleXFileOpsVTable.html')">OodleXFileOpsVTable</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleXFileInfo.html')">OodleXFileInfo</a></li>
</ul>
<li><span onClick="HandleClick(event, null); return false" class='TOCGroup closedbook_icon'></span>&nbsp;Functions</li>
<ul style="display:none" class='TOCItem'>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleXIOQ_WaitDoneAllPending.html')">OodleXIOQ_WaitDoneAllPending</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleXIOQ_KickAnyDelayed.html')">OodleXIOQ_KickAnyDelayed</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleXIOQ_GetStatus.html')">OodleXIOQ_GetStatus</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleXIOQ_GetErrorDetails.html')">OodleXIOQ_GetErrorDetails</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleXIOQ_GetErrorEnum.html')">OodleXIOQ_GetErrorEnum</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleXIOQ_LogError.html')">OodleXIOQ_LogError</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleXIOQ_Wait.html')">OodleXIOQ_Wait</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleXIOQ_GetInfo.html')">OodleXIOQ_GetInfo</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleXIOQ_Wait_GetInfo.html')">OodleXIOQ_Wait_GetInfo</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleXIOQ_GetLastPendingOpOnFile.html')">OodleXIOQ_GetLastPendingOpOnFile</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleXIOQ_GetName.html')">OodleXIOQ_GetName</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleXIOQ_GetLastError.html')">OodleXIOQ_GetLastError</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleXIOQ_ClearError.html')">OodleXIOQ_ClearError</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleXIOQ_LogLastError.html')">OodleXIOQ_LogLastError</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleXIOQ_GetOSHandle.html')">OodleXIOQ_GetOSHandle</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleXIOQ_SetVTable.html')">OodleXIOQ_SetVTable</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleXIOQ_Fence_Async.html')">OodleXIOQ_Fence_Async</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleXIOQ_OpenForRead_Async.html')">OodleXIOQ_OpenForRead_Async</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleXIOQ_OpenAndRead_Async.html')">OodleXIOQ_OpenAndRead_Async</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleXIOQ_OpenForWriteCreate_Async.html')">OodleXIOQ_OpenForWriteCreate_Async</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleXIOQ_OpenForWriteTempName_Async.html')">OodleXIOQ_OpenForWriteTempName_Async</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleXIOQ_CloseFile_Async.html')">OodleXIOQ_CloseFile_Async</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleXIOQ_CloseFileRename_Async.html')">OodleXIOQ_CloseFileRename_Async</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleXIOQ_Read_Async.html')">OodleXIOQ_Read_Async</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleXIOQ_Write_Async.html')">OodleXIOQ_Write_Async</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleXIOQ_SetFileSize_Async.html')">OodleXIOQ_SetFileSize_Async</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleXIOQ_ReserveFileSizeForWrite_Async.html')">OodleXIOQ_ReserveFileSizeForWrite_Async</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleXIOQ_ForceWriteable_Async.html')">OodleXIOQ_ForceWriteable_Async</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleXIOQ_Delete_Async.html')">OodleXIOQ_Delete_Async</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleXIOQ_Rename_Async.html')">OodleXIOQ_Rename_Async</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleXIOQ_MakeDir_Async.html')">OodleXIOQ_MakeDir_Async</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleXIOQ_FreeBufferIOAligned_Async.html')">OodleXIOQ_FreeBufferIOAligned_Async</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleXIOQ_GetInfoByName_Async.html')">OodleXIOQ_GetInfoByName_Async</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleXIOQ_GetInfoByName_GetResult.html')">OodleXIOQ_GetInfoByName_GetResult</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleXIOQ_SetInfoByName_Async.html')">OodleXIOQ_SetInfoByName_Async</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleXIOQ_ReadMallocWholeFile_Async.html')">OodleXIOQ_ReadMallocWholeFile_Async</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleXIOQ_ReadMallocWholeFile_GetResult.html')">OodleXIOQ_ReadMallocWholeFile_GetResult</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleXIOQ_OpenAndReadMallocWholeFile_Async.html')">OodleXIOQ_OpenAndReadMallocWholeFile_Async</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleXIOQ_OpenAndReadMallocWholeFileAndClose_Async.html')">OodleXIOQ_OpenAndReadMallocWholeFileAndClose_Async</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleXIOQ_OpenWriteWholeFileClose_Async.html')">OodleXIOQ_OpenWriteWholeFileClose_Async</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleXIOQ_OpenWriteWholeFileCloseTempName_Async.html')">OodleXIOQ_OpenWriteWholeFileCloseTempName_Async</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleXIOQ_ReadUnalignedAdjustPointer_Async.html')">OodleXIOQ_ReadUnalignedAdjustPointer_Async</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleXIOQ_MakeAllDirs_Async.html')">OodleXIOQ_MakeAllDirs_Async</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleXIOQ_CopyFile_Async.html')">OodleXIOQ_CopyFile_Async</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleXIOQ_ReadMallocWholeFile_AsyncAndWait.html')">OodleXIOQ_ReadMallocWholeFile_AsyncAndWait</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleXIOQ_WriteWholeFile_AsyncAndWait.html')">OodleXIOQ_WriteWholeFile_AsyncAndWait</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleXIOQ_CopyFile_AsyncAndWait.html')">OodleXIOQ_CopyFile_AsyncAndWait</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleXIOQ_GetInfoByName_AsyncAndWait.html')">OodleXIOQ_GetInfoByName_AsyncAndWait</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleXIOQ_SetInfoByName_AsyncAndWait.html')">OodleXIOQ_SetInfoByName_AsyncAndWait</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleXIOQ_MakeAllDirs_AsyncAndWait.html')">OodleXIOQ_MakeAllDirs_AsyncAndWait</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleXIOQ_Delete_AsyncAndWait.html')">OodleXIOQ_Delete_AsyncAndWait</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleXIOQ_Rename_AsyncAndWait.html')">OodleXIOQ_Rename_AsyncAndWait</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleXIOQ_GetFileSize_AsyncAndWait.html')">OodleXIOQ_GetFileSize_AsyncAndWait</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleXIOQ_NameIsDir_AsyncAndWait.html')">OodleXIOQ_NameIsDir_AsyncAndWait</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleX_GetOSFileOps.html')">OodleX_GetOSFileOps</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleX_GetDefaultFileOps.html')">OodleX_GetDefaultFileOps</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleX_SetDefaultFileOps.html')">OodleX_SetDefaultFileOps</a></li>
</ul>
<li><span onClick="HandleClick(event, null); return false" class='TOCGroup closedbook_icon'></span>&nbsp;Typedefs</li>
<ul style="display:none" class='TOCItem'>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleXIOQFile.html')">OodleXIOQFile</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleXOSFile.html')">OodleXOSFile</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleXOSFileListing.html')">OodleXOSFileListing</a></li>
</ul>
</ul>
<br>&nbsp;<br> <table class=bar> <tr>
<td width=33% align=left><span class='arrowleft'></span><a href="javascript:show('OodleX_GetNumWorkerThreads.html')" class="paragraph">OodleX_GetNumWorkerThreads</a></td><td width=33% align=center><span class='arrowup'></span><a href="javascript:show('OodleExtAPI.html')" class="paragraph">Oodle2 Ext API Documentation</a></td><td width=33% align=right><span class='arrowright'></span><a href="javascript:show('OodleXIOQ_About.html')" class="paragraph">About OodleIOQ</a></td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="OodleNetwork1_About.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>About OodleNetwork1</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "OodleNetwork1_About.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="OodleNetwork1_About.html_backmenu">
<table class=dropmenu>
<tr><td><span class='arrowup'></span>&nbsp;<a href="javascript:show('OodleAPI_OodleNetwork1.html')" class="paragraph">OodleAPI_OodleNetwork1</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<P>
OodleNetwork1 is a specialized compressor designed for compression of network packet transmission.
It's designed to reduce game bandwidth use and improve player experience.
</p>
<p><hr>
</p>
<p><h2> Quick Intro to OodleNetwork features</h2>
</p>
<p><ul>
<li> OodleNetwork encodes packet by packet with zero latency. The runtime encode and decode are simple buffer->buffer
calls. Just build your packet as usual and then compress it, and send the compressed packet.
</ul></p>
<p><ul>
<li> OodleNetwork runtime integration is extremely simple, just call Encode() in the server and Decode() in the client
(for one-way compression). The complexity is all in the offline training process.
</ul></p>
<p><ul>
<li> OodleNetwork does its heavy work in the offline training phase, so the runtime can be quite fast.
</ul></p>
<p><ul>
<li> OodleNetwork does no allocations at runtime (you provide the memory for the model). OodleNetwork for UDP uses zero memory per channel. OodleNetwork for TCP uses around 100k per channel, which may be provided by the client code as a linear block.
</ul></p>
<p><ul>
<li> OodleNetwork is about the same speed as "zlib -5" or "LZ4 HC" while achieving much more compression.
</ul></p>
<p><ul>
<li> OodleNetwork is able to compress packets even if they have already been bit-packed.
</ul></p>
<p><ul>
<li> OodleNetwork will never expand a packet.
</ul></p>
<p><ul>
<li> OodleNetwork uses a dictionary size of your choosing. Even a small 1 MB dictionary can provide good compression.
A typical size is 4 MB. Larger dictionaries generally give more compression, but you are free to choose the tradeoff
that best suits your needs.
</ul></p>
<p><ul>
<li> OodleNetwork is in Oodle2 Core and the runtime available on all platforms. (model training can only be done on desktop platforms)
</ul></p>
<p><ul>
<li> OodleNetwork is fully thread-safe and re-entrant with no mutexes or blocking. The shared model data is read-only
after initialization.
</ul></p>
<p><hr>
</p>
<p><h2> Compression of UDP network packets</h2>
</p>
<p>With UDP networking, packets may be dropped or arrive in different orders. This means there is
not a consistent history that the encoder and decoder see, so you cannot use any compressor which
is based on a per-channel history (zlib, OodleLZ, OodleNetwork1-TCP).
</p>
<p>OodleNetwork1UDP does compression of packets without any per-channel state.
</p>
<p>The <a href="javascript:show('OodleNetwork1UDP_State.html')" class="paragraph">OodleNetwork1UDP_State</a> is global and const; you make it offline in training, then distribute it as a const block of data with your game. It can be used by all encoder and decoder channels.
</p>
<p>Sometimes it may be advantageous to have separate models for upstream or downstream traffic, or to compress only one direction and not the other. You can easily try these options and choose what works best for you.
</p>
<p>Compression is done on each packet independently, so they can be lost or out of order and still decompress correctly.
</p>
<p><PRE>
OodleNetwork1 [dictionary MB|hash bits]
OodleNetwork1 for TCP with per-channel history :
OodleNetwork1 [8|19] : 595654217 -> 123101634 = 4.839:1
1605378 packets; 371.0 -> 76.7 average
OodleNetwork1 for UDP with no per-channel state :
OodleNetwork1UDP [8|19] : 595654217 -> 150022411 = 3.970:1
1605378 packets; 371.0 -> 93.4 average
</PRE>
</p>
<p><hr>
</p>
<p><h2> Compression of TCP network packets</h2>
</p>
<p>NOTE : OodleNetwork1 and OodleLZ are for TCP network compression, that is when
you have a reliable per-channel history. For UDP, use OodleNetwork1UDP (see below).
</p>
<p>OodleNetwork1 for TCP uses a shared static dictionary, plus a dynamic state per channel.
</p>
<p>Usage of OodleNetwork1 is demonstrated in <a href="javascript:show('example_packet.html')" class="paragraph">example_packet : Example demonstrating network packet compression</a>.
</p>
<p>For more normal data distribution needs, and large downloads or join packets, use Oodle Data Compression. See <a href="javascript:show('OodleLZ_About.html')" class="paragraph">About OodleLZ</a>.
</p>
<p>OodleNetwork1 is "zero latency". That is, it don't add any buffering or delay of packets. It produces compressed bytes immediately for each raw byte processed.
</p>
<p>OodleNetwork1 uses a static dictionary and hash table which is const and shared by all network channels. The size is set by the user. The bigger the static dictionary, the more compression you will get. There is an adaptive per-channel arithmetic coder so that the match length and literal statistics can adapt to the channel a bit (this was a big win vs. using any kind of static models).
</p>
<p>OodleNetwork1 has only 104k of per-channel state. (compare to zlib which uses 400k per encoder)
</p>
<p>On the server, a large static dictionary is no problem. They're running 16GB servers with 10,000 connections, they really don't care if the static dictionary is 64MB. However, that same static dictionary also has to be on the client, so the limit on how big a static dictionary you can use really comes from the client side. I suspect that something in the 8MB - 16MB range is reasonable. (and of course you can compress the static dictionary; it's only something like 2-4 MB that you have to distribute and load). (for loading the compressed static dictionary off disk, see <a href="javascript:show('OodleLZ_About.html')" class="paragraph">About OodleLZ</a>)
</p>
<p>(BTW you don't necessarily need an adaptive compression state for every open channel. If some channels tend to go idle, you could drop their state. When the channel starts up again, grab a fresh state (and send a reset message to the client so it wipes its adaptive state). You could do something like have a few thousand compression states which you cycle in an LRU for an unbounded number of open channels. Of course the problem with that is if you actually get a higher number of simultaneous active connections you would be recycling states all the time, which is just the standard cache over-commit problem that causes nasty thrashing, so YMMV etc.)
</p>
<p>Here are some real world results :
</p>
<p><PRE>
OodleNetwork1 TCP [dictionary MB|hash bits]
OodleNetwork1 [4|18] : 595654217 -> 131935361 = 4.515:1
1605378 packets; 371.0 -> 82.2 average
OodleNetwork1 [8|19] : 595654217 -> 123101634 = 4.839:1
1605378 packets; 371.0 -> 76.7 average
OodleNetwork1 [16|20] : 595654217 -> 110427772 = 5.394:1
1605378 packets; 371.0 -> 68.8 average
OodleNetwork1 [32|21] : 595654217 -> 93276137 = 6.386:1
1605378 packets; 371.0 -> 58.1 average
</PRE>
</p>
<p><hr>
</p>
<p>See <a href="javascript:show('OodleAPI_OodleNetwork1.html')" class="paragraph">OodleAPI_OodleNetwork1</a> , also <a href="javascript:show('OodleNetwork_About_CapturingTrainingData.html')" class="paragraph">Capturing Training data for OodleNetwork</a> and <a href="javascript:show('OodleNetwork_About_FormingPacketsForMaximumCompression.html')" class="paragraph">Forming Packets for Maximum Compression</a><br>&nbsp;<br> <table class=bar> <tr>
<td width=33% align=left><span class='arrowleft'></span><a href="javascript:show('OodleAPI_OodleNetwork1.html')" class="paragraph">OodleAPI_OodleNetwork1</a></td><td width=33% align=center><span class='arrowup'></span><a href="javascript:show('OodleAPI_OodleNetwork1.html')" class="paragraph">OodleAPI_OodleNetwork1</a></td><td width=33% align=right><span class='arrowright'></span><a href="javascript:show('OODLENETWORK1_MAX_DICTIONARY_SIZE.html')" class="paragraph">OODLENETWORK1_MAX_DICTIONARY_SIZE</a></td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="OodleX_Init_GetDefaults_DebugSystems.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>OodleX_Init_GetDefaults_DebugSystems</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "OodleX_Init_GetDefaults_DebugSystems.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="OodleX_Init_GetDefaults_DebugSystems.html_backmenu">
<table class=dropmenu>
<tr><td><span class='arrowright'></span>&nbsp;<a href="javascript:show('OodleX_Init_GetDefaults_Threads.html')" class="paragraph">OodleX_Init_GetDefaults_Threads</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<div class=prototype><div class=prototype_header>// Enumerant:</div><pre><span class=prototype_type>enum</span> <a href="javascript:show('OodleX_Init_GetDefaults_DebugSystems.html')">OodleX_Init_GetDefaults_DebugSystems</a>
{
&nbsp;&nbsp;&nbsp;&nbsp;OodleX_Init_GetDefaults_DebugSystems_No = 0,
&nbsp;&nbsp;&nbsp;&nbsp;OodleX_Init_GetDefaults_DebugSystems_Yes = 1,
&nbsp;&nbsp;&nbsp;&nbsp;OodleX_Init_GetDefaults_DebugSystems_Force32 = 0x40000000
};
</pre></div><div class=discussion_heading>Discussion</div> Should GetDefaults enable debugging systems?
<br>&nbsp;<br> <table class=bar> <tr>
<td width=33% align=left><span class='arrowleft'></span><a href="javascript:show('OODLE_WORKERS_COUNT_ALL_HYPER_CORES.html')" class="paragraph">OODLE_WORKERS_COUNT_ALL_HYPER_CORES</a></td><td width=33% align=center><span class='arrowup'></span><a href="javascript:show('OodleXAPI_Init.html')" class="paragraph">OodleX Startup and Shutdown</a></td><td width=33% align=right><span class='arrowright'></span><a href="javascript:show('OodleX_Init_GetDefaults_Threads.html')" class="paragraph">OodleX_Init_GetDefaults_Threads</a></td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="OodleLZ_Compressor.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>OodleLZ_Compressor</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "OodleLZ_Compressor.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="OodleLZ_Compressor.html_backmenu">
<table class=dropmenu>
<tr><td><span class='arrowleft'></span>&nbsp;<a href="javascript:show('OodleLZ_Verbosity.html')" class="paragraph">OodleLZ_Verbosity</a></td></tr><tr><td><span class='arrowright'></span>&nbsp;<a href="javascript:show('OodleLZ_PackedRawOverlap.html')" class="paragraph">OodleLZ_PackedRawOverlap</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<div class=prototype><div class=prototype_header>// Enumerant:</div><pre><span class=prototype_type>enum</span> <a href="javascript:show('OodleLZ_Compressor.html')">OodleLZ_Compressor</a>
{
&nbsp;&nbsp;&nbsp;&nbsp;OodleLZ_Compressor_Invalid = -1,
&nbsp;&nbsp;&nbsp;&nbsp;OodleLZ_Compressor_None = 3,
&nbsp;&nbsp;&nbsp;&nbsp;OodleLZ_Compressor_Kraken = 8,
&nbsp;&nbsp;&nbsp;&nbsp;OodleLZ_Compressor_Leviathan = 13,
&nbsp;&nbsp;&nbsp;&nbsp;OodleLZ_Compressor_Mermaid = 9,
&nbsp;&nbsp;&nbsp;&nbsp;OodleLZ_Compressor_Selkie = 11,
&nbsp;&nbsp;&nbsp;&nbsp;OodleLZ_Compressor_Hydra = 12,
&nbsp;&nbsp;&nbsp;&nbsp;OodleLZ_Compressor_BitKnit = 10,
&nbsp;&nbsp;&nbsp;&nbsp;OodleLZ_Compressor_LZB16 = 4,
&nbsp;&nbsp;&nbsp;&nbsp;OodleLZ_Compressor_LZNA = 7,
&nbsp;&nbsp;&nbsp;&nbsp;OodleLZ_Compressor_LZH = 0,
&nbsp;&nbsp;&nbsp;&nbsp;OodleLZ_Compressor_LZHLW = 1,
&nbsp;&nbsp;&nbsp;&nbsp;OodleLZ_Compressor_LZNIB = 2,
&nbsp;&nbsp;&nbsp;&nbsp;OodleLZ_Compressor_LZBLW = 5,
&nbsp;&nbsp;&nbsp;&nbsp;OodleLZ_Compressor_LZA = 6,
&nbsp;&nbsp;&nbsp;&nbsp;OodleLZ_Compressor_Count = 14,
&nbsp;&nbsp;&nbsp;&nbsp;OodleLZ_Compressor_Force32 = 0x40000000
};
</pre></div><div class=discussion_heading>Discussion</div> Selection of compression algorithm.<div class=discussion_heading>Enumerants</div> <table> <tr> <td style='vertical-align: top;' class=paramname><a id="OodleLZ_Compressor.html_OodleLZ_Compressor_Invalid" class=nohover>OodleLZ_Compressor_Invalid</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc></td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleLZ_Compressor.html_OodleLZ_Compressor_None" class=nohover>OodleLZ_Compressor_None</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> None = memcpy, pass through uncompressed bytes</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleLZ_Compressor.html_OodleLZ_Compressor_Kraken" class=nohover>OodleLZ_Compressor_Kraken</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> Fast decompression and high compression ratios, amazing!</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleLZ_Compressor.html_OodleLZ_Compressor_Leviathan" class=nohover>OodleLZ_Compressor_Leviathan</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> Leviathan = Kraken's big brother with higher compression, slightly slower decompression.</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleLZ_Compressor.html_OodleLZ_Compressor_Mermaid" class=nohover>OodleLZ_Compressor_Mermaid</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> Mermaid is between Kraken &amp; Selkie - crazy fast, still decent compression.</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleLZ_Compressor.html_OodleLZ_Compressor_Selkie" class=nohover>OodleLZ_Compressor_Selkie</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> Selkie is a super-fast relative of Mermaid. For maximum decode speed.</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleLZ_Compressor.html_OodleLZ_Compressor_Hydra" class=nohover>OodleLZ_Compressor_Hydra</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> Hydra, the many-headed beast = Leviathan, Kraken, Mermaid, or Selkie (see <a href="javascript:show('OodleLZ_About_Hydra.html')" class="paragraph">About OodleLZ Hydra</a>)</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleLZ_Compressor.html_OodleLZ_Compressor_BitKnit" class=nohover>OodleLZ_Compressor_BitKnit</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> no longer supported as of Oodle 2.9.0</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleLZ_Compressor.html_OodleLZ_Compressor_LZB16" class=nohover>OodleLZ_Compressor_LZB16</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> DEPRECATED but still supported</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleLZ_Compressor.html_OodleLZ_Compressor_LZNA" class=nohover>OodleLZ_Compressor_LZNA</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> no longer supported as of Oodle 2.9.0</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleLZ_Compressor.html_OodleLZ_Compressor_LZH" class=nohover>OodleLZ_Compressor_LZH</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> no longer supported as of Oodle 2.9.0</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleLZ_Compressor.html_OodleLZ_Compressor_LZHLW" class=nohover>OodleLZ_Compressor_LZHLW</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> no longer supported as of Oodle 2.9.0</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleLZ_Compressor.html_OodleLZ_Compressor_LZNIB" class=nohover>OodleLZ_Compressor_LZNIB</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> no longer supported as of Oodle 2.9.0</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleLZ_Compressor.html_OodleLZ_Compressor_LZBLW" class=nohover>OodleLZ_Compressor_LZBLW</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> no longer supported as of Oodle 2.9.0</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleLZ_Compressor.html_OodleLZ_Compressor_LZA" class=nohover>OodleLZ_Compressor_LZA</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> no longer supported as of Oodle 2.9.0</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleLZ_Compressor.html_OodleLZ_Compressor_Count" class=nohover>OodleLZ_Compressor_Count</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc></td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleLZ_Compressor.html_OodleLZ_Compressor_Force32" class=nohover>OodleLZ_Compressor_Force32</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc></td></tr></table><div class=discussion_heading>Discussion</div> Each compressor provides a different balance of speed vs compression ratio.
</p>
<p> New Oodle users should only use the new sea monster family of compressors.
</p>
<p> The OODLE_ALLOW_DEPRECATED_COMPRESSORS set of compressors is no longer supported
as of Oodle 2.9.0 ; see <a href="javascript:show('Oodle_FAQ_deprecated_compressors.html')" class="paragraph">FAQ: What are the Oodle deprecated compressors ?</a>
</p>
<p> The sea monsters are all fuzz safe and use whole-block quantum (not the 16k quantum)
(<a href="javascript:show('OodleLZ_Compressor_UsesWholeBlockQuantum.html')" class="paragraph">OodleLZ_Compressor_UsesWholeBlockQuantum</a>)
</p>
<p> If you need to encode the deprecated compressors, define <a href="javascript:show('OODLE_ALLOW_DEPRECATED_COMPRESSORS.html')" class="paragraph">OODLE_ALLOW_DEPRECATED_COMPRESSORS</a> before
including oodle2.h
</p>
<p> See <a href="javascript:show('Oodle_FAQ_WhichLZ.html')" class="paragraph">FAQ: Which OodleLZ should I use?</a> for a quick FAQ on which compressor to use
</p>
<p> See <a href="javascript:show('OodleLZ_About.html')" class="paragraph">About OodleLZ</a> for discussion of how to choose a compressor.
<br>&nbsp;<br> <table class=bar> <tr>
<td width=33% align=left><span class='arrowleft'></span><a href="javascript:show('OodleLZ_Verbosity.html')" class="paragraph">OodleLZ_Verbosity</a></td><td width=33% align=center><span class='arrowup'></span><a href="javascript:show('OodleAPI_LZ_Compressors.html')" class="paragraph">OodleAPI_LZ_Compressors</a></td><td width=33% align=right><span class='arrowright'></span><a href="javascript:show('OodleLZ_PackedRawOverlap.html')" class="paragraph">OodleLZ_PackedRawOverlap</a></td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="OodleLZ_CompressOptions.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>OodleLZ_CompressOptions</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "OodleLZ_CompressOptions.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="OodleLZ_CompressOptions.html_backmenu">
<table class=dropmenu>
<tr><td><span class='arrowright'></span>&nbsp;<a href="javascript:show('OodleLZ_DecodeSome_Out.html')" class="paragraph">OodleLZ_DecodeSome_Out</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<div class=prototype><div class=prototype_header>// Structure definition:</div><pre><span class=prototype_type>struct</span> <a href="javascript:show('OodleLZ_CompressOptions.html')">OodleLZ_CompressOptions</a>
{
&nbsp;&nbsp;&nbsp;&nbsp;OO_U32 unused_was_verbosity;
&nbsp;&nbsp;&nbsp;&nbsp;OO_S32 minMatchLen;
&nbsp;&nbsp;&nbsp;&nbsp;OO_BOOL seekChunkReset;
&nbsp;&nbsp;&nbsp;&nbsp;OO_S32 seekChunkLen;
&nbsp;&nbsp;&nbsp;&nbsp;<span class=prototype_type><a href="javascript:show('OodleLZ_Profile.html')" class="blue">OodleLZ_Profile</a></span> profile;
&nbsp;&nbsp;&nbsp;&nbsp;OO_S32 dictionarySize;
&nbsp;&nbsp;&nbsp;&nbsp;OO_S32 spaceSpeedTradeoffBytes;
&nbsp;&nbsp;&nbsp;&nbsp;OO_S32 unused_was_maxHuffmansPerChunk;
&nbsp;&nbsp;&nbsp;&nbsp;OO_BOOL sendQuantumCRCs;
&nbsp;&nbsp;&nbsp;&nbsp;OO_S32 maxLocalDictionarySize;
&nbsp;&nbsp;&nbsp;&nbsp;OO_BOOL makeLongRangeMatcher;
&nbsp;&nbsp;&nbsp;&nbsp;OO_S32 matchTableSizeLog2;
&nbsp;&nbsp;&nbsp;&nbsp;<span class=prototype_type><a href="javascript:show('OodleLZ_Jobify.html')" class="blue">OodleLZ_Jobify</a></span> jobify;
&nbsp;&nbsp;&nbsp;&nbsp;void * jobifyUserPtr;
&nbsp;&nbsp;&nbsp;&nbsp;OO_S32 farMatchMinLen;
&nbsp;&nbsp;&nbsp;&nbsp;OO_S32 farMatchOffsetLog2;
&nbsp;&nbsp;&nbsp;&nbsp;OO_U32 reserved[4];
};
</pre></div><div class=discussion_heading>Discussion</div> Options for the compressor<div class=discussion_heading>Members</div> <table> <tr> <td style='vertical-align: top;' class=paramname><a id="OodleLZ_CompressOptions.html_unused_was_verbosity" class=nohover>unused_was_verbosity</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> unused ; was verbosity (set to zero)</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleLZ_CompressOptions.html_minMatchLen" class=nohover>minMatchLen</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> minimum match length ; cannot be used to reduce a compressor's default MML, but can be higher. On some types of data, a large MML (6 or 8) is a space-speed win.</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleLZ_CompressOptions.html_seekChunkReset" class=nohover>seekChunkReset</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> whether chunks should be independent, for seeking and parallelism</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleLZ_CompressOptions.html_seekChunkLen" class=nohover>seekChunkLen</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> length of independent seek chunks (if seekChunkReset) ; must be a power of 2 and >= <a href="javascript:show('OODLELZ_BLOCK_LEN.html')" class="paragraph">OODLELZ_BLOCK_LEN</a> ; you can use <a href="javascript:show('OodleLZ_MakeSeekChunkLen.html')" class="paragraph">OodleLZ_MakeSeekChunkLen</a></td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleLZ_CompressOptions.html_profile" class=nohover>profile</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> decoder profile to target (set to zero)</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleLZ_CompressOptions.html_dictionarySize" class=nohover>dictionarySize</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> sets a maximum offset for matches, if lower than the maximum the format supports. &lt;= 0 means infinite (use whole buffer). Often power of 2 but doesn't have to be.</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleLZ_CompressOptions.html_spaceSpeedTradeoffBytes" class=nohover>spaceSpeedTradeoffBytes</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> this is a number of bytes; I must gain at least this many bytes of compressed size to accept a speed-decreasing decision</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleLZ_CompressOptions.html_unused_was_maxHuffmansPerChunk" class=nohover>unused_was_maxHuffmansPerChunk</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> unused ; was maxHuffmansPerChunk</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleLZ_CompressOptions.html_sendQuantumCRCs" class=nohover>sendQuantumCRCs</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> should the encoder send a CRC of each compressed quantum, for integrity checks; this is necessary if you want to use OodleLZ_CheckCRC_Yes on decode</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleLZ_CompressOptions.html_maxLocalDictionarySize" class=nohover>maxLocalDictionarySize</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> (Optimals) size of local dictionary before needing a long range matcher. This does not set a window size for the decoder; it's useful to limit memory use and time taken in the encoder. maxLocalDictionarySize must be a power of 2. Must be &lt;= OODLELZ_LOCALDICTIONARYSIZE_MAX</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleLZ_CompressOptions.html_makeLongRangeMatcher" class=nohover>makeLongRangeMatcher</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> (Optimals) should the encoder find matches beyond maxLocalDictionarySize using an LRM</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleLZ_CompressOptions.html_matchTableSizeLog2" class=nohover>matchTableSizeLog2</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc>(non-Optimals) when variable, sets the size of the match finder structure (often a hash table) ; use 0 for the compressor's default</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleLZ_CompressOptions.html_jobify" class=nohover>jobify</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> controls internal job usage by compressors</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleLZ_CompressOptions.html_jobifyUserPtr" class=nohover>jobifyUserPtr</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> user pointer passed through to RunJob and WaitJob callbacks</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleLZ_CompressOptions.html_farMatchMinLen" class=nohover>farMatchMinLen</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> far matches must be at least this len</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleLZ_CompressOptions.html_farMatchOffsetLog2" class=nohover>farMatchOffsetLog2</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> if not zero, the log2 of an offset that must meet farMatchMinLen</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleLZ_CompressOptions.html_reserved" class=nohover>reserved</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> reserved space for adding more options; zero these!</td></tr></table><div class=discussion_heading>Discussion</div> Typically filled by calling <a href="javascript:show('OodleLZ_CompressOptions_GetDefault.html')" class="paragraph">OodleLZ_CompressOptions_GetDefault</a> , then individual options may be modified, like :
</p>
<p> OodleLZ_CompressOptions my_options = <b>OodleLZ_CompressOptions_GetDefault()
</b></p>
<p> To ensure you have set up the options correctly, call <a href="javascript:show('OodleLZ_CompressOptions_Validate.html')" class="paragraph">OodleLZ_CompressOptions_Validate</a>.
</p>
<p> <i>unused_was_verbosity</i> : place holder, set to zero
</p>
<p> <i>minMatchLen</i> : rarely useful. Default value of 0 means let the compressor decide. On some types of data,
bumping this up to 4,6, or 8 can improve decode speed with little effect on compression ratio. Most of the
Oodle compressors use a default MML of 4 at levels below 7, and MML 3 at levels >= 7. If you want to keep MML 4
at the higher levels, set <i>minMatchLen</i> here to 4. <i>minMatchLen</i> cannot be used to reduce the base MML of the compressor, only to increase it.
</p>
<p> <i>seekChunkReset</i> must be true if you want the decode to be able to run "Wide", with pieces that can be
decoded independently (not keeping previous pieces in memory for match references).
</p>
<p> <i>seekChunkLen</i> : length of independent seek chunks (if seekChunkReset) ; must be a power of 2 and >= <a href="javascript:show('OODLELZ_BLOCK_LEN.html')" class="paragraph">OODLELZ_BLOCK_LEN</a> ; you can use <a href="javascript:show('OodleLZ_MakeSeekChunkLen.html')" class="paragraph">OodleLZ_MakeSeekChunkLen</a>
</p>
<p> <i>profile</i> : tells the encoder to target alternate bitstream profile. Default value of zero for normal use.
</p>
<p> <i>dictionarySize</i> : limits the encoder to partial buffer access for matches. Can be useful for decoding incrementally
without keeping the entire output buffer in memory.
</p>
<p> <i>spaceSpeedTradeoffBytes</i> is a way to trade off compression ratio for decode speed. If you make it smaller,
you get more compression ratio and slower decodes. It's the number of bytes that a decision must save to
be worth a slower decode. Default is 256 (OODLELZ_SPACESPEEDTRADEOFFBYTES_DEFAULT). So that means the encoder must be able to save >= 256 bytes to
accept something that will slow down decoding (like adding another Huffman table). The typical range is
64-1024.
</p>
<p> Lower <i>spaceSpeedTradeoffBytes</i> = more compression, slower decode
Higher <i>spaceSpeedTradeoffBytes</i> = less compression, faster decode
</p>
<p> <i>spaceSpeedTradeoffBytes</i> is the primary parameter for controlling Hydra. The default value of 256 will make
Hydra decodes that are just a little bit faster than Kraken. You get Kraken speeds around 200, and Mermaid
speeds around 1200.
</p>
<p> At the extreme, a <i>spaceSpeedTradeoffBytes</i> of zero would mean all you care about is compression ratio, not decode
speed, you want the encoder to make the smallest possible output. (you cannot actually set zero, as zero values
always mean "use default" in this struct; you never really want zero anyway)
Generally <i>spaceSpeedTradeoffBytes</i> below 16 provides diminishing gains in size with pointless decode speed loss.
</p>
<p> <i>spaceSpeedTradeoffBytes</i> is on sort of powers of 2 scale, so you might want to experiment with 32,64,128,256,512
</p>
<p> <i>spaceSpeedTradeoffBytes</i> outside the range [16 - 2048] is not recommended.
</p>
<p> <i>unused_was_maxHuffmansPerChunk</i> : place holder, set to zero
</p>
<p> <i>sendQuantumCRCs</i> : send hashes of the compressed data to verify in the decoder; not recommended, if you need data
verification, use your own system outside of Oodle. DEPRECATED, not recommended. For backwards compatibility only.
</p>
<p> <i>maxLocalDictionarySize</i> : only applies to optimal parsers at level >= Optimal2. This limits the encoder memory use.
Making it larger = more compression, higher memory use. Matches within maxLocalDictionarySize are found exactly,
outside the maxLocalDictionarySize window an approximate long range matcher is used.
</p>
<p> <i>makeLongRangeMatcher</i> : whether an LRM should be used to find matches outside the <i>maxLocalDictionarySize</i> window
(Optimal levels only)
</p>
<p> <i>matchTableSizeLog2</i> : for non-optimal levels (level &lt;= Normal), controls the hash table size. Making this very
small can sometimes boost encoder speed. For the very fastest encoding, use the SuperFast level and change
<i>matchTableSizeLog2</i> to 12 or 13.
</p>
<p> <i>matchTableSizeLog2</i> should usually be left zero to use the encoder's default
</p>
<p> <i>matchTableSizeLog2</i> allows you to limit memory use of the non-Optimal encoder levels. Memory use is roughly
( 1 MB + 4 &lt;&lt; matchTableSizeLog2 )
</p>
<p> <i>jobify</i> tells compressors how to use internal jobs for compression tasks. Jobs can be run in parallel using the
job system plugins set with <a href="javascript:show('OodleCore_Plugins_SetJobSystem.html')" class="paragraph">OodleCore_Plugins_SetJobSystem</a>. Not all compressors or compression level support
jobs, but the slower ones generally do. The default value of jobify is to use a thread system if one is installed.
</p>
<p> <i>farMatchMinLen</i> and <i>farMatchOffsetLog2</i> can be used to tune the encoded stream for a known cache size on the
decoding hardware. If set, then offsets with log2 greater or each to <i>farMatchOffsetLog2</i> must have a minimum
length of <i>farMatchMinLen</i>. For example to target a machine with a 2 MB cache, set <i>farMatchOffsetLog2</i> to 21,
and <i>farMatchMinLen</i> to something large, like 16 or 20.
</p>
<p> Without <i>farMatchMinLen</i> and <i>farMatchOffsetLog2</i> set, the Oodle encoders tune for a blend of cache sizes that works
well on most machines. <i>dictionarySize</i> can also be used to tune for cache size, but cuts off all matches
beyond a certain distance. That may be more appropriate when you don't want to go out of cache at all.
<i>farMatchMinLen</i> can only be used to make the standard blend target more restrictive; it can reduce the target cache size
but can't make it larger (or it can raise min match len outside cache but can't make it shorter).
</p>
<p> For help on setting up OodleLZ_CompressOptions contact support at oodle@radgametools.com
</p>
<p> NOTE : fields you do not set should always be zero initialized. In particular the <i>reserved</i> fields should be zeroed.
Zero always means "use default" and is a future-portable initialization value.
</p>
<p> If you set fields to zero to mean "use default" you can call <a href="javascript:show('OodleLZ_CompressOptions_Validate.html')" class="paragraph">OodleLZ_CompressOptions_Validate</a> to change them
to default values. This is done automatically internally if you don't do it explicitly.
</p>
<p><br>&nbsp;<br> <table class=bar> <tr>
<td width=33% align=left><span class='arrowleft'></span><a href="javascript:show('OodleLZ_CompressScratchMemBoundType.html')" class="paragraph">OodleLZ_CompressScratchMemBoundType</a></td><td width=33% align=center><span class='arrowup'></span><a href="javascript:show('OodleAPI_LZ_Compressors.html')" class="paragraph">OodleAPI_LZ_Compressors</a></td><td width=33% align=right><span class='arrowright'></span><a href="javascript:show('OodleLZ_DecodeSome_Out.html')" class="paragraph">OodleLZ_DecodeSome_Out</a></td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="OodleXIOQ_Delete_AsyncAndWait.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>OodleXIOQ_Delete_AsyncAndWait</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "OodleXIOQ_Delete_AsyncAndWait.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="OodleXIOQ_Delete_AsyncAndWait.html_backmenu">
<table class=dropmenu>
<tr><td><span class='arrowleft'></span>&nbsp;<a href="javascript:show('OodleXIOQ_MakeAllDirs_AsyncAndWait.html')" class="paragraph">OodleXIOQ_MakeAllDirs_AsyncAndWait</a></td></tr><tr><td><span class='arrowright'></span>&nbsp;<a href="javascript:show('OodleXIOQ_Rename_AsyncAndWait.html')" class="paragraph">OodleXIOQ_Rename_AsyncAndWait</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<div class=prototype><div class=prototype_header>// Function prototype:</div><pre>OO_BOOL <span class=prototype_type><a href="javascript:show('OodleXIOQ_Delete_AsyncAndWait.html')" class="blue">OodleXIOQ_Delete_AsyncAndWait</a></span>( const char * path );</pre></div><div class=discussion_heading>Discussion</div>See <a href="javascript:show('OodleXIOQ_Delete_Async.html')" class="paragraph">OodleXIOQ_Delete_Async</a>
<br>&nbsp;<br> <table class=bar> <tr>
<td width=33% align=left><span class='arrowleft'></span><a href="javascript:show('OodleXIOQ_MakeAllDirs_AsyncAndWait.html')" class="paragraph">OodleXIOQ_MakeAllDirs_AsyncAndWait</a></td><td width=33% align=center><span class='arrowup'></span><a href="javascript:show('OodleXAPI_IOQ.html')" class="paragraph">OodleX low level async io</a></td><td width=33% align=right><span class='arrowright'></span><a href="javascript:show('OodleXIOQ_Rename_AsyncAndWait.html')" class="paragraph">OodleXIOQ_Rename_AsyncAndWait</a></td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="OodleXIOQ_GetStatus.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>OodleXIOQ_GetStatus</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "OodleXIOQ_GetStatus.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="OodleXIOQ_GetStatus.html_backmenu">
<table class=dropmenu>
<tr><td><span class='arrowleft'></span>&nbsp;<a href="javascript:show('OodleXIOQ_KickAnyDelayed.html')" class="paragraph">OodleXIOQ_KickAnyDelayed</a></td></tr><tr><td><span class='arrowright'></span>&nbsp;<a href="javascript:show('OodleXIOQ_GetErrorDetails.html')" class="paragraph">OodleXIOQ_GetErrorDetails</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<div class=prototype><div class=prototype_header>// Function prototype:</div><pre><span class=prototype_type><a href="javascript:show('OodleXStatus.html')" class="blue">OodleXStatus</a></span> <span class=prototype_type><a href="javascript:show('OodleXIOQ_GetStatus.html')" class="blue">OodleXIOQ_GetStatus</a></span>( <span class=prototype_type><a href="javascript:show('OodleXHandle.html')" class="blue">OodleXHandle</a></span> req,
<span class=prototype_type><a href="javascript:show('OodleXHandleDeleteIfDone.html')" class="blue">OodleXHandleDeleteIfDone</a></span> andDeleteIfDone,
OO_U32 * pErrorCode OODEFAULT( NULL ),
OO_S32 * pReturnValue OODEFAULT( NULL ) );</pre></div><div class=discussion_heading>Discussion</div>Get the Status of a request, and optionally delete if done<div class=discussion_heading>Parameters</div> <table> <tr> <td style='vertical-align: top;' class=paramname><a id="OodleXIOQ_GetStatus.html_req" class=nohover>req</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> the IOQ operation handle to work on
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXIOQ_GetStatus.html_andDeleteIfDone" class=nohover>andDeleteIfDone</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> if true and the returned status is >= Done the handle will be deleted
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXIOQ_GetStatus.html_pErrorCode" class=nohover>pErrorCode</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> (optional) the OS error code, if any
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXIOQ_GetStatus.html_pReturnValue" class=nohover>pReturnValue</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> (optional) the operation return value
</td></tr></table><div class=discussion_heading>Return Value</div> <table> <tr> <td style='vertical-align: top;' class=paramname><a id="OodleXIOQ_GetStatus.html_return" class=nohover>return</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> the status of the request
</td></tr></table><div class=discussion_heading>Discussion</div></p>
<p> This function is similar to <a href="javascript:show('OodleX_GetStatus.html')" class="paragraph">OodleX_GetStatus</a>, but for IOQ operation handles only, and it provides
more information (optionally).
</p>
<p> The error code returned can be processed with <a href="javascript:show('OodleXIOQ_GetErrorEnum.html')" class="paragraph">OodleXIOQ_GetErrorEnum</a> or <a href="javascript:show('OodleXIOQ_GetErrorDetails.html')" class="paragraph">OodleXIOQ_GetErrorDetails</a>.
</p>
<p> The return value depends on the operation type. For example if the operation is a Read, it returns the
number of bytes successfully read.
<br>&nbsp;<br> <table class=bar> <tr>
<td width=33% align=left><span class='arrowleft'></span><a href="javascript:show('OodleXIOQ_KickAnyDelayed.html')" class="paragraph">OodleXIOQ_KickAnyDelayed</a></td><td width=33% align=center><span class='arrowup'></span><a href="javascript:show('OodleXAPI_IOQ.html')" class="paragraph">OodleX low level async io</a></td><td width=33% align=right><span class='arrowright'></span><a href="javascript:show('OodleXIOQ_GetErrorDetails.html')" class="paragraph">OodleXIOQ_GetErrorDetails</a></td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="OODLEX_ASYNC_HANDLE_INVALID.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>OODLEX_ASYNC_HANDLE_INVALID</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "OODLEX_ASYNC_HANDLE_INVALID.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="OODLEX_ASYNC_HANDLE_INVALID.html_backmenu">
<table class=dropmenu>
<tr><td><span class='arrowright'></span>&nbsp;<a href="javascript:show('OODLEX_ASYNC_HANDLE_PENDING.html')" class="paragraph">OODLEX_ASYNC_HANDLE_PENDING</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<div class=prototype><div class=prototype_header>// Preprocessor definition:</div><pre><span class=prototype_type>#define</span> <a href="javascript:show('OODLEX_ASYNC_HANDLE_INVALID.html')">OODLEX_ASYNC_HANDLE_INVALID</a> ((<span class=prototype_type><a href="javascript:show('OodleXHandle.html')" class="blue">OodleXHandle</a></span>)0)</pre></div><div class=discussion_heading>Discussion</div> OodleXHandle for an invalid handle.
Calls to <a href="javascript:show('OodleX_GetStatus.html')" class="paragraph">OodleX_GetStatus</a> on this handle value will return &amp;OodleXStatus_Invalid.
<br>&nbsp;<br> <table class=bar> <tr>
<td width=33% align=left><span class='arrowleft'></span><a href="javascript:show('OodleXHandle_About.html')" class="paragraph">About OodleXHandle</a></td><td width=33% align=center><span class='arrowup'></span><a href="javascript:show('OodleXAPI_Handle.html')" class="paragraph">OodleX async handle operations</a></td><td width=33% align=right><span class='arrowright'></span><a href="javascript:show('OODLEX_ASYNC_HANDLE_PENDING.html')" class="paragraph">OODLEX_ASYNC_HANDLE_PENDING</a></td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="Oodle_About_IOS.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>About Oodle on IOS</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "Oodle_About_IOS.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="Oodle_About_IOS.html_backmenu">
<table class=dropmenu>
<tr><td><span class='arrowleft'></span>&nbsp;<a href="javascript:show('Oodle_About_Linux.html')" class="paragraph">About Oodle on Linux</a></td></tr><tr><td><span class='arrowup'></span>&nbsp;<a href="javascript:show('Oodle_About_Platforms.html')" class="paragraph">About Oodle on Platforms</a></td></tr><tr><td><span class='arrowright'></span>&nbsp;<a href="javascript:show('Oodle_About_Android.html')" class="paragraph">About Oodle on Android</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<P>
Oodle on IOS is currently provided as only the Oodle Core lib (no OodleX).
</p>
<p>This includes the synchronous LZ compressors, as well as Oodle Network compression.
</p>
<p>See <a href="javascript:show('start_CoreVsExt.html')" class="paragraph">Oodle2 Core vs Oodle2 Ext</a>
</p>
<p><hr>
</p>
<p>Oodle on mobile does not include the Optimal level encoders. When <a href="javascript:show('OodleLZ_CompressionLevel.html','OodleLZ_CompressionLevel.html_OodleLZ_CompressionLevel_Optimal1')" class="paragraph">OodleLZ_CompressionLevel_Optimal1</a> or higher
is request, OodleLZ_CompressionLevel_Normal is used instead.<br>&nbsp;<br> <table class=bar> <tr>
<td width=33% align=left><span class='arrowleft'></span><a href="javascript:show('Oodle_About_Linux.html')" class="paragraph">About Oodle on Linux</a></td><td width=33% align=center><span class='arrowup'></span><a href="javascript:show('Oodle_About_Platforms.html')" class="paragraph">About Oodle on Platforms</a></td><td width=33% align=right><span class='arrowright'></span><a href="javascript:show('Oodle_About_Android.html')" class="paragraph">About Oodle on Android</a></td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="OodleXLog_GetCallback.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>OodleXLog_GetCallback</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "OodleXLog_GetCallback.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="OodleXLog_GetCallback.html_backmenu">
<table class=dropmenu>
<tr><td><span class='arrowleft'></span>&nbsp;<a href="javascript:show('OodleXLog_SetCallback.html')" class="paragraph">OodleXLog_SetCallback</a></td></tr><tr><td><span class='arrowright'></span>&nbsp;<a href="javascript:show('OodleXLog_GetVerboseLevel.html')" class="paragraph">OodleXLog_GetVerboseLevel</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<div class=prototype><div class=prototype_header>// Function prototype:</div><pre><span class=prototype_type><a href="javascript:show('OodleXLogCallbackRet.html')" class="blue">OodleXLogCallbackRet</a></span> * <span class=prototype_type><a href="javascript:show('OodleXLog_GetCallback.html')" class="blue">OodleXLog_GetCallback</a></span>( );</pre></div><div class=discussion_heading>Discussion</div>Get the <a href="javascript:show('OodleXLogCallbackRet.html')" class="paragraph">OodleXLogCallbackRet</a> currently set<div class=discussion_heading>Return Value</div> <table> <tr> <td style='vertical-align: top;' class=paramname><a id="OodleXLog_GetCallback.html_return" class=nohover>return</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> the global callback currently set
</td></tr></table><div class=discussion_heading>Discussion</div></p>
<p> See <a href="javascript:show('OodleXLog_SetCallback.html')" class="paragraph">OodleXLog_SetCallback</a>
<br>&nbsp;<br> <table class=bar> <tr>
<td width=33% align=left><span class='arrowleft'></span><a href="javascript:show('OodleXLog_SetCallback.html')" class="paragraph">OodleXLog_SetCallback</a></td><td width=33% align=center><span class='arrowup'></span><a href="javascript:show('OodleXAPI_Debug.html')" class="paragraph">OodleX Debug aids</a></td><td width=33% align=right><span class='arrowright'></span><a href="javascript:show('OodleXLog_GetVerboseLevel.html')" class="paragraph">OodleXLog_GetVerboseLevel</a></td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="example_packet.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>example_packet : Example demonstrating network packet compression</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "example_packet.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="example_packet.html_backmenu">
<table class=dropmenu>
<tr><td><span class='arrowleft'></span>&nbsp;<a href="javascript:show('example_network_client.html')" class="paragraph">example_network_client : Example with simple network client support</a></td></tr><tr><td><span class='arrowup'></span>&nbsp;<a href="javascript:show('examples.html')" class="paragraph">Examples</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<div class=discussion_heading>Discussion</div>Oodle example_packet
</p>
<p>Example demonstrating network packet compression.
</p>
<p>(See also <a href="javascript:show('example_network_client.html')" class="paragraph">example_network_client : Example with simple network client support</a> for a simpler client-only example that's more
suitable as a basis for your runtime)
</p>
<p>The primary API is OodleNetwork1 (see <a href="javascript:show('OodleNetwork1_About.html')" class="paragraph">About OodleNetwork1</a> and <a href="javascript:show('OodleAPI_OodleNetwork1.html')" class="paragraph">OodleAPI_OodleNetwork1</a>).
</p>
<p>For an overview see <a href="javascript:show('OodleNetwork_About.html')" class="paragraph">About Oodle Network Compression</a>
</p>
<p>To use example_packet, you must capture a sample of your game's network packets.
</p>
<p>See <a href="javascript:show('OodleNetwork_About_CapturingTrainingData.html')" class="paragraph">Capturing Training data for OodleNetwork</a>
</p>
<p>This example can be used with Oodle Network lib only. If you wish to also apply LZ
compression to the save model runtime data, toggle USE_OODLE_LZ_DATA_COMPRESSION.<div class=prototype> <pre>
#include "../include/oodle2net.h"
<span style="color:#008000;">// optional, use Oodle LZ for the network model data</span>
<span style="color:#008000;">//#define USE_OODLE_LZ_DATA_COMPRESSION</span>
#if defined(USE_OODLE_LZ_DATA_COMPRESSION) &amp;&amp; ! defined(__OODLE2_H_INCLUDED__)
#include "../include/oodle2x.h"
#endif
#ifndef _CRT_SECURE_NO_WARNINGS
#define _CRT_SECURE_NO_WARNINGS
#endif
#if 1
<span style="color:#008000;">// if the STL build gives you trouble, then set this to 0</span>
<span style="color:#008000;">// this is just used for extra diagnostic printing</span>
#define EXAMPLE_PACKET_DO_SORT 1
#else
#define EXAMPLE_PACKET_DO_SORT 0
#endif
#define _ITERATOR_DEBUG_LEVEL 0
#define _HAS_ITERATOR_DEBUGGING 0
#if EXAMPLE_PACKET_DO_SORT
<span style="color:#008000;">// try to get std::sort</span>
<span style="color:#008000;">// this is used for information display only</span>
#include &lt;algorithm>
#endif
#include "ooex.h" <span style="color:#008000;">// example helpers</span>
#include &lt;stdio.h>
#include &lt;string.h>
#include &lt;assert.h>
#include &lt;stdlib.h>
#ifdef BUILDING_EXAMPLE_CALLER
#define main <span class=prototype_type><a href="javascript:show('example_packet.html')" class="blue">example_packet</a></span>
#endif
#ifdef _MSC_VER
#pragma warning(disable: 4505)
#endif
#ifndef __OODLE2_H_INCLUDED__
<span style="color:#008000;">// if USE_OODLE_LZ_DATA_COMPRESSION off,</span>
<span style="color:#008000;">// make a fake define of OodleLZ_Compressor_Invalid</span>
<span style="color:#008000;">// so I can share the code path but toggle compression off</span>
typedef enum <span class=prototype_type><a href="javascript:show('OodleLZ_Compressor.html')" class="blue">OodleLZ_Compressor</a></span>
{
OodleLZ_Compressor_Invalid = -1,
OodleLZ_Compressor_Force32 = 0x40000000
} <span class=prototype_type><a href="javascript:show('OodleLZ_Compressor.html')" class="blue">OodleLZ_Compressor</a></span>;
#endif
<span style="color:#008000;">//===========================================================</span>
</pre></div>This is where you #define options to select which compressors the example should test
</p>
<p>To test OodleNetwork1
</p>
<p>use EXAMPLE_PACKET_TEST_OODLENETWORK1_TCP for TCP networking
or EXAMPLE_PACKET_TEST_OODLENETWORK1_UDP for UDP networking
</p>
<p>If you set EXAMPLE_PACKET_TEST_OODLENETWORK1_DIC_SIZES, a variety of OodleNetwork1 dictionary sizes are tested.<div class=prototype> <pre>
<span style="color:#008000;">// test OodleNetwork for UDP or TCP :</span>
#define EXAMPLE_PACKET_TEST_OODLENETWORK1_TCP 0
#define EXAMPLE_PACKET_TEST_OODLENETWORK1_UDP 1
<span style="color:#008000;">// test multiple dictionary sizes and report results</span>
#define EXAMPLE_PACKET_TEST_OODLENETWORK1_DIC_SIZES 0
<span style="color:#008000;">// enable Load Existing to repeat a test without re-training</span>
#define EXAMPLE_PACKET_OODLENETWORK_LOAD_EXISTING 0
<span style="color:#008000;">// Trials is slow but gives more compression</span>
#define EXAMPLE_PACKET_OODLENETWORK_DO_TRIALS 0
<span style="color:#008000;">// if this is on, all packets are included</span>
<span style="color:#008000;">// if not, very small and very large packets are excluded</span>
<span style="color:#008000;">// (very small packets should be sent without compression,</span>
<span style="color:#008000;">// and very large packets should use Oodle LZ instead)</span>
#define EXAMPLE_PACKET_INCLUDE_ALL_PACKETS 0
<span style="color:#008000;">//===========================================================</span>
<span style="color:#008000;">// get a vector :</span>
#include &lt;stddef.h>
#ifdef __GNUC__
#include &lt;stdint.h>
#endif
#include &lt;new> <span style="color:#008000;">// for operator new placement new</span>
#define CB_ALLOC(size) malloc(size)
#define CB_FREE(ptr,size) free(ptr)
#define CB_ASSERT_MALLOC(exp) OOEX_ASSERT_ALWAYS(exp)
#include "cbvector.h"
<span style="color:#008000;">//===========================================================</span>
<span style="color:#008000;">// little helper object to load a file and free it for us</span>
#include "read_whole_file.h"
static OO_BOOL write_whole_file(const char * file_name,void * ptr,OO_SINTa size)
{
FILE * fp = fopen(file_name,"wb");
if ( ! fp ) return false;
size_t count = fwrite(ptr,1,size,fp);
fclose(fp);
if ( count != (size_t)size ) return false;
return true;
}
#ifndef BUILDING_TEST_PACKET
#define EXAMPLE_PACKET_DEFAULT_OUTPUT_PATH
namespace
{
struct OodleIOBuffer
{
OO_U8 * ptr;
OO_SINTa size;
explicit OodleIOBuffer(const char * name)
{
OodleXLog_Printf_v1("loading : %s ...\n",name);
ptr = (OO_U8 *) read_whole_file(name,&amp;size);
if ( ! ptr )
{
OodleXLog_Printf_v0("failed to read %s\n",name);
size = 0;
}
}
explicit OodleIOBuffer(OO_SINTa alloc_size)
{
ptr = (OO_U8 *) malloc(alloc_size);
size = alloc_size;
}
void Release()
{
if ( ptr )
{
free(ptr);
ptr = NULL;
size = 0;
}
}
~OodleIOBuffer()
{
Release();
}
};
};
#endif
<span style="color:#008000;">//===========================================================</span>
<span style="color:#008000;">// protos :</span>
static void TestOodleNetwork1TCPPacketCoder(
const OodleIOBuffer &amp; iob_packet_train ,
const OodleIOBuffer &amp; iob_packet_test ,
int on1_dic_mb , int on1_ht_bits);
static void TestOodleNetwork1UDPPacketCoder(
const OodleIOBuffer &amp; iob_packet_train ,
const OodleIOBuffer &amp; iob_packet_test ,
int on1_dic_mb , int on1_ht_bits,
int for_oodle_version_major);
<span style="color:#008000;">//===========================================================</span>
</pre></div>File names to find captured packets.
</p>
<p>You should change these to the files you have captured.
</p>
<p>You may also pass the file name and holdout fraction on the command line.
</p>
<p>The holdout fraction should be adjusted to ensure you have enough packets for testing and training.<div class=prototype> <pre>
static const char * c_example_packet_file = "r:\\packet.bin"; <span style="color:#008000;">// &lt;- change this to your file name</span>
static const int c_example_packet_test_holdout_fraction_denominator = 4; <span style="color:#008000;">// hold out 1/4</span>
<span style="color:#008000;">// useful on very large samples :</span>
<span style="color:#008000;">//static const int c_example_packet_test_holdout_fraction_denominator = 2; // hold out 1/2</span>
</pre></div>Some variables that control filtering of the packet stream, if you wish to reject some :<div class=prototype> <pre>
<span style="color:#008000;">// to select a subset :</span>
static const int c_packet_filter_skip_initial = 0;
static const int c_packet_filter_max_num = 1&lt;&lt;29;
<span style="color:#008000;">//static const int c_packet_filter_skip_initial = 2500000;</span>
<span style="color:#008000;">//static const int c_packet_filter_max_num = 100000;</span>
<span style="color:#008000;">// to select a range of sizes :</span>
#if EXAMPLE_PACKET_INCLUDE_ALL_PACKETS
static const int c_packet_filter_min_size = 0;
static const int c_packet_filter_max_size = 1&lt;&lt;29;
#else
static const int c_packet_filter_min_size = 32; <span style="color:#008000;">// exclude tiny packets</span>
static const int c_packet_filter_max_size = 8192; <span style="color:#008000;">// exclude large packets</span>
#endif
</pre></div>example_packet_file should contain a capture of packets from a real game session.
It should be at least 100 MB.
</p>
<p>See <a href="javascript:show('OodleNetwork_About_CapturingTrainingData.html')" class="paragraph">Capturing Training data for OodleNetwork</a>
</p>
<p>Some portion (as set by example_packet_test_holdout_fraction_denominator) will be held out for testing
the compression level. The remainder will be used for training. In real game usage, you don't need to
hold out any for testing, this is just for evaluating the compression level. To be fair, the packets
used in training are not used in testing.
</p>
<p>The file format is :
</p>
<p>packet.bin :
OO_U32 [LE] : numbers of channels (num_channels)
repeatedly :
{
OO_U32 [LE] : channel index in [0,num_channels-1]
OO_U32 [LE] : number of bytes of data in this packet (num_bytes)
OO_U8 * num_bytes : payload of this packet
}
</p>
<p></p>
<p>Channels are for TCP networking. For UDP, set num_channels = 1 and all channel indices to 0.<div class=prototype> <pre>
<span style="color:#008000;">//===========================================================</span>
static OO_U32 irandmod(OO_U32 size);
static void scan_packet_iobs(
const OodleIOBuffer &amp; iob_packet,
OodleIOBuffer * p_iob_packet_test,
OodleIOBuffer * p_iob_packet_train,
int example_packet_test_holdout_fraction_denominator)
{
const OO_U8 * packet_bin_buf = iob_packet.ptr;
const OO_SINTa packet_bin_size = iob_packet.size;
<span style="color:#008000;">// get the number of channels ; first dword in packet bin : </span>
const OO_U8 * packet_bin_ptr = packet_bin_buf;
const OO_U8 * packet_bin_end = packet_bin_ptr + packet_bin_size;
OodleIOBuffer &amp; iob_packet_test = * p_iob_packet_test;
OO_U8 * packet_test_ptr = iob_packet_test.ptr;
OO_U8 * packet_train_ptr = p_iob_packet_train ? p_iob_packet_train->ptr : NULL;
OO_S32 num_channels = OOEX_GET32_LE(packet_bin_ptr); packet_bin_ptr += sizeof(OO_S32);
if ( num_channels == 0 ) num_channels = 1;
OOEX_ASSERT( num_channels > 0 );
OOEX_PUT32_LE(packet_test_ptr,num_channels); packet_test_ptr += sizeof(OO_U32);
if ( packet_train_ptr )
{
OOEX_PUT32_LE(packet_train_ptr,num_channels); packet_train_ptr += sizeof(OO_U32);
}
OO_SINTa tot_packet_bytes = 0;
OO_SINTa tot_num_packets = 0;
OO_SINTa train_packet_bytes = 0;
OO_SINTa train_num_packets = 0;
OO_SINTa test_packet_bytes = 0;
OO_SINTa test_num_packets = 0;
OO_SINTa num_packets_excluded = 0;
OO_SINTa packet_bytes_excluded = 0;
OO_SINTa num_packets_initial = 0;
OO_SINTa smallest_packet_size = 9999999;
OO_SINTa largest_packet_size = 0;
const OO_U8 * largest_packet_ptr = NULL;
while( packet_bin_ptr &lt; packet_bin_end )
{
<span style="color:#008000;">// grab the current packet header :</span>
OO_S32 channel = OOEX_GET32_LE(packet_bin_ptr); packet_bin_ptr += sizeof(OO_S32);
OO_S32 bytes = OOEX_GET32_LE(packet_bin_ptr); packet_bin_ptr += sizeof(OO_S32);
OOEX_ASSERT( channel >= 0 &amp;&amp; channel &lt; num_channels );
OOEX_ASSERT( bytes > 0 &amp;&amp; bytes &lt; (256*1024) );
if ( num_packets_initial &lt; c_packet_filter_skip_initial )
{
num_packets_initial++;
if ( num_packets_initial == c_packet_filter_skip_initial )
{
OodleXLog_Printf_v1("skipped initial %d packets\n",c_packet_filter_skip_initial);
}
<span style="color:#008000;">// skip it</span>
packet_bin_ptr += bytes;
num_packets_excluded ++;
packet_bytes_excluded += bytes;
continue;
}
<span style="color:#008000;">// get largest and smallest packet size *before* size filters :</span>
smallest_packet_size = OOEX_MIN(smallest_packet_size,bytes);
if ( bytes > largest_packet_size )
{
largest_packet_size = bytes;
largest_packet_ptr = packet_bin_ptr;
}
if ( bytes &lt; c_packet_filter_min_size ||
bytes > c_packet_filter_max_size )
{
<span style="color:#008000;">// skip it</span>
packet_bin_ptr += bytes;
num_packets_excluded ++;
packet_bytes_excluded += bytes;
continue;
}
if ( packet_bin_ptr + bytes > packet_bin_end )
{
<span style="color:#008000;">// partial end packet</span>
break;
}
tot_num_packets++;
tot_packet_bytes += bytes;
if ( packet_train_ptr == NULL ||
irandmod(example_packet_test_holdout_fraction_denominator) == 0 )
{
<span style="color:#008000;">// test</span>
OOEX_PUT32_LE(packet_test_ptr,channel); packet_test_ptr += sizeof(OO_S32);
OOEX_PUT32_LE(packet_test_ptr,bytes); packet_test_ptr += sizeof(OO_S32);
memcpy(packet_test_ptr,packet_bin_ptr,bytes);
packet_bin_ptr += bytes;
packet_test_ptr += bytes;
test_num_packets ++;
test_packet_bytes += bytes;
}
else
{
<span style="color:#008000;">//train</span>
OOEX_PUT32_LE(packet_train_ptr,channel); packet_train_ptr += sizeof(OO_S32);
OOEX_PUT32_LE(packet_train_ptr,bytes); packet_train_ptr += sizeof(OO_S32);
memcpy(packet_train_ptr,packet_bin_ptr,bytes);
packet_bin_ptr += bytes;
packet_train_ptr += bytes;
train_num_packets ++;
train_packet_bytes += bytes;
}
if ( tot_num_packets >= c_packet_filter_max_num )
break;
}
iob_packet_test.size = packet_test_ptr - iob_packet_test.ptr;
if ( p_iob_packet_train )
p_iob_packet_train->size = packet_train_ptr - p_iob_packet_train->ptr;
OodleXLog_Printf_v1("Read %d packets, %lld bytes (%.2f average)\n",(int)tot_num_packets,(long long)tot_packet_bytes,(double)tot_packet_bytes/tot_num_packets);
OodleXLog_Printf_v1("Held out %d packets (%lld bytes) for testing, %d (%lld) for training\n",
(int)test_num_packets,(long long)test_packet_bytes,
(int)train_num_packets,(long long)train_packet_bytes);
if ( num_packets_excluded > 0 )
{
OodleXLog_Printf_v1("%d packets excluded by filters (%d bytes)\n",(int)num_packets_excluded,
(int)packet_bytes_excluded);
}
OodleXLog_Printf_v1("smallest_packet_size : %d (%d min filtered)\n",(int)smallest_packet_size,c_packet_filter_min_size);
OodleXLog_Printf_v1("largest_packet_size : %d (%d max filtered)\n",(int)largest_packet_size,c_packet_filter_max_size);
if ( largest_packet_size > c_packet_filter_max_size )
{
OodleXLog_Printf_v1("WARNING: large packets were found and excluded by filter.\n");
OodleXLog_Printf_v1(" large packets SHOULD be compressed. Consider using OodleLZ.\n");
}
#if 0
<span style="color:#008000;">// log the largest packet to see what it is</span>
if ( largest_packet_size > 0 )
{
<span class=prototype_type><a href="javascript:show('OodleXIOQ_WriteWholeFile_AsyncAndWait.html')" class="blue">OodleXIOQ_WriteWholeFile_AsyncAndWait</a></span>("r:\\largest_packet.bin",largest_packet_ptr,largest_packet_size,OodleXFileOpenFlags_Buffered);
}
#else
OOEX_UNUSED_VARIABLE(largest_packet_ptr);
#endif
}
static void test_packet_iobs(const OodleIOBuffer &amp; iob_packet_test,
const OodleIOBuffer &amp; iob_packet_train,
int for_oodle_version_major);
static int example_packet_onefile(const char * example_packet_file,int example_packet_test_holdout_fraction_denominator,int for_oodle_version_major)
{
OodleXLog_Printf_v1("Loading : \"%s\" , holding out 1/%d\n",example_packet_file,example_packet_test_holdout_fraction_denominator);
if ( example_packet_test_holdout_fraction_denominator &lt; 2 )
{
OodleXLog_Printf_v0("Error : invalid holdout fraction, must be >=2\n");
return 10;
}
<span style="color:#008000;">//=================================================</span>
{
<span style="color:#008000;">// load the files containing packet data :</span>
OodleIOBuffer iob_packet(example_packet_file);
if ( ! iob_packet.ptr )
{
OodleXLog_Printf_v0("Failed to load : %s\n",example_packet_file);
return 10;
}
<span style="color:#008000;">//---------------------------------------</span>
<span style="color:#008000;">// do test/train holdout :</span>
OodleIOBuffer iob_packet_test(iob_packet.size);
OodleIOBuffer iob_packet_train(iob_packet.size);
scan_packet_iobs(iob_packet,&amp;iob_packet_test,&amp;iob_packet_train,example_packet_test_holdout_fraction_denominator);
iob_packet.Release();
test_packet_iobs(iob_packet_test,iob_packet_train,for_oodle_version_major);
}
return 0;
}
#ifdef BUILDING_TEST_PACKET
static int example_packet_twofile(const char * packet_train_file,const char * packet_test_file,int for_oodle_version_major)
{
<span style="color:#008000;">// load the files containing packet data :</span>
OodleIOBuffer iob_packet_test(packet_test_file);
if ( ! iob_packet_test.ptr )
{
OodleXLog_Printf_v0("Failed to load : %s\n",packet_test_file);
return 10;
}
OodleXLog_Printf_v1("Test file (%s) : %d bytes\n",packet_test_file,(int)iob_packet_test.size);
OodleIOBuffer iob_packet_test_parsed(iob_packet_test.size);
<span style="color:#008000;">// "scan" to apply exclusions and such :</span>
scan_packet_iobs(iob_packet_test,&amp;iob_packet_test_parsed,NULL,0);
iob_packet_test.Release();
OodleIOBuffer iob_packet_train(packet_train_file);
if ( ! iob_packet_train.ptr )
{
OodleXLog_Printf_v0("Failed to load : %s\n",packet_train_file);
return 10;
}
OodleXLog_Printf_v1("Train file (%s) : %d bytes\n",packet_train_file,(int)iob_packet_train.size);
OodleIOBuffer iob_packet_train_parsed(iob_packet_train.size);
scan_packet_iobs(iob_packet_train,&amp;iob_packet_train_parsed,NULL,0);
iob_packet_train.Release();
test_packet_iobs(iob_packet_test_parsed,iob_packet_train_parsed,for_oodle_version_major);
return 0;
}
#endif
static void test_packet_iobs(const OodleIOBuffer &amp; iob_packet_test,
const OodleIOBuffer &amp; iob_packet_train,
int for_oodle_version_major)
{
<span style="color:#008000;">//---------------------------</span>
</pre></div>Run one or more tests based on the #defined options :<div class=prototype> <pre>
<span style="color:#008000;">//---------------------------</span>
if ( EXAMPLE_PACKET_TEST_OODLENETWORK1_TCP )
{
if ( EXAMPLE_PACKET_TEST_OODLENETWORK1_DIC_SIZES )
{
<span style="color:#008000;">// test several typical on1 dictionary sizes</span>
TestOodleNetwork1TCPPacketCoder(iob_packet_train,iob_packet_test,1,17 );
TestOodleNetwork1TCPPacketCoder(iob_packet_train,iob_packet_test,2,18 );
TestOodleNetwork1TCPPacketCoder(iob_packet_train,iob_packet_test,4,19 );
TestOodleNetwork1TCPPacketCoder(iob_packet_train,iob_packet_test,8,20 );
TestOodleNetwork1TCPPacketCoder(iob_packet_train,iob_packet_test,16,21 );
}
else
{
int on1_dictionary_mb = 4;
int on1_ht_bits = 18;
<span style="color:#008000;">//int on1_dictionary_mb = 8;</span>
<span style="color:#008000;">//int on1_ht_bits = 19;</span>
<span style="color:#008000;">//int on1_dictionary_mb = 16;</span>
<span style="color:#008000;">//int on1_ht_bits = 20;</span>
TestOodleNetwork1TCPPacketCoder(
iob_packet_train,
iob_packet_test,
on1_dictionary_mb,
on1_ht_bits );
}
}
<span style="color:#008000;">//---------------------------</span>
if ( EXAMPLE_PACKET_TEST_OODLENETWORK1_UDP )
{
if ( EXAMPLE_PACKET_TEST_OODLENETWORK1_DIC_SIZES )
{
<span style="color:#008000;">//OodleXLog_SetVerboseLevel(0);</span>
TestOodleNetwork1UDPPacketCoder( iob_packet_train,iob_packet_test,1,17 ,for_oodle_version_major);
TestOodleNetwork1UDPPacketCoder( iob_packet_train,iob_packet_test,2,18 ,for_oodle_version_major);
TestOodleNetwork1UDPPacketCoder( iob_packet_train,iob_packet_test,4,19 ,for_oodle_version_major);
TestOodleNetwork1UDPPacketCoder( iob_packet_train,iob_packet_test,8,20 ,for_oodle_version_major);
TestOodleNetwork1UDPPacketCoder( iob_packet_train,iob_packet_test,16,21 ,for_oodle_version_major);
<span style="color:#008000;">// 16 MB dictionary is max due to 24 bit index </span>
}
else
{
<span style="color:#008000;">//int on1_dictionary_mb = 1;</span>
<span style="color:#008000;">//int on1_ht_bits = 17;</span>
int on1_dictionary_mb = 4;
int on1_ht_bits = 19;
<span style="color:#008000;">//int on1_dictionary_mb = 8;</span>
<span style="color:#008000;">//int on1_ht_bits = 19;</span>
<span style="color:#008000;">//int on1_dictionary_mb = 16;</span>
<span style="color:#008000;">//int on1_ht_bits = 20;</span>
TestOodleNetwork1UDPPacketCoder(
iob_packet_train,
iob_packet_test,
on1_dictionary_mb,
on1_ht_bits ,
for_oodle_version_major);
}
}
<span style="color:#008000;">//---------------------------</span>
}
#ifdef __OODLE2X_H_INCLUDED__
static void Install_OodleX_Plugins_to_OodleNet()
{
<span class=prototype_type><a href="javascript:show('OodleNet_Plugins_SetPrintf.html')" class="blue">OodleNet_Plugins_SetPrintf</a></span>(OodleXLog_Printf_Raw);
<span class=prototype_type><a href="javascript:show('OodleNet_Plugins_SetAssertion.html')" class="blue">OodleNet_Plugins_SetAssertion</a></span>(OodleX_DisplayAssertion);
<span class=prototype_type><a href="javascript:show('OodleNet_Plugins_SetAllocators.html')" class="blue">OodleNet_Plugins_SetAllocators</a></span>(<span class=prototype_type><a href="javascript:show('OodleXMallocAligned.html')" class="blue">OodleXMallocAligned</a></span>,<span class=prototype_type><a href="javascript:show('OodleXFree.html')" class="blue">OodleXFree</a></span>);
<span class=prototype_type><a href="javascript:show('OodleNet_Plugins_SetJobSystemAndCount.html')" class="blue">OodleNet_Plugins_SetJobSystemAndCount</a></span>(<span class=prototype_type><a href="javascript:show('OodleX_CorePlugin_RunJob.html')" class="blue">OodleX_CorePlugin_RunJob</a></span>,<span class=prototype_type><a href="javascript:show('OodleX_CorePlugin_WaitJob.html')" class="blue">OodleX_CorePlugin_WaitJob</a></span>,<span class=prototype_type><a href="javascript:show('OodleX_GetNumWorkerThreads.html')" class="blue">OodleX_GetNumWorkerThreads</a></span>());
}
#endif
extern "C" int main(int argc,char *argv[])
{
#ifdef __OODLE2X_H_INCLUDED__
<span style="color:#008000;">// Init Oodle systems with default options :</span>
if ( ! <span class=prototype_type><a href="javascript:show('OodleX_Init_Default.html')" class="blue">OodleX_Init_Default</a></span>(<span class=prototype_type><a href="javascript:show('OODLE_HEADER_VERSION.html')" class="blue">OODLE_HEADER_VERSION</a></span>) )
{
fprintf(stderr,"OodleX_Init failed.\n");
return 10;
}
Install_OodleX_Plugins_to_OodleNet();
#endif
OodleXLog_Printf_v1("example_packet [packet_file] [test_holdout] [for_oodle_version_major]\n");
<span style="color:#008000;">// defaults :</span>
const char * example_packet_file = c_example_packet_file;
int example_packet_test_holdout_fraction_denominator = c_example_packet_test_holdout_fraction_denominator;
int for_oodle_version_major = OODLE2NET_VERSION_MAJOR;
<span style="color:#008000;">// overrides in args :</span>
if ( argc >= 2 )
{
example_packet_file = argv[1];
}
if ( argc >= 3 )
{
example_packet_test_holdout_fraction_denominator = atoi(argv[2]);
OodleXLog_Printf_v1("example_packet_test_holdout_fraction_denominator = %d\n",example_packet_test_holdout_fraction_denominator);
}
#ifndef BUILDING_TEST_PACKET
if ( argc >= 4 )
{
for_oodle_version_major = atoi(argv[3]);
OodleXLog_Printf_v1("for_oodle_version_major = %d\n",for_oodle_version_major);
#ifdef USE_OODLE_LZ_DATA_COMPRESSION
<span style="color:#008000;">// set LZ back-compat version as well :</span>
struct <span class=prototype_type><a href="javascript:show('OodleConfigValues.html')" class="blue">OodleConfigValues</a></span> oodleconfig;
<span class=prototype_type><a href="javascript:show('Oodle_GetConfigValues.html')" class="blue">Oodle_GetConfigValues</a></span>(&amp;oodleconfig);
oodleconfig.m_OodleLZ_BackwardsCompatible_MajorVersion = for_oodle_version_major;
<span class=prototype_type><a href="javascript:show('Oodle_SetConfigValues.html')" class="blue">Oodle_SetConfigValues</a></span>(&amp;oodleconfig);
#endif
}
#endif
int ret = example_packet_onefile(example_packet_file,example_packet_test_holdout_fraction_denominator,for_oodle_version_major);
#ifdef __OODLE2X_H_INCLUDED__
<span style="color:#008000;">//OodleX_Shutdown();</span>
<span class=prototype_type><a href="javascript:show('OodleX_Shutdown.html')" class="blue">OodleX_Shutdown</a></span>(NULL,OodleX_Shutdown_LogLeaks_Yes,0);
#endif
<span style="color:#008000;">//OodleXLog_Printf_v1("press a key\n");</span>
<span style="color:#008000;">//fgetc(stdin);</span>
return ret;
}
<span style="color:#008000;">//=================================================================</span>
static void OodleLog_PacketCompression(OO_S64 tot_rawLen,OO_S64 tot_compLen,OO_S64 tot_numPackets)
{
OodleXLog_Printf_v0("%.1f -> %.1f average = %.3f:1 = %.2f%% reduction\n",
(double)tot_rawLen/tot_numPackets, (double)tot_compLen/tot_numPackets,
(double)tot_rawLen/tot_compLen,(double)(tot_rawLen-tot_compLen)*100.0/tot_rawLen);
OodleXLog_Printf_v1("%d packets; %lld -> %lld total bytes = %.2f%% of original\n",
(int)tot_numPackets,(long long)tot_rawLen,(long long)tot_compLen,(double)tot_compLen*100.0/tot_rawLen);
}
<span style="color:#008000;">//=================================================================</span>
struct PacketCompressResult
{
OO_S32 raw_size,compressed_size;
};
#if EXAMPLE_PACKET_DO_SORT
struct PacketCompressResult_Compare_raw_size
{
bool operator () (const PacketCompressResult &amp; lhs,const PacketCompressResult &amp; rhs) const
{
return lhs.raw_size &lt; rhs.raw_size;
}
};
struct PacketCompressResult_Compare_compression_ratio
{
bool operator () (const PacketCompressResult &amp; lhs,const PacketCompressResult &amp; rhs) const
{
<span style="color:#008000;">// multiply could overflow OO_S32 so bump it up :</span>
return (OO_U64) lhs.compressed_size * rhs.raw_size &lt; (OO_U64) rhs.compressed_size * lhs.raw_size;
}
};
static void OodleLog_PacketCompressResults(PacketCompressResult * results, OO_SINTa count)
{
OO_SINTa decile = count/10;
if ( decile == 0 ) return;
OodleXLog_Printf_v1("-------------------------------------------------------------\n");
for(int rep=0;rep&lt;2;rep++)
{
if ( rep == 0 )
{
OodleXLog_Printf_v1("Compression by size decile; %d packets per decile\n",(int)decile);
<span style="color:#008000;">// sort by raw size :</span>
std::sort(results,results+count,PacketCompressResult_Compare_raw_size());
}
else
{
OodleXLog_Printf_v1("Compression by ratio decile; %d packets per decile\n",(int)decile);
<span style="color:#008000;">// sort by raw size :</span>
std::sort(results,results+count,PacketCompressResult_Compare_compression_ratio());
}
for(int d=0;d&lt;10;d++)
{
PacketCompressResult * base = results + decile * d;
OO_SINTa decile_tot_raw_size = 0;
OO_SINTa decile_tot_compressed_size = 0;
for(OO_SINTa p=0;p&lt;decile;p++)
{
decile_tot_raw_size += base[p].raw_size;
decile_tot_compressed_size += base[p].compressed_size;
}
OodleXLog_Printf_v1("%d : %6.1f -> %6.1f = %.2f%% of original = %.2f%% reduction\n",
d,
(double)decile_tot_raw_size/decile,
(double)decile_tot_compressed_size/decile,
(double)decile_tot_compressed_size*100.0/decile_tot_raw_size,
(double)(decile_tot_raw_size-decile_tot_compressed_size)*100.0/decile_tot_raw_size);
}
}
OodleXLog_Printf_v1("-------------------------------------------------------------\n");
}
#else
static void OodleLog_PacketCompressResults(PacketCompressResult * results, OO_SINTa count)
{
OOEX_UNUSED_VARIABLE(results);
OOEX_UNUSED_VARIABLE(count);
}
#endif <span style="color:#008000;">// EXAMPLE_PACKET_DO_SORT</span>
<span style="color:#008000;">//=================================================================</span>
</pre></div>TCP variants of the OodleNetwork1 tests<div class=prototype> <pre>
<span style="color:#008000;">//=================================================================</span>
</pre></div>TestOodleNetwork_SelectDictionaryAndTrain :
</p>
<p>fills out on1_shared, on1_initial_state and on1_dic
</p>
<p>uses the provided io_packet_train training data to both make the dictionary and
initialize the on1_initial_state
</p>
<p>fills either tcp_initial_state or udp_initial_state or both. Set the one you don't need to NULL.
on1_shared and on1_dic are always filled.<div class=prototype> <pre>
static void TestOodleNetwork_SelectDictionaryAndTrain(
<span class=prototype_type><a href="javascript:show('OodleNetwork1_Shared.html')" class="blue">OodleNetwork1_Shared</a></span> * on1_shared,
<span class=prototype_type><a href="javascript:show('OodleNetwork1TCP_State.html')" class="blue">OodleNetwork1TCP_State</a></span> * tcp_initial_state,
<span class=prototype_type><a href="javascript:show('OodleNetwork1UDP_State.html')" class="blue">OodleNetwork1UDP_State</a></span> * udp_initial_state2,
int on1_ht_bits,
void * on1_dic,
OO_SINTa on1_dic_size,
const OodleIOBuffer &amp; iob_packet_train)
{
if ( ! <span class=prototype_type><a href="javascript:show('OodleNetwork1_SelectDictionarySupported.html')" class="blue">OodleNetwork1_SelectDictionarySupported</a></span>() )
{
OOEX_ASSERT_FAILURE_ALWAYS("Can't build dictionary on embedded platforms.");
return;
}
<span style="color:#008000;">// parse the training set to vectors :</span>
const OO_U8 * packet_bin_buf = iob_packet_train.ptr;
const OO_SINTa packet_bin_size = iob_packet_train.size;
vector&lt;const void *> dictionary_packet_pointers;
vector&lt;OO_S32> dictionary_packet_sizes;
dictionary_packet_pointers.reserve(4096);
dictionary_packet_sizes.reserve(4096);
vector&lt;const void *> dictest_packet_pointers;
vector&lt;OO_S32> dictest_packet_sizes;
dictest_packet_pointers.reserve(4096);
dictest_packet_sizes.reserve(4096);
vector&lt;const void *> training_packet_pointers;
vector&lt;OO_S32> training_packet_sizes;
training_packet_pointers.reserve(4096);
training_packet_sizes.reserve(4096);
<span style="color:#008000;">// get the number of channels ; first dword in packet bin : </span>
const OO_U8 * packet_bin_ptr = packet_bin_buf;
const OO_U8 * packet_bin_end = packet_bin_ptr + packet_bin_size;
OO_S32 num_channels = OOEX_GET32_LE(packet_bin_ptr); packet_bin_ptr += sizeof(OO_S32);
if ( num_channels == 0 ) num_channels = 1;
OOEX_UNUSED_VARIABLE(num_channels);
OO_SINTa training_tot_raw_len = 0;
OO_SINTa dictionary_tot_raw_len = 0;
OO_SINTa dictest_tot_raw_len = 0;
while( packet_bin_ptr &lt; packet_bin_end )
{
<span style="color:#008000;">// grab the current packet header :</span>
OO_S32 channel = OOEX_GET32_LE(packet_bin_ptr); packet_bin_ptr += sizeof(OO_S32);
OO_S32 bytes = OOEX_GET32_LE(packet_bin_ptr); packet_bin_ptr += sizeof(OO_S32);
OOEX_ASSERT( channel >= 0 &amp;&amp; channel &lt; num_channels );
OOEX_ASSERT( bytes > 0 );
OOEX_UNUSED_VARIABLE(channel);
if ( packet_bin_ptr + bytes > packet_bin_end )
{
<span style="color:#008000;">// partial end packet</span>
break;
}
<span style="color:#008000;">// put packet in one of three data sets :</span>
<span style="color:#008000;">// semi-random : </span>
int select = irandmod(3);
if ( select == 0 )
{
training_packet_pointers.push_back( packet_bin_ptr );
training_packet_sizes.push_back( bytes );
training_tot_raw_len += bytes;
}
else if ( select == 1 )
{
dictionary_packet_pointers.push_back( packet_bin_ptr );
dictionary_packet_sizes.push_back( bytes );
dictionary_tot_raw_len += bytes;
}
else
{
dictest_packet_pointers.push_back( packet_bin_ptr );
dictest_packet_sizes.push_back( bytes );
dictest_tot_raw_len += bytes;
}
packet_bin_ptr += bytes;
}
OOEX_ASSERT( packet_bin_ptr == packet_bin_end );
<span style="color:#008000;">// 64M limit for dictest to keep speed reasonable</span>
while ( dictest_tot_raw_len > 64*1024*1024 )
{
<span style="color:#008000;">// randomly move one from dictest to training :</span>
int dictest_packet_pointers_size = dictest_packet_pointers.size32();
int i = irandmod(dictest_packet_pointers_size);
const void * ptr = dictest_packet_pointers[i];
OO_S32 size = dictest_packet_sizes[i];
training_packet_pointers.push_back(ptr);
training_packet_sizes.push_back(size);
training_tot_raw_len += size;
dictest_packet_pointers.erase_u(i);
dictest_packet_sizes.erase_u(i);
dictest_tot_raw_len -= size;
}
OO_S32 num_training_packets = training_packet_pointers.size32();
OO_S32 num_dictionary_packets = dictionary_packet_pointers.size32();
OO_S32 num_dictest_packets = dictest_packet_pointers.size32();
if ( on1_dic_size > dictionary_tot_raw_len )
{
OodleXLog_Printf_v1("WARNING : training data not big enough for dictionary, clamping.\n");
}
on1_dic_size = OOEX_MIN(on1_dic_size,dictionary_tot_raw_len);
OodleXLog_Printf_v1("clamped on1_dic_size = %d ; training len = %d\n",(int)on1_dic_size,(int)training_tot_raw_len);
#if EXAMPLE_PACKET_OODLENETWORK_DO_TRIALS
<span style="color:#008000;">//OO_S32 num_trials = 10;</span>
<span style="color:#008000;">//OO_S32 num_generations = 2;</span>
OO_S32 num_trials = 3;
OO_S32 num_generations = 1;
double randomness = 200.0;
#else
OO_S32 num_trials = 1;
OO_S32 num_generations = 0;
double randomness = 0.0;
#endif
<span style="color:#008000;">// dic_file_name (sdfp_dic.bin) is a cache to speed up repeated runs of this function</span>
<span style="color:#008000;">// only used if EXAMPLE_PACKET_OODLENETWORK_LOAD_EXISTING is enabled</span>
<span style="color:#008000;">// it is *not* loaded by the runtime (that's the _runtimedata.bin)</span>
<span style="color:#008000;">// only loaded here</span>
const char * dic_file_name = EXAMPLE_PACKET_DEFAULT_OUTPUT_PATH "sdfp_dic.bin";
<span style="color:#008000;">// dic_file_name = NULL to not save</span>
<span style="color:#008000;">//const char * dic_file_name = NULL;</span>
bool do_make_dic = true;
bool do_load_existing = EXAMPLE_PACKET_OODLENETWORK_LOAD_EXISTING != 0;
<span style="color:#008000;">// On platforms where SelectDictionary funcs are not supported, force load existing</span>
if ( ! <span class=prototype_type><a href="javascript:show('OodleNetwork1_SelectDictionarySupported.html')" class="blue">OodleNetwork1_SelectDictionarySupported</a></span>() )
{
do_load_existing = true;
}
if ( do_load_existing &amp;&amp; dic_file_name != NULL )
{
OodleXLog_Printf_v1("Trying to load : %s\n",dic_file_name);
OO_SINTa dic_file_size;
void * dic_file_buf = read_whole_file(dic_file_name,&amp;dic_file_size);
if ( dic_file_buf != NULL )
{
if ( on1_dic_size == (OO_SINTa)dic_file_size )
{
OodleXLog_Printf_v1("...got it!\n");
memcpy(on1_dic,dic_file_buf,on1_dic_size);
do_make_dic = false;
}
else
{
OodleXLog_Printf_v1("...wrong size!\n");
}
free(dic_file_buf);
}
else
{
OodleXLog_Printf_v1("...not found!\n");
}
}
if ( do_make_dic )
{
<span class=prototype_type><a href="javascript:show('OodleNetwork1_SelectDictionaryFromPackets_Trials.html')" class="blue">OodleNetwork1_SelectDictionaryFromPackets_Trials</a></span>(on1_dic,(OO_S32)on1_dic_size,
on1_ht_bits,
dictionary_packet_pointers.data(),
dictionary_packet_sizes.data(),num_dictionary_packets,
dictest_packet_pointers.data(),
dictest_packet_sizes.data(),num_dictest_packets,
num_trials,randomness,num_generations);
<span style="color:#008000;">//----------------------</span>
<span style="color:#008000;">// optionally write dictionary</span>
<span style="color:#008000;">// this isn't needed at runtime; the whole dictionary is stored in the "runtimedata" file as well</span>
if ( dic_file_name )
{
OodleXLog_Printf_v1("writing dictionary to: %s\n",dic_file_name);
OO_BOOL write_ok = write_whole_file(dic_file_name,on1_dic,on1_dic_size);
OOEX_ASSERT_ALWAYS( write_ok );
}
}
if ( on1_shared )
<span class=prototype_type><a href="javascript:show('OodleNetwork1_Shared_SetWindow.html')" class="blue">OodleNetwork1_Shared_SetWindow</a></span>(on1_shared,on1_ht_bits,on1_dic,(OO_S32)on1_dic_size);
<span style="color:#008000;">// this is done by OodleNetwork1UDP_Train :</span>
<span style="color:#008000;">//OodleNetwork1UDP_State_Reset(on1_initial_state);</span>
if ( tcp_initial_state )
{
<span class=prototype_type><a href="javascript:show('OodleNetwork1TCP_Train.html')" class="blue">OodleNetwork1TCP_Train</a></span>(
tcp_initial_state,
on1_shared,
training_packet_pointers.data(),
training_packet_sizes.data(),
num_training_packets);
}
if ( udp_initial_state2 )
{
<span class=prototype_type><a href="javascript:show('OodleNetwork1UDP_Train.html')" class="blue">OodleNetwork1UDP_Train</a></span>(
udp_initial_state2,
on1_shared,
training_packet_pointers.data(),
training_packet_sizes.data(),
num_training_packets);
}
}
</pre></div>TestOodleNetwork1TCPPacketCoder_Transmission :
</p>
<p>Test coding of iob_packet_test
</p>
<p>Use the previously trained on1_shared and on1_initial_state<div class=prototype> <pre>
static void TestOodleNetwork1TCPPacketCoder_Transmission(
const <span class=prototype_type><a href="javascript:show('OodleNetwork1_Shared.html')" class="blue">OodleNetwork1_Shared</a></span> * on1_shared,
const <span class=prototype_type><a href="javascript:show('OodleNetwork1TCP_State.html')" class="blue">OodleNetwork1TCP_State</a></span> * on1_initial_state,
const OodleIOBuffer &amp; iob_packet_test )
{
<span style="color:#008000;">//===========================================</span>
<span style="color:#008000;">// point at the packet data : </span>
const OO_U8 * packet_bin_buf = iob_packet_test.ptr;
OO_SINTa packet_bin_size = iob_packet_test.size;
<span style="color:#008000;">// get the number of channels ; first dword in packet bin : </span>
const OO_U8 * packet_bin_ptr = packet_bin_buf;
const OO_U8 * packet_bin_end = packet_bin_ptr + packet_bin_size;
OO_S32 num_channels = OOEX_GET32_LE(packet_bin_ptr); packet_bin_ptr += sizeof(OO_S32);
<span style="color:#008000;">//===========================================</span>
<span style="color:#008000;">// initialize an OodleNetwork1 State for each channel :</span>
vector&lt;<span class=prototype_type><a href="javascript:show('OodleNetwork1TCP_State.html')" class="blue">OodleNetwork1TCP_State</a></span> *> encoders;
vector&lt;<span class=prototype_type><a href="javascript:show('OodleNetwork1TCP_State.html')" class="blue">OodleNetwork1TCP_State</a></span> *> decoders;
encoders.resize(num_channels);
decoders.resize(num_channels);
for (int c=0;c&lt;num_channels;c++)
{
encoders[c] = (<span class=prototype_type><a href="javascript:show('OodleNetwork1TCP_State.html')" class="blue">OodleNetwork1TCP_State</a></span> *) malloc( <span class=prototype_type><a href="javascript:show('OodleNetwork1TCP_State_Size.html')" class="blue">OodleNetwork1TCP_State_Size</a></span>() );
decoders[c] = (<span class=prototype_type><a href="javascript:show('OodleNetwork1TCP_State.html')" class="blue">OodleNetwork1TCP_State</a></span> *) malloc( <span class=prototype_type><a href="javascript:show('OodleNetwork1TCP_State_Size.html')" class="blue">OodleNetwork1TCP_State_Size</a></span>() );
<span class=prototype_type><a href="javascript:show('OodleNetwork1TCP_State_InitAsCopy.html')" class="blue">OodleNetwork1TCP_State_InitAsCopy</a></span>( encoders[c], on1_initial_state );
<span class=prototype_type><a href="javascript:show('OodleNetwork1TCP_State_InitAsCopy.html')" class="blue">OodleNetwork1TCP_State_InitAsCopy</a></span>( decoders[c], on1_initial_state );
}
<span style="color:#008000;">//-------------------------------------------</span>
vector&lt;PacketCompressResult> results;
results.reserve(65536);
<span style="color:#008000;">//-------------------------------------------</span>
<span style="color:#008000;">// make some buffers for compressed &amp; decompressed data</span>
<span style="color:#008000;">// (we'll resize as needed)</span>
vector&lt;OO_U8> compv; compv.reserve(65536);
vector&lt;OO_U8> decompv; decompv.reserve(65536);
OO_S64 tot_rawLen = 0;
OO_S64 tot_compLen = 0;
OO_S64 tot_numPackets = 0;
while( packet_bin_ptr &lt; packet_bin_end )
{
<span style="color:#008000;">// grab the current packet header :</span>
OO_S32 channel = OOEX_GET32_LE(packet_bin_ptr); packet_bin_ptr += sizeof(OO_S32);
OO_S32 bytes = OOEX_GET32_LE(packet_bin_ptr); packet_bin_ptr += sizeof(OO_S32);
OOEX_ASSERT( channel >= 0 &amp;&amp; channel &lt; num_channels );
OOEX_ASSERT( bytes > 0 );
if ( packet_bin_ptr + bytes > packet_bin_end )
{
<span style="color:#008000;">// partial end packet</span>
break;
}
const OO_U8 * rawPtr = packet_bin_ptr;
OO_SINTa curLen = bytes;
compv.resize( <span class=prototype_type><a href="javascript:show('OodleNetwork1_CompressedBufferSizeNeeded.html')" class="blue">OodleNetwork1_CompressedBufferSizeNeeded</a></span>(curLen) );
decompv.resize( curLen + <span class=prototype_type><a href="javascript:show('OODLENETWORK1_DECOMP_BUF_OVERREAD_LEN.html')" class="blue">OODLENETWORK1_DECOMP_BUF_OVERREAD_LEN</a></span> );
OO_U8 * compPtr = compv.data();
OO_U8 * decomp = decompv.data();
OO_SINTa cur_compLen =
<span class=prototype_type><a href="javascript:show('OodleNetwork1TCP_Encode.html')" class="blue">OodleNetwork1TCP_Encode</a></span>(encoders[channel],on1_shared,rawPtr,curLen,compPtr);
<span style="color:#008000;">// check I'm not lying about compLen :</span>
compPtr[cur_compLen] = 0xCD;
<span style="color:#008000;">//OO_SINTa dec_compLen = </span>
<span class=prototype_type><a href="javascript:show('OodleNetwork1TCP_Decode.html')" class="blue">OodleNetwork1TCP_Decode</a></span>(decoders[channel],on1_shared,compPtr,cur_compLen,
decomp,bytes);
<span style="color:#008000;">//OOEX_ASSERT_ALWAYS( cur_compLen == dec_compLen ); </span>
OOEX_ASSERT_ALWAYS( memcmp(packet_bin_ptr,decomp,bytes) == 0 );
packet_bin_ptr += bytes;
tot_rawLen += bytes;
tot_compLen += cur_compLen;
tot_numPackets ++;
results.push_back();
results.back().raw_size = (OO_S32) bytes;
results.back().compressed_size = (OO_S32) cur_compLen;
}
for (int c=0;c&lt;num_channels;c++)
{
free(encoders[c]);
free(decoders[c]);
}
encoders.release();
decoders.release();
OodleLog_PacketCompression(tot_rawLen,tot_compLen,tot_numPackets);
OodleLog_PacketCompressResults(&amp;results[0],results.size());
}
</pre></div>TestOodleNetwork1TCPPacketCoder
</p>
<p>Test OodleNetwork1 on the packet data
</p>
<p>does training, then compresses with the trained data<div class=prototype> <pre>
static void TestOodleNetwork1TCPPacketCoder(
const OodleIOBuffer &amp; iob_packet_train ,
const OodleIOBuffer &amp; iob_packet_test ,
int on1_dic_mb , int on1_ht_bits)
{
OO_SINTa on1_dic_size = on1_dic_mb*1024*1024;
on1_dic_size = OOEX_CLAMP(on1_dic_size,1024*1024,<span class=prototype_type><a href="javascript:show('OODLENETWORK1_MAX_DICTIONARY_SIZE.html')" class="blue">OODLENETWORK1_MAX_DICTIONARY_SIZE</a></span>);
OodleXLog_Printf_v1("OodleNetwork1 TCP models take : %d bytes per channel, %d bytes shared\n",
(int) <span class=prototype_type><a href="javascript:show('OodleNetwork1TCP_State_Size.html')" class="blue">OodleNetwork1TCP_State_Size</a></span>(),
(int)(<span class=prototype_type><a href="javascript:show('OodleNetwork1_Shared_Size.html')" class="blue">OodleNetwork1_Shared_Size</a></span>(on1_ht_bits) + on1_dic_size));
<span style="color:#008000;">//-------------------------------------</span>
<span style="color:#008000;">// OodleNetwork1 training requires a dictionary (on1_dic) of bytes to reference</span>
<span style="color:#008000;">// The "on1_shared" object is static and shared by all channels</span>
<span style="color:#008000;">// it is built once from the on1_dic</span>
<span style="color:#008000;">// The "on1_initial_state" is a trained initial state</span>
<span style="color:#008000;">// this state is copied into the per-channel states</span>
void * on1_dic = malloc( on1_dic_size );
<span class=prototype_type><a href="javascript:show('OodleNetwork1_Shared.html')" class="blue">OodleNetwork1_Shared</a></span> * on1_shared = (<span class=prototype_type><a href="javascript:show('OodleNetwork1_Shared.html')" class="blue">OodleNetwork1_Shared</a></span> *) malloc( <span class=prototype_type><a href="javascript:show('OodleNetwork1_Shared_Size.html')" class="blue">OodleNetwork1_Shared_Size</a></span>(on1_ht_bits) );
OOEX_ASSERT_ALWAYS( on1_shared != NULL );
<span class=prototype_type><a href="javascript:show('OodleNetwork1TCP_State.html')" class="blue">OodleNetwork1TCP_State</a></span> * on1_initial_state = (<span class=prototype_type><a href="javascript:show('OodleNetwork1TCP_State.html')" class="blue">OodleNetwork1TCP_State</a></span> *) malloc( <span class=prototype_type><a href="javascript:show('OodleNetwork1TCP_State_Size.html')" class="blue">OodleNetwork1TCP_State_Size</a></span>() );
OOEX_ASSERT_ALWAYS( on1_initial_state != NULL );
TestOodleNetwork_SelectDictionaryAndTrain( on1_shared,
on1_initial_state,NULL,
on1_ht_bits, on1_dic, on1_dic_size, iob_packet_train );
<span style="color:#008000;">//-----------------------------------------------------</span>
OodleXLog_Printf_v1("OodleNetwork1 TCP [%d|%d] : ",on1_dic_mb,on1_ht_bits);
TestOodleNetwork1TCPPacketCoder_Transmission( on1_shared, on1_initial_state, iob_packet_test );
<span style="color:#008000;">//-----------------------------------------------------</span>
free(on1_dic);
free(on1_shared);
free(on1_initial_state);
}
<span style="color:#008000;">//=============================================================================</span>
</pre></div>UDP variants of the OodleNetwork1 tests<div class=prototype> <pre>
<span style="color:#008000;">//=============================================================================</span>
</pre></div>TestOodleNetwork1UDPPacketCoder_Transmission :
</p>
<p>Test coding of iob_packet_test
</p>
<p>Use the previously trained on1_shared and on1_initial_state<div class=prototype> <pre>
static void TestOodleNetwork1UDPPacketCoder_Transmission(
const <span class=prototype_type><a href="javascript:show('OodleNetwork1_Shared.html')" class="blue">OodleNetwork1_Shared</a></span> * on1_shared,
const <span class=prototype_type><a href="javascript:show('OodleNetwork1UDP_State.html')" class="blue">OodleNetwork1UDP_State</a></span> * state,
const OodleIOBuffer &amp; iob_packet_test,
OO_S64 for_logging_total_mem_use = 0)
{
<span style="color:#008000;">//-------------------------------------------</span>
vector&lt;PacketCompressResult> results;
results.reserve(65536);
<span style="color:#008000;">//-------------------------------------------</span>
<span style="color:#008000;">// make some buffers for compressed &amp; decompressed data</span>
<span style="color:#008000;">// (we'll resize as needed)</span>
OO_S64 tot_rawLen = 0;
OO_S64 tot_compLen = 0;
OO_S64 tot_numPackets = 0;
<span style="color:#008000;">// scratch space for just one packet compressed &amp; decompressed</span>
vector&lt;OO_U8> compv; compv.reserve(65536);
vector&lt;OO_U8> decompv; decompv.reserve(65536);
<span style="color:#008000;">//===========================================</span>
<span style="color:#008000;">// point at the packet data : </span>
const OO_U8 * packet_bin_buf = iob_packet_test.ptr;
OO_SINTa packet_bin_size = iob_packet_test.size;
<span style="color:#008000;">// get the number of channels ; first dword in packet bin : </span>
const OO_U8 * packet_bin_ptr = packet_bin_buf;
const OO_U8 * packet_bin_end = packet_bin_ptr + packet_bin_size;
OO_S32 num_channels = OOEX_GET32_LE(packet_bin_ptr); packet_bin_ptr += sizeof(OO_S32);
if ( num_channels == 0 ) num_channels = 1;
OOEX_UNUSED_VARIABLE(num_channels);
<span style="color:#008000;">//===========================================</span>
while( packet_bin_ptr &lt; packet_bin_end )
{
<span style="color:#008000;">// grab the current packet header :</span>
OO_S32 channel = OOEX_GET32_LE(packet_bin_ptr); packet_bin_ptr += sizeof(OO_S32);
OOEX_UNUSED_VARIABLE(channel);
OO_S32 bytes = OOEX_GET32_LE(packet_bin_ptr); packet_bin_ptr += sizeof(OO_S32);
OOEX_ASSERT( channel >= 0 &amp;&amp; channel &lt; num_channels );
OOEX_ASSERT( bytes > 0 );
if ( packet_bin_ptr + bytes > packet_bin_end )
{
<span style="color:#008000;">// partial end packet</span>
break;
}
const OO_U8 * rawPtr = packet_bin_ptr;
OO_SINTa curLen = bytes;
OO_SINTa comp_needed = <span class=prototype_type><a href="javascript:show('OodleNetwork1_CompressedBufferSizeNeeded.html')" class="blue">OodleNetwork1_CompressedBufferSizeNeeded</a></span>(curLen);
if ( compv.size32() &lt; comp_needed )
{
compv.resize(comp_needed);
}
<span style="color:#008000;">// decomp must be sized to at least curLen + OODLENETWORK1_DECOMP_BUF_OVERREAD_LEN</span>
if ( decompv.size32() &lt; curLen+<span class=prototype_type><a href="javascript:show('OODLENETWORK1_DECOMP_BUF_OVERREAD_LEN.html')" class="blue">OODLENETWORK1_DECOMP_BUF_OVERREAD_LEN</a></span> )
decompv.resize(curLen+<span class=prototype_type><a href="javascript:show('OODLENETWORK1_DECOMP_BUF_OVERREAD_LEN.html')" class="blue">OODLENETWORK1_DECOMP_BUF_OVERREAD_LEN</a></span>);
OO_U8 * comp = compv.data();
OO_U8 * decomp = decompv.data();
OO_SINTa cur_compLen =
<span class=prototype_type><a href="javascript:show('OodleNetwork1UDP_Encode.html')" class="blue">OodleNetwork1UDP_Encode</a></span>(state,on1_shared,rawPtr,curLen,comp);
<span style="color:#008000;">// check I'm not lying about compLen :</span>
comp[cur_compLen] = 0xCD;
<span style="color:#008000;">//OO_SINTa dec_compLen = </span>
OO_BOOL ok = <span class=prototype_type><a href="javascript:show('OodleNetwork1UDP_Decode.html')" class="blue">OodleNetwork1UDP_Decode</a></span>(state,on1_shared,comp,cur_compLen,
decomp,bytes);
OOEX_ASSERT_ALWAYS( ok );
<span style="color:#008000;">//OOEX_ASSERT_ALWAYS( cur_compLen == dec_compLen ); </span>
OOEX_ASSERT_ALWAYS( memcmp(packet_bin_ptr,decomp,bytes) == 0 );
packet_bin_ptr += bytes;
tot_rawLen += bytes;
tot_compLen += cur_compLen;
tot_numPackets ++;
results.push_back();
results.back().raw_size = (OO_S32) bytes;
results.back().compressed_size = (OO_S32) cur_compLen;
}
<span style="color:#008000;">// @@ !! NOTE : sizes do NOT include packet size headers</span>
<span style="color:#008000;">// you may need to send uncompressed &amp; compressed packet sizes</span>
OodleLog_PacketCompression(tot_rawLen,tot_compLen,tot_numPackets);
#if 0
<span style="color:#008000;">// shows size of all compressed packets + all compressor mem use</span>
<span style="color:#008000;">// to measure net size if you were holding compressed data in memory vs uncompressed</span>
if ( for_logging_total_mem_use != 0 )
{
OodleXLog_Printf_v1("Compression including total mem use (%lld) : ",for_logging_total_mem_use);
OodleLog_PacketCompression(tot_rawLen,tot_compLen+for_logging_total_mem_use,tot_numPackets);
}
#else
OOEX_UNUSED_VARIABLE(for_logging_total_mem_use);
#endif
OodleLog_PacketCompressResults(&amp;results[0],results.size());
}
</pre></div>TestOodleNetwork1UDPPacketCoder
</p>
<p>Train the UDP coder then test using it
</p>
<p>This function also demonstrated how you would compress the model and save it to disk
</p>
<p>In real runtimes, you would just start from loading the compressed model
</p>
<p>-----------------------------
</p>
<p>OodleNetwork1_SavedModel_Header is an example header for the saved Oodle Network trained model.
</p>
<p>It is not intended that you use this literally in your game. You should write your own IO code using
your engine's IO systems to persist the network model.
</p>
<p>Of note : the oodle_major_version is stored in this example header. If that is checked, then it
forces the saved state to be regenerated whenever Oodle's version number is rev'ed. That is usually
not necessary, old states will still work with most revs. So you may remove the check of
oodle_major_version if you like.
</p>
<p>NOTE : in real production code, your saved model should probably have encryption and/or a
checksum applied for integrity checking and to prevent tampering.<div class=prototype> <pre>
struct OodleNetwork1_SavedModel_Header
{
#define ON1_MAGIC 0x11235801
OO_U32 magic;
OO_U32 compressor;
OO_U32 ht_bits;
OO_U32 dic_size;
OO_U32 oodle_major_version;
OO_U32 dic_complen;
OO_U32 statecompacted_size;
OO_U32 statecompacted_complen;
};
</pre></div>OodleNetwork1_SavedModel_Header is written to file like a flat struct,
but we ensure it's always little endian.<div class=prototype> <pre>
static void OodleNetwork1_SavedModel_Header_Read(OodleNetwork1_SavedModel_Header * pHeader,const void * from_memory)
{
const OO_U32 * from_ptr = (const OO_U32 *)from_memory;
pHeader->magic = OOEX_GET32_LE(from_ptr); from_ptr++;
pHeader->compressor = OOEX_GET32_LE(from_ptr); from_ptr++;
pHeader->ht_bits = OOEX_GET32_LE(from_ptr); from_ptr++;
pHeader->dic_size = OOEX_GET32_LE(from_ptr); from_ptr++;
pHeader->oodle_major_version = OOEX_GET32_LE(from_ptr); from_ptr++;
pHeader->dic_complen = OOEX_GET32_LE(from_ptr); from_ptr++;
pHeader->statecompacted_size = OOEX_GET32_LE(from_ptr); from_ptr++;
pHeader->statecompacted_complen = OOEX_GET32_LE(from_ptr); from_ptr++;
OOEX_ASSERT( (((OO_U8 *)from_ptr) - ((OO_U8 *)from_memory)) == sizeof(OodleNetwork1_SavedModel_Header) );
}
static void OodleNetwork1_SavedModel_Header_Write(const OodleNetwork1_SavedModel_Header * pHeader,void * to_memory)
{
OO_U32 * to_ptr = (OO_U32 *)to_memory;
OOEX_PUT32_LE(to_ptr,pHeader->magic); to_ptr++;
OOEX_PUT32_LE(to_ptr,pHeader->compressor); to_ptr++;
OOEX_PUT32_LE(to_ptr,pHeader->ht_bits); to_ptr++;
OOEX_PUT32_LE(to_ptr,pHeader->dic_size); to_ptr++;
OOEX_PUT32_LE(to_ptr,pHeader->oodle_major_version); to_ptr++;
OOEX_PUT32_LE(to_ptr,pHeader->dic_complen); to_ptr++;
OOEX_PUT32_LE(to_ptr,pHeader->statecompacted_size); to_ptr++;
OOEX_PUT32_LE(to_ptr,pHeader->statecompacted_complen); to_ptr++;
OOEX_ASSERT( (((OO_U8 *)to_ptr) - ((OO_U8 *)to_memory)) == sizeof(OodleNetwork1_SavedModel_Header) );
}
struct OodleNetwork1_Compressor
{
OodleNetwork1_SavedModel_Header loaded_header; <span style="color:#008000;">// only filled by the loader</span>
OO_S64 loaded_total_mem_use;
void * dic;
<span class=prototype_type><a href="javascript:show('OodleNetwork1UDP_State.html')" class="blue">OodleNetwork1UDP_State</a></span> * state;
<span class=prototype_type><a href="javascript:show('OodleNetwork1_Shared.html')" class="blue">OodleNetwork1_Shared</a></span> * shared;
};
static void OodleNetwork1_Compressor_Free(OodleNetwork1_Compressor * pCompressor)
{
free(pCompressor->dic);
free(pCompressor->shared);
free(pCompressor->state);
}
static bool OodleNetwork1_Compressor_LoadFromFileData( OodleNetwork1_Compressor * pCompressor, const void * fileData, OO_SINTa fileSize )
{
memset(pCompressor,0,sizeof(*pCompressor));
<span style="color:#008000;">// parse header :</span>
OodleNetwork1_SavedModel_Header header;
OodleNetwork1_SavedModel_Header_Read(&amp;header,fileData);
if ( header.magic != ON1_MAGIC )
{
OodleXLog_Printf_v0("runtimedata_file ON1_MAGIC mismatch\n");
return false;
}
<span style="color:#008000;">// optional check for oodle_major_version being the same</span>
<span style="color:#008000;">// NOTE : this is more conservative than necessary</span>
<span style="color:#008000;">// you may disable this check to keep loading old runtimedata files</span>
#if 0
if ( header.oodle_major_version &lt; 1 )
{
OodleXLog_Printf_v0("runtimedata_file version too old!\n");
return false;
}
if ( header.oodle_major_version > OODLE2NET_VERSION_MAJOR )
{
OodleXLog_Printf_v0("runtimedata_file version newer that SDK!\n");
return false;
}
#endif
OO_S32 on1udpnew_ht_bits = header.ht_bits;
OO_SINTa on1udpnew_dic_size = header.dic_size;
OO_SINTa on1udpnew_dic_complen = header.dic_complen;
OO_SINTa on1udpnew_statecompacted_size = header.statecompacted_size;
OO_SINTa on1udpnew_statecompacted_complen = header.statecompacted_complen;
<span style="color:#008000;">// sanity checks on the header :</span>
<span style="color:#008000;">// (in real use these should be if's and the header should be protected to</span>
<span style="color:#008000;">// forbid tampering)</span>
OOEX_ASSERT_ALWAYS( on1udpnew_dic_size >= on1udpnew_dic_complen );
OOEX_ASSERT_ALWAYS( on1udpnew_statecompacted_size+5 >= on1udpnew_statecompacted_complen );
OOEX_ASSERT_ALWAYS( on1udpnew_statecompacted_size > 0 &amp;&amp; on1udpnew_statecompacted_size &lt; <span class=prototype_type><a href="javascript:show('OodleNetwork1UDP_StateCompacted_MaxSize.html')" class="blue">OodleNetwork1UDP_StateCompacted_MaxSize</a></span>() );
OOEX_ASSERT_ALWAYS( fileSize == (OO_S64)sizeof(OodleNetwork1_SavedModel_Header) + on1udpnew_dic_complen + on1udpnew_statecompacted_complen );
OodleXLog_Printf_v1("OodleNetwork1UDP Loading; dic comp %d , state %d->%d\n",
(int)on1udpnew_dic_complen,(int)on1udpnew_statecompacted_size,(int)on1udpnew_statecompacted_complen);
<span style="color:#008000;">//-------------------------------------------</span>
<span style="color:#008000;">// decompress on1udpnew_dic and on1udpnew_statecompacted</span>
pCompressor->dic = malloc(on1udpnew_dic_size);
const void * on1udpnew_dic_comp_ptr = (const OO_U8 *)(fileData) + sizeof(OodleNetwork1_SavedModel_Header);
<span class=prototype_type><a href="javascript:show('OodleNetwork1UDP_StateCompacted.html')" class="blue">OodleNetwork1UDP_StateCompacted</a></span> * on1udpnew_compacted = (<span class=prototype_type><a href="javascript:show('OodleNetwork1UDP_StateCompacted.html')" class="blue">OodleNetwork1UDP_StateCompacted</a></span> *) malloc( on1udpnew_statecompacted_size );
void * on1udpnew_statecompacted_comp_ptr = (OO_U8 *)on1udpnew_dic_comp_ptr + on1udpnew_dic_complen;
if ( header.compressor == (OO_U32)OodleLZ_Compressor_Invalid )
{
OOEX_ASSERT_ALWAYS( on1udpnew_dic_complen == on1udpnew_dic_size );
memcpy(pCompressor->dic,on1udpnew_dic_comp_ptr,on1udpnew_dic_size);
OOEX_ASSERT_ALWAYS( on1udpnew_statecompacted_size == on1udpnew_statecompacted_complen );
memcpy(on1udpnew_compacted,on1udpnew_statecompacted_comp_ptr,on1udpnew_statecompacted_size);
}
else
{
#ifdef USE_OODLE_LZ_DATA_COMPRESSION
OO_SINTa decomp_dic_size = <span class=prototype_type><a href="javascript:show('OodleLZ_Decompress.html')" class="blue">OodleLZ_Decompress</a></span>(on1udpnew_dic_comp_ptr,on1udpnew_dic_complen,pCompressor->dic,on1udpnew_dic_size,OodleLZ_FuzzSafe_Yes);
OOEX_ASSERT_ALWAYS( decomp_dic_size == on1udpnew_dic_size );
OO_SINTa decomp_statecompacted_size = <span class=prototype_type><a href="javascript:show('OodleLZ_Decompress.html')" class="blue">OodleLZ_Decompress</a></span>(on1udpnew_statecompacted_comp_ptr,on1udpnew_statecompacted_complen,on1udpnew_compacted,on1udpnew_statecompacted_size,OodleLZ_FuzzSafe_Yes);
OOEX_ASSERT_ALWAYS( decomp_statecompacted_size == on1udpnew_statecompacted_size );
#else
OOEX_ASSERT_FAILURE_ALWAYS("no USE_OODLE_LZ_DATA_COMPRESSION");
#endif
}
<span style="color:#008000;">//----------------------------------------------</span>
<span style="color:#008000;">// Uncompact the "Compacted" state into a usable state</span>
OO_SINTa on1udpnew_state_size = <span class=prototype_type><a href="javascript:show('OodleNetwork1UDP_State_Size.html')" class="blue">OodleNetwork1UDP_State_Size</a></span>();
pCompressor->state = (<span class=prototype_type><a href="javascript:show('OodleNetwork1UDP_State.html')" class="blue">OodleNetwork1UDP_State</a></span> *) malloc( on1udpnew_state_size );
OOEX_ASSERT_ALWAYS( pCompressor->state != NULL );
if ( ! <span class=prototype_type><a href="javascript:show('OodleNetwork1UDP_State_Uncompact_ForVersion.html')" class="blue">OodleNetwork1UDP_State_Uncompact_ForVersion</a></span>(pCompressor->state,on1udpnew_compacted,header.oodle_major_version) )
{
OodleXLog_Printf_v0("OodleNetwork1UDP_State_Uncompact failed\n");
return false;
}
free(on1udpnew_compacted);
<span style="color:#008000;">//----------------------------------------------</span>
<span style="color:#008000;">// fill out on1udpnew_shared from the dictionary</span>
OO_SINTa shared_size = <span class=prototype_type><a href="javascript:show('OodleNetwork1_Shared_Size.html')" class="blue">OodleNetwork1_Shared_Size</a></span>(header.ht_bits);
pCompressor->shared = (<span class=prototype_type><a href="javascript:show('OodleNetwork1_Shared.html')" class="blue">OodleNetwork1_Shared</a></span> *) malloc( shared_size );
OOEX_ASSERT_ALWAYS( pCompressor->shared != NULL );
<span class=prototype_type><a href="javascript:show('OodleNetwork1_Shared_SetWindow.html')" class="blue">OodleNetwork1_Shared_SetWindow</a></span>(pCompressor->shared,on1udpnew_ht_bits,pCompressor->dic,(OO_S32)on1udpnew_dic_size);
pCompressor->loaded_header = header;
pCompressor->loaded_total_mem_use = on1udpnew_state_size + shared_size + on1udpnew_dic_size;
return true;
}
static bool OodleNetwork1_Compressor_WriteToFile(const char * runtimedata_fileName,
const void * on1udpnew_dic,
OO_SINTa on1udpnew_dic_size,
const <span class=prototype_type><a href="javascript:show('OodleNetwork1UDP_State.html')" class="blue">OodleNetwork1UDP_State</a></span> *on1udpnew_state,
OO_S32 on1udpnew_ht_bits,
<span class=prototype_type><a href="javascript:show('OodleLZ_Compressor.html')" class="blue">OodleLZ_Compressor</a></span> file_compressor,
int for_oodle_version_major)
{
<span style="color:#008000;">//-----------------------------------------------------</span>
<span style="color:#008000;">// for saving the state to file,</span>
<span style="color:#008000;">// convert it to a "Compacted" state</span>
<span style="color:#008000;">// this is a smaller, non-runtime representation of the state</span>
OO_SINTa on1udpnew_statecompacted_maxsize = <span class=prototype_type><a href="javascript:show('OodleNetwork1UDP_StateCompacted_MaxSize.html')" class="blue">OodleNetwork1UDP_StateCompacted_MaxSize</a></span>();
<span class=prototype_type><a href="javascript:show('OodleNetwork1UDP_StateCompacted.html')" class="blue">OodleNetwork1UDP_StateCompacted</a></span> * on1udpnew_compacted = (<span class=prototype_type><a href="javascript:show('OodleNetwork1UDP_StateCompacted.html')" class="blue">OodleNetwork1UDP_StateCompacted</a></span> *) malloc( on1udpnew_statecompacted_maxsize );
OO_SINTa on1udpnew_statecompacted_size = <span class=prototype_type><a href="javascript:show('OodleNetwork1UDP_State_Compact_ForVersion.html')" class="blue">OodleNetwork1UDP_State_Compact_ForVersion</a></span>(on1udpnew_compacted,on1udpnew_state,for_oodle_version_major);
OO_SINTa on1udpnew_state_size = <span class=prototype_type><a href="javascript:show('OodleNetwork1UDP_State_Size.html')" class="blue">OodleNetwork1UDP_State_Size</a></span>();
OodleXLog_Printf_v1("OodleNetwork1UDP models compacted : %d bytes (from %d)\n",
(int)on1udpnew_statecompacted_size,
(int)on1udpnew_state_size);
<span style="color:#008000;">//-----------------------------------------------------</span>
<span style="color:#008000;">// compress the block we will save</span>
<span style="color:#008000;">// we need to save on1udpnew_dic and on1udpnew_compacted</span>
<span style="color:#008000;">// we can make the size of the saved state file even smaller by</span>
<span style="color:#008000;">// running normal OodleLZ compress on it</span>
OO_SINTa compressed_buffer_alloc_size = sizeof(OodleNetwork1_SavedModel_Header);
#ifdef USE_OODLE_LZ_DATA_COMPRESSION
compressed_buffer_alloc_size += <span class=prototype_type><a href="javascript:show('OodleLZ_GetCompressedBufferSizeNeeded.html')" class="blue">OodleLZ_GetCompressedBufferSizeNeeded</a></span>(file_compressor, on1udpnew_dic_size + on1udpnew_statecompacted_size );
#else
compressed_buffer_alloc_size += on1udpnew_dic_size + on1udpnew_statecompacted_size;
#endif
void * compressed_buffer = malloc( compressed_buffer_alloc_size );
OO_U8 * comp_ptr = (OO_U8 *) compressed_buffer;
<span style="color:#008000;">// reserve space for header</span>
OO_U8 * header_pointer = comp_ptr;
comp_ptr += sizeof(OodleNetwork1_SavedModel_Header);
OO_SINTa on1udpnew_dic_complen;
if (file_compressor == OodleLZ_Compressor_Invalid )
{
on1udpnew_dic_complen = on1udpnew_dic_size;
memcpy(comp_ptr,on1udpnew_dic,on1udpnew_dic_size);
}
else
{
#ifdef USE_OODLE_LZ_DATA_COMPRESSION
<span style="color:#008000;">// For real production you should use OodleLZ_CompressionLevel_Optimal2</span>
<span style="color:#008000;">// for maximum compression without affecting decode speed</span>
<span style="color:#008000;">// (just slower to encode)</span>
<span class=prototype_type><a href="javascript:show('OodleLZ_CompressionLevel.html')" class="blue">OodleLZ_CompressionLevel</a></span> level = OodleLZ_CompressionLevel_Optimal2;
on1udpnew_dic_complen = <span class=prototype_type><a href="javascript:show('OodleXLZ_Compress_AsyncAndWait.html')" class="blue">OodleXLZ_Compress_AsyncAndWait</a></span>(OodleXAsyncSelect_All,file_compressor,on1udpnew_dic,on1udpnew_dic_size,comp_ptr,level);
OOEX_ASSERT_ALWAYS( on1udpnew_dic_complen > 0 );
#else
on1udpnew_dic_complen = -1;
OOEX_ASSERT_FAILURE_ALWAYS("no USE_OODLE_LZ_DATA_COMPRESSION");
#endif
}
comp_ptr += on1udpnew_dic_complen;
OO_SINTa on1udpnew_statecompacted_complen;
if ( file_compressor == OodleLZ_Compressor_Invalid )
{
memcpy(comp_ptr,on1udpnew_compacted,on1udpnew_statecompacted_size);
on1udpnew_statecompacted_complen = on1udpnew_statecompacted_size;
}
else
{
#ifdef USE_OODLE_LZ_DATA_COMPRESSION
on1udpnew_statecompacted_complen = <span class=prototype_type><a href="javascript:show('OodleLZ_Compress.html')" class="blue">OodleLZ_Compress</a></span>(file_compressor,on1udpnew_compacted,on1udpnew_statecompacted_size,comp_ptr,OodleLZ_CompressionLevel_Fast);
OOEX_ASSERT_ALWAYS( on1udpnew_statecompacted_complen > 0 );
#else
OOEX_ASSERT_FAILURE_ALWAYS("no USE_OODLE_LZ_DATA_COMPRESSION");
on1udpnew_statecompacted_complen = -1;
#endif
}
comp_ptr += on1udpnew_statecompacted_complen;
OO_SINTa total_complen = (OO_SINTa) ( comp_ptr - (OO_U8 *) compressed_buffer );
OodleXLog_Printf_v1("OodleNetwork1UDP runtimedata file size : %d\n",(int)total_complen);
free(on1udpnew_compacted); on1udpnew_compacted = NULL;
<span style="color:#008000;">//-----------------------------------------------------</span>
<span style="color:#008000;">// fill the header :</span>
<span style="color:#008000;">// note : you should make a more robust &amp; portable header for real use!</span>
OodleNetwork1_SavedModel_Header header = { 0 };
header.magic = ON1_MAGIC;
header.ht_bits = on1udpnew_ht_bits;
header.compressor = (OO_U32) file_compressor;
header.dic_size = (OO_U32) on1udpnew_dic_size;
header.oodle_major_version = for_oodle_version_major;
header.dic_complen = (OO_U32) on1udpnew_dic_complen;
header.statecompacted_size = (OO_U32) on1udpnew_statecompacted_size;
header.statecompacted_complen = (OO_U32) on1udpnew_statecompacted_complen;
OodleNetwork1_SavedModel_Header_Write(&amp;header,header_pointer);
<span style="color:#008000;">//-----------------------------------------------------</span>
<span style="color:#008000;">// write the compressed buffer containing on1udpnew_dic and on1udpnew_state to a file</span>
OodleXLog_Printf_v1("Writing runtimedata : %s\n",runtimedata_fileName);
OO_BOOL write_ok = write_whole_file(runtimedata_fileName,compressed_buffer,total_complen);
if ( ! write_ok )
{
OodleXLog_Printf_v1("ERROR : failed to write : %s\n",runtimedata_fileName);
return false;
}
return true;
}
static void TestOodleNetwork1UDPPacketCoder(
const OodleIOBuffer &amp; iob_packet_train ,
const OodleIOBuffer &amp; iob_packet_test ,
int on1udpnew_dic_mb , int on1udpnew_ht_bits,
int for_oodle_version_major)
{
OO_SINTa on1udpnew_dic_size = on1udpnew_dic_mb*1024*1024;
on1udpnew_dic_size = OOEX_CLAMP(on1udpnew_dic_size,1024*1024,<span class=prototype_type><a href="javascript:show('OODLENETWORK1_MAX_DICTIONARY_SIZE.html')" class="blue">OODLENETWORK1_MAX_DICTIONARY_SIZE</a></span>);
OO_SINTa shared_size = <span class=prototype_type><a href="javascript:show('OodleNetwork1_Shared_Size.html')" class="blue">OodleNetwork1_Shared_Size</a></span>(on1udpnew_ht_bits);
OO_SINTa on1udpnew_state_size = <span class=prototype_type><a href="javascript:show('OodleNetwork1UDP_State_Size.html')" class="blue">OodleNetwork1UDP_State_Size</a></span>();
OodleXLog_Printf_v1("OodleNetwork1 UDP models take : %d bytes shared (%d + %d + %d)\n",
(int) (on1udpnew_state_size + shared_size + on1udpnew_dic_size),
(int)on1udpnew_state_size,(int) shared_size,(int) on1udpnew_dic_size
);
<span style="color:#008000;">// this is all the data loaded by the runtime</span>
<span style="color:#008000;">// (see example_network_client.cpp)</span>
const char * runtimedata_fileName = EXAMPLE_PACKET_DEFAULT_OUTPUT_PATH "example_packet_on1udpnew_runtimedata.bin";
<span style="color:#008000;">//-------------------------------------</span>
<span style="color:#008000;">// train the dictionary and on1udpnew state</span>
<span style="color:#008000;">// this is done offline and the result is saved to a file</span>
#if EXAMPLE_PACKET_OODLENETWORK_LOAD_EXISTING
<span style="color:#008000;">// skip training and just load the file we made last time</span>
OOEX_UNUSED_VARIABLE(iob_packet_train);
#else
if ( 1 )
{
<span style="color:#008000;">// OodleNetwork1UDP training requires a dictionary (on1udpnew_dic) of bytes to reference</span>
<span style="color:#008000;">// The "on1udpnew_shared" object is static and shared by all channels</span>
<span style="color:#008000;">// it is built once from the on1udpnew_dic</span>
<span style="color:#008000;">// The "on1udpnew_initial_state" is a trained initial state</span>
<span style="color:#008000;">// this state is copied into the per-channel states</span>
void * on1udpnew_dic = malloc( on1udpnew_dic_size );
<span class=prototype_type><a href="javascript:show('OodleNetwork1_Shared.html')" class="blue">OodleNetwork1_Shared</a></span> * on1udpnew_shared = (<span class=prototype_type><a href="javascript:show('OodleNetwork1_Shared.html')" class="blue">OodleNetwork1_Shared</a></span> *) malloc( shared_size );
OOEX_ASSERT_ALWAYS( on1udpnew_shared != NULL );
<span class=prototype_type><a href="javascript:show('OodleNetwork1UDP_State.html')" class="blue">OodleNetwork1UDP_State</a></span> * on1udpnew_state = (<span class=prototype_type><a href="javascript:show('OodleNetwork1UDP_State.html')" class="blue">OodleNetwork1UDP_State</a></span> *) malloc( on1udpnew_state_size );
OOEX_ASSERT_ALWAYS( on1udpnew_state != NULL );
TestOodleNetwork_SelectDictionaryAndTrain(
on1udpnew_shared,
NULL,on1udpnew_state,
on1udpnew_ht_bits, on1udpnew_dic, on1udpnew_dic_size, iob_packet_train );
<span style="color:#008000;">// on1udpnew_shared is NOT written, it must be remade on load</span>
free(on1udpnew_shared); on1udpnew_shared = NULL;
<span style="color:#008000;">//-----------------------------------------------------</span>
OodleXLog_Printf_v1("Saving state...\n");
#ifdef USE_OODLE_LZ_DATA_COMPRESSION
<span style="color:#008000;">// write the state compressed :</span>
<span class=prototype_type><a href="javascript:show('OodleLZ_Compressor.html')" class="blue">OodleLZ_Compressor</a></span> file_compressor = OodleLZ_Compressor_Kraken;
OOEX_ASSERT( <span class=prototype_type><a href="javascript:show('OodleLZ_Compressor_CanDecodeFuzzSafe.html')" class="blue">OodleLZ_Compressor_CanDecodeFuzzSafe</a></span>(file_compressor) );
#else
<span style="color:#008000;">// uncompressed state :</span>
<span class=prototype_type><a href="javascript:show('OodleLZ_Compressor.html')" class="blue">OodleLZ_Compressor</a></span> file_compressor = OodleLZ_Compressor_Invalid;
#endif
bool ok =OodleNetwork1_Compressor_WriteToFile(runtimedata_fileName,on1udpnew_dic,on1udpnew_dic_size,on1udpnew_state,on1udpnew_ht_bits,file_compressor,for_oodle_version_major);
free(on1udpnew_dic);
free(on1udpnew_state);
if (! ok )
{
OodleXLog_Printf_v0("runtimedata save failed\n");
OOEX_ASSERT_FAILURE_ALWAYS("fail");
}
}
#endif <span style="color:#008000;">// EXAMPLE_PACKET_OODLENETWORK_LOAD_EXISTING </span>
<span style="color:#008000;">// real runtime would start here</span>
<span style="color:#008000;">// trained model is already compressed and saved to disk</span>
<span style="color:#008000;">//-----------------------------------------------------</span>
<span style="color:#008000;">// load the saved runtimedata and use it for compression</span>
if ( 1 )
{
<span style="color:#008000;">// read the compressed runtimedata file</span>
OO_SINTa runtimedata_fileSizeA = 0;
void * runtimedata_fileData = read_whole_file(runtimedata_fileName,&amp;runtimedata_fileSizeA);
OOEX_ASSERT_ALWAYS( runtimedata_fileData != NULL );
if ( runtimedata_fileSizeA &lt; 4096 )
{
OodleXLog_Printf_v0("runtimedata_fileSize too small\n");
OOEX_ASSERT_FAILURE_ALWAYS("fail");
}
OodleNetwork1_Compressor compressor = { };
bool ok = OodleNetwork1_Compressor_LoadFromFileData(&amp;compressor,runtimedata_fileData,runtimedata_fileSizeA);
free(runtimedata_fileData); runtimedata_fileData = NULL;
if (! ok )
{
OodleXLog_Printf_v0("runtimedata load failed\n");
OOEX_ASSERT_FAILURE_ALWAYS("fail");
}
<span style="color:#008000;">//----------------------------------------------------- </span>
<span style="color:#008000;">// our runtime data structures are now loaded</span>
<span style="color:#008000;">// test compressing some packets</span>
OodleXLog_Printf_v0("OodleNetwork1 UDP [%d|%d] : ",on1udpnew_dic_mb,on1udpnew_ht_bits);
TestOodleNetwork1UDPPacketCoder_Transmission( compressor.shared, compressor.state, iob_packet_test , compressor.loaded_total_mem_use);
<span style="color:#008000;">//-----------------------------------------------------</span>
OodleNetwork1_Compressor_Free(&amp;compressor);
}
<span style="color:#008000;">//----------------------------------------------------- </span>
}
<span style="color:#008000;">//=================================================</span>
</pre></div>A simple random number generator :
</p>
<p>Marsaglia's KISS99<div class=prototype> <pre>
static OO_U32 x = 123456789,y = 362436000,z = 521288629,c = 7654321; <span style="color:#008000;">// seeds</span>
static OO_U32 KISS99()
{
x = 69069*x+12345;
y ^= (y&lt;&lt;13);
y ^= (y>>17);
y ^= (y&lt;&lt;5);
static const OO_U64 a = 698769069ULL;
OO_U64 t = a*z+c;
c = (OO_U32)(t>>32);
z = (OO_U32)t;
return (x+y+z);
}
<span style="color:#008000;">// returns a value in [0,size-1]</span>
static OO_U32 irandmod(OO_U32 size)
{
<span style="color:#008000;">// use mul hi</span>
return (OO_U32)((KISS99() * (OO_U64)size) >> 32);
}
</pre></div><br>&nbsp;<br> <table class=bar> <tr>
<td width=33% align=left><span class='arrowleft'></span><a href="javascript:show('example_network_client.html')" class="paragraph">example_network_client : Example with simple network client support</a></td><td width=33% align=center><span class='arrowup'></span><a href="javascript:show('examples.html')" class="paragraph">Examples</a></td><td width=33%>&nbsp;</td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="Oodle_AboutExt.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>About Oodle Ext</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "Oodle_AboutExt.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="Oodle_AboutExt.html_backmenu">
<table class=dropmenu>
<tr><td><span class='arrowleft'></span>&nbsp;<a href="javascript:show('OodleXAPI_Util.html')" class="paragraph">OodleX Utils</a></td></tr><tr><td><span class='arrowup'></span>&nbsp;<a href="javascript:show('OodleExtAPI.html')" class="paragraph">Oodle2 Ext API Documentation</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<P>
Oodle Ext provides threading and IO helpers to run compression tasks multi-threaded. You don't need
to use them, you can just call the simple single threaded functions.
</p>
<p>Functions in Oodle Ext start with OodleX_.
</p>
<p>OodleX requires a single Init and Shutdown call per application run.
</p>
<p>See <a href="javascript:show('start_CoreVsExt.html')" class="paragraph">Oodle2 Core vs Oodle2 Ext</a>
</p>
<p>Oodle async operations are coordinated through the OodleHandle
(see <a href="javascript:show('OodleXHandle_About.html')" class="paragraph">About OodleXHandle</a>) which provides a way to check on async
work or IO's, or groups or chains of work and IO's.
</p>
<p>It is recommended that you ship your game using Oodle Core only. Oodle Ext is intended for tools and
to get a quick start using Oodle. Some console &amp; mobile platforms versions of Oodle do not include Oodle Ext.
</p>
<p><h3> Naming Conventions</h3>
</p>
<p>OodleX tries to make it clear what its functions do through a few naming conventions.
</p>
<p>Functions with <b>_Async</b> on the name start an async operation. Generally these functions return
immediately, but the actual operation is not done yet. Generally they return an OodleHandle.
</p>
<p>Functions with <b>_Wait</b> on the name wait on an async operation. They may block a long time, depending
on the async operation. Typically they also free the operation or provide a flag for whether to free it.
</p>
<p>Generally for each <b>_Async</b> function you want to pair it with a <b>_Wait</b>. There are function-specific
pairings, and those are generally indicated by a shared prefix in the function name, such as
<a href="javascript:show('OodleXLZ_Compress_Async.html')" class="paragraph">OodleXLZ_Compress_Async</a> then <a href="javascript:show('OodleXLZ_Compress_Wait_GetResult.html')" class="paragraph">OodleXLZ_Compress_Wait_GetResult</a>. If there is not a specific pair you can
always use <a href="javascript:show('OodleX_Wait.html')" class="paragraph">OodleX_Wait</a> on any OodleHandle.
</p>
<p>Functions with <b>_AsyncAndWait</b> in the name indicate that they fire off an async op and then wait on it.
This is different than a synchronous function (sometimes indicated with <b>_Sync</b> in the name, but more often
just any function that doesn't have Async in the name); a synchronous
function runs on the calling thread, whereas an <b>_AsyncAndWait</b> function is fired off to some async runner
and then blocked on.
</p>
<p>Some functions have <b>Wide</b> or <b>Narrow</b> in the name. Narrow means the task is run asynchronously, but is run
as a single non-separable operation. Wide means the task can be broken into several smaller pieces and the pieces
can be run simultaneously using several threads. These correspond to flags of <a href="javascript:show('OodleXAsyncSelect.html')" class="paragraph">OodleXAsyncSelect</a>.
</p>
<p>Functions generally have subsystem prefixes to indicate what kinds of data they work on. For example <b>OodleWork_</b>
prefix functions can only work on OodleHandles that correspond to Work objects. It's up to you to
keep handles in the correct subsytem. The generic <b>Oodle_</b> prefix functions
(like <a href="javascript:show('OodleX_WaitAll.html')" class="paragraph">OodleX_WaitAll</a> or <a href="javascript:show('OodleX_GetStatus.html')" class="paragraph">OodleX_GetStatus</a>) work on any subsystem.
</p>
<p>There are lots of enum arguments in Oodle. The values that the enums can take always start with the type
of the enum; eg. <a href="javascript:show('OodleXCopyFileFlags.html')" class="paragraph">OodleXCopyFileFlags</a> has values like <a href="javascript:show('OodleXCopyFileFlags.html','OodleXCopyFileFlags.html_OodleXCopyFileFlags_Overwrite')" class="paragraph">OodleXCopyFileFlags_Overwrite</a> and
<a href="javascript:show('OodleXCopyFileFlags.html','OodleXCopyFileFlags.html_OodleXCopyFileFlags_DontOverwriteExisting')" class="paragraph">OodleXCopyFileFlags_DontOverwriteExisting</a>. One special common case is enums that describe a boolean
choice; in that case the name is always the enum type + <b>_Yes</b> or <b>_No</b> , as in <a href="javascript:show('OodleXHandleDeleteIfDone.html')" class="paragraph">OodleXHandleDeleteIfDone</a>
which has values OodleXHandleDeleteIfDone_Yes and OodleXHandleDeleteIfDone_No.<br>&nbsp;<br> <table class=bar> <tr>
<td width=33% align=left><span class='arrowleft'></span><a href="javascript:show('OODLEX_PATH_DELIM.html')" class="paragraph">OODLEX_PATH_DELIM</a></td><td width=33% align=center><span class='arrowup'></span><a href="javascript:show('OodleExtAPI.html')" class="paragraph">Oodle2 Ext API Documentation</a></td><td width=33%>&nbsp;</td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="OodleXIOQ_Wait_GetInfo.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>OodleXIOQ_Wait_GetInfo</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "OodleXIOQ_Wait_GetInfo.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="OodleXIOQ_Wait_GetInfo.html_backmenu">
<table class=dropmenu>
<tr><td><span class='arrowleft'></span>&nbsp;<a href="javascript:show('OodleXIOQ_GetInfo.html')" class="paragraph">OodleXIOQ_GetInfo</a></td></tr><tr><td><span class='arrowright'></span>&nbsp;<a href="javascript:show('OodleXIOQ_GetLastPendingOpOnFile.html')" class="paragraph">OodleXIOQ_GetLastPendingOpOnFile</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<div class=prototype><div class=prototype_header>// Function prototype:</div><pre>OO_BOOL <span class=prototype_type><a href="javascript:show('OodleXIOQ_Wait_GetInfo.html')" class="blue">OodleXIOQ_Wait_GetInfo</a></span>( <span class=prototype_type><a href="javascript:show('OodleXIOQFile.html')" class="blue">OodleXIOQFile</a></span> file,
<span class=prototype_type><a href="javascript:show('OodleXFileInfo.html')" class="blue">OodleXFileInfo</a></span> * pInto,
OO_S32 * pAlignmentRequired OODEFAULT( NULL ) );</pre></div><div class=discussion_heading>Discussion</div>Get Info about a file ; if the file is not open yet, wait for it<div class=discussion_heading>Parameters</div> <table> <tr> <td style='vertical-align: top;' class=paramname><a id="OodleXIOQ_Wait_GetInfo.html_file" class=nohover>file</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> the IOQFile to query
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXIOQ_Wait_GetInfo.html_pInto" class=nohover>pInto</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> filled with <a href="javascript:show('OodleXFileInfo.html')" class="paragraph">OodleXFileInfo</a>
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXIOQ_Wait_GetInfo.html_pAlignmentRequired" class=nohover>pAlignmentRequired</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> (optional) filled with alignment required
</td></tr></table><div class=discussion_heading>Return Value</div> <table> <tr> <td style='vertical-align: top;' class=paramname><a id="OodleXIOQ_Wait_GetInfo.html_return" class=nohover>return</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> true if successful; if GetInfo returns false, pInto and pAlignmentRequired are untouched.
</td></tr></table><div class=discussion_heading>Discussion</div></p>
<p> This function is like <a href="javascript:show('OodleXIOQ_GetInfo.html')" class="paragraph">OodleXIOQ_GetInfo</a> , but will not return false if the Open operation is still pending; instead it
will block the calling thread until the Open is done so that info is available.
</p>
<p><br>&nbsp;<br> <table class=bar> <tr>
<td width=33% align=left><span class='arrowleft'></span><a href="javascript:show('OodleXIOQ_GetInfo.html')" class="paragraph">OodleXIOQ_GetInfo</a></td><td width=33% align=center><span class='arrowup'></span><a href="javascript:show('OodleXAPI_IOQ.html')" class="paragraph">OodleX low level async io</a></td><td width=33% align=right><span class='arrowright'></span><a href="javascript:show('OodleXIOQ_GetLastPendingOpOnFile.html')" class="paragraph">OodleXIOQ_GetLastPendingOpOnFile</a></td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="OODLE_MALLOC_MINIMUM_ALIGNMENT.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>OODLE_MALLOC_MINIMUM_ALIGNMENT</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "OODLE_MALLOC_MINIMUM_ALIGNMENT.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="OODLE_MALLOC_MINIMUM_ALIGNMENT.html_backmenu">
<table class=dropmenu>
<tr><td><span class='arrowright'></span>&nbsp;<a href="javascript:show('OODLE_JOB_MAX_DEPENDENCIES.html')" class="paragraph">OODLE_JOB_MAX_DEPENDENCIES</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<div class=prototype><div class=prototype_header>// Preprocessor definition:</div>
<pre>
<span class=prototype_type>#if defined(__RAD64__)</span>
<span class=prototype_type>#define</span> OODLE_MALLOC_MINIMUM_ALIGNMENT 16
<span class=prototype_type>#else</span>
<span class=prototype_type>#define</span> OODLE_MALLOC_MINIMUM_ALIGNMENT 8
<span class=prototype_type>#endif</span>
</pre></div></div>
<div class=discussion_heading>Description</div>
<table>
OodleMallocAligned will be asked to provide at least OODLE_MALLOC_MINIMUM_ALIGNMENT
<P>
OODLE_MALLOC_MINIMUM_ALIGNMENT is the size of two pointers.
</table>
</p>
<p> <br>&nbsp;<br> <table class=bar> <tr>
<td width=33% align=left><span class='arrowleft'></span><a href="javascript:show('OodleAPI_Base.html')" class="paragraph">Core Base</a></td><td width=33% align=center><span class='arrowup'></span><a href="javascript:show('OodleAPI_Base.html')" class="paragraph">Core Base</a></td><td width=33% align=right><span class='arrowright'></span><a href="javascript:show('OODLE_JOB_MAX_DEPENDENCIES.html')" class="paragraph">OODLE_JOB_MAX_DEPENDENCIES</a></td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="Oodle_FAQ_limit_encoder_memory_use.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>FAQ: How do I limit the encoder memory use?</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "Oodle_FAQ_limit_encoder_memory_use.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="Oodle_FAQ_limit_encoder_memory_use.html_backmenu">
<table class=dropmenu>
<tr><td><span class='arrowleft'></span>&nbsp;<a href="javascript:show('Oodle_FAQ_UseOodleWithNoAllocator.html')" class="paragraph">FAQ: How do I use Oodle with no allocator?</a></td></tr><tr><td><span class='arrowup'></span>&nbsp;<a href="javascript:show('Oodle_FAQ.html')" class="paragraph">Frequently Asked Questions</a></td></tr><tr><td><span class='arrowright'></span>&nbsp;<a href="javascript:show('Oodle_FAQ_MemoryUse.html')" class="paragraph">FAQ: How much memory do the Oodle compressors use ?</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<P>
If you wish to limit the encoder memory use, for runtime encoding :
</p>
<p>First of all use a compression level in the "fast/normal" range, not an optimal. The optimal levels
use a lot of memory, will call out to your installed malloc plugin (not use scratch), and is hard to
limit. The optimal levels are not intended for runtime compression.
</p>
<p>You can pass in preallocated scratch memory to <a href="javascript:show('OodleLZ_Compress.html')" class="paragraph">OodleLZ_Compress</a> using <i>scratchMem</i> and <i>scratchSize</i>
arguments. The encoder will take memory from this pool first before calling to your installed allocator.
</p>
<p>You can install your own allocator with <a href="javascript:show('OodleCore_Plugins_SetAllocators.html')" class="paragraph">OodleCore_Plugins_SetAllocators</a> , and then log the allocations
or make it an error if <a href="javascript:show('OodleLZ_Compress.html')" class="paragraph">OodleLZ_Compress</a> tries to use the allocator. That way you can ensure that
<a href="javascript:show('OodleLZ_Compress.html')" class="paragraph">OodleLZ_Compress</a> only takes memory from the pool you pass in.
</p>
<p>Okay, so now how much scratch memory to pass in?
</p>
<p>It depends on the <a href="javascript:show('OodleLZ_CompressOptions.html')" class="paragraph">OodleLZ_CompressOptions</a> and <a href="javascript:show('OodleLZ_CompressionLevel.html')" class="paragraph">OodleLZ_CompressionLevel</a> and <a href="javascript:show('OodleLZ_Compressor.html')" class="paragraph">OodleLZ_Compressor</a>, as
well as the length of the buffer you compress.
</p>
<p>You can call <a href="javascript:show('OodleLZ_GetCompressScratchMemBound.html')" class="paragraph">OodleLZ_GetCompressScratchMemBound</a> to get a bound on how much memory will be used. If you
provide that much scratch, Oodle will not need to allocate.
</p>
<p><a href="javascript:show('OodleLZ_GetCompressScratchMemBound.html')" class="paragraph">OodleLZ_GetCompressScratchMemBound</a> may return OODLELZ_SCRATCH_MEM_NO_BOUND which means it cannot provide
a strict bound.
</p>
<p>By default, memory use grows roughly proportionally to buffer size. If you want to force a lower maximum
memory use, you can modify the <a href="javascript:show('OodleLZ_CompressOptions.html','OodleLZ_CompressOptions.html_matchTableSizeLog2')" class="paragraph">OodleLZ_CompressOptions:matchTableSizeLog2</a>
setting. The majority of scratch memory use comes from 4 bytes per <i>matchTableSizeLog2</i> ; eg if
you set <i>matchTableSizeLog2</i> = 20 , that would use 4 MB for the "match table".
</p>
<p>Other than the match table, about 1 MB of additional scratch is needed by the encoder (for unbounded length
input buffers; smaller inputs need less), so at <i>matchTableSizeLog2</i> = 20 , you would need about 5 MB,
4 MB from the match table and 1 MB for other.<br>&nbsp;<br> <table class=bar> <tr>
<td width=33% align=left><span class='arrowleft'></span><a href="javascript:show('Oodle_FAQ_UseOodleWithNoAllocator.html')" class="paragraph">FAQ: How do I use Oodle with no allocator?</a></td><td width=33% align=center><span class='arrowup'></span><a href="javascript:show('Oodle_FAQ.html')" class="paragraph">Frequently Asked Questions</a></td><td width=33% align=right><span class='arrowright'></span><a href="javascript:show('Oodle_FAQ_MemoryUse.html')" class="paragraph">FAQ: How much memory do the Oodle compressors use ?</a></td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="OodleXIOQ_GetInfo.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>OodleXIOQ_GetInfo</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "OodleXIOQ_GetInfo.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="OodleXIOQ_GetInfo.html_backmenu">
<table class=dropmenu>
<tr><td><span class='arrowleft'></span>&nbsp;<a href="javascript:show('OodleXIOQ_Wait.html')" class="paragraph">OodleXIOQ_Wait</a></td></tr><tr><td><span class='arrowright'></span>&nbsp;<a href="javascript:show('OodleXIOQ_Wait_GetInfo.html')" class="paragraph">OodleXIOQ_Wait_GetInfo</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<div class=prototype><div class=prototype_header>// Function prototype:</div><pre>OO_BOOL <span class=prototype_type><a href="javascript:show('OodleXIOQ_GetInfo.html')" class="blue">OodleXIOQ_GetInfo</a></span>( <span class=prototype_type><a href="javascript:show('OodleXIOQFile.html')" class="blue">OodleXIOQFile</a></span> file,
<span class=prototype_type><a href="javascript:show('OodleXFileInfo.html')" class="blue">OodleXFileInfo</a></span> * pInto,
OO_S32 * pAlignmentRequired OODEFAULT( NULL ) );</pre></div><div class=discussion_heading>Discussion</div>Get Info about a file<div class=discussion_heading>Parameters</div> <table> <tr> <td style='vertical-align: top;' class=paramname><a id="OodleXIOQ_GetInfo.html_file" class=nohover>file</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> the IOQFile to query
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXIOQ_GetInfo.html_pInto" class=nohover>pInto</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> filled with <a href="javascript:show('OodleXFileInfo.html')" class="paragraph">OodleXFileInfo</a>
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXIOQ_GetInfo.html_pAlignmentRequired" class=nohover>pAlignmentRequired</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> (optional) filled with alignment required
</td></tr></table><div class=discussion_heading>Return Value</div> <table> <tr> <td style='vertical-align: top;' class=paramname><a id="OodleXIOQ_GetInfo.html_return" class=nohover>return</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> true if successful; if GetInfo returns false, pInto and pAlignmentRequired are untouched.
</td></tr></table><div class=discussion_heading>Discussion</div></p>
<p> If the file is not yet open, GetInfo will fail and return false. eg. if <a href="javascript:show('OodleXIOQ_OpenForRead_Async.html')" class="paragraph">OodleXIOQ_OpenForRead_Async</a> has been done
but the request is still pending.
</p>
<p> If the file size can not be queried it is set to <a href="javascript:show('OODLEX_FILE_SIZE_INVALID.html')" class="paragraph">OODLEX_FILE_SIZE_INVALID</a>.
</p>
<p> If <i>pAlignmentRequired</i> is given, it is filled with the alignment required to use this file.
<a href="javascript:show('OODLEX_IO_MAX_ALIGNMENT.html')" class="paragraph">OODLEX_IO_MAX_ALIGNMENT</a> is guaranteed to always be okay, so if you align to that then you are fine.
See <a href="javascript:show('OodleXIOQ_About.html')" class="paragraph">About OodleIOQ</a> for more about alignment.
</p>
<p><br>&nbsp;<br> <table class=bar> <tr>
<td width=33% align=left><span class='arrowleft'></span><a href="javascript:show('OodleXIOQ_Wait.html')" class="paragraph">OodleXIOQ_Wait</a></td><td width=33% align=center><span class='arrowup'></span><a href="javascript:show('OodleXAPI_IOQ.html')" class="paragraph">OodleX low level async io</a></td><td width=33% align=right><span class='arrowright'></span><a href="javascript:show('OodleXIOQ_Wait_GetInfo.html')" class="paragraph">OodleXIOQ_Wait_GetInfo</a></td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="example_lz_threadphased.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>example_lz_threadphased : Example of 2-thread ThreadPhased decoding</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "example_lz_threadphased.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="example_lz_threadphased.html_backmenu">
<table class=dropmenu>
<tr><td><span class='arrowleft'></span>&nbsp;<a href="javascript:show('example_lz_simple.html')" class="paragraph">example_lz_simple : Example demonstrating very simple LZ memory->memory compression using only Oodle Core</a></td></tr><tr><td><span class='arrowup'></span>&nbsp;<a href="javascript:show('examples.html')" class="paragraph">Examples</a></td></tr><tr><td><span class='arrowright'></span>&nbsp;<a href="javascript:show('example_network_client.html')" class="paragraph">example_network_client : Example with simple network client support</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<div class=discussion_heading>Discussion</div>Oodle example_lz_threadphased
</p>
<p>This example demonstrates the ability of Kraken to decode using "ThreadPhased" parallelism
</p>
<p>See <a href="javascript:show('OodleLZ_About_ThreadPhasedDecode.html')" class="paragraph">About OodleLZ ThreadPhased Decode</a> for details.
</p>
<p>ThreadPhased decoding provides a 1X-2X speedup, typically around 33%-50%
</p>
<p>This example implements an entire ThreadPhased decoder, in example_lz_threadphased_decompress.
</p>
<p>The idea is you may take this example code and modify it to run in your own threading or job system,
so that you may implement the threading however you look.
</p>
<p>example_lz_threadphased_decompress can be used without OodleX or the Oodle Worker system.
</p>
<p></p>
<p>In this example I use OodleX_CreateThread and OodleX_Semaphore ; these are just handy cross-platform
implementations for me. The intention is that you replace them with your own threading system calls.
</p>
<p>For the semaphore, it's important that it tries to avoid going into an OS Wait (thread sleep) when the
two threads are nearly synchronized. To avoid this you want a user-space spin-backoff loop to try to keep
the two threads awake together. One option is to use something like "fastsemaphore" as a wrapper to your
underlying OS semaphore :
</p>
<p>http://cbloomrants.blogspot.com/2011/12/12-08-11-some-semaphores.html
</p>
<p>If you use that "fastsemaphore" make sure to set
int spin_count = 1; // ! set this for your system
something like 100 is usually reasonable, and probably add a backoff.<div class=prototype> <pre>
#include "../include/oodle2x.h"
#include "ooex.h"
#include &lt;stdlib.h>
#include &lt;stdio.h>
#include &lt;string.h>
#include "make_example_input.h"
#ifdef BUILDING_EXAMPLE_CALLER
#define main <span class=prototype_type><a href="javascript:show('example_lz_threadphased.html')" class="blue">example_lz_threadphased</a></span>
#endif
<span style="color:#008000;">//===========================================================</span>
<span style="color:#008000;">// file names :</span>
static const char * in_name = "oodle_example_input_file";
<span style="color:#008000;">//===========================================================</span>
static bool example_lz_threadphased_decompress(void * comp_buf,OO_SINTa comp_len,void * dec_buf,OO_SINTa dec_size,bool async);
<span style="color:#008000;">//===========================================================</span>
extern "C" int main(int argc,char *argv[])
{
<span style="color:#008000;">// Init Oodle systems with default options :</span>
if ( ! <span class=prototype_type><a href="javascript:show('OodleX_Init_Default.html')" class="blue">OodleX_Init_Default</a></span>(<span class=prototype_type><a href="javascript:show('OODLE_HEADER_VERSION.html')" class="blue">OODLE_HEADER_VERSION</a></span>) )
{
fprintf(stderr,"OodleX_Init failed.\n");
return 10;
}
if ( argc >= 2 ) in_name = argv[1];
else make_example_input(in_name);
OodleXLog_Printf_v1("example_lz_threadphased : %s\n",in_name);
<span style="color:#008000;">// read the input file to the global buffer :</span>
OO_S64 in_size_64;
void * in_buffer = <span class=prototype_type><a href="javascript:show('OodleXIOQ_ReadMallocWholeFile_AsyncAndWait.html')" class="blue">OodleXIOQ_ReadMallocWholeFile_AsyncAndWait</a></span>(in_name,&amp;in_size_64);
if ( ! in_buffer)
{
OodleXLog_Printf_v0("failed to read %s\n",in_name);
return 10;
}
OO_SINTa in_size = <span class=prototype_type><a href="javascript:show('OodleX_S64_to_SINTa_check.html')" class="blue">OodleX_S64_to_SINTa_check</a></span>( in_size_64 );
<span style="color:#008000;">//=========================================</span>
<span style="color:#008000;">// select options :</span>
<span class=prototype_type><a href="javascript:show('OodleLZ_Compressor.html')" class="blue">OodleLZ_Compressor</a></span> compressor = OodleLZ_Compressor_Kraken;
<span style="color:#008000;">//OodleLZ_CompressionLevel level = OodleLZ_CompressionLevel_Normal;</span>
<span class=prototype_type><a href="javascript:show('OodleLZ_CompressionLevel.html')" class="blue">OodleLZ_CompressionLevel</a></span> level = OodleLZ_CompressionLevel_Fast;
<span style="color:#008000;">// this example is only valid for compressors that support ThreadPhased decode : (eg. Kraken)</span>
OOEX_ASSERT( <span class=prototype_type><a href="javascript:show('OodleLZ_Compressor_CanDecodeThreadPhased.html')" class="blue">OodleLZ_Compressor_CanDecodeThreadPhased</a></span>(compressor) );
<span style="color:#008000;">//=========================================</span>
<span style="color:#008000;">// allocate memory big enough for compressed data :</span>
void * comp_buf = <span class=prototype_type><a href="javascript:show('OodleXMalloc.html')" class="blue">OodleXMalloc</a></span>( <span class=prototype_type><a href="javascript:show('OodleLZ_GetCompressedBufferSizeNeeded.html')" class="blue">OodleLZ_GetCompressedBufferSizeNeeded</a></span>(compressor,in_size) );
<span style="color:#008000;">// memory to decode to :</span>
void * dec_buf = <span class=prototype_type><a href="javascript:show('OodleXMalloc.html')" class="blue">OodleXMalloc</a></span>( in_size );
<span style="color:#008000;">//=========================================</span>
<span style="color:#008000;">// compress the input :</span>
<span style="color:#008000;">// compress :</span>
<span style="color:#008000;">// this is just a normal whole-block compress, no special parallel mode is needed</span>
OO_SINTa comp_len = <span class=prototype_type><a href="javascript:show('OodleLZ_Compress.html')" class="blue">OodleLZ_Compress</a></span>(compressor,in_buffer,in_size,comp_buf,level);
OodleXLog_Printf_v1("Compressed : %d -> %d\n",(int)in_size,(int)comp_len);
<span style="color:#008000;">//=======================================</span>
</pre></div>We can decompress asynchronously using the "ThreadPhased" helper in OodleX.
</p>
<p> The Narrow helper uses 2 threads and frees up the calling thread to do other work.
</p>
<p> OodleXLZ_Decompress_ThreadPhased_Narrow_Async uses the OodleX Worker thread system, which is started by
default in OodleX_Init.
</p>
<p> NOTE for maximum speed you should pass in the scratch space needed by OodleXLZ_Decompress_ThreadPhased_Narrow_Async
pre-allocated, so it doesn't have to do the allocation internally.<div class=prototype> <pre>
OodleXLog_Printf_v1("OodleXLZ_Decompress_ThreadPhased_Narrow_Async...\n");
<span class=prototype_type><a href="javascript:show('OodleXHandle.html')" class="blue">OodleXHandle</a></span> decomp_handle = <span class=prototype_type><a href="javascript:show('OodleXLZ_Decompress_ThreadPhased_Narrow_Async.html')" class="blue">OodleXLZ_Decompress_ThreadPhased_Narrow_Async</a></span>(comp_buf,comp_len,dec_buf,in_size);
<span style="color:#008000;">// .. can do other work on the main thread now ..</span>
<span class=prototype_type><a href="javascript:show('OodleXStatus.html')" class="blue">OodleXStatus</a></span> decomp_status = OodleX_WaitAndDelete(decomp_handle);
if ( decomp_status == OodleXStatus_Error )
{
OodleXLog_Printf_v1("Error!\n");
}
<span style="color:#008000;">// check it :</span>
OOEX_ASSERT( memcmp(in_buffer,dec_buf,in_size) == 0 );
<span style="color:#008000;">//=======================================</span>
<span style="color:#008000;">// do our own thread-phased decode :</span>
OodleXLog_Printf_v1("example_lz_threadphased_decompress ");
<span style="color:#008000;">// run a few reps to stress test : </span>
for(int rep=0;rep&lt;10;rep++)
{
<span style="color:#008000;">// run async and sync options :</span>
for(int async = 0;async&lt;=1;async++)
{
OodleXLog_Printf_v1(async ? "+" : "-");
<span style="color:#008000;">// wipe out dec_buf to make sure we decode correctly :</span>
memset(dec_buf,0xEE,in_size);
if ( ! example_lz_threadphased_decompress(comp_buf,comp_len,dec_buf,in_size,!!async) )
{
OodleXLog_Printf_v1("Error!\n");
}
<span style="color:#008000;">// check it :</span>
OOEX_ASSERT( memcmp(in_buffer,dec_buf,in_size) == 0 );
}
}
OodleXLog_Printf_v1("\n");
<span style="color:#008000;">//=======================================</span>
<span class=prototype_type><a href="javascript:show('OodleXFree.html')" class="blue">OodleXFree</a></span>(comp_buf);
<span class=prototype_type><a href="javascript:show('OodleXFree.html')" class="blue">OodleXFree</a></span>(dec_buf);
<span class=prototype_type><a href="javascript:show('OodleXFree_IOAligned.html')" class="blue">OodleXFree_IOAligned</a></span>(in_buffer);
<span class=prototype_type><a href="javascript:show('OodleX_Shutdown.html')" class="blue">OodleX_Shutdown</a></span>(NULL,OodleX_Shutdown_LogLeaks_Yes,0);
return 0;
}
<span style="color:#008000;">//===========================================================</span>
</pre></div>**
</p>
<p>example_lz_threadphased_threadfunc
</p>
<p>Example of how to run a ThreadPhased decode yourself.
</p>
<p>The basic idea of ThreadPhased decoding is that the OodleLZ_Decompress work on each BLOCK can be
split into two phases. This can be invoked by just calling OodleLZ_Decompress twice on the same
block, first with OodleLZ_Decode_ThreadPhase1, then with OodleLZ_Decode_ThreadPhase2.
</p>
<p>To get parallelism, we can run the two phases on two separate threads.
</p>
<p>The rule is that you must run the Phase2 on each block after the Phase1 for that block is done,
and with the same "decoderMem" pointer. The Phase2 decodes on all blocks must be done in
sequential order (unless they are Seek Resets).
The decoder memory used for OodleLZ_Decompress here must be larger than normal, of size
OodleLZ_ThreadPhased_BlockDecoderMemorySizeNeeded().
</p>
<p>Our thread model here is a two-thread circular buffer scan with semaphore signalling.
</p>
<p>Thread 1 does :
</p>
<p> For each block
Wait on sem_blocksavail to get an available circular buffer slot
Do Phase1 Decompress into a slot
Post sem_phase1done
</p>
<p>Thread 2 does :
</p>
<p> For each block
Wait on sem_phase1done to get a slot with phase1 decode done
Do Phase2 Decompress on that slot
Post sem_blocksavail to signal Thread 1 that this slot may be reused
</p>
<p> </p>
<p>**<div class=prototype> <pre>
struct example_lz_threadphased_threaddata
{
volatile OO_U32 * error_cancel;
<span class=prototype_type><a href="javascript:show('OodleX_Semaphore.html')" class="blue">OodleX_Semaphore</a></span> * sem_consume;
<span class=prototype_type><a href="javascript:show('OodleX_Semaphore.html')" class="blue">OodleX_Semaphore</a></span> * sem_produce;
OO_SINTa num_blocks;
OO_SINTa num_scratch_blocks;
OO_U8 * scratch_mem;
OO_SINTa scratch_block_size;
OO_U8 * rawBuf; OO_SINTa rawSize;
const OO_U8 * compBuf; OO_SINTa compSize;
<span class=prototype_type><a href="javascript:show('OodleLZ_Decode_ThreadPhase.html')" class="blue">OodleLZ_Decode_ThreadPhase</a></span> threadPhase;
bool success;
};
#define THREAD_ERROR 0
#define THREAD_SUCCESS 1
<span style="color:#008000;">// thread_function_DecodePhase</span>
<span style="color:#008000;">// can be used for both Phase1 and Phase2 !</span>
static OO_U32 OODLE_CALLBACK example_lz_threadphased_threadfunc( void * user_data )
{
example_lz_threadphased_threaddata * data = (example_lz_threadphased_threaddata *)user_data;
const OO_U8 * compPtr = (OO_U8 *)(data->compBuf);
const OO_U8 * compEnd = compPtr + data->compSize;
OO_SINTa decoderMemSize = data->scratch_block_size;
OO_SINTa scratch_i = 0;
for(OO_SINTa block_pos = 0;block_pos &lt; data->rawSize;block_pos += <span class=prototype_type><a href="javascript:show('OODLELZ_BLOCK_LEN.html')" class="blue">OODLELZ_BLOCK_LEN</a></span>, scratch_i++)
{
<span style="color:#008000;">// consume one :</span>
<span class=prototype_type><a href="javascript:show('OodleX_Semaphore_Wait.html')" class="blue">OodleX_Semaphore_Wait</a></span>(data->sem_consume);
<span style="color:#008000;">// relaxed load of shared error_cancel variable ; Sem Wait acts as Acquire barrier</span>
if ( *(data->error_cancel) ) return THREAD_ERROR;
if ( scratch_i == data->num_scratch_blocks ) scratch_i = 0;
OO_U8 * decoderMem = data->scratch_mem + scratch_i * decoderMemSize;
OO_U8 * chunk_ptr = (OO_U8 *)(data->rawBuf) + block_pos;
OO_SINTa block_len = OOEX_MIN((data->rawSize - block_pos),<span class=prototype_type><a href="javascript:show('OODLELZ_BLOCK_LEN.html')" class="blue">OODLELZ_BLOCK_LEN</a></span>);
OO_BOOL indy;
OO_SINTa block_complen = <span class=prototype_type><a href="javascript:show('OodleLZ_GetCompressedStepForRawStep.html')" class="blue">OodleLZ_GetCompressedStepForRawStep</a></span>(compPtr,compEnd-compPtr,block_pos,block_len,NULL,&amp;indy);
if ( block_complen &lt;= 0 )
{
<span style="color:#008000;">// handle error</span>
<span style="color:#008000;">// relaxed store of shared variable; Sem Post acts as release barrier</span>
*(data->error_cancel) = 1;
<span class=prototype_type><a href="javascript:show('OodleX_Semaphore_Post.html')" class="blue">OodleX_Semaphore_Post</a></span>(data->sem_produce);
return THREAD_ERROR;
}
OO_SINTa gotLen = <span class=prototype_type><a href="javascript:show('OodleLZ_Decompress.html')" class="blue">OodleLZ_Decompress</a></span>(compPtr,block_complen,chunk_ptr,block_len,
OodleLZ_FuzzSafe_Yes,OodleLZ_CheckCRC_No,OodleLZ_Verbosity_None,
data->rawBuf,data->rawSize,
NULL,NULL,
decoderMem,decoderMemSize,
data->threadPhase
);
OOEX_ASSERT( gotLen == block_len+block_pos );
if ( gotLen != block_len+block_pos )
{
<span style="color:#008000;">// handle error</span>
<span style="color:#008000;">// relaxed store of shared variable; Sem Post acts as release barrier</span>
*(data->error_cancel) = 1;
<span class=prototype_type><a href="javascript:show('OodleX_Semaphore_Post.html')" class="blue">OodleX_Semaphore_Post</a></span>(data->sem_produce);
return THREAD_ERROR;
}
compPtr += block_complen;
<span class=prototype_type><a href="javascript:show('OodleX_Semaphore_Post.html')" class="blue">OodleX_Semaphore_Post</a></span>(data->sem_produce);
}
data->success = true;
return THREAD_SUCCESS;
}
static bool example_lz_threadphased_decompress(void * comp_buf,OO_SINTa comp_len,void * dec_buf,OO_SINTa dec_size,bool async)
{
</pre></div>*
</p>
<p> circularBufferBlockCount is the number of circular buffer slots for the two threads to
communicate through
</p>
<p> circularBufferBlockCount >= 2
higher is faster because it allows less synchronization of the two threads
lower means less memory required
circularBufferBlockCount >= 4 is reasonable
circularBufferBlockCount >= 6 is close to full speed
</p>
<p> *<div class=prototype> <pre>
OO_SINTa circularBufferBlockCount = 6; <span style="color:#008000;">// parameter</span>
<span style="color:#008000;">// async is an option for whether the whole operation is run async off this thread or not</span>
<span style="color:#008000;">// (eg. with 2 additional threads or 1 additional thread)</span>
<span style="color:#008000;">// check that the data contains a valid ThreadPhased compressor :</span>
<span class=prototype_type><a href="javascript:show('OodleLZ_Compressor.html')" class="blue">OodleLZ_Compressor</a></span> compressor = <span class=prototype_type><a href="javascript:show('OodleLZ_GetAllChunksCompressor.html')" class="blue">OodleLZ_GetAllChunksCompressor</a></span>(comp_buf,comp_len,dec_size);
if (! <span class=prototype_type><a href="javascript:show('OodleLZ_Compressor_CanDecodeThreadPhased.html')" class="blue">OodleLZ_Compressor_CanDecodeThreadPhased</a></span>(compressor) )
{
OodleXLog_Printf_v1("Asked for ThreadPhase decode but ! OodleLZ_Compressor_CanDecodeThreadPhased\n");
return false;
}
<span style="color:#008000;">// count the number of OODLELZ_BLOCK_LEN in the total size :</span>
OO_SINTa nBlocks = (dec_size + <span class=prototype_type><a href="javascript:show('OODLELZ_BLOCK_LEN.html')" class="blue">OODLELZ_BLOCK_LEN</a></span>-1)/<span class=prototype_type><a href="javascript:show('OODLELZ_BLOCK_LEN.html')" class="blue">OODLELZ_BLOCK_LEN</a></span>;
<span style="color:#008000;">// don't need more than nBlocks :</span>
circularBufferBlockCount = OOEX_MIN(circularBufferBlockCount,nBlocks);
<span style="color:#008000;">// allocate space for the scratch circular buffer :</span>
OO_SINTa scratchBlockSize = <span class=prototype_type><a href="javascript:show('OodleLZ_ThreadPhased_BlockDecoderMemorySizeNeeded.html')" class="blue">OodleLZ_ThreadPhased_BlockDecoderMemorySizeNeeded</a></span>();
OO_SINTa scratchBufSize = scratchBlockSize * circularBufferBlockCount;
<span style="color:#008000;">// NOTE in production you may wish to preallocate this memory</span>
void * scratchBuf = <span class=prototype_type><a href="javascript:show('OodleXMalloc.html')" class="blue">OodleXMalloc</a></span>(scratchBufSize);
<span style="color:#008000;">//=========================================================</span>
<span style="color:#008000;">// set up the data needed for the thread phases</span>
<span style="color:#008000;">// NOTE if you want to make the whole decode asynchronous,</span>
<span style="color:#008000;">// you can't put this on the stack, you need to package it up in memory</span>
<span style="color:#008000;">// OodleX_Semaphore just initialize with 0 :</span>
<span class=prototype_type><a href="javascript:show('OodleX_Semaphore.html')" class="blue">OodleX_Semaphore</a></span> sem_blocksavail = 0;
<span class=prototype_type><a href="javascript:show('OodleX_Semaphore.html')" class="blue">OodleX_Semaphore</a></span> sem_phase1done = 0;
OO_U32 shared_error_cancel = 0; <span style="color:#008000;">// shared atomic variable</span>
<span style="color:#008000;">// starting state is that all circular buffer slots are available :</span>
<span class=prototype_type><a href="javascript:show('OodleX_Semaphore_Post.html')" class="blue">OodleX_Semaphore_Post</a></span>(&amp;sem_blocksavail,(OO_S32)circularBufferBlockCount);
example_lz_threadphased_threaddata td1 = { 0 };
td1.error_cancel = &amp;shared_error_cancel;
td1.success = false;
td1.compBuf = (OO_U8 *)(comp_buf);
td1.compSize = comp_len;
td1.rawBuf = (OO_U8 *)(dec_buf);
td1.rawSize = dec_size;
td1.num_blocks = nBlocks;
td1.num_scratch_blocks = circularBufferBlockCount;
td1.scratch_mem = (OO_U8 *)(scratchBuf);
td1.scratch_block_size = scratchBlockSize;
<span style="color:#008000;">// thread 1 waits for blocks to be available in the circular buffer</span>
<span style="color:#008000;">// and posts that phase1 is done</span>
td1.threadPhase = OodleLZ_Decode_ThreadPhase1;
td1.sem_consume = &amp;sem_blocksavail;
td1.sem_produce = &amp;sem_phase1done;
<span style="color:#008000;">// thread 2 waits for each block to reach phase1done</span>
<span style="color:#008000;">// and then posts that the block is reusable</span>
<span style="color:#008000;">// same as thread 1, just swap the semaphores :</span>
example_lz_threadphased_threaddata td2;
td2 = td1;
td2.threadPhase = OodleLZ_Decode_ThreadPhase2;
td2.sem_consume = &amp;sem_phase1done;
td2.sem_produce = &amp;sem_blocksavail;
<span style="color:#008000;">// create a thread to run Phase1 :</span>
<span style="color:#008000;">// NOTE : in production you probably don't want to create a thread every time you make</span>
<span style="color:#008000;">// this decompress call. Rather use an idle thread that's already created.</span>
OodleX_Thread thread1 = <span class=prototype_type><a href="javascript:show('OodleX_CreateThread.html')" class="blue">OodleX_CreateThread</a></span>(example_lz_threadphased_threadfunc,&amp;td1);
<span style="color:#008000;">// either run Phase2 asynchronously (on another thread) or synchronously on this thread :</span>
if ( async )
{
OodleX_Thread thread2 = <span class=prototype_type><a href="javascript:show('OodleX_CreateThread.html')" class="blue">OodleX_CreateThread</a></span>(example_lz_threadphased_threadfunc,&amp;td2);
<span style="color:#008000;">// ... current thread is now available while decompress runs on 2 other threads ...</span>
<span style="color:#008000;">// ... return and do other work ...</span>
<span class=prototype_type><a href="javascript:show('OodleX_WaitAndDestroyThread.html')" class="blue">OodleX_WaitAndDestroyThread</a></span>(thread2);
}
else
{
<span style="color:#008000;">// synchronous version - just run Phase2 on this thread :</span>
example_lz_threadphased_threadfunc(&amp;td2);
}
<span class=prototype_type><a href="javascript:show('OodleX_WaitAndDestroyThread.html')" class="blue">OodleX_WaitAndDestroyThread</a></span>(thread1);
<span style="color:#008000;">// OodleX_Semaphore doesn't need cleanup</span>
<span style="color:#008000;">//===========================================================</span>
<span class=prototype_type><a href="javascript:show('OodleXFree.html')" class="blue">OodleXFree</a></span>(scratchBuf);
bool ok = td1.success &amp;&amp; td2.success;
return ok;
}
</pre></div><br>&nbsp;<br> <table class=bar> <tr>
<td width=33% align=left><span class='arrowleft'></span><a href="javascript:show('example_lz_simple.html')" class="paragraph">example_lz_simple : Example demonstrating very simple LZ memory->memory compression using only Oodle Core</a></td><td width=33% align=center><span class='arrowup'></span><a href="javascript:show('examples.html')" class="paragraph">Examples</a></td><td width=33% align=right><span class='arrowright'></span><a href="javascript:show('example_network_client.html')" class="paragraph">example_network_client : Example with simple network client support</a></td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="OodleXIOQ_WriteWholeFile_AsyncAndWait.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>OodleXIOQ_WriteWholeFile_AsyncAndWait</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "OodleXIOQ_WriteWholeFile_AsyncAndWait.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="OodleXIOQ_WriteWholeFile_AsyncAndWait.html_backmenu">
<table class=dropmenu>
<tr><td><span class='arrowleft'></span>&nbsp;<a href="javascript:show('OodleXIOQ_ReadMallocWholeFile_AsyncAndWait.html')" class="paragraph">OodleXIOQ_ReadMallocWholeFile_AsyncAndWait</a></td></tr><tr><td><span class='arrowright'></span>&nbsp;<a href="javascript:show('OodleXIOQ_CopyFile_AsyncAndWait.html')" class="paragraph">OodleXIOQ_CopyFile_AsyncAndWait</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<div class=prototype><div class=prototype_header>// Function prototype:</div><pre>OO_BOOL <span class=prototype_type><a href="javascript:show('OodleXIOQ_WriteWholeFile_AsyncAndWait.html')" class="blue">OodleXIOQ_WriteWholeFile_AsyncAndWait</a></span>( const char * vfsName,
const void * buffer,
OO_SINTa size,
<span class=prototype_type><a href="javascript:show('OodleXFileOpenFlags.html')" class="blue">OodleXFileOpenFlags</a></span> fileOpenFlags OODEFAULT( OodleXFileOpenFlags_Default ) );</pre></div><div class=discussion_heading>Discussion</div>See <a href="javascript:show('OodleXIOQ_OpenWriteWholeFileClose_Async.html')" class="paragraph">OodleXIOQ_OpenWriteWholeFileClose_Async</a>
<br>&nbsp;<br> <table class=bar> <tr>
<td width=33% align=left><span class='arrowleft'></span><a href="javascript:show('OodleXIOQ_ReadMallocWholeFile_AsyncAndWait.html')" class="paragraph">OodleXIOQ_ReadMallocWholeFile_AsyncAndWait</a></td><td width=33% align=center><span class='arrowup'></span><a href="javascript:show('OodleXAPI_IOQ.html')" class="paragraph">OodleX low level async io</a></td><td width=33% align=right><span class='arrowright'></span><a href="javascript:show('OodleXIOQ_CopyFile_AsyncAndWait.html')" class="paragraph">OodleXIOQ_CopyFile_AsyncAndWait</a></td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="OodleAPI_Base.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>Core Base</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "OodleAPI_Base.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="OodleAPI_Base.html_backmenu">
<table class=dropmenu>
<tr><td><span class='arrowup'></span>&nbsp;<a href="javascript:show('OodleCoreAPI.html')" class="paragraph">Oodle2 Core API Documentation</a></td></tr><tr><td><span class='arrowright'></span>&nbsp;<a href="javascript:show('OodleAPI_OodleCore_Plugins.html')" class="paragraph">Core plugins</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<ul class='TOCItem'>
<li><span onClick="HandleClick(event, null); return false" class='TOCGroup closedbook_icon'></span>&nbsp;Defines</li>
<ul style="display:none" class='TOCItem'>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OODLE_MALLOC_MINIMUM_ALIGNMENT.html')">OODLE_MALLOC_MINIMUM_ALIGNMENT</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OODLE_JOB_MAX_DEPENDENCIES.html')">OODLE_JOB_MAX_DEPENDENCIES</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OODLE_JOB_NULL_HANDLE.html')">OODLE_JOB_NULL_HANDLE</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('t_fp_Oodle_Job.html')">t_fp_Oodle_Job</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OODLE_HEADER_VERSION.html')">OODLE_HEADER_VERSION</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleNetworkVersion.html')">OodleNetworkVersion</a></li>
</ul>
<li><span onClick="HandleClick(event, null); return false" class='TOCGroup closedbook_icon'></span>&nbsp;Enumerants</li>
<ul style="display:none" class='TOCItem'>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('Oodle_UsageWarnings.html')">Oodle_UsageWarnings</a></li>
</ul>
<li><span onClick="HandleClick(event, null); return false" class='TOCGroup closedbook_icon'></span>&nbsp;Structures</li>
<ul style="display:none" class='TOCItem'>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleConfigValues.html')">OodleConfigValues</a></li>
</ul>
<li><span onClick="HandleClick(event, null); return false" class='TOCGroup closedbook_icon'></span>&nbsp;Functions</li>
<ul style="display:none" class='TOCItem'>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('Oodle_GetConfigValues.html')">Oodle_GetConfigValues</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('Oodle_SetConfigValues.html')">Oodle_SetConfigValues</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('Oodle_SetUsageWarnings.html')">Oodle_SetUsageWarnings</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('Oodle_CheckVersion.html')">Oodle_CheckVersion</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('Oodle_LogHeader.html')">Oodle_LogHeader</a></li>
</ul>
<li><span onClick="HandleClick(event, null); return false" class='TOCGroup closedbook_icon'></span>&nbsp;Typedefs</li>
<ul style="display:none" class='TOCItem'>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('t_OodleFPVoidVoid.html')">t_OodleFPVoidVoid</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('t_OodleFPVoidVoidStar.html')">t_OodleFPVoidVoidStar</a></li>
</ul>
</ul>
<br>&nbsp;<br> <table class=bar> <tr>
<td width=33% align=left><span class='arrowleft'></span><a href="javascript:show('OodleCoreAPI.html')" class="paragraph">Oodle2 Core API Documentation</a></td><td width=33% align=center><span class='arrowup'></span><a href="javascript:show('OodleCoreAPI.html')" class="paragraph">Oodle2 Core API Documentation</a></td><td width=33% align=right><span class='arrowright'></span><a href="javascript:show('OODLE_MALLOC_MINIMUM_ALIGNMENT.html')" class="paragraph">OODLE_MALLOC_MINIMUM_ALIGNMENT</a></td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="OodleXIOQ_OpenForWriteTempName_Async.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>OodleXIOQ_OpenForWriteTempName_Async</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "OodleXIOQ_OpenForWriteTempName_Async.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="OodleXIOQ_OpenForWriteTempName_Async.html_backmenu">
<table class=dropmenu>
<tr><td><span class='arrowleft'></span>&nbsp;<a href="javascript:show('OodleXIOQ_OpenForWriteCreate_Async.html')" class="paragraph">OodleXIOQ_OpenForWriteCreate_Async</a></td></tr><tr><td><span class='arrowright'></span>&nbsp;<a href="javascript:show('OodleXIOQ_CloseFile_Async.html')" class="paragraph">OodleXIOQ_CloseFile_Async</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<div class=prototype><div class=prototype_header>// Function prototype:</div><pre><span class=prototype_type><a href="javascript:show('OodleXHandle.html')" class="blue">OodleXHandle</a></span> <span class=prototype_type><a href="javascript:show('OodleXIOQ_OpenForWriteTempName_Async.html')" class="blue">OodleXIOQ_OpenForWriteTempName_Async</a></span>( <span class=prototype_type><a href="javascript:show('OodleXIOQFile.html')" class="blue">OodleXIOQFile</a></span> * pFile,
const char * nameBase OODEFAULT( NULL ),
OO_S64 initialFileSize OODEFAULT( <span class=prototype_type><a href="javascript:show('OODLEX_FILE_OPEN_NO_RESERVE_SIZE.html')" class="blue">OODLEX_FILE_OPEN_NO_RESERVE_SIZE</a></span> ),
<span class=prototype_type><a href="javascript:show('OodleXFileOpenFlags.html')" class="blue">OodleXFileOpenFlags</a></span> fileOpenFlags OODEFAULT( OodleXFileOpenFlags_Default ),
const <span class=prototype_type><a href="javascript:show('OodleXFileOpsVTable.html')" class="blue">OodleXFileOpsVTable</a></span> * vtable OODEFAULT( NULL ),
<span class=prototype_type><a href="javascript:show('OodleXHandleAutoDelete.html')" class="blue">OodleXHandleAutoDelete</a></span> autoDelete OODEFAULT( OodleXHandleAutoDelete_No ),
<span class=prototype_type><a href="javascript:show('OodleXPriority.html')" class="blue">OodleXPriority</a></span> priority OODEFAULT( OodleXPriority_Normal ),
const <span class=prototype_type><a href="javascript:show('OodleXHandle.html')" class="blue">OodleXHandle</a></span> * dependencies OODEFAULT( NULL ),
OO_S32 numDependencies OODEFAULT( 0 ) );</pre></div><div class=discussion_heading>Discussion</div>Start opening a file for write<div class=discussion_heading>Parameters</div> <table> <tr> <td style='vertical-align: top;' class=paramname><a id="OodleXIOQ_OpenForWriteTempName_Async.html_pFile" class=nohover>pFile</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> filled with a handle to the file which will be opened
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXIOQ_OpenForWriteTempName_Async.html_nameBase" class=nohover>nameBase</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> (optional) prefix of the temp file name that will be written (VFS, UTF-8)
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXIOQ_OpenForWriteTempName_Async.html_initialFileSize" class=nohover>initialFileSize</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> (optional) pre-allocate file size for writing (must be <a href="javascript:show('OODLEX_IO_MAX_ALIGNMENT.html')" class="paragraph">OODLEX_IO_MAX_ALIGNMENT</a> aligned)
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXIOQ_OpenForWriteTempName_Async.html_fileOpenFlags" class=nohover>fileOpenFlags</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> (optional) flags for the os file open (see <a href="javascript:show('OodleXFileOpenFlags.html')" class="paragraph">OodleXFileOpenFlags</a>)
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXIOQ_OpenForWriteTempName_Async.html_vtable" class=nohover>vtable</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> (optional) the <a href="javascript:show('OodleXFileOpsVTable.html')" class="paragraph">OodleXFileOpsVTable</a> to use for all ops on this file
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXIOQ_OpenForWriteTempName_Async.html_autoDelete" class=nohover>autoDelete</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> (optional) see <a href="javascript:show('OodleXHandleAutoDelete.html')" class="paragraph">OodleXHandleAutoDelete</a>
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXIOQ_OpenForWriteTempName_Async.html_priority" class=nohover>priority</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> (optional) priority of the operation ; see <a href="javascript:show('OodleXPriority.html')" class="paragraph">OodleXPriority</a>
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXIOQ_OpenForWriteTempName_Async.html_dependencies" class=nohover>dependencies</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> (optional) dependencies; the async op won't start until these are all complete; note : these are not freed, they must be autodelete or you must free them some other way.
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXIOQ_OpenForWriteTempName_Async.html_numDependencies" class=nohover>numDependencies</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> (optional) number of handles in <i>deps</i> array
</td></tr></table><div class=discussion_heading>Return Value</div> <table> <tr> <td style='vertical-align: top;' class=paramname><a id="OodleXIOQ_OpenForWriteTempName_Async.html_return" class=nohover>return</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> handle to the operation, or 0 if it could not be started (usually due to invalid args)
</td></tr></table><div class=discussion_heading>Discussion</div></p>
<p> Same as <a href="javascript:show('OodleXIOQ_OpenForWriteCreate_Async.html')" class="paragraph">OodleXIOQ_OpenForWriteCreate_Async</a> except that it creates a unique temp name to write to. The temp name starts with
<i>nameBase</i>, if given. Providing <i>nameBase</i> is helpful because it lets Oodle put the temp file in the same directory as the
final file name, which ensures that the final rename can be done without copying.
</p>
<p> Should be used with <a href="javascript:show('OodleXIOQ_CloseFileRename_Async.html')" class="paragraph">OodleXIOQ_CloseFileRename_Async</a>.
</p>
<p> Writing to a temp name and then renaming over the desired output file only on successful completion is the
recommended way to write all files. It means you won't destroy the user's data by failing to successfully
overwrite a previously existing good file.
<br>&nbsp;<br> <table class=bar> <tr>
<td width=33% align=left><span class='arrowleft'></span><a href="javascript:show('OodleXIOQ_OpenForWriteCreate_Async.html')" class="paragraph">OodleXIOQ_OpenForWriteCreate_Async</a></td><td width=33% align=center><span class='arrowup'></span><a href="javascript:show('OodleXAPI_IOQ.html')" class="paragraph">OodleX low level async io</a></td><td width=33% align=right><span class='arrowright'></span><a href="javascript:show('OodleXIOQ_CloseFile_Async.html')" class="paragraph">OodleXIOQ_CloseFile_Async</a></td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="OodleX_LogSystemInfo.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>OodleX_LogSystemInfo</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "OodleX_LogSystemInfo.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="OodleX_LogSystemInfo.html_backmenu">
<table class=dropmenu>
<tr><td><span class='arrowleft'></span>&nbsp;<a href="javascript:show('OodleX_Init_Default.html')" class="paragraph">OodleX_Init_Default</a></td></tr><tr><td><span class='arrowright'></span>&nbsp;<a href="javascript:show('OodleX_Shutdown.html')" class="paragraph">OodleX_Shutdown</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<div class=prototype><div class=prototype_header>// Function prototype:</div><pre>void <span class=prototype_type><a href="javascript:show('OodleX_LogSystemInfo.html')" class="blue">OodleX_LogSystemInfo</a></span>( );</pre></div><div class=discussion_heading>Discussion</div>Log some info about the platform<div class=discussion_heading>Discussion</div>This function should be called after <a href="javascript:show('OodleX_Init.html')" class="paragraph">OodleX_Init</a>.
</p>
<p> It prints some info to the Oodle Log about the Oodle build and your system.
This is a helpful thing to include in debug reports sent to RAD.
<br>&nbsp;<br> <table class=bar> <tr>
<td width=33% align=left><span class='arrowleft'></span><a href="javascript:show('OodleX_Init_Default.html')" class="paragraph">OodleX_Init_Default</a></td><td width=33% align=center><span class='arrowup'></span><a href="javascript:show('OodleXAPI_Init.html')" class="paragraph">OodleX Startup and Shutdown</a></td><td width=33% align=right><span class='arrowright'></span><a href="javascript:show('OodleX_Shutdown.html')" class="paragraph">OodleX_Shutdown</a></td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="OodleX_Init.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>OodleX_Init</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "OodleX_Init.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="OodleX_Init.html_backmenu">
<table class=dropmenu>
<tr><td><span class='arrowleft'></span>&nbsp;<a href="javascript:show('OodleX_Init_GetDefaults_Minimal.html')" class="paragraph">OodleX_Init_GetDefaults_Minimal</a></td></tr><tr><td><span class='arrowright'></span>&nbsp;<a href="javascript:show('OodleX_Init_Default.html')" class="paragraph">OodleX_Init_Default</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<div class=prototype><div class=prototype_header>// Function prototype:</div><pre>OO_BOOL <span class=prototype_type><a href="javascript:show('OodleX_Init.html')" class="blue">OodleX_Init</a></span>( OO_U32 oodle_header_version,
const <span class=prototype_type><a href="javascript:show('OodleXInitOptions.html')" class="blue">OodleXInitOptions</a></span> * pOptions );</pre></div><div class=discussion_heading>Discussion</div>Initialize Oodle<div class=discussion_heading>Parameters</div> <table> <tr> <td style='vertical-align: top;' class=paramname><a id="OodleX_Init.html_oodle_header_version" class=nohover>oodle_header_version</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> pass <a href="javascript:show('OODLE_HEADER_VERSION.html')" class="paragraph">OODLE_HEADER_VERSION</a> here
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleX_Init.html_pOptions" class=nohover>pOptions</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> options for Init; must not be NULL; use <a href="javascript:show('OodleX_Init_Default.html')" class="paragraph">OodleX_Init_Default</a> if you don't want to set up options
</td></tr></table><div class=discussion_heading>Return Value</div> <table> <tr> <td style='vertical-align: top;' class=paramname><a id="OodleX_Init.html_return" class=nohover>return</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> false if <a href="javascript:show('OODLE_HEADER_VERSION.html')" class="paragraph">OODLE_HEADER_VERSION</a> is not compatible with this lib
</td></tr></table><div class=discussion_heading>Discussion</div></p>
<p> You must call <a href="javascript:show('OodleX_Init.html')" class="paragraph">OodleX_Init</a> or <a href="javascript:show('OodleX_Init_NoThreads.html')" class="paragraph">OodleX_Init_NoThreads</a> before any other Oodle function that you expect to work.
</p>
<p> Pair with <a href="javascript:show('OodleX_Shutdown.html')" class="paragraph">OodleX_Shutdown</a>.
</p>
<p> For minimal linkage, use <a href="javascript:show('OodleX_Init_NoThreads.html')" class="paragraph">OodleX_Init_NoThreads</a>
<br>&nbsp;<br> <table class=bar> <tr>
<td width=33% align=left><span class='arrowleft'></span><a href="javascript:show('OodleX_Init_GetDefaults_Minimal.html')" class="paragraph">OodleX_Init_GetDefaults_Minimal</a></td><td width=33% align=center><span class='arrowup'></span><a href="javascript:show('OodleXAPI_Init.html')" class="paragraph">OodleX Startup and Shutdown</a></td><td width=33% align=right><span class='arrowright'></span><a href="javascript:show('OodleX_Init_Default.html')" class="paragraph">OodleX_Init_Default</a></td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="OodleXFileMode.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>OodleXFileMode</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "OodleXFileMode.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="OodleXFileMode.html_backmenu">
<table class=dropmenu>
<tr><td><span class='arrowleft'></span>&nbsp;<a href="javascript:show('OodleXError.html')" class="paragraph">OodleXError</a></td></tr><tr><td><span class='arrowright'></span>&nbsp;<a href="javascript:show('OodleXFileOpenFlags.html')" class="paragraph">OodleXFileOpenFlags</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<div class=prototype><div class=prototype_header>// Enumerant:</div><pre><span class=prototype_type>enum</span> <a href="javascript:show('OodleXFileMode.html')">OodleXFileMode</a>
{
&nbsp;&nbsp;&nbsp;&nbsp;OodleXFileMode_Invalid = 0,
&nbsp;&nbsp;&nbsp;&nbsp;OodleXFileMode_Read = 1,
&nbsp;&nbsp;&nbsp;&nbsp;OodleXFileMode_WriteCreate = 2,
&nbsp;&nbsp;&nbsp;&nbsp;OodleXFileMode_Write = 2,
&nbsp;&nbsp;&nbsp;&nbsp;OodleXFileMode_ReadWrite = OodleXFileMode_Read|OodleXFileMode_Write,
&nbsp;&nbsp;&nbsp;&nbsp;OodleXFileMode_Force32 = 0x40000000
};
</pre></div><div class=discussion_heading>Discussion</div> FileMode used by OodleFile and such.
Not all OodleFile types support OodleXFileMode_ReadWrite
<div class=discussion_heading>Enumerants</div> <table> <tr> <td style='vertical-align: top;' class=paramname><a id="OodleXFileMode.html_OodleXFileMode_Invalid" class=nohover>OodleXFileMode_Invalid</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> file mode not set</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXFileMode.html_OodleXFileMode_Read" class=nohover>OodleXFileMode_Read</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> open existing, shared</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXFileMode.html_OodleXFileMode_WriteCreate" class=nohover>OodleXFileMode_WriteCreate</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> open new (create/trunc), exclusive</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXFileMode.html_OodleXFileMode_Write" class=nohover>OodleXFileMode_Write</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> alias for OodleXFileMode_WriteCreate</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXFileMode.html_OodleXFileMode_ReadWrite" class=nohover>OodleXFileMode_ReadWrite</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> open existing or create if new, exclusive, read/write</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXFileMode.html_OodleXFileMode_Force32" class=nohover>OodleXFileMode_Force32</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc></td></tr></table><br>&nbsp;<br> <table class=bar> <tr>
<td width=33% align=left><span class='arrowleft'></span><a href="javascript:show('OodleXError.html')" class="paragraph">OodleXError</a></td><td width=33% align=center><span class='arrowup'></span><a href="javascript:show('OodleXAPI_IOQ.html')" class="paragraph">OodleX low level async io</a></td><td width=33% align=right><span class='arrowright'></span><a href="javascript:show('OodleXFileOpenFlags.html')" class="paragraph">OodleXFileOpenFlags</a></td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="OodleXFreeSized.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>OodleXFreeSized</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "OodleXFreeSized.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="OodleXFreeSized.html_backmenu">
<table class=dropmenu>
<tr><td><span class='arrowleft'></span>&nbsp;<a href="javascript:show('OodleXFree.html')" class="paragraph">OodleXFree</a></td></tr><tr><td><span class='arrowright'></span>&nbsp;<a href="javascript:show('OodleXMallocBigAlignment.html')" class="paragraph">OodleXMallocBigAlignment</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<div class=prototype><div class=prototype_header>// Function prototype:</div><pre>void <span class=prototype_type><a href="javascript:show('OodleXFreeSized.html')" class="blue">OodleXFreeSized</a></span>( void * ptr,
OO_SINTa bytes );</pre></div><div class=discussion_heading>Discussion</div>Free a pointer allocated by <a href="javascript:show('OodleXMalloc.html')" class="paragraph">OodleXMalloc</a> or <a href="javascript:show('OodleXMallocAligned.html')" class="paragraph">OodleXMallocAligned</a><div class=discussion_heading>Parameters</div> <table> <tr> <td style='vertical-align: top;' class=paramname><a id="OodleXFreeSized.html_ptr" class=nohover>ptr</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> the pointer to free; allocated by OodleXMalloc or OodleXMallocAligned (must not be NULL)
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXFreeSized.html_bytes" class=nohover>bytes</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> the size of the allocation as originally requested
</td></tr></table><div class=discussion_heading>Discussion</div></p>
<p> Providing the size of the malloc allows much faster freeing
Size must match the allocated size!
Uses the current <a href="javascript:show('OodleXMallocVTable.html')" class="paragraph">OodleXMallocVTable</a> ; this is an error if ptr was allocated from a different VTable.
<br>&nbsp;<br> <table class=bar> <tr>
<td width=33% align=left><span class='arrowleft'></span><a href="javascript:show('OodleXFree.html')" class="paragraph">OodleXFree</a></td><td width=33% align=center><span class='arrowup'></span><a href="javascript:show('OodleXAPI_Malloc.html')" class="paragraph">OodleX Memory Allocators</a></td><td width=33% align=right><span class='arrowright'></span><a href="javascript:show('OodleXMallocBigAlignment.html')" class="paragraph">OodleXMallocBigAlignment</a></td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="OodleXHandleCountdown_Alloc.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>OodleXHandleCountdown_Alloc</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "OodleXHandleCountdown_Alloc.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="OodleXHandleCountdown_Alloc.html_backmenu">
<table class=dropmenu>
<tr><td><span class='arrowleft'></span>&nbsp;<a href="javascript:show('OodleXHandleEvent_SetError.html')" class="paragraph">OodleXHandleEvent_SetError</a></td></tr><tr><td><span class='arrowright'></span>&nbsp;<a href="javascript:show('OodleXHandleCountdown_Decrement.html')" class="paragraph">OodleXHandleCountdown_Decrement</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<div class=prototype><div class=prototype_header>// Function prototype:</div><pre><span class=prototype_type><a href="javascript:show('OodleXHandle.html')" class="blue">OodleXHandle</a></span> <span class=prototype_type><a href="javascript:show('OodleXHandleCountdown_Alloc.html')" class="blue">OodleXHandleCountdown_Alloc</a></span>( OO_S32 initialCount,
<span class=prototype_type><a href="javascript:show('OodleXHandleAutoDelete.html')" class="blue">OodleXHandleAutoDelete</a></span> autoDelete OODEFAULT( OodleXHandleAutoDelete_No ) );</pre></div><div class=discussion_heading>Discussion</div>Allocate an <a href="javascript:show('OodleXHandle.html')" class="paragraph">OodleXHandle</a> to a simple data-less coutdown <div class=discussion_heading>Parameters</div> <table> <tr> <td style='vertical-align: top;' class=paramname><a id="OodleXHandleCountdown_Alloc.html_initialCount" class=nohover>initialCount</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> inital count; becomes done when count reaches 0
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXHandleCountdown_Alloc.html_autoDelete" class=nohover>autoDelete</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> (optional) set the <a href="javascript:show('OodleXHandleAutoDelete.html')" class="paragraph">OodleXHandleAutoDelete</a> of the handle
</td></tr></table><div class=discussion_heading>Return Value</div> <table> <tr> <td style='vertical-align: top;' class=paramname><a id="OodleXHandleCountdown_Alloc.html_return" class=nohover>return</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> the handle
</td></tr></table><div class=discussion_heading>Discussion</div></p>
<p> <i>initialCount</i> should be greater than 0.
</p>
<p> A Countdown is a simple handle which you can use to wait for completion of many tasks.
Use <a href="javascript:show('OodleXHandleCountdown_Decrement.html')" class="paragraph">OodleXHandleCountdown_Decrement</a> to decrement it. When it reaches 0 it becomes Done,
which means it satisfies an <a href="javascript:show('OodleX_Wait.html')" class="paragraph">OodleX_Wait</a>.
</p>
<p> (A countdown is the same thing as a single-use Semaphore with an initial negative count)
</p>
<p> If <i>autoDelete</i> is OodleXHandleAutoDelete_Yes , the Countdown handle
is deleted when count reaches zero. (a deleted handle also satisfies OodleX_Wait).
<br>&nbsp;<br> <table class=bar> <tr>
<td width=33% align=left><span class='arrowleft'></span><a href="javascript:show('OodleXHandleEvent_SetError.html')" class="paragraph">OodleXHandleEvent_SetError</a></td><td width=33% align=center><span class='arrowup'></span><a href="javascript:show('OodleXAPI_Handle.html')" class="paragraph">OodleX async handle operations</a></td><td width=33% align=right><span class='arrowright'></span><a href="javascript:show('OodleXHandleCountdown_Decrement.html')" class="paragraph">OodleXHandleCountdown_Decrement</a></td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="OodleAPI_Network.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>Oodle Network compression</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "OodleAPI_Network.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="OodleAPI_Network.html_backmenu">
<table class=dropmenu>
<tr><td><span class='arrowup'></span>&nbsp;<a href="javascript:show('OodleNetworkAPI.html')" class="paragraph">Oodle2 Network API Documentation</a></td></tr><tr><td><span class='arrowright'></span>&nbsp;<a href="javascript:show('OodleAPI_OodleNet_Plugins.html')" class="paragraph">Network plugins</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<ul class='TOCItem'>
<li><span onClick="HandleClick(event, null); return false" class='TOCGroup closedbook_icon'></span>&nbsp;<a href="javascript:show('OodleAPI_OodleNetwork1.html')">OodleAPI_OodleNetwork1</a></li>
<ul style="display:none" class='TOCItem'>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleNetwork1_About.html')">About OodleNetwork1</a></li>
<li><span onClick="HandleClick(event, null); return false" class='TOCGroup closedbook_icon'></span>&nbsp;Defines</li>
<ul style="display:none" class='TOCItem'>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OODLENETWORK1_MAX_DICTIONARY_SIZE.html')">OODLENETWORK1_MAX_DICTIONARY_SIZE</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OODLENETWORK1_HASH_BITS_DEFAULT.html')">OODLENETWORK1_HASH_BITS_DEFAULT</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OODLENETWORK1_DECOMP_BUF_OVERREAD_LEN.html')">OODLENETWORK1_DECOMP_BUF_OVERREAD_LEN</a></li>
</ul>
<li><span onClick="HandleClick(event, null); return false" class='TOCGroup closedbook_icon'></span>&nbsp;Structures</li>
<ul style="display:none" class='TOCItem'>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleNetwork1_Shared.html')">OodleNetwork1_Shared</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleNetwork1TCP_State.html')">OodleNetwork1TCP_State</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleNetwork1UDP_State.html')">OodleNetwork1UDP_State</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleNetwork1UDP_StateCompacted.html')">OodleNetwork1UDP_StateCompacted</a></li>
</ul>
<li><span onClick="HandleClick(event, null); return false" class='TOCGroup closedbook_icon'></span>&nbsp;Functions</li>
<ul style="display:none" class='TOCItem'>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleNetwork1_Shared_Size.html')">OodleNetwork1_Shared_Size</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleNetwork1TCP_State_Size.html')">OodleNetwork1TCP_State_Size</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleNetwork1_CompressedBufferSizeNeeded.html')">OodleNetwork1_CompressedBufferSizeNeeded</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleNetwork1_Shared_SetWindow.html')">OodleNetwork1_Shared_SetWindow</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleNetwork1TCP_State_Reset.html')">OodleNetwork1TCP_State_Reset</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleNetwork1TCP_State_InitAsCopy.html')">OodleNetwork1TCP_State_InitAsCopy</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleNetwork1TCP_Train.html')">OodleNetwork1TCP_Train</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleNetwork1TCP_Encode.html')">OodleNetwork1TCP_Encode</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleNetwork1TCP_Decode.html')">OodleNetwork1TCP_Decode</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleNetwork1UDP_Train.html')">OodleNetwork1UDP_Train</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleNetwork1UDP_State_Size.html')">OodleNetwork1UDP_State_Size</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleNetwork1UDP_Encode.html')">OodleNetwork1UDP_Encode</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleNetwork1UDP_Decode.html')">OodleNetwork1UDP_Decode</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleNetwork1UDP_StateCompacted_MaxSize.html')">OodleNetwork1UDP_StateCompacted_MaxSize</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleNetwork1UDP_State_Compact_ForVersion.html')">OodleNetwork1UDP_State_Compact_ForVersion</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleNetwork1UDP_State_Compact.html')">OodleNetwork1UDP_State_Compact</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleNetwork1UDP_State_Uncompact_ForVersion.html')">OodleNetwork1UDP_State_Uncompact_ForVersion</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleNetwork1UDP_State_Uncompact.html')">OodleNetwork1UDP_State_Uncompact</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleNetwork1_SelectDictionarySupported.html')">OodleNetwork1_SelectDictionarySupported</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleNetwork1_SelectDictionaryFromPackets.html')">OodleNetwork1_SelectDictionaryFromPackets</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleNetwork1_SelectDictionaryFromPackets_Trials.html')">OodleNetwork1_SelectDictionaryFromPackets_Trials</a></li>
</ul>
</ul>
<li><span onClick="HandleClick(event, null); return false" class='TOCGroup closedbook_icon'></span>&nbsp;<a href="javascript:show('OodleNetwork_About.html')">About Oodle Network Compression</a></li>
<ul style="display:none" class='TOCItem'>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleNetwork_About_CapturingTrainingData.html')">Capturing Training data for OodleNetwork</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleNetwork_About_FormingPacketsForMaximumCompression.html')">Forming Packets for Maximum Compression</a></li>
</ul>
</ul>
<br>&nbsp;<br> <table class=bar> <tr>
<td width=33% align=left><span class='arrowleft'></span><a href="javascript:show('OodleNetworkAPI.html')" class="paragraph">Oodle2 Network API Documentation</a></td><td width=33% align=center><span class='arrowup'></span><a href="javascript:show('OodleNetworkAPI.html')" class="paragraph">Oodle2 Network API Documentation</a></td><td width=33% align=right><span class='arrowright'></span><a href="javascript:show('OodleAPI_OodleNetwork1.html')" class="paragraph">OodleAPI_OodleNetwork1</a></td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="OodleXIOQ_ReadMallocWholeFile_AsyncAndWait.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>OodleXIOQ_ReadMallocWholeFile_AsyncAndWait</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "OodleXIOQ_ReadMallocWholeFile_AsyncAndWait.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="OodleXIOQ_ReadMallocWholeFile_AsyncAndWait.html_backmenu">
<table class=dropmenu>
<tr><td><span class='arrowleft'></span>&nbsp;<a href="javascript:show('OodleXIOQ_CopyFile_Async.html')" class="paragraph">OodleXIOQ_CopyFile_Async</a></td></tr><tr><td><span class='arrowright'></span>&nbsp;<a href="javascript:show('OodleXIOQ_WriteWholeFile_AsyncAndWait.html')" class="paragraph">OodleXIOQ_WriteWholeFile_AsyncAndWait</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<div class=prototype><div class=prototype_header>// Function prototype:</div><pre>void * <span class=prototype_type><a href="javascript:show('OodleXIOQ_ReadMallocWholeFile_AsyncAndWait.html')" class="blue">OodleXIOQ_ReadMallocWholeFile_AsyncAndWait</a></span>( const char * vfsName,
OO_S64 * pSize,
<span class=prototype_type><a href="javascript:show('OodleXFileOpenFlags.html')" class="blue">OodleXFileOpenFlags</a></span> fileOpenFlags OODEFAULT( OodleXFileOpenFlags_Default ) );</pre></div><div class=discussion_heading>Discussion</div>See <a href="javascript:show('OodleXIOQ_ReadMallocWholeFile_Async.html')" class="paragraph">OodleXIOQ_ReadMallocWholeFile_Async</a>
<br>&nbsp;<br> <table class=bar> <tr>
<td width=33% align=left><span class='arrowleft'></span><a href="javascript:show('OodleXIOQ_CopyFile_Async.html')" class="paragraph">OodleXIOQ_CopyFile_Async</a></td><td width=33% align=center><span class='arrowup'></span><a href="javascript:show('OodleXAPI_IOQ.html')" class="paragraph">OodleX low level async io</a></td><td width=33% align=right><span class='arrowright'></span><a href="javascript:show('OodleXIOQ_WriteWholeFile_AsyncAndWait.html')" class="paragraph">OodleXIOQ_WriteWholeFile_AsyncAndWait</a></td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="OodleConfigValues.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>OodleConfigValues</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "OodleConfigValues.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="OodleConfigValues.html_backmenu">
<table class=dropmenu>
<tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<div class=prototype><div class=prototype_header>// Structure definition:</div><pre><span class=prototype_type>struct</span> <a href="javascript:show('OodleConfigValues.html')">OodleConfigValues</a>
{
&nbsp;&nbsp;&nbsp;&nbsp;OO_S32 m_OodleLZ_LW_LRM_step;
&nbsp;&nbsp;&nbsp;&nbsp;OO_S32 m_OodleLZ_LW_LRM_hashLength;
&nbsp;&nbsp;&nbsp;&nbsp;OO_S32 m_OodleLZ_LW_LRM_jumpbits;
&nbsp;&nbsp;&nbsp;&nbsp;OO_S32 m_OodleLZ_Decoder_Max_Stack_Size;
&nbsp;&nbsp;&nbsp;&nbsp;OO_S32 m_OodleLZ_Small_Buffer_LZ_Fallback_Size_Unused;
&nbsp;&nbsp;&nbsp;&nbsp;OO_S32 m_OodleLZ_BackwardsCompatible_MajorVersion;
&nbsp;&nbsp;&nbsp;&nbsp;OO_U32 m_oodle_header_version;
};
</pre></div><div class=discussion_heading>Discussion</div> OodleConfigValues<div class=discussion_heading>Members</div> <table> <tr> <td style='vertical-align: top;' class=paramname><a id="OodleConfigValues.html_m_OodleLZ_LW_LRM_step" class=nohover>m_OodleLZ_LW_LRM_step</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> LZHLW LRM : bytes between LRM entries</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleConfigValues.html_m_OodleLZ_LW_LRM_hashLength" class=nohover>m_OodleLZ_LW_LRM_hashLength</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> LZHLW LRM : bytes hashed for each LRM entries</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleConfigValues.html_m_OodleLZ_LW_LRM_jumpbits" class=nohover>m_OodleLZ_LW_LRM_jumpbits</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> LZHLW LRM : bits of hash used for jump table</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleConfigValues.html_m_OodleLZ_Decoder_Max_Stack_Size" class=nohover>m_OodleLZ_Decoder_Max_Stack_Size</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> if OodleLZ_Decompress needs to allocator a Decoder object, and it's smaller than this size, it's put on the stack instead of the heap</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleConfigValues.html_m_OodleLZ_Small_Buffer_LZ_Fallback_Size_Unused" class=nohover>m_OodleLZ_Small_Buffer_LZ_Fallback_Size_Unused</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> deprecated</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleConfigValues.html_m_OodleLZ_BackwardsCompatible_MajorVersion" class=nohover>m_OodleLZ_BackwardsCompatible_MajorVersion</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> if you need to encode streams that can be read with an older version of Oodle, set this to the Oodle2 MAJOR version number that you need compatibility with. eg to be compatible with oodle 2.7.3 you would put 7 here</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleConfigValues.html_m_oodle_header_version" class=nohover>m_oodle_header_version</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> = OODLE_HEADER_VERSION</td></tr></table><div class=discussion_heading>Discussion</div> Struct of user-settable low level config values. See <a href="javascript:show('Oodle_SetConfigValues.html')" class="paragraph">Oodle_SetConfigValues</a>.
</p>
<p> May have different defaults per platform.
<br>&nbsp;<br> <table class=bar> <tr>
<td width=33% align=left><span class='arrowleft'></span><a href="javascript:show('Oodle_UsageWarnings.html')" class="paragraph">Oodle_UsageWarnings</a></td><td width=33% align=center><span class='arrowup'></span><a href="javascript:show('OodleAPI_Base.html')" class="paragraph">Core Base</a></td><td width=33% align=right><span class='arrowright'></span><a href="javascript:show('Oodle_GetConfigValues.html')" class="paragraph">Oodle_GetConfigValues</a></td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="OodleXMallocFailedHandler.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>OodleXMallocFailedHandler</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "OodleXMallocFailedHandler.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="OodleXMallocFailedHandler.html_backmenu">
<table class=dropmenu>
<tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<div class=prototype><div class=prototype_header>// Function typedef:</div><pre>OO_BOOL( OODLE_CALLBACK <span class=prototype_type><a href="javascript:show('OodleXMallocFailedHandler.html')" class="blue">OodleXMallocFailedHandler</a></span> )( OO_SINTa bytes );</pre></div><div class=discussion_heading>Discussion</div>OodleXMallocFailedHandler is called when a malloc fails
Return true to retry.
<br>&nbsp;<br> <table class=bar> <tr>
<td width=33% align=left><span class='arrowleft'></span><a href="javascript:show('OodleXMalloc_GetVTable_OS.html')" class="paragraph">OodleXMalloc_GetVTable_OS</a></td><td width=33% align=center><span class='arrowup'></span><a href="javascript:show('OodleXAPI_Malloc.html')" class="paragraph">OodleX Memory Allocators</a></td><td width=33% align=right><span class='arrowright'></span><a href="javascript:show('OodleXAPI_Handle.html')" class="paragraph">OodleX async handle operations</a></td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="OodleXFree.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>OodleXFree</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "OodleXFree.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="OodleXFree.html_backmenu">
<table class=dropmenu>
<tr><td><span class='arrowleft'></span>&nbsp;<a href="javascript:show('OodleXMallocAligned.html')" class="paragraph">OodleXMallocAligned</a></td></tr><tr><td><span class='arrowright'></span>&nbsp;<a href="javascript:show('OodleXFreeSized.html')" class="paragraph">OodleXFreeSized</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<div class=prototype><div class=prototype_header>// Function prototype:</div><pre>void <span class=prototype_type><a href="javascript:show('OodleXFree.html')" class="blue">OodleXFree</a></span>( void * ptr );</pre></div><div class=discussion_heading>Discussion</div>free a pointer allocated by <a href="javascript:show('OodleXMalloc.html')" class="paragraph">OodleXMalloc</a> or <a href="javascript:show('OodleXMallocAligned.html')" class="paragraph">OodleXMallocAligned</a> <div class=discussion_heading>Parameters</div> <table> <tr> <td style='vertical-align: top;' class=paramname><a id="OodleXFree.html_ptr" class=nohover>ptr</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> the pointer to free (must not be NULL)
</td></tr></table><div class=discussion_heading>Discussion</div></p>
<p> Uses the current <a href="javascript:show('OodleXMallocVTable.html')" class="paragraph">OodleXMallocVTable</a> ; this is an error if ptr was allocated from a different VTable.
Prefer <a href="javascript:show('OodleXFreeSized.html')" class="paragraph">OodleXFreeSized</a> whenever possible.
<br>&nbsp;<br> <table class=bar> <tr>
<td width=33% align=left><span class='arrowleft'></span><a href="javascript:show('OodleXMallocAligned.html')" class="paragraph">OodleXMallocAligned</a></td><td width=33% align=center><span class='arrowup'></span><a href="javascript:show('OodleXAPI_Malloc.html')" class="paragraph">OodleX Memory Allocators</a></td><td width=33% align=right><span class='arrowright'></span><a href="javascript:show('OodleXFreeSized.html')" class="paragraph">OodleXFreeSized</a></td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="Oodle_FAQ_deprecated_compressors.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>FAQ: What are the Oodle deprecated compressors ?</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "Oodle_FAQ_deprecated_compressors.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="Oodle_FAQ_deprecated_compressors.html_backmenu">
<table class=dropmenu>
<tr><td><span class='arrowleft'></span>&nbsp;<a href="javascript:show('Oodle_FAQ_MemoryUse.html')" class="paragraph">FAQ: How much memory do the Oodle compressors use ?</a></td></tr><tr><td><span class='arrowup'></span>&nbsp;<a href="javascript:show('Oodle_FAQ.html')" class="paragraph">Frequently Asked Questions</a></td></tr><tr><td><span class='arrowright'></span>&nbsp;<a href="javascript:show('Oodle_FAQ_data_compatibility.html')" class="paragraph">FAQ: Do new Oodle versions break data compatibility ?</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<P>
The new Oodle compressor family consists of Kraken, Leviathan, Mermaid, Selkie, and Hydra.
</p>
<p>New Oodle users should only use the new sea monster family of compressors.
</p>
<p>LZB16 is also supported but not recommended.
</p>
<p>As of Oodle 2.9.0 the older compressors (hidden in OODLE_ALLOW_DEPRECATED_COMPRESSORS) are no
longer supported. They cannot be encoded or decoded.
</p>
<p>If you have old data from Oodle 2.8.x or earlier, you can continue to use the old Oodle lib.<br>&nbsp;<br> <table class=bar> <tr>
<td width=33% align=left><span class='arrowleft'></span><a href="javascript:show('Oodle_FAQ_MemoryUse.html')" class="paragraph">FAQ: How much memory do the Oodle compressors use ?</a></td><td width=33% align=center><span class='arrowup'></span><a href="javascript:show('Oodle_FAQ.html')" class="paragraph">Frequently Asked Questions</a></td><td width=33% align=right><span class='arrowright'></span><a href="javascript:show('Oodle_FAQ_data_compatibility.html')" class="paragraph">FAQ: Do new Oodle versions break data compatibility ?</a></td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="OodleXIOQ_GetName.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>OodleXIOQ_GetName</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "OodleXIOQ_GetName.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="OodleXIOQ_GetName.html_backmenu">
<table class=dropmenu>
<tr><td><span class='arrowleft'></span>&nbsp;<a href="javascript:show('OodleXIOQ_GetLastPendingOpOnFile.html')" class="paragraph">OodleXIOQ_GetLastPendingOpOnFile</a></td></tr><tr><td><span class='arrowright'></span>&nbsp;<a href="javascript:show('OodleXIOQ_GetLastError.html')" class="paragraph">OodleXIOQ_GetLastError</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<div class=prototype><div class=prototype_header>// Function prototype:</div><pre>OO_BOOL <span class=prototype_type><a href="javascript:show('OodleXIOQ_GetName.html')" class="blue">OodleXIOQ_GetName</a></span>( <span class=prototype_type><a href="javascript:show('OodleXIOQFile.html')" class="blue">OodleXIOQFile</a></span> file,
char * pInto,
OO_S32 intoSize );</pre></div><div class=discussion_heading>Discussion</div>Get the file name (OS name)<div class=discussion_heading>Parameters</div> <table> <tr> <td style='vertical-align: top;' class=paramname><a id="OodleXIOQ_GetName.html_file" class=nohover>file</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> the IOQFile to query
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXIOQ_GetName.html_pInto" class=nohover>pInto</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> filled with the file's OS name (UTF8)
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXIOQ_GetName.html_intoSize" class=nohover>intoSize</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> number of bytes Oodle can write to pInto
</td></tr></table><div class=discussion_heading>Return Value</div> <table> <tr> <td style='vertical-align: top;' class=paramname><a id="OodleXIOQ_GetName.html_return" class=nohover>return</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> true if successful
</td></tr></table><div class=discussion_heading>Discussion</div></p>
<p> Copies the OS name (UTF8) into pInto. This may not be the same as the name used when opening
the file, if that was a VFS name.
<br>&nbsp;<br> <table class=bar> <tr>
<td width=33% align=left><span class='arrowleft'></span><a href="javascript:show('OodleXIOQ_GetLastPendingOpOnFile.html')" class="paragraph">OodleXIOQ_GetLastPendingOpOnFile</a></td><td width=33% align=center><span class='arrowup'></span><a href="javascript:show('OodleXAPI_IOQ.html')" class="paragraph">OodleX low level async io</a></td><td width=33% align=right><span class='arrowright'></span><a href="javascript:show('OodleXIOQ_GetLastError.html')" class="paragraph">OodleXIOQ_GetLastError</a></td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="example_lz_noallocs.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>example_lz_noallocs : Example demonstrating Oodle compression with no allocations</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "example_lz_noallocs.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="example_lz_noallocs.html_backmenu">
<table class=dropmenu>
<tr><td><span class='arrowleft'></span>&nbsp;<a href="javascript:show('example_lz_chart.html')" class="paragraph">example_lz_chart : Example that makes a chart of OodleLZ options</a></td></tr><tr><td><span class='arrowup'></span>&nbsp;<a href="javascript:show('examples.html')" class="paragraph">Examples</a></td></tr><tr><td><span class='arrowright'></span>&nbsp;<a href="javascript:show('example_lz_overlap.html')" class="paragraph">example_lz_overlap : Example demonstrating parallel overlap with OodleLZ</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<div class=discussion_heading>Discussion</div>Oodle example_lz_noallocs
</p>
<p>Very simple example of OodleLZ memory -> memory compression & decompression.
</p>
<p>Shows how to use Oodle without any allocations done by Oodle. All memory needed is passed in by the client.
</p>
<p>Uses stdio for file IO to load an input file.
</p>
<p>See <a href="javascript:show('example_lz.html')" class="paragraph">example_lz : Example demonstrating LZ compression and decompression</a> for more advanced OodleLZ usage.
</p>
<p>example_lz_noallocs only uses Oodle Core, no Oodle Ext
</p>
<p>include oodle2.h and not oodle2x.h
</p>
<p>If you want to use Oodle with no allocations, you cannot use OodleX. OodleX installs its own allocator into Oodle Core.
Do not use OodlePlugins_SetAllocators with OodleX.
</p>
<p>See <a href="javascript:show('Oodle_FAQ_UseOodleWithNoAllocator.html')" class="paragraph">FAQ: How do I use Oodle with no allocator?</a> and <a href="javascript:show('OodleCore_Plugins_SetAllocators.html')" class="paragraph">OodleCore_Plugins_SetAllocators</a><div class=prototype> <pre>
#include "../include/oodle2.h"
#ifndef _CRT_SECURE_NO_WARNINGS
#define _CRT_SECURE_NO_WARNINGS
#endif
#include &lt;stdio.h>
#include &lt;string.h>
#include &lt;assert.h>
#include &lt;stdlib.h>
#ifdef BUILDING_EXAMPLE_CALLER
#define main <span class=prototype_type><a href="javascript:show('example_lz_noallocs.html')" class="blue">example_lz_noallocs</a></span>
#endif
#include "read_whole_file.h"
void * OODLE_CALLBACK example_noallocs_MallocAligned_Logging(OO_SINTa size,OO_S32 alignment)
{
<span style="color:#008000;">// malloc should not be called, log an error :</span>
printf("ERROR : example_noallocs_MallocAligned_Logging called (size %d)\n",(int)size);
<span style="color:#008000;">// use default Oodle MallocAligned as an easy way to get a cross-platform aligned malloc :</span>
return OodleCore_Plugin_MallocAligned_Default(size,alignment);
}
void OODLE_CALLBACK example_noallocs_Free_Logging(void * ptr)
{
<span style="color:#008000;">// malloc should not be called, log an error :</span>
printf("ERROR : example_noallocs_Free_Logging called.\n");
OodleCore_Plugin_Free_Default(ptr);
}
extern "C" int main(int argc,char *argv[])
{
</pre></div>No initialization is needed for Oodle2 Core
</p>
<p> we let Oodle Core use the default system plugins (the C stdlib)
To change them, use <a href="javascript:show('OodleAPI_OodleCore_Plugins.html')" class="paragraph">Core plugins</a><div class=prototype> <pre>
<span style="color:#008000;">// optional check to make sure header matches lib :</span>
if ( ! <span class=prototype_type><a href="javascript:show('Oodle_CheckVersion.html')" class="blue">Oodle_CheckVersion</a></span>(<span class=prototype_type><a href="javascript:show('OODLE_HEADER_VERSION.html')" class="blue">OODLE_HEADER_VERSION</a></span>) )
{
fprintf(stderr,"Oodle header version mismatch\n");
return 10;
}
</pre></div>Install our own allocator plugins that log an error if called.
</p>
<p> These should never be called. You could also disable them :
OodleCore_Plugins_SetAllocators(NULL,NULL);
</p>
<p> but that is not recommended because it will cause a hard failure if Oodle ever needs memory.<div class=prototype> <pre>
<span class=prototype_type><a href="javascript:show('OodleCore_Plugins_SetAllocators.html')" class="blue">OodleCore_Plugins_SetAllocators</a></span>(example_noallocs_MallocAligned_Logging,example_noallocs_Free_Logging);
<span style="color:#008000;">// get args :</span>
const char * in_name;
if ( argc &lt; 2 )
{
in_name = "r:\\testsets\\lztestset\\lzt02";
}
else
{
in_name = argv[1];
}
</pre></div>read input file using stdio<div class=prototype> <pre>
OO_SINTa length;
void * buf = read_whole_file(in_name,&amp;length);
if ( ! buf )
{
fprintf(stderr,"couldn't open : %s\n",in_name);
return 10;
}
</pre></div>Run OodleLZ_Compress from memory (buf) to memory (compbuf)
</p>
<p>Use the OodleLZ_Compressor_Kraken compressor. Kraken is an amazing balance of good compression and fast decode
speed. It should generally be your first choice.
</p>
<p>Use OodleLZ_CompressionLevel_Normal level of effort in the encoder. Normal is a balance of encode speed and compression
ratio. Different levels trade off faster or slower encoding for compressed size. See <a href="javascript:show('OodleLZ_CompressionLevel.html')" class="paragraph">OodleLZ_CompressionLevel</a>.
</p>
<p>See <a href="javascript:show('OodleLZ_About.html')" class="paragraph">About OodleLZ</a> for information on selection of the compression options.
</p>
<p>This call is synchronous and not threaded; see <a href="javascript:show('example_lz.html')" class="paragraph">example_lz : Example demonstrating LZ compression and decompression</a> for an example using the async compression APIs.<div class=prototype> <pre>
<span class=prototype_type><a href="javascript:show('OodleLZ_Compressor.html')" class="blue">OodleLZ_Compressor</a></span> compressor = OodleLZ_Compressor_Kraken;
<span class=prototype_type><a href="javascript:show('OodleLZ_CompressionLevel.html')" class="blue">OodleLZ_CompressionLevel</a></span> level = OodleLZ_CompressionLevel_Normal;
<span style="color:#008000;">//OodleLZ_CompressionLevel level = OodleLZ_CompressionLevel_Optimal2; // optimals are OODLELZ_SCRATCH_MEM_NO_BOUND</span>
<span style="color:#008000;">// allocate memory big enough for compressed data :</span>
void * compbuf = malloc( <span class=prototype_type><a href="javascript:show('OodleLZ_GetCompressedBufferSizeNeeded.html')" class="blue">OodleLZ_GetCompressedBufferSizeNeeded</a></span>(compressor,length) + sizeof(length) );
if ( compbuf == NULL )
return 10;
<span style="color:#008000;">// allocate memory for encoder scratch :</span>
OO_SINTa enc_scratch_size = <span class=prototype_type><a href="javascript:show('OodleLZ_GetCompressScratchMemBound.html')" class="blue">OodleLZ_GetCompressScratchMemBound</a></span>(compressor,level,length,NULL);
if ( enc_scratch_size == <span class=prototype_type><a href="javascript:show('OODLELZ_SCRATCH_MEM_NO_BOUND.html')" class="blue">OODLELZ_SCRATCH_MEM_NO_BOUND</a></span> )
{
<span style="color:#008000;">// scratch cannot be bounded for this choice of compressor/level</span>
<span style="color:#008000;">// the allocator may be used!</span>
<span style="color:#008000;">// go ahead and give it 4 MB of scratch</span>
enc_scratch_size = 4*1024*1024;
}
void * enc_scratch = malloc(enc_scratch_size);
if ( enc_scratch == NULL )
return 10;
char * compptr = (char *)compbuf;
memcpy(compptr,&amp;length,sizeof(length));
compptr += sizeof(length);
<span style="color:#008000;">// compress :</span>
OO_SINTa complen = <span class=prototype_type><a href="javascript:show('OodleLZ_Compress.html')" class="blue">OodleLZ_Compress</a></span>(compressor,buf,length,compptr,level,NULL,NULL,NULL,enc_scratch,enc_scratch_size);
compptr += complen;
<span style="color:#008000;">// log about it :</span>
<span style="color:#008000;">// full compressed size also includes the header</span>
printf("%s compressed %d -> %d (+%d)\n",in_name,(int)length,(int)complen,(int)sizeof(length));
<span style="color:#008000;">// can free enc_scratch now</span>
<span style="color:#008000;">// enc_scratch can be reused for further compression</span>
<span style="color:#008000;">// but must be used by only one thread at a time</span>
free(enc_scratch); enc_scratch = NULL;
</pre></div>Run OodleLZ_Decompress from memory (compbuf) to memory (decbuf)
</p>
<p>Note that you must provide the exact decompressed size. OodleLZ data is headerless; store the size in
your own header.<div class=prototype> <pre>
OO_SINTa declength;
compptr = (char *)compbuf;
memcpy(&amp;declength,compptr,sizeof(declength));
compptr += sizeof(declength);
assert( length == declength );
<span style="color:#008000;">// malloc for decompressed buffer :</span>
void * decbuf = malloc( declength );
if ( decbuf == NULL )
return 10;
OO_SINTa decoder_mem_size = <span class=prototype_type><a href="javascript:show('OodleLZDecoder_MemorySizeNeeded.html')" class="blue">OodleLZDecoder_MemorySizeNeeded</a></span>(compressor,declength);
void * decoder_mem = malloc(decoder_mem_size);
if ( decoder_mem == NULL )
return 10;
<span style="color:#008000;">// do the decompress :</span>
OO_SINTa decompress_return = <span class=prototype_type><a href="javascript:show('OodleLZ_Decompress.html')" class="blue">OodleLZ_Decompress</a></span>(compptr,complen,decbuf,declength,
OodleLZ_FuzzSafe_Yes,OodleLZ_CheckCRC_Yes,OodleLZ_Verbosity_None,NULL,0,NULL,NULL,
decoder_mem,decoder_mem_size,
OodleLZ_Decode_Unthreaded);
<span style="color:#008000;">// check it was successful :</span>
assert( decompress_return == length );
assert( memcmp(buf,decbuf,length) == 0 );
if ( decompress_return != length )
return 10;
printf("decompessed successfully.\n");
</pre></div>And finish up. No shutdown is needed for Oodle2 Core.<div class=prototype> <pre>
<span style="color:#008000;">// free all the memory :</span>
free(buf);
free(compbuf);
free(decbuf);
free(decoder_mem);
return 0;
}
</pre></div><br>&nbsp;<br> <table class=bar> <tr>
<td width=33% align=left><span class='arrowleft'></span><a href="javascript:show('example_lz_chart.html')" class="paragraph">example_lz_chart : Example that makes a chart of OodleLZ options</a></td><td width=33% align=center><span class='arrowup'></span><a href="javascript:show('examples.html')" class="paragraph">Examples</a></td><td width=33% align=right><span class='arrowright'></span><a href="javascript:show('example_lz_overlap.html')" class="paragraph">example_lz_overlap : Example demonstrating parallel overlap with OodleLZ</a></td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="t_fp_OodleNet_Plugin_Printf.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>t_fp_OodleNet_Plugin_Printf</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "t_fp_OodleNet_Plugin_Printf.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="t_fp_OodleNet_Plugin_Printf.html_backmenu">
<table class=dropmenu>
<tr><td><span class='arrowleft'></span>&nbsp;<a href="javascript:show('t_fp_OodleNet_Plugin_WaitJob.html')" class="paragraph">t_fp_OodleNet_Plugin_WaitJob</a></td></tr><tr><td><span class='arrowright'></span>&nbsp;<a href="javascript:show('t_fp_OodleNet_Plugin_DisplayAssertion.html')" class="paragraph">t_fp_OodleNet_Plugin_DisplayAssertion</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<div class=prototype><div class=prototype_header>// Function typedef:</div><pre>OODEFFUNC void( OODLE_CALLBACK <span class=prototype_type><a href="javascript:show('t_fp_OodleNet_Plugin_Printf.html')" class="blue">t_fp_OodleNet_Plugin_Printf</a></span> )( int verboseLevel,
const char * file,
int line,
const char * fmt,
. . . );</pre></div><div class=discussion_heading>Discussion</div>Function pointer to Oodle Core printf<div class=discussion_heading>Parameters</div> <table> <tr> <td style='vertical-align: top;' class=paramname><a id="t_fp_OodleNet_Plugin_Printf.html_verboseLevel" class=nohover>verboseLevel</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> verbosity of the message; 0-2 ; lower = more important
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="t_fp_OodleNet_Plugin_Printf.html_file" class=nohover>file</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> C file that sent the message
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="t_fp_OodleNet_Plugin_Printf.html_line" class=nohover>line</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> C line that sent the message
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="t_fp_OodleNet_Plugin_Printf.html_fmt" class=nohover>fmt</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> vararg printf format string
</td></tr></table><div class=discussion_heading>Discussion</div></p>
<p> The logging function installed here must parse varargs like printf.
</p>
<p> <i>verboseLevel</i> may be used to omit verbose messages.
<br>&nbsp;<br> <table class=bar> <tr>
<td width=33% align=left><span class='arrowleft'></span><a href="javascript:show('t_fp_OodleNet_Plugin_WaitJob.html')" class="paragraph">t_fp_OodleNet_Plugin_WaitJob</a></td><td width=33% align=center><span class='arrowup'></span><a href="javascript:show('OodleAPI_OodleNet_Plugins.html')" class="paragraph">Network plugins</a></td><td width=33% align=right><span class='arrowright'></span><a href="javascript:show('t_fp_OodleNet_Plugin_DisplayAssertion.html')" class="paragraph">t_fp_OodleNet_Plugin_DisplayAssertion</a></td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="OodleLZ_GetCompressedBufferSizeNeeded.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>OodleLZ_GetCompressedBufferSizeNeeded</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "OodleLZ_GetCompressedBufferSizeNeeded.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="OodleLZ_GetCompressedBufferSizeNeeded.html_backmenu">
<table class=dropmenu>
<tr><td><span class='arrowleft'></span>&nbsp;<a href="javascript:show('OodleLZ_GetCompressScratchMemBoundEx.html')" class="paragraph">OodleLZ_GetCompressScratchMemBoundEx</a></td></tr><tr><td><span class='arrowright'></span>&nbsp;<a href="javascript:show('OodleLZ_GetDecodeBufferSize.html')" class="paragraph">OodleLZ_GetDecodeBufferSize</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<div class=prototype><div class=prototype_header>// Function prototype:</div><pre>OO_SINTa <span class=prototype_type><a href="javascript:show('OodleLZ_GetCompressedBufferSizeNeeded.html')" class="blue">OodleLZ_GetCompressedBufferSizeNeeded</a></span>( <span class=prototype_type><a href="javascript:show('OodleLZ_Compressor.html')" class="blue">OodleLZ_Compressor</a></span> compressor,
OO_SINTa rawSize );</pre></div><div class=discussion_heading>Discussion</div>Return the size you must malloc the compressed buffer<div class=discussion_heading>Parameters</div> <table> <tr> <td style='vertical-align: top;' class=paramname><a id="OodleLZ_GetCompressedBufferSizeNeeded.html_compressor" class=nohover>compressor</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> compressor used; OodleLZ_Compressor_Invalid to make it enough for any compressor
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleLZ_GetCompressedBufferSizeNeeded.html_rawSize" class=nohover>rawSize</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> uncompressed size you will compress into this buffer
</td></tr></table><div class=discussion_heading>Discussion</div></p>
<p> The <i>compBuf</i> passed to <a href="javascript:show('OodleLZ_Compress.html')" class="paragraph">OodleLZ_Compress</a> must be allocated at least this big.
</p>
<p> note this is actually larger than the maximum size of a compressed stream, it includes overrun padding.
</p>
<p><br>&nbsp;<br> <table class=bar> <tr>
<td width=33% align=left><span class='arrowleft'></span><a href="javascript:show('OodleLZ_GetCompressScratchMemBoundEx.html')" class="paragraph">OodleLZ_GetCompressScratchMemBoundEx</a></td><td width=33% align=center><span class='arrowup'></span><a href="javascript:show('OodleAPI_LZ_Compressors.html')" class="paragraph">OodleAPI_LZ_Compressors</a></td><td width=33% align=right><span class='arrowright'></span><a href="javascript:show('OodleLZ_GetDecodeBufferSize.html')" class="paragraph">OodleLZ_GetDecodeBufferSize</a></td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="OodleX_GetStatus.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>OodleX_GetStatus</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "OodleX_GetStatus.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="OodleX_GetStatus.html_backmenu">
<table class=dropmenu>
<tr><td><span class='arrowright'></span>&nbsp;<a href="javascript:show('OodleX_Wait.html')" class="paragraph">OodleX_Wait</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<div class=prototype><div class=prototype_header>// Function prototype:</div><pre><span class=prototype_type><a href="javascript:show('OodleXStatus.html')" class="blue">OodleXStatus</a></span> <span class=prototype_type><a href="javascript:show('OodleX_GetStatus.html')" class="blue">OodleX_GetStatus</a></span>( <span class=prototype_type><a href="javascript:show('OodleXHandle.html')" class="blue">OodleXHandle</a></span> h,
<span class=prototype_type><a href="javascript:show('OodleXHandleDeleteIfDone.html')" class="blue">OodleXHandleDeleteIfDone</a></span> deleteIfDone OODEFAULT( OodleXHandleDeleteIfDone_No ) );</pre></div><div class=discussion_heading>Discussion</div>Get the Status of an async handle<div class=discussion_heading>Parameters</div> <table> <tr> <td style='vertical-align: top;' class=paramname><a id="OodleX_GetStatus.html_h" class=nohover>h</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> OodleXHandle weak reference
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleX_GetStatus.html_deleteIfDone" class=nohover>deleteIfDone</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> if <a href="javascript:show('OodleXHandleDeleteIfDone.html','OodleXHandleDeleteIfDone.html_OodleXHandleDeleteIfDone_Yes')" class="paragraph">OodleXHandleDeleteIfDone_Yes</a> and handle is not pending, it is deleted
</td></tr></table><div class=discussion_heading>Return Value</div> <table> <tr> <td style='vertical-align: top;' class=paramname><a id="OodleX_GetStatus.html_return" class=nohover>return</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> handle status
</td></tr></table><div class=discussion_heading>Discussion</div></p>
<p> This function does not block. Returns OodleXStatus_Invalid if the handle was already deleted or does not exist.
Test status for done by checking >= OodleXStatus_Done, because that also includes Error.
<br>&nbsp;<br> <table class=bar> <tr>
<td width=33% align=left><span class='arrowleft'></span><a href="javascript:show('OodleXHandleDeleteIfDone.html')" class="paragraph">OodleXHandleDeleteIfDone</a></td><td width=33% align=center><span class='arrowup'></span><a href="javascript:show('OodleXAPI_Handle.html')" class="paragraph">OodleX async handle operations</a></td><td width=33% align=right><span class='arrowright'></span><a href="javascript:show('OodleX_Wait.html')" class="paragraph">OodleX_Wait</a></td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="OodleX_Shutdown.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>OodleX_Shutdown</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "OodleX_Shutdown.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="OodleX_Shutdown.html_backmenu">
<table class=dropmenu>
<tr><td><span class='arrowleft'></span>&nbsp;<a href="javascript:show('OodleX_LogSystemInfo.html')" class="paragraph">OodleX_LogSystemInfo</a></td></tr><tr><td><span class='arrowright'></span>&nbsp;<a href="javascript:show('OodleX_Init_NoThreads.html')" class="paragraph">OodleX_Init_NoThreads</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<div class=prototype><div class=prototype_header>// Function prototype:</div><pre>void <span class=prototype_type><a href="javascript:show('OodleX_Shutdown.html')" class="blue">OodleX_Shutdown</a></span>( const char * threadProfileLogName OODEFAULT( NULL ),
<span class=prototype_type><a href="javascript:show('OodleX_Shutdown_LogLeaks.html')" class="blue">OodleX_Shutdown_LogLeaks</a></span> logLeaks OODEFAULT( OodleX_Shutdown_LogLeaks_Yes ),
OO_U64 allocStartCounter OODEFAULT( 0 ),
<span class=prototype_type><a href="javascript:show('OodleX_Shutdown_DebugBreakOnLeaks.html')" class="blue">OodleX_Shutdown_DebugBreakOnLeaks</a></span> debugBreakOnLeaks OODEFAULT( OodleX_Shutdown_DebugBreakOnLeaks_No ) );</pre></div><div class=discussion_heading>Discussion</div>Shut down Oodle at app exit time.<div class=discussion_heading>Parameters</div> <table> <tr> <td style='vertical-align: top;' class=paramname><a id="OodleX_Shutdown.html_threadProfileLogName" class=nohover>threadProfileLogName</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> (optional) if not NULL, and the ThreadProfiler is enabled, writes the threadprofiler output to this file name
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleX_Shutdown.html_logLeaks" class=nohover>logLeaks</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> (optional) if true and the LeakTracker is enabled, logs any leaks or memory or handles
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleX_Shutdown.html_allocStartCounter" class=nohover>allocStartCounter</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> (optional) initial counter for the LeakTrack log
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleX_Shutdown.html_debugBreakOnLeaks" class=nohover>debugBreakOnLeaks</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> (optional) if there are any leaks, do a debug break
</td></tr></table><div class=discussion_heading>Discussion</div></p>
<p> Pair with <a href="javascript:show('OodleX_Init.html')" class="paragraph">OodleX_Init</a>. No Oodle functions should be called after Shutdown.
</p>
<p> Call Shutdown from the same thread that called Init.
</p>
<p> Do not shutdown Oodle then init again. Only call Init and Shutdown once per run.
<br>&nbsp;<br> <table class=bar> <tr>
<td width=33% align=left><span class='arrowleft'></span><a href="javascript:show('OodleX_LogSystemInfo.html')" class="paragraph">OodleX_LogSystemInfo</a></td><td width=33% align=center><span class='arrowup'></span><a href="javascript:show('OodleXAPI_Init.html')" class="paragraph">OodleX Startup and Shutdown</a></td><td width=33% align=right><span class='arrowright'></span><a href="javascript:show('OodleX_Init_NoThreads.html')" class="paragraph">OodleX_Init_NoThreads</a></td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="OodleLZDecoder_Reset.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>OodleLZDecoder_Reset</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "OodleLZDecoder_Reset.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="OodleLZDecoder_Reset.html_backmenu">
<table class=dropmenu>
<tr><td><span class='arrowleft'></span>&nbsp;<a href="javascript:show('OodleLZDecoder_Destroy.html')" class="paragraph">OodleLZDecoder_Destroy</a></td></tr><tr><td><span class='arrowright'></span>&nbsp;<a href="javascript:show('OodleLZDecoder_DecodeSome.html')" class="paragraph">OodleLZDecoder_DecodeSome</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<div class=prototype><div class=prototype_header>// Function prototype:</div><pre>OO_BOOL <span class=prototype_type><a href="javascript:show('OodleLZDecoder_Reset.html')" class="blue">OodleLZDecoder_Reset</a></span>( <span class=prototype_type><a href="javascript:show('OodleLZDecoder.html')" class="blue">OodleLZDecoder</a></span> * decoder,
OO_SINTa decPos,
OO_SINTa decLen OODEFAULT( 0 ) );</pre></div><div class=discussion_heading>Discussion</div>Reset an OodleLZDecoder to restart at given pos<div class=discussion_heading>Parameters</div> <table> <tr> <td style='vertical-align: top;' class=paramname><a id="OodleLZDecoder_Reset.html_decoder" class=nohover>decoder</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> the OodleLZDecoder, made by <a href="javascript:show('OodleLZDecoder_Create.html')" class="paragraph">OodleLZDecoder_Create</a>
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleLZDecoder_Reset.html_decPos" class=nohover>decPos</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> position to reset to; must be a multiple of OODLELZ_BLOCK_LEN
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleLZDecoder_Reset.html_decLen" class=nohover>decLen</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> (optional) if not zero, change the length of the data we expect to decode
</td></tr></table><div class=discussion_heading>Return Value</div> <table> <tr> <td style='vertical-align: top;' class=paramname><a id="OodleLZDecoder_Reset.html_return" class=nohover>return</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> true for success
</td></tr></table><div class=discussion_heading>Discussion</div></p>
<p> If you are seeking in a packed stream, you must seek to a seek chunk reset point, as was made at compress time.
</p>
<p> That is, <a href="javascript:show('OodleLZ_CompressOptions.html','OodleLZ_CompressOptions.html_seekChunkReset')" class="paragraph">OodleLZ_CompressOptions:seekChunkReset</a> must have been true, and
<i>decPos</i> must be a multiple of <a href="javascript:show('OodleLZ_CompressOptions.html','OodleLZ_CompressOptions.html_seekChunkLen')" class="paragraph">OodleLZ_CompressOptions:seekChunkLen</a> that was used at compress time.
</p>
<p> You can use <a href="javascript:show('OodleLZ_GetChunkCompressor.html')" class="paragraph">OodleLZ_GetChunkCompressor</a> to verify that you are at a valid
independent chunk start point.
</p>
<p><br>&nbsp;<br> <table class=bar> <tr>
<td width=33% align=left><span class='arrowleft'></span><a href="javascript:show('OodleLZDecoder_Destroy.html')" class="paragraph">OodleLZDecoder_Destroy</a></td><td width=33% align=center><span class='arrowup'></span><a href="javascript:show('OodleAPI_LZ_Compressors.html')" class="paragraph">OodleAPI_LZ_Compressors</a></td><td width=33% align=right><span class='arrowright'></span><a href="javascript:show('OodleLZDecoder_DecodeSome.html')" class="paragraph">OodleLZDecoder_DecodeSome</a></td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="OodleXLog_Flush.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>OodleXLog_Flush</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "OodleXLog_Flush.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="OodleXLog_Flush.html_backmenu">
<table class=dropmenu>
<tr><td><span class='arrowleft'></span>&nbsp;<a href="javascript:show('OodleXLog_SetVerboseLevel.html')" class="paragraph">OodleXLog_SetVerboseLevel</a></td></tr><tr><td><span class='arrowright'></span>&nbsp;<a href="javascript:show('OodleXLog_PrintfError.html')" class="paragraph">OodleXLog_PrintfError</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<div class=prototype><div class=prototype_header>// Function prototype:</div><pre>void <span class=prototype_type><a href="javascript:show('OodleXLog_Flush.html')" class="blue">OodleXLog_Flush</a></span>( );</pre></div><div class=discussion_heading>Discussion</div>Flush output to the log<div class=discussion_heading>Discussion</div>Close &amp; reopen the log file to ensure data is on disk.
Useful when trying to debug a crash.
</p>
<p> OodleXLog_Flush also prints queued messaged from threads, namely the IOQ Log
which you turn on with <a href="javascript:show('OodleXInitOptions.html','OodleXInitOptions.html_m_OodleInit_IOQ_Log')" class="paragraph">OodleXInitOptions:m_OodleInit_IOQ_Log</a>. If you are using
the IOQ log, call OodleXLog_Flush once per frame or so when you want to see its
messages.
</p>
<p> You can also use <a href="javascript:show('OodleXLog_StateFlags.html','OodleXLog_StateFlags.html_OODLEXLOG_AUTOFLUSH_THREADLOG')" class="paragraph">OODLEXLOG_AUTOFLUSH_THREADLOG</a> in the log State, but that
only has affect when you do OodleLog Printfs.
<br>&nbsp;<br> <table class=bar> <tr>
<td width=33% align=left><span class='arrowleft'></span><a href="javascript:show('OodleXLog_SetVerboseLevel.html')" class="paragraph">OodleXLog_SetVerboseLevel</a></td><td width=33% align=center><span class='arrowup'></span><a href="javascript:show('OodleXAPI_Debug.html')" class="paragraph">OodleX Debug aids</a></td><td width=33% align=right><span class='arrowright'></span><a href="javascript:show('OodleXLog_PrintfError.html')" class="paragraph">OodleXLog_PrintfError</a></td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="OodleXIOQ_OpenAndReadMallocWholeFileAndClose_Async.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>OodleXIOQ_OpenAndReadMallocWholeFileAndClose_Async</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "OodleXIOQ_OpenAndReadMallocWholeFileAndClose_Async.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="OodleXIOQ_OpenAndReadMallocWholeFileAndClose_Async.html_backmenu">
<table class=dropmenu>
<tr><td><span class='arrowleft'></span>&nbsp;<a href="javascript:show('OodleXIOQ_OpenAndReadMallocWholeFile_Async.html')" class="paragraph">OodleXIOQ_OpenAndReadMallocWholeFile_Async</a></td></tr><tr><td><span class='arrowright'></span>&nbsp;<a href="javascript:show('OodleXIOQ_OpenWriteWholeFileClose_Async.html')" class="paragraph">OodleXIOQ_OpenWriteWholeFileClose_Async</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<div class=prototype><div class=prototype_header>// Function prototype:</div><pre><span class=prototype_type><a href="javascript:show('OodleXHandle.html')" class="blue">OodleXHandle</a></span> <span class=prototype_type><a href="javascript:show('OodleXIOQ_OpenAndReadMallocWholeFileAndClose_Async.html')" class="blue">OodleXIOQ_OpenAndReadMallocWholeFileAndClose_Async</a></span>( const char * name,
<span class=prototype_type><a href="javascript:show('OodleXFileOpenFlags.html')" class="blue">OodleXFileOpenFlags</a></span> fileOpenFlags OODEFAULT( OodleXFileOpenFlags_Default ),
const <span class=prototype_type><a href="javascript:show('OodleXFileOpsVTable.html')" class="blue">OodleXFileOpsVTable</a></span> * vtable OODEFAULT( NULL ),
<span class=prototype_type><a href="javascript:show('OodleXHandleAutoDelete.html')" class="blue">OodleXHandleAutoDelete</a></span> autoDelete OODEFAULT( OodleXHandleAutoDelete_No ),
<span class=prototype_type><a href="javascript:show('OodleXPriority.html')" class="blue">OodleXPriority</a></span> priority OODEFAULT( OodleXPriority_Normal ),
const <span class=prototype_type><a href="javascript:show('OodleXHandle.html')" class="blue">OodleXHandle</a></span> * dependencies OODEFAULT( NULL ),
OO_S32 numDependencies OODEFAULT( 0 ) );</pre></div><div class=discussion_heading>Discussion</div>Start a high level IO request to open a file, allocate a buffer for a whole file and read it<div class=discussion_heading>Parameters</div> <table> <tr> <td style='vertical-align: top;' class=paramname><a id="OodleXIOQ_OpenAndReadMallocWholeFileAndClose_Async.html_name" class=nohover>name</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> name of the file to open (VFS, UTF-8)
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXIOQ_OpenAndReadMallocWholeFileAndClose_Async.html_fileOpenFlags" class=nohover>fileOpenFlags</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> (optional) flags for the os file open (see <a href="javascript:show('OodleXFileOpenFlags.html')" class="paragraph">OodleXFileOpenFlags</a>)
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXIOQ_OpenAndReadMallocWholeFileAndClose_Async.html_vtable" class=nohover>vtable</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> (optional) the <a href="javascript:show('OodleXFileOpsVTable.html')" class="paragraph">OodleXFileOpsVTable</a> to use for all ops on this file
</td></tr></table><div class=discussion_heading>Return Value</div> <table> <tr> <td style='vertical-align: top;' class=paramname><a id="OodleXIOQ_OpenAndReadMallocWholeFileAndClose_Async.html_return" class=nohover>return</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> handle to the RMWF op; use <a href="javascript:show('OodleXIOQ_ReadMallocWholeFile_GetResult.html')" class="paragraph">OodleXIOQ_ReadMallocWholeFile_GetResult</a>
</td></tr></table><div class=discussion_heading>Discussion</div></p>
<p> High level IOQ operations are helpers built on the simpler IOQ low level ops.
</p>
<p> Performs <a href="javascript:show('OodleXIOQ_OpenForRead_Async.html')" class="paragraph">OodleXIOQ_OpenForRead_Async</a> and <a href="javascript:show('OodleXIOQ_ReadMallocWholeFile_Async.html')" class="paragraph">OodleXIOQ_ReadMallocWholeFile_Async</a> and <a href="javascript:show('OodleXIOQ_CloseFile_Async.html')" class="paragraph">OodleXIOQ_CloseFile_Async</a>.
</p>
<p> The <a href="javascript:show('OodleXHandle.html')" class="paragraph">OodleXHandle</a> returned is to the RMWF operation; use <a href="javascript:show('OodleXIOQ_ReadMallocWholeFile_GetResult.html')" class="paragraph">OodleXIOQ_ReadMallocWholeFile_GetResult</a>.
<br>&nbsp;<br> <table class=bar> <tr>
<td width=33% align=left><span class='arrowleft'></span><a href="javascript:show('OodleXIOQ_OpenAndReadMallocWholeFile_Async.html')" class="paragraph">OodleXIOQ_OpenAndReadMallocWholeFile_Async</a></td><td width=33% align=center><span class='arrowup'></span><a href="javascript:show('OodleXAPI_IOQ.html')" class="paragraph">OodleX low level async io</a></td><td width=33% align=right><span class='arrowright'></span><a href="javascript:show('OodleXIOQ_OpenWriteWholeFileClose_Async.html')" class="paragraph">OodleXIOQ_OpenWriteWholeFileClose_Async</a></td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="OodleCore_Plugins_SetJobSystem.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>OodleCore_Plugins_SetJobSystem</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "OodleCore_Plugins_SetJobSystem.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="OodleCore_Plugins_SetJobSystem.html_backmenu">
<table class=dropmenu>
<tr><td><span class='arrowleft'></span>&nbsp;<a href="javascript:show('OodleCore_Plugins_SetAllocators.html')" class="paragraph">OodleCore_Plugins_SetAllocators</a></td></tr><tr><td><span class='arrowright'></span>&nbsp;<a href="javascript:show('OodleCore_Plugins_SetJobSystemAndCount.html')" class="paragraph">OodleCore_Plugins_SetJobSystemAndCount</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<div class=prototype><div class=prototype_header>// Function prototype:</div><pre>void <span class=prototype_type><a href="javascript:show('OodleCore_Plugins_SetJobSystem.html')" class="blue">OodleCore_Plugins_SetJobSystem</a></span>( <span class=prototype_type><a href="javascript:show('t_fp_OodleCore_Plugin_RunJob.html')" class="blue">t_fp_OodleCore_Plugin_RunJob</a></span> * fp_RunJob,
<span class=prototype_type><a href="javascript:show('t_fp_OodleCore_Plugin_WaitJob.html')" class="blue">t_fp_OodleCore_Plugin_WaitJob</a></span> * fp_WaitJob );</pre></div><div class=discussion_heading>Discussion</div>DEPRECATED use OodleCore_Plugins_SetJobSystemAndCount instead<div class=discussion_heading>Discussion</div>See <a href="javascript:show('OodleCore_Plugins_SetJobSystemAndCount.html')" class="paragraph">OodleCore_Plugins_SetJobSystemAndCount</a>
<br>&nbsp;<br> <table class=bar> <tr>
<td width=33% align=left><span class='arrowleft'></span><a href="javascript:show('OodleCore_Plugins_SetAllocators.html')" class="paragraph">OodleCore_Plugins_SetAllocators</a></td><td width=33% align=center><span class='arrowup'></span><a href="javascript:show('OodleAPI_OodleCore_Plugins.html')" class="paragraph">Core plugins</a></td><td width=33% align=right><span class='arrowright'></span><a href="javascript:show('OodleCore_Plugins_SetJobSystemAndCount.html')" class="paragraph">OodleCore_Plugins_SetJobSystemAndCount</a></td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="OodleX_ThreadFunc.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>OodleX_ThreadFunc</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "OodleX_ThreadFunc.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="OodleX_ThreadFunc.html_backmenu">
<table class=dropmenu>
<tr><td><span class='arrowleft'></span>&nbsp;<a href="javascript:show('OodleX_Semaphore.html')" class="paragraph">OodleX_Semaphore</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<div class=prototype><div class=prototype_header>// Function typedef:</div><pre>OO_U32( OODLE_CALLBACK <span class=prototype_type><a href="javascript:show('OodleX_ThreadFunc.html')" class="blue">OodleX_ThreadFunc</a></span> )( void * userdata );</pre></div><div class=discussion_heading>Discussion</div>User-provided callback for threads<div class=discussion_heading>Discussion</div>NOTE : it is not intended that you use these in production. They are for use in the Oodle
examples. Replace with your own thread functions for shipping.
<br>&nbsp;<br> <table class=bar> <tr>
<td width=33% align=left><span class='arrowleft'></span><a href="javascript:show('OodleX_Semaphore.html')" class="paragraph">OodleX_Semaphore</a></td><td width=33% align=center><span class='arrowup'></span><a href="javascript:show('OodleXAPI_Threading.html')" class="paragraph">OodleX threading util</a></td><td width=33% align=right><span class='arrowright'></span><a href="javascript:show('OodleXAPI_IOQ.html')" class="paragraph">OodleX low level async io</a></td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="OodleLZ_GetFirstChunkCompressor.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>OodleLZ_GetFirstChunkCompressor</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "OodleLZ_GetFirstChunkCompressor.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="OodleLZ_GetFirstChunkCompressor.html_backmenu">
<table class=dropmenu>
<tr><td><span class='arrowleft'></span>&nbsp;<a href="javascript:show('OodleLZ_GetAllChunksCompressor.html')" class="paragraph">OodleLZ_GetAllChunksCompressor</a></td></tr><tr><td><span class='arrowright'></span>&nbsp;<a href="javascript:show('OodleLZ_GetChunkCompressor.html')" class="paragraph">OodleLZ_GetChunkCompressor</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<div class=prototype><div class=prototype_header>// Function prototype:</div><pre><span class=prototype_type><a href="javascript:show('OodleLZ_Compressor.html')" class="blue">OodleLZ_Compressor</a></span> <span class=prototype_type><a href="javascript:show('OodleLZ_GetFirstChunkCompressor.html')" class="blue">OodleLZ_GetFirstChunkCompressor</a></span>( const void * compChunkPtr,
OO_SINTa compBufAvail,
OO_BOOL * pIndependent );</pre></div><div class=discussion_heading>Discussion</div>ask who compressed this chunk<div class=discussion_heading>Parameters</div> <table> <tr> <td style='vertical-align: top;' class=paramname><a id="OodleLZ_GetFirstChunkCompressor.html_compChunkPtr" class=nohover>compChunkPtr</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> pointer to compressed data; must be the start of compressed buffer, or a step of <a href="javascript:show('OODLELZ_BLOCK_LEN.html')" class="paragraph">OODLELZ_BLOCK_LEN</a> raw bytes
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleLZ_GetFirstChunkCompressor.html_compBufAvail" class=nohover>compBufAvail</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> number of bytes at <i>compChunkPtr</i> available to read
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleLZ_GetFirstChunkCompressor.html_pIndependent" class=nohover>pIndependent</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> (optional) filled with a bool for whether this chunk is independent of predecessors
</td></tr></table><div class=discussion_heading>Return Value</div> <table> <tr> <td style='vertical-align: top;' class=paramname><a id="OodleLZ_GetFirstChunkCompressor.html_return" class=nohover>return</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> the <a href="javascript:show('OodleLZ_Compressor.html')" class="paragraph">OodleLZ_Compressor</a> used to encode this chunk
</td></tr></table><div class=discussion_heading>Discussion</div></p>
<p> note this is only for this chunk - later chunks may have different compressors (eg. with Hydra)
if you compressed all chunks the same it's up to you to store that info in your header
</p>
<p> Use <a href="javascript:show('OodleLZ_GetAllChunksCompressor.html')" class="paragraph">OodleLZ_GetAllChunksCompressor</a> for data that might be mixed compressors.
</p>
<p> This replaces the deprecated function <a href="javascript:show('OodleLZ_GetChunkCompressor.html')" class="paragraph">OodleLZ_GetChunkCompressor</a>
</p>
<p> returns OodleLZ_Compressor_Invalid if <i>compBufAvail</i> is too small or the chunk is corrupt
<br>&nbsp;<br> <table class=bar> <tr>
<td width=33% align=left><span class='arrowleft'></span><a href="javascript:show('OodleLZ_GetAllChunksCompressor.html')" class="paragraph">OodleLZ_GetAllChunksCompressor</a></td><td width=33% align=center><span class='arrowup'></span><a href="javascript:show('OodleAPI_LZ_Compressors.html')" class="paragraph">OodleAPI_LZ_Compressors</a></td><td width=33% align=right><span class='arrowright'></span><a href="javascript:show('OodleLZ_GetChunkCompressor.html')" class="paragraph">OodleLZ_GetChunkCompressor</a></td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="OodleLZ_GetNumSeekChunks.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>OodleLZ_GetNumSeekChunks</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "OodleLZ_GetNumSeekChunks.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="OodleLZ_GetNumSeekChunks.html_backmenu">
<table class=dropmenu>
<tr><td><span class='arrowleft'></span>&nbsp;<a href="javascript:show('OodleLZ_MakeSeekChunkLen.html')" class="paragraph">OodleLZ_MakeSeekChunkLen</a></td></tr><tr><td><span class='arrowright'></span>&nbsp;<a href="javascript:show('OodleLZ_GetSeekTableMemorySizeNeeded.html')" class="paragraph">OodleLZ_GetSeekTableMemorySizeNeeded</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<div class=prototype><div class=prototype_header>// Function prototype:</div><pre>OO_S32 <span class=prototype_type><a href="javascript:show('OodleLZ_GetNumSeekChunks.html')" class="blue">OodleLZ_GetNumSeekChunks</a></span>( OO_S64 rawLen,
OO_S32 seekChunkLen );</pre></div><div class=discussion_heading>Discussion</div>Compute the number of seek chunks<div class=discussion_heading>Parameters</div> <table> <tr> <td style='vertical-align: top;' class=paramname><a id="OodleLZ_GetNumSeekChunks.html_rawLen" class=nohover>rawLen</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> total length of uncompressed data
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleLZ_GetNumSeekChunks.html_seekChunkLen" class=nohover>seekChunkLen</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> the length of a seek chunk (eg from <a href="javascript:show('OodleLZ_MakeSeekChunkLen.html')" class="paragraph">OodleLZ_MakeSeekChunkLen</a>)
</td></tr></table><div class=discussion_heading>Return Value</div> <table> <tr> <td style='vertical-align: top;' class=paramname><a id="OodleLZ_GetNumSeekChunks.html_return" class=nohover>return</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> the number of seek chunks
</td></tr></table><div class=discussion_heading>Discussion</div></p>
<p> returns (rawLen+seekChunkLen-1)/seekChunkLen
<br>&nbsp;<br> <table class=bar> <tr>
<td width=33% align=left><span class='arrowleft'></span><a href="javascript:show('OodleLZ_MakeSeekChunkLen.html')" class="paragraph">OodleLZ_MakeSeekChunkLen</a></td><td width=33% align=center><span class='arrowup'></span><a href="javascript:show('OodleAPI_LZ_Compressors.html')" class="paragraph">OodleAPI_LZ_Compressors</a></td><td width=33% align=right><span class='arrowright'></span><a href="javascript:show('OodleLZ_GetSeekTableMemorySizeNeeded.html')" class="paragraph">OodleLZ_GetSeekTableMemorySizeNeeded</a></td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="OodleXFileOpsVTable.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>OodleXFileOpsVTable</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "OodleXFileOpsVTable.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="OodleXFileOpsVTable.html_backmenu">
<table class=dropmenu>
<tr><td><span class='arrowright'></span>&nbsp;<a href="javascript:show('OodleXFileInfo.html')" class="paragraph">OodleXFileInfo</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<div class=prototype><div class=prototype_header>// Structure definition:</div><pre><span class=prototype_type>struct</span> <a href="javascript:show('OodleXFileOpsVTable.html')">OodleXFileOpsVTable</a>
{
&nbsp;&nbsp;&nbsp;&nbsp;<span class=prototype_type><a href="javascript:show('OodleXOSFile.html')" class="blue">OodleXOSFile</a></span> (OODLE_CALLBACK *sync_open)(const <span class=prototype_type><a href="javascript:show('OodleXFileOpsVTable.html')" class="blue">OodleXFileOpsVTable</a></span> * vtable,const char * name,<span class=prototype_type><a href="javascript:show('OodleXFileMode.html')" class="blue">OodleXFileMode</a></span> mode,<span class=prototype_type><a href="javascript:show('OodleXFileOpenFlags.html')" class="blue">OodleXFileOpenFlags</a></span> flags, OO_S64 reserveSize, OO_S32 * pAlignmentRequired );
&nbsp;&nbsp;&nbsp;&nbsp;OO_BOOL (OODLE_CALLBACK *sync_close)(const <span class=prototype_type><a href="javascript:show('OodleXFileOpsVTable.html')" class="blue">OodleXFileOpsVTable</a></span> * vtable,<span class=prototype_type><a href="javascript:show('OodleXOSFile.html')" class="blue">OodleXOSFile</a></span> handle,const char * name, OO_S64 truncateSize );
&nbsp;&nbsp;&nbsp;&nbsp;OO_BOOL (OODLE_CALLBACK *sync_get_file_info)(const <span class=prototype_type><a href="javascript:show('OodleXFileOpsVTable.html')" class="blue">OodleXFileOpsVTable</a></span> * vtable,<span class=prototype_type><a href="javascript:show('OodleXOSFile.html')" class="blue">OodleXOSFile</a></span> handle,<span class=prototype_type><a href="javascript:show('OodleXFileInfo.html')" class="blue">OodleXFileInfo</a></span> * info);
&nbsp;&nbsp;&nbsp;&nbsp;OO_BOOL (OODLE_CALLBACK *sync_read)(const <span class=prototype_type><a href="javascript:show('OodleXFileOpsVTable.html')" class="blue">OodleXFileOpsVTable</a></span> * vtable, <span class=prototype_type><a href="javascript:show('OodleXOSFile.html')" class="blue">OodleXOSFile</a></span> handle, OO_S64 pos, OO_S32 size, void * memory, OO_S32 * pGotSize);
&nbsp;&nbsp;&nbsp;&nbsp;OO_BOOL (OODLE_CALLBACK *sync_write)(const <span class=prototype_type><a href="javascript:show('OodleXFileOpsVTable.html')" class="blue">OodleXFileOpsVTable</a></span> * vtable,<span class=prototype_type><a href="javascript:show('OodleXOSFile.html')" class="blue">OodleXOSFile</a></span> handle, OO_S64 pos, OO_S32 size, const void * memory);
&nbsp;&nbsp;&nbsp;&nbsp;OO_BOOL (OODLE_CALLBACK *sync_set_file_size)(const <span class=prototype_type><a href="javascript:show('OodleXFileOpsVTable.html')" class="blue">OodleXFileOpsVTable</a></span> * vtable,<span class=prototype_type><a href="javascript:show('OodleXOSFile.html')" class="blue">OodleXOSFile</a></span> handle, OO_S64 size);
&nbsp;&nbsp;&nbsp;&nbsp;OO_U32 (OODLE_CALLBACK *get_last_error)(const <span class=prototype_type><a href="javascript:show('OodleXFileOpsVTable.html')" class="blue">OodleXFileOpsVTable</a></span> * vtable,<span class=prototype_type><a href="javascript:show('OodleXOSFile.html')" class="blue">OodleXOSFile</a></span> handle);
&nbsp;&nbsp;&nbsp;&nbsp;<span class=prototype_type><a href="javascript:show('OodleXError.html')" class="blue">OodleXError</a></span> (OODLE_CALLBACK *get_error_enum)(const <span class=prototype_type><a href="javascript:show('OodleXFileOpsVTable.html')" class="blue">OodleXFileOpsVTable</a></span> * vtable,OO_U32 err);
&nbsp;&nbsp;&nbsp;&nbsp;void (OODLE_CALLBACK *get_error_string)(const <span class=prototype_type><a href="javascript:show('OodleXFileOpsVTable.html')" class="blue">OodleXFileOpsVTable</a></span> * vtable,OO_U32 err,char * pInto,int intoSize);
&nbsp;&nbsp;&nbsp;&nbsp;OO_BOOL (OODLE_CALLBACK *delete_file)(const <span class=prototype_type><a href="javascript:show('OodleXFileOpsVTable.html')" class="blue">OodleXFileOpsVTable</a></span> * vtable,const char * name);
&nbsp;&nbsp;&nbsp;&nbsp;OO_BOOL (OODLE_CALLBACK *rename_file)(const <span class=prototype_type><a href="javascript:show('OodleXFileOpsVTable.html')" class="blue">OodleXFileOpsVTable</a></span> * vtable,const char * fm,const char * to,OO_BOOL overwrite);
&nbsp;&nbsp;&nbsp;&nbsp;<span class=prototype_type><a href="javascript:show('OodleXOSFileListing.html')" class="blue">OodleXOSFileListing</a></span> (OODLE_CALLBACK *listdir_open)(const <span class=prototype_type><a href="javascript:show('OodleXFileOpsVTable.html')" class="blue">OodleXFileOpsVTable</a></span> * vtable,const char * dir);
&nbsp;&nbsp;&nbsp;&nbsp;void (OODLE_CALLBACK *listdir_close)(const <span class=prototype_type><a href="javascript:show('OodleXFileOpsVTable.html')" class="blue">OodleXFileOpsVTable</a></span> * vtable,<span class=prototype_type><a href="javascript:show('OodleXOSFileListing.html')" class="blue">OodleXOSFileListing</a></span> handle);
&nbsp;&nbsp;&nbsp;&nbsp;OO_BOOL (OODLE_CALLBACK *listdir_next)(const <span class=prototype_type><a href="javascript:show('OodleXFileOpsVTable.html')" class="blue">OodleXFileOpsVTable</a></span> * vtable,<span class=prototype_type><a href="javascript:show('OodleXOSFileListing.html')" class="blue">OodleXOSFileListing</a></span> handle,const char* path,char * name,int nameSize,<span class=prototype_type><a href="javascript:show('OodleXFileInfo.html')" class="blue">OodleXFileInfo</a></span> * info);
&nbsp;&nbsp;&nbsp;&nbsp;OO_BOOL (OODLE_CALLBACK *get_filename_info)(const <span class=prototype_type><a href="javascript:show('OodleXFileOpsVTable.html')" class="blue">OodleXFileOpsVTable</a></span> * vtable,const char * name,<span class=prototype_type><a href="javascript:show('OodleXFileInfo.html')" class="blue">OodleXFileInfo</a></span> * info);
&nbsp;&nbsp;&nbsp;&nbsp;OO_BOOL (OODLE_CALLBACK *set_filename_info)(const <span class=prototype_type><a href="javascript:show('OodleXFileOpsVTable.html')" class="blue">OodleXFileOpsVTable</a></span> * vtable,const char * name,OO_U32 flags,OO_U64 modtime);
&nbsp;&nbsp;&nbsp;&nbsp;OO_BOOL (OODLE_CALLBACK *force_writeable)(const <span class=prototype_type><a href="javascript:show('OodleXFileOpsVTable.html')" class="blue">OodleXFileOpsVTable</a></span> * vtable,const char * name);
&nbsp;&nbsp;&nbsp;&nbsp;OO_BOOL (OODLE_CALLBACK *make_dir)(const <span class=prototype_type><a href="javascript:show('OodleXFileOpsVTable.html')" class="blue">OodleXFileOpsVTable</a></span> * vtable,const char * name);
&nbsp;&nbsp;&nbsp;&nbsp;void * fileops_data;
};
</pre></div><div class=discussion_heading>Discussion</div> VTable struct of lowest level file ops<div class=discussion_heading>Members</div> <table> <tr> <td style='vertical-align: top;' class=paramname><a id="OodleXFileOpsVTable.html_sync_open" class=nohover>sync_open</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> open file in desired mode; reserveSize is for WriteCreate only</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXFileOpsVTable.html_sync_close" class=nohover>sync_close</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> close a file; must provide name if truncateSize is not -1 ; truncateSize only applies for files open for Write ; truncate may happen after closing, non-atomically</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXFileOpsVTable.html_sync_get_file_info" class=nohover>sync_get_file_info</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> fill out info</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXFileOpsVTable.html_sync_read" class=nohover>sync_read</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> read from a file at pos; pos, size &amp; memory must all be aligned; fill out pGotSize; *pGotSize must == size if you return true unless you are at EOF</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXFileOpsVTable.html_sync_write" class=nohover>sync_write</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> write to a file at pos; pos, size &amp; memory must all be aligned; must write full size if you return true</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXFileOpsVTable.html_sync_set_file_size" class=nohover>sync_set_file_size</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> set file size; size must be aligned! to set unaligned size, use truncateSize on close</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXFileOpsVTable.html_get_last_error" class=nohover>get_last_error</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> returns an OS error code</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXFileOpsVTable.html_get_error_enum" class=nohover>get_error_enum</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> maps an OS error code to an OodleXError enum</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXFileOpsVTable.html_get_error_string" class=nohover>get_error_string</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> takes OS error code, fills pInto (const OodleXFileOpsVTable * vtable,UTF8)</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXFileOpsVTable.html_delete_file" class=nohover>delete_file</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> delete by name</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXFileOpsVTable.html_rename_file" class=nohover>rename_file</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> rename by name ; overwrite existing only if passed true</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXFileOpsVTable.html_listdir_open" class=nohover>listdir_open</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> returns 0 if dir does not exist</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXFileOpsVTable.html_listdir_close" class=nohover>listdir_close</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> pair with listdir_open</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXFileOpsVTable.html_listdir_next" class=nohover>listdir_next</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> listdir_next returns true if <i>info</i> is filled out ; name is UTF8</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXFileOpsVTable.html_get_filename_info" class=nohover>get_filename_info</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> get info by name</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXFileOpsVTable.html_set_filename_info" class=nohover>set_filename_info</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> set OodleXFileInfo:flags and/or modtime (const OodleXFileOpsVTable * vtable,use OODLEX_FILEINFO_FLAG_INVALID and OODLEX_FILEINFO_MODTIME_INVALID to not change)</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXFileOpsVTable.html_make_dir" class=nohover>make_dir</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> make a dir</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXFileOpsVTable.html_fileops_data" class=nohover>fileops_data</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> set by the creator the vtable and used however you like</td></tr></table><div class=discussion_heading>Discussion</div> IOQ acts through a VTable , which allows you to plug in your own functions to bottom level IO
</p>
<p><br>&nbsp;<br> <table class=bar> <tr>
<td width=33% align=left><span class='arrowleft'></span><a href="javascript:show('OodleXFileOpenFlags.html')" class="paragraph">OodleXFileOpenFlags</a></td><td width=33% align=center><span class='arrowup'></span><a href="javascript:show('OodleXAPI_IOQ.html')" class="paragraph">OodleX low level async io</a></td><td width=33% align=right><span class='arrowright'></span><a href="javascript:show('OodleXFileInfo.html')" class="paragraph">OodleXFileInfo</a></td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="OodleNetwork_About.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>About Oodle Network Compression</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "OodleNetwork_About.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="OodleNetwork_About.html_backmenu">
<table class=dropmenu>
<tr><td><span class='arrowleft'></span>&nbsp;<a href="javascript:show('OodleAPI_OodleNetwork1.html')" class="paragraph">OodleAPI_OodleNetwork1</a></td></tr><tr><td><span class='arrowup'></span>&nbsp;<a href="javascript:show('OodleAPI_Network.html')" class="paragraph">Oodle Network compression</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<P>
Oodle Network Compression provides realtime compression &amp; decompression of game
packets.
</p>
<p>The primary compressor which you probably want is OodleNetwork1. See
<a href="javascript:show('OodleNetwork1_About.html')" class="paragraph">About OodleNetwork1</a> .
</p>
<p>If you are evaluating Oodle Network, the main thing you need to do is to capture a large
data set for testing and training. See <a href="javascript:show('OodleNetwork_About_CapturingTrainingData.html')" class="paragraph">Capturing Training data for OodleNetwork</a>
</p>
<p>Note that network packet compression is separate from compression of static packages. eg. for sending
game updates or content, you would compress the data offline and just store it
compressed on your server. For that, you should use the normal Oodle LZ compressors.
See <a href="javascript:show('OodleLZ_About.html')" class="paragraph">About OodleLZ</a>.
</p>
<p><p><ul class='TOCItem'>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleNetwork_About_CapturingTrainingData.html')">Capturing Training data for OodleNetwork</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleNetwork_About_FormingPacketsForMaximumCompression.html')">Forming Packets for Maximum Compression</a></li>
</ul>
</p>
<p><ul>
<li> <a href="javascript:show('OodleNetwork1_About.html')" class="paragraph">About OodleNetwork1</a>
<li> <a href="javascript:show('OodleAPI_OodleNetwork1.html')" class="paragraph">OodleAPI_OodleNetwork1</a></ul><br>&nbsp;<br> <table class=bar> <tr>
<td width=33% align=left><span class='arrowleft'></span><a href="javascript:show('OodleNetwork1UDP_StateCompacted.html')" class="paragraph">OodleNetwork1UDP_StateCompacted</a></td><td width=33% align=center><span class='arrowup'></span><a href="javascript:show('OodleAPI_Network.html')" class="paragraph">Oodle Network compression</a></td><td width=33% align=right><span class='arrowright'></span><a href="javascript:show('OodleNetwork_About_CapturingTrainingData.html')" class="paragraph">Capturing Training data for OodleNetwork</a></td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="Oodle_FAQ_OodleLZ_Decompress_Failed.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>FAQ: OodleLZ_Decompress is failing how do I diagnose it?</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "Oodle_FAQ_OodleLZ_Decompress_Failed.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="Oodle_FAQ_OodleLZ_Decompress_Failed.html_backmenu">
<table class=dropmenu>
<tr><td><span class='arrowup'></span>&nbsp;<a href="javascript:show('Oodle_FAQ.html')" class="paragraph">Frequently Asked Questions</a></td></tr><tr><td><span class='arrowright'></span>&nbsp;<a href="javascript:show('Oodle_FAQ_UseOodleWithNoAllocator.html')" class="paragraph">FAQ: How do I use Oodle with no allocator?</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<P>
If you are getting OODLELZ_FAILED and having trouble isolating it, here are some suggestions.
</p>
<p>For <a href="javascript:show('OodleLZ_Decompress.html')" class="paragraph">OodleLZ_Decompress</a> to succeed, the compressed bytes must be correct, and the arguments you pass in
(compBufSize and rawLen) must be correct. The raw size that the data decompresses to is not stored in
the compressed data, it's up to you to pass that in, and if that's wrong it will show up as OODLELZ_FAILED.
</p>
<p>The most common cause of this is that the compressed bytes are corrupted or weren't filled.
This can happen if the IO to fill them actually failed, or some mismatch about the number of compressed bytes
to load. It can happen if an async IO was used but it isn't actually done yet at the time of the Decompress
call (which would be a race).
</p>
<p>There are a couple of things you can do to try to track it down :
</p>
<p>Checksum the compressed data and verify it is valid before decompressing. You can either do your own checksums
or use the system in Oodle.
</p>
<p>To use the system in Oodle, you must encode the data with <a href="javascript:show('OodleLZ_CompressOptions.html','OodleLZ_CompressOptions.html_sendQuantumCRCs')" class="paragraph">OodleLZ_CompressOptions:sendQuantumCRCs</a> enabled
(they are off by default), then in the <a href="javascript:show('OodleLZ_Decompress.html')" class="paragraph">OodleLZ_Decompress</a> pass OodleLZ_CheckCRC_Yes.
</p>
<p>Oodle's CRC's are on the compressed data and are checked before the actual decompression. This will still give
you an OODLELZ_FAILED but will log about crc failure.
</p>
<p>To get the debug logs and perhaps more details :
</p>
<p>Use the Debug build of Oodle. Verbose logs are not compiled into the release build.
</p>
<p>Enable full log verbosity :
</p>
<p>OodlePlugin_Printf_Default does not show verbose logs. Install OodlePlugin_Printf_Verbose with <a href="javascript:show('OodleCore_Plugins_SetPrintf.html')" class="paragraph">OodleCore_Plugins_SetPrintf</a>.
</p>
<p>(If using OodleX, doesn't do that, instead use <a href="javascript:show('OodleXLog_SetVerboseLevel.html')" class="paragraph">OodleXLog_SetVerboseLevel</a>.)
</p>
<p>Another thing you can do :
</p>
<p>When you get OODLELZ_FAILED from OodleLZ_Decompress, add a branch to your code that detects that case and writes out
the compressed buffer that was passed in, as well as all the arguments to the OodleLZ_Decompress function.
Also write out where you expected that compressed buffer to come from in a file.
</p>
<p>Now go to the file that should contain that compressed data and diff it against the compressed data you logged out;
do they match? This can help to detect IO races and memory corruption.
</p>
<p>Another thing that can be helpful to check for races :
</p>
<p>After seeing an OODLELZ_FAILED return, pause and then repeat the same decompression again.
If it now succeeds, that could indicate a race.
</p>
<p>OodleLZ is fully thread safe and does not access any globals, however the compressed buffer,
the output decompressed buffer, and the decoder memory passed in should only be used by the current
thread.
</p>
<p>Note that races are not just possible in the compressed buffer that OodleLZ_Decompress reads;
the output uncompressed buffer is also read-write, so another thread writing in there could cause
an OODLELZ_FAILED, as could another thread using the passed in decoder scratch memory.
</p>
<p>If you've done all these things and are still lost, contact me. I'll need you to send me the results of what you've
found in the above steps, as well as the log of all the function arguments &amp; the compressed buffer contents passed to
OodleLZ_Decompress so I can reproduce the function call.<br>&nbsp;<br> <table class=bar> <tr>
<td width=33% align=left><span class='arrowleft'></span><a href="javascript:show('Oodle_FAQ.html')" class="paragraph">Frequently Asked Questions</a></td><td width=33% align=center><span class='arrowup'></span><a href="javascript:show('Oodle_FAQ.html')" class="paragraph">Frequently Asked Questions</a></td><td width=33% align=right><span class='arrowright'></span><a href="javascript:show('Oodle_FAQ_UseOodleWithNoAllocator.html')" class="paragraph">FAQ: How do I use Oodle with no allocator?</a></td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="OodleLZ_Profile.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>OodleLZ_Profile</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "OodleLZ_Profile.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="OodleLZ_Profile.html_backmenu">
<table class=dropmenu>
<tr><td><span class='arrowleft'></span>&nbsp;<a href="javascript:show('OodleLZ_CheckCRC.html')" class="paragraph">OodleLZ_CheckCRC</a></td></tr><tr><td><span class='arrowright'></span>&nbsp;<a href="javascript:show('OodleDecompressCallbackRet.html')" class="paragraph">OodleDecompressCallbackRet</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<div class=prototype><div class=prototype_header>// Enumerant:</div><pre><span class=prototype_type>enum</span> <a href="javascript:show('OodleLZ_Profile.html')">OodleLZ_Profile</a>
{
&nbsp;&nbsp;&nbsp;&nbsp;OodleLZ_Profile_Main = 0,
&nbsp;&nbsp;&nbsp;&nbsp;OodleLZ_Profile_Reduced = 1,
&nbsp;&nbsp;&nbsp;&nbsp;OodleLZ_Profile_Force32 = 0x40000000
};
</pre></div><div class=discussion_heading>Discussion</div> Decode profile to target <div class=discussion_heading>Enumerants</div> <table> <tr> <td style='vertical-align: top;' class=paramname><a id="OodleLZ_Profile.html_OodleLZ_Profile_Main" class=nohover>OodleLZ_Profile_Main</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> Main profile (all current features allowed)</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleLZ_Profile.html_OodleLZ_Profile_Reduced" class=nohover>OodleLZ_Profile_Reduced</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> Reduced profile (Kraken only, limited feature set)</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleLZ_Profile.html_OodleLZ_Profile_Force32" class=nohover>OodleLZ_Profile_Force32</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc></td></tr></table><br>&nbsp;<br> <table class=bar> <tr>
<td width=33% align=left><span class='arrowleft'></span><a href="javascript:show('OodleLZ_CheckCRC.html')" class="paragraph">OodleLZ_CheckCRC</a></td><td width=33% align=center><span class='arrowup'></span><a href="javascript:show('OodleAPI_LZ_Compressors.html')" class="paragraph">OodleAPI_LZ_Compressors</a></td><td width=33% align=right><span class='arrowright'></span><a href="javascript:show('OodleDecompressCallbackRet.html')" class="paragraph">OodleDecompressCallbackRet</a></td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="OodleXIOQ_OpenForWriteCreate_Async.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>OodleXIOQ_OpenForWriteCreate_Async</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "OodleXIOQ_OpenForWriteCreate_Async.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="OodleXIOQ_OpenForWriteCreate_Async.html_backmenu">
<table class=dropmenu>
<tr><td><span class='arrowleft'></span>&nbsp;<a href="javascript:show('OodleXIOQ_OpenAndRead_Async.html')" class="paragraph">OodleXIOQ_OpenAndRead_Async</a></td></tr><tr><td><span class='arrowright'></span>&nbsp;<a href="javascript:show('OodleXIOQ_OpenForWriteTempName_Async.html')" class="paragraph">OodleXIOQ_OpenForWriteTempName_Async</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<div class=prototype><div class=prototype_header>// Function prototype:</div><pre><span class=prototype_type><a href="javascript:show('OodleXHandle.html')" class="blue">OodleXHandle</a></span> <span class=prototype_type><a href="javascript:show('OodleXIOQ_OpenForWriteCreate_Async.html')" class="blue">OodleXIOQ_OpenForWriteCreate_Async</a></span>( <span class=prototype_type><a href="javascript:show('OodleXIOQFile.html')" class="blue">OodleXIOQFile</a></span> * pFile,
const char * name,
OO_S64 initialFileSize OODEFAULT( <span class=prototype_type><a href="javascript:show('OODLEX_FILE_OPEN_NO_RESERVE_SIZE.html')" class="blue">OODLEX_FILE_OPEN_NO_RESERVE_SIZE</a></span> ),
<span class=prototype_type><a href="javascript:show('OodleXFileOpenFlags.html')" class="blue">OodleXFileOpenFlags</a></span> fileOpenFlags OODEFAULT( OodleXFileOpenFlags_Default ),
const <span class=prototype_type><a href="javascript:show('OodleXFileOpsVTable.html')" class="blue">OodleXFileOpsVTable</a></span> * vtable OODEFAULT( NULL ),
<span class=prototype_type><a href="javascript:show('OodleXHandleAutoDelete.html')" class="blue">OodleXHandleAutoDelete</a></span> autoDelete OODEFAULT( OodleXHandleAutoDelete_No ),
<span class=prototype_type><a href="javascript:show('OodleXPriority.html')" class="blue">OodleXPriority</a></span> priority OODEFAULT( OodleXPriority_Normal ),
const <span class=prototype_type><a href="javascript:show('OodleXHandle.html')" class="blue">OodleXHandle</a></span> * dependencies OODEFAULT( NULL ),
OO_S32 numDependencies OODEFAULT( 0 ) );</pre></div><div class=discussion_heading>Discussion</div>Start opening a file for write<div class=discussion_heading>Parameters</div> <table> <tr> <td style='vertical-align: top;' class=paramname><a id="OodleXIOQ_OpenForWriteCreate_Async.html_pFile" class=nohover>pFile</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> filled with a handle to the file which will be opened
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXIOQ_OpenForWriteCreate_Async.html_name" class=nohover>name</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> name of the file to open (VFS, UTF-8)
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXIOQ_OpenForWriteCreate_Async.html_initialFileSize" class=nohover>initialFileSize</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> (optional) pre-allocate file size for writing (must be <a href="javascript:show('OODLEX_IO_MAX_ALIGNMENT.html')" class="paragraph">OODLEX_IO_MAX_ALIGNMENT</a> aligned)
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXIOQ_OpenForWriteCreate_Async.html_fileOpenFlags" class=nohover>fileOpenFlags</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> (optional) flags for the os file open (see <a href="javascript:show('OodleXFileOpenFlags.html')" class="paragraph">OodleXFileOpenFlags</a>)
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXIOQ_OpenForWriteCreate_Async.html_vtable" class=nohover>vtable</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> (optional) the <a href="javascript:show('OodleXFileOpsVTable.html')" class="paragraph">OodleXFileOpsVTable</a> to use for all ops on this file
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXIOQ_OpenForWriteCreate_Async.html_autoDelete" class=nohover>autoDelete</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> (optional) see <a href="javascript:show('OodleXHandleAutoDelete.html')" class="paragraph">OodleXHandleAutoDelete</a>
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXIOQ_OpenForWriteCreate_Async.html_priority" class=nohover>priority</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> (optional) priority of the operation ; see <a href="javascript:show('OodleXPriority.html')" class="paragraph">OodleXPriority</a>
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXIOQ_OpenForWriteCreate_Async.html_dependencies" class=nohover>dependencies</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> (optional) dependencies; the async op won't start until these are all complete; note : these are not freed, they must be autodelete or you must free them some other way.
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXIOQ_OpenForWriteCreate_Async.html_numDependencies" class=nohover>numDependencies</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> (optional) number of handles in <i>deps</i> array
</td></tr></table><div class=discussion_heading>Return Value</div> <table> <tr> <td style='vertical-align: top;' class=paramname><a id="OodleXIOQ_OpenForWriteCreate_Async.html_return" class=nohover>return</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> handle to the operation, or 0 if it could not be started (usually due to invalid args)
</td></tr></table><div class=discussion_heading>Discussion</div></p>
<p> See many shared aspects of <a href="javascript:show('OodleXIOQ_OpenForRead_Async.html')" class="paragraph">OodleXIOQ_OpenForRead_Async</a> .
</p>
<p> OpenForWrite opens files as create/truncate with exclusive access.
</p>
<p> initialFileSize performs an initial pre-allocation of file space, same as <a href="javascript:show('OodleXIOQ_ReserveFileSizeForWrite_Async.html')" class="paragraph">OodleXIOQ_ReserveFileSizeForWrite_Async</a>.
Pre-allocated file space has undefined (garbage) contents. Writes are faster to pre-allocated space.
</p>
<p> WARNING : WriteCreate will overwrite (stomp) existing files by default. If you don't want that, pass
OodleXFileOpenFlags_WriteCreateDontStomp in <i>fileOpenFlags</i>.
<br>&nbsp;<br> <table class=bar> <tr>
<td width=33% align=left><span class='arrowleft'></span><a href="javascript:show('OodleXIOQ_OpenAndRead_Async.html')" class="paragraph">OodleXIOQ_OpenAndRead_Async</a></td><td width=33% align=center><span class='arrowup'></span><a href="javascript:show('OodleXAPI_IOQ.html')" class="paragraph">OodleX low level async io</a></td><td width=33% align=right><span class='arrowright'></span><a href="javascript:show('OodleXIOQ_OpenForWriteTempName_Async.html')" class="paragraph">OodleXIOQ_OpenForWriteTempName_Async</a></td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="OodleXLog_VerboseLevel.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>OodleXLog_VerboseLevel</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "OodleXLog_VerboseLevel.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="OodleXLog_VerboseLevel.html_backmenu">
<table class=dropmenu>
<tr><td><span class='arrowleft'></span>&nbsp;<a href="javascript:show('OodleXLog_StateFlags.html')" class="paragraph">OodleXLog_StateFlags</a></td></tr><tr><td><span class='arrowright'></span>&nbsp;<a href="javascript:show('OodleXLogCallbackRetRet.html')" class="paragraph">OodleXLogCallbackRetRet</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<div class=prototype><div class=prototype_header>// Enumerant:</div><pre><span class=prototype_type>enum</span> <a href="javascript:show('OodleXLog_VerboseLevel.html')">OodleXLog_VerboseLevel</a>
{
&nbsp;&nbsp;&nbsp;&nbsp;OodleXLog_Verbose_None = -1,
&nbsp;&nbsp;&nbsp;&nbsp;OodleXLog_Verbose_Minimal = 0,
&nbsp;&nbsp;&nbsp;&nbsp;OodleXLog_Verbose_Some = 1,
&nbsp;&nbsp;&nbsp;&nbsp;OodleXLog_Verbose_Lots = 2,
&nbsp;&nbsp;&nbsp;&nbsp;OodleXLog_Verbose_Force32 = 0x40000000
};
</pre></div><div class=discussion_heading>Discussion</div> Standard verbosity levels for use with <a href="javascript:show('OodleXLog_SetVerboseLevel.html')" class="paragraph">OodleXLog_SetVerboseLevel</a>
<div class=discussion_heading>Enumerants</div> <table> <tr> <td style='vertical-align: top;' class=paramname><a id="OodleXLog_VerboseLevel.html_OodleXLog_Verbose_None" class=nohover>OodleXLog_Verbose_None</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> log nothing</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXLog_VerboseLevel.html_OodleXLog_Verbose_Minimal" class=nohover>OodleXLog_Verbose_Minimal</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> log only very important messages, such as errors</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXLog_VerboseLevel.html_OodleXLog_Verbose_Some" class=nohover>OodleXLog_Verbose_Some</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> default setting during development</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXLog_VerboseLevel.html_OodleXLog_Verbose_Lots" class=nohover>OodleXLog_Verbose_Lots</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> log lots; may be slow (note: these are compiled out in release builds)</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXLog_VerboseLevel.html_OodleXLog_Verbose_Force32" class=nohover>OodleXLog_Verbose_Force32</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc></td></tr></table><br>&nbsp;<br> <table class=bar> <tr>
<td width=33% align=left><span class='arrowleft'></span><a href="javascript:show('OodleXLog_StateFlags.html')" class="paragraph">OodleXLog_StateFlags</a></td><td width=33% align=center><span class='arrowup'></span><a href="javascript:show('OodleXAPI_Debug.html')" class="paragraph">OodleX Debug aids</a></td><td width=33% align=right><span class='arrowright'></span><a href="javascript:show('OodleXLogCallbackRetRet.html')" class="paragraph">OodleXLogCallbackRetRet</a></td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="Oodle_About_Index.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>Index of Abouts</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "Oodle_About_Index.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="Oodle_About_Index.html_backmenu">
<table class=dropmenu>
<tr><td><span class='arrowup'></span>&nbsp;<a href="javascript:show('Oodle_About.html')" class="paragraph">About Oodle</a></td></tr><tr><td><span class='arrowright'></span>&nbsp;<a href="javascript:show('Oodle_About_ozip.html')" class="paragraph">About Oodle ozip</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<P>
<ul>
<li> <a href="javascript:show('Oodle_AboutExt.html')" class="paragraph">About Oodle Ext</a>
</ul></p>
<p><ul>
<li> <a href="javascript:show('OodleNetwork_About.html')" class="paragraph">About Oodle Network Compression</a>
</ul></p>
<p><ul>
<li> <a href="javascript:show('OodleLZ_About.html')" class="paragraph">About OodleLZ</a>
</ul></p>
<p><ul>
<li> <a href="javascript:show('OodleNetwork1_About.html')" class="paragraph">About OodleNetwork1</a>
</ul></p>
<p><ul>
<li> <a href="javascript:show('OodleXHandle_About.html')" class="paragraph">About OodleXHandle</a>
</ul></p>
<p><ul>
<li> <a href="javascript:show('OodleXIOQ_About.html')" class="paragraph">About OodleIOQ</a>
</ul></p>
<p><ul>
<li> <a href="javascript:show('OodleXMalloc_About.html')" class="paragraph">About OodleXMalloc</a>
</ul></p>
<p><ul>
<li> <a href="javascript:show('Oodle_About_Platforms.html')" class="paragraph">About Oodle on Platforms</a>
</ul></p>
<p><ul>
<li> <a href="javascript:show('Oodle_About_Examples.html')" class="paragraph">How to build and use the Oodle examples</a>
</ul></p>
<p><ul>
<li> <a href="javascript:show('Oodle_About_Job_Threading_Plugins.html')" class="paragraph">About Oodle Job Threading Plugins</a>
</ul></p>
<p><ul>
<li> <a href="javascript:show('Oodle_About_ozip.html')" class="paragraph">About Oodle ozip</a></ul><br>&nbsp;<br> <table class=bar> <tr>
<td width=33% align=left><span class='arrowleft'></span><a href="javascript:show('Oodle_About.html')" class="paragraph">About Oodle</a></td><td width=33% align=center><span class='arrowup'></span><a href="javascript:show('Oodle_About.html')" class="paragraph">About Oodle</a></td><td width=33% align=right><span class='arrowright'></span><a href="javascript:show('Oodle_About_ozip.html')" class="paragraph">About Oodle ozip</a></td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="OodleXLZ_ReadAndDecompress_Stream_Async.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>OodleXLZ_ReadAndDecompress_Stream_Async</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "OodleXLZ_ReadAndDecompress_Stream_Async.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="OodleXLZ_ReadAndDecompress_Stream_Async.html_backmenu">
<table class=dropmenu>
<tr><td><span class='arrowleft'></span>&nbsp;<a href="javascript:show('OodleXLZ_Compress_AsyncAndWait.html')" class="paragraph">OodleXLZ_Compress_AsyncAndWait</a></td></tr><tr><td><span class='arrowright'></span>&nbsp;<a href="javascript:show('OodleXDecompressCallback_WriteFile_Data_Init.html')" class="paragraph">OodleXDecompressCallback_WriteFile_Data_Init</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<div class=prototype><div class=prototype_header>// Function prototype:</div><pre><span class=prototype_type><a href="javascript:show('OodleXHandle.html')" class="blue">OodleXHandle</a></span> <span class=prototype_type><a href="javascript:show('OodleXLZ_ReadAndDecompress_Stream_Async.html')" class="blue">OodleXLZ_ReadAndDecompress_Stream_Async</a></span>( OO_U32 asyncSelect,
const void * packedDataPtr,
OO_SINTa packedLen,
void * rawPtr,
OO_SINTa rawChunkLen,
<span class=prototype_type><a href="javascript:show('OodleLZ_FuzzSafe.html')" class="blue">OodleLZ_FuzzSafe</a></span> fuzzSafe,
<span class=prototype_type><a href="javascript:show('OodleLZ_CheckCRC.html')" class="blue">OodleLZ_CheckCRC</a></span> checkCRC,
<span class=prototype_type><a href="javascript:show('OodleLZ_Verbosity.html')" class="blue">OodleLZ_Verbosity</a></span> verbosity,
<span class=prototype_type><a href="javascript:show('OodleDecompressCallback.html')" class="blue">OodleDecompressCallback</a></span> * pcb,
void * pcbData,
<span class=prototype_type><a href="javascript:show('OodleXIOQFile.html')" class="blue">OodleXIOQFile</a></span> readFile,
void * readBuf,
OO_S64 readStartPos,
<span class=prototype_type><a href="javascript:show('OodleXHandle.html')" class="blue">OodleXHandle</a></span> readPending,
OO_SINTa alreadyReadSize,
<span class=prototype_type><a href="javascript:show('OodleXHandleAutoDelete.html')" class="blue">OodleXHandleAutoDelete</a></span> autoDelete OODEFAULT( OodleXHandleAutoDelete_No ),
const <span class=prototype_type><a href="javascript:show('OodleXHandle.html')" class="blue">OodleXHandle</a></span> * dependencies OODEFAULT( NULL ),
OO_S32 numDependencies OODEFAULT( 0 ) );</pre></div><div class=discussion_heading>Discussion</div>Start an async op to incrementally stream in data and decompress<div class=discussion_heading>Parameters</div> <table> <tr> <td style='vertical-align: top;' class=paramname><a id="OodleXLZ_ReadAndDecompress_Stream_Async.html_asyncSelect" class=nohover>asyncSelect</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> logical OR of <a href="javascript:show('OodleXAsyncSelect.html')" class="paragraph">OodleXAsyncSelect</a> flags determine how the async is run (but Wide is ignored, this func is always narrow)
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXLZ_ReadAndDecompress_Stream_Async.html_packedDataPtr" class=nohover>packedDataPtr</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> pointer to start of compressed data
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXLZ_ReadAndDecompress_Stream_Async.html_packedLen" class=nohover>packedLen</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> length of compressed data
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXLZ_ReadAndDecompress_Stream_Async.html_rawPtr" class=nohover>rawPtr</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> pointer to memory to decompress into
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXLZ_ReadAndDecompress_Stream_Async.html_rawChunkLen" class=nohover>rawChunkLen</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> lenght of raw data to decompress
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXLZ_ReadAndDecompress_Stream_Async.html_checkCRC" class=nohover>checkCRC</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> if OodleLZ_CheckCRC_Yes, the decompressor checks the crc to ensure data integrity
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXLZ_ReadAndDecompress_Stream_Async.html_verbosity" class=nohover>verbosity</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> if not OodleLZ_Verbosity_None, will log some information
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXLZ_ReadAndDecompress_Stream_Async.html_pcb" class=nohover>pcb</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> OodleDecompressCallback called during decompression (NULL for none)
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXLZ_ReadAndDecompress_Stream_Async.html_pcbData" class=nohover>pcbData</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> user data passed to pcb
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXLZ_ReadAndDecompress_Stream_Async.html_readFile" class=nohover>readFile</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> IOQ file to read compressed data from (0 for none)
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXLZ_ReadAndDecompress_Stream_Async.html_readBuf" class=nohover>readBuf</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> pointer to memory where the reads from readFile should go (must be IO aligned)
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXLZ_ReadAndDecompress_Stream_Async.html_readStartPos" class=nohover>readStartPos</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> file position where readBuf starts (must be IO aligned)
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXLZ_ReadAndDecompress_Stream_Async.html_readPending" class=nohover>readPending</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> handle to previously fired read on the IOQ file
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXLZ_ReadAndDecompress_Stream_Async.html_alreadyReadSize" class=nohover>alreadyReadSize</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> the number of bytes of readBuf that are already read (not the number in packedDataPtr)
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXLZ_ReadAndDecompress_Stream_Async.html_autoDelete" class=nohover>autoDelete</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> (optional) see <a href="javascript:show('OodleXHandleAutoDelete.html')" class="paragraph">OodleXHandleAutoDelete</a>
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXLZ_ReadAndDecompress_Stream_Async.html_dependencies" class=nohover>dependencies</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> (optional) dependencies; the async op won't start until these are all complete; note : these are not freed, they must be autodelete or you must free them some other way.
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXLZ_ReadAndDecompress_Stream_Async.html_numDependencies" class=nohover>numDependencies</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> (optional) number of handles in <i>deps</i> array
</td></tr></table><div class=discussion_heading>Return Value</div> <table> <tr> <td style='vertical-align: top;' class=paramname><a id="OodleXLZ_ReadAndDecompress_Stream_Async.html_return" class=nohover>return</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> handle to the operation
</td></tr></table><div class=discussion_heading>Discussion</div></p>
<p> OodleLZ_Async_Decompress_ReadStream :
coroutine streaming LZ decoder ;
does incremental file reads (optionally - readFile can be zero) ;
calls back decode progress so you can do incremental writes (or whatever) ;
does not need a seek table (reads raw LZ data).
</p>
<p> OodleLZ_Async_Decompress_ReadStream is not "wide" (only one thread is used). It can be used to
overlap IO with decompression, but doesn't multi-thread decompression, even if the LZ data has seek chunks.
</p>
<p> OodleXLZ_ReadAndDecompress_Stream_Async reads raw LZ data.
</p>
<p> OodleXLZ_ReadAndDecompress_Stream_Async is mainly used when you want small granularity incremental callbacks;
if you only need <a href="javascript:show('OODLELZ_BLOCK_LEN.html')" class="paragraph">OODLELZ_BLOCK_LEN</a> callbacks, then <a href="javascript:show('OodleXLZ_Decompress_Narrow_Async.html')" class="paragraph">OodleXLZ_Decompress_Narrow_Async</a> is generally better,
and <a href="javascript:show('OodleXLZ_ReadAndDecompress_Wide_Async.html')" class="paragraph">OodleXLZ_ReadAndDecompress_Wide_Async</a> is fastest if you want "Wide" async decompression.
</p>
<p> <i>packedDataPtr</i> should be somewhere inside <i>readBuf</i> (if the packed data is at the start of the file, they are equal).
That is, (<i>packedDataPtr</i> - <i>readBuf</i> + <i>readStartPos</i>) is the position in the file where compressed data starts.
Note that <i>readBuf</i> and <i>readStartPos</i> must be IO aligned, but <i>packedDataPtr</i> does not need to be, so to read compressed
data from a non-aligned
</p>
<p> If provided, the <a href="javascript:show('OodleDecompressCallback.html')" class="paragraph">OodleDecompressCallback</a> is called as quanta of raw data are available. The callback
may be called more often than <a href="javascript:show('OODLELZ_BLOCK_LEN.html')" class="paragraph">OODLELZ_BLOCK_LEN</a> granularity.
</p>
<p> Set <a href="javascript:show('OodleDecompressCallback.html')" class="paragraph">OodleDecompressCallback</a> to OodleDecompressCallback_WriteFile to perform a streaming read-compress-write.
</p>
<p><br>&nbsp;<br> <table class=bar> <tr>
<td width=33% align=left><span class='arrowleft'></span><a href="javascript:show('OodleXLZ_Compress_AsyncAndWait.html')" class="paragraph">OodleXLZ_Compress_AsyncAndWait</a></td><td width=33% align=center><span class='arrowup'></span><a href="javascript:show('OodleXAPI_LZ_Async.html')" class="paragraph">OodleXAPI_LZ_Async</a></td><td width=33% align=right><span class='arrowright'></span><a href="javascript:show('OodleXDecompressCallback_WriteFile_Data_Init.html')" class="paragraph">OodleXDecompressCallback_WriteFile_Data_Init</a></td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="OodleLZ_FindSeekEntry.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>OodleLZ_FindSeekEntry</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "OodleLZ_FindSeekEntry.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="OodleLZ_FindSeekEntry.html_backmenu">
<table class=dropmenu>
<tr><td><span class='arrowleft'></span>&nbsp;<a href="javascript:show('OodleLZ_CheckSeekTableCRCs.html')" class="paragraph">OodleLZ_CheckSeekTableCRCs</a></td></tr><tr><td><span class='arrowright'></span>&nbsp;<a href="javascript:show('OodleLZ_GetSeekEntryPackedPos.html')" class="paragraph">OodleLZ_GetSeekEntryPackedPos</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<div class=prototype><div class=prototype_header>// Function prototype:</div><pre>OO_S32 <span class=prototype_type><a href="javascript:show('OodleLZ_FindSeekEntry.html')" class="blue">OodleLZ_FindSeekEntry</a></span>( OO_S64 rawPos,
const <span class=prototype_type><a href="javascript:show('OodleLZ_SeekTable.html')" class="blue">OodleLZ_SeekTable</a></span> * seekTable );</pre></div><div class=discussion_heading>Discussion</div>Find the seek entry that contains a raw position<div class=discussion_heading>Parameters</div> <table> <tr> <td style='vertical-align: top;' class=paramname><a id="OodleLZ_FindSeekEntry.html_rawPos" class=nohover>rawPos</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> uncompressed position to look for
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleLZ_FindSeekEntry.html_seekTable" class=nohover>seekTable</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> result of <a href="javascript:show('OodleLZ_CreateSeekTable.html')" class="paragraph">OodleLZ_CreateSeekTable</a>
</td></tr></table><div class=discussion_heading>Return Value</div> <table> <tr> <td style='vertical-align: top;' class=paramname><a id="OodleLZ_FindSeekEntry.html_return" class=nohover>return</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> a seek entry index
</td></tr></table><div class=discussion_heading>Discussion</div></p>
<p> returns the index of the chunk that contains <i>rawPos</i>
<br>&nbsp;<br> <table class=bar> <tr>
<td width=33% align=left><span class='arrowleft'></span><a href="javascript:show('OodleLZ_CheckSeekTableCRCs.html')" class="paragraph">OodleLZ_CheckSeekTableCRCs</a></td><td width=33% align=center><span class='arrowup'></span><a href="javascript:show('OodleAPI_LZ_Compressors.html')" class="paragraph">OodleAPI_LZ_Compressors</a></td><td width=33% align=right><span class='arrowright'></span><a href="javascript:show('OodleLZ_GetSeekEntryPackedPos.html')" class="paragraph">OodleLZ_GetSeekEntryPackedPos</a></td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="OodleNetwork1_SelectDictionarySupported.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>OodleNetwork1_SelectDictionarySupported</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "OodleNetwork1_SelectDictionarySupported.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="OodleNetwork1_SelectDictionarySupported.html_backmenu">
<table class=dropmenu>
<tr><td><span class='arrowleft'></span>&nbsp;<a href="javascript:show('OodleNetwork1UDP_State_Uncompact.html')" class="paragraph">OodleNetwork1UDP_State_Uncompact</a></td></tr><tr><td><span class='arrowright'></span>&nbsp;<a href="javascript:show('OodleNetwork1_SelectDictionaryFromPackets.html')" class="paragraph">OodleNetwork1_SelectDictionaryFromPackets</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<div class=prototype><div class=prototype_header>// Function prototype:</div><pre>OO_BOOL <span class=prototype_type><a href="javascript:show('OodleNetwork1_SelectDictionarySupported.html')" class="blue">OodleNetwork1_SelectDictionarySupported</a></span>( void );</pre></div><div class=discussion_heading>Discussion</div>Returns whether this version of the library can build new dictionaries.<div class=discussion_heading>Discussion</div>This functionality is only available on host platforms, not embedded
devices, game consoles, phones etc.
<br>&nbsp;<br> <table class=bar> <tr>
<td width=33% align=left><span class='arrowleft'></span><a href="javascript:show('OodleNetwork1UDP_State_Uncompact.html')" class="paragraph">OodleNetwork1UDP_State_Uncompact</a></td><td width=33% align=center><span class='arrowup'></span><a href="javascript:show('OodleAPI_OodleNetwork1.html')" class="paragraph">OodleAPI_OodleNetwork1</a></td><td width=33% align=right><span class='arrowright'></span><a href="javascript:show('OodleNetwork1_SelectDictionaryFromPackets.html')" class="paragraph">OodleNetwork1_SelectDictionaryFromPackets</a></td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="OodleAPI_LZ.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>Core LZ compression</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "OodleAPI_LZ.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="OodleAPI_LZ.html_backmenu">
<table class=dropmenu>
<tr><td><span class='arrowleft'></span>&nbsp;<a href="javascript:show('OodleAPI_OodleCore_Plugins.html')" class="paragraph">Core plugins</a></td></tr><tr><td><span class='arrowup'></span>&nbsp;<a href="javascript:show('OodleCoreAPI.html')" class="paragraph">Oodle2 Core API Documentation</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<P>
Oodle2 Core LZ lossless data compression.
</p>
<p> <p><ul class='TOCItem'>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleLZ_About.html')">About OodleLZ</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleLZ_About_ThreadPhasedDecode.html')">About OodleLZ ThreadPhased Decode</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleLZ_About_Hydra.html')">About OodleLZ Hydra</a></li>
<li><span onClick="HandleClick(event, null); return false" class='TOCGroup closedbook_icon'></span>&nbsp;<a href="javascript:show('OodleAPI_LZ_Compressors.html')">OodleAPI_LZ_Compressors</a></li>
<ul style="display:none" class='TOCItem'>
<li><span onClick="HandleClick(event, null); return false" class='TOCGroup closedbook_icon'></span>&nbsp;Defines</li>
<ul style="display:none" class='TOCItem'>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OODLE_ALLOW_DEPRECATED_COMPRESSORS.html')">OODLE_ALLOW_DEPRECATED_COMPRESSORS</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OODLELZ_LOCALDICTIONARYSIZE_MAX.html')">OODLELZ_LOCALDICTIONARYSIZE_MAX</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OODLELZ_SPACESPEEDTRADEOFFBYTES_DEFAULT.html')">OODLELZ_SPACESPEEDTRADEOFFBYTES_DEFAULT</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OODLELZ_BLOCK_LEN.html')">OODLELZ_BLOCK_LEN</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OODLELZ_BLOCK_MAX_COMPLEN.html')">OODLELZ_BLOCK_MAX_COMPLEN</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OODLELZ_QUANTUM_LEN.html')">OODLELZ_QUANTUM_LEN</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OODLELZ_FAILED.html')">OODLELZ_FAILED</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OODLELZ_SCRATCH_MEM_NO_BOUND.html')">OODLELZ_SCRATCH_MEM_NO_BOUND</a></li>
</ul>
<li><span onClick="HandleClick(event, null); return false" class='TOCGroup closedbook_icon'></span>&nbsp;Enumerants</li>
<ul style="display:none" class='TOCItem'>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleLZ_Verbosity.html')">OodleLZ_Verbosity</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleLZ_Compressor.html')">OodleLZ_Compressor</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleLZ_PackedRawOverlap.html')">OodleLZ_PackedRawOverlap</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleLZ_CheckCRC.html')">OodleLZ_CheckCRC</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleLZ_Profile.html')">OodleLZ_Profile</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleDecompressCallbackRet.html')">OodleDecompressCallbackRet</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleLZ_CompressionLevel.html')">OodleLZ_CompressionLevel</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleLZ_Jobify.html')">OodleLZ_Jobify</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleLZ_Decode_ThreadPhase.html')">OodleLZ_Decode_ThreadPhase</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleLZ_FuzzSafe.html')">OodleLZ_FuzzSafe</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleLZSeekTable_Flags.html')">OodleLZSeekTable_Flags</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleLZ_CompressScratchMemBoundType.html')">OodleLZ_CompressScratchMemBoundType</a></li>
</ul>
<li><span onClick="HandleClick(event, null); return false" class='TOCGroup closedbook_icon'></span>&nbsp;Structures</li>
<ul style="display:none" class='TOCItem'>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleLZ_CompressOptions.html')">OodleLZ_CompressOptions</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleLZ_DecodeSome_Out.html')">OodleLZ_DecodeSome_Out</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleLZDecoder.html')">OodleLZDecoder</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleLZ_SeekTable.html')">OodleLZ_SeekTable</a></li>
</ul>
<li><span onClick="HandleClick(event, null); return false" class='TOCGroup closedbook_icon'></span>&nbsp;Functions</li>
<ul style="display:none" class='TOCItem'>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleLZ_Compress.html')">OodleLZ_Compress</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleLZ_Decompress.html')">OodleLZ_Decompress</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleLZDecoder_Create.html')">OodleLZDecoder_Create</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleLZDecoder_MemorySizeNeeded.html')">OodleLZDecoder_MemorySizeNeeded</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleLZ_ThreadPhased_BlockDecoderMemorySizeNeeded.html')">OodleLZ_ThreadPhased_BlockDecoderMemorySizeNeeded</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleLZDecoder_Destroy.html')">OodleLZDecoder_Destroy</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleLZDecoder_Reset.html')">OodleLZDecoder_Reset</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleLZDecoder_DecodeSome.html')">OodleLZDecoder_DecodeSome</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleLZDecoder_MakeValidCircularWindowSize.html')">OodleLZDecoder_MakeValidCircularWindowSize</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleLZ_MakeSeekChunkLen.html')">OodleLZ_MakeSeekChunkLen</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleLZ_GetNumSeekChunks.html')">OodleLZ_GetNumSeekChunks</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleLZ_GetSeekTableMemorySizeNeeded.html')">OodleLZ_GetSeekTableMemorySizeNeeded</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleLZ_FillSeekTable.html')">OodleLZ_FillSeekTable</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleLZ_CreateSeekTable.html')">OodleLZ_CreateSeekTable</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleLZ_FreeSeekTable.html')">OodleLZ_FreeSeekTable</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleLZ_CheckSeekTableCRCs.html')">OodleLZ_CheckSeekTableCRCs</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleLZ_FindSeekEntry.html')">OodleLZ_FindSeekEntry</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleLZ_GetSeekEntryPackedPos.html')">OodleLZ_GetSeekEntryPackedPos</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleLZ_CompressionLevel_GetName.html')">OodleLZ_CompressionLevel_GetName</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleLZ_Compressor_GetName.html')">OodleLZ_Compressor_GetName</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleLZ_Jobify_GetName.html')">OodleLZ_Jobify_GetName</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleLZ_CompressOptions_GetDefault.html')">OodleLZ_CompressOptions_GetDefault</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleLZ_CompressOptions_Validate.html')">OodleLZ_CompressOptions_Validate</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleLZ_Compressor_UsesWholeBlockQuantum.html')">OodleLZ_Compressor_UsesWholeBlockQuantum</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleLZ_Compressor_UsesLargeWindow.html')">OodleLZ_Compressor_UsesLargeWindow</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleLZ_Compressor_CanDecodeInCircularWindow.html')">OodleLZ_Compressor_CanDecodeInCircularWindow</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleLZ_Compressor_CanDecodeThreadPhased.html')">OodleLZ_Compressor_CanDecodeThreadPhased</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleLZ_Compressor_CanDecodeInPlace.html')">OodleLZ_Compressor_CanDecodeInPlace</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleLZ_Compressor_MustDecodeWithoutResets.html')">OodleLZ_Compressor_MustDecodeWithoutResets</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleLZ_Compressor_CanDecodeFuzzSafe.html')">OodleLZ_Compressor_CanDecodeFuzzSafe</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleLZ_Compressor_RespectsDictionarySize.html')">OodleLZ_Compressor_RespectsDictionarySize</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleLZ_GetCompressScratchMemBound.html')">OodleLZ_GetCompressScratchMemBound</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleLZ_GetCompressScratchMemBoundEx.html')">OodleLZ_GetCompressScratchMemBoundEx</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleLZ_GetCompressedBufferSizeNeeded.html')">OodleLZ_GetCompressedBufferSizeNeeded</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleLZ_GetDecodeBufferSize.html')">OodleLZ_GetDecodeBufferSize</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleLZ_GetInPlaceDecodeBufferSize.html')">OodleLZ_GetInPlaceDecodeBufferSize</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleLZ_GetCompressedStepForRawStep.html')">OodleLZ_GetCompressedStepForRawStep</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleLZ_GetAllChunksCompressor.html')">OodleLZ_GetAllChunksCompressor</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleLZ_GetFirstChunkCompressor.html')">OodleLZ_GetFirstChunkCompressor</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleLZ_GetChunkCompressor.html')">OodleLZ_GetChunkCompressor</a></li>
</ul>
<li><span onClick="HandleClick(event, null); return false" class='TOCGroup closedbook_icon'></span>&nbsp;Typedefs</li>
<ul style="display:none" class='TOCItem'>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleDecompressCallback.html')">OodleDecompressCallback</a></li>
</ul>
</ul>
</ul>
<br>&nbsp;<br> <table class=bar> <tr>
<td width=33% align=left><span class='arrowleft'></span><a href="javascript:show('OodleCore_Plugins_SetAssertion.html')" class="paragraph">OodleCore_Plugins_SetAssertion</a></td><td width=33% align=center><span class='arrowup'></span><a href="javascript:show('OodleCoreAPI.html')" class="paragraph">Oodle2 Core API Documentation</a></td><td width=33% align=right><span class='arrowright'></span><a href="javascript:show('OodleLZ_About.html')" class="paragraph">About OodleLZ</a></td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="OodleDecompressCallback_WriteFile_Data.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>OodleDecompressCallback_WriteFile_Data</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "OodleDecompressCallback_WriteFile_Data.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="OodleDecompressCallback_WriteFile_Data.html_backmenu">
<table class=dropmenu>
<tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<div class=prototype><div class=prototype_header>// Structure definition:</div><pre><span class=prototype_type>struct</span> <a href="javascript:show('OodleDecompressCallback_WriteFile_Data.html')">OodleDecompressCallback_WriteFile_Data</a>
{
&nbsp;&nbsp;&nbsp;&nbsp;<span class=prototype_type><a href="javascript:show('OodleXIOQFile.html')" class="blue">OodleXIOQFile</a></span> file;
&nbsp;&nbsp;&nbsp;&nbsp;<span class=prototype_type><a href="javascript:show('OodleXHandle.html')" class="blue">OodleXHandle</a></span> lastWriteH;
&nbsp;&nbsp;&nbsp;&nbsp;<span class=prototype_type><a href="javascript:show('OodleXHandle.html')" class="blue">OodleXHandle</a></span> closeH;
&nbsp;&nbsp;&nbsp;&nbsp;OO_SINTa written;
&nbsp;&nbsp;&nbsp;&nbsp;OO_BOOL doCloseFile;
};
</pre></div><div class=discussion_heading>Discussion</div> A <a href="javascript:show('OodleDecompressCallback_WriteFile_Data.html')" class="paragraph">OodleDecompressCallback_WriteFile_Data</a> for use with <a href="javascript:show('OodleDecompressCallback_WriteFile.html')" class="paragraph">OodleDecompressCallback_WriteFile</a><div class=discussion_heading>Members</div> <table> <tr> <td style='vertical-align: top;' class=paramname><a id="OodleDecompressCallback_WriteFile_Data.html_file" class=nohover>file</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> the file handle to write to</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleDecompressCallback_WriteFile_Data.html_lastWriteH" class=nohover>lastWriteH</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> handle to the last write operation ; it's autodelete</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleDecompressCallback_WriteFile_Data.html_closeH" class=nohover>closeH</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> handle to the file close operation ; NOT autoDelete</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleDecompressCallback_WriteFile_Data.html_written" class=nohover>written</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> number of bytes written so far</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleDecompressCallback_WriteFile_Data.html_doCloseFile" class=nohover>doCloseFile</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> should the file be closed after the last write?</td></tr></table><div class=discussion_heading>Discussion</div> The <a href="javascript:show('OodleDecompressCallback_WriteFile_Data.html')" class="paragraph">OodleDecompressCallback_WriteFile_Data</a> struct is passed as "userdata" to <a href="javascript:show('OodleDecompressCallback_WriteFile.html')" class="paragraph">OodleDecompressCallback_WriteFile</a>.
</p>
<p> You must supply one as <i>pcbData</i> in functions that take a decompression callback.
</p>
<p> Warning : if you make this object on the stack, ensure the lifetime is sufficient for the async operation!
<br>&nbsp;<br> <table class=bar> <tr>
<td width=33% align=left><span class='arrowleft'></span><a href="javascript:show('OodleXAPI_LZ_Async.html')" class="paragraph">OodleXAPI_LZ_Async</a></td><td width=33% align=center><span class='arrowup'></span><a href="javascript:show('OodleXAPI_LZ_Async.html')" class="paragraph">OodleXAPI_LZ_Async</a></td><td width=33% align=right><span class='arrowright'></span><a href="javascript:show('OodleXLZ_Decompress_ThreadPhased_Narrow_Async.html')" class="paragraph">OodleXLZ_Decompress_ThreadPhased_Narrow_Async</a></td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="OodleLZ_CompressOptions_GetDefault.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>OodleLZ_CompressOptions_GetDefault</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "OodleLZ_CompressOptions_GetDefault.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="OodleLZ_CompressOptions_GetDefault.html_backmenu">
<table class=dropmenu>
<tr><td><span class='arrowleft'></span>&nbsp;<a href="javascript:show('OodleLZ_Jobify_GetName.html')" class="paragraph">OodleLZ_Jobify_GetName</a></td></tr><tr><td><span class='arrowright'></span>&nbsp;<a href="javascript:show('OodleLZ_CompressOptions_Validate.html')" class="paragraph">OodleLZ_CompressOptions_Validate</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<div class=prototype><div class=prototype_header>// Function prototype:</div><pre>const <span class=prototype_type><a href="javascript:show('OodleLZ_CompressOptions.html')" class="blue">OodleLZ_CompressOptions</a></span> * <span class=prototype_type><a href="javascript:show('OodleLZ_CompressOptions_GetDefault.html')" class="blue">OodleLZ_CompressOptions_GetDefault</a></span>( <span class=prototype_type><a href="javascript:show('OodleLZ_Compressor.html')" class="blue">OodleLZ_Compressor</a></span> compressor OODEFAULT( OodleLZ_Compressor_Invalid ),
<span class=prototype_type><a href="javascript:show('OodleLZ_CompressionLevel.html')" class="blue">OodleLZ_CompressionLevel</a></span> lzLevel OODEFAULT( OodleLZ_CompressionLevel_Normal ) );</pre></div><div class=discussion_heading>Discussion</div>Provides a pointer to default compression options<div class=discussion_heading>Parameters</div> <table> <tr> <td style='vertical-align: top;' class=paramname><a id="OodleLZ_CompressOptions_GetDefault.html_compressor" class=nohover>compressor</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> deprecated, ignored
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleLZ_CompressOptions_GetDefault.html_lzLevel" class=nohover>lzLevel</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> deprecated, ignored
</td></tr></table><div class=discussion_heading>Discussion</div></p>
<p> Use to fill your own <a href="javascript:show('OodleLZ_CompressOptions.html')" class="paragraph">OodleLZ_CompressOptions</a> then change individual fields.
</p>
<p><br>&nbsp;<br> <table class=bar> <tr>
<td width=33% align=left><span class='arrowleft'></span><a href="javascript:show('OodleLZ_Jobify_GetName.html')" class="paragraph">OodleLZ_Jobify_GetName</a></td><td width=33% align=center><span class='arrowup'></span><a href="javascript:show('OodleAPI_LZ_Compressors.html')" class="paragraph">OodleAPI_LZ_Compressors</a></td><td width=33% align=right><span class='arrowright'></span><a href="javascript:show('OodleLZ_CompressOptions_Validate.html')" class="paragraph">OodleLZ_CompressOptions_Validate</a></td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="OodleLZ_About_ThreadPhasedDecode.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>About OodleLZ ThreadPhased Decode</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "OodleLZ_About_ThreadPhasedDecode.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="OodleLZ_About_ThreadPhasedDecode.html_backmenu">
<table class=dropmenu>
<tr><td><span class='arrowleft'></span>&nbsp;<a href="javascript:show('OodleLZ_About.html')" class="paragraph">About OodleLZ</a></td></tr><tr><td><span class='arrowup'></span>&nbsp;<a href="javascript:show('OodleAPI_LZ.html')" class="paragraph">Core LZ compression</a></td></tr><tr><td><span class='arrowright'></span>&nbsp;<a href="javascript:show('OodleLZ_About_Hydra.html')" class="paragraph">About OodleLZ Hydra</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<P>
<h2> About OodleLZ ThreadPhased Decode</h2>
</p>
<p>The new Kraken compressor can be decoded with a new type of parallelism called "ThreadPhased".
(check <a href="javascript:show('OodleLZ_Compressor_CanDecodeThreadPhased.html')" class="paragraph">OodleLZ_Compressor_CanDecodeThreadPhased</a>)
</p>
<p>ThreadPhased decoding works by running the decode operation per block in two phases. This allows 1-2X
speedup using two threads for decoding, typically around 33%-50% speedup. (Mermaid can decode ThreadPhased
too, but the benefit isn't as large as it is with Kraken)
</p>
<p>ThreadPhased decoding can be done on the normal compressed data made with <a href="javascript:show('OodleLZ_Compress.html')" class="paragraph">OodleLZ_Compress</a>. You
don't need to prepare the data specially for ThreadPhased decoding, or break it into chunks with
the Oodle seek chunk reset system. (you can combine seek chunks and ThreadPhased decoding for
even more parallelism if you like).
</p>
<p>Make compressed data by calling <a href="javascript:show('OodleLZ_Compress.html')" class="paragraph">OodleLZ_Compress</a> just like you normally would.
</p>
<p>ThreadPhased decoding requires more memory than normal single-threaded decoding, because it needs
staging space for the two threads to communicate.
</p>
<p></p>
<p>The easiest way to try ThreadPhased decoding is to use the helper in OodleX <a href="javascript:show('OodleXLZ_Decompress_ThreadPhased_Narrow_Async.html')" class="paragraph">OodleXLZ_Decompress_ThreadPhased_Narrow_Async</a> .
That runs a 2-thread decode on the OodleX Worker system, freeing the calling thread for other work.
</p>
<p><a href="javascript:show('example_lz_threadphased.html')" class="paragraph">example_lz_threadphased : Example of 2-thread ThreadPhased decoding</a> includes a demonstration of that call.
</p>
<p></p>
<p></p>
<p>The basic idea of ThreadPhased decoding is that the <a href="javascript:show('OodleLZ_Decompress.html')" class="paragraph">OodleLZ_Decompress</a> work on each BLOCK can be
split into two phases. This can be invoked by just calling <a href="javascript:show('OodleLZ_Decompress.html')" class="paragraph">OodleLZ_Decompress</a> twice on the same
block, first with OodleLZ_Decode_ThreadPhase1, then with OodleLZ_Decode_ThreadPhase2.
</p>
<p>To get parallelism, we can run the two phases on two separate threads.
</p>
<p>The rule is that you must run the Phase2 on each block after the Phase1 for that block is done,
and with the same "decoderMem" pointer. The Phase2 decodes on all blocks must be done in
sequential order (unless they are Seek Resets). The Phase1 decodes can be done in any order.
The decoder memory used for <a href="javascript:show('OodleLZ_Decompress.html')" class="paragraph">OodleLZ_Decompress</a> here must be larger than normal, of size
<a href="javascript:show('OodleLZ_ThreadPhased_BlockDecoderMemorySizeNeeded.html')" class="paragraph">OodleLZ_ThreadPhased_BlockDecoderMemorySizeNeeded</a>().
</p>
<p></p>
<p>To perform a portion of a ThreadPhased decode, you simply call <a href="javascript:show('OodleLZ_Decompress.html')" class="paragraph">OodleLZ_Decompress</a> , but with some
special argument values :
</p>
<p><a href="javascript:show('OodleLZ_Decompress.html')" class="paragraph">OodleLZ_Decompress</a>(
compBuf,compBufferSize, // should be the compressed data for one block only
rawBuf,rawLen, // should be the destination uncompressed pointers for this block
checkCRc,verbosity,
decBufBase,decBufSize, // should be the whole destination buffer (or one whole seek chunk)
fpCallback,callbackUserData,
decoderMemory,decoderMemorySize, // must be provided, of size <a href="javascript:show('OodleLZ_ThreadPhased_BlockDecoderMemorySizeNeeded.html')" class="paragraph">OodleLZ_ThreadPhased_BlockDecoderMemorySizeNeeded</a>()
threadPhase // set to OodleLZ_Decode_ThreadPhase1 or OodleLZ_Decode_ThreadPhase2
);
</p>
<p>The decoderMemory must be allocated by the caller, and must be the same for each Phase on the block.
That is, don't use the decoderMemory for the next block in the same phase, instead use it for the
same block in the next phase. The decoderMemory is the place where the work of phase1 is passed
to phase2.
</p>
<p></p>
<p>The two threads run through the blocks sequentially, passing the results of phase1 to the input of
phase2. Each phased block must get its own decoderMemory.
</p>
<p><PRE>
[phase1 block1] [phase1 block2] ...
| |
| |
[phase2 block1] [phase2 block2] ...
</PRE>
</p>
<p></p>
<p>See <a href="javascript:show('example_lz_threadphased.html')" class="paragraph">example_lz_threadphased : Example of 2-thread ThreadPhased decoding</a> for a full client-side implementation<br>&nbsp;<br> <table class=bar> <tr>
<td width=33% align=left><span class='arrowleft'></span><a href="javascript:show('OodleLZ_About.html')" class="paragraph">About OodleLZ</a></td><td width=33% align=center><span class='arrowup'></span><a href="javascript:show('OodleAPI_LZ.html')" class="paragraph">Core LZ compression</a></td><td width=33% align=right><span class='arrowright'></span><a href="javascript:show('OodleLZ_About_Hydra.html')" class="paragraph">About OodleLZ Hydra</a></td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="Oodle_About_Windows_UWP.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>About Oodle on Windows UWP</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "Oodle_About_Windows_UWP.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="Oodle_About_Windows_UWP.html_backmenu">
<table class=dropmenu>
<tr><td><span class='arrowup'></span>&nbsp;<a href="javascript:show('Oodle_About_Windows.html')" class="paragraph">About Oodle on Windows</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<P>
Oodle for Windows UWP contains the Core module only (no ext) and is provided as a DLL.
</p>
<p>Oodle for Windows UWP is built with MSVC 2017 and the Windows 10 SDK.
</p>
<p><div class=prototype>
<PRE>
lib/oo2core_winuwp32.lib
lib/oo2core_winuwp64.lib
redist/oo2core_5_winuwp32.dll
redist/oo2core_5_winuwp64.dll
</PRE>
</div>
</p>
<p>The debug version of the DLL is also provided to help during development. It should not be redistributed.
</p>
<p>C++ apps for UWP can use the import libs to access the DLL.
</p>
<p>C# and Store apps may need to use the "LoadPackagedLibrary" mechanism.
What you do is add the DLL to the project as content (and make sure to check "deploy" in its properties).
Then you load it with "LoadPackagedLibrary" (not the normal LoadLibrary) to get an HMODULE , then you can do GetProcAddress to get func pointers.
</p>
<p>If your UWP client has very limited Oodle usage, you could get away with only importing
the OodleLZ_Decompress function.
</p>
<p>(extra step: if the UWP app is C#, not C++, then you must also tell it to deploy the VC runtime which it will not do by default)<br>&nbsp;<br> <table class=bar> <tr>
<td width=33% align=left><span class='arrowleft'></span><a href="javascript:show('Oodle_About_Windows.html')" class="paragraph">About Oodle on Windows</a></td><td width=33% align=center><span class='arrowup'></span><a href="javascript:show('Oodle_About_Windows.html')" class="paragraph">About Oodle on Windows</a></td><td width=33% align=right><span class='arrowright'></span><a href="javascript:show('Oodle_About_PS4.html')" class="paragraph">About Oodle on PS4</a></td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="OodleXMalloc_SetFailedHandler.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>OodleXMalloc_SetFailedHandler</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "OodleXMalloc_SetFailedHandler.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="OodleXMalloc_SetFailedHandler.html_backmenu">
<table class=dropmenu>
<tr><td><span class='arrowleft'></span>&nbsp;<a href="javascript:show('OodleXMalloc_InstallVTable.html')" class="paragraph">OodleXMalloc_InstallVTable</a></td></tr><tr><td><span class='arrowright'></span>&nbsp;<a href="javascript:show('OodleXMalloc.html')" class="paragraph">OodleXMalloc</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<div class=prototype><div class=prototype_header>// Function prototype:</div><pre>void <span class=prototype_type><a href="javascript:show('OodleXMalloc_SetFailedHandler.html')" class="blue">OodleXMalloc_SetFailedHandler</a></span>( <span class=prototype_type><a href="javascript:show('OodleXMallocFailedHandler.html')" class="blue">OodleXMallocFailedHandler</a></span> * f );</pre></div><div class=discussion_heading>Discussion</div>Install the <a href="javascript:show('OodleXMallocFailedHandler.html')" class="paragraph">OodleXMallocFailedHandler</a> that will be used<div class=discussion_heading>Parameters</div> <table> <tr> <td style='vertical-align: top;' class=paramname><a id="OodleXMalloc_SetFailedHandler.html_f" class=nohover>f</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> the function pointer to call (can be null for none)
</td></tr></table><div class=discussion_heading>Discussion</div></p>
<p> </p>
<p><br>&nbsp;<br> <table class=bar> <tr>
<td width=33% align=left><span class='arrowleft'></span><a href="javascript:show('OodleXMalloc_InstallVTable.html')" class="paragraph">OodleXMalloc_InstallVTable</a></td><td width=33% align=center><span class='arrowup'></span><a href="javascript:show('OodleXAPI_Malloc.html')" class="paragraph">OodleX Memory Allocators</a></td><td width=33% align=right><span class='arrowright'></span><a href="javascript:show('OodleXMalloc.html')" class="paragraph">OodleXMalloc</a></td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="OodleLZ_Compressor_UsesLargeWindow.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>OodleLZ_Compressor_UsesLargeWindow</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "OodleLZ_Compressor_UsesLargeWindow.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="OodleLZ_Compressor_UsesLargeWindow.html_backmenu">
<table class=dropmenu>
<tr><td><span class='arrowleft'></span>&nbsp;<a href="javascript:show('OodleLZ_Compressor_UsesWholeBlockQuantum.html')" class="paragraph">OodleLZ_Compressor_UsesWholeBlockQuantum</a></td></tr><tr><td><span class='arrowright'></span>&nbsp;<a href="javascript:show('OodleLZ_Compressor_CanDecodeInCircularWindow.html')" class="paragraph">OodleLZ_Compressor_CanDecodeInCircularWindow</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<div class=prototype><div class=prototype_header>// Function prototype:</div><pre>OO_BOOL <span class=prototype_type><a href="javascript:show('OodleLZ_Compressor_UsesLargeWindow.html')" class="blue">OodleLZ_Compressor_UsesLargeWindow</a></span>( <span class=prototype_type><a href="javascript:show('OodleLZ_Compressor.html')" class="blue">OodleLZ_Compressor</a></span> compressor );</pre></div><div class=discussion_heading>Discussion</div>OodleLZ_Compressor properties helper.<div class=discussion_heading>Discussion</div>Tells you if this compressor is "LargeWindow" or not, meaning it can benefit from
a Long-Range-Matcher and windows larger than <a href="javascript:show('OODLELZ_BLOCK_LEN.html')" class="paragraph">OODLELZ_BLOCK_LEN</a>
<br>&nbsp;<br> <table class=bar> <tr>
<td width=33% align=left><span class='arrowleft'></span><a href="javascript:show('OodleLZ_Compressor_UsesWholeBlockQuantum.html')" class="paragraph">OodleLZ_Compressor_UsesWholeBlockQuantum</a></td><td width=33% align=center><span class='arrowup'></span><a href="javascript:show('OodleAPI_LZ_Compressors.html')" class="paragraph">OodleAPI_LZ_Compressors</a></td><td width=33% align=right><span class='arrowright'></span><a href="javascript:show('OodleLZ_Compressor_CanDecodeInCircularWindow.html')" class="paragraph">OodleLZ_Compressor_CanDecodeInCircularWindow</a></td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="OodleLZ_Jobify.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>OodleLZ_Jobify</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "OodleLZ_Jobify.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="OodleLZ_Jobify.html_backmenu">
<table class=dropmenu>
<tr><td><span class='arrowleft'></span>&nbsp;<a href="javascript:show('OodleLZ_CompressionLevel.html')" class="paragraph">OodleLZ_CompressionLevel</a></td></tr><tr><td><span class='arrowright'></span>&nbsp;<a href="javascript:show('OodleLZ_Decode_ThreadPhase.html')" class="paragraph">OodleLZ_Decode_ThreadPhase</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<div class=prototype><div class=prototype_header>// Enumerant:</div><pre><span class=prototype_type>enum</span> <a href="javascript:show('OodleLZ_Jobify.html')">OodleLZ_Jobify</a>
{
&nbsp;&nbsp;&nbsp;&nbsp;OodleLZ_Jobify_Default = 0,
&nbsp;&nbsp;&nbsp;&nbsp;OodleLZ_Jobify_Disable = 1,
&nbsp;&nbsp;&nbsp;&nbsp;OodleLZ_Jobify_Normal = 2,
&nbsp;&nbsp;&nbsp;&nbsp;OodleLZ_Jobify_Aggressive = 3,
&nbsp;&nbsp;&nbsp;&nbsp;OodleLZ_Jobify_Count = 4,
&nbsp;&nbsp;&nbsp;&nbsp;OodleLZ_Jobify_Force32 = 0x40000000
};
</pre></div><div class=discussion_heading>Discussion</div> Controls the amount of internal threading in <a href="javascript:show('OodleLZ_Compress.html')" class="paragraph">OodleLZ_Compress</a> calls<div class=discussion_heading>Enumerants</div> <table> <tr> <td style='vertical-align: top;' class=paramname><a id="OodleLZ_Jobify.html_OodleLZ_Jobify_Default" class=nohover>OodleLZ_Jobify_Default</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> Use compressor default for level of internal job usage</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleLZ_Jobify.html_OodleLZ_Jobify_Disable" class=nohover>OodleLZ_Jobify_Disable</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> Don't use jobs at all</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleLZ_Jobify.html_OodleLZ_Jobify_Normal" class=nohover>OodleLZ_Jobify_Normal</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> Try to balance parallelism with increased memory usage</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleLZ_Jobify.html_OodleLZ_Jobify_Aggressive" class=nohover>OodleLZ_Jobify_Aggressive</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> Maximize parallelism even when doing so requires large amounts of memory</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleLZ_Jobify.html_OodleLZ_Jobify_Count" class=nohover>OodleLZ_Jobify_Count</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc></td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleLZ_Jobify.html_OodleLZ_Jobify_Force32" class=nohover>OodleLZ_Jobify_Force32</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc></td></tr></table><div class=discussion_heading>Discussion</div> Once you install a pluggable job system via <a href="javascript:show('OodleCore_Plugins_SetJobSystem.html')" class="paragraph">OodleCore_Plugins_SetJobSystem</a>, Oodle can internally break
heavy-weight compression tasks into smaller jobs that can run in parallel. This can speed up
compression of large blocks of data at Optimal1 and higher levels substantially.
</p>
<p> The trade-off is that running more jobs concurrently rather than sequentially can greatly increase
memory requirements when there are multiple outstanding memory-intensive jobs.
</p>
<p> OodleLZ_Jobify_Default lets the compressor decide; typically compressors will default to "Normal"
when a pluggable job system has been installed, and "Disable" otherwise.
</p>
<p> OodleLZ_Jobify_Disable disables use of internal jobs entirely; all compression work is done on
the calling thread. This minimizes the amount of memory used, and is also appropriate when you're
getting parallelism in other ways, e.g. by running OodleLZ_Compress on many threads yourself.
</p>
<p> OodleLZ_Jobify_Normal uses jobs to increase compressor parallelism and speeds up compression of
large blocks of data, but avoids handing out many concurrent jobs for tasks that are memory-intensive.
</p>
<p> OodleLZ_Jobify_Aggressive will use concurrent jobs even for highly memory-intensive tasks. This
can speed up things further, but at a potentially significant increase in the amount of memory used
by Oodle.
</p>
<p><br>&nbsp;<br> <table class=bar> <tr>
<td width=33% align=left><span class='arrowleft'></span><a href="javascript:show('OodleLZ_CompressionLevel.html')" class="paragraph">OodleLZ_CompressionLevel</a></td><td width=33% align=center><span class='arrowup'></span><a href="javascript:show('OodleAPI_LZ_Compressors.html')" class="paragraph">OodleAPI_LZ_Compressors</a></td><td width=33% align=right><span class='arrowright'></span><a href="javascript:show('OodleLZ_Decode_ThreadPhase.html')" class="paragraph">OodleLZ_Decode_ThreadPhase</a></td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="OodleXIOQ_SetFileSize_Async.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>OodleXIOQ_SetFileSize_Async</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "OodleXIOQ_SetFileSize_Async.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="OodleXIOQ_SetFileSize_Async.html_backmenu">
<table class=dropmenu>
<tr><td><span class='arrowleft'></span>&nbsp;<a href="javascript:show('OodleXIOQ_Write_Async.html')" class="paragraph">OodleXIOQ_Write_Async</a></td></tr><tr><td><span class='arrowright'></span>&nbsp;<a href="javascript:show('OodleXIOQ_ReserveFileSizeForWrite_Async.html')" class="paragraph">OodleXIOQ_ReserveFileSizeForWrite_Async</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<div class=prototype><div class=prototype_header>// Function prototype:</div><pre><span class=prototype_type><a href="javascript:show('OodleXHandle.html')" class="blue">OodleXHandle</a></span> <span class=prototype_type><a href="javascript:show('OodleXIOQ_SetFileSize_Async.html')" class="blue">OodleXIOQ_SetFileSize_Async</a></span>( <span class=prototype_type><a href="javascript:show('OodleXIOQFile.html')" class="blue">OodleXIOQFile</a></span> file,
OO_S64 size,
<span class=prototype_type><a href="javascript:show('OodleXHandleAutoDelete.html')" class="blue">OodleXHandleAutoDelete</a></span> autoDelete OODEFAULT( OodleXHandleAutoDelete_No ),
<span class=prototype_type><a href="javascript:show('OodleXPriority.html')" class="blue">OodleXPriority</a></span> priority OODEFAULT( OodleXPriority_Normal ),
const <span class=prototype_type><a href="javascript:show('OodleXHandle.html')" class="blue">OodleXHandle</a></span> * dependencies OODEFAULT( NULL ),
OO_S32 numDependencies OODEFAULT( 0 ) );</pre></div><div class=discussion_heading>Discussion</div>Start a set-file-size request<div class=discussion_heading>Parameters</div> <table> <tr> <td style='vertical-align: top;' class=paramname><a id="OodleXIOQ_SetFileSize_Async.html_file" class=nohover>file</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> the file to act on
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXIOQ_SetFileSize_Async.html_size" class=nohover>size</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> the new file size
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXIOQ_SetFileSize_Async.html_autoDelete" class=nohover>autoDelete</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> (optional) see <a href="javascript:show('OodleXHandleAutoDelete.html')" class="paragraph">OodleXHandleAutoDelete</a>
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXIOQ_SetFileSize_Async.html_priority" class=nohover>priority</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> (optional) priority of the operation ; see <a href="javascript:show('OodleXPriority.html')" class="paragraph">OodleXPriority</a>
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXIOQ_SetFileSize_Async.html_dependencies" class=nohover>dependencies</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> (optional) dependencies; the async op won't start until these are all complete; note : these are not freed, they must be autodelete or you must free them some other way.
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXIOQ_SetFileSize_Async.html_numDependencies" class=nohover>numDependencies</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> (optional) number of handles in <i>deps</i> array
</td></tr></table><div class=discussion_heading>Return Value</div> <table> <tr> <td style='vertical-align: top;' class=paramname><a id="OodleXIOQ_SetFileSize_Async.html_return" class=nohover>return</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> handle to the operation, or 0 if it could not be started (usually due to invalid args)
</td></tr></table><div class=discussion_heading>Discussion</div></p>
<p> Change the size of a file open for writing.
</p>
<p> OodleXIOQ_SetFileSize_Async may align up <i>size</i> to the next sector boundary or <a href="javascript:show('OODLEX_IO_MAX_ALIGNMENT.html')" class="paragraph">OODLEX_IO_MAX_ALIGNMENT</a>.
The contents of the file in the resized but unwritten area are undefined/garbage.
</p>
<p> To write a file with non-aligned size, use <a href="javascript:show('OodleXIOQ_CloseFile_Async.html','OodleXIOQ_CloseFile_Async.html_truncateFileSize')" class="paragraph">OodleXIOQ_CloseFile_Async:truncateFileSize</a> in <a href="javascript:show('OodleXIOQ_CloseFile_Async.html')" class="paragraph">OodleXIOQ_CloseFile_Async</a>.
</p>
<p> If the purpose of calling SetFileSize is to pre-reserve space to make writes go faster, then use <a href="javascript:show('OodleXIOQ_ReserveFileSizeForWrite_Async.html')" class="paragraph">OodleXIOQ_ReserveFileSizeForWrite_Async</a> instead.
<br>&nbsp;<br> <table class=bar> <tr>
<td width=33% align=left><span class='arrowleft'></span><a href="javascript:show('OodleXIOQ_Write_Async.html')" class="paragraph">OodleXIOQ_Write_Async</a></td><td width=33% align=center><span class='arrowup'></span><a href="javascript:show('OodleXAPI_IOQ.html')" class="paragraph">OodleX low level async io</a></td><td width=33% align=right><span class='arrowright'></span><a href="javascript:show('OodleXIOQ_ReserveFileSizeForWrite_Async.html')" class="paragraph">OodleXIOQ_ReserveFileSizeForWrite_Async</a></td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="OodleX_WaitDoneAllPending.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>OodleX_WaitDoneAllPending</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "OodleX_WaitDoneAllPending.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="OodleX_WaitDoneAllPending.html_backmenu">
<table class=dropmenu>
<tr><td><span class='arrowleft'></span>&nbsp;<a href="javascript:show('OodleX_WaitAll.html')" class="paragraph">OodleX_WaitAll</a></td></tr><tr><td><span class='arrowright'></span>&nbsp;<a href="javascript:show('OodleX_SetHandleAutoDelete.html')" class="paragraph">OodleX_SetHandleAutoDelete</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<div class=prototype><div class=prototype_header>// Function prototype:</div><pre>void <span class=prototype_type><a href="javascript:show('OodleX_WaitDoneAllPending.html')" class="blue">OodleX_WaitDoneAllPending</a></span>( );</pre></div><div class=discussion_heading>Discussion</div>Block on all pending operations being completed<div class=discussion_heading>Discussion</div>FlushAllAsync kills all parallelism and should generally only be used at shutdown or error handling.
</p>
<p> FlushAllAsync is only guaranteed to stop pending handles that were fired before this call starts.
If new operations are created by other threads (or by existing pending operations) they may still be
pending when this call returns.
<br>&nbsp;<br> <table class=bar> <tr>
<td width=33% align=left><span class='arrowleft'></span><a href="javascript:show('OodleX_WaitAll.html')" class="paragraph">OodleX_WaitAll</a></td><td width=33% align=center><span class='arrowup'></span><a href="javascript:show('OodleXAPI_Handle.html')" class="paragraph">OodleX async handle operations</a></td><td width=33% align=right><span class='arrowright'></span><a href="javascript:show('OodleX_SetHandleAutoDelete.html')" class="paragraph">OodleX_SetHandleAutoDelete</a></td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="Oodle_FAQ_BadWriteContents.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>FAQ: I write a file with IOQ but the contents are garbage?</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "Oodle_FAQ_BadWriteContents.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="Oodle_FAQ_BadWriteContents.html_backmenu">
<table class=dropmenu>
<tr><td><span class='arrowleft'></span>&nbsp;<a href="javascript:show('Oodle_FAQ_HowDoIGetOodleLogs.html')" class="paragraph">FAQ: How do I get the Oodle logs?</a></td></tr><tr><td><span class='arrowup'></span>&nbsp;<a href="javascript:show('Oodle_FAQ.html')" class="paragraph">Frequently Asked Questions</a></td></tr><tr><td><span class='arrowright'></span>&nbsp;<a href="javascript:show('Oodle_FAQ_OutOfHandles.html')" class="paragraph">FAQ: I ran out of OodleHandle table slots; what do I do?</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<P>
A very common error is using an async write, but failing to keep the buffer alive long enough.
</p>
<p>For example, code like this :
</p>
<p><div class=prototype>
<PRE>
OodleIOQFile file; // parameter
SINTa size; // parameter
void * buffer = OodleXMalloc_IOAligned(size);
// .. fill buffer ..
SINTa alignedSize = OodleAlignUp(size);
OodleIOQ_Write_Async(toFile,buffer,alignedSize,0,OodleXHandleAutoDelete_Yes);
OodleFree_IOAligned(buffer);
</PRE>
</div>
</p>
<p>may free the buffer during the async IO. This may or may not produce an error. In some cases the write will
succeed but simply write junk data. (in some cases the write may succeed and write the buffer correctly; this is
a race condition and the results are unpredictable).
</p>
<p>To fix this you must ensure the buffer is not freed until the write is done. Often you will want to <a href="javascript:show('OodleX_Wait.html')" class="paragraph">OodleX_Wait</a> on
the write being done for some other reason, so you can simply move the buffer free until after the Wait.
</p>
<p>Another option is to enqueue the Free using <a href="javascript:show('OodleXIOQ_FreeBufferIOAligned_Async.html')" class="paragraph">OodleXIOQ_FreeBufferIOAligned_Async</a>.<br>&nbsp;<br> <table class=bar> <tr>
<td width=33% align=left><span class='arrowleft'></span><a href="javascript:show('Oodle_FAQ_HowDoIGetOodleLogs.html')" class="paragraph">FAQ: How do I get the Oodle logs?</a></td><td width=33% align=center><span class='arrowup'></span><a href="javascript:show('Oodle_FAQ.html')" class="paragraph">Frequently Asked Questions</a></td><td width=33% align=right><span class='arrowright'></span><a href="javascript:show('Oodle_FAQ_OutOfHandles.html')" class="paragraph">FAQ: I ran out of OodleHandle table slots; what do I do?</a></td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="OodleXUtil_ConvertUTF16ToUTF8.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>OodleXUtil_ConvertUTF16ToUTF8</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "OodleXUtil_ConvertUTF16ToUTF8.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="OodleXUtil_ConvertUTF16ToUTF8.html_backmenu">
<table class=dropmenu>
<tr><td><span class='arrowleft'></span>&nbsp;<a href="javascript:show('OodleXUtil_ConvertUTF8ToUTF16.html')" class="paragraph">OodleXUtil_ConvertUTF8ToUTF16</a></td></tr><tr><td><span class='arrowright'></span>&nbsp;<a href="javascript:show('OodleX_CombinePaths.html')" class="paragraph">OodleX_CombinePaths</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<div class=prototype><div class=prototype_header>// Function prototype:</div><pre>OO_BOOL <span class=prototype_type><a href="javascript:show('OodleXUtil_ConvertUTF16ToUTF8.html')" class="blue">OodleXUtil_ConvertUTF16ToUTF8</a></span>( const OO_U16 * from,
char * to,
int toSize );</pre></div><div class=discussion_heading>Discussion</div>Convert a UTF16 string to UTF8<div class=discussion_heading>Parameters</div> <table> <tr> <td style='vertical-align: top;' class=paramname><a id="OodleXUtil_ConvertUTF16ToUTF8.html_from" class=nohover>from</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> string to convert
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXUtil_ConvertUTF16ToUTF8.html_to" class=nohover>to</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> filled with the result
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXUtil_ConvertUTF16ToUTF8.html_toSize" class=nohover>toSize</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> number of characters availabe in <i>to (not bytes!)
</i></td></tr></table><div class=discussion_heading>Discussion</div></p>
<p> Fill [ <i>to</i> , <i>to</i> + <i>toSize</i> ] with the UTF8 conversion of <i>from</i> (UTF16).
</p>
<p> Oodle strings are all UTF8. This can be used to convert a string from UTF16 , for example
for use with the Windows wchar routines.
</p>
<p> Note that <a href="javascript:show('OodleXUtil_ConvertUTF8ToUTF16.html')" class="paragraph">OodleXUtil_ConvertUTF8ToUTF16</a> + <a href="javascript:show('OodleXUtil_ConvertUTF16ToUTF8.html')" class="paragraph">OodleXUtil_ConvertUTF16ToUTF8</a> may not produce
the same output, because UTF encodings are not unique. Also note that Windows 8-bit names
(from "A" code page, though they are not ANSI or ASCII) are not UTF8.
<br>&nbsp;<br> <table class=bar> <tr>
<td width=33% align=left><span class='arrowleft'></span><a href="javascript:show('OodleXUtil_ConvertUTF8ToUTF16.html')" class="paragraph">OodleXUtil_ConvertUTF8ToUTF16</a></td><td width=33% align=center><span class='arrowup'></span><a href="javascript:show('OodleXAPI_Util.html')" class="paragraph">OodleX Utils</a></td><td width=33% align=right><span class='arrowright'></span><a href="javascript:show('OodleX_CombinePaths.html')" class="paragraph">OodleX_CombinePaths</a></td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="OodleLZ_Jobify_GetName.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>OodleLZ_Jobify_GetName</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "OodleLZ_Jobify_GetName.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="OodleLZ_Jobify_GetName.html_backmenu">
<table class=dropmenu>
<tr><td><span class='arrowleft'></span>&nbsp;<a href="javascript:show('OodleLZ_Compressor_GetName.html')" class="paragraph">OodleLZ_Compressor_GetName</a></td></tr><tr><td><span class='arrowright'></span>&nbsp;<a href="javascript:show('OodleLZ_CompressOptions_GetDefault.html')" class="paragraph">OodleLZ_CompressOptions_GetDefault</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<div class=prototype><div class=prototype_header>// Function prototype:</div><pre>const char * <span class=prototype_type><a href="javascript:show('OodleLZ_Jobify_GetName.html')" class="blue">OodleLZ_Jobify_GetName</a></span>( <span class=prototype_type><a href="javascript:show('OodleLZ_Jobify.html')" class="blue">OodleLZ_Jobify</a></span> jobify );</pre></div><div class=discussion_heading>Discussion</div>Provides a string naming a <a href="javascript:show('OodleLZ_Jobify.html')" class="paragraph">OodleLZ_Jobify</a> enum
<br>&nbsp;<br> <table class=bar> <tr>
<td width=33% align=left><span class='arrowleft'></span><a href="javascript:show('OodleLZ_Compressor_GetName.html')" class="paragraph">OodleLZ_Compressor_GetName</a></td><td width=33% align=center><span class='arrowup'></span><a href="javascript:show('OodleAPI_LZ_Compressors.html')" class="paragraph">OodleAPI_LZ_Compressors</a></td><td width=33% align=right><span class='arrowright'></span><a href="javascript:show('OodleLZ_CompressOptions_GetDefault.html')" class="paragraph">OodleLZ_CompressOptions_GetDefault</a></td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="OodleXLog_SetEcho.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>OodleXLog_SetEcho</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "OodleXLog_SetEcho.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="OodleXLog_SetEcho.html_backmenu">
<table class=dropmenu>
<tr><td><span class='arrowleft'></span>&nbsp;<a href="javascript:show('OodleXLog_SetState.html')" class="paragraph">OodleXLog_SetState</a></td></tr><tr><td><span class='arrowright'></span>&nbsp;<a href="javascript:show('OodleXLog_GetEcho.html')" class="paragraph">OodleXLog_GetEcho</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<div class=prototype><div class=prototype_header>// Function prototype:</div><pre>void <span class=prototype_type><a href="javascript:show('OodleXLog_SetEcho.html')" class="blue">OodleXLog_SetEcho</a></span>( void * echo );</pre></div><div class=discussion_heading>Discussion</div>Set the echo output file<div class=discussion_heading>Parameters</div> <table> <tr> <td style='vertical-align: top;' class=paramname><a id="OodleXLog_SetEcho.html_echo" class=nohover>echo</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> the stdio FILE to output to
</td></tr></table><div class=discussion_heading>Discussion</div></p>
<p> You must also enable the flag <a href="javascript:show('OodleXLog_StateFlags.html','OodleXLog_StateFlags.html_OODLEXLOG_ECHO')" class="paragraph">OODLEXLOG_ECHO</a> in <a href="javascript:show('OodleXLog_SetState.html')" class="paragraph">OodleXLog_SetState</a> if you want
output to the echo FILE.
</p>
<p> You can call SetEcho(NULL) to disable echoing, or you can SetState and
disable the OODLEXLOG_ECHO flag.
<br>&nbsp;<br> <table class=bar> <tr>
<td width=33% align=left><span class='arrowleft'></span><a href="javascript:show('OodleXLog_SetState.html')" class="paragraph">OodleXLog_SetState</a></td><td width=33% align=center><span class='arrowup'></span><a href="javascript:show('OodleXAPI_Debug.html')" class="paragraph">OodleX Debug aids</a></td><td width=33% align=right><span class='arrowright'></span><a href="javascript:show('OodleXLog_GetEcho.html')" class="paragraph">OodleXLog_GetEcho</a></td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="OodleX_GetOSCwd.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>OodleX_GetOSCwd</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "OodleX_GetOSCwd.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="OodleX_GetOSCwd.html_backmenu">
<table class=dropmenu>
<tr><td><span class='arrowleft'></span>&nbsp;<a href="javascript:show('OodleX_CombinePaths.html')" class="paragraph">OodleX_CombinePaths</a></td></tr><tr><td><span class='arrowright'></span>&nbsp;<a href="javascript:show('OodleX_PrefixOSCwd.html')" class="paragraph">OodleX_PrefixOSCwd</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<div class=prototype><div class=prototype_header>// Function prototype:</div><pre>void <span class=prototype_type><a href="javascript:show('OodleX_GetOSCwd.html')" class="blue">OodleX_GetOSCwd</a></span>( char * into,
OO_S32 intoSize );</pre></div><div class=discussion_heading>Discussion</div>Get current working directory<div class=discussion_heading>Parameters</div> <table> <tr> <td style='vertical-align: top;' class=paramname><a id="OodleX_GetOSCwd.html_into" class=nohover>into</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> filled with cwd (OS,UTF8)
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleX_GetOSCwd.html_intoSize" class=nohover>intoSize</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> size of into
</td></tr></table><div class=discussion_heading>Discussion</div></p>
<p> After the call, <i>into</i> ends in a path delim, so file names can be stuck on it with strcat.
<br>&nbsp;<br> <table class=bar> <tr>
<td width=33% align=left><span class='arrowleft'></span><a href="javascript:show('OodleX_CombinePaths.html')" class="paragraph">OodleX_CombinePaths</a></td><td width=33% align=center><span class='arrowup'></span><a href="javascript:show('OodleXAPI_Util.html')" class="paragraph">OodleX Utils</a></td><td width=33% align=right><span class='arrowright'></span><a href="javascript:show('OodleX_PrefixOSCwd.html')" class="paragraph">OodleX_PrefixOSCwd</a></td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="OodleXOSFile.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>OodleXOSFile</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "OodleXOSFile.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="OodleXOSFile.html_backmenu">
<table class=dropmenu>
<tr><td><span class='arrowleft'></span>&nbsp;<a href="javascript:show('OodleXIOQFile.html')" class="paragraph">OodleXIOQFile</a></td></tr><tr><td><span class='arrowright'></span>&nbsp;<a href="javascript:show('OodleXOSFileListing.html')" class="paragraph">OodleXOSFileListing</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<div class=prototype><div class=prototype_header>// Type definition:</div><pre>void * <span class=prototype_type><a href="javascript:show('OodleXOSFile.html')" class="blue">OodleXOSFile</a></span></pre></div><div class=discussion_heading>Discussion</div> OS file handle abstract type <br>&nbsp;<br> <table class=bar> <tr>
<td width=33% align=left><span class='arrowleft'></span><a href="javascript:show('OodleXIOQFile.html')" class="paragraph">OodleXIOQFile</a></td><td width=33% align=center><span class='arrowup'></span><a href="javascript:show('OodleXAPI_IOQ.html')" class="paragraph">OodleX low level async io</a></td><td width=33% align=right><span class='arrowright'></span><a href="javascript:show('OodleXOSFileListing.html')" class="paragraph">OodleXOSFileListing</a></td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="OodleX_Init_ThreadProfilerInit.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>OodleX_Init_ThreadProfilerInit</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "OodleX_Init_ThreadProfilerInit.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="OodleX_Init_ThreadProfilerInit.html_backmenu">
<table class=dropmenu>
<tr><td><span class='arrowright'></span>&nbsp;<a href="javascript:show('OodleX_Init_GetDefaults.html')" class="paragraph">OodleX_Init_GetDefaults</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<div class=prototype><div class=prototype_header>// Function prototype:</div><pre><span class=prototype_type><a href="javascript:show('t_OodleFPVoidVoid.html')" class="blue">t_OodleFPVoidVoid</a></span> * <span class=prototype_type><a href="javascript:show('OodleX_Init_ThreadProfilerInit.html')" class="blue">OodleX_Init_ThreadProfilerInit</a></span>( void );</pre></div><div class=discussion_heading>Discussion</div>Get the func pointer for m_OodleInit_ThreadProfiler_funcptr
<br>&nbsp;<br> <table class=bar> <tr>
<td width=33% align=left><span class='arrowleft'></span><a href="javascript:show('OodleXConfigValues.html')" class="paragraph">OodleXConfigValues</a></td><td width=33% align=center><span class='arrowup'></span><a href="javascript:show('OodleXAPI_Init.html')" class="paragraph">OodleX Startup and Shutdown</a></td><td width=33% align=right><span class='arrowright'></span><a href="javascript:show('OodleX_Init_GetDefaults.html')" class="paragraph">OodleX_Init_GetDefaults</a></td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="OODLEX_FILE_CLOSE_NO_TRUNCATE_SIZE.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>OODLEX_FILE_CLOSE_NO_TRUNCATE_SIZE</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "OODLEX_FILE_CLOSE_NO_TRUNCATE_SIZE.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="OODLEX_FILE_CLOSE_NO_TRUNCATE_SIZE.html_backmenu">
<table class=dropmenu>
<tr><td><span class='arrowleft'></span>&nbsp;<a href="javascript:show('OODLEX_FILE_OPEN_NO_RESERVE_SIZE.html')" class="paragraph">OODLEX_FILE_OPEN_NO_RESERVE_SIZE</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<div class=prototype><div class=prototype_header>// Preprocessor definition:</div><pre><span class=prototype_type>#define</span> <a href="javascript:show('OODLEX_FILE_CLOSE_NO_TRUNCATE_SIZE.html')">OODLEX_FILE_CLOSE_NO_TRUNCATE_SIZE</a> (-1)</pre></div><div class=discussion_heading>Discussion</div> Pass for <i>truncateFileSize</i> to <a href="javascript:show('OodleXIOQ_CloseFile_Async.html')" class="paragraph">OodleXIOQ_CloseFile_Async</a> if you don't want it to truncate <br>&nbsp;<br> <table class=bar> <tr>
<td width=33% align=left><span class='arrowleft'></span><a href="javascript:show('OODLEX_FILE_OPEN_NO_RESERVE_SIZE.html')" class="paragraph">OODLEX_FILE_OPEN_NO_RESERVE_SIZE</a></td><td width=33% align=center><span class='arrowup'></span><a href="javascript:show('OodleXAPI_IOQ.html')" class="paragraph">OodleX low level async io</a></td><td width=33% align=right><span class='arrowright'></span><a href="javascript:show('OodleXCopyFileFlags.html')" class="paragraph">OodleXCopyFileFlags</a></td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="OODLEX_BUFFER_SIZE_DEFAULT.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>OODLEX_BUFFER_SIZE_DEFAULT</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "OODLEX_BUFFER_SIZE_DEFAULT.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="OODLEX_BUFFER_SIZE_DEFAULT.html_backmenu">
<table class=dropmenu>
<tr><td><span class='arrowleft'></span>&nbsp;<a href="javascript:show('OODLEX_IO_MAX_ALIGNMENT.html')" class="paragraph">OODLEX_IO_MAX_ALIGNMENT</a></td></tr><tr><td><span class='arrowright'></span>&nbsp;<a href="javascript:show('OODLEX_FILEINFO_FLAG_INVALID.html')" class="paragraph">OODLEX_FILEINFO_FLAG_INVALID</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<div class=prototype><div class=prototype_header>// Preprocessor definition:</div><pre><span class=prototype_type>#define</span> <a href="javascript:show('OODLEX_BUFFER_SIZE_DEFAULT.html')">OODLEX_BUFFER_SIZE_DEFAULT</a> (-1)</pre></div><div class=discussion_heading>Discussion</div> Pass to functions that want a buffer size to indicate the default should be used.<div class=discussion_heading>Discussion</div> The buffer size used comes from <a href="javascript:show('OodleXConfigValues.html')" class="paragraph">OodleXConfigValues</a>
<br>&nbsp;<br> <table class=bar> <tr>
<td width=33% align=left><span class='arrowleft'></span><a href="javascript:show('OODLEX_IO_MAX_ALIGNMENT.html')" class="paragraph">OODLEX_IO_MAX_ALIGNMENT</a></td><td width=33% align=center><span class='arrowup'></span><a href="javascript:show('OodleXAPI_IOQ.html')" class="paragraph">OodleX low level async io</a></td><td width=33% align=right><span class='arrowright'></span><a href="javascript:show('OODLEX_FILEINFO_FLAG_INVALID.html')" class="paragraph">OODLEX_FILEINFO_FLAG_INVALID</a></td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="OodleXDecompressCallback_WriteFile_Data_Init.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>OodleXDecompressCallback_WriteFile_Data_Init</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "OodleXDecompressCallback_WriteFile_Data_Init.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="OodleXDecompressCallback_WriteFile_Data_Init.html_backmenu">
<table class=dropmenu>
<tr><td><span class='arrowleft'></span>&nbsp;<a href="javascript:show('OodleXLZ_ReadAndDecompress_Stream_Async.html')" class="paragraph">OodleXLZ_ReadAndDecompress_Stream_Async</a></td></tr><tr><td><span class='arrowright'></span>&nbsp;<a href="javascript:show('OodleDecompressCallback_WriteFile.html')" class="paragraph">OodleDecompressCallback_WriteFile</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<div class=prototype><div class=prototype_header>// Function prototype:</div><pre>void <span class=prototype_type><a href="javascript:show('OodleXDecompressCallback_WriteFile_Data_Init.html')" class="blue">OodleXDecompressCallback_WriteFile_Data_Init</a></span>( <span class=prototype_type><a href="javascript:show('OodleDecompressCallback_WriteFile_Data.html')" class="blue">OodleDecompressCallback_WriteFile_Data</a></span> * pcbData,
const char * fileName,
OO_BOOL closeFileAfterWriting,
OO_SINTa reserveSize OODEFAULT( 0 ) );</pre></div><div class=discussion_heading>Discussion</div>fills out an <a href="javascript:show('OodleDecompressCallback_WriteFile_Data.html')" class="paragraph">OodleDecompressCallback_WriteFile_Data</a> struct<div class=discussion_heading>Parameters</div> <table> <tr> <td style='vertical-align: top;' class=paramname><a id="OodleXDecompressCallback_WriteFile_Data_Init.html_pcbData" class=nohover>pcbData</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> The <a href="javascript:show('OodleDecompressCallback_WriteFile_Data.html')" class="paragraph">OodleDecompressCallback_WriteFile_Data</a> to fill
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXDecompressCallback_WriteFile_Data_Init.html_fileName" class=nohover>fileName</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> The name of the file to write to (will be opened)
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXDecompressCallback_WriteFile_Data_Init.html_closeFileAfterWriting" class=nohover>closeFileAfterWriting</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> Should the file be closed for you after the last write
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXDecompressCallback_WriteFile_Data_Init.html_reserveSize" class=nohover>reserveSize</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> (optional) size to reserve
</td></tr></table><div class=discussion_heading>Discussion</div></p>
<p> Fills out the <i>pcbData</i> for use with OodleDecompressCallback_WriteFile.
</p>
<p> Opens <i>fileName</i> for write with <a href="javascript:show('OodleXIOQ_OpenForWriteCreate_Async.html')" class="paragraph">OodleXIOQ_OpenForWriteCreate_Async</a>.
</p>
<p><br>&nbsp;<br> <table class=bar> <tr>
<td width=33% align=left><span class='arrowleft'></span><a href="javascript:show('OodleXLZ_ReadAndDecompress_Stream_Async.html')" class="paragraph">OodleXLZ_ReadAndDecompress_Stream_Async</a></td><td width=33% align=center><span class='arrowup'></span><a href="javascript:show('OodleXAPI_LZ_Async.html')" class="paragraph">OodleXAPI_LZ_Async</a></td><td width=33% align=right><span class='arrowright'></span><a href="javascript:show('OodleDecompressCallback_WriteFile.html')" class="paragraph">OodleDecompressCallback_WriteFile</a></td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="OodleX_ReleaseThreadTLS.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>OodleX_ReleaseThreadTLS</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "OodleX_ReleaseThreadTLS.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="OodleX_ReleaseThreadTLS.html_backmenu">
<table class=dropmenu>
<tr><td><span class='arrowleft'></span>&nbsp;<a href="javascript:show('OodleX_WaitAndDestroyThread.html')" class="paragraph">OodleX_WaitAndDestroyThread</a></td></tr><tr><td><span class='arrowright'></span>&nbsp;<a href="javascript:show('OodleX_CorePlugin_RunJob.html')" class="paragraph">OodleX_CorePlugin_RunJob</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<div class=prototype><div class=prototype_header>// Function prototype:</div><pre>void <span class=prototype_type><a href="javascript:show('OodleX_ReleaseThreadTLS.html')" class="blue">OodleX_ReleaseThreadTLS</a></span>( );</pre></div><div class=discussion_heading>Discussion</div>Release OodleX TLS resources on the calling thread<div class=discussion_heading>Discussion</div>Call on a thread before it terminates to release resources that OodleX may have put in the TLS
of this thread.
</p>
<p> The purpose of this is to avoid increasing memory use in code bases that create &amp; destroy a lot of
threads for jobs. In that case, Oodle may allocate a bit of memory per thread and never free it,
which will add up over time.
</p>
<p> In normal game code bases that create a fixed number or low number of threads, you should not
bother calling this.
</p>
<p> NOTE : any use of OodleX functions on this thread after calling this may crash!
This should be the last thing called on this thread before it terminates or returns from
its thread function.
<br>&nbsp;<br> <table class=bar> <tr>
<td width=33% align=left><span class='arrowleft'></span><a href="javascript:show('OodleX_WaitAndDestroyThread.html')" class="paragraph">OodleX_WaitAndDestroyThread</a></td><td width=33% align=center><span class='arrowup'></span><a href="javascript:show('OodleXAPI_Threading.html')" class="paragraph">OodleX threading util</a></td><td width=33% align=right><span class='arrowright'></span><a href="javascript:show('OodleX_CorePlugin_RunJob.html')" class="paragraph">OodleX_CorePlugin_RunJob</a></td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="OodleXIOQ_KickAnyDelayed.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>OodleXIOQ_KickAnyDelayed</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "OodleXIOQ_KickAnyDelayed.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="OodleXIOQ_KickAnyDelayed.html_backmenu">
<table class=dropmenu>
<tr><td><span class='arrowleft'></span>&nbsp;<a href="javascript:show('OodleXIOQ_WaitDoneAllPending.html')" class="paragraph">OodleXIOQ_WaitDoneAllPending</a></td></tr><tr><td><span class='arrowright'></span>&nbsp;<a href="javascript:show('OodleXIOQ_GetStatus.html')" class="paragraph">OodleXIOQ_GetStatus</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<div class=prototype><div class=prototype_header>// Function prototype:</div><pre>void <span class=prototype_type><a href="javascript:show('OodleXIOQ_KickAnyDelayed.html')" class="blue">OodleXIOQ_KickAnyDelayed</a></span>( );</pre></div><div class=discussion_heading>Discussion</div>Fire any requests which have not previously been started<div class=discussion_heading>Discussion</div>If requests were enqueued with kick = false (don't start immediately), then they can be
started this way. Disabling auto-kick is good for performance when a very large number of
request are being created in a short period of time.
<br>&nbsp;<br> <table class=bar> <tr>
<td width=33% align=left><span class='arrowleft'></span><a href="javascript:show('OodleXIOQ_WaitDoneAllPending.html')" class="paragraph">OodleXIOQ_WaitDoneAllPending</a></td><td width=33% align=center><span class='arrowup'></span><a href="javascript:show('OodleXAPI_IOQ.html')" class="paragraph">OodleX low level async io</a></td><td width=33% align=right><span class='arrowright'></span><a href="javascript:show('OodleXIOQ_GetStatus.html')" class="paragraph">OodleXIOQ_GetStatus</a></td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="OodleX_GetExtensionKey.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>OodleX_GetExtensionKey</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "OodleX_GetExtensionKey.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="OodleX_GetExtensionKey.html_backmenu">
<table class=dropmenu>
<tr><td><span class='arrowright'></span>&nbsp;<a href="javascript:show('OodleX_MakeExtensionKey.html')" class="paragraph">OodleX_MakeExtensionKey</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<div class=prototype><div class=prototype_header>// Function prototype:</div><pre>OO_U32 <span class=prototype_type><a href="javascript:show('OodleX_GetExtensionKey.html')" class="blue">OodleX_GetExtensionKey</a></span>( const char * filename );</pre></div><div class=discussion_heading>Discussion</div>convert the file name extension (max 4 chars) into a U32 for fast compares <div class=discussion_heading>Parameters</div> <table> <tr> <td style='vertical-align: top;' class=paramname><a id="OodleX_GetExtensionKey.html_filename" class=nohover>filename</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> file name with an extension after a period
</td></tr></table><div class=discussion_heading>Return Value</div> <table> <tr> <td style='vertical-align: top;' class=paramname><a id="OodleX_GetExtensionKey.html_return" class=nohover>return</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> a U32 with up to 4 chars of extension
</td></tr></table><div class=discussion_heading>Discussion</div></p>
<p> The return value is case-insensitive and does not include the dot.
<br>&nbsp;<br> <table class=bar> <tr>
<td width=33% align=left><span class='arrowleft'></span><a href="javascript:show('OODLEX_PATH_DELIM.html')" class="paragraph">OODLEX_PATH_DELIM</a></td><td width=33% align=center><span class='arrowup'></span><a href="javascript:show('OodleXAPI_Util.html')" class="paragraph">OodleX Utils</a></td><td width=33% align=right><span class='arrowright'></span><a href="javascript:show('OodleX_MakeExtensionKey.html')" class="paragraph">OodleX_MakeExtensionKey</a></td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="OodleNetwork1UDP_StateCompacted_MaxSize.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>OodleNetwork1UDP_StateCompacted_MaxSize</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "OodleNetwork1UDP_StateCompacted_MaxSize.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="OodleNetwork1UDP_StateCompacted_MaxSize.html_backmenu">
<table class=dropmenu>
<tr><td><span class='arrowleft'></span>&nbsp;<a href="javascript:show('OodleNetwork1UDP_Decode.html')" class="paragraph">OodleNetwork1UDP_Decode</a></td></tr><tr><td><span class='arrowright'></span>&nbsp;<a href="javascript:show('OodleNetwork1UDP_State_Compact_ForVersion.html')" class="paragraph">OodleNetwork1UDP_State_Compact_ForVersion</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<div class=prototype><div class=prototype_header>// Function prototype:</div><pre>OO_SINTa <span class=prototype_type><a href="javascript:show('OodleNetwork1UDP_StateCompacted_MaxSize.html')" class="blue">OodleNetwork1UDP_StateCompacted_MaxSize</a></span>( void );</pre></div><div class=discussion_heading>Discussion</div>Returns the size of memory required for an <a href="javascript:show('OodleNetwork1UDP_StateCompacted.html')" class="paragraph">OodleNetwork1UDP_StateCompacted</a> object<div class=discussion_heading>Discussion</div>Shared and State are allocated with malloc( Size() )
</p>
<p><br>&nbsp;<br> <table class=bar> <tr>
<td width=33% align=left><span class='arrowleft'></span><a href="javascript:show('OodleNetwork1UDP_Decode.html')" class="paragraph">OodleNetwork1UDP_Decode</a></td><td width=33% align=center><span class='arrowup'></span><a href="javascript:show('OodleAPI_OodleNetwork1.html')" class="paragraph">OodleAPI_OodleNetwork1</a></td><td width=33% align=right><span class='arrowright'></span><a href="javascript:show('OodleNetwork1UDP_State_Compact_ForVersion.html')" class="paragraph">OodleNetwork1UDP_State_Compact_ForVersion</a></td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="OodleLZ_CheckSeekTableCRCs.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>OodleLZ_CheckSeekTableCRCs</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "OodleLZ_CheckSeekTableCRCs.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="OodleLZ_CheckSeekTableCRCs.html_backmenu">
<table class=dropmenu>
<tr><td><span class='arrowleft'></span>&nbsp;<a href="javascript:show('OodleLZ_FreeSeekTable.html')" class="paragraph">OodleLZ_FreeSeekTable</a></td></tr><tr><td><span class='arrowright'></span>&nbsp;<a href="javascript:show('OodleLZ_FindSeekEntry.html')" class="paragraph">OodleLZ_FindSeekEntry</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<div class=prototype><div class=prototype_header>// Function prototype:</div><pre>OO_BOOL <span class=prototype_type><a href="javascript:show('OodleLZ_CheckSeekTableCRCs.html')" class="blue">OodleLZ_CheckSeekTableCRCs</a></span>( const void * rawBuf,
OO_SINTa rawLen,
const <span class=prototype_type><a href="javascript:show('OodleLZ_SeekTable.html')" class="blue">OodleLZ_SeekTable</a></span> * seekTable );</pre></div><div class=discussion_heading>Discussion</div>Check the CRC's in seekTable vs rawBuf<div class=discussion_heading>Parameters</div> <table> <tr> <td style='vertical-align: top;' class=paramname><a id="OodleLZ_CheckSeekTableCRCs.html_rawBuf" class=nohover>rawBuf</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> uncompressed buffer
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleLZ_CheckSeekTableCRCs.html_rawLen" class=nohover>rawLen</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> size of rawBuf
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleLZ_CheckSeekTableCRCs.html_seekTable" class=nohover>seekTable</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> result of <a href="javascript:show('OodleLZ_CreateSeekTable.html')" class="paragraph">OodleLZ_CreateSeekTable</a>
</td></tr></table><div class=discussion_heading>Return Value</div> <table> <tr> <td style='vertical-align: top;' class=paramname><a id="OodleLZ_CheckSeekTableCRCs.html_return" class=nohover>return</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> true if the CRC's check out
</td></tr></table><div class=discussion_heading>Discussion</div></p>
<p> Note that <a href="javascript:show('OodleLZ_Decompress.html')" class="paragraph">OodleLZ_Decompress</a> option of <a href="javascript:show('OodleLZ_CheckCRC.html')" class="paragraph">OodleLZ_CheckCRC</a> checks the CRC of <b>compressed</b> data,
this call checks the CRC of the <b>raw</b> (uncompressed) data.
</p>
<p> OodleLZ data contains a CRC of the compressed data if it was made with <a href="javascript:show('OodleLZ_CompressOptions.html','OodleLZ_CompressOptions.html_sendQuantumCRCs')" class="paragraph">OodleLZ_CompressOptions:sendQuantumCRCs</a>.
The SeekTable contains a CRC of the raw data if it was made with <a href="javascript:show('OodleLZSeekTable_Flags.html','OodleLZSeekTable_Flags.html_OodleLZSeekTable_Flags_MakeRawCRCs')" class="paragraph">OodleLZSeekTable_Flags_MakeRawCRCs</a>.
</p>
<p> Checking the CRC of compressed data is faster, but does not verify that the decompress succeeded.
<br>&nbsp;<br> <table class=bar> <tr>
<td width=33% align=left><span class='arrowleft'></span><a href="javascript:show('OodleLZ_FreeSeekTable.html')" class="paragraph">OodleLZ_FreeSeekTable</a></td><td width=33% align=center><span class='arrowup'></span><a href="javascript:show('OodleAPI_LZ_Compressors.html')" class="paragraph">OodleAPI_LZ_Compressors</a></td><td width=33% align=right><span class='arrowright'></span><a href="javascript:show('OodleLZ_FindSeekEntry.html')" class="paragraph">OodleLZ_FindSeekEntry</a></td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="OodleNetwork1UDP_State_Compact_ForVersion.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>OodleNetwork1UDP_State_Compact_ForVersion</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "OodleNetwork1UDP_State_Compact_ForVersion.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="OodleNetwork1UDP_State_Compact_ForVersion.html_backmenu">
<table class=dropmenu>
<tr><td><span class='arrowleft'></span>&nbsp;<a href="javascript:show('OodleNetwork1UDP_StateCompacted_MaxSize.html')" class="paragraph">OodleNetwork1UDP_StateCompacted_MaxSize</a></td></tr><tr><td><span class='arrowright'></span>&nbsp;<a href="javascript:show('OodleNetwork1UDP_State_Compact.html')" class="paragraph">OodleNetwork1UDP_State_Compact</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<div class=prototype><div class=prototype_header>// Function prototype:</div><pre>OO_SINTa <span class=prototype_type><a href="javascript:show('OodleNetwork1UDP_State_Compact_ForVersion.html')" class="blue">OodleNetwork1UDP_State_Compact_ForVersion</a></span>( <span class=prototype_type><a href="javascript:show('OodleNetwork1UDP_StateCompacted.html')" class="blue">OodleNetwork1UDP_StateCompacted</a></span> * to,
const <span class=prototype_type><a href="javascript:show('OodleNetwork1UDP_State.html')" class="blue">OodleNetwork1UDP_State</a></span> * from,
OO_S32 for_oodle_major_version );</pre></div><div class=discussion_heading>Discussion</div>See <a href="javascript:show('OodleNetwork1UDP_State_Compact.html')" class="paragraph">OodleNetwork1UDP_State_Compact</a>
*
* takes oodle_major_version to target
*
* Oodle Network Compacted state changed from major version 5 to 6 (eg 2.5.5 to 2.6.0)
*
<br>&nbsp;<br> <table class=bar> <tr>
<td width=33% align=left><span class='arrowleft'></span><a href="javascript:show('OodleNetwork1UDP_StateCompacted_MaxSize.html')" class="paragraph">OodleNetwork1UDP_StateCompacted_MaxSize</a></td><td width=33% align=center><span class='arrowup'></span><a href="javascript:show('OodleAPI_OodleNetwork1.html')" class="paragraph">OodleAPI_OodleNetwork1</a></td><td width=33% align=right><span class='arrowright'></span><a href="javascript:show('OodleNetwork1UDP_State_Compact.html')" class="paragraph">OodleNetwork1UDP_State_Compact</a></td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="OodleLZ_GetCompressScratchMemBound.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>OodleLZ_GetCompressScratchMemBound</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "OodleLZ_GetCompressScratchMemBound.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="OodleLZ_GetCompressScratchMemBound.html_backmenu">
<table class=dropmenu>
<tr><td><span class='arrowleft'></span>&nbsp;<a href="javascript:show('OodleLZ_Compressor_RespectsDictionarySize.html')" class="paragraph">OodleLZ_Compressor_RespectsDictionarySize</a></td></tr><tr><td><span class='arrowright'></span>&nbsp;<a href="javascript:show('OodleLZ_GetCompressScratchMemBoundEx.html')" class="paragraph">OodleLZ_GetCompressScratchMemBoundEx</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<div class=prototype><div class=prototype_header>// Function prototype:</div><pre>OO_SINTa <span class=prototype_type><a href="javascript:show('OodleLZ_GetCompressScratchMemBound.html')" class="blue">OodleLZ_GetCompressScratchMemBound</a></span>( <span class=prototype_type><a href="javascript:show('OodleLZ_Compressor.html')" class="blue">OodleLZ_Compressor</a></span> compressor,
<span class=prototype_type><a href="javascript:show('OodleLZ_CompressionLevel.html')" class="blue">OodleLZ_CompressionLevel</a></span> level,
OO_SINTa rawLen,
const <span class=prototype_type><a href="javascript:show('OodleLZ_CompressOptions.html')" class="blue">OodleLZ_CompressOptions</a></span> * pOptions OODEFAULT( NULL ) );</pre></div><div class=discussion_heading>Discussion</div>Return the maximum amount of scratch mem that will be needed by OodleLZ_Compress<div class=discussion_heading>Parameters</div> <table> <tr> <td style='vertical-align: top;' class=paramname><a id="OodleLZ_GetCompressScratchMemBound.html_compressor" class=nohover>compressor</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> which OodleLZ variant to use in compression
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleLZ_GetCompressScratchMemBound.html_level" class=nohover>level</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> OodleLZ_CompressionLevel controls how much CPU effort is put into maximizing compression
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleLZ_GetCompressScratchMemBound.html_rawLen" class=nohover>rawLen</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> maximum number of bytes you will compress (plus dictionary backup)
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleLZ_GetCompressScratchMemBound.html_pOptions" class=nohover>pOptions</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> (optional) options; if NULL, <a href="javascript:show('OodleLZ_CompressOptions_GetDefault.html')" class="paragraph">OodleLZ_CompressOptions_GetDefault</a> is used
</td></tr></table><div class=discussion_heading>Discussion</div></p>
<p> If you pass scratch mem to <a href="javascript:show('OodleLZ_Compress.html')" class="paragraph">OodleLZ_Compress</a> of this size, it is gauranteed to do no allocations.
(normally if it runs out of scratch mem, it falls back to the installed allocator)
</p>
<p> For <i>rawLen</i> pass at least the maximum size you will ever encode. If your data is divided into chunks,
pass the chunk size. If you will encode full buffers of unbounded size, pass -1.
</p>
<p> The options must be the same as when you call <a href="javascript:show('OodleLZ_Compress.html')" class="paragraph">OodleLZ_Compress</a>
</p>
<p> Some options and levels may not have simple finite bounds. Then <a href="javascript:show('OODLELZ_SCRATCH_MEM_NO_BOUND.html')" class="paragraph">OODLELZ_SCRATCH_MEM_NO_BOUND</a> is returned
and the call to <a href="javascript:show('OodleLZ_Compress.html')" class="paragraph">OodleLZ_Compress</a> may use the allocator even if infinite scratch memory is provided.
Currently this applies to all the Optimal levels.
</p>
<p> When OODLELZ_SCRATCH_MEM_NO_BOUND is returned, you can still pass in scratch mem which will be used before
going to the plugin allocator.
</p>
<p><br>&nbsp;<br> <table class=bar> <tr>
<td width=33% align=left><span class='arrowleft'></span><a href="javascript:show('OodleLZ_Compressor_RespectsDictionarySize.html')" class="paragraph">OodleLZ_Compressor_RespectsDictionarySize</a></td><td width=33% align=center><span class='arrowup'></span><a href="javascript:show('OodleAPI_LZ_Compressors.html')" class="paragraph">OodleAPI_LZ_Compressors</a></td><td width=33% align=right><span class='arrowright'></span><a href="javascript:show('OodleLZ_GetCompressScratchMemBoundEx.html')" class="paragraph">OodleLZ_GetCompressScratchMemBoundEx</a></td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="OodleXIOQ_MakeAllDirs_AsyncAndWait.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>OodleXIOQ_MakeAllDirs_AsyncAndWait</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "OodleXIOQ_MakeAllDirs_AsyncAndWait.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="OodleXIOQ_MakeAllDirs_AsyncAndWait.html_backmenu">
<table class=dropmenu>
<tr><td><span class='arrowleft'></span>&nbsp;<a href="javascript:show('OodleXIOQ_SetInfoByName_AsyncAndWait.html')" class="paragraph">OodleXIOQ_SetInfoByName_AsyncAndWait</a></td></tr><tr><td><span class='arrowright'></span>&nbsp;<a href="javascript:show('OodleXIOQ_Delete_AsyncAndWait.html')" class="paragraph">OodleXIOQ_Delete_AsyncAndWait</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<div class=prototype><div class=prototype_header>// Function prototype:</div><pre>OO_BOOL <span class=prototype_type><a href="javascript:show('OodleXIOQ_MakeAllDirs_AsyncAndWait.html')" class="blue">OodleXIOQ_MakeAllDirs_AsyncAndWait</a></span>( const char * path );</pre></div><div class=discussion_heading>Discussion</div>See <a href="javascript:show('OodleXIOQ_MakeAllDirs_Async.html')" class="paragraph">OodleXIOQ_MakeAllDirs_Async</a>
<br>&nbsp;<br> <table class=bar> <tr>
<td width=33% align=left><span class='arrowleft'></span><a href="javascript:show('OodleXIOQ_SetInfoByName_AsyncAndWait.html')" class="paragraph">OodleXIOQ_SetInfoByName_AsyncAndWait</a></td><td width=33% align=center><span class='arrowup'></span><a href="javascript:show('OodleXAPI_IOQ.html')" class="paragraph">OodleX low level async io</a></td><td width=33% align=right><span class='arrowright'></span><a href="javascript:show('OodleXIOQ_Delete_AsyncAndWait.html')" class="paragraph">OodleXIOQ_Delete_AsyncAndWait</a></td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="OodleNet_Plugins_SetJobSystem.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>OodleNet_Plugins_SetJobSystem</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "OodleNet_Plugins_SetJobSystem.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="OodleNet_Plugins_SetJobSystem.html_backmenu">
<table class=dropmenu>
<tr><td><span class='arrowleft'></span>&nbsp;<a href="javascript:show('OodleNet_Plugins_SetAllocators.html')" class="paragraph">OodleNet_Plugins_SetAllocators</a></td></tr><tr><td><span class='arrowright'></span>&nbsp;<a href="javascript:show('OodleNet_Plugins_SetJobSystemAndCount.html')" class="paragraph">OodleNet_Plugins_SetJobSystemAndCount</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<div class=prototype><div class=prototype_header>// Function prototype:</div><pre>void <span class=prototype_type><a href="javascript:show('OodleNet_Plugins_SetJobSystem.html')" class="blue">OodleNet_Plugins_SetJobSystem</a></span>( <span class=prototype_type><a href="javascript:show('t_fp_OodleNet_Plugin_RunJob.html')" class="blue">t_fp_OodleNet_Plugin_RunJob</a></span> * fp_RunJob,
<span class=prototype_type><a href="javascript:show('t_fp_OodleNet_Plugin_WaitJob.html')" class="blue">t_fp_OodleNet_Plugin_WaitJob</a></span> * fp_WaitJob );</pre></div><div class=discussion_heading>Discussion</div>DEPRECATED use OodleNet_Plugins_SetJobSystemAndCount instead<div class=discussion_heading>Discussion</div>See <a href="javascript:show('OodleNet_Plugins_SetJobSystemAndCount.html')" class="paragraph">OodleNet_Plugins_SetJobSystemAndCount</a>
<br>&nbsp;<br> <table class=bar> <tr>
<td width=33% align=left><span class='arrowleft'></span><a href="javascript:show('OodleNet_Plugins_SetAllocators.html')" class="paragraph">OodleNet_Plugins_SetAllocators</a></td><td width=33% align=center><span class='arrowup'></span><a href="javascript:show('OodleAPI_OodleNet_Plugins.html')" class="paragraph">Network plugins</a></td><td width=33% align=right><span class='arrowright'></span><a href="javascript:show('OodleNet_Plugins_SetJobSystemAndCount.html')" class="paragraph">OodleNet_Plugins_SetJobSystemAndCount</a></td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="OodleNetwork_About_CapturingTrainingData.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>Capturing Training data for OodleNetwork</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "OodleNetwork_About_CapturingTrainingData.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="OodleNetwork_About_CapturingTrainingData.html_backmenu">
<table class=dropmenu>
<tr><td><span class='arrowup'></span>&nbsp;<a href="javascript:show('OodleNetwork_About.html')" class="paragraph">About Oodle Network Compression</a></td></tr><tr><td><span class='arrowright'></span>&nbsp;<a href="javascript:show('OodleNetwork_About_FormingPacketsForMaximumCompression.html')" class="paragraph">Forming Packets for Maximum Compression</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<P>
To evaluate Oodle Network fairly, you will need to capture network packets from a real play session.
</p>
<p>Once you are using Oodle Network in production, you will need to make a large capture to train the
compressor that you ship.
</p>
<p>If possible, capture from a real game session (perhaps from your QA department
playing the game), not a simulation using bots. Simulated captures can have patterns that don't
reflect real play.
</p>
<p>The captured packets should be without any encryption or other compression
algorithms applied. Any already compressed data (such as zlib or jpeg or voice data)
should be excluded from the packet capture. Very large packets that you will compress with OodleLZ should also be excluded.
</p>
<p>You should typically continue to use your heuristic bit-packing or delta scheme.
</p>
<p>Try to capture at least 100 MB of packet data for the evalution. For final game training you should
capture more. Note that just capturing a very long single session is not generally helpful; you want to take a
broad sampling of many sessions over time to ensure that the capture is reflective of the whole spectrum of
packets that the game sends.
</p>
<p>The better the training packets match the packets seen in the final game, the more compression there will be.
Mismatches are not a disaster, they simply mean that part of the dictionary is not useful for compression.
</p>
<p>The <a href="javascript:show('example_packet.html')" class="paragraph">example_packet : Example demonstrating network packet compression</a> shipped with Oodle reads this file format :
</p>
<p><PRE>
packet.bin :
U32 [LE] : numbers of channels (num_channels)
repeatedly :
{
U32 [LE] : channel index in [0,num_channels-1]
U32 [LE] : number of bytes of data in this packet (num_bytes)
U8 * num_bytes : payload of this packet
}
</PRE>
</p>
<p>though you may always change example_packet to read a different format.
</p>
<p>For UDP, write num_channels = 1 and the channel index of all packets as 0.
</p>
<p>The cleanest way to capture packets is to add code to your server to log them out immediately before sending.
If you can't change your server code, then something like tcpdump can be used, but you will have to strip
the protocol headers.
</p>
<p>For your final shipping capture, you should try to capture packets from a wide variety of play sessions in
different levels, with different numbers of players, to get a broad sampling of what your network traffic
looks like. Then combine random portions of those captures to make the packet file that you use for Oodle
Network training. This ensures that you don't train on a non-representative set of data.
</p>
<p>NOTE : the packets that you hold out for testing/training/dictionary should be a random selection of
packets, not linear chunks. You want each group of packets to be an independent random sampling of the
network traffic. Each group should span the range of different types of data you send. (<a href="javascript:show('example_packet.html')" class="paragraph">example_packet : Example demonstrating network packet compression</a>
includes one way of doing this)
</p>
<p>NOTE : if you are compressing both upstream and downstream, those should generally have different dictionaries
and different trained states. Typically the nature of the network traffic up and down is very different, so
they should not be mixed together in a single capture. If you have very distinct network traffic phases
(such as, for example, a lobby or match-making phase and then a match play phase) then it may be advantageous
to separate those types of traffic for compression.
</p>
<p>Contact oodle@radgametools.com with any questions<br>&nbsp;<br> <table class=bar> <tr>
<td width=33% align=left><span class='arrowleft'></span><a href="javascript:show('OodleNetwork_About.html')" class="paragraph">About Oodle Network Compression</a></td><td width=33% align=center><span class='arrowup'></span><a href="javascript:show('OodleNetwork_About.html')" class="paragraph">About Oodle Network Compression</a></td><td width=33% align=right><span class='arrowright'></span><a href="javascript:show('OodleNetwork_About_FormingPacketsForMaximumCompression.html')" class="paragraph">Forming Packets for Maximum Compression</a></td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="OodleXStatus.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>OodleXStatus</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "OodleXStatus.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="OodleXStatus.html_backmenu">
<table class=dropmenu>
<tr><td><span class='arrowleft'></span>&nbsp;<a href="javascript:show('OodleXAsyncSelect.html')" class="paragraph">OodleXAsyncSelect</a></td></tr><tr><td><span class='arrowright'></span>&nbsp;<a href="javascript:show('OodleXHandleAutoDelete.html')" class="paragraph">OodleXHandleAutoDelete</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<div class=prototype><div class=prototype_header>// Enumerant:</div><pre><span class=prototype_type>enum</span> <a href="javascript:show('OodleXStatus.html')">OodleXStatus</a>
{
&nbsp;&nbsp;&nbsp;&nbsp;OodleXStatus_Invalid = 0,
&nbsp;&nbsp;&nbsp;&nbsp;OodleXStatus_Pending = 1,
&nbsp;&nbsp;&nbsp;&nbsp;OodleXStatus_Done = 2,
&nbsp;&nbsp;&nbsp;&nbsp;OodleXStatus_Error = 3,
&nbsp;&nbsp;&nbsp;&nbsp;OodleXStatus_Count = 4,
&nbsp;&nbsp;&nbsp;&nbsp;OodleXStatus_Force32 = 0x40000000
};
</pre></div><div class=discussion_heading>Discussion</div> OodleXStatus indicates the status of asynchronous weak reference handles.<div class=discussion_heading>Enumerants</div> <table> <tr> <td style='vertical-align: top;' class=paramname><a id="OodleXStatus.html_OodleXStatus_Invalid" class=nohover>OodleXStatus_Invalid</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> indicates that a handle is not a live object (possibly previously deleted)</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXStatus.html_OodleXStatus_Pending" class=nohover>OodleXStatus_Pending</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> handle is alive and pending</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXStatus.html_OodleXStatus_Done" class=nohover>OodleXStatus_Done</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> handle completed succesfully</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXStatus.html_OodleXStatus_Error" class=nohover>OodleXStatus_Error</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> handle completed in error state</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXStatus.html_OodleXStatus_Count" class=nohover>OodleXStatus_Count</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc></td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXStatus.html_OodleXStatus_Force32" class=nohover>OodleXStatus_Force32</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc></td></tr></table><div class=discussion_heading>Discussion</div> The OodleXStatus generally increases in numeric value during its autoDelete.
Check status >= OodleXStatus_Done to test for completion (possibly error).
</p>
<p> <PRE>
Not yet allocated : OodleXStatus_Invalid = 0
Fired off and still pending : OodleXStatus_Pending = 1
Completed (possibly in error) : OodleXStatus_Done = 2 or <i>Error = 3
</PRE>
</i><br>&nbsp;<br> <table class=bar> <tr>
<td width=33% align=left><span class='arrowleft'></span><a href="javascript:show('OodleXAsyncSelect.html')" class="paragraph">OodleXAsyncSelect</a></td><td width=33% align=center><span class='arrowup'></span><a href="javascript:show('OodleXAPI_Handle.html')" class="paragraph">OodleX async handle operations</a></td><td width=33% align=right><span class='arrowright'></span><a href="javascript:show('OodleXHandleAutoDelete.html')" class="paragraph">OodleXHandleAutoDelete</a></td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="OodleNetwork1UDP_StateCompacted.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>OodleNetwork1UDP_StateCompacted</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "OodleNetwork1UDP_StateCompacted.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="OodleNetwork1UDP_StateCompacted.html_backmenu">
<table class=dropmenu>
<tr><td><span class='arrowleft'></span>&nbsp;<a href="javascript:show('OodleNetwork1UDP_State.html')" class="paragraph">OodleNetwork1UDP_State</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<div class=prototype><div class=prototype_header>// Structure definition:</div><pre><span class=prototype_type>struct</span> <a href="javascript:show('OodleNetwork1UDP_StateCompacted.html')">OodleNetwork1UDP_StateCompacted</a>;
</pre></div><div class=discussion_heading>Discussion</div> Opaque type for an <a href="javascript:show('OodleNetwork1UDP_StateCompacted.html')" class="paragraph">OodleNetwork1UDP_StateCompacted</a><div class=discussion_heading>Discussion</div> Compacted version of OodleNetwork1UDP_State
</p>
<p> Used to decrease the size of OodleNetwork1UDP_State for storage.
You cannot code with a OodleNetwork1UDP_StateCompacted.
<br>&nbsp;<br> <table class=bar> <tr>
<td width=33% align=left><span class='arrowleft'></span><a href="javascript:show('OodleNetwork1UDP_State.html')" class="paragraph">OodleNetwork1UDP_State</a></td><td width=33% align=center><span class='arrowup'></span><a href="javascript:show('OodleAPI_OodleNetwork1.html')" class="paragraph">OodleAPI_OodleNetwork1</a></td><td width=33% align=right><span class='arrowright'></span><a href="javascript:show('OodleNetwork1_Shared_Size.html')" class="paragraph">OodleNetwork1_Shared_Size</a></td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="OodleXAPI_LZ.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>OodleX LZ compression</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "OodleXAPI_LZ.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="OodleXAPI_LZ.html_backmenu">
<table class=dropmenu>
<tr><td><span class='arrowup'></span>&nbsp;<a href="javascript:show('OodleExtAPI.html')" class="paragraph">Oodle2 Ext API Documentation</a></td></tr><tr><td><span class='arrowright'></span>&nbsp;<a href="javascript:show('OodleXAPI_Init.html')" class="paragraph">OodleX Startup and Shutdown</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<P>
Oodle2 Ext LZ lossless data compression.
</p>
<p> <p><ul class='TOCItem'>
<li><span onClick="HandleClick(event, null); return false" class='TOCGroup closedbook_icon'></span>&nbsp;<a href="javascript:show('OodleXAPI_LZ_Async.html')">OodleXAPI_LZ_Async</a></li>
<ul style="display:none" class='TOCItem'>
<li><span onClick="HandleClick(event, null); return false" class='TOCGroup closedbook_icon'></span>&nbsp;Structures</li>
<ul style="display:none" class='TOCItem'>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleDecompressCallback_WriteFile_Data.html')">OodleDecompressCallback_WriteFile_Data</a></li>
</ul>
<li><span onClick="HandleClick(event, null); return false" class='TOCGroup closedbook_icon'></span>&nbsp;Functions</li>
<ul style="display:none" class='TOCItem'>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleXLZ_Decompress_ThreadPhased_Narrow_Async.html')">OodleXLZ_Decompress_ThreadPhased_Narrow_Async</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleXLZ_Decompress_Narrow_Async.html')">OodleXLZ_Decompress_Narrow_Async</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleXLZ_ReadAndDecompress_Wide_Async.html')">OodleXLZ_ReadAndDecompress_Wide_Async</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleXLZ_Decompress_Wide_Async.html')">OodleXLZ_Decompress_Wide_Async</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleXLZ_Decompress_MakeSeekTable_Wide_Async.html')">OodleXLZ_Decompress_MakeSeekTable_Wide_Async</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleXLZ_Compress_Async.html')">OodleXLZ_Compress_Async</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleXLZ_Compress_Wait_GetResult.html')">OodleXLZ_Compress_Wait_GetResult</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleXLZ_Compress_AsyncAndWait.html')">OodleXLZ_Compress_AsyncAndWait</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleXLZ_ReadAndDecompress_Stream_Async.html')">OodleXLZ_ReadAndDecompress_Stream_Async</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleXDecompressCallback_WriteFile_Data_Init.html')">OodleXDecompressCallback_WriteFile_Data_Init</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleDecompressCallback_WriteFile.html')">OodleDecompressCallback_WriteFile</a></li>
</ul>
</ul>
</ul>
<br>&nbsp;<br> <table class=bar> <tr>
<td width=33% align=left><span class='arrowleft'></span><a href="javascript:show('OodleExtAPI.html')" class="paragraph">Oodle2 Ext API Documentation</a></td><td width=33% align=center><span class='arrowup'></span><a href="javascript:show('OodleExtAPI.html')" class="paragraph">Oodle2 Ext API Documentation</a></td><td width=33% align=right><span class='arrowright'></span><a href="javascript:show('OodleXAPI_LZ_Async.html')" class="paragraph">OodleXAPI_LZ_Async</a></td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="acknowledgements.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>Acknowledgements</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "acknowledgements.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="acknowledgements.html_backmenu">
<table class=dropmenu>
<tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<P>
<h2> Acknowledgements</h2>
</p>
<p>The product names Oodle, Bink, Miles, Iggy, Granny and Telemetry are all copyrighted and trademarked by Epic Games Tools LLC. Printed and produced in the United States of America.
</p>
<p>As a licensee of Oodle, you must abide by the terms set forth in your license agreement. Please refer to that agreement if you have any questions about what you may or may not do with this documentation or the software to which it pertains. Oodle is not copy protected, but it is copyrighted. We think our license agreements are fair, and that our software is reasonably priced for the quality and effort we have put into it. Using our software in ways other than allowed by your license agreement violates federal, civil, and criminal law. We rely primarily on your good faith not to violate our copyright; please respect it.
</p>
<p>This software and documentation are provided "as is" without warranty of any kind, either expressed or implied, including, but not limited to, the implied warranties of merchantability and fitness for a particular purpose. In no event will Epic Games Tools LLC be liable to you for damages, including any general, special, incidental or consequential damages arising out of the use or inability to use the product (including, but not limited to, loss of data).
</p>
<p>Oodle was written by Charles Bloom and Fabian Giesen.
</p>
<p>The IDOC automatic documentation system used for Oodle was written by Sean Barrett.
</p>
<p>The compression algorithms in Oodle benefitted from discussion with countless developers who have shared their thoughts and code with me over the years.
</p>
<p><hr>
</p>
<p><p><ul class='TOCItem'>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('licenses.html')">Third Party License Notices</a></li>
</ul>
<br>&nbsp;<br> <table class=bar> <tr>
<td width=33%>&nbsp;</td><td width=33%>&nbsp;</td><td width=33% align=right><span class='arrowright'></span><a href="javascript:show('licenses.html')" class="paragraph">Third Party License Notices</a></td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="OODLENETWORK1_DECOMP_BUF_OVERREAD_LEN.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>OODLENETWORK1_DECOMP_BUF_OVERREAD_LEN</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "OODLENETWORK1_DECOMP_BUF_OVERREAD_LEN.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="OODLENETWORK1_DECOMP_BUF_OVERREAD_LEN.html_backmenu">
<table class=dropmenu>
<tr><td><span class='arrowleft'></span>&nbsp;<a href="javascript:show('OODLENETWORK1_HASH_BITS_DEFAULT.html')" class="paragraph">OODLENETWORK1_HASH_BITS_DEFAULT</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<div class=prototype><div class=prototype_header>// Preprocessor definition:</div><pre><span class=prototype_type>#define</span> <a href="javascript:show('OODLENETWORK1_DECOMP_BUF_OVERREAD_LEN.html')">OODLENETWORK1_DECOMP_BUF_OVERREAD_LEN</a> (5)</pre></div><div class=discussion_heading>Discussion</div> compressed buffer must be sized to at least compLen+OODLENETWORK1_DECOMP_BUF_OVERREAD_LEN<div class=discussion_heading>Discussion</div> (note that this is strictly less than OodleNetwork1_CompressedBufferSizeNeeded(rawLen))
</p>
<p><br>&nbsp;<br> <table class=bar> <tr>
<td width=33% align=left><span class='arrowleft'></span><a href="javascript:show('OODLENETWORK1_HASH_BITS_DEFAULT.html')" class="paragraph">OODLENETWORK1_HASH_BITS_DEFAULT</a></td><td width=33% align=center><span class='arrowup'></span><a href="javascript:show('OodleAPI_OodleNetwork1.html')" class="paragraph">OodleAPI_OodleNetwork1</a></td><td width=33% align=right><span class='arrowright'></span><a href="javascript:show('OodleNetwork1_Shared.html')" class="paragraph">OodleNetwork1_Shared</a></td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="t_fp_OodleCore_Plugin_MallocAligned.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>t_fp_OodleCore_Plugin_MallocAligned</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "t_fp_OodleCore_Plugin_MallocAligned.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="t_fp_OodleCore_Plugin_MallocAligned.html_backmenu">
<table class=dropmenu>
<tr><td><span class='arrowright'></span>&nbsp;<a href="javascript:show('t_fp_OodleCore_Plugin_Free.html')" class="paragraph">t_fp_OodleCore_Plugin_Free</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<div class=prototype><div class=prototype_header>// Function typedef:</div><pre>OODEFFUNC void *( OODLE_CALLBACK <span class=prototype_type><a href="javascript:show('t_fp_OodleCore_Plugin_MallocAligned.html')" class="blue">t_fp_OodleCore_Plugin_MallocAligned</a></span> )( OO_SINTa bytes,
OO_S32 alignment );</pre></div><div class=discussion_heading>Discussion</div>Function pointer type for OodleMallocAligned<div class=discussion_heading>Parameters</div> <table> <tr> <td style='vertical-align: top;' class=paramname><a id="t_fp_OodleCore_Plugin_MallocAligned.html_bytes" class=nohover>bytes</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> number of bytes to allocate
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="t_fp_OodleCore_Plugin_MallocAligned.html_alignment" class=nohover>alignment</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> required alignment of returned pointer
</td></tr></table><div class=discussion_heading>Return Value</div> <table> <tr> <td style='vertical-align: top;' class=paramname><a id="t_fp_OodleCore_Plugin_MallocAligned.html_return" class=nohover>return</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> pointer to memory allocated (must not be NULL)
</td></tr></table><div class=discussion_heading>Discussion</div></p>
<p> <i>alignment</i> will always be a power of two
</p>
<p> <i>alignment</i> will always be >= <a href="javascript:show('OODLE_MALLOC_MINIMUM_ALIGNMENT.html')" class="paragraph">OODLE_MALLOC_MINIMUM_ALIGNMENT</a>
</p>
<p><br>&nbsp;<br> <table class=bar> <tr>
<td width=33% align=left><span class='arrowleft'></span><a href="javascript:show('OodleCore_Plugins_SetAssertion.html')" class="paragraph">OodleCore_Plugins_SetAssertion</a></td><td width=33% align=center><span class='arrowup'></span><a href="javascript:show('OodleAPI_OodleCore_Plugins.html')" class="paragraph">Core plugins</a></td><td width=33% align=right><span class='arrowright'></span><a href="javascript:show('t_fp_OodleCore_Plugin_Free.html')" class="paragraph">t_fp_OodleCore_Plugin_Free</a></td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="OodleNetwork1TCP_Decode.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>OodleNetwork1TCP_Decode</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "OodleNetwork1TCP_Decode.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="OodleNetwork1TCP_Decode.html_backmenu">
<table class=dropmenu>
<tr><td><span class='arrowleft'></span>&nbsp;<a href="javascript:show('OodleNetwork1TCP_Encode.html')" class="paragraph">OodleNetwork1TCP_Encode</a></td></tr><tr><td><span class='arrowright'></span>&nbsp;<a href="javascript:show('OodleNetwork1UDP_Train.html')" class="paragraph">OodleNetwork1UDP_Train</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<div class=prototype><div class=prototype_header>// Function prototype:</div><pre>OO_BOOL <span class=prototype_type><a href="javascript:show('OodleNetwork1TCP_Decode.html')" class="blue">OodleNetwork1TCP_Decode</a></span>( <span class=prototype_type><a href="javascript:show('OodleNetwork1TCP_State.html')" class="blue">OodleNetwork1TCP_State</a></span> * state,
const <span class=prototype_type><a href="javascript:show('OodleNetwork1_Shared.html')" class="blue">OodleNetwork1_Shared</a></span> * shared,
const void * comp,
OO_SINTa compLen,
void * raw,
OO_SINTa rawLen );</pre></div><div class=discussion_heading>Discussion</div>Decode a packet<div class=discussion_heading>Parameters</div> <table> <tr> <td style='vertical-align: top;' class=paramname><a id="OodleNetwork1TCP_Decode.html_state" class=nohover>state</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> state of this compression channel; will be mutated
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleNetwork1TCP_Decode.html_shared" class=nohover>shared</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> const shared compression context
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleNetwork1TCP_Decode.html_comp" class=nohover>comp</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> compressed packet received
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleNetwork1TCP_Decode.html_compLen" class=nohover>compLen</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> size of compressed data
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleNetwork1TCP_Decode.html_raw" class=nohover>raw</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> output decompressed packet
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleNetwork1TCP_Decode.html_rawLen" class=nohover>rawLen</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> size of the packet to write
</td></tr></table><div class=discussion_heading>Return Value</div> <table> <tr> <td style='vertical-align: top;' class=paramname><a id="OodleNetwork1TCP_Decode.html_return" class=nohover>return</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> false for failure
</td></tr></table><div class=discussion_heading>Discussion</div></p>
<p> Decodes one packet. <i>state</i> is mutated, learning from this packet for future packets.
</p>
<p> The <i>rawLen</i> provided here must match the length used in <a href="javascript:show('OodleNetwork1TCP_Encode.html')" class="paragraph">OodleNetwork1TCP_Encode</a> when creating this compressed packet. The OodleNetwork1 data is headerless, it's up to you to send the packet decompressed size in your own header.
</p>
<p> If corrupt data is detected, false is returned.
</p>
<p> If the number of compressed bytes consumed does not match <i>compLen</i>, false is returned.
If the number of output bytes does not match <i>rawLen</i>, false is returned.
</p>
<p> This function, however, does not do verify data integrity. It will return 'true' if the correct number of bytes are coded,
even if the data does not match.
</p>
<p> The buffer <i>comp</i> must be allowed to read at least <i>compLen</i> + OODLENETWORK1_DECOMP_BUF_OVERREAD_LEN bytes
(note that this is strictly less than OodleNetwork1_CompressedBufferSizeNeeded(<i>rawLen</i>) , so that may be used as well)
</p>
<p><br>&nbsp;<br> <table class=bar> <tr>
<td width=33% align=left><span class='arrowleft'></span><a href="javascript:show('OodleNetwork1TCP_Encode.html')" class="paragraph">OodleNetwork1TCP_Encode</a></td><td width=33% align=center><span class='arrowup'></span><a href="javascript:show('OodleAPI_OodleNetwork1.html')" class="paragraph">OodleAPI_OodleNetwork1</a></td><td width=33% align=right><span class='arrowright'></span><a href="javascript:show('OodleNetwork1UDP_Train.html')" class="paragraph">OodleNetwork1UDP_Train</a></td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="OodleXOSFileListing.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>OodleXOSFileListing</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "OodleXOSFileListing.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="OodleXOSFileListing.html_backmenu">
<table class=dropmenu>
<tr><td><span class='arrowleft'></span>&nbsp;<a href="javascript:show('OodleXOSFile.html')" class="paragraph">OodleXOSFile</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<div class=prototype><div class=prototype_header>// Type definition:</div><pre>void * <span class=prototype_type><a href="javascript:show('OodleXOSFileListing.html')" class="blue">OodleXOSFileListing</a></span></pre></div><div class=discussion_heading>Discussion</div> OS file listing abstract type <br>&nbsp;<br> <table class=bar> <tr>
<td width=33% align=left><span class='arrowleft'></span><a href="javascript:show('OodleXOSFile.html')" class="paragraph">OodleXOSFile</a></td><td width=33% align=center><span class='arrowup'></span><a href="javascript:show('OodleXAPI_IOQ.html')" class="paragraph">OodleX low level async io</a></td><td width=33% align=right><span class='arrowright'></span><a href="javascript:show('OodleXAPI_Debug.html')" class="paragraph">OodleX Debug aids</a></td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="OODLELZ_LOCALDICTIONARYSIZE_MAX.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>OODLELZ_LOCALDICTIONARYSIZE_MAX</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "OODLELZ_LOCALDICTIONARYSIZE_MAX.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="OODLELZ_LOCALDICTIONARYSIZE_MAX.html_backmenu">
<table class=dropmenu>
<tr><td><span class='arrowleft'></span>&nbsp;<a href="javascript:show('OODLE_ALLOW_DEPRECATED_COMPRESSORS.html')" class="paragraph">OODLE_ALLOW_DEPRECATED_COMPRESSORS</a></td></tr><tr><td><span class='arrowright'></span>&nbsp;<a href="javascript:show('OODLELZ_SPACESPEEDTRADEOFFBYTES_DEFAULT.html')" class="paragraph">OODLELZ_SPACESPEEDTRADEOFFBYTES_DEFAULT</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<div class=prototype><div class=prototype_header>// Preprocessor definition:</div><pre><span class=prototype_type>#define</span> <a href="javascript:show('OODLELZ_LOCALDICTIONARYSIZE_MAX.html')">OODLELZ_LOCALDICTIONARYSIZE_MAX</a> (1&lt;&lt;30)</pre></div><div class=discussion_heading>Discussion</div> Maximum value of maxLocalDictionarySize in OodleLZ_CompressOptions
<br>&nbsp;<br> <table class=bar> <tr>
<td width=33% align=left><span class='arrowleft'></span><a href="javascript:show('OODLE_ALLOW_DEPRECATED_COMPRESSORS.html')" class="paragraph">OODLE_ALLOW_DEPRECATED_COMPRESSORS</a></td><td width=33% align=center><span class='arrowup'></span><a href="javascript:show('OodleAPI_LZ_Compressors.html')" class="paragraph">OodleAPI_LZ_Compressors</a></td><td width=33% align=right><span class='arrowright'></span><a href="javascript:show('OODLELZ_SPACESPEEDTRADEOFFBYTES_DEFAULT.html')" class="paragraph">OODLELZ_SPACESPEEDTRADEOFFBYTES_DEFAULT</a></td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="OodleXIOQ_OpenAndReadMallocWholeFile_Async.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>OodleXIOQ_OpenAndReadMallocWholeFile_Async</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "OodleXIOQ_OpenAndReadMallocWholeFile_Async.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="OodleXIOQ_OpenAndReadMallocWholeFile_Async.html_backmenu">
<table class=dropmenu>
<tr><td><span class='arrowleft'></span>&nbsp;<a href="javascript:show('OodleXIOQ_ReadMallocWholeFile_GetResult.html')" class="paragraph">OodleXIOQ_ReadMallocWholeFile_GetResult</a></td></tr><tr><td><span class='arrowright'></span>&nbsp;<a href="javascript:show('OodleXIOQ_OpenAndReadMallocWholeFileAndClose_Async.html')" class="paragraph">OodleXIOQ_OpenAndReadMallocWholeFileAndClose_Async</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<div class=prototype><div class=prototype_header>// Function prototype:</div><pre><span class=prototype_type><a href="javascript:show('OodleXHandle.html')" class="blue">OodleXHandle</a></span> <span class=prototype_type><a href="javascript:show('OodleXIOQ_OpenAndReadMallocWholeFile_Async.html')" class="blue">OodleXIOQ_OpenAndReadMallocWholeFile_Async</a></span>( <span class=prototype_type><a href="javascript:show('OodleXIOQFile.html')" class="blue">OodleXIOQFile</a></span> * pFile,
const char * name,
<span class=prototype_type><a href="javascript:show('OodleXFileOpenFlags.html')" class="blue">OodleXFileOpenFlags</a></span> fileOpenFlags OODEFAULT( OodleXFileOpenFlags_Default ),
const <span class=prototype_type><a href="javascript:show('OodleXFileOpsVTable.html')" class="blue">OodleXFileOpsVTable</a></span> * vtable OODEFAULT( NULL ),
<span class=prototype_type><a href="javascript:show('OodleXHandleAutoDelete.html')" class="blue">OodleXHandleAutoDelete</a></span> autoDelete OODEFAULT( OodleXHandleAutoDelete_No ),
<span class=prototype_type><a href="javascript:show('OodleXPriority.html')" class="blue">OodleXPriority</a></span> priority OODEFAULT( OodleXPriority_Normal ),
const <span class=prototype_type><a href="javascript:show('OodleXHandle.html')" class="blue">OodleXHandle</a></span> * dependencies OODEFAULT( NULL ),
OO_S32 numDependencies OODEFAULT( 0 ) );</pre></div><div class=discussion_heading>Discussion</div>Start a high level IO request to open a file, allocate a buffer for a whole file and read it<div class=discussion_heading>Parameters</div> <table> <tr> <td style='vertical-align: top;' class=paramname><a id="OodleXIOQ_OpenAndReadMallocWholeFile_Async.html_pFile" class=nohover>pFile</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> filled with a handle to the file which will be opened
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXIOQ_OpenAndReadMallocWholeFile_Async.html_name" class=nohover>name</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> name of the file to open (VFS, UTF-8)
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXIOQ_OpenAndReadMallocWholeFile_Async.html_fileOpenFlags" class=nohover>fileOpenFlags</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> (optional) flags for the os file open (see <a href="javascript:show('OodleXFileOpenFlags.html')" class="paragraph">OodleXFileOpenFlags</a>)
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXIOQ_OpenAndReadMallocWholeFile_Async.html_vtable" class=nohover>vtable</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> (optional) the <a href="javascript:show('OodleXFileOpsVTable.html')" class="paragraph">OodleXFileOpsVTable</a> to use for all ops on this file
</td></tr></table><div class=discussion_heading>Return Value</div> <table> <tr> <td style='vertical-align: top;' class=paramname><a id="OodleXIOQ_OpenAndReadMallocWholeFile_Async.html_return" class=nohover>return</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> handle to the RMWF op; use <a href="javascript:show('OodleXIOQ_ReadMallocWholeFile_GetResult.html')" class="paragraph">OodleXIOQ_ReadMallocWholeFile_GetResult</a>
</td></tr></table><div class=discussion_heading>Discussion</div></p>
<p> High level IOQ operations are helpers built on the simpler IOQ low level ops.
</p>
<p> Performs <a href="javascript:show('OodleXIOQ_OpenForRead_Async.html')" class="paragraph">OodleXIOQ_OpenForRead_Async</a> and <a href="javascript:show('OodleXIOQ_ReadMallocWholeFile_Async.html')" class="paragraph">OodleXIOQ_ReadMallocWholeFile_Async</a>.
</p>
<p> The <a href="javascript:show('OodleXHandle.html')" class="paragraph">OodleXHandle</a> returned is to the RMWF operation; use <a href="javascript:show('OodleXIOQ_ReadMallocWholeFile_GetResult.html')" class="paragraph">OodleXIOQ_ReadMallocWholeFile_GetResult</a>.
</p>
<p> You will normally want to enqueue an <a href="javascript:show('OodleXIOQ_CloseFile_Async.html')" class="paragraph">OodleXIOQ_CloseFile_Async</a> after this.
<br>&nbsp;<br> <table class=bar> <tr>
<td width=33% align=left><span class='arrowleft'></span><a href="javascript:show('OodleXIOQ_ReadMallocWholeFile_GetResult.html')" class="paragraph">OodleXIOQ_ReadMallocWholeFile_GetResult</a></td><td width=33% align=center><span class='arrowup'></span><a href="javascript:show('OodleXAPI_IOQ.html')" class="paragraph">OodleX low level async io</a></td><td width=33% align=right><span class='arrowright'></span><a href="javascript:show('OodleXIOQ_OpenAndReadMallocWholeFileAndClose_Async.html')" class="paragraph">OodleXIOQ_OpenAndReadMallocWholeFileAndClose_Async</a></td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="OodleLZDecoder_Destroy.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>OodleLZDecoder_Destroy</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "OodleLZDecoder_Destroy.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="OodleLZDecoder_Destroy.html_backmenu">
<table class=dropmenu>
<tr><td><span class='arrowleft'></span>&nbsp;<a href="javascript:show('OodleLZ_ThreadPhased_BlockDecoderMemorySizeNeeded.html')" class="paragraph">OodleLZ_ThreadPhased_BlockDecoderMemorySizeNeeded</a></td></tr><tr><td><span class='arrowright'></span>&nbsp;<a href="javascript:show('OodleLZDecoder_Reset.html')" class="paragraph">OodleLZDecoder_Reset</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<div class=prototype><div class=prototype_header>// Function prototype:</div><pre>void <span class=prototype_type><a href="javascript:show('OodleLZDecoder_Destroy.html')" class="blue">OodleLZDecoder_Destroy</a></span>( <span class=prototype_type><a href="javascript:show('OodleLZDecoder.html')" class="blue">OodleLZDecoder</a></span> * decoder );</pre></div><div class=discussion_heading>Discussion</div>Pairs with <a href="javascript:show('OodleLZDecoder_Create.html')" class="paragraph">OodleLZDecoder_Create</a><div class=discussion_heading>Discussion</div>You should always call Destroy even if you provided the memory for <a href="javascript:show('OodleLZDecoder_Create.html')" class="paragraph">OodleLZDecoder_Create</a>
<br>&nbsp;<br> <table class=bar> <tr>
<td width=33% align=left><span class='arrowleft'></span><a href="javascript:show('OodleLZ_ThreadPhased_BlockDecoderMemorySizeNeeded.html')" class="paragraph">OodleLZ_ThreadPhased_BlockDecoderMemorySizeNeeded</a></td><td width=33% align=center><span class='arrowup'></span><a href="javascript:show('OodleAPI_LZ_Compressors.html')" class="paragraph">OodleAPI_LZ_Compressors</a></td><td width=33% align=right><span class='arrowright'></span><a href="javascript:show('OodleLZDecoder_Reset.html')" class="paragraph">OodleLZDecoder_Reset</a></td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="OODLEX_FILEINFO_FLAGS.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>OODLEX_FILEINFO_FLAGS</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "OODLEX_FILEINFO_FLAGS.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="OODLEX_FILEINFO_FLAGS.html_backmenu">
<table class=dropmenu>
<tr><td><span class='arrowleft'></span>&nbsp;<a href="javascript:show('OodleFileNotFoundIsAnError.html')" class="paragraph">OodleFileNotFoundIsAnError</a></td></tr><tr><td><span class='arrowright'></span>&nbsp;<a href="javascript:show('OodleXError.html')" class="paragraph">OodleXError</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<div class=prototype><div class=prototype_header>// Enumerant:</div><pre><span class=prototype_type>enum</span> <a href="javascript:show('OODLEX_FILEINFO_FLAGS.html')">OODLEX_FILEINFO_FLAGS</a>
{
&nbsp;&nbsp;&nbsp;&nbsp;OODLEX_FILEINFO_FLAG_DIR = (1&lt;&lt;0),
&nbsp;&nbsp;&nbsp;&nbsp;OODLEX_FILEINFO_FLAG_READONLY = (1&lt;&lt;1),
&nbsp;&nbsp;&nbsp;&nbsp;OODLEX_FILEINFO_FLAG_HIDDEN = (1&lt;&lt;2),
&nbsp;&nbsp;&nbsp;&nbsp;OODLEX_FILEINFO_FLAG_SYMLINK = (1&lt;&lt;3),
&nbsp;&nbsp;&nbsp;&nbsp;OODLEX_FILEINFO_FLAG_TEMPORARY = (1&lt;&lt;4),
&nbsp;&nbsp;&nbsp;&nbsp;OODLEX_FILEINFO_FLAG_OFFLINE = (1&lt;&lt;5),
&nbsp;&nbsp;&nbsp;&nbsp;OODLEX_FILEINFO_FLAG_Force32 = 0x40000000
};
</pre></div><div class=discussion_heading>Discussion</div> Flags for <a href="javascript:show('OodleXFileInfo.html','OodleXFileInfo.html_flags')" class="paragraph">OodleXFileInfo:flags</a>
<div class=discussion_heading>Enumerants</div> <table> <tr> <td style='vertical-align: top;' class=paramname><a id="OODLEX_FILEINFO_FLAGS.html_OODLEX_FILEINFO_FLAG_DIR" class=nohover>OODLEX_FILEINFO_FLAG_DIR</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> queried name is a directory</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OODLEX_FILEINFO_FLAGS.html_OODLEX_FILEINFO_FLAG_READONLY" class=nohover>OODLEX_FILEINFO_FLAG_READONLY</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> you do not have write permission for this file</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OODLEX_FILEINFO_FLAGS.html_OODLEX_FILEINFO_FLAG_HIDDEN" class=nohover>OODLEX_FILEINFO_FLAG_HIDDEN</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> file is marked hidden</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OODLEX_FILEINFO_FLAGS.html_OODLEX_FILEINFO_FLAG_SYMLINK" class=nohover>OODLEX_FILEINFO_FLAG_SYMLINK</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> file or dir is a symlink or reparse point</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OODLEX_FILEINFO_FLAGS.html_OODLEX_FILEINFO_FLAG_TEMPORARY" class=nohover>OODLEX_FILEINFO_FLAG_TEMPORARY</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> file is marked temporary</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OODLEX_FILEINFO_FLAGS.html_OODLEX_FILEINFO_FLAG_OFFLINE" class=nohover>OODLEX_FILEINFO_FLAG_OFFLINE</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc></td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OODLEX_FILEINFO_FLAGS.html_OODLEX_FILEINFO_FLAG_Force32" class=nohover>OODLEX_FILEINFO_FLAG_Force32</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc></td></tr></table><br>&nbsp;<br> <table class=bar> <tr>
<td width=33% align=left><span class='arrowleft'></span><a href="javascript:show('OodleFileNotFoundIsAnError.html')" class="paragraph">OodleFileNotFoundIsAnError</a></td><td width=33% align=center><span class='arrowup'></span><a href="javascript:show('OodleXAPI_IOQ.html')" class="paragraph">OodleX low level async io</a></td><td width=33% align=right><span class='arrowright'></span><a href="javascript:show('OodleXError.html')" class="paragraph">OodleXError</a></td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="OodleNetwork1TCP_Encode.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>OodleNetwork1TCP_Encode</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "OodleNetwork1TCP_Encode.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="OodleNetwork1TCP_Encode.html_backmenu">
<table class=dropmenu>
<tr><td><span class='arrowleft'></span>&nbsp;<a href="javascript:show('OodleNetwork1TCP_Train.html')" class="paragraph">OodleNetwork1TCP_Train</a></td></tr><tr><td><span class='arrowright'></span>&nbsp;<a href="javascript:show('OodleNetwork1TCP_Decode.html')" class="paragraph">OodleNetwork1TCP_Decode</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<div class=prototype><div class=prototype_header>// Function prototype:</div><pre>OO_SINTa <span class=prototype_type><a href="javascript:show('OodleNetwork1TCP_Encode.html')" class="blue">OodleNetwork1TCP_Encode</a></span>( <span class=prototype_type><a href="javascript:show('OodleNetwork1TCP_State.html')" class="blue">OodleNetwork1TCP_State</a></span> * state,
const <span class=prototype_type><a href="javascript:show('OodleNetwork1_Shared.html')" class="blue">OodleNetwork1_Shared</a></span> * shared,
const void * raw,
OO_SINTa rawLen,
void * comp );</pre></div><div class=discussion_heading>Discussion</div>Encode a packet<div class=discussion_heading>Parameters</div> <table> <tr> <td style='vertical-align: top;' class=paramname><a id="OodleNetwork1TCP_Encode.html_state" class=nohover>state</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> state of this compression channel; will be mutated
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleNetwork1TCP_Encode.html_shared" class=nohover>shared</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> const shared compression context
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleNetwork1TCP_Encode.html_raw" class=nohover>raw</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> packet bytes to compress
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleNetwork1TCP_Encode.html_rawLen" class=nohover>rawLen</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> size of the packet to compress ; can be >= 0
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleNetwork1TCP_Encode.html_comp" class=nohover>comp</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> output compressed bytes; must be allocated to at least <a href="javascript:show('OodleNetwork1_CompressedBufferSizeNeeded.html')" class="paragraph">OodleNetwork1_CompressedBufferSizeNeeded</a> bytes
</td></tr></table><div class=discussion_heading>Return Value</div> <table> <tr> <td style='vertical-align: top;' class=paramname><a id="OodleNetwork1TCP_Encode.html_return" class=nohover>return</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> length of output compressed data written to <i>comp</i> ; the returned compLen is strictly &lt;= rawLen
</td></tr></table><div class=discussion_heading>Discussion</div></p>
<p> Encodes one packet. <i>state</i> is mutated, learning from this packet for future packets.
</p>
<p> The returned compLen will never be greater than rawLen, because OodleNetwork1 won't send packets that expand under compression (it just sends them uncompressed) - however it may write further than that during the compression attempt. Do not use the returned compLen to check the size of the compressed buffer needed.
</p>
<p><br>&nbsp;<br> <table class=bar> <tr>
<td width=33% align=left><span class='arrowleft'></span><a href="javascript:show('OodleNetwork1TCP_Train.html')" class="paragraph">OodleNetwork1TCP_Train</a></td><td width=33% align=center><span class='arrowup'></span><a href="javascript:show('OodleAPI_OodleNetwork1.html')" class="paragraph">OodleAPI_OodleNetwork1</a></td><td width=33% align=right><span class='arrowright'></span><a href="javascript:show('OodleNetwork1TCP_Decode.html')" class="paragraph">OodleNetwork1TCP_Decode</a></td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="OodleXIOQ_ReserveFileSizeForWrite_Async.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>OodleXIOQ_ReserveFileSizeForWrite_Async</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "OodleXIOQ_ReserveFileSizeForWrite_Async.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="OodleXIOQ_ReserveFileSizeForWrite_Async.html_backmenu">
<table class=dropmenu>
<tr><td><span class='arrowleft'></span>&nbsp;<a href="javascript:show('OodleXIOQ_SetFileSize_Async.html')" class="paragraph">OodleXIOQ_SetFileSize_Async</a></td></tr><tr><td><span class='arrowright'></span>&nbsp;<a href="javascript:show('OodleXIOQ_ForceWriteable_Async.html')" class="paragraph">OodleXIOQ_ForceWriteable_Async</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<div class=prototype><div class=prototype_header>// Function prototype:</div><pre><span class=prototype_type><a href="javascript:show('OodleXHandle.html')" class="blue">OodleXHandle</a></span> <span class=prototype_type><a href="javascript:show('OodleXIOQ_ReserveFileSizeForWrite_Async.html')" class="blue">OodleXIOQ_ReserveFileSizeForWrite_Async</a></span>( <span class=prototype_type><a href="javascript:show('OodleXIOQFile.html')" class="blue">OodleXIOQFile</a></span> file,
OO_S64 size,
<span class=prototype_type><a href="javascript:show('OodleXHandleAutoDelete.html')" class="blue">OodleXHandleAutoDelete</a></span> autoDelete OODEFAULT( OodleXHandleAutoDelete_No ),
<span class=prototype_type><a href="javascript:show('OodleXPriority.html')" class="blue">OodleXPriority</a></span> priority OODEFAULT( OodleXPriority_Normal ),
const <span class=prototype_type><a href="javascript:show('OodleXHandle.html')" class="blue">OodleXHandle</a></span> * dependencies OODEFAULT( NULL ),
OO_S32 numDependencies OODEFAULT( 0 ) );</pre></div><div class=discussion_heading>Discussion</div>Start a set-file-size request, if it helps write speed.<div class=discussion_heading>Parameters</div> <table> <tr> <td style='vertical-align: top;' class=paramname><a id="OodleXIOQ_ReserveFileSizeForWrite_Async.html_file" class=nohover>file</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> the file to act on
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXIOQ_ReserveFileSizeForWrite_Async.html_size" class=nohover>size</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> the new file size
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXIOQ_ReserveFileSizeForWrite_Async.html_autoDelete" class=nohover>autoDelete</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> (optional) see <a href="javascript:show('OodleXHandleAutoDelete.html')" class="paragraph">OodleXHandleAutoDelete</a>
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXIOQ_ReserveFileSizeForWrite_Async.html_priority" class=nohover>priority</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> (optional) priority of the operation ; see <a href="javascript:show('OodleXPriority.html')" class="paragraph">OodleXPriority</a>
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXIOQ_ReserveFileSizeForWrite_Async.html_dependencies" class=nohover>dependencies</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> (optional) dependencies; the async op won't start until these are all complete; note : these are not freed, they must be autodelete or you must free them some other way.
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXIOQ_ReserveFileSizeForWrite_Async.html_numDependencies" class=nohover>numDependencies</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> (optional) number of handles in <i>deps</i> array
</td></tr></table><div class=discussion_heading>Return Value</div> <table> <tr> <td style='vertical-align: top;' class=paramname><a id="OodleXIOQ_ReserveFileSizeForWrite_Async.html_return" class=nohover>return</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> handle to the operation, or 0 if it could not be started (usually due to invalid args)
</td></tr></table><div class=discussion_heading>Discussion</div></p>
<p> If the purpose of calling SetFileSize is to pre-reserve space to make writes go faster, then use <a href="javascript:show('OodleXIOQ_ReserveFileSizeForWrite_Async.html')" class="paragraph">OodleXIOQ_ReserveFileSizeForWrite_Async</a> instead.
ReserveFileSizeForWrite is the same as SetFileSize, but it uses some information about the platform and the file to decide whether the reserve
will help or not. This function might do nothing if it thinks that the writes will be faster with no reservation.
</p>
<p> The contents of the file in the resized but unwritten area are undefined/garbage.
</p>
<p> See <a href="javascript:show('OodleXIOQ_SetFileSize_Async.html')" class="paragraph">OodleXIOQ_SetFileSize_Async</a> for more.
<br>&nbsp;<br> <table class=bar> <tr>
<td width=33% align=left><span class='arrowleft'></span><a href="javascript:show('OodleXIOQ_SetFileSize_Async.html')" class="paragraph">OodleXIOQ_SetFileSize_Async</a></td><td width=33% align=center><span class='arrowup'></span><a href="javascript:show('OodleXAPI_IOQ.html')" class="paragraph">OodleX low level async io</a></td><td width=33% align=right><span class='arrowright'></span><a href="javascript:show('OodleXIOQ_ForceWriteable_Async.html')" class="paragraph">OodleXIOQ_ForceWriteable_Async</a></td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="OODLENETWORK1_MAX_DICTIONARY_SIZE.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>OODLENETWORK1_MAX_DICTIONARY_SIZE</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "OODLENETWORK1_MAX_DICTIONARY_SIZE.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="OODLENETWORK1_MAX_DICTIONARY_SIZE.html_backmenu">
<table class=dropmenu>
<tr><td><span class='arrowright'></span>&nbsp;<a href="javascript:show('OODLENETWORK1_HASH_BITS_DEFAULT.html')" class="paragraph">OODLENETWORK1_HASH_BITS_DEFAULT</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<div class=prototype><div class=prototype_header>// Preprocessor definition:</div><pre><span class=prototype_type>#define</span> <a href="javascript:show('OODLENETWORK1_MAX_DICTIONARY_SIZE.html')">OODLENETWORK1_MAX_DICTIONARY_SIZE</a> (1&lt;&lt;24)</pre></div><div class=discussion_heading>Discussion</div> Maximum size of dictionary for OodleNetwork1<br>&nbsp;<br> <table class=bar> <tr>
<td width=33% align=left><span class='arrowleft'></span><a href="javascript:show('OodleNetwork1_About.html')" class="paragraph">About OodleNetwork1</a></td><td width=33% align=center><span class='arrowup'></span><a href="javascript:show('OodleAPI_OodleNetwork1.html')" class="paragraph">OodleAPI_OodleNetwork1</a></td><td width=33% align=right><span class='arrowright'></span><a href="javascript:show('OODLENETWORK1_HASH_BITS_DEFAULT.html')" class="paragraph">OODLENETWORK1_HASH_BITS_DEFAULT</a></td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="OodleXIOQ_OpenForRead_Async.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>OodleXIOQ_OpenForRead_Async</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "OodleXIOQ_OpenForRead_Async.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="OodleXIOQ_OpenForRead_Async.html_backmenu">
<table class=dropmenu>
<tr><td><span class='arrowleft'></span>&nbsp;<a href="javascript:show('OodleXIOQ_Fence_Async.html')" class="paragraph">OodleXIOQ_Fence_Async</a></td></tr><tr><td><span class='arrowright'></span>&nbsp;<a href="javascript:show('OodleXIOQ_OpenAndRead_Async.html')" class="paragraph">OodleXIOQ_OpenAndRead_Async</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<div class=prototype><div class=prototype_header>// Function prototype:</div><pre><span class=prototype_type><a href="javascript:show('OodleXHandle.html')" class="blue">OodleXHandle</a></span> <span class=prototype_type><a href="javascript:show('OodleXIOQ_OpenForRead_Async.html')" class="blue">OodleXIOQ_OpenForRead_Async</a></span>( <span class=prototype_type><a href="javascript:show('OodleXIOQFile.html')" class="blue">OodleXIOQFile</a></span> * pFile,
const char * name,
<span class=prototype_type><a href="javascript:show('OodleXFileOpenFlags.html')" class="blue">OodleXFileOpenFlags</a></span> fileOpenFlags OODEFAULT( OodleXFileOpenFlags_Default ),
const <span class=prototype_type><a href="javascript:show('OodleXFileOpsVTable.html')" class="blue">OodleXFileOpsVTable</a></span> * vtable OODEFAULT( NULL ),
<span class=prototype_type><a href="javascript:show('OodleXHandleAutoDelete.html')" class="blue">OodleXHandleAutoDelete</a></span> autoDelete OODEFAULT( OodleXHandleAutoDelete_No ),
<span class=prototype_type><a href="javascript:show('OodleXPriority.html')" class="blue">OodleXPriority</a></span> priority OODEFAULT( OodleXPriority_Normal ),
const <span class=prototype_type><a href="javascript:show('OodleXHandle.html')" class="blue">OodleXHandle</a></span> * dependencies OODEFAULT( NULL ),
OO_S32 numDependencies OODEFAULT( 0 ) );</pre></div><div class=discussion_heading>Discussion</div>Start opening a file for read<div class=discussion_heading>Parameters</div> <table> <tr> <td style='vertical-align: top;' class=paramname><a id="OodleXIOQ_OpenForRead_Async.html_pFile" class=nohover>pFile</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> filled with a handle to the file which will be opened
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXIOQ_OpenForRead_Async.html_name" class=nohover>name</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> name of the file to open (VFS, UTF-8)
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXIOQ_OpenForRead_Async.html_fileOpenFlags" class=nohover>fileOpenFlags</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> (optional) flags for the os file open (see <a href="javascript:show('OodleXFileOpenFlags.html')" class="paragraph">OodleXFileOpenFlags</a>)
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXIOQ_OpenForRead_Async.html_vtable" class=nohover>vtable</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> (optional) the <a href="javascript:show('OodleXFileOpsVTable.html')" class="paragraph">OodleXFileOpsVTable</a> to use for all ops on this file
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXIOQ_OpenForRead_Async.html_autoDelete" class=nohover>autoDelete</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> (optional) see <a href="javascript:show('OodleXHandleAutoDelete.html')" class="paragraph">OodleXHandleAutoDelete</a>
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXIOQ_OpenForRead_Async.html_priority" class=nohover>priority</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> (optional) priority of the operation ; see <a href="javascript:show('OodleXPriority.html')" class="paragraph">OodleXPriority</a>
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXIOQ_OpenForRead_Async.html_dependencies" class=nohover>dependencies</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> (optional) dependencies; the async op won't start until these are all complete; note : these are not freed, they must be autodelete or you must free them some other way.
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXIOQ_OpenForRead_Async.html_numDependencies" class=nohover>numDependencies</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> (optional) number of handles in <i>deps</i> array
</td></tr></table><div class=discussion_heading>Return Value</div> <table> <tr> <td style='vertical-align: top;' class=paramname><a id="OodleXIOQ_OpenForRead_Async.html_return" class=nohover>return</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> handle to the operation, or 0 if it could not be started (usually due to invalid args)
</td></tr></table><div class=discussion_heading>Discussion</div></p>
<p> If vtable is NULL, the vtable specified by the VFS mapping is used.
The file name provided is automatically run through VFS-to-OS name mapping, if applicable.
</p>
<p> Open returns a File ref right away for your convenience, but the file is not actually open for a little while.
You can however go ahead and queue more requests on the file reference before open is complete.
You cannot call things that require an open file, such as <a href="javascript:show('OodleXIOQ_GetInfo.html')" class="paragraph">OodleXIOQ_GetInfo</a>.
OpenForRead is always shared access.
</p>
<p> To also perform an initial read, use <a href="javascript:show('OodleXIOQ_OpenAndRead_Async.html')" class="paragraph">OodleXIOQ_OpenAndRead_Async</a>
</p>
<p><br>&nbsp;<br> <table class=bar> <tr>
<td width=33% align=left><span class='arrowleft'></span><a href="javascript:show('OodleXIOQ_Fence_Async.html')" class="paragraph">OodleXIOQ_Fence_Async</a></td><td width=33% align=center><span class='arrowup'></span><a href="javascript:show('OodleXAPI_IOQ.html')" class="paragraph">OodleX low level async io</a></td><td width=33% align=right><span class='arrowright'></span><a href="javascript:show('OodleXIOQ_OpenAndRead_Async.html')" class="paragraph">OodleXIOQ_OpenAndRead_Async</a></td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="OodleLZ_Compressor_UsesWholeBlockQuantum.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>OodleLZ_Compressor_UsesWholeBlockQuantum</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "OodleLZ_Compressor_UsesWholeBlockQuantum.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="OodleLZ_Compressor_UsesWholeBlockQuantum.html_backmenu">
<table class=dropmenu>
<tr><td><span class='arrowleft'></span>&nbsp;<a href="javascript:show('OodleLZ_CompressOptions_Validate.html')" class="paragraph">OodleLZ_CompressOptions_Validate</a></td></tr><tr><td><span class='arrowright'></span>&nbsp;<a href="javascript:show('OodleLZ_Compressor_UsesLargeWindow.html')" class="paragraph">OodleLZ_Compressor_UsesLargeWindow</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<div class=prototype><div class=prototype_header>// Function prototype:</div><pre>OO_BOOL <span class=prototype_type><a href="javascript:show('OodleLZ_Compressor_UsesWholeBlockQuantum.html')" class="blue">OodleLZ_Compressor_UsesWholeBlockQuantum</a></span>( <span class=prototype_type><a href="javascript:show('OodleLZ_Compressor.html')" class="blue">OodleLZ_Compressor</a></span> compressor );</pre></div><div class=discussion_heading>Discussion</div>OodleLZ_Compressor properties helper.<div class=discussion_heading>Discussion</div>Tells you if this compressor is "whole block quantum" ; must decode in steps of
<a href="javascript:show('OODLELZ_BLOCK_LEN.html')" class="paragraph">OODLELZ_BLOCK_LEN</a> , not <a href="javascript:show('OODLELZ_QUANTUM_LEN.html')" class="paragraph">OODLELZ_QUANTUM_LEN</a> like others.
<br>&nbsp;<br> <table class=bar> <tr>
<td width=33% align=left><span class='arrowleft'></span><a href="javascript:show('OodleLZ_CompressOptions_Validate.html')" class="paragraph">OodleLZ_CompressOptions_Validate</a></td><td width=33% align=center><span class='arrowup'></span><a href="javascript:show('OodleAPI_LZ_Compressors.html')" class="paragraph">OodleAPI_LZ_Compressors</a></td><td width=33% align=right><span class='arrowright'></span><a href="javascript:show('OodleLZ_Compressor_UsesLargeWindow.html')" class="paragraph">OodleLZ_Compressor_UsesLargeWindow</a></td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="OodleXAPI_Util.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>OodleX Utils</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "OodleXAPI_Util.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="OodleXAPI_Util.html_backmenu">
<table class=dropmenu>
<tr><td><span class='arrowleft'></span>&nbsp;<a href="javascript:show('OodleXAPI_Debug.html')" class="paragraph">OodleX Debug aids</a></td></tr><tr><td><span class='arrowup'></span>&nbsp;<a href="javascript:show('OodleExtAPI.html')" class="paragraph">Oodle2 Ext API Documentation</a></td></tr><tr><td><span class='arrowright'></span>&nbsp;<a href="javascript:show('Oodle_AboutExt.html')" class="paragraph">About Oodle Ext</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<ul class='TOCItem'>
<li><span onClick="HandleClick(event, null); return false" class='TOCGroup closedbook_icon'></span>&nbsp;Defines</li>
<ul style="display:none" class='TOCItem'>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OODLEX_PATH_DELIM.html')">OODLEX_PATH_DELIM</a></li>
</ul>
<li><span onClick="HandleClick(event, null); return false" class='TOCGroup closedbook_icon'></span>&nbsp;Functions</li>
<ul style="display:none" class='TOCItem'>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleX_GetExtensionKey.html')">OodleX_GetExtensionKey</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleX_MakeExtensionKey.html')">OodleX_MakeExtensionKey</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleX_IOAlignUpS32.html')">OodleX_IOAlignUpS32</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleX_IOAlignUpS64.html')">OodleX_IOAlignUpS64</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleX_IOAlignUpSINTa.html')">OodleX_IOAlignUpSINTa</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleX_IOAlignDownS32.html')">OodleX_IOAlignDownS32</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleX_IOAlignDownS64.html')">OodleX_IOAlignDownS64</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleX_IOAlignDownSINTa.html')">OodleX_IOAlignDownSINTa</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleX_S64_to_SINTa_check.html')">OodleX_S64_to_SINTa_check</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleX_GetSeconds.html')">OodleX_GetSeconds</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleXUtil_ConvertUTF8ToUTF16.html')">OodleXUtil_ConvertUTF8ToUTF16</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleXUtil_ConvertUTF16ToUTF8.html')">OodleXUtil_ConvertUTF16ToUTF8</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleX_CombinePaths.html')">OodleX_CombinePaths</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleX_GetOSCwd.html')">OodleX_GetOSCwd</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleX_PrefixOSCwd.html')">OodleX_PrefixOSCwd</a></li>
</ul>
</ul>
<br>&nbsp;<br> <table class=bar> <tr>
<td width=33% align=left><span class='arrowleft'></span><a href="javascript:show('OodleXLog_PrintfError.html')" class="paragraph">OodleXLog_PrintfError</a></td><td width=33% align=center><span class='arrowup'></span><a href="javascript:show('OodleExtAPI.html')" class="paragraph">Oodle2 Ext API Documentation</a></td><td width=33% align=right><span class='arrowright'></span><a href="javascript:show('OODLEX_PATH_DELIM.html')" class="paragraph">OODLEX_PATH_DELIM</a></td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="OodleX_CorePlugin_WaitJob.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>OodleX_CorePlugin_WaitJob</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "OodleX_CorePlugin_WaitJob.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="OodleX_CorePlugin_WaitJob.html_backmenu">
<table class=dropmenu>
<tr><td><span class='arrowleft'></span>&nbsp;<a href="javascript:show('OodleX_CorePlugin_RunJob.html')" class="paragraph">OodleX_CorePlugin_RunJob</a></td></tr><tr><td><span class='arrowright'></span>&nbsp;<a href="javascript:show('OodleX_GetNumWorkerThreads.html')" class="paragraph">OodleX_GetNumWorkerThreads</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<div class=prototype><div class=prototype_header>// Function prototype:</div><pre>void <span class=prototype_type><a href="javascript:show('OodleX_CorePlugin_WaitJob.html')" class="blue">OodleX_CorePlugin_WaitJob</a></span>( OO_U64 job_handle,
void * user_ptr );</pre></div><div class=discussion_heading>Discussion</div>Function to plug in the OodleX Worker system to <a href="javascript:show('OodleCore_Plugins_SetJobSystem.html')" class="paragraph">OodleCore_Plugins_SetJobSystem</a><div class=discussion_heading>Discussion</div>NOTE : OodleX_Init does <a href="javascript:show('OodleCore_Plugins_SetJobSystem.html')" class="paragraph">OodleCore_Plugins_SetJobSystem</a> automatically.
</p>
<p><br>&nbsp;<br> <table class=bar> <tr>
<td width=33% align=left><span class='arrowleft'></span><a href="javascript:show('OodleX_CorePlugin_RunJob.html')" class="paragraph">OodleX_CorePlugin_RunJob</a></td><td width=33% align=center><span class='arrowup'></span><a href="javascript:show('OodleXAPI_Threading.html')" class="paragraph">OodleX threading util</a></td><td width=33% align=right><span class='arrowright'></span><a href="javascript:show('OodleX_GetNumWorkerThreads.html')" class="paragraph">OodleX_GetNumWorkerThreads</a></td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="OodleXMallocAligned.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>OodleXMallocAligned</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "OodleXMallocAligned.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="OodleXMallocAligned.html_backmenu">
<table class=dropmenu>
<tr><td><span class='arrowleft'></span>&nbsp;<a href="javascript:show('OodleXMalloc.html')" class="paragraph">OodleXMalloc</a></td></tr><tr><td><span class='arrowright'></span>&nbsp;<a href="javascript:show('OodleXFree.html')" class="paragraph">OodleXFree</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<div class=prototype><div class=prototype_header>// Function prototype:</div><pre>void * <span class=prototype_type><a href="javascript:show('OodleXMallocAligned.html')" class="blue">OodleXMallocAligned</a></span>( OO_SINTa bytes,
OO_S32 alignment );</pre></div><div class=discussion_heading>Discussion</div>Allocate some memory with specified alignment<div class=discussion_heading>Parameters</div> <table> <tr> <td style='vertical-align: top;' class=paramname><a id="OodleXMallocAligned.html_bytes" class=nohover>bytes</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> the amount to allocate (must be > 0)
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXMallocAligned.html_alignment" class=nohover>alignment</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> the desired alignment
</td></tr></table><div class=discussion_heading>Return Value</div> <table> <tr> <td style='vertical-align: top;' class=paramname><a id="OodleXMallocAligned.html_return" class=nohover>return</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> pointer to allocated memory
</td></tr></table><div class=discussion_heading>Discussion</div></p>
<p> alignment must be &lt;= bytes.
alignment must be power of 2.
OodleXMalloc uses the installed <a href="javascript:show('OodleXMallocVTable.html')" class="paragraph">OodleXMallocVTable</a>.
Pointer will be aligned to at least <a href="javascript:show('OODLE_MALLOC_MINIMUM_ALIGNMENT.html')" class="paragraph">OODLE_MALLOC_MINIMUM_ALIGNMENT</a>.
If a malloc fails, any installed <a href="javascript:show('OodleXMallocFailedHandler.html')" class="paragraph">OodleXMallocFailedHandler</a> will be called.
<br>&nbsp;<br> <table class=bar> <tr>
<td width=33% align=left><span class='arrowleft'></span><a href="javascript:show('OodleXMalloc.html')" class="paragraph">OodleXMalloc</a></td><td width=33% align=center><span class='arrowup'></span><a href="javascript:show('OodleXAPI_Malloc.html')" class="paragraph">OodleX Memory Allocators</a></td><td width=33% align=right><span class='arrowright'></span><a href="javascript:show('OodleXFree.html')" class="paragraph">OodleXFree</a></td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="OodleLZ_SeekTable.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>OodleLZ_SeekTable</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "OodleLZ_SeekTable.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="OodleLZ_SeekTable.html_backmenu">
<table class=dropmenu>
<tr><td><span class='arrowleft'></span>&nbsp;<a href="javascript:show('OodleLZDecoder.html')" class="paragraph">OodleLZDecoder</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<div class=prototype><div class=prototype_header>// Structure definition:</div><pre><span class=prototype_type>struct</span> <a href="javascript:show('OodleLZ_SeekTable.html')">OodleLZ_SeekTable</a>
{
&nbsp;&nbsp;&nbsp;&nbsp;<span class=prototype_type><a href="javascript:show('OodleLZ_Compressor.html')" class="blue">OodleLZ_Compressor</a></span> compressor;
&nbsp;&nbsp;&nbsp;&nbsp;OO_BOOL seekChunksIndependent;
&nbsp;&nbsp;&nbsp;&nbsp;OO_S64 totalRawLen;
&nbsp;&nbsp;&nbsp;&nbsp;OO_S64 totalCompLen;
&nbsp;&nbsp;&nbsp;&nbsp;OO_S32 numSeekChunks;
&nbsp;&nbsp;&nbsp;&nbsp;OO_S32 seekChunkLen;
&nbsp;&nbsp;&nbsp;&nbsp;OO_U32 * seekChunkCompLens;
&nbsp;&nbsp;&nbsp;&nbsp;OO_U32 * rawCRCs;
};
</pre></div><div class=discussion_heading>Discussion</div> A seek table, as created by <a href="javascript:show('OodleLZ_CreateSeekTable.html')" class="paragraph">OodleLZ_CreateSeekTable</a><div class=discussion_heading>Members</div> <table> <tr> <td style='vertical-align: top;' class=paramname><a id="OodleLZ_SeekTable.html_compressor" class=nohover>compressor</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> which compressor was used</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleLZ_SeekTable.html_seekChunksIndependent" class=nohover>seekChunksIndependent</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> are the seek chunks independent, or must they be decompressed in sequence</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleLZ_SeekTable.html_totalRawLen" class=nohover>totalRawLen</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> total uncompressed data lenth</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleLZ_SeekTable.html_totalCompLen" class=nohover>totalCompLen</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> sum of seekChunkCompLens</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleLZ_SeekTable.html_numSeekChunks" class=nohover>numSeekChunks</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> derived from rawLen &amp; seekChunkLen</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleLZ_SeekTable.html_seekChunkLen" class=nohover>seekChunkLen</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> multiple of OODLELZ_BLOCK_LEN</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleLZ_SeekTable.html_seekChunkCompLens" class=nohover>seekChunkCompLens</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> array of compressed lengths of seek chunks</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleLZ_SeekTable.html_rawCRCs" class=nohover>rawCRCs</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> crc of the raw bytes of the chunk (optional; NULL unless <a href="javascript:show('OodleLZSeekTable_Flags.html','OodleLZSeekTable_Flags.html_OodleLZSeekTable_Flags_MakeRawCRCs')" class="paragraph">OodleLZSeekTable_Flags_MakeRawCRCs</a> was specified)</td></tr></table><div class=discussion_heading>Discussion</div> An <a href="javascript:show('OodleLZ_SeekTable.html')" class="paragraph">OodleLZ_SeekTable</a> can be created from any OodleLZ compressed data.
It should be transmitted if you wish to do random-access or parallel decompression.
One way to transmit it is to use an "OOZ" file which stores the <a href="javascript:show('OodleLZ_SeekTable.html')" class="paragraph">OodleLZ_SeekTable</a> in its header.
<br>&nbsp;<br> <table class=bar> <tr>
<td width=33% align=left><span class='arrowleft'></span><a href="javascript:show('OodleLZDecoder.html')" class="paragraph">OodleLZDecoder</a></td><td width=33% align=center><span class='arrowup'></span><a href="javascript:show('OodleAPI_LZ_Compressors.html')" class="paragraph">OodleAPI_LZ_Compressors</a></td><td width=33% align=right><span class='arrowright'></span><a href="javascript:show('OodleLZ_Compress.html')" class="paragraph">OodleLZ_Compress</a></td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="OodleXMalloc.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>OodleXMalloc</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "OodleXMalloc.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="OodleXMalloc.html_backmenu">
<table class=dropmenu>
<tr><td><span class='arrowleft'></span>&nbsp;<a href="javascript:show('OodleXMalloc_SetFailedHandler.html')" class="paragraph">OodleXMalloc_SetFailedHandler</a></td></tr><tr><td><span class='arrowright'></span>&nbsp;<a href="javascript:show('OodleXMallocAligned.html')" class="paragraph">OodleXMallocAligned</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<div class=prototype><div class=prototype_header>// Function prototype:</div><pre>void * <span class=prototype_type><a href="javascript:show('OodleXMalloc.html')" class="blue">OodleXMalloc</a></span>( OO_SINTa bytes );</pre></div><div class=discussion_heading>Discussion</div>Allocate some memory<div class=discussion_heading>Parameters</div> <table> <tr> <td style='vertical-align: top;' class=paramname><a id="OodleXMalloc.html_bytes" class=nohover>bytes</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> the amount to allocate (must be > 0)
</td></tr></table><div class=discussion_heading>Return Value</div> <table> <tr> <td style='vertical-align: top;' class=paramname><a id="OodleXMalloc.html_return" class=nohover>return</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> pointer to allocated memory
</td></tr></table><div class=discussion_heading>Discussion</div></p>
<p> OodleXMalloc uses the installed <a href="javascript:show('OodleXMallocVTable.html')" class="paragraph">OodleXMallocVTable</a>.
Pointer will be aligned to at least <a href="javascript:show('OODLE_MALLOC_MINIMUM_ALIGNMENT.html')" class="paragraph">OODLE_MALLOC_MINIMUM_ALIGNMENT</a>.
If a malloc fails, any installed <a href="javascript:show('OodleXMallocFailedHandler.html')" class="paragraph">OodleXMallocFailedHandler</a> will be called.
<br>&nbsp;<br> <table class=bar> <tr>
<td width=33% align=left><span class='arrowleft'></span><a href="javascript:show('OodleXMalloc_SetFailedHandler.html')" class="paragraph">OodleXMalloc_SetFailedHandler</a></td><td width=33% align=center><span class='arrowup'></span><a href="javascript:show('OodleXAPI_Malloc.html')" class="paragraph">OodleX Memory Allocators</a></td><td width=33% align=right><span class='arrowright'></span><a href="javascript:show('OodleXMallocAligned.html')" class="paragraph">OodleXMallocAligned</a></td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="OodleX_CorePlugin_RunJob.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>OodleX_CorePlugin_RunJob</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "OodleX_CorePlugin_RunJob.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="OodleX_CorePlugin_RunJob.html_backmenu">
<table class=dropmenu>
<tr><td><span class='arrowleft'></span>&nbsp;<a href="javascript:show('OodleX_ReleaseThreadTLS.html')" class="paragraph">OodleX_ReleaseThreadTLS</a></td></tr><tr><td><span class='arrowright'></span>&nbsp;<a href="javascript:show('OodleX_CorePlugin_WaitJob.html')" class="paragraph">OodleX_CorePlugin_WaitJob</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<div class=prototype><div class=prototype_header>// Function prototype:</div><pre>OO_U64 <span class=prototype_type><a href="javascript:show('OodleX_CorePlugin_RunJob.html')" class="blue">OodleX_CorePlugin_RunJob</a></span>( <span class=prototype_type><a href="javascript:show('t_fp_Oodle_Job.html')" class="blue">t_fp_Oodle_Job</a></span> * fp_job,
void * job_data,
OO_U64 * dependencies,
int num_dependencies,
void * user_ptr );</pre></div><div class=discussion_heading>Discussion</div>Function to plug in the OodleX Worker system to <a href="javascript:show('OodleCore_Plugins_SetJobSystem.html')" class="paragraph">OodleCore_Plugins_SetJobSystem</a><div class=discussion_heading>Discussion</div>NOTE : OodleX_Init does <a href="javascript:show('OodleCore_Plugins_SetJobSystem.html')" class="paragraph">OodleCore_Plugins_SetJobSystem</a> automatically.
</p>
<p><br>&nbsp;<br> <table class=bar> <tr>
<td width=33% align=left><span class='arrowleft'></span><a href="javascript:show('OodleX_ReleaseThreadTLS.html')" class="paragraph">OodleX_ReleaseThreadTLS</a></td><td width=33% align=center><span class='arrowup'></span><a href="javascript:show('OodleXAPI_Threading.html')" class="paragraph">OodleX threading util</a></td><td width=33% align=right><span class='arrowright'></span><a href="javascript:show('OodleX_CorePlugin_WaitJob.html')" class="paragraph">OodleX_CorePlugin_WaitJob</a></td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="OodleX_SetConfigValues.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>OodleX_SetConfigValues</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "OodleX_SetConfigValues.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="OodleX_SetConfigValues.html_backmenu">
<table class=dropmenu>
<tr><td><span class='arrowleft'></span>&nbsp;<a href="javascript:show('OodleX_GetConfigValues.html')" class="paragraph">OodleX_GetConfigValues</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<div class=prototype><div class=prototype_header>// Function prototype:</div><pre>void <span class=prototype_type><a href="javascript:show('OodleX_SetConfigValues.html')" class="blue">OodleX_SetConfigValues</a></span>( const <span class=prototype_type><a href="javascript:show('OodleXConfigValues.html')" class="blue">OodleXConfigValues</a></span> * ptr );</pre></div><div class=discussion_heading>Discussion</div>Set <a href="javascript:show('OodleXConfigValues.html')" class="paragraph">OodleXConfigValues</a><div class=discussion_heading>Parameters</div> <table> <tr> <td style='vertical-align: top;' class=paramname><a id="OodleX_SetConfigValues.html_ptr" class=nohover>ptr</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> your desired OodleXConfigValues
</td></tr></table><div class=discussion_heading>Discussion</div></p>
<p> Sets the global <a href="javascript:show('OodleXConfigValues.html')" class="paragraph">OodleXConfigValues</a> from your struct.
</p>
<p> You should call <a href="javascript:show('OodleX_GetConfigValues.html')" class="paragraph">OodleX_GetConfigValues</a> to fill the struct, then change the values you
want to change, then call <a href="javascript:show('OodleX_SetConfigValues.html')" class="paragraph">OodleX_SetConfigValues</a>.
</p>
<p> This should generally be done before doing anything with Oodle (eg. even before OodleX_Init).
Changing OodleXConfigValues after Oodle has started has undefined effects.
<br>&nbsp;<br> <table class=bar> <tr>
<td width=33% align=left><span class='arrowleft'></span><a href="javascript:show('OodleX_GetConfigValues.html')" class="paragraph">OodleX_GetConfigValues</a></td><td width=33% align=center><span class='arrowup'></span><a href="javascript:show('OodleXAPI_Init.html')" class="paragraph">OodleX Startup and Shutdown</a></td><td width=33% align=right><span class='arrowright'></span><a href="javascript:show('OodleXAPI_Malloc.html')" class="paragraph">OodleX Memory Allocators</a></td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="OodleXIOQ_ForceWriteable_Async.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>OodleXIOQ_ForceWriteable_Async</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "OodleXIOQ_ForceWriteable_Async.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="OodleXIOQ_ForceWriteable_Async.html_backmenu">
<table class=dropmenu>
<tr><td><span class='arrowleft'></span>&nbsp;<a href="javascript:show('OodleXIOQ_ReserveFileSizeForWrite_Async.html')" class="paragraph">OodleXIOQ_ReserveFileSizeForWrite_Async</a></td></tr><tr><td><span class='arrowright'></span>&nbsp;<a href="javascript:show('OodleXIOQ_Delete_Async.html')" class="paragraph">OodleXIOQ_Delete_Async</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<div class=prototype><div class=prototype_header>// Function prototype:</div><pre><span class=prototype_type><a href="javascript:show('OodleXHandle.html')" class="blue">OodleXHandle</a></span> <span class=prototype_type><a href="javascript:show('OodleXIOQ_ForceWriteable_Async.html')" class="blue">OodleXIOQ_ForceWriteable_Async</a></span>( const char * name,
<span class=prototype_type><a href="javascript:show('OodleXHandleAutoDelete.html')" class="blue">OodleXHandleAutoDelete</a></span> autoDelete OODEFAULT( OodleXHandleAutoDelete_No ),
<span class=prototype_type><a href="javascript:show('OodleXPriority.html')" class="blue">OodleXPriority</a></span> priority OODEFAULT( OodleXPriority_Normal ),
const <span class=prototype_type><a href="javascript:show('OodleXHandle.html')" class="blue">OodleXHandle</a></span> * dependencies OODEFAULT( NULL ),
OO_S32 numDependencies OODEFAULT( 0 ) );</pre></div><div class=discussion_heading>Discussion</div>Start a force-writeable file request.<div class=discussion_heading>Parameters</div> <table> <tr> <td style='vertical-align: top;' class=paramname><a id="OodleXIOQ_ForceWriteable_Async.html_name" class=nohover>name</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> the file to make writeable (VFS, UTF-8)
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXIOQ_ForceWriteable_Async.html_autoDelete" class=nohover>autoDelete</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> (optional) see <a href="javascript:show('OodleXHandleAutoDelete.html')" class="paragraph">OodleXHandleAutoDelete</a>
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXIOQ_ForceWriteable_Async.html_priority" class=nohover>priority</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> (optional) priority of the operation ; see <a href="javascript:show('OodleXPriority.html')" class="paragraph">OodleXPriority</a>
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXIOQ_ForceWriteable_Async.html_dependencies" class=nohover>dependencies</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> (optional) dependencies; the async op won't start until these are all complete; note : these are not freed, they must be autodelete or you must free them some other way.
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXIOQ_ForceWriteable_Async.html_numDependencies" class=nohover>numDependencies</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> (optional) number of handles in <i>deps</i> array
</td></tr></table><div class=discussion_heading>Return Value</div> <table> <tr> <td style='vertical-align: top;' class=paramname><a id="OodleXIOQ_ForceWriteable_Async.html_return" class=nohover>return</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> handle to the operation, or 0 if it could not be started (usually due to invalid args)
</td></tr></table><div class=discussion_heading>Discussion</div></p>
<p> Asynchronously make a file writeable/deletable. Useful if the file might have read-only or other-user permissions
and you want to modifity anyway.
</p>
<p> A common use is to enqueue a OodleXIOQ_ForceWriteable_Async right before a DeleteFile or RenameFile.
<br>&nbsp;<br> <table class=bar> <tr>
<td width=33% align=left><span class='arrowleft'></span><a href="javascript:show('OodleXIOQ_ReserveFileSizeForWrite_Async.html')" class="paragraph">OodleXIOQ_ReserveFileSizeForWrite_Async</a></td><td width=33% align=center><span class='arrowup'></span><a href="javascript:show('OodleXAPI_IOQ.html')" class="paragraph">OodleX low level async io</a></td><td width=33% align=right><span class='arrowright'></span><a href="javascript:show('OodleXIOQ_Delete_Async.html')" class="paragraph">OodleXIOQ_Delete_Async</a></td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="OodleXLog_GetVerboseLevel.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>OodleXLog_GetVerboseLevel</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "OodleXLog_GetVerboseLevel.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="OodleXLog_GetVerboseLevel.html_backmenu">
<table class=dropmenu>
<tr><td><span class='arrowleft'></span>&nbsp;<a href="javascript:show('OodleXLog_GetCallback.html')" class="paragraph">OodleXLog_GetCallback</a></td></tr><tr><td><span class='arrowright'></span>&nbsp;<a href="javascript:show('OodleXLog_SetVerboseLevel.html')" class="paragraph">OodleXLog_SetVerboseLevel</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<div class=prototype><div class=prototype_header>// Function prototype:</div><pre>int <span class=prototype_type><a href="javascript:show('OodleXLog_GetVerboseLevel.html')" class="blue">OodleXLog_GetVerboseLevel</a></span>( );</pre></div><div class=discussion_heading>Discussion</div>Get the global verbose level<div class=discussion_heading>Return Value</div> <table> <tr> <td style='vertical-align: top;' class=paramname><a id="OodleXLog_GetVerboseLevel.html_return" class=nohover>return</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> the value
</td></tr></table><div class=discussion_heading>Discussion</div></p>
<p> See <a href="javascript:show('OodleXLog_SetVerboseLevel.html')" class="paragraph">OodleXLog_SetVerboseLevel</a>
</p>
<p><br>&nbsp;<br> <table class=bar> <tr>
<td width=33% align=left><span class='arrowleft'></span><a href="javascript:show('OodleXLog_GetCallback.html')" class="paragraph">OodleXLog_GetCallback</a></td><td width=33% align=center><span class='arrowup'></span><a href="javascript:show('OodleXAPI_Debug.html')" class="paragraph">OodleX Debug aids</a></td><td width=33% align=right><span class='arrowright'></span><a href="javascript:show('OodleXLog_SetVerboseLevel.html')" class="paragraph">OodleXLog_SetVerboseLevel</a></td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="OodleXIOQ_GetInfoByName_Async.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>OodleXIOQ_GetInfoByName_Async</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "OodleXIOQ_GetInfoByName_Async.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="OodleXIOQ_GetInfoByName_Async.html_backmenu">
<table class=dropmenu>
<tr><td><span class='arrowleft'></span>&nbsp;<a href="javascript:show('OodleXIOQ_FreeBufferIOAligned_Async.html')" class="paragraph">OodleXIOQ_FreeBufferIOAligned_Async</a></td></tr><tr><td><span class='arrowright'></span>&nbsp;<a href="javascript:show('OodleXIOQ_GetInfoByName_GetResult.html')" class="paragraph">OodleXIOQ_GetInfoByName_GetResult</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<div class=prototype><div class=prototype_header>// Function prototype:</div><pre><span class=prototype_type><a href="javascript:show('OodleXHandle.html')" class="blue">OodleXHandle</a></span> <span class=prototype_type><a href="javascript:show('OodleXIOQ_GetInfoByName_Async.html')" class="blue">OodleXIOQ_GetInfoByName_Async</a></span>( const char * name,
<span class=prototype_type><a href="javascript:show('OodleFileNotFoundIsAnError.html')" class="blue">OodleFileNotFoundIsAnError</a></span> errorIfNotFound,
<span class=prototype_type><a href="javascript:show('OodleXHandleAutoDelete.html')" class="blue">OodleXHandleAutoDelete</a></span> autoDelete OODEFAULT( OodleXHandleAutoDelete_No ),
<span class=prototype_type><a href="javascript:show('OodleXPriority.html')" class="blue">OodleXPriority</a></span> priority OODEFAULT( OodleXPriority_Normal ),
const <span class=prototype_type><a href="javascript:show('OodleXHandle.html')" class="blue">OodleXHandle</a></span> * dependencies OODEFAULT( NULL ),
OO_S32 numDependencies OODEFAULT( 0 ) );</pre></div><div class=discussion_heading>Discussion</div>Start an asynchronous GetInfo request<div class=discussion_heading>Parameters</div> <table> <tr> <td style='vertical-align: top;' class=paramname><a id="OodleXIOQ_GetInfoByName_Async.html_name" class=nohover>name</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> the file name to query (VFS,UTF-8)
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXIOQ_GetInfoByName_Async.html_errorIfNotFound" class=nohover>errorIfNotFound</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> (optional) should file-not-found be an error status or not? (see <a href="javascript:show('OodleFileNotFoundIsAnError.html')" class="paragraph">OodleFileNotFoundIsAnError</a>)
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXIOQ_GetInfoByName_Async.html_autoDelete" class=nohover>autoDelete</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> (optional) see <a href="javascript:show('OodleXHandleAutoDelete.html')" class="paragraph">OodleXHandleAutoDelete</a>
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXIOQ_GetInfoByName_Async.html_priority" class=nohover>priority</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> (optional) priority of the operation ; see <a href="javascript:show('OodleXPriority.html')" class="paragraph">OodleXPriority</a>
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXIOQ_GetInfoByName_Async.html_dependencies" class=nohover>dependencies</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> (optional) dependencies; the async op won't start until these are all complete; note : these are not freed, they must be autodelete or you must free them some other way.
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXIOQ_GetInfoByName_Async.html_numDependencies" class=nohover>numDependencies</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> (optional) number of handles in <i>deps</i> array
</td></tr></table><div class=discussion_heading>Return Value</div> <table> <tr> <td style='vertical-align: top;' class=paramname><a id="OodleXIOQ_GetInfoByName_Async.html_return" class=nohover>return</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> handle to the operation, or 0 if it could not be started (usually due to invalid args)
</td></tr></table><div class=discussion_heading>Discussion</div></p>
<p> Used to get an <a href="javascript:show('OodleXFileInfo.html')" class="paragraph">OodleXFileInfo</a> without blocking the calling thread. Use <a href="javascript:show('OodleXIOQ_GetInfoByName_GetResult.html')" class="paragraph">OodleXIOQ_GetInfoByName_GetResult</a> to
get the result.
<br>&nbsp;<br> <table class=bar> <tr>
<td width=33% align=left><span class='arrowleft'></span><a href="javascript:show('OodleXIOQ_FreeBufferIOAligned_Async.html')" class="paragraph">OodleXIOQ_FreeBufferIOAligned_Async</a></td><td width=33% align=center><span class='arrowup'></span><a href="javascript:show('OodleXAPI_IOQ.html')" class="paragraph">OodleX low level async io</a></td><td width=33% align=right><span class='arrowright'></span><a href="javascript:show('OodleXIOQ_GetInfoByName_GetResult.html')" class="paragraph">OodleXIOQ_GetInfoByName_GetResult</a></td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="t_fp_OodleCore_Plugin_Free.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>t_fp_OodleCore_Plugin_Free</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "t_fp_OodleCore_Plugin_Free.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="t_fp_OodleCore_Plugin_Free.html_backmenu">
<table class=dropmenu>
<tr><td><span class='arrowleft'></span>&nbsp;<a href="javascript:show('t_fp_OodleCore_Plugin_MallocAligned.html')" class="paragraph">t_fp_OodleCore_Plugin_MallocAligned</a></td></tr><tr><td><span class='arrowright'></span>&nbsp;<a href="javascript:show('t_fp_OodleCore_Plugin_RunJob.html')" class="paragraph">t_fp_OodleCore_Plugin_RunJob</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<div class=prototype><div class=prototype_header>// Function typedef:</div><pre>OODEFFUNC void( OODLE_CALLBACK <span class=prototype_type><a href="javascript:show('t_fp_OodleCore_Plugin_Free.html')" class="blue">t_fp_OodleCore_Plugin_Free</a></span> )( void * ptr );</pre></div><div class=discussion_heading>Discussion</div>Function pointer type for OodleFree<div class=discussion_heading>Parameters</div> <table> <tr> <td style='vertical-align: top;' class=paramname><a id="t_fp_OodleCore_Plugin_Free.html_ptr" class=nohover>ptr</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> pointer to memory to free
</td></tr></table><div class=discussion_heading>Discussion</div></p>
<p><br>&nbsp;<br> <table class=bar> <tr>
<td width=33% align=left><span class='arrowleft'></span><a href="javascript:show('t_fp_OodleCore_Plugin_MallocAligned.html')" class="paragraph">t_fp_OodleCore_Plugin_MallocAligned</a></td><td width=33% align=center><span class='arrowup'></span><a href="javascript:show('OodleAPI_OodleCore_Plugins.html')" class="paragraph">Core plugins</a></td><td width=33% align=right><span class='arrowright'></span><a href="javascript:show('t_fp_OodleCore_Plugin_RunJob.html')" class="paragraph">t_fp_OodleCore_Plugin_RunJob</a></td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="OodleXUtil_ConvertUTF8ToUTF16.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>OodleXUtil_ConvertUTF8ToUTF16</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "OodleXUtil_ConvertUTF8ToUTF16.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="OodleXUtil_ConvertUTF8ToUTF16.html_backmenu">
<table class=dropmenu>
<tr><td><span class='arrowleft'></span>&nbsp;<a href="javascript:show('OodleX_GetSeconds.html')" class="paragraph">OodleX_GetSeconds</a></td></tr><tr><td><span class='arrowright'></span>&nbsp;<a href="javascript:show('OodleXUtil_ConvertUTF16ToUTF8.html')" class="paragraph">OodleXUtil_ConvertUTF16ToUTF8</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<div class=prototype><div class=prototype_header>// Function prototype:</div><pre>OO_BOOL <span class=prototype_type><a href="javascript:show('OodleXUtil_ConvertUTF8ToUTF16.html')" class="blue">OodleXUtil_ConvertUTF8ToUTF16</a></span>( const char * from,
OO_U16 * to,
int toSize );</pre></div><div class=discussion_heading>Discussion</div>Convert a UTF8 string to UTF16<div class=discussion_heading>Parameters</div> <table> <tr> <td style='vertical-align: top;' class=paramname><a id="OodleXUtil_ConvertUTF8ToUTF16.html_from" class=nohover>from</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> string to convert
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXUtil_ConvertUTF8ToUTF16.html_to" class=nohover>to</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> filled with the result
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXUtil_ConvertUTF8ToUTF16.html_toSize" class=nohover>toSize</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> number of characters availabe in <i>to (not bytes!)
</i></td></tr></table><div class=discussion_heading>Discussion</div></p>
<p> Fill [ <i>to</i> , <i>to</i> + <i>toSize</i> ] with the UTF16 conversion of <i>from</i> (UTF8).
</p>
<p> Oodle strings are all UTF8. This can be used to convert a string to UTF16 , for example
for use with the Windows wchar routines.
</p>
<p> Note that <a href="javascript:show('OodleXUtil_ConvertUTF8ToUTF16.html')" class="paragraph">OodleXUtil_ConvertUTF8ToUTF16</a> + <a href="javascript:show('OodleXUtil_ConvertUTF16ToUTF8.html')" class="paragraph">OodleXUtil_ConvertUTF16ToUTF8</a> may not produce
the same output, because UTF encodings are not unique. Also note that Windows 8-bit names
(from "A" code page, though they are not ANSI or ASCII) are not UTF8.
<br>&nbsp;<br> <table class=bar> <tr>
<td width=33% align=left><span class='arrowleft'></span><a href="javascript:show('OodleX_GetSeconds.html')" class="paragraph">OodleX_GetSeconds</a></td><td width=33% align=center><span class='arrowup'></span><a href="javascript:show('OodleXAPI_Util.html')" class="paragraph">OodleX Utils</a></td><td width=33% align=right><span class='arrowright'></span><a href="javascript:show('OodleXUtil_ConvertUTF16ToUTF8.html')" class="paragraph">OodleXUtil_ConvertUTF16ToUTF8</a></td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="OodleXHandleEvent_SetDone.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>OodleXHandleEvent_SetDone</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "OodleXHandleEvent_SetDone.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="OodleXHandleEvent_SetDone.html_backmenu">
<table class=dropmenu>
<tr><td><span class='arrowleft'></span>&nbsp;<a href="javascript:show('OodleXHandleEvent_Alloc.html')" class="paragraph">OodleXHandleEvent_Alloc</a></td></tr><tr><td><span class='arrowright'></span>&nbsp;<a href="javascript:show('OodleXHandleEvent_SetError.html')" class="paragraph">OodleXHandleEvent_SetError</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<div class=prototype><div class=prototype_header>// Function prototype:</div><pre>void <span class=prototype_type><a href="javascript:show('OodleXHandleEvent_SetDone.html')" class="blue">OodleXHandleEvent_SetDone</a></span>( <span class=prototype_type><a href="javascript:show('OodleXHandle.html')" class="blue">OodleXHandle</a></span> h );</pre></div><div class=discussion_heading>Discussion</div>Set an OodleXHandleEvent to <a href="javascript:show('OodleXStatus.html','OodleXStatus.html_OodleXStatus_Done')" class="paragraph">OodleXStatus_Done</a><div class=discussion_heading>Parameters</div> <table> <tr> <td style='vertical-align: top;' class=paramname><a id="OodleXHandleEvent_SetDone.html_h" class=nohover>h</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> handle created by <a href="javascript:show('OodleXHandleEvent_Alloc.html')" class="paragraph">OodleXHandleEvent_Alloc</a>
</td></tr></table><div class=discussion_heading>Discussion</div></p>
<p> The state transition from Pending->Done is one way. If the handle is OodleXHandleAutoDelete_Yes, it
goes away now.
<br>&nbsp;<br> <table class=bar> <tr>
<td width=33% align=left><span class='arrowleft'></span><a href="javascript:show('OodleXHandleEvent_Alloc.html')" class="paragraph">OodleXHandleEvent_Alloc</a></td><td width=33% align=center><span class='arrowup'></span><a href="javascript:show('OodleXAPI_Handle.html')" class="paragraph">OodleX async handle operations</a></td><td width=33% align=right><span class='arrowright'></span><a href="javascript:show('OodleXHandleEvent_SetError.html')" class="paragraph">OodleXHandleEvent_SetError</a></td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="OodleXAsyncSelect.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>OodleXAsyncSelect</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "OodleXAsyncSelect.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="OodleXAsyncSelect.html_backmenu">
<table class=dropmenu>
<tr><td><span class='arrowleft'></span>&nbsp;<a href="javascript:show('OodleXPriority.html')" class="paragraph">OodleXPriority</a></td></tr><tr><td><span class='arrowright'></span>&nbsp;<a href="javascript:show('OodleXStatus.html')" class="paragraph">OodleXStatus</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<div class=prototype><div class=prototype_header>// Enumerant:</div><pre><span class=prototype_type>enum</span> <a href="javascript:show('OodleXAsyncSelect.html')">OodleXAsyncSelect</a>
{
&nbsp;&nbsp;&nbsp;&nbsp;OodleXAsyncSelect_None = 0,
&nbsp;&nbsp;&nbsp;&nbsp;OodleXAsyncSelect_Workers = 0x100,
&nbsp;&nbsp;&nbsp;&nbsp;OodleXAsyncSelect_NoFlagsMask = 0xFFF,
&nbsp;&nbsp;&nbsp;&nbsp;OodleXAsyncSelect_Wide = 0x1000,
&nbsp;&nbsp;&nbsp;&nbsp;OodleXAsyncSelect_Full = 0xFFFF,
&nbsp;&nbsp;&nbsp;&nbsp;OodleXAsyncSelect_All = OodleXAsyncSelect_Full,
&nbsp;&nbsp;&nbsp;&nbsp;OodleXAsyncSelect_Force32 = 0x40000000
};
</pre></div><div class=discussion_heading>Discussion</div> OodleXAsyncSelect are bit masks that can be combined to form an async selector.<div class=discussion_heading>Enumerants</div> <table> <tr> <td style='vertical-align: top;' class=paramname><a id="OodleXAsyncSelect.html_OodleXAsyncSelect_None" class=nohover>OodleXAsyncSelect_None</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> run synchronously</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXAsyncSelect.html_OodleXAsyncSelect_Workers" class=nohover>OodleXAsyncSelect_Workers</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> run async on the Workers worker threads</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXAsyncSelect.html_OodleXAsyncSelect_NoFlagsMask" class=nohover>OodleXAsyncSelect_NoFlagsMask</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> mask for all ways to run async ops</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXAsyncSelect.html_OodleXAsyncSelect_Wide" class=nohover>OodleXAsyncSelect_Wide</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> flag : run async wide, use all possible runners</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXAsyncSelect.html_OodleXAsyncSelect_Full" class=nohover>OodleXAsyncSelect_Full</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> full speed : just turn on all bits</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXAsyncSelect.html_OodleXAsyncSelect_All" class=nohover>OodleXAsyncSelect_All</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> synonym</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXAsyncSelect.html_OodleXAsyncSelect_Force32" class=nohover>OodleXAsyncSelect_Force32</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc></td></tr></table><div class=discussion_heading>Discussion</div> The async selector tells an async operation like <a href="javascript:show('OodleXLZ_Decompress_Narrow_Async.html')" class="paragraph">OodleXLZ_Decompress_Narrow_Async</a> where it should run its decompress.
</p>
<p> OodleXAsyncSelect_Wide means break the task into many smaller pieces that can be run simultaneously, and consume all
available runners to make the task complete as quickly as possible. If WIDE is not specified, then the default is "narrow",
that is run async but don't split the task for minimum latency. Mainly used with OodleXAsyncSelect_Workers ; WIDE means
create several smaller Worklet, while narrow creates just one Worklet that does the whole task.
</p>
<p> OodleXAsyncSelect_Full provides the quickest completion of any one call, but perhaps more contention with other operations.
<br>&nbsp;<br> <table class=bar> <tr>
<td width=33% align=left><span class='arrowleft'></span><a href="javascript:show('OodleXPriority.html')" class="paragraph">OodleXPriority</a></td><td width=33% align=center><span class='arrowup'></span><a href="javascript:show('OodleXAPI_Handle.html')" class="paragraph">OodleX async handle operations</a></td><td width=33% align=right><span class='arrowright'></span><a href="javascript:show('OodleXStatus.html')" class="paragraph">OodleXStatus</a></td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="example_lz_overlap.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>example_lz_overlap : Example demonstrating parallel overlap with OodleLZ</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "example_lz_overlap.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="example_lz_overlap.html_backmenu">
<table class=dropmenu>
<tr><td><span class='arrowleft'></span>&nbsp;<a href="javascript:show('example_lz_noallocs.html')" class="paragraph">example_lz_noallocs : Example demonstrating Oodle compression with no allocations</a></td></tr><tr><td><span class='arrowup'></span>&nbsp;<a href="javascript:show('examples.html')" class="paragraph">Examples</a></td></tr><tr><td><span class='arrowright'></span>&nbsp;<a href="javascript:show('example_lz_simple.html')" class="paragraph">example_lz_simple : Example demonstrating very simple LZ memory->memory compression using only Oodle Core</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<div class=discussion_heading>Discussion</div>Oodle example_lz_overlap
</p>
<p>Demonstration of the benefit of overlapping IO with CPU work and parallelism in LZ decompression.
</p>
<p>This example compresses a file, then repeatedly reads the compressed data and decompresses it, in several different ways.
</p>
<p>There are two types of parallelism demonstrated here :
</p>
<p>1. IO overlap. When reading and decompressing large files, you get minimum latency by
overlapping the IO with the decompress. This is done by reading the compressed data in smaller
chunks and decompressing each chunk (in parallel) as it is done.
</p>
<p>2. Parallel "wide" decompression. OodleLZ with seek chunk resets can decompress using many
threads simultaneously.
</p>
<p>Combining IO overlap and wide decompression is the fastest way to load compressed data.<div class=prototype> <pre>
#include "../include/oodle2x.h"
#include "ooex.h"
#ifdef _MSC_VER
#pragma warning(disable : 4127) <span style="color:#008000;">// conditional is constant</span>
#endif
#ifndef _CRT_SECURE_NO_WARNINGS
#define _CRT_SECURE_NO_WARNINGS
#endif
#include &lt;stdio.h>
#include &lt;string.h>
#include &lt;assert.h>
#include &lt;stdlib.h>
#include "make_example_input.h"
#ifdef BUILDING_EXAMPLE_CALLER
#define main <span class=prototype_type><a href="javascript:show('example_lz_overlap.html')" class="blue">example_lz_overlap</a></span>
#endif
extern "C" int main(int argc,char *argv[])
{
if ( ! <span class=prototype_type><a href="javascript:show('OodleX_Init_Default.html')" class="blue">OodleX_Init_Default</a></span>(<span class=prototype_type><a href="javascript:show('OODLE_HEADER_VERSION.html')" class="blue">OODLE_HEADER_VERSION</a></span>) )
<span style="color:#008000;">//if ( ! OodleX_Init_Default(OODLE_HEADER_VERSION,OodleX_Init_GetDefaults_DebugSystems_Yes,OodleX_Init_GetDefaults_Threads_No) )</span>
{
fprintf(stderr,"OodleX_Init failed.\n");
return 10;
}
</pre></div>Pass in the file name to compress. If you don't provide one, I'll make one.
</p>
<p> Ideally give this example something big to work on, 20M - 100M , to get better charts.<div class=prototype> <pre>
<span style="color:#008000;">// get args :</span>
const char * inName;
if ( argc &lt; 2 )
{
inName = "oodle_example_input_file";
make_example_input(inName);
}
else
{
inName = argv[1];
}
<span style="color:#008000;">// we'll write to this file :</span>
const char * compName = "oodle_example_overlap_comp";
OodleXLog_Printf_v1("compressing %s -> %s ...\n",inName,compName);
</pre></div>Set up the LZ compression options so that we make independent chunks
(seekChunkReset = true) and make them 1 MB each.
</p>
<p> This hurts compression ratio (vs not chunking) but allows decompression of each chunk
to run in parallel.<div class=prototype> <pre>
<span class=prototype_type><a href="javascript:show('OodleLZ_CompressionLevel.html')" class="blue">OodleLZ_CompressionLevel</a></span> lzLevel = OodleLZ_CompressionLevel_Fast;
<span class=prototype_type><a href="javascript:show('OodleLZ_Compressor.html')" class="blue">OodleLZ_Compressor</a></span> lzCompressor = OodleLZ_Compressor_Kraken;
<span class=prototype_type><a href="javascript:show('OodleLZ_CompressOptions.html')" class="blue">OodleLZ_CompressOptions</a></span> lzOptions = * <span class=prototype_type><a href="javascript:show('OodleLZ_CompressOptions_GetDefault.html')" class="blue">OodleLZ_CompressOptions_GetDefault</a></span>(lzCompressor,lzLevel);
lzOptions.seekChunkLen = 1&lt;&lt;20; <span style="color:#008000;">// 1 MB</span>
lzOptions.seekChunkReset = true;
</pre></div>Read the input file, compress it, and write it out :
</p>
<p> In practice for maximum speed, you could read each chunk of the input and compress them
independently as each chunk async IO read finishes.<div class=prototype> <pre>
OO_SINTa inSize;
void * inBuf;
OO_SINTa compSize;
<span class=prototype_type><a href="javascript:show('OodleLZ_SeekTable.html')" class="blue">OodleLZ_SeekTable</a></span> * seekTable;
OO_S64 inSize64;
inBuf = <span class=prototype_type><a href="javascript:show('OodleXIOQ_ReadMallocWholeFile_AsyncAndWait.html')" class="blue">OodleXIOQ_ReadMallocWholeFile_AsyncAndWait</a></span>(inName,&amp;inSize64);
if ( inBuf == NULL )
{
OodleXLog_Printf_v0("ERROR couldn't load : %s\n",inName);
return 10;
}
inSize = <span class=prototype_type><a href="javascript:show('OodleX_S64_to_SINTa_check.html')" class="blue">OodleX_S64_to_SINTa_check</a></span>(inSize64);
{ <span style="color:#008000;">// scope for compBuf</span>
void * compBuf = <span class=prototype_type><a href="javascript:show('OodleXMalloc_IOAligned.html')" class="blue">OodleXMalloc_IOAligned</a></span>( <span class=prototype_type><a href="javascript:show('OodleLZ_GetCompressedBufferSizeNeeded.html')" class="blue">OodleLZ_GetCompressedBufferSizeNeeded</a></span>(lzCompressor,inSize) );
OO_U32 asyncSelect = OodleXAsyncSelect_All;
compSize = <span class=prototype_type><a href="javascript:show('OodleXLZ_Compress_AsyncAndWait.html')" class="blue">OodleXLZ_Compress_AsyncAndWait</a></span>(asyncSelect,lzCompressor,inBuf,inSize,compBuf,lzLevel,&amp;lzOptions);
if ( compSize &lt;= 0 )
{
OodleXLog_Printf_v0("ERROR failed to compress\n");
return 10;
}
if ( ! <span class=prototype_type><a href="javascript:show('OodleXIOQ_WriteWholeFile_AsyncAndWait.html')" class="blue">OodleXIOQ_WriteWholeFile_AsyncAndWait</a></span>(compName,compBuf,compSize) )
{
OodleXLog_Printf_v0("ERROR couldn't write : %s\n",compName);
return 10;
}
<span style="color:#008000;">// log about it :</span>
OodleXLog_Printf_v1("%s compressed %d -> %d\n",inName,(int)inSize,(int)compSize);
</pre></div>Make an OodleLZ_SeekTable on the compressed data for later use with parallel decompression.
</p>
<p> You should store the seektable to disk with any header information, and load it before loading the
compressed bulk data. Oodle can do this for you with an "OOZ" file.
</p>
<p> For this example we'll just keep the seekTable in memory. In real use you would write the
seek table with the compressed data.
</p>
<p> Once we make the seekTable, we free compBuf - to get the compressed data again we will
have to read it from disk.<div class=prototype> <pre>
seekTable = <span class=prototype_type><a href="javascript:show('OodleLZ_CreateSeekTable.html')" class="blue">OodleLZ_CreateSeekTable</a></span>(OodleLZSeekTable_Flags_None,
lzOptions.seekChunkLen,NULL,inSize,compBuf,compSize);
<span class=prototype_type><a href="javascript:show('OodleXFree_IOAligned.html')" class="blue">OodleXFree_IOAligned</a></span>(compBuf);
compBuf = NULL;
}
<span style="color:#008000;">// we'll decompress into decompBuf</span>
void * decompBuf = <span class=prototype_type><a href="javascript:show('OodleXMalloc.html')" class="blue">OodleXMalloc</a></span>(inSize);
<span style="color:#008000;">//===================================================================================</span>
<span style="color:#008000;">// prevent cheating :</span>
memset(decompBuf,(int)rand(),inSize);
</pre></div>Read the files with unbuffered IO
</p>
<p> We're mainly doing this here for consistent benchmarking so we can see IO times
otherwise the files would just come from the OS buffers and no show real IO time.
In practice you should usually use buffered IO. (OodleXFileOpenFlags_Default)<div class=prototype> <pre>
<span class=prototype_type><a href="javascript:show('OodleXFileOpenFlags.html')" class="blue">OodleXFileOpenFlags</a></span> fileOpenFlags = OodleXFileOpenFlags_NotBuffered;
</pre></div>Now begins various ways to read the compressed file and decompress it.
</p>
<p> Read-Decomp 1 :
</p>
<p> Read the whole compressed file, synchronously.
When that's done, decompress the whole buffer, synchronously.
</p>
<p> Simple, but stalls the main thread and gets no overlap of IO or parallelism in the decompress.<div class=prototype> <pre>
OodleXLog_Printf_v1("Doing read then decomp, synchronously on the main thread :\n");
{
void * compBuf = <span class=prototype_type><a href="javascript:show('OodleXIOQ_ReadMallocWholeFile_AsyncAndWait.html')" class="blue">OodleXIOQ_ReadMallocWholeFile_AsyncAndWait</a></span>(compName,NULL,fileOpenFlags);
if ( compBuf == NULL )
{
OodleXLog_Printf_v0("ReadMallocWholeFile failed on %s\n",compName);
return 10;
}
<span class=prototype_type><a href="javascript:show('OodleLZ_Decompress.html')" class="blue">OodleLZ_Decompress</a></span>(compBuf,compSize,decompBuf,inSize,OodleLZ_FuzzSafe_Yes);
<span style="color:#008000;">// check it :</span>
OOEX_ASSERT( memcmp(inBuf,decompBuf,inSize) == 0 );
<span class=prototype_type><a href="javascript:show('OodleXFree_IOAligned.html')" class="blue">OodleXFree_IOAligned</a></span>(compBuf);
}
<span style="color:#008000;">//===================================================================================</span>
</pre></div>Read-Decomp 2 :
</p>
<p> Read the whole compressed file, and fire off a full-buffer decompress, scheduled
to run automatically when the read is done.
</p>
<p> This has the same latency as method 1, but is a single async operation so the main
thread can do something else the whole time.<div class=prototype> <pre>
OodleXLog_Printf_v1("Doing read then decomp, through a job chain :\n");
<span style="color:#008000;">// prevent cheating :</span>
memset(decompBuf,(int)rand(),inSize);
{
<span style="color:#008000;">// for simplicity, we'll just malloc compBuf with our known compSize</span>
<span style="color:#008000;">// more generally if you didn't know compSize, you would have to use an OodleWork coroutine</span>
<span style="color:#008000;">// to first open the file, get the size, do the malloc, do the read, then the decompress</span>
void * compBuf = <span class=prototype_type><a href="javascript:show('OodleXMalloc_IOAligned.html')" class="blue">OodleXMalloc_IOAligned</a></span>(compSize);
<span style="color:#008000;">// make an IO request to open and read the whole file : </span>
<span class=prototype_type><a href="javascript:show('OodleXIOQFile.html')" class="blue">OodleXIOQFile</a></span> compFile;
<span class=prototype_type><a href="javascript:show('OodleXHandle.html')" class="blue">OodleXHandle</a></span> openAndReadH = <span class=prototype_type><a href="javascript:show('OodleXIOQ_OpenAndRead_Async.html')" class="blue">OodleXIOQ_OpenAndRead_Async</a></span>(&amp;compFile,compName,compBuf,<span class=prototype_type><a href="javascript:show('OodleX_IOAlignUpSINTa.html')" class="blue">OodleX_IOAlignUpSINTa</a></span>(compSize),0,fileOpenFlags,0,OodleXHandleAutoDelete_Yes);
<span style="color:#008000;">// go ahead and enqueue a Close to follow the OpenAndRead :</span>
<span class=prototype_type><a href="javascript:show('OodleXIOQ_CloseFile_Async.html')" class="blue">OodleXIOQ_CloseFile_Async</a></span>(compFile,<span class=prototype_type><a href="javascript:show('OODLEX_FILE_CLOSE_NO_TRUNCATE_SIZE.html')" class="blue">OODLEX_FILE_CLOSE_NO_TRUNCATE_SIZE</a></span>,OodleXHandleAutoDelete_Yes);
<span style="color:#008000;">// the decompress depends on the OpenAndRead - it will run only when that is done</span>
<span style="color:#008000;">// dependencies are an array, but we have only one, so just point at it :</span>
const <span class=prototype_type><a href="javascript:show('OodleXHandle.html')" class="blue">OodleXHandle</a></span> * deps = &amp;openAndReadH;
int num_deps = 1;
<span class=prototype_type><a href="javascript:show('OodleXHandle.html')" class="blue">OodleXHandle</a></span> decompH = <span class=prototype_type><a href="javascript:show('OodleXLZ_Decompress_Narrow_Async.html')" class="blue">OodleXLZ_Decompress_Narrow_Async</a></span>(OodleXAsyncSelect_Full,compBuf,compSize,decompBuf,inSize,
OodleLZ_FuzzSafe_No,OodleLZ_CheckCRC_No,OodleLZ_Verbosity_None,
0,0,0,0,0,0,OodleLZ_Decode_Unthreaded,0,0,0,0,
OodleXHandleAutoDelete_No,
deps,num_deps);
<span style="color:#008000;">// ... main thread can do other work here ...</span>
<span class=prototype_type><a href="javascript:show('OodleXStatus.html')" class="blue">OodleXStatus</a></span> st = OodleX_WaitAndDelete(decompH);
if ( st != OodleXStatus_Done )
{
OodleXLog_Printf_v0("OodleXLZ_Decompress_Narrow_Async failed!\n");
return 10;
}
<span style="color:#008000;">// check it :</span>
OOEX_ASSERT( memcmp(inBuf,decompBuf,inSize) == 0 );
<span class=prototype_type><a href="javascript:show('OodleXFree_IOAligned.html')" class="blue">OodleXFree_IOAligned</a></span>(compBuf);
}
<span style="color:#008000;">//===================================================================================</span>
</pre></div>Read-Decomp 3 :
</p>
<p> Read and decompress with IO overlap, but only using a single thread (not "wide").
</p>
<p> OodleXLZ_ReadAndDecompress_Stream_Async is an API provided to do IO overlap with decompression.
It's something you could easily write yourself in Oodle. It uses a coroutine to do IO on chunks
and then decompress the chunks as they arive. It tries to always be doing the IO for the next chunk
while decompressing the current chunk.<div class=prototype> <pre>
OodleXLog_Printf_v1("Doing read and decomp simultaneously :\n");
<span style="color:#008000;">// prevent cheating :</span>
memset(decompBuf,(int)rand(),inSize);
{
void * compBuf = <span class=prototype_type><a href="javascript:show('OodleXMalloc_IOAligned.html')" class="blue">OodleXMalloc_IOAligned</a></span>(compSize);
</pre></div>Enqueue an open request + read an initial small chunk into compBuf
</p>
<p> We don't wait on the Open, but immediately start the OodleXLZ_ReadAndDecompress_Stream_Async operation,
and pass it the openAndRead handle.<div class=prototype> <pre>
<span class=prototype_type><a href="javascript:show('OodleXIOQFile.html')" class="blue">OodleXIOQFile</a></span> compFile;
OO_SINTa initialReadSize = <span class=prototype_type><a href="javascript:show('OodleX_IOAlignUpSINTa.html')" class="blue">OodleX_IOAlignUpSINTa</a></span>( OOEX_MIN(compSize,512*1024) );
<span class=prototype_type><a href="javascript:show('OodleXHandle.html')" class="blue">OodleXHandle</a></span> openAndReadH = <span class=prototype_type><a href="javascript:show('OodleXIOQ_OpenAndRead_Async.html')" class="blue">OodleXIOQ_OpenAndRead_Async</a></span>(&amp;compFile,compName,compBuf,initialReadSize,0,fileOpenFlags);
<span class=prototype_type><a href="javascript:show('OodleXHandle.html')" class="blue">OodleXHandle</a></span> readAndDecomp = <span class=prototype_type><a href="javascript:show('OodleXLZ_ReadAndDecompress_Stream_Async.html')" class="blue">OodleXLZ_ReadAndDecompress_Stream_Async</a></span>(OodleXAsyncSelect_Full,
compBuf,compSize,decompBuf,inSize,
OodleLZ_FuzzSafe_No,OodleLZ_CheckCRC_No,OodleLZ_Verbosity_None,0,0,
compFile,compBuf,0,openAndReadH,initialReadSize);
<span style="color:#008000;">// enqueue a CloseFile with a dependency on the ReadAndDecomp operation :</span>
<span class=prototype_type><a href="javascript:show('OodleXIOQ_CloseFile_Async.html')" class="blue">OodleXIOQ_CloseFile_Async</a></span>(compFile,<span class=prototype_type><a href="javascript:show('OODLEX_FILE_CLOSE_NO_TRUNCATE_SIZE.html')" class="blue">OODLEX_FILE_CLOSE_NO_TRUNCATE_SIZE</a></span>,OodleXHandleAutoDelete_Yes,OodleXPriority_Normal,&amp;readAndDecomp,1);
<span style="color:#008000;">// ... main thread can do other work ...</span>
<span class=prototype_type><a href="javascript:show('OodleXStatus.html')" class="blue">OodleXStatus</a></span> st = OodleX_WaitAndDelete(readAndDecomp);
if ( st != OodleXStatus_Done )
{
OodleXLog_Printf_v0("ReadAndDecomp failed\n");
return 10;
}
<span style="color:#008000;">// check it :</span>
OOEX_ASSERT( memcmp(inBuf,decompBuf,inSize) == 0 );
<span class=prototype_type><a href="javascript:show('OodleXFree_IOAligned.html')" class="blue">OodleXFree_IOAligned</a></span>(compBuf);
}
<span style="color:#008000;">//===================================================================================</span>
</pre></div>Read-Decomp 4 :
</p>
<p> Read and decompress with IO overlap, and using all worker threads ("wide").
</p>
<p> ReadAndDecompress_Wide needs the seekTable to find the compressed block boundaries. Normally you
would have to send that in a file (see the OOZ APIs if you want Oodle to do it for you). Here
we just use the seekTable we made earlier and kept in memory.<div class=prototype> <pre>
OodleXLog_Printf_v1("Doing read and decomp wide :\n");
<span style="color:#008000;">// prevent cheating :</span>
memset(decompBuf,(int)rand(),inSize);
{
void * compBuf = <span class=prototype_type><a href="javascript:show('OodleXMalloc_IOAligned.html')" class="blue">OodleXMalloc_IOAligned</a></span>(compSize);
<span style="color:#008000;">// open compressed file and do an initial read :</span>
<span class=prototype_type><a href="javascript:show('OodleXIOQFile.html')" class="blue">OodleXIOQFile</a></span> compFile;
OO_SINTa initialReadSize = <span class=prototype_type><a href="javascript:show('OodleX_IOAlignUpSINTa.html')" class="blue">OodleX_IOAlignUpSINTa</a></span>( OOEX_MIN(compSize,256*1024) );
<span class=prototype_type><a href="javascript:show('OodleXHandle.html')" class="blue">OodleXHandle</a></span> openAndReadH = <span class=prototype_type><a href="javascript:show('OodleXIOQ_OpenAndRead_Async.html')" class="blue">OodleXIOQ_OpenAndRead_Async</a></span>(&amp;compFile,compName,compBuf,initialReadSize,0,fileOpenFlags);
<span style="color:#008000;">// instead of waiting on openAndReadH here, you could pass it as a dependency</span>
<span style="color:#008000;">// to the OodleXLZ_ReadAndDecompress_Wide_Async function to make the whole sequence async</span>
<span style="color:#008000;">// but we'll just stall here for simplicity in this example :</span>
<span class=prototype_type><a href="javascript:show('OodleXStatus.html')" class="blue">OodleXStatus</a></span> st = OodleX_WaitAndDelete(openAndReadH);
if ( st != OodleXStatus_Done )
{
OodleXLog_Printf_v0("OpenAndRead failed\n");
return 10;
}
<span style="color:#008000;">// fire off the read-and-decomp job : </span>
<span class=prototype_type><a href="javascript:show('OodleXHandle.html')" class="blue">OodleXHandle</a></span> readAndDecomp = <span class=prototype_type><a href="javascript:show('OodleXLZ_ReadAndDecompress_Wide_Async.html')" class="blue">OodleXLZ_ReadAndDecompress_Wide_Async</a></span>(OodleXAsyncSelect_Full,
seekTable,compBuf,compSize,initialReadSize,compFile,0,
decompBuf,inSize,
OodleLZ_FuzzSafe_No,OodleLZ_CheckCRC_No,OodleLZ_Verbosity_None);
<span style="color:#008000;">// enqueue a CloseFile with a dependency on the ReadAndDecomp operation :</span>
<span class=prototype_type><a href="javascript:show('OodleXIOQ_CloseFile_Async.html')" class="blue">OodleXIOQ_CloseFile_Async</a></span>(compFile,<span class=prototype_type><a href="javascript:show('OODLEX_FILE_CLOSE_NO_TRUNCATE_SIZE.html')" class="blue">OODLEX_FILE_CLOSE_NO_TRUNCATE_SIZE</a></span>,OodleXHandleAutoDelete_Yes,OodleXPriority_Normal,&amp;readAndDecomp,1);
<span style="color:#008000;">// ... main thread can do other work ...</span>
st = OodleX_WaitAndDelete(readAndDecomp);
if ( st != OodleXStatus_Done )
{
OodleXLog_Printf_v0("ReadAndDecomp failed\n");
return 10;
}
<span style="color:#008000;">// check it :</span>
OOEX_ASSERT( memcmp(inBuf,decompBuf,inSize) == 0 );
<span class=prototype_type><a href="javascript:show('OodleXFree_IOAligned.html')" class="blue">OodleXFree_IOAligned</a></span>(compBuf);
}
<span style="color:#008000;">//===================================================================================</span>
<span style="color:#008000;">// all done, clean up :</span>
<span class=prototype_type><a href="javascript:show('OodleLZ_FreeSeekTable.html')" class="blue">OodleLZ_FreeSeekTable</a></span>(seekTable);
<span class=prototype_type><a href="javascript:show('OodleXFree.html')" class="blue">OodleXFree</a></span>(decompBuf);
<span class=prototype_type><a href="javascript:show('OodleXFree_IOAligned.html')" class="blue">OodleXFree_IOAligned</a></span>(inBuf);
<span class=prototype_type><a href="javascript:show('OodleX_Shutdown.html')" class="blue">OodleX_Shutdown</a></span>();
return 0;
}
</pre></div><br>&nbsp;<br> <table class=bar> <tr>
<td width=33% align=left><span class='arrowleft'></span><a href="javascript:show('example_lz_noallocs.html')" class="paragraph">example_lz_noallocs : Example demonstrating Oodle compression with no allocations</a></td><td width=33% align=center><span class='arrowup'></span><a href="javascript:show('examples.html')" class="paragraph">Examples</a></td><td width=33% align=right><span class='arrowright'></span><a href="javascript:show('example_lz_simple.html')" class="paragraph">example_lz_simple : Example demonstrating very simple LZ memory->memory compression using only Oodle Core</a></td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="OodleX_GetConfigValues.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>OodleX_GetConfigValues</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "OodleX_GetConfigValues.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="OodleX_GetConfigValues.html_backmenu">
<table class=dropmenu>
<tr><td><span class='arrowleft'></span>&nbsp;<a href="javascript:show('OodleX_Shutdown_NoThreads.html')" class="paragraph">OodleX_Shutdown_NoThreads</a></td></tr><tr><td><span class='arrowright'></span>&nbsp;<a href="javascript:show('OodleX_SetConfigValues.html')" class="paragraph">OodleX_SetConfigValues</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<div class=prototype><div class=prototype_header>// Function prototype:</div><pre>void <span class=prototype_type><a href="javascript:show('OodleX_GetConfigValues.html')" class="blue">OodleX_GetConfigValues</a></span>( <span class=prototype_type><a href="javascript:show('OodleXConfigValues.html')" class="blue">OodleXConfigValues</a></span> * ptr );</pre></div><div class=discussion_heading>Discussion</div>Get <a href="javascript:show('OodleXConfigValues.html')" class="paragraph">OodleXConfigValues</a><div class=discussion_heading>Parameters</div> <table> <tr> <td style='vertical-align: top;' class=paramname><a id="OodleX_GetConfigValues.html_ptr" class=nohover>ptr</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> filled with OodleXConfigValues
</td></tr></table><div class=discussion_heading>Discussion</div></p>
<p> Gets the current <a href="javascript:show('OodleXConfigValues.html')" class="paragraph">OodleXConfigValues</a>.
</p>
<p> May be different per platform.
<br>&nbsp;<br> <table class=bar> <tr>
<td width=33% align=left><span class='arrowleft'></span><a href="javascript:show('OodleX_Shutdown_NoThreads.html')" class="paragraph">OodleX_Shutdown_NoThreads</a></td><td width=33% align=center><span class='arrowup'></span><a href="javascript:show('OodleXAPI_Init.html')" class="paragraph">OodleX Startup and Shutdown</a></td><td width=33% align=right><span class='arrowright'></span><a href="javascript:show('OodleX_SetConfigValues.html')" class="paragraph">OodleX_SetConfigValues</a></td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="OodleXMalloc_GetVTable_OS.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>OodleXMalloc_GetVTable_OS</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "OodleXMalloc_GetVTable_OS.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="OodleXMalloc_GetVTable_OS.html_backmenu">
<table class=dropmenu>
<tr><td><span class='arrowleft'></span>&nbsp;<a href="javascript:show('OodleXMalloc_GetVTable_Clib.html')" class="paragraph">OodleXMalloc_GetVTable_Clib</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<div class=prototype><div class=prototype_header>// Function prototype:</div><pre>const <span class=prototype_type><a href="javascript:show('OodleXMallocVTable.html')" class="blue">OodleXMallocVTable</a></span> * <span class=prototype_type><a href="javascript:show('OodleXMalloc_GetVTable_OS.html')" class="blue">OodleXMalloc_GetVTable_OS</a></span>( <span class=prototype_type><a href="javascript:show('OodleXMalloc_OS_Options.html')" class="blue">OodleXMalloc_OS_Options</a></span> options );</pre></div><div class=discussion_heading>Discussion</div>get an OodleXMalloc VTable that contains allocators based on the OS system allocators <div class=discussion_heading>Parameters</div> <table> <tr> <td style='vertical-align: top;' class=paramname><a id="OodleXMalloc_GetVTable_OS.html_options" class=nohover>options</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> see <a href="javascript:show('OodleXMalloc_OS_Options.html')" class="paragraph">OodleXMalloc_OS_Options</a>; default is <a href="javascript:show('OodleXMalloc_OS_Options.html','OodleXMalloc_OS_Options.html_OodleXMalloc_OS_Options_None')" class="paragraph">OodleXMalloc_OS_Options_None</a>
</td></tr></table><div class=discussion_heading>Discussion</div></p>
<p> This is usually used to set <a href="javascript:show('OodleXInitOptions.html','OodleXInitOptions.html_m_pBaseVTable')" class="paragraph">OodleXInitOptions:m_pBaseVTable</a>
<br>&nbsp;<br> <table class=bar> <tr>
<td width=33% align=left><span class='arrowleft'></span><a href="javascript:show('OodleXMalloc_GetVTable_Clib.html')" class="paragraph">OodleXMalloc_GetVTable_Clib</a></td><td width=33% align=center><span class='arrowup'></span><a href="javascript:show('OodleXAPI_Malloc.html')" class="paragraph">OodleX Memory Allocators</a></td><td width=33% align=right><span class='arrowright'></span><a href="javascript:show('OodleXMallocFailedHandler.html')" class="paragraph">OodleXMallocFailedHandler</a></td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="OodleDecompressCallback_WriteFile.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>OodleDecompressCallback_WriteFile</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "OodleDecompressCallback_WriteFile.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="OodleDecompressCallback_WriteFile.html_backmenu">
<table class=dropmenu>
<tr><td><span class='arrowleft'></span>&nbsp;<a href="javascript:show('OodleXDecompressCallback_WriteFile_Data_Init.html')" class="paragraph">OodleXDecompressCallback_WriteFile_Data_Init</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<div class=prototype><div class=prototype_header>// Function prototype:</div><pre><span class=prototype_type><a href="javascript:show('OodleDecompressCallbackRet.html')" class="blue">OodleDecompressCallbackRet</a></span> OODLE_CALLBACK <span class=prototype_type><a href="javascript:show('OodleDecompressCallback_WriteFile.html')" class="blue">OodleDecompressCallback_WriteFile</a></span>( void * pcbData,
const OO_U8 * rawBuf,
OO_SINTa rawLen,
const OO_U8 * compBuf,
OO_SINTa compBufferSize,
OO_SINTa rawDone,
OO_SINTa compUsed );</pre></div><div class=discussion_heading>Discussion</div>A <a href="javascript:show('OodleDecompressCallback.html')" class="paragraph">OodleDecompressCallback</a> which writes the decompressed data to a file<div class=discussion_heading>Parameters</div> <table> <tr> <td style='vertical-align: top;' class=paramname><a id="OodleDecompressCallback_WriteFile.html_pcbData" class=nohover>pcbData</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> the <a href="javascript:show('OodleDecompressCallback_WriteFile_Data.html')" class="paragraph">OodleDecompressCallback_WriteFile_Data</a> you passed to OodleLZ_Decompress
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleDecompressCallback_WriteFile.html_rawBuf" class=nohover>rawBuf</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> the decompressed buffer
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleDecompressCallback_WriteFile.html_rawLen" class=nohover>rawLen</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> the total decompressed length
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleDecompressCallback_WriteFile.html_compBuf" class=nohover>compBuf</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> the compressed buffer
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleDecompressCallback_WriteFile.html_compBufferSize" class=nohover>compBufferSize</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> the total compressed length
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleDecompressCallback_WriteFile.html_rawDone" class=nohover>rawDone</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> number of bytes in rawBuf decompressed so far
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleDecompressCallback_WriteFile.html_compUsed" class=nohover>compUsed</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> number of bytes in compBuf consumed so far
</td></tr></table><div class=discussion_heading>Discussion</div></p>
<p> OodleDecompressCallback is called incrementally during decompression.
</p>
<p> This is provided as a convenience for use as an <a href="javascript:show('OodleDecompressCallback.html')" class="paragraph">OodleDecompressCallback</a> in functions that take that callback,
such as <a href="javascript:show('OodleXLZ_ReadAndDecompress_Stream_Async.html')" class="paragraph">OodleXLZ_ReadAndDecompress_Stream_Async</a>.
</p>
<p> NOTE : you typically need to do OodleX_WaitAndDelete on the <i>closeH</i> from OodleDecompressCallback_WriteFile_Data
<br>&nbsp;<br> <table class=bar> <tr>
<td width=33% align=left><span class='arrowleft'></span><a href="javascript:show('OodleXDecompressCallback_WriteFile_Data_Init.html')" class="paragraph">OodleXDecompressCallback_WriteFile_Data_Init</a></td><td width=33% align=center><span class='arrowup'></span><a href="javascript:show('OodleXAPI_LZ_Async.html')" class="paragraph">OodleXAPI_LZ_Async</a></td><td width=33% align=right><span class='arrowright'></span><a href="javascript:show('OodleXAPI_Init.html')" class="paragraph">OodleX Startup and Shutdown</a></td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="OodleLZ_MakeSeekChunkLen.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>OodleLZ_MakeSeekChunkLen</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "OodleLZ_MakeSeekChunkLen.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="OodleLZ_MakeSeekChunkLen.html_backmenu">
<table class=dropmenu>
<tr><td><span class='arrowleft'></span>&nbsp;<a href="javascript:show('OodleLZDecoder_MakeValidCircularWindowSize.html')" class="paragraph">OodleLZDecoder_MakeValidCircularWindowSize</a></td></tr><tr><td><span class='arrowright'></span>&nbsp;<a href="javascript:show('OodleLZ_GetNumSeekChunks.html')" class="paragraph">OodleLZ_GetNumSeekChunks</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<div class=prototype><div class=prototype_header>// Function prototype:</div><pre>OO_S32 <span class=prototype_type><a href="javascript:show('OodleLZ_MakeSeekChunkLen.html')" class="blue">OodleLZ_MakeSeekChunkLen</a></span>( OO_S64 rawLen,
OO_S32 desiredSeekPointCount );</pre></div><div class=discussion_heading>Discussion</div>Compute a valid seekChunkLen<div class=discussion_heading>Parameters</div> <table> <tr> <td style='vertical-align: top;' class=paramname><a id="OodleLZ_MakeSeekChunkLen.html_rawLen" class=nohover>rawLen</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> total length of uncompressed data
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleLZ_MakeSeekChunkLen.html_desiredSeekPointCount" class=nohover>desiredSeekPointCount</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> desired number of seek chunks
</td></tr></table><div class=discussion_heading>Return Value</div> <table> <tr> <td style='vertical-align: top;' class=paramname><a id="OodleLZ_MakeSeekChunkLen.html_return" class=nohover>return</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> a valid seekChunkLen for use in <a href="javascript:show('OodleLZ_CreateSeekTable.html')" class="paragraph">OodleLZ_CreateSeekTable</a>
</td></tr></table><div class=discussion_heading>Discussion</div></p>
<p> Returns a seekChunkLen which is close to (rawLen/desiredSeekPointCount) but is a power of two multiple of <a href="javascript:show('OODLELZ_BLOCK_LEN.html')" class="paragraph">OODLELZ_BLOCK_LEN</a>
</p>
<p> <i>desiredSeekPointCount</i> = 16 is good for parallel decompression.
(OODLELZ_SEEKPOINTCOUNT_DEFAULT)
<br>&nbsp;<br> <table class=bar> <tr>
<td width=33% align=left><span class='arrowleft'></span><a href="javascript:show('OodleLZDecoder_MakeValidCircularWindowSize.html')" class="paragraph">OodleLZDecoder_MakeValidCircularWindowSize</a></td><td width=33% align=center><span class='arrowup'></span><a href="javascript:show('OodleAPI_LZ_Compressors.html')" class="paragraph">OodleAPI_LZ_Compressors</a></td><td width=33% align=right><span class='arrowright'></span><a href="javascript:show('OodleLZ_GetNumSeekChunks.html')" class="paragraph">OodleLZ_GetNumSeekChunks</a></td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="OodleNetwork1_Shared_Size.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>OodleNetwork1_Shared_Size</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "OodleNetwork1_Shared_Size.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="OodleNetwork1_Shared_Size.html_backmenu">
<table class=dropmenu>
<tr><td><span class='arrowright'></span>&nbsp;<a href="javascript:show('OodleNetwork1TCP_State_Size.html')" class="paragraph">OodleNetwork1TCP_State_Size</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<div class=prototype><div class=prototype_header>// Function prototype:</div><pre>OO_SINTa <span class=prototype_type><a href="javascript:show('OodleNetwork1_Shared_Size.html')" class="blue">OodleNetwork1_Shared_Size</a></span>( OO_S32 htbits );</pre></div><div class=discussion_heading>Discussion</div>Returns the size of memory required for an <a href="javascript:show('OodleNetwork1_Shared.html')" class="paragraph">OodleNetwork1_Shared</a> object<div class=discussion_heading>Parameters</div> <table> <tr> <td style='vertical-align: top;' class=paramname><a id="OodleNetwork1_Shared_Size.html_htbits" class=nohover>htbits</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> size of the OodleNetwork1 hash table (log2) ; typically 18-21 such as <a href="javascript:show('OODLENETWORK1_HASH_BITS_DEFAULT.html')" class="paragraph">OODLENETWORK1_HASH_BITS_DEFAULT</a>
</td></tr></table><div class=discussion_heading>Discussion</div></p>
<p> Shared and State are allocated with malloc( Size() )
</p>
<p><br>&nbsp;<br> <table class=bar> <tr>
<td width=33% align=left><span class='arrowleft'></span><a href="javascript:show('OodleNetwork1UDP_StateCompacted.html')" class="paragraph">OodleNetwork1UDP_StateCompacted</a></td><td width=33% align=center><span class='arrowup'></span><a href="javascript:show('OodleAPI_OodleNetwork1.html')" class="paragraph">OodleAPI_OodleNetwork1</a></td><td width=33% align=right><span class='arrowright'></span><a href="javascript:show('OodleNetwork1TCP_State_Size.html')" class="paragraph">OodleNetwork1TCP_State_Size</a></td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="licenses.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>Third Party License Notices</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "licenses.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="licenses.html_backmenu">
<table class=dropmenu>
<tr><td><span class='arrowup'></span>&nbsp;<a href="javascript:show('acknowledgements.html')" class="paragraph">Acknowledgements</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<P>
Oodle uses "ConvertUTF" by Unicode, Inc. License notice follows :
</p>
<p><PRE>
* Copyright 2001-2004 Unicode, Inc.
*
* Disclaimer
*
* This source code is provided as is by Unicode, Inc. No claims are
* made as to fitness for any particular purpose. No warranties of any
* kind are expressed or implied. The recipient agrees to determine
* applicability of information provided. If this file has been
* purchased on magnetic or optical media from Unicode, Inc., the
* sole remedy for any claim will be exchange of defective media
* within 90 days of receipt.
*
* Limitations on Rights to Redistribute This Code
*
* Unicode, Inc. hereby grants the right to freely use the information
* supplied in this file in the creation of products supporting the
* Unicode Standard, and to make copies of this file in any form
* for internal or external distribution as long as this notice
* remains attached.
</PRE>
</p>
<p><hr>
</p>
<p>The Oodle examples are shipped with some code from cbloom.com ; the code is Public Domain.
</p>
<p><hr>
<br>&nbsp;<br> <table class=bar> <tr>
<td width=33% align=left><span class='arrowleft'></span><a href="javascript:show('acknowledgements.html')" class="paragraph">Acknowledgements</a></td><td width=33% align=center><span class='arrowup'></span><a href="javascript:show('acknowledgements.html')" class="paragraph">Acknowledgements</a></td><td width=33%>&nbsp;</td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="OodleXHandle_About.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>About OodleXHandle</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "OodleXHandle_About.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="OodleXHandle_About.html_backmenu">
<table class=dropmenu>
<tr><td><span class='arrowup'></span>&nbsp;<a href="javascript:show('OodleXAPI_Handle.html')" class="paragraph">OodleX async handle operations</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<P>
<h2> About <a href="javascript:show('OodleXHandle.html')" class="paragraph">OodleXHandle</a></h2>
</p>
<p><a href="javascript:show('OodleXHandle.html')" class="paragraph">OodleXHandle</a> is the generic handle to an async operation. Every async operation
performed by Oodle corresponds to an <a href="javascript:show('OodleXHandle.html')" class="paragraph">OodleXHandle</a>.
</p>
<p>(See also <a href="javascript:show('Oodle_AboutExt.html')" class="paragraph">About Oodle Ext</a>)
</p>
<p><a href="javascript:show('OodleXHandle.html')" class="paragraph">OodleXHandle</a> is a user-mode waitable handle. It is very light weight; it provides
lock-free status and liveness checks. It provides real waits without polling or "thread thrashing"
or timed Sleeps, all of which hurt thread performance greatly.
</p>
<p>An <a href="javascript:show('OodleXHandle.html')" class="paragraph">OodleXHandle</a> is a "weak reference". That means that the object it refers to can
be deleted at any time, and the handle stays a valid unique reference to that object.
If you try to do an operation (like <a href="javascript:show('OodleX_GetStatus.html')" class="paragraph">OodleX_GetStatus</a>) on an object that was deleted, it will
return OodleXStatus_Invalid.
</p>
<p>In general, Oodle considers a handle that doesn't exist to be equivalent to a handle that's Done.
eg. if you start an operation with a dependency on a handle that doesn't exist, the operation can
start immediately.
</p>
<p>All operations on <a href="javascript:show('OodleXHandle.html')" class="paragraph">OodleXHandle</a> are thread safe and atomic. eg. if two threads try to
delete a handle at the same time, only one of them will get the delete, and the other will
either see the handle before the deletion or after the deletion (not during).
</p>
<p>You can always use <a href="javascript:show('OodleX_Wait.html')" class="paragraph">OodleX_Wait</a> or <a href="javascript:show('OodleX_GetStatus.html')" class="paragraph">OodleX_GetStatus</a> on any handle. You can combine handles from
various subsystems and <a href="javascript:show('OodleX_WaitAll.html')" class="paragraph">OodleX_WaitAll</a> on all of them. There are also subsystem-specific functions,
and it's up to you to use them correctly. For example if you call OodleAsyncGroup_Lock on a
handle that is not an OodleAsyncGroup, it will fail in an undefined way.
</p>
<p>OodleXHandles always have a strict progression through their autoDelete. When they
are first created they are OodleXStatus_Pending. They stay Pending while they are
being run, and then they are set to OodleXStatus_Done or OodleXStatus_Error.
(to check completion you should not use == OodleXStatus_Done, instead use !=
OodleXStatus_Pending). A call to <a href="javascript:show('OodleX_Wait.html')" class="paragraph">OodleX_Wait</a> on a handle will return when status is
not Pending. Then a handle is deleted, and any further checks on it return OodleXStatus_Invalid.
A single handle can never go from Done back to Pending - if there is more work to do,
you must create a new handle for the next bit of work.
</p>
<p>OodleXHandles with a autoDelete of OodleXHandleAutoDelete_Yes may never actually
be set to OodleXStatus_Done, they go directly from OodleXStatus_Pending to deleted.
The state transition from pending to deleted still triggers any waits on that handle.
</p>
<p>Oodle does not delete handles for you (unless you tell it to). <a href="javascript:show('OodleXHandle.html')" class="paragraph">OodleXHandle</a> lifetimes are managed by the client.
When you fire off an async operation,
you often get the option of whether the handle should be "autoDelete" or not. If a handle
is autoDelete, as soon as its status becomes not-Pending (Done or Error), the handle is deleted by the system.
A deleted handle is "not Pending" so it satisfies <a href="javascript:show('OodleX_Wait.html')" class="paragraph">OodleX_Wait</a>, but you can't check if it failed
and you can't get any results from the operation. AutoDelete operations are "fire and forget";
they are convenient because you don't have to free the handle, but can be hard to use safely.
</p>
<p>The other option for handle lifetimes is OodleXHandleAutoDelete_No (the default) ; if a handle is not AutoDelete,
then at some point you must free it. This allows you to get results and check for errors before
it is deleted. The most common way to delete a handle is via <a href="javascript:show('OodleX_Wait.html')" class="paragraph">OodleX_Wait</a> with OodleXHandleDeleteIfDone_Yes.
The other standard way is via handle-specific completion functions, such as Oodle_CopyFile_Wait_GetResult.
</p>
<p>Deleting handles while they are still pending is undefined in general; it is possible in some
specific situations. (it can be done by calling a Cancel function)
</p>
<p>If handles are not deleted, they will eventually take all the slots in the handle table.
Handle leaks can be found with OodleLeakTrack .
</p>
<p>All OodleXHandles must be able to fit in a static table that is created by OodleInit.
The size is determined by <a href="javascript:show('OodleXInitOptions.html','OodleXInitOptions.html_m_num_handles_log2')" class="paragraph">OodleXInitOptions:m_num_handles_log2</a> (times 2048 since Oodle 2.9.7). If you run out of handles
during execution, Oodle will fail catastrophically. See <a href="javascript:show('Oodle_FAQ_OutOfHandles.html')" class="paragraph">FAQ: I ran out of OodleHandle table slots; what do I do?</a>.<br>&nbsp;<br> <table class=bar> <tr>
<td width=33% align=left><span class='arrowleft'></span><a href="javascript:show('OodleXAPI_Handle.html')" class="paragraph">OodleX async handle operations</a></td><td width=33% align=center><span class='arrowup'></span><a href="javascript:show('OodleXAPI_Handle.html')" class="paragraph">OodleX async handle operations</a></td><td width=33% align=right><span class='arrowright'></span><a href="javascript:show('OODLEX_ASYNC_HANDLE_INVALID.html')" class="paragraph">OODLEX_ASYNC_HANDLE_INVALID</a></td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="Oodle_About_Windows.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>About Oodle on Windows</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "Oodle_About_Windows.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="Oodle_About_Windows.html_backmenu">
<table class=dropmenu>
<tr><td><span class='arrowup'></span>&nbsp;<a href="javascript:show('Oodle_About_Platforms.html')" class="paragraph">About Oodle on Platforms</a></td></tr><tr><td><span class='arrowright'></span>&nbsp;<a href="javascript:show('Oodle_About_PS4.html')" class="paragraph">About Oodle on PS4</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<P>
This section applies to Win32 Platforms. See also <a href="javascript:show('Oodle_About_Windows_UWP.html')" class="paragraph">About Oodle on Windows UWP</a> for UWP / WinRT / Windows App / Phone platforms.
</p>
<p>Oodle on Windows is now built with MSVC 2017. It is compatible with MSVC 2015+.
</p>
<p>Oodle on Windows is shipped as a DLL. This allows it to avoid linker conflicts with your application,
primarily caused by choice of C runtime. Each major rev of Oodle has a new DLL name, so there is no possibility
of importing a DLL version that doesn't match what you app was built with.
To ensure the DLL version matches your app, <a href="javascript:show('OodleX_Init.html')" class="paragraph">OodleX_Init</a> or <a href="javascript:show('Oodle_CheckVersion.html')" class="paragraph">Oodle_CheckVersion</a> check the version number and will fail if they are
incompatible.
</p>
<p>To build with the Oodle DLL on Windows you link your app with just one of these libs :
</p>
<p><div class=prototype>
<PRE>
lib/oo2core_win32.lib
lib/oo2core_win64.lib
lib/oo2ext_win32.lib
lib/oo2ext_win64.lib
</PRE>
</div>
</p>
<p>and ship your app with one of these dll's :
</p>
<p><div class=prototype>
<PRE>
redist/oo2core_##_win32.dll
redist/oo2ext_##_win32.dll
redist/oo2core_##_win64.dll
redist/oo2ext_##_win64.dll
</PRE>
</div>
</p>
<p>Where ## is the major version number of Oodle. The libs are import libs that you link with your game; they know the name of the appropriate
DLL to load. The DLLs in the redist directory may be shipped with your game.
</p>
<p>The debug build of the Oodle DLL is also provided. Generally the release build of Oodle should be linked with all versions of your game (do not link the debug build of Oodle with the
debug build of your game typically). The debug build of Oodle is provided to help you track down problems. Debug versions of the DLLs are
provided in the "redistdebug" directory. These should not be shipped with your game.
</p>
<p><hr>
</p>
<p>static libs on Windows are now provided as an option. These may be incompatible with your build due to
choice of compiler flags. If the static libs are incompatible, please use the DLL option to resolve the
problem. Unfortunately with static libs it is impossible to ensure broad link time compatibility.
</p>
<p>To use the static libs, link with a lib from the "static_lib/" directory.
</p>
<p><hr>
</p>
<p>NOTE! WARNING! IMPORTANT! For users of OodleX DLL :
</p>
<p>On Windows, the oo2ext DLL contains both OodleX and Oodle Core. Don't
link with both oo2core and oo2ext, just one or the other.
</p>
<p>(on all other platforms, oo2ext is an addition to oo2core and you need both if you use
OodleX)
</p>
<p>DO NOT link both core and ext on Windows - if you like Ext it includes a copy of Core.
Additionally linking Core is NOT benign, it will cause Ext to fail to set up the Core plugins consistently.
</p>
<p><hr>
</p>
<p>To build an Oodle Example :
</p>
<p><ul>
<li> use MSVC 2015+
<li> make a new console project for x64, make it empty
<li> add an example cpp file
<li> add the oodle release 64 bit lib , either from lib/ or static_lib/
<li> if you use the DLL import lib, change your run working directory to the redist dir
</ul></p>
<p><hr>
</p>
<p>Oodle assumes that Windows machines have SSE2. Newer processor features are detected dynamically.
</p>
<p><hr>
</p>
<p>The OodleX log file is written to c:\oodlelogs on Windows unless you have set m_OodleInit_Log_FileName.
</p>
<p>NOTE : if you are using Core only on a Microsoft target, note that the default core log function only goes to
OutputDebugString - not stdio - so you may not see any error messages unless you are running in the debugger.
Either use Oodle X or install your own logger to get messages however you want.<br>&nbsp;<br> <table class=bar> <tr>
<td width=33% align=left><span class='arrowleft'></span><a href="javascript:show('Oodle_About_Platforms.html')" class="paragraph">About Oodle on Platforms</a></td><td width=33% align=center><span class='arrowup'></span><a href="javascript:show('Oodle_About_Platforms.html')" class="paragraph">About Oodle on Platforms</a></td><td width=33% align=right><span class='arrowright'></span><a href="javascript:show('Oodle_About_Windows_UWP.html')" class="paragraph">About Oodle on Windows UWP</a></td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="Oodle_FAQ_MemoryUse.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>FAQ: How much memory do the Oodle compressors use ?</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "Oodle_FAQ_MemoryUse.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="Oodle_FAQ_MemoryUse.html_backmenu">
<table class=dropmenu>
<tr><td><span class='arrowleft'></span>&nbsp;<a href="javascript:show('Oodle_FAQ_limit_encoder_memory_use.html')" class="paragraph">FAQ: How do I limit the encoder memory use?</a></td></tr><tr><td><span class='arrowup'></span>&nbsp;<a href="javascript:show('Oodle_FAQ.html')" class="paragraph">Frequently Asked Questions</a></td></tr><tr><td><span class='arrowright'></span>&nbsp;<a href="javascript:show('Oodle_FAQ_deprecated_compressors.html')" class="paragraph">FAQ: What are the Oodle deprecated compressors ?</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<P>
The Oodle decoders need an input buffer and an output buffer which you provide.
</p>
<p>In addition to that, they need an OodleLZDecoder object which is a fixed size. The size is
reported by <a href="javascript:show('OodleLZDecoder_MemorySizeNeeded.html')" class="paragraph">OodleLZDecoder_MemorySizeNeeded</a> so you can allocate the memory yourself if you like
(or put it on the stack), and Oodle decoding will then do no allocations. When you call
<a href="javascript:show('OodleLZ_Decompress.html')" class="paragraph">OodleLZ_Decompress</a> without provided memory, this allocation is done for you.
</p>
<p>(The input &amp; output buffer can be circular to reduce memory use if you are streaming a file
through the decoder without ever holding the whole compressed or decompressed file in memory,
but that's not recommended for normal use as it reduces performance)
</p>
<p>The amount of memory needed to decode each <a href="javascript:show('OodleLZ_Compressor.html')" class="paragraph">OodleLZ_Compressor</a> is different.
</p>
<p>For Kraken, Mermaid, Selkie &amp; Leviathan the current (2.7) <a href="javascript:show('OodleLZDecoder_MemorySizeNeeded.html')" class="paragraph">OodleLZDecoder_MemorySizeNeeded</a> is
442552 bytes (but don't hard code that value, it could change!)
</p>
<p>This Decoder object scratch is used during the decode call, but not retained. So you can reuse
the same memory for an unrelated (but not simultaneous on another thread) decode.
</p>
<p>The decoder object memory can be passed in to <a href="javascript:show('OodleLZ_Decompress.html')" class="paragraph">OodleLZ_Decompress</a> using the <i>decoderMemory</i>
and <i>decoderMemorySize</i> arguments. If you pass in this memory, <a href="javascript:show('OodleLZ_Decompress.html')" class="paragraph">OodleLZ_Decompress</a> will do no
allocations.
</p>
<p>The memory use needed for <b>encoding</b> is a different story.
</p>
<p>The memory use for encoding generally goes up at higher compression levels. It can be quite
small at levels Fast and VeryFast, and can be quite high at levels Optimal2 and higher.
It's always recommended to run the Optimal encoders in 64-bit on machines with plenty of RAM
(at least 4 GB and ideally 8 GB).
</p>
<p>The encoders now accept passed-in memory which they will use before trying to allocate. If they
run out of the scratch you passed in, they will call the installed Malloc and expect to get memory
back from it. They do not handle Malloc failure gracefully. You should always provide a plugin
allocator even if you expect it not to be used.
</p>
<p>See <a href="javascript:show('Oodle_FAQ_limit_encoder_memory_use.html')" class="paragraph">FAQ: How do I limit the encoder memory use?</a><br>&nbsp;<br> <table class=bar> <tr>
<td width=33% align=left><span class='arrowleft'></span><a href="javascript:show('Oodle_FAQ_limit_encoder_memory_use.html')" class="paragraph">FAQ: How do I limit the encoder memory use?</a></td><td width=33% align=center><span class='arrowup'></span><a href="javascript:show('Oodle_FAQ.html')" class="paragraph">Frequently Asked Questions</a></td><td width=33% align=right><span class='arrowright'></span><a href="javascript:show('Oodle_FAQ_deprecated_compressors.html')" class="paragraph">FAQ: What are the Oodle deprecated compressors ?</a></td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="OODLEX_ASYNC_HANDLE_PENDING.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>OODLEX_ASYNC_HANDLE_PENDING</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "OODLEX_ASYNC_HANDLE_PENDING.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="OODLEX_ASYNC_HANDLE_PENDING.html_backmenu">
<table class=dropmenu>
<tr><td><span class='arrowleft'></span>&nbsp;<a href="javascript:show('OODLEX_ASYNC_HANDLE_INVALID.html')" class="paragraph">OODLEX_ASYNC_HANDLE_INVALID</a></td></tr><tr><td><span class='arrowright'></span>&nbsp;<a href="javascript:show('OODLEX_ASYNC_HANDLE_DONE.html')" class="paragraph">OODLEX_ASYNC_HANDLE_DONE</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<div class=prototype><div class=prototype_header>// Preprocessor definition:</div><pre><span class=prototype_type>#define</span> <a href="javascript:show('OODLEX_ASYNC_HANDLE_PENDING.html')">OODLEX_ASYNC_HANDLE_PENDING</a> ((<span class=prototype_type><a href="javascript:show('OodleXHandle.html')" class="blue">OodleXHandle</a></span>)0x0000000000000001ULL)</pre></div><div class=discussion_heading>Discussion</div> OodleXHandle to a special always-pending handle. This is for Oodle internal use only.
Calls to <a href="javascript:show('OodleX_GetStatus.html')" class="paragraph">OodleX_GetStatus</a> on this handle value will return &amp;OodleXStatus_Pending.
This is designed for use with OodleAsyncGroup. See OodleAsyncGroup_ChangePending.
Calling <a href="javascript:show('OodleX_Wait.html')" class="paragraph">OodleX_Wait</a> on this handle is a deadlock.
This handle must not be deleted! Do not call <a href="javascript:show('OodleX_Wait.html')" class="paragraph">OodleX_Wait</a> on it with deleteIfDone = true.
<br>&nbsp;<br> <table class=bar> <tr>
<td width=33% align=left><span class='arrowleft'></span><a href="javascript:show('OODLEX_ASYNC_HANDLE_INVALID.html')" class="paragraph">OODLEX_ASYNC_HANDLE_INVALID</a></td><td width=33% align=center><span class='arrowup'></span><a href="javascript:show('OodleXAPI_Handle.html')" class="paragraph">OodleX async handle operations</a></td><td width=33% align=right><span class='arrowright'></span><a href="javascript:show('OODLEX_ASYNC_HANDLE_DONE.html')" class="paragraph">OODLEX_ASYNC_HANDLE_DONE</a></td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="OodleXMalloc_About.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>About OodleXMalloc</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "OodleXMalloc_About.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="OodleXMalloc_About.html_backmenu">
<table class=dropmenu>
<tr><td><span class='arrowup'></span>&nbsp;<a href="javascript:show('OodleXAPI_Malloc.html')" class="paragraph">OodleX Memory Allocators</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<P>
<h2> About <a href="javascript:show('OodleXMalloc.html')" class="paragraph">OodleXMalloc</a></h2>
</p>
<p><a href="javascript:show('OodleXMalloc.html')" class="paragraph">OodleXMalloc</a> is the allocator used internally by OodleX to allocate memory.
</p>
<p>NOTE : if you use Oodle Ext , <a href="javascript:show('OodleXMalloc.html')" class="paragraph">OodleXMalloc</a> must be initialized for OodleX internal use. If you use Oodle Core, you do not need to use <a href="javascript:show('OodleXMalloc.html')" class="paragraph">OodleXMalloc</a>, you may plug in your own malloc. You cannot use your own malloc for Oodle Core if you are using OodleX - they cannot use different allocators. See <a href="javascript:show('OodleAPI_OodleCore_Plugins.html')" class="paragraph">Core plugins</a> if you only need to change the Oodle Core malloc.
</p>
<p>You may wish to point OodleX at your own allocator. This is done by installing an <a href="javascript:show('OodleXMallocVTable.html')" class="paragraph">OodleXMallocVTable</a> in <a href="javascript:show('OodleX_Init.html')" class="paragraph">OodleX_Init</a>.
</p>
<p>The OodleX allocator provides an implementation for the malloc needed by Oodle Core. It also adds functionality for doing IO-aligned allocations (required for async IO on some platforms).
</p>
<p>Most of the low-level Oodle Core runtime calls (like <a href="javascript:show('OodleLZDecoder_Create.html')" class="paragraph">OodleLZDecoder_Create</a>) can be optionally passed in
pre-allocated memory so that they don't do any allocations at all.
</p>
<p>Sometimes OodleX does an allocation for you and passes back the pointer, in which case
you must free it with <a href="javascript:show('OodleXFree.html')" class="paragraph">OodleXFree</a>.
</p>
<p>There are two types of memory used in OodleX :
</p>
<p><ul>
<li> Normal general purpose memory, as allocated by <a href="javascript:show('OodleXMalloc.html')" class="paragraph">OodleXMalloc</a> / <a href="javascript:show('OodleXFree.html')" class="paragraph">OodleXFree</a>
</ul></p>
<p><ul>
<li> IO-aligned memory, as allocated by <a href="javascript:show('OodleXMalloc_IOAligned.html')" class="paragraph">OodleXMalloc_IOAligned</a> / <a href="javascript:show('OodleXFree_IOAligned.html')" class="paragraph">OodleXFree_IOAligned</a> ; this is just system memory, but
aligned to <a href="javascript:show('OODLEX_IO_MAX_ALIGNMENT.html')" class="paragraph">OODLEX_IO_MAX_ALIGNMENT</a>
</ul></p>
<p>The low level async IO systems (primarily OodleXIOQ ; see <a href="javascript:show('OodleXIOQ_About.html')" class="paragraph">About OodleIOQ</a> ) require IO-aligned memory. You do not necessarily
have to use <a href="javascript:show('OodleXMalloc_IOAligned.html')" class="paragraph">OodleXMalloc_IOAligned</a> to get this memory, you can use your own malloc, but then you must ensure <a href="javascript:show('OODLEX_IO_MAX_ALIGNMENT.html')" class="paragraph">OODLEX_IO_MAX_ALIGNMENT</a>.
If you ask OodleX to do the allocation for you (eg. by calling something like <a href="javascript:show('OodleXIOQ_OpenAndReadMallocWholeFile_Async.html')" class="paragraph">OodleXIOQ_OpenAndReadMallocWholeFile_Async</a>), then
you must free the pointer with <a href="javascript:show('OodleXFree_IOAligned.html')" class="paragraph">OodleXFree_IOAligned</a>.
</p>
<p>If you don't provide an allocator, OodleX will install its own, which calls through to the low level system allocator.
</p>
<p>OodleX expects malloc to never fail. It doesn't necessarily return clean errors if it runs out of memory deep in a function.
If the installed <a href="javascript:show('OodleXMalloc.html')" class="paragraph">OodleXMalloc</a> returns NULL, then OodleX calls the <a href="javascript:show('OodleXMallocFailedHandler.html')" class="paragraph">OodleXMallocFailedHandler</a> that's set by <a href="javascript:show('OodleXMalloc_SetFailedHandler.html')" class="paragraph">OodleXMalloc_SetFailedHandler</a>.
In the FailedHandler you could abort your game, or try to free up memory, and then return true, in which case OodleX will try the
allocation again.
</p>
<p>For clients interested in replacing <a href="javascript:show('OodleXMalloc.html')" class="paragraph">OodleXMalloc</a> with their own implementation, read on.
</p>
<p>All OodleX allocations go through an <a href="javascript:show('OodleXMallocVTable.html')" class="paragraph">OodleXMallocVTable</a>. To install your own allocator, you must implement the functions needed and
fill out an <a href="javascript:show('OodleXMallocVTable.html')" class="paragraph">OodleXMallocVTable</a> with pointers to your functions. Then set <a href="javascript:show('OodleXInitOptions.html','OodleXInitOptions.html_m_pBaseVTable')" class="paragraph">OodleXInitOptions:m_pBaseVTable</a> to your own VTable
before calling <a href="javascript:show('OodleX_Init.html')" class="paragraph">OodleX_Init</a>. Generally you don't want to change the installed Malloc VTable between the calls to <a href="javascript:show('OodleX_Init.html')" class="paragraph">OodleX_Init</a> and
<a href="javascript:show('OodleX_Shutdown.html')" class="paragraph">OodleX_Shutdown</a> - you should install one in Init and not change it.
</p>
<p>By default, <a href="javascript:show('OodleXInitOptions.html')" class="paragraph">OodleXInitOptions</a> has m_OodleInit_LockFreePageAllocator set to true; that puts the lock free page allocator on top of your
allocator. If you don't want that, then set it to false.
</p>
<p><a href="javascript:show('OodleXMalloc.html')" class="paragraph">OodleXMalloc</a> works by calling OodleXMallocCall on the global installed VTable. OodleXMallocCall can be used to invoke a malloc from any
vtable.
</p>
<p>See <a href="javascript:show('OodleXMallocVTable.html')" class="paragraph">OodleXMallocVTable</a> for notes on how each function you provide must behave.
</p>
<p>The functions you provide must all be thread safe.
</p>
<p>One note on m_pMallocBig : you have choice about how to implement this. You can just do a malloc that provides memory aligned
to <a href="javascript:show('OODLEX_IO_MAX_ALIGNMENT.html')" class="paragraph">OODLEX_IO_MAX_ALIGNMENT</a>. If you do that, then <a href="javascript:show('OodleXMalloc_IOAligned.html')" class="paragraph">OodleXMalloc_IOAligned</a> will simply call directly to your m_pMallocBig.
Alternatively, m_pMallocBig can be the system large page alloc (eg. on Windows it would be VirtualAlloc).
If you do that, then <a href="javascript:show('OodleXMalloc_IOAligned.html')" class="paragraph">OodleXMalloc_IOAligned</a> will allocate from portions of the "Big" pages.
</p>
<p>The default <a href="javascript:show('OodleXMalloc.html')" class="paragraph">OodleXMalloc</a> sets m_pBaseVTable to the OS allocators (not clib's malloc/free, but the lower level allocators; for
example on Windows it uses HeapAlloc for m_pMalloc and VirtualAlloc for m_pMallocBig). The default then also has m_OodleInit_LockFreePageAllocator
set to true, which creates a layered <a href="javascript:show('OodleXMallocVTable.html')" class="paragraph">OodleXMallocVTable</a> which uses its own lock-free page allocator for small allocs, and passes through
large allocs to the base VTable (the OS allocators).<br>&nbsp;<br> <table class=bar> <tr>
<td width=33% align=left><span class='arrowleft'></span><a href="javascript:show('OodleXAPI_Malloc.html')" class="paragraph">OodleX Memory Allocators</a></td><td width=33% align=center><span class='arrowup'></span><a href="javascript:show('OodleXAPI_Malloc.html')" class="paragraph">OodleX Memory Allocators</a></td><td width=33% align=right><span class='arrowright'></span><a href="javascript:show('OodleXMalloc_OS_Options.html')" class="paragraph">OodleXMalloc_OS_Options</a></td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="OodleXFileInfo.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>OodleXFileInfo</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "OodleXFileInfo.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="OodleXFileInfo.html_backmenu">
<table class=dropmenu>
<tr><td><span class='arrowleft'></span>&nbsp;<a href="javascript:show('OodleXFileOpsVTable.html')" class="paragraph">OodleXFileOpsVTable</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<div class=prototype><div class=prototype_header>// Structure definition:</div><pre><span class=prototype_type>struct</span> <a href="javascript:show('OodleXFileInfo.html')">OodleXFileInfo</a>
{
&nbsp;&nbsp;&nbsp;&nbsp;OO_U32 flags;
&nbsp;&nbsp;&nbsp;&nbsp;OO_U32 pad;
&nbsp;&nbsp;&nbsp;&nbsp;OO_S64 size;
&nbsp;&nbsp;&nbsp;&nbsp;OO_U64 modTime;
};
</pre></div><div class=discussion_heading>Members</div> <table> <tr> <td style='vertical-align: top;' class=paramname><a id="OodleXFileInfo.html_flags" class=nohover>flags</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> logical or of <a href="javascript:show('OODLEX_FILEINFO_FLAGS.html')" class="paragraph">OODLEX_FILEINFO_FLAGS</a></td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXFileInfo.html_size" class=nohover>size</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> file size; <a href="javascript:show('OODLEX_FILE_SIZE_INVALID.html')" class="paragraph">OODLEX_FILE_SIZE_INVALID</a> if unknown</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXFileInfo.html_modTime" class=nohover>modTime</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> modTime on different platforms doesn't necessarilly mean anything, but it should be comparable with integer &lt; and == (on the same platform, not vs. other platforms)</td></tr></table><br>&nbsp;<br> <table class=bar> <tr>
<td width=33% align=left><span class='arrowleft'></span><a href="javascript:show('OodleXFileOpsVTable.html')" class="paragraph">OodleXFileOpsVTable</a></td><td width=33% align=center><span class='arrowup'></span><a href="javascript:show('OodleXAPI_IOQ.html')" class="paragraph">OodleX low level async io</a></td><td width=33% align=right><span class='arrowright'></span><a href="javascript:show('OodleXIOQ_WaitDoneAllPending.html')" class="paragraph">OodleXIOQ_WaitDoneAllPending</a></td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="OODLEX_FILEINFO_FLAG_INVALID.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>OODLEX_FILEINFO_FLAG_INVALID</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "OODLEX_FILEINFO_FLAG_INVALID.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="OODLEX_FILEINFO_FLAG_INVALID.html_backmenu">
<table class=dropmenu>
<tr><td><span class='arrowleft'></span>&nbsp;<a href="javascript:show('OODLEX_BUFFER_SIZE_DEFAULT.html')" class="paragraph">OODLEX_BUFFER_SIZE_DEFAULT</a></td></tr><tr><td><span class='arrowright'></span>&nbsp;<a href="javascript:show('OODLEX_FILEINFO_MODTIME_INVALID.html')" class="paragraph">OODLEX_FILEINFO_MODTIME_INVALID</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<div class=prototype><div class=prototype_header>// Preprocessor definition:</div><pre><span class=prototype_type>#define</span> <a href="javascript:show('OODLEX_FILEINFO_FLAG_INVALID.html')">OODLEX_FILEINFO_FLAG_INVALID</a> ((OO_U32)-1)</pre></div><div class=discussion_heading>Discussion</div> Invalid value for <a href="javascript:show('OodleXFileInfo.html','OodleXFileInfo.html_flags')" class="paragraph">OodleXFileInfo:flags</a> <br>&nbsp;<br> <table class=bar> <tr>
<td width=33% align=left><span class='arrowleft'></span><a href="javascript:show('OODLEX_BUFFER_SIZE_DEFAULT.html')" class="paragraph">OODLEX_BUFFER_SIZE_DEFAULT</a></td><td width=33% align=center><span class='arrowup'></span><a href="javascript:show('OodleXAPI_IOQ.html')" class="paragraph">OodleX low level async io</a></td><td width=33% align=right><span class='arrowright'></span><a href="javascript:show('OODLEX_FILEINFO_MODTIME_INVALID.html')" class="paragraph">OODLEX_FILEINFO_MODTIME_INVALID</a></td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="OodleNetwork1UDP_State_Uncompact_ForVersion.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>OodleNetwork1UDP_State_Uncompact_ForVersion</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "OodleNetwork1UDP_State_Uncompact_ForVersion.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="OodleNetwork1UDP_State_Uncompact_ForVersion.html_backmenu">
<table class=dropmenu>
<tr><td><span class='arrowleft'></span>&nbsp;<a href="javascript:show('OodleNetwork1UDP_State_Compact.html')" class="paragraph">OodleNetwork1UDP_State_Compact</a></td></tr><tr><td><span class='arrowright'></span>&nbsp;<a href="javascript:show('OodleNetwork1UDP_State_Uncompact.html')" class="paragraph">OodleNetwork1UDP_State_Uncompact</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<div class=prototype><div class=prototype_header>// Function prototype:</div><pre>OO_BOOL <span class=prototype_type><a href="javascript:show('OodleNetwork1UDP_State_Uncompact_ForVersion.html')" class="blue">OodleNetwork1UDP_State_Uncompact_ForVersion</a></span>( <span class=prototype_type><a href="javascript:show('OodleNetwork1UDP_State.html')" class="blue">OodleNetwork1UDP_State</a></span> * to,
const <span class=prototype_type><a href="javascript:show('OodleNetwork1UDP_StateCompacted.html')" class="blue">OodleNetwork1UDP_StateCompacted</a></span> * from,
OO_S32 for_oodle_major_version );</pre></div><div class=discussion_heading>Discussion</div>See <a href="javascript:show('OodleNetwork1UDP_State_Uncompact.html')" class="paragraph">OodleNetwork1UDP_State_Uncompact</a>
*
* takes oodle_major_version to target
*
* Oodle Network Compacted state changed from major version 5 to 6 (eg 2.5.5 to 2.6.0)
*
<br>&nbsp;<br> <table class=bar> <tr>
<td width=33% align=left><span class='arrowleft'></span><a href="javascript:show('OodleNetwork1UDP_State_Compact.html')" class="paragraph">OodleNetwork1UDP_State_Compact</a></td><td width=33% align=center><span class='arrowup'></span><a href="javascript:show('OodleAPI_OodleNetwork1.html')" class="paragraph">OodleAPI_OodleNetwork1</a></td><td width=33% align=right><span class='arrowright'></span><a href="javascript:show('OodleNetwork1UDP_State_Uncompact.html')" class="paragraph">OodleNetwork1UDP_State_Uncompact</a></td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="OODLELZ_BLOCK_MAX_COMPLEN.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>OODLELZ_BLOCK_MAX_COMPLEN</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "OODLELZ_BLOCK_MAX_COMPLEN.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="OODLELZ_BLOCK_MAX_COMPLEN.html_backmenu">
<table class=dropmenu>
<tr><td><span class='arrowleft'></span>&nbsp;<a href="javascript:show('OODLELZ_BLOCK_LEN.html')" class="paragraph">OODLELZ_BLOCK_LEN</a></td></tr><tr><td><span class='arrowright'></span>&nbsp;<a href="javascript:show('OODLELZ_QUANTUM_LEN.html')" class="paragraph">OODLELZ_QUANTUM_LEN</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<div class=prototype><div class=prototype_header>// Preprocessor definition:</div><pre><span class=prototype_type>#define</span> <a href="javascript:show('OODLELZ_BLOCK_MAX_COMPLEN.html')">OODLELZ_BLOCK_MAX_COMPLEN</a> (<span class=prototype_type><a href="javascript:show('OODLELZ_BLOCK_LEN.html')" class="blue">OODLELZ_BLOCK_LEN</a></span>+OODLELZ_BLOCK_MAXIMUM_EXPANSION)</pre></div><div class=discussion_heading>Discussion</div> Maximum expansion per <a href="javascript:show('OODLELZ_BLOCK_LEN.html')" class="paragraph">OODLELZ_BLOCK_LEN</a> is 1 byte.
Note that the compressed buffer must be allocated bigger than this (use <a href="javascript:show('OodleLZ_GetCompressedBufferSizeNeeded.html')" class="paragraph">OodleLZ_GetCompressedBufferSizeNeeded</a>)
<br>&nbsp;<br> <table class=bar> <tr>
<td width=33% align=left><span class='arrowleft'></span><a href="javascript:show('OODLELZ_BLOCK_LEN.html')" class="paragraph">OODLELZ_BLOCK_LEN</a></td><td width=33% align=center><span class='arrowup'></span><a href="javascript:show('OodleAPI_LZ_Compressors.html')" class="paragraph">OodleAPI_LZ_Compressors</a></td><td width=33% align=right><span class='arrowright'></span><a href="javascript:show('OODLELZ_QUANTUM_LEN.html')" class="paragraph">OODLELZ_QUANTUM_LEN</a></td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="OodleX_MakeExtensionKey.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>OodleX_MakeExtensionKey</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "OodleX_MakeExtensionKey.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="OodleX_MakeExtensionKey.html_backmenu">
<table class=dropmenu>
<tr><td><span class='arrowleft'></span>&nbsp;<a href="javascript:show('OodleX_GetExtensionKey.html')" class="paragraph">OodleX_GetExtensionKey</a></td></tr><tr><td><span class='arrowright'></span>&nbsp;<a href="javascript:show('OodleX_IOAlignUpS32.html')" class="paragraph">OodleX_IOAlignUpS32</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<div class=prototype><div class=prototype_header>// Function prototype:</div><pre>OO_U32 <span class=prototype_type><a href="javascript:show('OodleX_MakeExtensionKey.html')" class="blue">OodleX_MakeExtensionKey</a></span>( const char * extension );</pre></div><div class=discussion_heading>Discussion</div>convert the file name extension (max 4 chars) into a U32 for fast compares <div class=discussion_heading>Parameters</div> <table> <tr> <td style='vertical-align: top;' class=paramname><a id="OodleX_MakeExtensionKey.html_extension" class=nohover>extension</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> string of an extension, not including period
</td></tr></table><div class=discussion_heading>Return Value</div> <table> <tr> <td style='vertical-align: top;' class=paramname><a id="OodleX_MakeExtensionKey.html_return" class=nohover>return</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> a U32 with up to 4 chars of extension
</td></tr></table><div class=discussion_heading>Discussion</div></p>
<p> The return value is case-insensitive and does not include the dot.
<br>&nbsp;<br> <table class=bar> <tr>
<td width=33% align=left><span class='arrowleft'></span><a href="javascript:show('OodleX_GetExtensionKey.html')" class="paragraph">OodleX_GetExtensionKey</a></td><td width=33% align=center><span class='arrowup'></span><a href="javascript:show('OodleXAPI_Util.html')" class="paragraph">OodleX Utils</a></td><td width=33% align=right><span class='arrowright'></span><a href="javascript:show('OodleX_IOAlignUpS32.html')" class="paragraph">OodleX_IOAlignUpS32</a></td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="OodleLZ_GetCompressedStepForRawStep.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>OodleLZ_GetCompressedStepForRawStep</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "OodleLZ_GetCompressedStepForRawStep.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="OodleLZ_GetCompressedStepForRawStep.html_backmenu">
<table class=dropmenu>
<tr><td><span class='arrowleft'></span>&nbsp;<a href="javascript:show('OodleLZ_GetInPlaceDecodeBufferSize.html')" class="paragraph">OodleLZ_GetInPlaceDecodeBufferSize</a></td></tr><tr><td><span class='arrowright'></span>&nbsp;<a href="javascript:show('OodleLZ_GetAllChunksCompressor.html')" class="paragraph">OodleLZ_GetAllChunksCompressor</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<div class=prototype><div class=prototype_header>// Function prototype:</div><pre>OO_SINTa <span class=prototype_type><a href="javascript:show('OodleLZ_GetCompressedStepForRawStep.html')" class="blue">OodleLZ_GetCompressedStepForRawStep</a></span>( const void * compPtr,
OO_SINTa compAvail,
OO_SINTa startRawPos,
OO_SINTa rawSeekBytes,
OO_SINTa * pEndRawPos OODEFAULT( NULL ),
OO_BOOL * pIndependent OODEFAULT( NULL ) );</pre></div><div class=discussion_heading>Discussion</div>How many bytes to step a compressed pointer to advance a certain uncompressed amount<div class=discussion_heading>Parameters</div> <table> <tr> <td style='vertical-align: top;' class=paramname><a id="OodleLZ_GetCompressedStepForRawStep.html_compPtr" class=nohover>compPtr</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> current compressed pointer
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleLZ_GetCompressedStepForRawStep.html_compAvail" class=nohover>compAvail</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> compressed bytes available at compPtr
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleLZ_GetCompressedStepForRawStep.html_startRawPos" class=nohover>startRawPos</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> initial raw pos (corresponding to compPtr)
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleLZ_GetCompressedStepForRawStep.html_rawSeekBytes" class=nohover>rawSeekBytes</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> the desired step in raw bytes, must be a multiple of <a href="javascript:show('OODLELZ_QUANTUM_LEN.html')" class="paragraph">OODLELZ_QUANTUM_LEN</a> or <a href="javascript:show('OODLELZ_BLOCK_LEN.html')" class="paragraph">OODLELZ_BLOCK_LEN</a>
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleLZ_GetCompressedStepForRawStep.html_pEndRawPos" class=nohover>pEndRawPos</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> (optional) filled with the end raw pos actually reached
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleLZ_GetCompressedStepForRawStep.html_pIndependent" class=nohover>pIndependent</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> (optional) filled with a bool that is true if the current chunk is independent from previous
</td></tr></table><div class=discussion_heading>Return Value</div> <table> <tr> <td style='vertical-align: top;' class=paramname><a id="OodleLZ_GetCompressedStepForRawStep.html_return" class=nohover>return</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> the number of compressed bytes to step
</td></tr></table><div class=discussion_heading>Discussion</div></p>
<p> You should try to use GetCompressedStepForRawStep only at block granularity - both <i>startRawPos</i> and
<i>rawSeekBytes</i> should be multiples of OODLELZ_BLOCK_LEN (except at the end of the stream). As long as you
do that, then <b>pEndRawPos will = startRawPos + rawSeekBytes.
</b></p>
<p> You can use it at quantum granularity (OODLELZ_QUANTUM_LEN), but there are some caveats. You cannot step
quanta inside uncompressed blocks, only in normal LZ blocks. If you try to seek quanta inside an uncompressed
block, you will get <b>pEndRawPos = the end of the block.
</b></p>
<p> You can only resume seeking from <b>pEndRawPos .
</b></p>
<p> returns 0 for valid not-enough-data case
returns -1 for error
</p>
<p> If <i>compAvail</i> is not the whole compressed buffer, then the returned step may be less than the amount you requested.
eg. if the compressed data in <i>compAvail</i> does not contain enough data to make a step of <i>rawSeekBytes</i> a smaller
step will be taken.
NOTE : <b>can</b> return comp step > comp avail !
</p>
<p></p>
<p><br>&nbsp;<br> <table class=bar> <tr>
<td width=33% align=left><span class='arrowleft'></span><a href="javascript:show('OodleLZ_GetInPlaceDecodeBufferSize.html')" class="paragraph">OodleLZ_GetInPlaceDecodeBufferSize</a></td><td width=33% align=center><span class='arrowup'></span><a href="javascript:show('OodleAPI_LZ_Compressors.html')" class="paragraph">OodleAPI_LZ_Compressors</a></td><td width=33% align=right><span class='arrowright'></span><a href="javascript:show('OodleLZ_GetAllChunksCompressor.html')" class="paragraph">OodleLZ_GetAllChunksCompressor</a></td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="index.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>Welcome to Oodle</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "index.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="index.html_backmenu">
<table class=dropmenu>
<tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<P>
<h1> Welcome to Oodle2</h1>
</p>
<p>Oodle is a family of solutions for efficient data compression.
Oodle comes as four separate SDKs :
</p>
<p><ul>
<li> Oodle Data : generic lossless data compression (Kraken, Leviathan, Mermaid, and Selkie)
<li> Oodle Network : packet compression to reduce bandwidth.
<li> Oodle Texture : encoding for BCN block-compressed GPU textures that dramatically reduces their size.
<li> Oodle Lossless Image : specialized encoder for lossless RGB image encoding. Faster and smaller than PNG.
</ul></p>
<p>Oodle Data and Network are described here. Oodle Texture and Oodle Lossless Image are available from RAD.
</p>
<p><h3> <a href="javascript:show('start_OodleData.html')" class="paragraph">Getting Started with Oodle LZ Data Compression</a></h3>
</p>
<p><h3> <a href="javascript:show('start_OodleNetwork.html')" class="paragraph">Getting Started with Oodle Network</a></h3>
</p>
<p>See <a href="javascript:show('Oodle_About.html')" class="paragraph">About Oodle</a> for more. Also check out the <a href="javascript:show('examples.html')" class="paragraph">Examples</a>.
</p>
<p><h2> Table of Contents</h2>
</p>
<p><p><ul class='TOCItem'>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('index.html')">Welcome to Oodle</a></li>
<li><span onClick="HandleClick(event, null); return false" class='TOCGroup closedbook_icon'></span>&nbsp;<a href="javascript:show('Oodle_About.html')">About Oodle</a></li>
<ul style="display:none" class='TOCItem'>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('Oodle_About_Index.html')">Index of Abouts</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('Oodle_About_ozip.html')">About Oodle ozip</a></li>
<li><span onClick="HandleClick(event, null); return false" class='TOCGroup closedbook_icon'></span>&nbsp;<a href="javascript:show('Oodle_About_Platforms.html')">About Oodle on Platforms</a></li>
<ul style="display:none" class='TOCItem'>
<li><span onClick="HandleClick(event, null); return false" class='TOCGroup closedbook_icon'></span>&nbsp;<a href="javascript:show('Oodle_About_Windows.html')">About Oodle on Windows</a></li>
<ul style="display:none" class='TOCItem'>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('Oodle_About_Windows_UWP.html')">About Oodle on Windows UWP</a></li>
</ul>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('Oodle_About_PS4.html')">About Oodle on PS4</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('Oodle_About_Switch.html')">About Oodle on Nintendo Switch</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('Oodle_About_Mac.html')">About Oodle on Mac</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('Oodle_About_XboxOne.html')">About Oodle on Xbox One</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('Oodle_About_Linux.html')">About Oodle on Linux</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('Oodle_About_IOS.html')">About Oodle on IOS</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('Oodle_About_Android.html')">About Oodle on Android</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('Oodle_About_WASM.html')">About Oodle on WASM</a></li>
</ul>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('Oodle_About_Job_Threading_Plugins.html')">About Oodle Job Threading Plugins</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('Oodle_About_Compression_Scratch_Mem.html')">About Compression Scratch Memory</a></li>
</ul>
<li><span onClick="HandleClick(event, null); return false" class='TOCGroup closedbook_icon'></span>&nbsp;<a href="javascript:show('Oodle_FAQ.html')">Frequently Asked Questions</a></li>
<ul style="display:none" class='TOCItem'>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('Oodle_FAQ_OodleLZ_Decompress_Failed.html')">FAQ: OodleLZ_Decompress is failing how do I diagnose it?</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('Oodle_FAQ_UseOodleWithNoAllocator.html')">FAQ: How do I use Oodle with no allocator?</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('Oodle_FAQ_limit_encoder_memory_use.html')">FAQ: How do I limit the encoder memory use?</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('Oodle_FAQ_MemoryUse.html')">FAQ: How much memory do the Oodle compressors use ?</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('Oodle_FAQ_deprecated_compressors.html')">FAQ: What are the Oodle deprecated compressors ?</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('Oodle_FAQ_data_compatibility.html')">FAQ: Do new Oodle versions break data compatibility ?</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('Oodle_FAQ_vs_other_compressors.html')">FAQ: How does OodleLZ compare with other compressors ?</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('Oodle_FAQ_WhichLZ.html')">FAQ: Which OodleLZ should I use?</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('Oodle_FAQ_LZCompareTable.html')">FAQ: What are the speeds and ratios of the OodleLZ compressors and levels?</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('Oodle_FAQ_DecompressingToGraphicsMemoryIsSlow.html')">FAQ: How do I decompress to graphics memory quickly?</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('Oodle_FAQ_HowDoIGetOodleLogs.html')">FAQ: How do I get the Oodle logs?</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('Oodle_FAQ_BadWriteContents.html')">FAQ: I write a file with IOQ but the contents are garbage?</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('Oodle_FAQ_OutOfHandles.html')">FAQ: I ran out of OodleHandle table slots; what do I do?</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('Oodle_FAQ_S64_And_SINTa.html')">FAQ: What is SINTa? How do I load files bigger than 2 GB?</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('Oodle_FAQ_FindingIOProblems.html')">FAQ: My Files aren't loading right and I can't track it down</a></li>
</ul>
<li><span onClick="HandleClick(event, null); return false" class='TOCGroup closedbook_icon'></span>&nbsp;<a href="javascript:show('OodleCoreAPI.html')">Oodle2 Core API Documentation</a></li>
<ul style="display:none" class='TOCItem'>
<li><span onClick="HandleClick(event, null); return false" class='TOCGroup closedbook_icon'></span>&nbsp;<a href="javascript:show('OodleAPI_Base.html')">Core Base</a></li>
<ul style="display:none" class='TOCItem'>
<li><span onClick="HandleClick(event, null); return false" class='TOCGroup closedbook_icon'></span>&nbsp;Defines</li>
<ul style="display:none" class='TOCItem'>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OODLE_MALLOC_MINIMUM_ALIGNMENT.html')">OODLE_MALLOC_MINIMUM_ALIGNMENT</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OODLE_JOB_MAX_DEPENDENCIES.html')">OODLE_JOB_MAX_DEPENDENCIES</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OODLE_JOB_NULL_HANDLE.html')">OODLE_JOB_NULL_HANDLE</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('t_fp_Oodle_Job.html')">t_fp_Oodle_Job</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OODLE_HEADER_VERSION.html')">OODLE_HEADER_VERSION</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleNetworkVersion.html')">OodleNetworkVersion</a></li>
</ul>
<li><span onClick="HandleClick(event, null); return false" class='TOCGroup closedbook_icon'></span>&nbsp;Enumerants</li>
<ul style="display:none" class='TOCItem'>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('Oodle_UsageWarnings.html')">Oodle_UsageWarnings</a></li>
</ul>
<li><span onClick="HandleClick(event, null); return false" class='TOCGroup closedbook_icon'></span>&nbsp;Structures</li>
<ul style="display:none" class='TOCItem'>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleConfigValues.html')">OodleConfigValues</a></li>
</ul>
<li><span onClick="HandleClick(event, null); return false" class='TOCGroup closedbook_icon'></span>&nbsp;Functions</li>
<ul style="display:none" class='TOCItem'>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('Oodle_GetConfigValues.html')">Oodle_GetConfigValues</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('Oodle_SetConfigValues.html')">Oodle_SetConfigValues</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('Oodle_SetUsageWarnings.html')">Oodle_SetUsageWarnings</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('Oodle_CheckVersion.html')">Oodle_CheckVersion</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('Oodle_LogHeader.html')">Oodle_LogHeader</a></li>
</ul>
<li><span onClick="HandleClick(event, null); return false" class='TOCGroup closedbook_icon'></span>&nbsp;Typedefs</li>
<ul style="display:none" class='TOCItem'>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('t_OodleFPVoidVoid.html')">t_OodleFPVoidVoid</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('t_OodleFPVoidVoidStar.html')">t_OodleFPVoidVoidStar</a></li>
</ul>
</ul>
<li><span onClick="HandleClick(event, null); return false" class='TOCGroup closedbook_icon'></span>&nbsp;<a href="javascript:show('OodleAPI_OodleCore_Plugins.html')">Core plugins</a></li>
<ul style="display:none" class='TOCItem'>
<li><span onClick="HandleClick(event, null); return false" class='TOCGroup closedbook_icon'></span>&nbsp;Functions</li>
<ul style="display:none" class='TOCItem'>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleCore_Plugins_SetAllocators.html')">OodleCore_Plugins_SetAllocators</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleCore_Plugins_SetJobSystem.html')">OodleCore_Plugins_SetJobSystem</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleCore_Plugins_SetJobSystemAndCount.html')">OodleCore_Plugins_SetJobSystemAndCount</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleCore_Plugins_SetPrintf.html')">OodleCore_Plugins_SetPrintf</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleCore_Plugins_SetAssertion.html')">OodleCore_Plugins_SetAssertion</a></li>
</ul>
<li><span onClick="HandleClick(event, null); return false" class='TOCGroup closedbook_icon'></span>&nbsp;Typedefs</li>
<ul style="display:none" class='TOCItem'>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('t_fp_OodleCore_Plugin_MallocAligned.html')">t_fp_OodleCore_Plugin_MallocAligned</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('t_fp_OodleCore_Plugin_Free.html')">t_fp_OodleCore_Plugin_Free</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('t_fp_OodleCore_Plugin_RunJob.html')">t_fp_OodleCore_Plugin_RunJob</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('t_fp_OodleCore_Plugin_WaitJob.html')">t_fp_OodleCore_Plugin_WaitJob</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('t_fp_OodleCore_Plugin_Printf.html')">t_fp_OodleCore_Plugin_Printf</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('t_fp_OodleCore_Plugin_DisplayAssertion.html')">t_fp_OodleCore_Plugin_DisplayAssertion</a></li>
</ul>
</ul>
<li><span onClick="HandleClick(event, null); return false" class='TOCGroup closedbook_icon'></span>&nbsp;<a href="javascript:show('OodleAPI_LZ.html')">Core LZ compression</a></li>
<ul style="display:none" class='TOCItem'>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleLZ_About.html')">About OodleLZ</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleLZ_About_ThreadPhasedDecode.html')">About OodleLZ ThreadPhased Decode</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleLZ_About_Hydra.html')">About OodleLZ Hydra</a></li>
<li><span onClick="HandleClick(event, null); return false" class='TOCGroup closedbook_icon'></span>&nbsp;<a href="javascript:show('OodleAPI_LZ_Compressors.html')">OodleAPI_LZ_Compressors</a></li>
<ul style="display:none" class='TOCItem'>
<li><span onClick="HandleClick(event, null); return false" class='TOCGroup closedbook_icon'></span>&nbsp;Defines</li>
<ul style="display:none" class='TOCItem'>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OODLE_ALLOW_DEPRECATED_COMPRESSORS.html')">OODLE_ALLOW_DEPRECATED_COMPRESSORS</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OODLELZ_LOCALDICTIONARYSIZE_MAX.html')">OODLELZ_LOCALDICTIONARYSIZE_MAX</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OODLELZ_SPACESPEEDTRADEOFFBYTES_DEFAULT.html')">OODLELZ_SPACESPEEDTRADEOFFBYTES_DEFAULT</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OODLELZ_BLOCK_LEN.html')">OODLELZ_BLOCK_LEN</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OODLELZ_BLOCK_MAX_COMPLEN.html')">OODLELZ_BLOCK_MAX_COMPLEN</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OODLELZ_QUANTUM_LEN.html')">OODLELZ_QUANTUM_LEN</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OODLELZ_FAILED.html')">OODLELZ_FAILED</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OODLELZ_SCRATCH_MEM_NO_BOUND.html')">OODLELZ_SCRATCH_MEM_NO_BOUND</a></li>
</ul>
<li><span onClick="HandleClick(event, null); return false" class='TOCGroup closedbook_icon'></span>&nbsp;Enumerants</li>
<ul style="display:none" class='TOCItem'>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleLZ_Verbosity.html')">OodleLZ_Verbosity</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleLZ_Compressor.html')">OodleLZ_Compressor</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleLZ_PackedRawOverlap.html')">OodleLZ_PackedRawOverlap</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleLZ_CheckCRC.html')">OodleLZ_CheckCRC</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleLZ_Profile.html')">OodleLZ_Profile</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleDecompressCallbackRet.html')">OodleDecompressCallbackRet</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleLZ_CompressionLevel.html')">OodleLZ_CompressionLevel</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleLZ_Jobify.html')">OodleLZ_Jobify</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleLZ_Decode_ThreadPhase.html')">OodleLZ_Decode_ThreadPhase</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleLZ_FuzzSafe.html')">OodleLZ_FuzzSafe</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleLZSeekTable_Flags.html')">OodleLZSeekTable_Flags</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleLZ_CompressScratchMemBoundType.html')">OodleLZ_CompressScratchMemBoundType</a></li>
</ul>
<li><span onClick="HandleClick(event, null); return false" class='TOCGroup closedbook_icon'></span>&nbsp;Structures</li>
<ul style="display:none" class='TOCItem'>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleLZ_CompressOptions.html')">OodleLZ_CompressOptions</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleLZ_DecodeSome_Out.html')">OodleLZ_DecodeSome_Out</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleLZDecoder.html')">OodleLZDecoder</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleLZ_SeekTable.html')">OodleLZ_SeekTable</a></li>
</ul>
<li><span onClick="HandleClick(event, null); return false" class='TOCGroup closedbook_icon'></span>&nbsp;Functions</li>
<ul style="display:none" class='TOCItem'>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleLZ_Compress.html')">OodleLZ_Compress</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleLZ_Decompress.html')">OodleLZ_Decompress</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleLZDecoder_Create.html')">OodleLZDecoder_Create</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleLZDecoder_MemorySizeNeeded.html')">OodleLZDecoder_MemorySizeNeeded</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleLZ_ThreadPhased_BlockDecoderMemorySizeNeeded.html')">OodleLZ_ThreadPhased_BlockDecoderMemorySizeNeeded</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleLZDecoder_Destroy.html')">OodleLZDecoder_Destroy</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleLZDecoder_Reset.html')">OodleLZDecoder_Reset</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleLZDecoder_DecodeSome.html')">OodleLZDecoder_DecodeSome</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleLZDecoder_MakeValidCircularWindowSize.html')">OodleLZDecoder_MakeValidCircularWindowSize</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleLZ_MakeSeekChunkLen.html')">OodleLZ_MakeSeekChunkLen</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleLZ_GetNumSeekChunks.html')">OodleLZ_GetNumSeekChunks</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleLZ_GetSeekTableMemorySizeNeeded.html')">OodleLZ_GetSeekTableMemorySizeNeeded</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleLZ_FillSeekTable.html')">OodleLZ_FillSeekTable</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleLZ_CreateSeekTable.html')">OodleLZ_CreateSeekTable</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleLZ_FreeSeekTable.html')">OodleLZ_FreeSeekTable</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleLZ_CheckSeekTableCRCs.html')">OodleLZ_CheckSeekTableCRCs</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleLZ_FindSeekEntry.html')">OodleLZ_FindSeekEntry</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleLZ_GetSeekEntryPackedPos.html')">OodleLZ_GetSeekEntryPackedPos</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleLZ_CompressionLevel_GetName.html')">OodleLZ_CompressionLevel_GetName</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleLZ_Compressor_GetName.html')">OodleLZ_Compressor_GetName</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleLZ_Jobify_GetName.html')">OodleLZ_Jobify_GetName</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleLZ_CompressOptions_GetDefault.html')">OodleLZ_CompressOptions_GetDefault</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleLZ_CompressOptions_Validate.html')">OodleLZ_CompressOptions_Validate</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleLZ_Compressor_UsesWholeBlockQuantum.html')">OodleLZ_Compressor_UsesWholeBlockQuantum</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleLZ_Compressor_UsesLargeWindow.html')">OodleLZ_Compressor_UsesLargeWindow</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleLZ_Compressor_CanDecodeInCircularWindow.html')">OodleLZ_Compressor_CanDecodeInCircularWindow</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleLZ_Compressor_CanDecodeThreadPhased.html')">OodleLZ_Compressor_CanDecodeThreadPhased</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleLZ_Compressor_CanDecodeInPlace.html')">OodleLZ_Compressor_CanDecodeInPlace</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleLZ_Compressor_MustDecodeWithoutResets.html')">OodleLZ_Compressor_MustDecodeWithoutResets</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleLZ_Compressor_CanDecodeFuzzSafe.html')">OodleLZ_Compressor_CanDecodeFuzzSafe</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleLZ_Compressor_RespectsDictionarySize.html')">OodleLZ_Compressor_RespectsDictionarySize</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleLZ_GetCompressScratchMemBound.html')">OodleLZ_GetCompressScratchMemBound</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleLZ_GetCompressScratchMemBoundEx.html')">OodleLZ_GetCompressScratchMemBoundEx</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleLZ_GetCompressedBufferSizeNeeded.html')">OodleLZ_GetCompressedBufferSizeNeeded</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleLZ_GetDecodeBufferSize.html')">OodleLZ_GetDecodeBufferSize</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleLZ_GetInPlaceDecodeBufferSize.html')">OodleLZ_GetInPlaceDecodeBufferSize</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleLZ_GetCompressedStepForRawStep.html')">OodleLZ_GetCompressedStepForRawStep</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleLZ_GetAllChunksCompressor.html')">OodleLZ_GetAllChunksCompressor</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleLZ_GetFirstChunkCompressor.html')">OodleLZ_GetFirstChunkCompressor</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleLZ_GetChunkCompressor.html')">OodleLZ_GetChunkCompressor</a></li>
</ul>
<li><span onClick="HandleClick(event, null); return false" class='TOCGroup closedbook_icon'></span>&nbsp;Typedefs</li>
<ul style="display:none" class='TOCItem'>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleDecompressCallback.html')">OodleDecompressCallback</a></li>
</ul>
</ul>
</ul>
</ul>
<li><span onClick="HandleClick(event, null); return false" class='TOCGroup closedbook_icon'></span>&nbsp;<a href="javascript:show('OodleExtAPI.html')">Oodle2 Ext API Documentation</a></li>
<ul style="display:none" class='TOCItem'>
<li><span onClick="HandleClick(event, null); return false" class='TOCGroup closedbook_icon'></span>&nbsp;<a href="javascript:show('OodleXAPI_LZ.html')">OodleX LZ compression</a></li>
<ul style="display:none" class='TOCItem'>
<li><span onClick="HandleClick(event, null); return false" class='TOCGroup closedbook_icon'></span>&nbsp;<a href="javascript:show('OodleXAPI_LZ_Async.html')">OodleXAPI_LZ_Async</a></li>
<ul style="display:none" class='TOCItem'>
<li><span onClick="HandleClick(event, null); return false" class='TOCGroup closedbook_icon'></span>&nbsp;Structures</li>
<ul style="display:none" class='TOCItem'>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleDecompressCallback_WriteFile_Data.html')">OodleDecompressCallback_WriteFile_Data</a></li>
</ul>
<li><span onClick="HandleClick(event, null); return false" class='TOCGroup closedbook_icon'></span>&nbsp;Functions</li>
<ul style="display:none" class='TOCItem'>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleXLZ_Decompress_ThreadPhased_Narrow_Async.html')">OodleXLZ_Decompress_ThreadPhased_Narrow_Async</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleXLZ_Decompress_Narrow_Async.html')">OodleXLZ_Decompress_Narrow_Async</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleXLZ_ReadAndDecompress_Wide_Async.html')">OodleXLZ_ReadAndDecompress_Wide_Async</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleXLZ_Decompress_Wide_Async.html')">OodleXLZ_Decompress_Wide_Async</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleXLZ_Decompress_MakeSeekTable_Wide_Async.html')">OodleXLZ_Decompress_MakeSeekTable_Wide_Async</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleXLZ_Compress_Async.html')">OodleXLZ_Compress_Async</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleXLZ_Compress_Wait_GetResult.html')">OodleXLZ_Compress_Wait_GetResult</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleXLZ_Compress_AsyncAndWait.html')">OodleXLZ_Compress_AsyncAndWait</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleXLZ_ReadAndDecompress_Stream_Async.html')">OodleXLZ_ReadAndDecompress_Stream_Async</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleXDecompressCallback_WriteFile_Data_Init.html')">OodleXDecompressCallback_WriteFile_Data_Init</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleDecompressCallback_WriteFile.html')">OodleDecompressCallback_WriteFile</a></li>
</ul>
</ul>
</ul>
<li><span onClick="HandleClick(event, null); return false" class='TOCGroup closedbook_icon'></span>&nbsp;<a href="javascript:show('OodleXAPI_Init.html')">OodleX Startup and Shutdown</a></li>
<ul style="display:none" class='TOCItem'>
<li><span onClick="HandleClick(event, null); return false" class='TOCGroup closedbook_icon'></span>&nbsp;Defines</li>
<ul style="display:none" class='TOCItem'>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OODLE_WORKERS_COUNT_ALL_PHYSICAL_CORES.html')">OODLE_WORKERS_COUNT_ALL_PHYSICAL_CORES</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OODLE_WORKERS_COUNT_ALL_HYPER_CORES.html')">OODLE_WORKERS_COUNT_ALL_HYPER_CORES</a></li>
</ul>
<li><span onClick="HandleClick(event, null); return false" class='TOCGroup closedbook_icon'></span>&nbsp;Enumerants</li>
<ul style="display:none" class='TOCItem'>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleX_Init_GetDefaults_DebugSystems.html')">OodleX_Init_GetDefaults_DebugSystems</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleX_Init_GetDefaults_Threads.html')">OodleX_Init_GetDefaults_Threads</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleX_Shutdown_LogLeaks.html')">OodleX_Shutdown_LogLeaks</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleX_Shutdown_DebugBreakOnLeaks.html')">OodleX_Shutdown_DebugBreakOnLeaks</a></li>
</ul>
<li><span onClick="HandleClick(event, null); return false" class='TOCGroup closedbook_icon'></span>&nbsp;Structures</li>
<ul style="display:none" class='TOCItem'>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleXInitOptions.html')">OodleXInitOptions</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleXConfigValues.html')">OodleXConfigValues</a></li>
</ul>
<li><span onClick="HandleClick(event, null); return false" class='TOCGroup closedbook_icon'></span>&nbsp;Functions</li>
<ul style="display:none" class='TOCItem'>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleX_Init_ThreadProfilerInit.html')">OodleX_Init_ThreadProfilerInit</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleX_Init_GetDefaults.html')">OodleX_Init_GetDefaults</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleX_Init_GetDefaults_Minimal.html')">OodleX_Init_GetDefaults_Minimal</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleX_Init.html')">OodleX_Init</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleX_Init_Default.html')">OodleX_Init_Default</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleX_LogSystemInfo.html')">OodleX_LogSystemInfo</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleX_Shutdown.html')">OodleX_Shutdown</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleX_Init_NoThreads.html')">OodleX_Init_NoThreads</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleX_Shutdown_NoThreads.html')">OodleX_Shutdown_NoThreads</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleX_GetConfigValues.html')">OodleX_GetConfigValues</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleX_SetConfigValues.html')">OodleX_SetConfigValues</a></li>
</ul>
</ul>
<li><span onClick="HandleClick(event, null); return false" class='TOCGroup closedbook_icon'></span>&nbsp;<a href="javascript:show('OodleXAPI_Malloc.html')">OodleX Memory Allocators</a></li>
<ul style="display:none" class='TOCItem'>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleXMalloc_About.html')">About OodleXMalloc</a></li>
<li><span onClick="HandleClick(event, null); return false" class='TOCGroup closedbook_icon'></span>&nbsp;Enumerants</li>
<ul style="display:none" class='TOCItem'>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleXMalloc_OS_Options.html')">OodleXMalloc_OS_Options</a></li>
</ul>
<li><span onClick="HandleClick(event, null); return false" class='TOCGroup closedbook_icon'></span>&nbsp;Structures</li>
<ul style="display:none" class='TOCItem'>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleXMallocVTable.html')">OodleXMallocVTable</a></li>
</ul>
<li><span onClick="HandleClick(event, null); return false" class='TOCGroup closedbook_icon'></span>&nbsp;Functions</li>
<ul style="display:none" class='TOCItem'>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleXMalloc_InstallVTable.html')">OodleXMalloc_InstallVTable</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleXMalloc_SetFailedHandler.html')">OodleXMalloc_SetFailedHandler</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleXMalloc.html')">OodleXMalloc</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleXMallocAligned.html')">OodleXMallocAligned</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleXFree.html')">OodleXFree</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleXFreeSized.html')">OodleXFreeSized</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleXMallocBigAlignment.html')">OodleXMallocBigAlignment</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleXMallocBig.html')">OodleXMallocBig</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleXFreeBig.html')">OodleXFreeBig</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleXMalloc_ValidatePointer.html')">OodleXMalloc_ValidatePointer</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleXMalloc_IOAligned.html')">OodleXMalloc_IOAligned</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleXFree_IOAligned.html')">OodleXFree_IOAligned</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleXMalloc_GetVTable_Clib.html')">OodleXMalloc_GetVTable_Clib</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleXMalloc_GetVTable_OS.html')">OodleXMalloc_GetVTable_OS</a></li>
</ul>
<li><span onClick="HandleClick(event, null); return false" class='TOCGroup closedbook_icon'></span>&nbsp;Typedefs</li>
<ul style="display:none" class='TOCItem'>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleXMallocFailedHandler.html')">OodleXMallocFailedHandler</a></li>
</ul>
</ul>
<li><span onClick="HandleClick(event, null); return false" class='TOCGroup closedbook_icon'></span>&nbsp;<a href="javascript:show('OodleXAPI_Handle.html')">OodleX async handle operations</a></li>
<ul style="display:none" class='TOCItem'>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleXHandle_About.html')">About OodleXHandle</a></li>
<li><span onClick="HandleClick(event, null); return false" class='TOCGroup closedbook_icon'></span>&nbsp;Defines</li>
<ul style="display:none" class='TOCItem'>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OODLEX_ASYNC_HANDLE_INVALID.html')">OODLEX_ASYNC_HANDLE_INVALID</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OODLEX_ASYNC_HANDLE_PENDING.html')">OODLEX_ASYNC_HANDLE_PENDING</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OODLEX_ASYNC_HANDLE_DONE.html')">OODLEX_ASYNC_HANDLE_DONE</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OODLEX_ASYNC_HANDLE_ERROR.html')">OODLEX_ASYNC_HANDLE_ERROR</a></li>
</ul>
<li><span onClick="HandleClick(event, null); return false" class='TOCGroup closedbook_icon'></span>&nbsp;Enumerants</li>
<ul style="display:none" class='TOCItem'>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleXPriority.html')">OodleXPriority</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleXAsyncSelect.html')">OodleXAsyncSelect</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleXStatus.html')">OodleXStatus</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleXHandleAutoDelete.html')">OodleXHandleAutoDelete</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleXHandleKickDelayed.html')">OodleXHandleKickDelayed</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleXHandleDeleteIfDone.html')">OodleXHandleDeleteIfDone</a></li>
</ul>
<li><span onClick="HandleClick(event, null); return false" class='TOCGroup closedbook_icon'></span>&nbsp;Functions</li>
<ul style="display:none" class='TOCItem'>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleX_GetStatus.html')">OodleX_GetStatus</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleX_Wait.html')">OodleX_Wait</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleX_WaitAll.html')">OodleX_WaitAll</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleX_WaitDoneAllPending.html')">OodleX_WaitDoneAllPending</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleX_SetHandleAutoDelete.html')">OodleX_SetHandleAutoDelete</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleX_GetAvailableAsyncSelect.html')">OodleX_GetAvailableAsyncSelect</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleXHandleEvent_Alloc.html')">OodleXHandleEvent_Alloc</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleXHandleEvent_SetDone.html')">OodleXHandleEvent_SetDone</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleXHandleEvent_SetError.html')">OodleXHandleEvent_SetError</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleXHandleCountdown_Alloc.html')">OodleXHandleCountdown_Alloc</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleXHandleCountdown_Decrement.html')">OodleXHandleCountdown_Decrement</a></li>
</ul>
<li><span onClick="HandleClick(event, null); return false" class='TOCGroup closedbook_icon'></span>&nbsp;Typedefs</li>
<ul style="display:none" class='TOCItem'>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleXHandle.html')">OodleXHandle</a></li>
</ul>
</ul>
<li><span onClick="HandleClick(event, null); return false" class='TOCGroup closedbook_icon'></span>&nbsp;<a href="javascript:show('OodleXAPI_Threading.html')">OodleX threading util</a></li>
<ul style="display:none" class='TOCItem'>
<li><span onClick="HandleClick(event, null); return false" class='TOCGroup closedbook_icon'></span>&nbsp;Functions</li>
<ul style="display:none" class='TOCItem'>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleX_Semaphore_Post.html')">OodleX_Semaphore_Post</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleX_Semaphore_Wait.html')">OodleX_Semaphore_Wait</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleX_CreateThread.html')">OodleX_CreateThread</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleX_WaitAndDestroyThread.html')">OodleX_WaitAndDestroyThread</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleX_ReleaseThreadTLS.html')">OodleX_ReleaseThreadTLS</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleX_CorePlugin_RunJob.html')">OodleX_CorePlugin_RunJob</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleX_CorePlugin_WaitJob.html')">OodleX_CorePlugin_WaitJob</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleX_GetNumWorkerThreads.html')">OodleX_GetNumWorkerThreads</a></li>
</ul>
<li><span onClick="HandleClick(event, null); return false" class='TOCGroup closedbook_icon'></span>&nbsp;Typedefs</li>
<ul style="display:none" class='TOCItem'>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleX_Semaphore.html')">OodleX_Semaphore</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleX_ThreadFunc.html')">OodleX_ThreadFunc</a></li>
</ul>
</ul>
<li><span onClick="HandleClick(event, null); return false" class='TOCGroup closedbook_icon'></span>&nbsp;<a href="javascript:show('OodleXAPI_IOQ.html')">OodleX low level async io</a></li>
<ul style="display:none" class='TOCItem'>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleXIOQ_About.html')">About OodleIOQ</a></li>
<li><span onClick="HandleClick(event, null); return false" class='TOCGroup closedbook_icon'></span>&nbsp;Defines</li>
<ul style="display:none" class='TOCItem'>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OODLEX_IO_MAX_ALIGNMENT.html')">OODLEX_IO_MAX_ALIGNMENT</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OODLEX_BUFFER_SIZE_DEFAULT.html')">OODLEX_BUFFER_SIZE_DEFAULT</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OODLEX_FILEINFO_FLAG_INVALID.html')">OODLEX_FILEINFO_FLAG_INVALID</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OODLEX_FILEINFO_MODTIME_INVALID.html')">OODLEX_FILEINFO_MODTIME_INVALID</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OODLEX_FILE_SIZE_INVALID.html')">OODLEX_FILE_SIZE_INVALID</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OODLEX_FILE_OPEN_NO_RESERVE_SIZE.html')">OODLEX_FILE_OPEN_NO_RESERVE_SIZE</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OODLEX_FILE_CLOSE_NO_TRUNCATE_SIZE.html')">OODLEX_FILE_CLOSE_NO_TRUNCATE_SIZE</a></li>
</ul>
<li><span onClick="HandleClick(event, null); return false" class='TOCGroup closedbook_icon'></span>&nbsp;Enumerants</li>
<ul style="display:none" class='TOCItem'>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleXCopyFileFlags.html')">OodleXCopyFileFlags</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleFileNotFoundIsAnError.html')">OodleFileNotFoundIsAnError</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OODLEX_FILEINFO_FLAGS.html')">OODLEX_FILEINFO_FLAGS</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleXError.html')">OodleXError</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleXFileMode.html')">OodleXFileMode</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleXFileOpenFlags.html')">OodleXFileOpenFlags</a></li>
</ul>
<li><span onClick="HandleClick(event, null); return false" class='TOCGroup closedbook_icon'></span>&nbsp;Structures</li>
<ul style="display:none" class='TOCItem'>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleXFileOpsVTable.html')">OodleXFileOpsVTable</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleXFileInfo.html')">OodleXFileInfo</a></li>
</ul>
<li><span onClick="HandleClick(event, null); return false" class='TOCGroup closedbook_icon'></span>&nbsp;Functions</li>
<ul style="display:none" class='TOCItem'>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleXIOQ_WaitDoneAllPending.html')">OodleXIOQ_WaitDoneAllPending</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleXIOQ_KickAnyDelayed.html')">OodleXIOQ_KickAnyDelayed</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleXIOQ_GetStatus.html')">OodleXIOQ_GetStatus</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleXIOQ_GetErrorDetails.html')">OodleXIOQ_GetErrorDetails</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleXIOQ_GetErrorEnum.html')">OodleXIOQ_GetErrorEnum</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleXIOQ_LogError.html')">OodleXIOQ_LogError</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleXIOQ_Wait.html')">OodleXIOQ_Wait</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleXIOQ_GetInfo.html')">OodleXIOQ_GetInfo</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleXIOQ_Wait_GetInfo.html')">OodleXIOQ_Wait_GetInfo</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleXIOQ_GetLastPendingOpOnFile.html')">OodleXIOQ_GetLastPendingOpOnFile</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleXIOQ_GetName.html')">OodleXIOQ_GetName</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleXIOQ_GetLastError.html')">OodleXIOQ_GetLastError</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleXIOQ_ClearError.html')">OodleXIOQ_ClearError</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleXIOQ_LogLastError.html')">OodleXIOQ_LogLastError</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleXIOQ_GetOSHandle.html')">OodleXIOQ_GetOSHandle</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleXIOQ_SetVTable.html')">OodleXIOQ_SetVTable</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleXIOQ_Fence_Async.html')">OodleXIOQ_Fence_Async</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleXIOQ_OpenForRead_Async.html')">OodleXIOQ_OpenForRead_Async</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleXIOQ_OpenAndRead_Async.html')">OodleXIOQ_OpenAndRead_Async</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleXIOQ_OpenForWriteCreate_Async.html')">OodleXIOQ_OpenForWriteCreate_Async</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleXIOQ_OpenForWriteTempName_Async.html')">OodleXIOQ_OpenForWriteTempName_Async</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleXIOQ_CloseFile_Async.html')">OodleXIOQ_CloseFile_Async</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleXIOQ_CloseFileRename_Async.html')">OodleXIOQ_CloseFileRename_Async</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleXIOQ_Read_Async.html')">OodleXIOQ_Read_Async</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleXIOQ_Write_Async.html')">OodleXIOQ_Write_Async</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleXIOQ_SetFileSize_Async.html')">OodleXIOQ_SetFileSize_Async</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleXIOQ_ReserveFileSizeForWrite_Async.html')">OodleXIOQ_ReserveFileSizeForWrite_Async</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleXIOQ_ForceWriteable_Async.html')">OodleXIOQ_ForceWriteable_Async</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleXIOQ_Delete_Async.html')">OodleXIOQ_Delete_Async</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleXIOQ_Rename_Async.html')">OodleXIOQ_Rename_Async</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleXIOQ_MakeDir_Async.html')">OodleXIOQ_MakeDir_Async</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleXIOQ_FreeBufferIOAligned_Async.html')">OodleXIOQ_FreeBufferIOAligned_Async</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleXIOQ_GetInfoByName_Async.html')">OodleXIOQ_GetInfoByName_Async</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleXIOQ_GetInfoByName_GetResult.html')">OodleXIOQ_GetInfoByName_GetResult</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleXIOQ_SetInfoByName_Async.html')">OodleXIOQ_SetInfoByName_Async</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleXIOQ_ReadMallocWholeFile_Async.html')">OodleXIOQ_ReadMallocWholeFile_Async</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleXIOQ_ReadMallocWholeFile_GetResult.html')">OodleXIOQ_ReadMallocWholeFile_GetResult</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleXIOQ_OpenAndReadMallocWholeFile_Async.html')">OodleXIOQ_OpenAndReadMallocWholeFile_Async</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleXIOQ_OpenAndReadMallocWholeFileAndClose_Async.html')">OodleXIOQ_OpenAndReadMallocWholeFileAndClose_Async</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleXIOQ_OpenWriteWholeFileClose_Async.html')">OodleXIOQ_OpenWriteWholeFileClose_Async</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleXIOQ_OpenWriteWholeFileCloseTempName_Async.html')">OodleXIOQ_OpenWriteWholeFileCloseTempName_Async</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleXIOQ_ReadUnalignedAdjustPointer_Async.html')">OodleXIOQ_ReadUnalignedAdjustPointer_Async</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleXIOQ_MakeAllDirs_Async.html')">OodleXIOQ_MakeAllDirs_Async</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleXIOQ_CopyFile_Async.html')">OodleXIOQ_CopyFile_Async</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleXIOQ_ReadMallocWholeFile_AsyncAndWait.html')">OodleXIOQ_ReadMallocWholeFile_AsyncAndWait</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleXIOQ_WriteWholeFile_AsyncAndWait.html')">OodleXIOQ_WriteWholeFile_AsyncAndWait</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleXIOQ_CopyFile_AsyncAndWait.html')">OodleXIOQ_CopyFile_AsyncAndWait</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleXIOQ_GetInfoByName_AsyncAndWait.html')">OodleXIOQ_GetInfoByName_AsyncAndWait</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleXIOQ_SetInfoByName_AsyncAndWait.html')">OodleXIOQ_SetInfoByName_AsyncAndWait</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleXIOQ_MakeAllDirs_AsyncAndWait.html')">OodleXIOQ_MakeAllDirs_AsyncAndWait</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleXIOQ_Delete_AsyncAndWait.html')">OodleXIOQ_Delete_AsyncAndWait</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleXIOQ_Rename_AsyncAndWait.html')">OodleXIOQ_Rename_AsyncAndWait</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleXIOQ_GetFileSize_AsyncAndWait.html')">OodleXIOQ_GetFileSize_AsyncAndWait</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleXIOQ_NameIsDir_AsyncAndWait.html')">OodleXIOQ_NameIsDir_AsyncAndWait</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleX_GetOSFileOps.html')">OodleX_GetOSFileOps</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleX_GetDefaultFileOps.html')">OodleX_GetDefaultFileOps</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleX_SetDefaultFileOps.html')">OodleX_SetDefaultFileOps</a></li>
</ul>
<li><span onClick="HandleClick(event, null); return false" class='TOCGroup closedbook_icon'></span>&nbsp;Typedefs</li>
<ul style="display:none" class='TOCItem'>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleXIOQFile.html')">OodleXIOQFile</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleXOSFile.html')">OodleXOSFile</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleXOSFileListing.html')">OodleXOSFileListing</a></li>
</ul>
</ul>
<li><span onClick="HandleClick(event, null); return false" class='TOCGroup closedbook_icon'></span>&nbsp;<a href="javascript:show('OodleXAPI_Debug.html')">OodleX Debug aids</a></li>
<ul style="display:none" class='TOCItem'>
<li><span onClick="HandleClick(event, null); return false" class='TOCGroup closedbook_icon'></span>&nbsp;Defines</li>
<ul style="display:none" class='TOCItem'>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleXLog_Printf.html')">OodleXLog_Printf</a></li>
</ul>
<li><span onClick="HandleClick(event, null); return false" class='TOCGroup closedbook_icon'></span>&nbsp;Enumerants</li>
<ul style="display:none" class='TOCItem'>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleXLog_StateFlags.html')">OodleXLog_StateFlags</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleXLog_VerboseLevel.html')">OodleXLog_VerboseLevel</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleXLogCallbackRetRet.html')">OodleXLogCallbackRetRet</a></li>
</ul>
<li><span onClick="HandleClick(event, null); return false" class='TOCGroup closedbook_icon'></span>&nbsp;Functions</li>
<ul style="display:none" class='TOCItem'>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleXLog_SetState.html')">OodleXLog_SetState</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleXLog_SetEcho.html')">OodleXLog_SetEcho</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleXLog_GetEcho.html')">OodleXLog_GetEcho</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleXLog_SetCallback.html')">OodleXLog_SetCallback</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleXLog_GetCallback.html')">OodleXLog_GetCallback</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleXLog_GetVerboseLevel.html')">OodleXLog_GetVerboseLevel</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleXLog_SetVerboseLevel.html')">OodleXLog_SetVerboseLevel</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleXLog_Flush.html')">OodleXLog_Flush</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleXLog_PrintfError.html')">OodleXLog_PrintfError</a></li>
</ul>
<li><span onClick="HandleClick(event, null); return false" class='TOCGroup closedbook_icon'></span>&nbsp;Typedefs</li>
<ul style="display:none" class='TOCItem'>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleXLogCallbackRet.html')">OodleXLogCallbackRet</a></li>
</ul>
</ul>
<li><span onClick="HandleClick(event, null); return false" class='TOCGroup closedbook_icon'></span>&nbsp;<a href="javascript:show('OodleXAPI_Util.html')">OodleX Utils</a></li>
<ul style="display:none" class='TOCItem'>
<li><span onClick="HandleClick(event, null); return false" class='TOCGroup closedbook_icon'></span>&nbsp;Defines</li>
<ul style="display:none" class='TOCItem'>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OODLEX_PATH_DELIM.html')">OODLEX_PATH_DELIM</a></li>
</ul>
<li><span onClick="HandleClick(event, null); return false" class='TOCGroup closedbook_icon'></span>&nbsp;Functions</li>
<ul style="display:none" class='TOCItem'>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleX_GetExtensionKey.html')">OodleX_GetExtensionKey</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleX_MakeExtensionKey.html')">OodleX_MakeExtensionKey</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleX_IOAlignUpS32.html')">OodleX_IOAlignUpS32</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleX_IOAlignUpS64.html')">OodleX_IOAlignUpS64</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleX_IOAlignUpSINTa.html')">OodleX_IOAlignUpSINTa</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleX_IOAlignDownS32.html')">OodleX_IOAlignDownS32</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleX_IOAlignDownS64.html')">OodleX_IOAlignDownS64</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleX_IOAlignDownSINTa.html')">OodleX_IOAlignDownSINTa</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleX_S64_to_SINTa_check.html')">OodleX_S64_to_SINTa_check</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleX_GetSeconds.html')">OodleX_GetSeconds</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleXUtil_ConvertUTF8ToUTF16.html')">OodleXUtil_ConvertUTF8ToUTF16</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleXUtil_ConvertUTF16ToUTF8.html')">OodleXUtil_ConvertUTF16ToUTF8</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleX_CombinePaths.html')">OodleX_CombinePaths</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleX_GetOSCwd.html')">OodleX_GetOSCwd</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleX_PrefixOSCwd.html')">OodleX_PrefixOSCwd</a></li>
</ul>
</ul>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('Oodle_AboutExt.html')">About Oodle Ext</a></li>
</ul>
<li><span onClick="HandleClick(event, null); return false" class='TOCGroup closedbook_icon'></span>&nbsp;<a href="javascript:show('OodleNetworkAPI.html')">Oodle2 Network API Documentation</a></li>
<ul style="display:none" class='TOCItem'>
<li><span onClick="HandleClick(event, null); return false" class='TOCGroup closedbook_icon'></span>&nbsp;<a href="javascript:show('OodleAPI_Network.html')">Oodle Network compression</a></li>
<ul style="display:none" class='TOCItem'>
<li><span onClick="HandleClick(event, null); return false" class='TOCGroup closedbook_icon'></span>&nbsp;<a href="javascript:show('OodleAPI_OodleNetwork1.html')">OodleAPI_OodleNetwork1</a></li>
<ul style="display:none" class='TOCItem'>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleNetwork1_About.html')">About OodleNetwork1</a></li>
<li><span onClick="HandleClick(event, null); return false" class='TOCGroup closedbook_icon'></span>&nbsp;Defines</li>
<ul style="display:none" class='TOCItem'>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OODLENETWORK1_MAX_DICTIONARY_SIZE.html')">OODLENETWORK1_MAX_DICTIONARY_SIZE</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OODLENETWORK1_HASH_BITS_DEFAULT.html')">OODLENETWORK1_HASH_BITS_DEFAULT</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OODLENETWORK1_DECOMP_BUF_OVERREAD_LEN.html')">OODLENETWORK1_DECOMP_BUF_OVERREAD_LEN</a></li>
</ul>
<li><span onClick="HandleClick(event, null); return false" class='TOCGroup closedbook_icon'></span>&nbsp;Structures</li>
<ul style="display:none" class='TOCItem'>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleNetwork1_Shared.html')">OodleNetwork1_Shared</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleNetwork1TCP_State.html')">OodleNetwork1TCP_State</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleNetwork1UDP_State.html')">OodleNetwork1UDP_State</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleNetwork1UDP_StateCompacted.html')">OodleNetwork1UDP_StateCompacted</a></li>
</ul>
<li><span onClick="HandleClick(event, null); return false" class='TOCGroup closedbook_icon'></span>&nbsp;Functions</li>
<ul style="display:none" class='TOCItem'>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleNetwork1_Shared_Size.html')">OodleNetwork1_Shared_Size</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleNetwork1TCP_State_Size.html')">OodleNetwork1TCP_State_Size</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleNetwork1_CompressedBufferSizeNeeded.html')">OodleNetwork1_CompressedBufferSizeNeeded</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleNetwork1_Shared_SetWindow.html')">OodleNetwork1_Shared_SetWindow</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleNetwork1TCP_State_Reset.html')">OodleNetwork1TCP_State_Reset</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleNetwork1TCP_State_InitAsCopy.html')">OodleNetwork1TCP_State_InitAsCopy</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleNetwork1TCP_Train.html')">OodleNetwork1TCP_Train</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleNetwork1TCP_Encode.html')">OodleNetwork1TCP_Encode</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleNetwork1TCP_Decode.html')">OodleNetwork1TCP_Decode</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleNetwork1UDP_Train.html')">OodleNetwork1UDP_Train</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleNetwork1UDP_State_Size.html')">OodleNetwork1UDP_State_Size</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleNetwork1UDP_Encode.html')">OodleNetwork1UDP_Encode</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleNetwork1UDP_Decode.html')">OodleNetwork1UDP_Decode</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleNetwork1UDP_StateCompacted_MaxSize.html')">OodleNetwork1UDP_StateCompacted_MaxSize</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleNetwork1UDP_State_Compact_ForVersion.html')">OodleNetwork1UDP_State_Compact_ForVersion</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleNetwork1UDP_State_Compact.html')">OodleNetwork1UDP_State_Compact</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleNetwork1UDP_State_Uncompact_ForVersion.html')">OodleNetwork1UDP_State_Uncompact_ForVersion</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleNetwork1UDP_State_Uncompact.html')">OodleNetwork1UDP_State_Uncompact</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleNetwork1_SelectDictionarySupported.html')">OodleNetwork1_SelectDictionarySupported</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleNetwork1_SelectDictionaryFromPackets.html')">OodleNetwork1_SelectDictionaryFromPackets</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleNetwork1_SelectDictionaryFromPackets_Trials.html')">OodleNetwork1_SelectDictionaryFromPackets_Trials</a></li>
</ul>
</ul>
<li><span onClick="HandleClick(event, null); return false" class='TOCGroup closedbook_icon'></span>&nbsp;<a href="javascript:show('OodleNetwork_About.html')">About Oodle Network Compression</a></li>
<ul style="display:none" class='TOCItem'>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleNetwork_About_CapturingTrainingData.html')">Capturing Training data for OodleNetwork</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleNetwork_About_FormingPacketsForMaximumCompression.html')">Forming Packets for Maximum Compression</a></li>
</ul>
</ul>
<li><span onClick="HandleClick(event, null); return false" class='TOCGroup closedbook_icon'></span>&nbsp;<a href="javascript:show('OodleAPI_OodleNet_Plugins.html')">Network plugins</a></li>
<ul style="display:none" class='TOCItem'>
<li><span onClick="HandleClick(event, null); return false" class='TOCGroup closedbook_icon'></span>&nbsp;Functions</li>
<ul style="display:none" class='TOCItem'>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleNet_Plugins_SetAllocators.html')">OodleNet_Plugins_SetAllocators</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleNet_Plugins_SetJobSystem.html')">OodleNet_Plugins_SetJobSystem</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleNet_Plugins_SetJobSystemAndCount.html')">OodleNet_Plugins_SetJobSystemAndCount</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleNet_Plugins_SetPrintf.html')">OodleNet_Plugins_SetPrintf</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleNet_Plugins_SetAssertion.html')">OodleNet_Plugins_SetAssertion</a></li>
</ul>
<li><span onClick="HandleClick(event, null); return false" class='TOCGroup closedbook_icon'></span>&nbsp;Typedefs</li>
<ul style="display:none" class='TOCItem'>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('t_fp_OodleNet_Plugin_MallocAligned.html')">t_fp_OodleNet_Plugin_MallocAligned</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('t_fp_OodleNet_Plugin_Free.html')">t_fp_OodleNet_Plugin_Free</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('t_fp_OodleNet_Plugin_RunJob.html')">t_fp_OodleNet_Plugin_RunJob</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('t_fp_OodleNet_Plugin_WaitJob.html')">t_fp_OodleNet_Plugin_WaitJob</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('t_fp_OodleNet_Plugin_Printf.html')">t_fp_OodleNet_Plugin_Printf</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('t_fp_OodleNet_Plugin_DisplayAssertion.html')">t_fp_OodleNet_Plugin_DisplayAssertion</a></li>
</ul>
</ul>
</ul>
<li><span onClick="HandleClick(event, null); return false" class='TOCGroup closedbook_icon'></span>&nbsp;<a href="javascript:show('examples.html')">Examples</a></li>
<ul style="display:none" class='TOCItem'>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('Oodle_About_Examples.html')">How to build and use the Oodle examples</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('example_lz.html')">example_lz : Example demonstrating LZ compression and decompression</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('example_lz_chart.html')">example_lz_chart : Example that makes a chart of OodleLZ options</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('example_lz_noallocs.html')">example_lz_noallocs : Example demonstrating Oodle compression with no allocations</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('example_lz_overlap.html')">example_lz_overlap : Example demonstrating parallel overlap with OodleLZ</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('example_lz_simple.html')">example_lz_simple : Example demonstrating very simple LZ memory->memory compression using only Oodle Core</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('example_lz_threadphased.html')">example_lz_threadphased : Example of 2-thread ThreadPhased decoding</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('example_network_client.html')">example_network_client : Example with simple network client support</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('example_packet.html')">example_packet : Example demonstrating network packet compression</a></li>
</ul>
<li><span onClick="HandleClick(event, null); return false" class='TOCGroup closedbook_icon'></span>&nbsp;<a href="javascript:show('acknowledgements.html')">Acknowledgements</a></li>
<ul style="display:none" class='TOCItem'>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('licenses.html')">Third Party License Notices</a></li>
</ul>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('changelog.html')">Change Log</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('start_OodleNetwork.html')">Getting Started with Oodle Network</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('start_newLeviathan.html')">Introducing the new Oodle Leviathan</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('start_CoreVsExt.html')">Oodle2 Core vs Oodle2 Ext</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('start_Benchmarking.html')">Tips for benchmarking a compressor</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('start_OodleData.html')">Getting Started with Oodle LZ Data Compression</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('start_NetworkSplit.html')">Oodle Network and Data SDK separation</a></li>
</ul>
<br>&nbsp;<br> <table class=bar> <tr>
<td width=33%>&nbsp;</td><td width=33%>&nbsp;</td><td width=33%>&nbsp;</td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="OodleLZ_CompressScratchMemBoundType.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>OodleLZ_CompressScratchMemBoundType</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "OodleLZ_CompressScratchMemBoundType.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="OodleLZ_CompressScratchMemBoundType.html_backmenu">
<table class=dropmenu>
<tr><td><span class='arrowleft'></span>&nbsp;<a href="javascript:show('OodleLZSeekTable_Flags.html')" class="paragraph">OodleLZSeekTable_Flags</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<div class=prototype><div class=prototype_header>// Enumerant:</div><pre><span class=prototype_type>enum</span> <a href="javascript:show('OodleLZ_CompressScratchMemBoundType.html')">OodleLZ_CompressScratchMemBoundType</a>
{
&nbsp;&nbsp;&nbsp;&nbsp;OodleLZ_CompressScratchMemBoundType_WorstCase = 0,
&nbsp;&nbsp;&nbsp;&nbsp;OodleLZ_CompressScratchMemBoundType_Typical = 1,
&nbsp;&nbsp;&nbsp;&nbsp;OodleLZ_CompressScratchMemBoundType_Force32 = 0x40000000
};
</pre></div><div class=discussion_heading>Discussion</div> Type of scratch memory bound to compute.<div class=discussion_heading>Enumerants</div> <table> <tr> <td style='vertical-align: top;' class=paramname><a id="OodleLZ_CompressScratchMemBoundType.html_OodleLZ_CompressScratchMemBoundType_WorstCase" class=nohover>OodleLZ_CompressScratchMemBoundType_WorstCase</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> Worst-case memory use estimate</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleLZ_CompressScratchMemBoundType.html_OodleLZ_CompressScratchMemBoundType_Typical" class=nohover>OodleLZ_CompressScratchMemBoundType_Typical</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> Typical memory use estimate; with this much scratch memory, allocations might still happen, but rarely.</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleLZ_CompressScratchMemBoundType.html_OodleLZ_CompressScratchMemBoundType_Force32" class=nohover>OodleLZ_CompressScratchMemBoundType_Force32</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc></td></tr></table><div class=discussion_heading>Discussion</div> <a href="javascript:show('OodleLZ_CompressScratchMemBoundType.html','OodleLZ_CompressScratchMemBoundType.html_OodleLZ_CompressScratchMemBoundType_WorstCase')" class="paragraph">OodleLZ_CompressScratchMemBoundType_WorstCase</a> provides a worst-case estimate for the amount
of scratch memory required for compression. If at least this much scratch memory is provided
to the compression functions, they are guaranteed to make no allocations of their own. Some
compression levels don't have simple worst-case memory use guarantees and will return
<a href="javascript:show('OODLELZ_SCRATCH_MEM_NO_BOUND.html')" class="paragraph">OODLELZ_SCRATCH_MEM_NO_BOUND</a> for this type of query.
</p>
<p> <a href="javascript:show('OodleLZ_CompressScratchMemBoundType.html','OodleLZ_CompressScratchMemBoundType.html_OodleLZ_CompressScratchMemBoundType_Typical')" class="paragraph">OodleLZ_CompressScratchMemBoundType_Typical</a> returns a scratch memory estimate that will
be sufficient for most compression calls to not require additional memory, even when no
hard guarantees exist. Even so, a good estimate may not be available, in which case
<a href="javascript:show('OODLELZ_SCRATCH_MEM_NO_BOUND.html')" class="paragraph">OODLELZ_SCRATCH_MEM_NO_BOUND</a> is returned.
<br>&nbsp;<br> <table class=bar> <tr>
<td width=33% align=left><span class='arrowleft'></span><a href="javascript:show('OodleLZSeekTable_Flags.html')" class="paragraph">OodleLZSeekTable_Flags</a></td><td width=33% align=center><span class='arrowup'></span><a href="javascript:show('OodleAPI_LZ_Compressors.html')" class="paragraph">OodleAPI_LZ_Compressors</a></td><td width=33% align=right><span class='arrowright'></span><a href="javascript:show('OodleLZ_CompressOptions.html')" class="paragraph">OodleLZ_CompressOptions</a></td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="OodleXIOQ_OpenAndRead_Async.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>OodleXIOQ_OpenAndRead_Async</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "OodleXIOQ_OpenAndRead_Async.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="OodleXIOQ_OpenAndRead_Async.html_backmenu">
<table class=dropmenu>
<tr><td><span class='arrowleft'></span>&nbsp;<a href="javascript:show('OodleXIOQ_OpenForRead_Async.html')" class="paragraph">OodleXIOQ_OpenForRead_Async</a></td></tr><tr><td><span class='arrowright'></span>&nbsp;<a href="javascript:show('OodleXIOQ_OpenForWriteCreate_Async.html')" class="paragraph">OodleXIOQ_OpenForWriteCreate_Async</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<div class=prototype><div class=prototype_header>// Function prototype:</div><pre><span class=prototype_type><a href="javascript:show('OodleXHandle.html')" class="blue">OodleXHandle</a></span> <span class=prototype_type><a href="javascript:show('OodleXIOQ_OpenAndRead_Async.html')" class="blue">OodleXIOQ_OpenAndRead_Async</a></span>( <span class=prototype_type><a href="javascript:show('OodleXIOQFile.html')" class="blue">OodleXIOQFile</a></span> * pFile,
const char * name,
void * initialReadMemory,
OO_SINTa initialReadSize,
OO_S64 initialReadPos OODEFAULT( 0 ),
<span class=prototype_type><a href="javascript:show('OodleXFileOpenFlags.html')" class="blue">OodleXFileOpenFlags</a></span> fileOpenFlags OODEFAULT( OodleXFileOpenFlags_Default ),
const <span class=prototype_type><a href="javascript:show('OodleXFileOpsVTable.html')" class="blue">OodleXFileOpsVTable</a></span> * vtable OODEFAULT( NULL ),
<span class=prototype_type><a href="javascript:show('OodleXHandleAutoDelete.html')" class="blue">OodleXHandleAutoDelete</a></span> autoDelete OODEFAULT( OodleXHandleAutoDelete_No ),
<span class=prototype_type><a href="javascript:show('OodleXPriority.html')" class="blue">OodleXPriority</a></span> priority OODEFAULT( OodleXPriority_Normal ),
const <span class=prototype_type><a href="javascript:show('OodleXHandle.html')" class="blue">OodleXHandle</a></span> * dependencies OODEFAULT( NULL ),
OO_S32 numDependencies OODEFAULT( 0 ) );</pre></div><div class=discussion_heading>Discussion</div>Start opening a file for read, and do an initial read<div class=discussion_heading>Parameters</div> <table> <tr> <td style='vertical-align: top;' class=paramname><a id="OodleXIOQ_OpenAndRead_Async.html_pFile" class=nohover>pFile</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> filled with a handle to the file which will be opened
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXIOQ_OpenAndRead_Async.html_name" class=nohover>name</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> name of the file to open (VFS, UTF-8)
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXIOQ_OpenAndRead_Async.html_initialReadMemory" class=nohover>initialReadMemory</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> pointer to buffer to read into (must be <a href="javascript:show('OODLEX_IO_MAX_ALIGNMENT.html')" class="paragraph">OODLEX_IO_MAX_ALIGNMENT</a> aligned)
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXIOQ_OpenAndRead_Async.html_initialReadSize" class=nohover>initialReadSize</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> amount to read (must be <a href="javascript:show('OODLEX_IO_MAX_ALIGNMENT.html')" class="paragraph">OODLEX_IO_MAX_ALIGNMENT</a> aligned)
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXIOQ_OpenAndRead_Async.html_initialReadPos" class=nohover>initialReadPos</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> (optional) file position to read (must be <a href="javascript:show('OODLEX_IO_MAX_ALIGNMENT.html')" class="paragraph">OODLEX_IO_MAX_ALIGNMENT</a> aligned)
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXIOQ_OpenAndRead_Async.html_fileOpenFlags" class=nohover>fileOpenFlags</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> (optional) flags for the os file open (see <a href="javascript:show('OodleXFileOpenFlags.html')" class="paragraph">OodleXFileOpenFlags</a>)
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXIOQ_OpenAndRead_Async.html_vtable" class=nohover>vtable</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> (optional) the <a href="javascript:show('OodleXFileOpsVTable.html')" class="paragraph">OodleXFileOpsVTable</a> to use for all ops on this file
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXIOQ_OpenAndRead_Async.html_autoDelete" class=nohover>autoDelete</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> (optional) see <a href="javascript:show('OodleXHandleAutoDelete.html')" class="paragraph">OodleXHandleAutoDelete</a>
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXIOQ_OpenAndRead_Async.html_priority" class=nohover>priority</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> (optional) priority of the operation ; see <a href="javascript:show('OodleXPriority.html')" class="paragraph">OodleXPriority</a>
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXIOQ_OpenAndRead_Async.html_dependencies" class=nohover>dependencies</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> (optional) dependencies; the async op won't start until these are all complete; note : these are not freed, they must be autodelete or you must free them some other way.
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXIOQ_OpenAndRead_Async.html_numDependencies" class=nohover>numDependencies</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> (optional) number of handles in <i>deps</i> array
</td></tr></table><div class=discussion_heading>Return Value</div> <table> <tr> <td style='vertical-align: top;' class=paramname><a id="OodleXIOQ_OpenAndRead_Async.html_return" class=nohover>return</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> handle to the operation, or 0 if it could not be started (usually due to invalid args)
</td></tr></table><div class=discussion_heading>Discussion</div></p>
<p> If vtable is NULL, the vtable specified by the VFS mapping is used.
The file name provided is automatically run through VFS-to-OS name mapping, if applicable.
</p>
<p> Open returns a File ref right away for your convenience, but the file is not actually open for a little while.
You can however go ahead and queue more requests on the file reference before open is complete.
You cannot call things that require an open file, such as <a href="javascript:show('OodleXIOQ_GetInfo.html')" class="paragraph">OodleXIOQ_GetInfo</a>.
OpenForRead is always shared access (when possible).
</p>
<p> Also performs an initial read. Particularly useful when you need an initial header before you can start processing a file.
</p>
<p><br>&nbsp;<br> <table class=bar> <tr>
<td width=33% align=left><span class='arrowleft'></span><a href="javascript:show('OodleXIOQ_OpenForRead_Async.html')" class="paragraph">OodleXIOQ_OpenForRead_Async</a></td><td width=33% align=center><span class='arrowup'></span><a href="javascript:show('OodleXAPI_IOQ.html')" class="paragraph">OodleX low level async io</a></td><td width=33% align=right><span class='arrowright'></span><a href="javascript:show('OodleXIOQ_OpenForWriteCreate_Async.html')" class="paragraph">OodleXIOQ_OpenForWriteCreate_Async</a></td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="start_newLeviathan.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>Introducing the new Oodle Leviathan</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "start_newLeviathan.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="start_newLeviathan.html_backmenu">
<table class=dropmenu>
<tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<P>
Oodle Leviathan is a new compressor that provides higher compression than Oodle Kraken while still achieving
very high decode speed.
</p>
<p>Kraken revolutionized what was possible in lossless compression, providing insane decode speeds (3-4X faster than zlib)
with still excellent ratios. Leviathan does the same for the higher compression domain, still 2-3X faster than zlib
but with ratios that compete with or beat LZMA/7zip.
</p>
<p>If you loved Kraken but want a little bit more compression ratio, Leviathan is for you. If you like the high
ratio of LZMA/7zip or Oodle's LZNA, but want more decode speed, Leviathan is for you.
</p>
<p>Leviathan is <b>way</b> faster to decode than anything else in the world that gets as much compression. It's over 10X faster
to decode than LZMA/7zip.
</p>
<p>For example, on the "seven" testset :
</p>
<p><div class=prototype>
<PRE>
ooLeviathan7: 3.23:1 , 0.9 enc MB/s , 642.4 dec MB/s
lzmadef9 : 3.18:1 , 3.0 enc MB/s , 53.8 dec MB/s
ooKraken7 : 3.09:1 , 1.3 enc MB/s , 948.5 dec MB/s
ooMermaid7 : 2.85:1 , 2.1 enc MB/s , 1704.1 dec MB/s
zlib9 : 2.33:1 , 7.7 enc MB/s , 309.0 dec MB/s
</PRE>
</div>
</p>
<p>Leviathan is currently rather slow to encode (it does extensive optimization of the bit stream), so if you're
interested in high speed encoding, Leviathan is not the answer. Kraken &amp; Mermaid both provide fast encoding.
</p>
<p>See for yourself how great Leviathan is by trying <a href="javascript:show('example_lz_chart.html')" class="paragraph">example_lz_chart : Example that makes a chart of OodleLZ options</a>
</p>
<p>Dive in to <a href="javascript:show('start_OodleData.html')" class="paragraph">Getting Started with Oodle LZ Data Compression</a><br>&nbsp;<br> <table class=bar> <tr>
<td width=33%>&nbsp;</td><td width=33%>&nbsp;</td><td width=33%>&nbsp;</td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="Oodle_GetConfigValues.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>Oodle_GetConfigValues</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "Oodle_GetConfigValues.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="Oodle_GetConfigValues.html_backmenu">
<table class=dropmenu>
<tr><td><span class='arrowright'></span>&nbsp;<a href="javascript:show('Oodle_SetConfigValues.html')" class="paragraph">Oodle_SetConfigValues</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<div class=prototype><div class=prototype_header>// Function prototype:</div><pre>void <span class=prototype_type><a href="javascript:show('Oodle_GetConfigValues.html')" class="blue">Oodle_GetConfigValues</a></span>( <span class=prototype_type><a href="javascript:show('OodleConfigValues.html')" class="blue">OodleConfigValues</a></span> * ptr );</pre></div><div class=discussion_heading>Discussion</div>Get <a href="javascript:show('OodleConfigValues.html')" class="paragraph">OodleConfigValues</a><div class=discussion_heading>Parameters</div> <table> <tr> <td style='vertical-align: top;' class=paramname><a id="Oodle_GetConfigValues.html_ptr" class=nohover>ptr</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> filled with OodleConfigValues
</td></tr></table><div class=discussion_heading>Discussion</div></p>
<p> Gets the current <a href="javascript:show('OodleConfigValues.html')" class="paragraph">OodleConfigValues</a>.
</p>
<p> May be different per platform.
<br>&nbsp;<br> <table class=bar> <tr>
<td width=33% align=left><span class='arrowleft'></span><a href="javascript:show('OodleConfigValues.html')" class="paragraph">OodleConfigValues</a></td><td width=33% align=center><span class='arrowup'></span><a href="javascript:show('OodleAPI_Base.html')" class="paragraph">Core Base</a></td><td width=33% align=right><span class='arrowright'></span><a href="javascript:show('Oodle_SetConfigValues.html')" class="paragraph">Oodle_SetConfigValues</a></td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="Oodle_FAQ_OutOfHandles.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>FAQ: I ran out of OodleHandle table slots; what do I do?</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "Oodle_FAQ_OutOfHandles.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="Oodle_FAQ_OutOfHandles.html_backmenu">
<table class=dropmenu>
<tr><td><span class='arrowleft'></span>&nbsp;<a href="javascript:show('Oodle_FAQ_BadWriteContents.html')" class="paragraph">FAQ: I write a file with IOQ but the contents are garbage?</a></td></tr><tr><td><span class='arrowup'></span>&nbsp;<a href="javascript:show('Oodle_FAQ.html')" class="paragraph">Frequently Asked Questions</a></td></tr><tr><td><span class='arrowright'></span>&nbsp;<a href="javascript:show('Oodle_FAQ_S64_And_SINTa.html')" class="paragraph">FAQ: What is SINTa? How do I load files bigger than 2 GB?</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<P>
This is for OodleX async helpers, does not apply to Oodle Core.
</p>
<p>Since Oodle 2.9.7, running out of handles is nearly impossible and the default maximum number of handles is much
higher. The handle table is now allocated in chunks of 2048, with the config <i>m_num_handles_log2</i> setting the number
of chunks. So the default <i>m_num_handles_log2</i> of 13 means 2^13 chunks of 2048, or 2^24 maximum handles total.
</p>
<p>By default, Oodle provides 2^24 slots for async handles. This is the maximum number of handles which can be alive
at any time, but there is no limit on the number of completed or deleted handles.
</p>
<p>If you run out of handles, it's usually due to a bug in usage that you should fix, you generally don't need
to change the size of the handle table. Some possibilities :
</p>
<p>1. You might be leaking handles. That is, you fired off some async operation with an <a href="javascript:show('OodleXHandleAutoDelete.html')" class="paragraph">OodleXHandleAutoDelete</a>
of <a href="javascript:show('OodleXHandleAutoDelete.html','OodleXHandleAutoDelete.html_OodleXHandleAutoDelete_No')" class="paragraph">OodleXHandleAutoDelete_No</a> , but then you didn't delete the handle (eg. by calling
Oodle_Wait() with <a href="javascript:show('OodleXHandleDeleteIfDone.html','OodleXHandleDeleteIfDone.html_OodleXHandleDeleteIfDone_Yes')" class="paragraph">OodleXHandleDeleteIfDone_Yes</a>. You should either change the lifetime to
<a href="javascript:show('OodleXHandleAutoDelete.html','OodleXHandleAutoDelete.html_OodleXHandleAutoDelete_Yes')" class="paragraph">OodleXHandleAutoDelete_Yes</a> if you don't care about checking on the completion status of
the handle, or you should make sure to delete the handle at some point.
</p>
<p>2. You might really need all those async handles. Simply change <a href="javascript:show('OodleXInitOptions.html','OodleXInitOptions.html_m_num_handles_log2')" class="paragraph">OodleXInitOptions:m_num_handles_log2</a> before
calling <a href="javascript:show('OodleX_Init.html')" class="paragraph">OodleX_Init</a>.<br>&nbsp;<br> <table class=bar> <tr>
<td width=33% align=left><span class='arrowleft'></span><a href="javascript:show('Oodle_FAQ_BadWriteContents.html')" class="paragraph">FAQ: I write a file with IOQ but the contents are garbage?</a></td><td width=33% align=center><span class='arrowup'></span><a href="javascript:show('Oodle_FAQ.html')" class="paragraph">Frequently Asked Questions</a></td><td width=33% align=right><span class='arrowright'></span><a href="javascript:show('Oodle_FAQ_S64_And_SINTa.html')" class="paragraph">FAQ: What is SINTa? How do I load files bigger than 2 GB?</a></td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="OodleXIOQ_GetInfoByName_AsyncAndWait.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>OodleXIOQ_GetInfoByName_AsyncAndWait</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "OodleXIOQ_GetInfoByName_AsyncAndWait.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="OodleXIOQ_GetInfoByName_AsyncAndWait.html_backmenu">
<table class=dropmenu>
<tr><td><span class='arrowleft'></span>&nbsp;<a href="javascript:show('OodleXIOQ_CopyFile_AsyncAndWait.html')" class="paragraph">OodleXIOQ_CopyFile_AsyncAndWait</a></td></tr><tr><td><span class='arrowright'></span>&nbsp;<a href="javascript:show('OodleXIOQ_SetInfoByName_AsyncAndWait.html')" class="paragraph">OodleXIOQ_SetInfoByName_AsyncAndWait</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<div class=prototype><div class=prototype_header>// Function prototype:</div><pre>OO_BOOL <span class=prototype_type><a href="javascript:show('OodleXIOQ_GetInfoByName_AsyncAndWait.html')" class="blue">OodleXIOQ_GetInfoByName_AsyncAndWait</a></span>( const char * vfsName,
<span class=prototype_type><a href="javascript:show('OodleXFileInfo.html')" class="blue">OodleXFileInfo</a></span> * pInfo,
<span class=prototype_type><a href="javascript:show('OodleFileNotFoundIsAnError.html')" class="blue">OodleFileNotFoundIsAnError</a></span> fnfiae );</pre></div><div class=discussion_heading>Discussion</div>See <a href="javascript:show('OodleXIOQ_GetInfoByName_Async.html')" class="paragraph">OodleXIOQ_GetInfoByName_Async</a><div class=discussion_heading>Discussion</div>OodleXIOQ_GetInfoByName_AsyncAndWait returns true if the file was found and info was retrieved successfully.
The return value is always false for file not found, even if you pass OodleFileNotFoundIsAnError_No.
<br>&nbsp;<br> <table class=bar> <tr>
<td width=33% align=left><span class='arrowleft'></span><a href="javascript:show('OodleXIOQ_CopyFile_AsyncAndWait.html')" class="paragraph">OodleXIOQ_CopyFile_AsyncAndWait</a></td><td width=33% align=center><span class='arrowup'></span><a href="javascript:show('OodleXAPI_IOQ.html')" class="paragraph">OodleX low level async io</a></td><td width=33% align=right><span class='arrowright'></span><a href="javascript:show('OodleXIOQ_SetInfoByName_AsyncAndWait.html')" class="paragraph">OodleXIOQ_SetInfoByName_AsyncAndWait</a></td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="OodleXLZ_Compress_Async.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>OodleXLZ_Compress_Async</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "OodleXLZ_Compress_Async.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="OodleXLZ_Compress_Async.html_backmenu">
<table class=dropmenu>
<tr><td><span class='arrowleft'></span>&nbsp;<a href="javascript:show('OodleXLZ_Decompress_MakeSeekTable_Wide_Async.html')" class="paragraph">OodleXLZ_Decompress_MakeSeekTable_Wide_Async</a></td></tr><tr><td><span class='arrowright'></span>&nbsp;<a href="javascript:show('OodleXLZ_Compress_Wait_GetResult.html')" class="paragraph">OodleXLZ_Compress_Wait_GetResult</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<div class=prototype><div class=prototype_header>// Function prototype:</div><pre><span class=prototype_type><a href="javascript:show('OodleXHandle.html')" class="blue">OodleXHandle</a></span> <span class=prototype_type><a href="javascript:show('OodleXLZ_Compress_Async.html')" class="blue">OodleXLZ_Compress_Async</a></span>( OO_U32 asyncSelect,
<span class=prototype_type><a href="javascript:show('OodleLZ_Compressor.html')" class="blue">OodleLZ_Compressor</a></span> compressor,
const void * rawBuf,
OO_SINTa rawLen,
void * compBuf,
<span class=prototype_type><a href="javascript:show('OodleLZ_CompressionLevel.html')" class="blue">OodleLZ_CompressionLevel</a></span> compressSelect,
const <span class=prototype_type><a href="javascript:show('OodleLZ_CompressOptions.html')" class="blue">OodleLZ_CompressOptions</a></span> * pOptions OODEFAULT( NULL ),
const void * dictionaryBase OODEFAULT( NULL ),
<span class=prototype_type><a href="javascript:show('OodleXHandleAutoDelete.html')" class="blue">OodleXHandleAutoDelete</a></span> autoDelete OODEFAULT( OodleXHandleAutoDelete_No ),
const <span class=prototype_type><a href="javascript:show('OodleXHandle.html')" class="blue">OodleXHandle</a></span> * dependencies OODEFAULT( NULL ),
OO_S32 numDependencies OODEFAULT( 0 ) );</pre></div><div class=discussion_heading>Discussion</div>Start an async LZ compress<div class=discussion_heading>Parameters</div> <table> <tr> <td style='vertical-align: top;' class=paramname><a id="OodleXLZ_Compress_Async.html_asyncSelect" class=nohover>asyncSelect</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> logical OR of <a href="javascript:show('OodleXAsyncSelect.html')" class="paragraph">OodleXAsyncSelect</a> flags determine how the async is run
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXLZ_Compress_Async.html_compressor" class=nohover>compressor</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> A member of <a href="javascript:show('OodleLZ_Compressor.html')" class="paragraph">OodleLZ_Compressor</a> to select the compressor
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXLZ_Compress_Async.html_rawBuf" class=nohover>rawBuf</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> raw data to compress
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXLZ_Compress_Async.html_rawLen" class=nohover>rawLen</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> amount of raw data to compress
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXLZ_Compress_Async.html_compBuf" class=nohover>compBuf</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> output compressed data
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXLZ_Compress_Async.html_compressSelect" class=nohover>compressSelect</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> A member of <a href="javascript:show('OodleLZ_CompressionLevel.html')" class="paragraph">OodleLZ_CompressionLevel</a> to select the compression level
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXLZ_Compress_Async.html_pOptions" class=nohover>pOptions</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> (optional) compression options
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXLZ_Compress_Async.html_dictionaryBase" class=nohover>dictionaryBase</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> (optional) if not NULL, provides preceding data to prime the dictionary; must be contiguous with rawBuf, the data
between the pointers <i>dictionaryBase</i> and <i>rawBuf</i> is used as the preconditioning data
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXLZ_Compress_Async.html_autoDelete" class=nohover>autoDelete</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> (optional) see <a href="javascript:show('OodleXHandleAutoDelete.html')" class="paragraph">OodleXHandleAutoDelete</a>
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXLZ_Compress_Async.html_dependencies" class=nohover>dependencies</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> (optional) dependencies; the async op won't start until these are all complete; note : these are not freed, they must be autodelete or you must free them some other way.
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXLZ_Compress_Async.html_numDependencies" class=nohover>numDependencies</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> (optional) number of handles in <i>deps</i> array
</td></tr></table><div class=discussion_heading>Return Value</div> <table> <tr> <td style='vertical-align: top;' class=paramname><a id="OodleXLZ_Compress_Async.html_return" class=nohover>return</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> OodleXHandle to the operation, or OodleXHandle_Null for invalid arguments
</td></tr></table><div class=discussion_heading>Discussion</div></p>
<p> Runs "wide" if <i>asyncFlags</i> includes <a href="javascript:show('OodleXAsyncSelect.html','OodleXAsyncSelect.html_OodleXAsyncSelect_Workers')" class="paragraph">OodleXAsyncSelect_Workers</a> + <a href="javascript:show('OodleXAsyncSelect.html','OodleXAsyncSelect.html_OodleXAsyncSelect_Wide')" class="paragraph">OodleXAsyncSelect_Wide</a>.
</p>
<p> The output compressed data can be decompressed "wide" if <i>pOptions</i> set seekChunkReset = true.
</p>
<p> "wide" means use many threads at once on this single operation. If the compression is selected to run wide, but the decompression
cannot run wide (eg. the compressed data does not have small independent chunks), then it will still compress wide, but on
a very large granularity, instead of the small <a href="javascript:show('OODLELZ_BLOCK_LEN.html')" class="paragraph">OODLELZ_BLOCK_LEN</a> granularity). In that case, only very large buffers will
be compressed in parallel.
</p>
<p> Use <a href="javascript:show('OodleXLZ_Compress_Wait_GetResult.html')" class="paragraph">OodleXLZ_Compress_Wait_GetResult</a> to get the result and free associated structures.
<a href="javascript:show('OodleXLZ_Compress_Wait_GetResult.html')" class="paragraph">OodleXLZ_Compress_Wait_GetResult</a> must be called even if you don't want the result, or memory will be leaked.
<br>&nbsp;<br> <table class=bar> <tr>
<td width=33% align=left><span class='arrowleft'></span><a href="javascript:show('OodleXLZ_Decompress_MakeSeekTable_Wide_Async.html')" class="paragraph">OodleXLZ_Decompress_MakeSeekTable_Wide_Async</a></td><td width=33% align=center><span class='arrowup'></span><a href="javascript:show('OodleXAPI_LZ_Async.html')" class="paragraph">OodleXAPI_LZ_Async</a></td><td width=33% align=right><span class='arrowright'></span><a href="javascript:show('OodleXLZ_Compress_Wait_GetResult.html')" class="paragraph">OodleXLZ_Compress_Wait_GetResult</a></td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="example_lz_chart.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>example_lz_chart : Example that makes a chart of OodleLZ options</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "example_lz_chart.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="example_lz_chart.html_backmenu">
<table class=dropmenu>
<tr><td><span class='arrowleft'></span>&nbsp;<a href="javascript:show('example_lz.html')" class="paragraph">example_lz : Example demonstrating LZ compression and decompression</a></td></tr><tr><td><span class='arrowup'></span>&nbsp;<a href="javascript:show('examples.html')" class="paragraph">Examples</a></td></tr><tr><td><span class='arrowright'></span>&nbsp;<a href="javascript:show('example_lz_noallocs.html')" class="paragraph">example_lz_noallocs : Example demonstrating Oodle compression with no allocations</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<div class=discussion_heading>Discussion</div>Oodle example_lz_chart
</p>
<p>The Oodle SDK comes with a pre-built exe for example_lz_chart in the bin/ directory
</p>
<p>usage :
example_lz_chart <file>
</p>
<p>Run with a file name, which will be loaded and used as data to test on.
</p>
<p>You can also toggle compile-time options with the define EXAMPLE_LZ_CHART_NUM_LEVELS below.
</p>
<p>makes an output like this :
</p>
<p><PRE>
Oodle 2.6.3 example_lz_chart <file>
lz_chart loading r:testsetslztestsetlzt99...
file size : 24700820
------------------------------------------------------------------------------
Selkie : super fast to encode & decode, least compression
Mermaid: fast decode with better-than-zlib compression
Kraken : good compression, fast decoding, great tradeoff!
Leviathan : very high compression, slowest decode
------------------------------------------------------------------------------
chart cell shows | raw/comp ratio : encode MB/s : decode MB/s |
All compressors run at various encoder effort levels (SuperFast - Optimal).
Many repetitions are run for accurate timing.
------------------------------------------------------------------------------
| HyperFast4| HyperFast3| HyperFast2| HyperFast1| SuperFast |
Selkie |1.41:675:3895|1.45:622:3888|1.53:465:3696|1.68:369:3785|1.70:342:3759|
Mermaid|1.66:436:2189|1.66:436:2188|1.79:352:2090|2.01:276:2055|2.04:261:2025|
Kraken |1.55:588:1839|1.71:419:1136|1.88:331:1087|2.10:279:1093|2.27:167:1010|
------------------------------------------------------------------------------
compression ratio (raw/comp):
| HyperFast4| HyperFast3| HyperFast2| HyperFast1| SuperFast |
Selkie | 1.412 | 1.447 | 1.526 | 1.678 | 1.698 |
Mermaid| 1.660 | 1.660 | 1.793 | 2.011 | 2.041 |
Kraken | 1.548 | 1.711 | 1.877 | 2.103 | 2.268 |
------------------------------------------------------------------------------
encode speed (MB/s):
| HyperFast4| HyperFast3| HyperFast2| HyperFast1| SuperFast |
Selkie | 674.548 | 621.811 | 464.555 | 369.364 | 341.588 |
Mermaid| 435.650 | 435.923 | 352.475 | 276.199 | 260.511 |
Kraken | 588.488 | 418.921 | 331.423 | 279.129 | 167.206 |
------------------------------------------------------------------------------
decode speed (MB/s):
| HyperFast4| HyperFast3| HyperFast2| HyperFast1| SuperFast |
Selkie | 3894.644 | 3887.820 | 3695.984 | 3785.457 | 3758.594 |
Mermaid| 2189.030 | 2187.863 | 2090.319 | 2054.897 | 2024.692 |
Kraken | 1839.091 | 1135.920 | 1086.922 | 1093.407 | 1009.967 |
------------------------------------------------------------------------------
| VeryFast | Fast | Normal | Optimal1 | Optimal3 |
Selkie |1.75:205:3490|1.83:105:3687|1.86: 43:3815|1.93:5.1:3858|1.94:2.6:3856|
Mermaid|2.12:173:1991|2.19: 84:2177|2.21: 32:2291|2.37:2.8:2058|2.44:1.8:1978|
Kraken |2.32:112:1104|2.39: 37:1187|2.43: 20:1189|2.55:3.1:1103|2.65:1.2:1038|
Leviath|2.50: 31: 738|2.57: 17: 787|2.62:9.5: 807|2.71:1.6: 811|2.76:0.9: 776|
------------------------------------------------------------------------------
compression ratio (raw/comp):
| VeryFast | Fast | Normal | Optimal1 | Optimal3 |
Selkie | 1.748 | 1.833 | 1.863 | 1.933 | 1.943 |
Mermaid| 2.118 | 2.194 | 2.207 | 2.367 | 2.437 |
Kraken | 2.320 | 2.390 | 2.434 | 2.551 | 2.646 |
Leviath| 2.504 | 2.572 | 2.617 | 2.707 | 2.756 |
------------------------------------------------------------------------------
encode speed (MB/s):
| VeryFast | Fast | Normal | Optimal1 | Optimal3 |
Selkie | 204.621 | 104.758 | 42.504 | 5.102 | 2.554 |
Mermaid| 172.681 | 84.227 | 32.030 | 2.798 | 1.836 |
Kraken | 111.858 | 37.126 | 19.859 | 3.091 | 1.204 |
Leviath| 31.031 | 16.697 | 9.461 | 1.621 | 0.869 |
------------------------------------------------------------------------------
decode speed (MB/s):
| VeryFast | Fast | Normal | Optimal1 | Optimal3 |
Selkie | 3490.442 | 3686.689 | 3814.655 | 3857.857 | 3856.226 |
Mermaid| 1991.442 | 2176.725 | 2291.498 | 2057.575 | 1977.721 |
Kraken | 1104.172 | 1186.638 | 1189.372 | 1103.148 | 1038.352 |
Leviath| 737.934 | 787.152 | 806.523 | 811.161 | 775.800 |
------------------------------------------------------------------------------
</PRE><div class=prototype> <pre>
#include "../include/oodle2x.h"
#include "ooex.h"
#ifndef _CRT_SECURE_NO_WARNINGS
#define _CRT_SECURE_NO_WARNINGS
#endif
#include &lt;stdio.h>
#include &lt;string.h>
#include &lt;assert.h>
#include &lt;stdlib.h>
#ifdef BUILDING_EXAMPLE_CALLER
#define main <span class=prototype_type><a href="javascript:show('example_lz_chart.html')" class="blue">example_lz_chart</a></span>
#endif
<span style="color:#008000;">//===========================================================</span>
<span style="color:#008000;">// NOTE : these timings are hot cache (no cache invalidation between repeats)</span>
<span style="color:#008000;">// that could be significant on very small buffers</span>
struct time_and_len
{
double time;
OO_SINTa len;
};
<span style="color:#008000;">// if scratch is NULL or insufficient, Oodle will allocate internally</span>
static void * s_scratch_memory = NULL;
static OO_SINTa s_scratch_memory_size = 0;
static time_and_len Encode_And_Time(const void * raw_buf, OO_SINTa raw_len, void * comp_buf,
<span class=prototype_type><a href="javascript:show('OodleLZ_Compressor.html')" class="blue">OodleLZ_Compressor</a></span> compressor,
<span class=prototype_type><a href="javascript:show('OodleLZ_CompressionLevel.html')" class="blue">OodleLZ_CompressionLevel</a></span> compression_level,
<span class=prototype_type><a href="javascript:show('OodleLZ_CompressOptions.html')" class="blue">OodleLZ_CompressOptions</a></span> * compression_options,
int min_repeats,
double min_total_seconds)
{
double total_seconds = 0;
time_and_len ret;
ret.time = 999999.9;
for(;;)
{
double dt = <span class=prototype_type><a href="javascript:show('OodleX_GetSeconds.html')" class="blue">OodleX_GetSeconds</a></span>();
ret.len = <span class=prototype_type><a href="javascript:show('OodleLZ_Compress.html')" class="blue">OodleLZ_Compress</a></span>(compressor, raw_buf, raw_len, comp_buf, compression_level, compression_options,
NULL, NULL, s_scratch_memory, s_scratch_memory_size);
dt = <span class=prototype_type><a href="javascript:show('OodleX_GetSeconds.html')" class="blue">OodleX_GetSeconds</a></span>() - dt;
total_seconds += dt;
ret.time = OOEX_MIN(ret.time,dt);
min_repeats--;
if ( min_repeats &lt;= 0 &amp;&amp; total_seconds >= min_total_seconds )
break;
}
return ret;
}
static double Decode_And_Time( void * comp_buf, OO_SINTa comp_len, void * decode_buffer, OO_SINTa in_size,
int min_repeats,
double min_total_seconds)
{
double total_seconds = 0;
double ret = 999999.9;
for(;;)
{
double dt = <span class=prototype_type><a href="javascript:show('OodleX_GetSeconds.html')" class="blue">OodleX_GetSeconds</a></span>();
OO_SINTa decode_len = <span class=prototype_type><a href="javascript:show('OodleLZ_Decompress.html')" class="blue">OodleLZ_Decompress</a></span>( comp_buf, comp_len, decode_buffer, in_size , OodleLZ_FuzzSafe_Yes,
OodleLZ_CheckCRC_No, OodleLZ_Verbosity_None, NULL, 0, NULL,NULL, s_scratch_memory,s_scratch_memory_size );
dt = <span class=prototype_type><a href="javascript:show('OodleX_GetSeconds.html')" class="blue">OodleX_GetSeconds</a></span>() - dt;
OOEX_ASSERT_ALWAYS( decode_len == in_size );
total_seconds += dt;
ret = OOEX_MIN(ret,dt);
min_repeats--;
if ( min_repeats &lt;= 0 &amp;&amp; total_seconds >= min_total_seconds )
break;
}
return ret;
}
<span style="color:#008000;">//===========================================================</span>
static void bar()
{
OodleXLog_Printf_v1("------------------------------------------------------------------------------\n");
}
static void header(const <span class=prototype_type><a href="javascript:show('OodleLZ_CompressionLevel.html')" class="blue">OodleLZ_CompressionLevel</a></span> * chart_levels, int num_levels)
{
<span style="color:#008000;">//OodleXLog_Printf_v1("%5s | %-10s| %-10s| %-10s| %-10s|\n",</span>
<span style="color:#008000;">// "","VeryFast","Fast","Normal","Optimal1");</span>
OodleXLog_Printf_v1("%7s|","");
for(int l=0;l&lt;num_levels;l++)
{
<span class=prototype_type><a href="javascript:show('OodleLZ_CompressionLevel.html')" class="blue">OodleLZ_CompressionLevel</a></span> level = chart_levels[l];
OodleXLog_Printf_v1(" %-10s|",
<span class=prototype_type><a href="javascript:show('OodleLZ_CompressionLevel_GetName.html')" class="blue">OodleLZ_CompressionLevel_GetName</a></span>(level));
}
OodleXLog_Printf_v1("\n");
}
static const char * truncated_compressor_name( <span class=prototype_type><a href="javascript:show('OodleLZ_Compressor.html')" class="blue">OodleLZ_Compressor</a></span> compressor )
{
const char * n = <span class=prototype_type><a href="javascript:show('OodleLZ_Compressor_GetName.html')" class="blue">OodleLZ_Compressor_GetName</a></span>(compressor);
static char buf[10];
memset(buf,' ',sizeof(buf));
memcpy(buf,n,OOEX_MIN( strlen(n), sizeof(buf) ) );
buf[7] = 0;
return buf;
}
extern "C" int main(int argc,char *argv[])
{
<span style="color:#008000;">// Init Oodle systems with default options :</span>
<span class=prototype_type><a href="javascript:show('OodleXInitOptions.html')" class="blue">OodleXInitOptions</a></span> opts;
if ( ! <span class=prototype_type><a href="javascript:show('OodleX_Init_GetDefaults.html')" class="blue">OodleX_Init_GetDefaults</a></span>(<span class=prototype_type><a href="javascript:show('OODLE_HEADER_VERSION.html')" class="blue">OODLE_HEADER_VERSION</a></span>,&amp;opts) )
{
fprintf(stderr,"Oodle header version mismatch.\n");
return 10;
}
<span style="color:#008000;">// change opts here if you like</span>
<span style="color:#008000;">// NOTE : default options enable the OodleX thread system</span>
<span style="color:#008000;">// so encoders will be "Jobified"</span>
if ( ! <span class=prototype_type><a href="javascript:show('OodleX_Init.html')" class="blue">OodleX_Init</a></span>(<span class=prototype_type><a href="javascript:show('OODLE_HEADER_VERSION.html')" class="blue">OODLE_HEADER_VERSION</a></span>,&amp;opts) )
{
fprintf(stderr,"OodleX_Init failed.\n");
return 10;
}
OodleXLog_Printf_v1("Oodle %s example_lz_chart &lt;file>\n",OodleVersion);
if ( argc &lt; 2 )
{
fprintf(stderr,"error: specify a sample data file to test on.\n");
return 10;
}
const char * in_name = argv[1];
OodleXLog_Printf_v1("lz_chart loading %s...\n",in_name);
<span style="color:#008000;">// read the input file to the global buffer :</span>
OO_S64 in_size_64;
void * in_buffer = <span class=prototype_type><a href="javascript:show('OodleXIOQ_ReadMallocWholeFile_AsyncAndWait.html')" class="blue">OodleXIOQ_ReadMallocWholeFile_AsyncAndWait</a></span>(in_name,&amp;in_size_64);
if ( ! in_buffer)
{
OodleXLog_Printf_v0("failed to read %s\n",in_name);
return 10;
}
OodleXLog_Printf_v1("file size : " OOEX_S64_FMT "\n",in_size_64);
OO_SINTa in_size = <span class=prototype_type><a href="javascript:show('OodleX_S64_to_SINTa_check.html')" class="blue">OodleX_S64_to_SINTa_check</a></span>( in_size_64 );
<span style="color:#008000;">//-----------------------------------------------------</span>
<span style="color:#008000;">// test parameters :</span>
<span style="color:#008000;">// increase these to get more reliable timing</span>
<span style="color:#008000;">// decrease these to run faster</span>
int min_encode_repeats = 2;
int min_decode_repeats = 5;
double min_total_seconds = 2.0;
#if 1
<span style="color:#008000;">// test set of compressors : </span>
<span class=prototype_type><a href="javascript:show('OodleLZ_Compressor.html')" class="blue">OodleLZ_Compressor</a></span> chart_compressors[] = {
OodleLZ_Compressor_Selkie, OodleLZ_Compressor_Mermaid, OodleLZ_Compressor_Kraken, OodleLZ_Compressor_Leviathan
};
#define EXAMPLE_LZ_CHART_NUM_COMPRESSORS ((int)(sizeof(chart_compressors)/sizeof(chart_compressors[0])))
OOEX_ASSERT( EXAMPLE_LZ_CHART_NUM_COMPRESSORS == 4 );
#define EXAMPLE_LZ_CHART_NUM_LEVELS 5
<span class=prototype_type><a href="javascript:show('OodleLZ_CompressionLevel.html')" class="blue">OodleLZ_CompressionLevel</a></span> chart_levels1[] = {
OodleLZ_CompressionLevel_HyperFast4, OodleLZ_CompressionLevel_HyperFast3, OodleLZ_CompressionLevel_HyperFast2, OodleLZ_CompressionLevel_HyperFast1, OodleLZ_CompressionLevel_SuperFast,
};
<span class=prototype_type><a href="javascript:show('OodleLZ_CompressionLevel.html')" class="blue">OodleLZ_CompressionLevel</a></span> chart_levels2[] = {
OodleLZ_CompressionLevel_VeryFast, OodleLZ_CompressionLevel_Fast, OodleLZ_CompressionLevel_Normal, OodleLZ_CompressionLevel_Optimal1, OodleLZ_CompressionLevel_Optimal3
};
OOEX_ASSERT( ((int)(sizeof(chart_levels1)/sizeof(chart_levels1[0]))) == EXAMPLE_LZ_CHART_NUM_LEVELS );
OOEX_ASSERT( ((int)(sizeof(chart_levels2)/sizeof(chart_levels2[0]))) == EXAMPLE_LZ_CHART_NUM_LEVELS );
#else
<span style="color:#008000;">// test just 1 :</span>
<span class=prototype_type><a href="javascript:show('OodleLZ_Compressor.html')" class="blue">OodleLZ_Compressor</a></span> chart_compressors[] = {
OodleLZ_Compressor_Kraken
};
#define EXAMPLE_LZ_CHART_NUM_COMPRESSORS 1
#define EXAMPLE_LZ_CHART_NUM_LEVELS 1
<span class=prototype_type><a href="javascript:show('OodleLZ_CompressionLevel.html')" class="blue">OodleLZ_CompressionLevel</a></span> chart_levels1[] = {
OodleLZ_CompressionLevel_None
};
<span class=prototype_type><a href="javascript:show('OodleLZ_CompressionLevel.html')" class="blue">OodleLZ_CompressionLevel</a></span> chart_levels2[] = {
OodleLZ_CompressionLevel_Optimal2
};
#endif
<span style="color:#008000;">//===========================================================</span>
OO_SINTa comp_lens[EXAMPLE_LZ_CHART_NUM_COMPRESSORS][EXAMPLE_LZ_CHART_NUM_LEVELS];
double decode_speeds[EXAMPLE_LZ_CHART_NUM_COMPRESSORS][EXAMPLE_LZ_CHART_NUM_LEVELS];
double encode_speeds[EXAMPLE_LZ_CHART_NUM_COMPRESSORS][EXAMPLE_LZ_CHART_NUM_LEVELS];
<span style="color:#008000;">//-----------------------------------------------------</span>
void * comp_buf;
OO_SINTa comp_buf_size = <span class=prototype_type><a href="javascript:show('OodleLZ_GetCompressedBufferSizeNeeded.html')" class="blue">OodleLZ_GetCompressedBufferSizeNeeded</a></span>(OodleLZ_Compressor_Invalid,in_size);
comp_buf = <span class=prototype_type><a href="javascript:show('OodleXMallocBig.html')" class="blue">OodleXMallocBig</a></span>(comp_buf_size);
void * decode_buffer = <span class=prototype_type><a href="javascript:show('OodleXMallocBig.html')" class="blue">OodleXMallocBig</a></span>( in_size );
<span style="color:#008000;">//-----------------------------------------------------</span>
<span style="color:#008000;">// allocate scratch </span>
<span style="color:#008000;">// get enough so the decoder won't allocate</span>
<span style="color:#008000;">// and encoders up to Leviathan-Normal won't either</span>
<span style="color:#008000;">// but optimals will</span>
s_scratch_memory_size = <span class=prototype_type><a href="javascript:show('OodleLZ_GetCompressScratchMemBound.html')" class="blue">OodleLZ_GetCompressScratchMemBound</a></span>(OodleLZ_Compressor_Leviathan,OodleLZ_CompressionLevel_Normal,in_size,NULL);
s_scratch_memory_size = OOEX_MAX( s_scratch_memory_size , <span class=prototype_type><a href="javascript:show('OodleLZDecoder_MemorySizeNeeded.html')" class="blue">OodleLZDecoder_MemorySizeNeeded</a></span>() );
s_scratch_memory = <span class=prototype_type><a href="javascript:show('OodleXMalloc.html')" class="blue">OodleXMalloc</a></span>(s_scratch_memory_size);
<span style="color:#008000;">//-----------------------------------------------------</span>
bar();
OodleXLog_Printf_v1("Selkie : super fast to encode &amp; decode, least compression\n");
OodleXLog_Printf_v1("Mermaid: fast decode with better-than-zlib compression\n");
OodleXLog_Printf_v1("Kraken : good compression, fast decoding, great tradeoff!\n");
OodleXLog_Printf_v1("Leviathan : very high compression, slowest decode\n");
bar();
OodleXLog_Printf_v1("chart cell shows | raw/comp ratio : encode MB/s : decode MB/s | \n");
OodleXLog_Printf_v1("All compressors run at various encoder effort levels (SuperFast - Optimal).\n");
OodleXLog_Printf_v1("Many repetitions are run for accurate timing.\n");
bar();
for(int twice=0;twice&lt;2;twice++)
{
const <span class=prototype_type><a href="javascript:show('OodleLZ_CompressionLevel.html')" class="blue">OodleLZ_CompressionLevel</a></span> * chart_levels =
twice ? chart_levels2 : chart_levels1;
int num_compressors = EXAMPLE_LZ_CHART_NUM_COMPRESSORS;
<span style="color:#008000;">// don't bother running Leviathan at the HyperFast modes :</span>
if ( ! twice &amp;&amp; chart_compressors[num_compressors-1] == OodleLZ_Compressor_Leviathan ) num_compressors--;
header(chart_levels,EXAMPLE_LZ_CHART_NUM_LEVELS);
for(int c=0;c&lt;num_compressors;c++)
{
<span class=prototype_type><a href="javascript:show('OodleLZ_Compressor.html')" class="blue">OodleLZ_Compressor</a></span> compressor = chart_compressors[c];
OodleXLog_Printf_v1("%s|",truncated_compressor_name(compressor));
<span style="color:#008000;">// iterate backwards so we start the slowest first</span>
for(int l=0;l&lt;EXAMPLE_LZ_CHART_NUM_LEVELS;l++)
{
<span class=prototype_type><a href="javascript:show('OodleLZ_CompressionLevel.html')" class="blue">OodleLZ_CompressionLevel</a></span> level = chart_levels[l];
time_and_len tl =
Encode_And_Time(in_buffer,in_size,comp_buf,compressor,level,NULL,min_encode_repeats,min_total_seconds);
OO_SINTa comp_len = tl.len;
double encode_seconds = tl.time;
double encode_mbps = (in_size/1000000.0) / encode_seconds;
encode_speeds[c][l] = encode_mbps;
comp_lens[c][l] = comp_len;
double ratio = (double)in_size/comp_len;
if ( ratio >= 10.0 )
OodleXLog_Printf_v1("%4.1f",ratio);
else
OodleXLog_Printf_v1("%4.2f",ratio);
if ( encode_mbps >= 10.0 )
OodleXLog_Printf_v1(":%3d:",(int)(encode_mbps+0.5));
else
OodleXLog_Printf_v1(":%3.1f:",encode_mbps);
double decode_seconds = Decode_And_Time( comp_buf, comp_len, decode_buffer, in_size ,
min_decode_repeats,min_total_seconds);
OOEX_ASSERT_ALWAYS( memcmp(decode_buffer,in_buffer,in_size) == 0 );
double decode_mbps = (in_size/1000000.0) / decode_seconds;
decode_speeds[c][l] = decode_mbps;
OodleXLog_Printf_v1("%4d|",(int)(decode_mbps+0.5));
}
OodleXLog_Printf_v1("\n");
}
<span style="color:#008000;">//-----------------------------------------------------</span>
bar();
OodleXLog_Printf_v1("compression ratio (raw/comp):\n");
header(chart_levels,EXAMPLE_LZ_CHART_NUM_LEVELS);
for(int c=0;c&lt;num_compressors;c++)
{
<span class=prototype_type><a href="javascript:show('OodleLZ_Compressor.html')" class="blue">OodleLZ_Compressor</a></span> compressor = chart_compressors[c];
OodleXLog_Printf_v1("%s|",truncated_compressor_name(compressor));
<span style="color:#008000;">// iterate backwards so we start the slowest first</span>
for(int l=0;l&lt;EXAMPLE_LZ_CHART_NUM_LEVELS;l++)
{
double ratio = (double)in_size/comp_lens[c][l];
OodleXLog_Printf_v1("%9.3f |",ratio);
}
OodleXLog_Printf_v1("\n");
}
bar();
OodleXLog_Printf_v1("encode speed (MB/s):\n");
header(chart_levels,EXAMPLE_LZ_CHART_NUM_LEVELS);
for(int c=0;c&lt;num_compressors;c++)
{
<span class=prototype_type><a href="javascript:show('OodleLZ_Compressor.html')" class="blue">OodleLZ_Compressor</a></span> compressor = chart_compressors[c];
OodleXLog_Printf_v1("%s|",truncated_compressor_name(compressor));
<span style="color:#008000;">// iterate backwards so we start the slowest first</span>
for(int l=0;l&lt;EXAMPLE_LZ_CHART_NUM_LEVELS;l++)
{
OodleXLog_Printf_v1("%11.3f |",encode_speeds[c][l]);
}
OodleXLog_Printf_v1("\n");
}
bar();
OodleXLog_Printf_v1("decode speed (MB/s):\n");
header(chart_levels,EXAMPLE_LZ_CHART_NUM_LEVELS);
for(int c=0;c&lt;num_compressors;c++)
{
<span class=prototype_type><a href="javascript:show('OodleLZ_Compressor.html')" class="blue">OodleLZ_Compressor</a></span> compressor = chart_compressors[c];
OodleXLog_Printf_v1("%s|",truncated_compressor_name(compressor));
<span style="color:#008000;">// iterate backwards so we start the slowest first</span>
for(int l=0;l&lt;EXAMPLE_LZ_CHART_NUM_LEVELS;l++)
{
OodleXLog_Printf_v1("%11.3f |",decode_speeds[c][l]);
}
OodleXLog_Printf_v1("\n");
}
bar();
} <span style="color:#008000;">// twice</span>
<span style="color:#008000;">//-----------------------------------------------------</span>
<span class=prototype_type><a href="javascript:show('OodleXFree.html')" class="blue">OodleXFree</a></span>(s_scratch_memory);
<span class=prototype_type><a href="javascript:show('OodleXFreeBig.html')" class="blue">OodleXFreeBig</a></span>(decode_buffer);
<span class=prototype_type><a href="javascript:show('OodleXFreeBig.html')" class="blue">OodleXFreeBig</a></span>(comp_buf);
<span class=prototype_type><a href="javascript:show('OodleXFree_IOAligned.html')" class="blue">OodleXFree_IOAligned</a></span>(in_buffer);
<span style="color:#008000;">//OodleX_Shutdown();</span>
<span class=prototype_type><a href="javascript:show('OodleX_Shutdown.html')" class="blue">OodleX_Shutdown</a></span>(NULL,OodleX_Shutdown_LogLeaks_Yes,0);
<span style="color:#008000;">//OodleXLog_Printf_v1("press a key\n");</span>
<span style="color:#008000;">//fgetc(stdin);</span>
return 0;
}
<span style="color:#008000;">//=================================================</span>
</pre></div><br>&nbsp;<br> <table class=bar> <tr>
<td width=33% align=left><span class='arrowleft'></span><a href="javascript:show('example_lz.html')" class="paragraph">example_lz : Example demonstrating LZ compression and decompression</a></td><td width=33% align=center><span class='arrowup'></span><a href="javascript:show('examples.html')" class="paragraph">Examples</a></td><td width=33% align=right><span class='arrowright'></span><a href="javascript:show('example_lz_noallocs.html')" class="paragraph">example_lz_noallocs : Example demonstrating Oodle compression with no allocations</a></td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="OodleXIOQ_CopyFile_Async.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>OodleXIOQ_CopyFile_Async</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "OodleXIOQ_CopyFile_Async.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="OodleXIOQ_CopyFile_Async.html_backmenu">
<table class=dropmenu>
<tr><td><span class='arrowleft'></span>&nbsp;<a href="javascript:show('OodleXIOQ_MakeAllDirs_Async.html')" class="paragraph">OodleXIOQ_MakeAllDirs_Async</a></td></tr><tr><td><span class='arrowright'></span>&nbsp;<a href="javascript:show('OodleXIOQ_ReadMallocWholeFile_AsyncAndWait.html')" class="paragraph">OodleXIOQ_ReadMallocWholeFile_AsyncAndWait</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<div class=prototype><div class=prototype_header>// Function prototype:</div><pre><span class=prototype_type><a href="javascript:show('OodleXHandle.html')" class="blue">OodleXHandle</a></span> <span class=prototype_type><a href="javascript:show('OodleXIOQ_CopyFile_Async.html')" class="blue">OodleXIOQ_CopyFile_Async</a></span>( const char * from,
const char * to,
OO_U32 oodleCopyFileFlags,
<span class=prototype_type><a href="javascript:show('OodleXHandleAutoDelete.html')" class="blue">OodleXHandleAutoDelete</a></span> autoDelete OODEFAULT( OodleXHandleAutoDelete_No ),
<span class=prototype_type><a href="javascript:show('OodleXPriority.html')" class="blue">OodleXPriority</a></span> priority OODEFAULT( OodleXPriority_Normal ),
const <span class=prototype_type><a href="javascript:show('OodleXHandle.html')" class="blue">OodleXHandle</a></span> * dependencies OODEFAULT( NULL ),
OO_S32 numDependencies OODEFAULT( 0 ) );</pre></div><div class=discussion_heading>Discussion</div>Start a high level IO request to copy a file<div class=discussion_heading>Parameters</div> <table> <tr> <td style='vertical-align: top;' class=paramname><a id="OodleXIOQ_CopyFile_Async.html_from" class=nohover>from</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> source file name (VFS,UTF8)
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXIOQ_CopyFile_Async.html_to" class=nohover>to</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> dest file name (VFS,UTF8)
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXIOQ_CopyFile_Async.html_oodleCopyFileFlags" class=nohover>oodleCopyFileFlags</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> bitwise OR of flags from <a href="javascript:show('OodleXCopyFileFlags.html')" class="paragraph">OodleXCopyFileFlags</a>
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXIOQ_CopyFile_Async.html_autoDelete" class=nohover>autoDelete</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> (optional) see <a href="javascript:show('OodleXHandleAutoDelete.html')" class="paragraph">OodleXHandleAutoDelete</a>
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXIOQ_CopyFile_Async.html_priority" class=nohover>priority</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> (optional) priority of the operation ; see <a href="javascript:show('OodleXPriority.html')" class="paragraph">OodleXPriority</a>
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXIOQ_CopyFile_Async.html_dependencies" class=nohover>dependencies</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> (optional) dependencies; the async op won't start until these are all complete; note : these are not freed, they must be autodelete or you must free them some other way.
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXIOQ_CopyFile_Async.html_numDependencies" class=nohover>numDependencies</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> (optional) number of handles in <i>deps</i> array
</td></tr></table><div class=discussion_heading>Return Value</div> <table> <tr> <td style='vertical-align: top;' class=paramname><a id="OodleXIOQ_CopyFile_Async.html_return" class=nohover>return</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> handle to the operation, or 0 if it could not be started (usually due to invalid args)
</td></tr></table><div class=discussion_heading>Discussion</div></p>
<p> Copy a file as a single IOQ op.
</p>
<p> NOTE : you generally do not want this. Use Oodle_CopyFile_Async instead. Using this call blocks
the IOQ from servicing streams or doing other work.
</p>
<p> CopyFile is a single IOQ op so it is guaranteed to be done before a subsequent call to
OodleIOQ_OpenForRead on the <i>to</i> file, so it is useful for async transparent mirroring.
(the same is not true of Oodle_CopyFile_Async which has undefined scheduling).
</p>
<p><br>&nbsp;<br> <table class=bar> <tr>
<td width=33% align=left><span class='arrowleft'></span><a href="javascript:show('OodleXIOQ_MakeAllDirs_Async.html')" class="paragraph">OodleXIOQ_MakeAllDirs_Async</a></td><td width=33% align=center><span class='arrowup'></span><a href="javascript:show('OodleXAPI_IOQ.html')" class="paragraph">OodleX low level async io</a></td><td width=33% align=right><span class='arrowright'></span><a href="javascript:show('OodleXIOQ_ReadMallocWholeFile_AsyncAndWait.html')" class="paragraph">OodleXIOQ_ReadMallocWholeFile_AsyncAndWait</a></td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="OodleXIOQ_About.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>About OodleIOQ</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "OodleXIOQ_About.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="OodleXIOQ_About.html_backmenu">
<table class=dropmenu>
<tr><td><span class='arrowup'></span>&nbsp;<a href="javascript:show('OodleXAPI_IOQ.html')" class="paragraph">OodleX low level async io</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<P>
<h2> About OodleIOQ</h2>
</p>
<p>OodleIOQ is the lowest level async IO layer that the client should use.
</p>
<p>(<a href="javascript:show('OodleXFileOpsVTable.html')" class="paragraph">OodleXFileOpsVTable</a> is lower level; the IOQ uses it to do its file ops,
but the client should not call <a href="javascript:show('OodleXFileOpsVTable.html')" class="paragraph">OodleXFileOpsVTable</a> functions directly)
</p>
<p>Every file IO operation on an OodleIOQ file is completely asynchronous, they
never block the calling thread. Calls like <a href="javascript:show('OodleXIOQ_CloseFile_Async.html')" class="paragraph">OodleXIOQ_CloseFile_Async</a> just start an
operation; you can then <a href="javascript:show('OodleX_Wait.html')" class="paragraph">OodleX_Wait</a> on the returned handle if you like.
(there are convenience wrappers provided (like <a href="javascript:show('OodleXIOQ_WriteWholeFile_AsyncAndWait.html')" class="paragraph">OodleXIOQ_WriteWholeFile_AsyncAndWait</a>)
which just start an async op and then wait on it).
</p>
<p>An <a href="javascript:show('OodleXIOQFile.html')" class="paragraph">OodleXIOQFile</a> does not have a file pointer (position) or buffer associated with it.
They are stateless. Multiple threads may be using the same <a href="javascript:show('OodleXIOQFile.html')" class="paragraph">OodleXIOQFile</a> at the same time.
</p>
<p>Many people are initially confused by the fact that <a href="javascript:show('OodleXIOQ_OpenForRead_Async.html')" class="paragraph">OodleXIOQ_OpenForRead_Async</a> is
asynchronous. That means that if you try to open a file that doesn't exist, the call
to <a href="javascript:show('OodleXIOQ_OpenForRead_Async.html')" class="paragraph">OodleXIOQ_OpenForRead_Async</a> will still succeed ; the success of that call only means
that it was successful in starting the operation. If you want to know if the operation
actually succeeded, you must get the status of the <a href="javascript:show('OodleXHandle.html')" class="paragraph">OodleXHandle</a> returned.
<a href="javascript:show('OodleXIOQ_OpenForRead_Async.html')" class="paragraph">OodleXIOQ_OpenForRead_Async</a> will always create an <a href="javascript:show('OodleXIOQFile.html')" class="paragraph">OodleXIOQFile</a>, but it may not contain
a valid disk file until/unless the operation succeeds.
</p>
<p>Every operation you start on the IOQ has a corresponding <a href="javascript:show('OodleXHandle.html')" class="paragraph">OodleXHandle</a>. That handle
can be used to check status (<a href="javascript:show('OodleX_GetStatus.html')" class="paragraph">OodleX_GetStatus</a>) or wait on completion. If you don't need
to track the progress of an IO operation, you can make the handle have a autoDelete of
OodleXHandleAutoDelete_Yes, and just ignore the handle.
</p>
<p><hr>
</p>
<p><h3> IO Operation Ordering</h3>
</p>
<p>IOQ operations are implicitly FIFO in the absense of other user-provided scheduling
constraints. The IOQ may transparently reorder operations when that reordering cannot
affect their behavior; for example Reads and OpensForRead can be moved against each
other, but Reads will never be moved across Writes.
</p>
<p>FIFO ordering is very handy for the client to batch up chains of operations and know
what order they will be done in.
</p>
<p>For example you can do
</p>
<p><a href="javascript:show('OodleXIOQ_Read_Async.html')" class="paragraph">OodleXIOQ_Read_Async</a>(file1,buffer,sizeof(buffer),0);
</p>
<p><a href="javascript:show('OodleXIOQ_Write_Async.html')" class="paragraph">OodleXIOQ_Write_Async</a>(file2,buffer,sizeof(buffer),0);
</p>
<p>this will enqueue a read from file1 into "buffer" and then a write to file2
from "buffer". Because of the implicit FIFO order, this will do what you expect -
the read will complete and fill buffer before I try to write from it. Without
the implicit FIFO those operations would have to be explicitly ordered by dependencies.
</p>
<p>Every OodleIOQ function that starts an async operation optionally takes a list of
dependencies. If you pass dependencies, then that operation will not participate in
the FIFO sequence; its ordering is set by the completion of the dependencies.
</p>
<p><hr>
</p>
<p><h3> Alignment and Buffering</h3>
</p>
<p>The Oodle IOQ can be used with aligned or unaligned IO. Unaligned IO is faster on some
platforms, and sometimes has lower memory use, so it should be used when possible.
Some platforms can only do true async IO on sector-aligned boundaries, so if you use unaligned
IO on those platforms the IO thread will be running synchronous IO (it will still appear
asynchronous to the client code using the IOQ).
</p>
<p>If you don't want to use aligned IO, open all files with <a href="javascript:show('OodleXFileOpenFlags.html','OodleXFileOpenFlags.html_OodleXFileOpenFlags_Buffered')" class="paragraph">OodleXFileOpenFlags_Buffered</a>. Then
the file sizes and positions you pass to IOQ can be arbitrary.
</p>
<p>If you wish to use aligned IO, all pointers and file positions that are used in OodleIOQ
calls must be aligned. The easiest way is to align everything to <a href="javascript:show('OODLEX_IO_MAX_ALIGNMENT.html')" class="paragraph">OODLEX_IO_MAX_ALIGNMENT</a>,
which works on any platform. To do this you can allocate your
buffers using <a href="javascript:show('OodleXMalloc_IOAligned.html')" class="paragraph">OodleXMalloc_IOAligned</a> (or you can always align pointers yourself).
</p>
<p>If you don't want to use <a href="javascript:show('OODLEX_IO_MAX_ALIGNMENT.html')" class="paragraph">OODLEX_IO_MAX_ALIGNMENT</a>, <a href="javascript:show('OodleXIOQ_GetInfo.html')" class="paragraph">OodleXIOQ_GetInfo</a> will report the actual
alignment required for a given file on that platform. Note that the alignment may differ
on different devices, so it should not be stored as a global.
</p>
<p>To do non-aligned IO when you have opened your files in aligned mode, you have a few options.
To read an unaligned part of a file, simply
move the start position back to the previous alignment, with <a href="javascript:show('OodleX_IOAlignDownS64.html')" class="paragraph">OodleX_IOAlignDownS64</a> and move
the end position up with <a href="javascript:show('OodleX_IOAlignUpS64.html')" class="paragraph">OodleX_IOAlignUpS64</a> , then read this larger block and you will find
your unaligned piece inside. Alternatively, <a href="javascript:show('OodleXIOQ_ReadUnalignedAdjustPointer_Async.html')" class="paragraph">OodleXIOQ_ReadUnalignedAdjustPointer_Async</a>
is a helper which does this for you.
</p>
<p>Another option is to use the higher level OodleFile
routines, which do large aligned IO's to fill a buffer and let you grab arbitrary pieces of
that buffer. You could also use an OodleIOQStream if you are always reading forward
linearly.
</p>
<p>To write an unaligned portion of a file (on a file opened in aligned-IO mode),
it's probably best to use the higher level OodleFile
interface which does synchronous buffering for you. Otherwise you have to first read the
surrounding larger aligned chunks, replace your unaligned portion, and write it back out again.
</p>
<p><hr>
</p>
<p><h3> Tracking Errors</h3>
</p>
<p>You can track the error status and completion of each request using the <a href="javascript:show('OodleXHandle.html')" class="paragraph">OodleXHandle</a> it
returns.
</p>
<p>Alternatively, OodleIOQ supports a more "file-first" mode of usage.
</p>
<p><a href="javascript:show('OodleXIOQFile.html')" class="paragraph">OodleXIOQFile</a> tracks the last error of any request on it, so you can just fire off a
bunch of requests and then check <a href="javascript:show('OodleXIOQ_GetLastError.html')" class="paragraph">OodleXIOQ_GetLastError</a> on the file to see if any of
them failed.
</p>
<p><a href="javascript:show('OodleXIOQFile.html')" class="paragraph">OodleXIOQFile</a> also tracks the last handle of any operation started on it, so you can
use OodleIOQ_GetLastRequest or OodleXIOQ_WaitLastRequest to check if all ops on a file
are done.
</p>
<p>With this mode of usage, you probably want to start the operations with a autoDelete of
OodleXHandleAutoDelete_Yes so that you don't have to delete them manually.
</p>
<p><hr>
</p>
<p><h3> Threading Semantics</h3>
</p>
<p>IOQ operations are all inherently atomic and thread safe. However, your user objects which
you pass to the IOQ calls must be managed by you.
</p>
<p>Buffers used in IOQ calls must be kept allocated for the lifetime of the operation.
eg. if you call <a href="javascript:show('OodleXIOQ_Read_Async.html')" class="paragraph">OodleXIOQ_Read_Async</a> , the memory pointer you pass in must be kept allocated
until the handle completes. Don't use memory on the stack if your function can return
before the operation is complete.
</p>
<p>Strings passed into IOQ requests (eg. file names) are copied and can be freed immediately
after starting the operation.<br>&nbsp;<br> <table class=bar> <tr>
<td width=33% align=left><span class='arrowleft'></span><a href="javascript:show('OodleXAPI_IOQ.html')" class="paragraph">OodleX low level async io</a></td><td width=33% align=center><span class='arrowup'></span><a href="javascript:show('OodleXAPI_IOQ.html')" class="paragraph">OodleX low level async io</a></td><td width=33% align=right><span class='arrowright'></span><a href="javascript:show('OODLEX_IO_MAX_ALIGNMENT.html')" class="paragraph">OODLEX_IO_MAX_ALIGNMENT</a></td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="OODLE_JOB_NULL_HANDLE.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>OODLE_JOB_NULL_HANDLE</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "OODLE_JOB_NULL_HANDLE.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="OODLE_JOB_NULL_HANDLE.html_backmenu">
<table class=dropmenu>
<tr><td><span class='arrowleft'></span>&nbsp;<a href="javascript:show('OODLE_JOB_MAX_DEPENDENCIES.html')" class="paragraph">OODLE_JOB_MAX_DEPENDENCIES</a></td></tr><tr><td><span class='arrowright'></span>&nbsp;<a href="javascript:show('t_fp_Oodle_Job.html')" class="paragraph">t_fp_Oodle_Job</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<div class=prototype><div class=prototype_header>// Preprocessor definition:</div><pre><span class=prototype_type>#define</span> <a href="javascript:show('OODLE_JOB_NULL_HANDLE.html')">OODLE_JOB_NULL_HANDLE</a> (0)</pre></div><div class=discussion_heading>Discussion</div> Value 0 of Jobify handles is reserved to mean none
* Wait(OODLE_JOB_NULL_HANDLE) is a nop
* if RunJob returns OODLE_JOB_NULL_HANDLE it means the job
* was run synchronously and no wait is required
<br>&nbsp;<br> <table class=bar> <tr>
<td width=33% align=left><span class='arrowleft'></span><a href="javascript:show('OODLE_JOB_MAX_DEPENDENCIES.html')" class="paragraph">OODLE_JOB_MAX_DEPENDENCIES</a></td><td width=33% align=center><span class='arrowup'></span><a href="javascript:show('OodleAPI_Base.html')" class="paragraph">Core Base</a></td><td width=33% align=right><span class='arrowright'></span><a href="javascript:show('t_fp_Oodle_Job.html')" class="paragraph">t_fp_Oodle_Job</a></td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="OodleNet_Plugins_SetAssertion.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>OodleNet_Plugins_SetAssertion</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "OodleNet_Plugins_SetAssertion.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="OodleNet_Plugins_SetAssertion.html_backmenu">
<table class=dropmenu>
<tr><td><span class='arrowleft'></span>&nbsp;<a href="javascript:show('OodleNet_Plugins_SetPrintf.html')" class="paragraph">OodleNet_Plugins_SetPrintf</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<div class=prototype><div class=prototype_header>// Function prototype:</div><pre><span class=prototype_type><a href="javascript:show('t_fp_OodleNet_Plugin_DisplayAssertion.html')" class="blue">t_fp_OodleNet_Plugin_DisplayAssertion</a></span> * <span class=prototype_type><a href="javascript:show('OodleNet_Plugins_SetAssertion.html')" class="blue">OodleNet_Plugins_SetAssertion</a></span>( <span class=prototype_type><a href="javascript:show('t_fp_OodleNet_Plugin_DisplayAssertion.html')" class="blue">t_fp_OodleNet_Plugin_DisplayAssertion</a></span> * fp_rrDisplayAssertion );</pre></div><div class=discussion_heading>Discussion</div>Install the callback used by Oodle Core for asserts<div class=discussion_heading>Parameters</div> <table> <tr> <td style='vertical-align: top;' class=paramname><a id="OodleNet_Plugins_SetAssertion.html_fp_rrDisplayAssertion" class=nohover>fp_rrDisplayAssertion</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> function pointer to your assert display function
</td></tr></table><div class=discussion_heading>Return Value</div> <table> <tr> <td style='vertical-align: top;' class=paramname><a id="OodleNet_Plugins_SetAssertion.html_return" class=nohover>return</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> returns the previous function pointer
</td></tr></table><div class=discussion_heading>Discussion</div></p>
<p> Use this function to install your own display for Oodle Core assertions.
This will only happen in debug builds.
</p>
<p> The default implementation in debug builds, if you install nothing, uses the C stderr printf for logging,
except on Microsoft platforms where it uses OutputDebugString.
</p>
<p> WARNING : this function is NOT thread safe! It should be done only once and done in a place where the caller can guarantee thread safety.
</p>
<p><br>&nbsp;<br> <table class=bar> <tr>
<td width=33% align=left><span class='arrowleft'></span><a href="javascript:show('OodleNet_Plugins_SetPrintf.html')" class="paragraph">OodleNet_Plugins_SetPrintf</a></td><td width=33% align=center><span class='arrowup'></span><a href="javascript:show('OodleAPI_OodleNet_Plugins.html')" class="paragraph">Network plugins</a></td><td width=33% align=right><span class='arrowright'></span><a href="javascript:show('t_fp_OodleNet_Plugin_MallocAligned.html')" class="paragraph">t_fp_OodleNet_Plugin_MallocAligned</a></td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="OODLE_ALLOW_DEPRECATED_COMPRESSORS.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>OODLE_ALLOW_DEPRECATED_COMPRESSORS</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "OODLE_ALLOW_DEPRECATED_COMPRESSORS.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="OODLE_ALLOW_DEPRECATED_COMPRESSORS.html_backmenu">
<table class=dropmenu>
<tr><td><span class='arrowright'></span>&nbsp;<a href="javascript:show('OODLELZ_LOCALDICTIONARYSIZE_MAX.html')" class="paragraph">OODLELZ_LOCALDICTIONARYSIZE_MAX</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<div class=prototype><div class=prototype_header>// Preprocessor definition:</div><pre><span class=prototype_type>#define</span> <a href="javascript:show('OODLE_ALLOW_DEPRECATED_COMPRESSORS.html')">OODLE_ALLOW_DEPRECATED_COMPRESSORS</a> </pre></div><div class=discussion_heading>Discussion</div> If you need to encode with the deprecated compressors, define this before including oodle2.h<div class=discussion_heading>Discussion</div> You may still decode with them without defining this.
<br>&nbsp;<br> <table class=bar> <tr>
<td width=33% align=left><span class='arrowleft'></span><a href="javascript:show('OodleAPI_LZ_Compressors.html')" class="paragraph">OodleAPI_LZ_Compressors</a></td><td width=33% align=center><span class='arrowup'></span><a href="javascript:show('OodleAPI_LZ_Compressors.html')" class="paragraph">OodleAPI_LZ_Compressors</a></td><td width=33% align=right><span class='arrowright'></span><a href="javascript:show('OODLELZ_LOCALDICTIONARYSIZE_MAX.html')" class="paragraph">OODLELZ_LOCALDICTIONARYSIZE_MAX</a></td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="examples.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>Examples</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "examples.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="examples.html_backmenu">
<table class=dropmenu>
<tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<ul class='TOCItem'>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('Oodle_About_Examples.html')">How to build and use the Oodle examples</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('example_lz.html')">example_lz : Example demonstrating LZ compression and decompression</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('example_lz_chart.html')">example_lz_chart : Example that makes a chart of OodleLZ options</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('example_lz_noallocs.html')">example_lz_noallocs : Example demonstrating Oodle compression with no allocations</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('example_lz_overlap.html')">example_lz_overlap : Example demonstrating parallel overlap with OodleLZ</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('example_lz_simple.html')">example_lz_simple : Example demonstrating very simple LZ memory->memory compression using only Oodle Core</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('example_lz_threadphased.html')">example_lz_threadphased : Example of 2-thread ThreadPhased decoding</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('example_network_client.html')">example_network_client : Example with simple network client support</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('example_packet.html')">example_packet : Example demonstrating network packet compression</a></li>
</ul>
<br>&nbsp;<br> <table class=bar> <tr>
<td width=33%>&nbsp;</td><td width=33%>&nbsp;</td><td width=33% align=right><span class='arrowright'></span><a href="javascript:show('Oodle_About_Examples.html')" class="paragraph">How to build and use the Oodle examples</a></td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="Oodle_FAQ_S64_And_SINTa.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>FAQ: What is SINTa? How do I load files bigger than 2 GB?</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "Oodle_FAQ_S64_And_SINTa.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="Oodle_FAQ_S64_And_SINTa.html_backmenu">
<table class=dropmenu>
<tr><td><span class='arrowleft'></span>&nbsp;<a href="javascript:show('Oodle_FAQ_OutOfHandles.html')" class="paragraph">FAQ: I ran out of OodleHandle table slots; what do I do?</a></td></tr><tr><td><span class='arrowup'></span>&nbsp;<a href="javascript:show('Oodle_FAQ.html')" class="paragraph">Frequently Asked Questions</a></td></tr><tr><td><span class='arrowright'></span>&nbsp;<a href="javascript:show('Oodle_FAQ_FindingIOProblems.html')" class="paragraph">FAQ: My Files aren't loading right and I can't track it down</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<P>
Oodle uses 64 bit integers for file sizes and file positions. This allows you to manipulate
files that are larger than 2 GB (31 bits) even on 32 bit systems.
</p>
<p>Oodle uses a variable called "SINTa" for most memory buffer sizes. The "a" stands for address
and indicates it is an integer the size of an address (eg. 32 bits on 32 bit systems and
64 bits if pointers are 64 bits). It's the same idea as "intptr_t" or "ptrdiff_t" in standard C.
</p>
<p>Many of the Oodle APIs, particularly the higher level ones that are provided for convenience,
only work if they can load an entire file into memory (for example, things like <a href="javascript:show('OodleXIOQ_ReadMallocWholeFile_Async.html')" class="paragraph">OodleXIOQ_ReadMallocWholeFile_Async</a>).
</p>
<p>On 64 bit systems, everything is simple - SINTa is the same as S64 and you can make buffers big enough
to load entire files.
</p>
<p>On 32 bit systems, SINTa is S32, and not all file sizes can fit in an SINTa.
</p>
<p>Whenever you have to cast an S64 to an SINTa, the safest way is to use <a href="javascript:show('OodleX_S64_to_SINTa_check.html')" class="paragraph">OodleX_S64_to_SINTa_check</a> ; on 64 bit systems
this is a no-op, but on 32 bit systems it emits an error if the size is too large.
</p>
<p>If you want to write code that can handle files larger than 2 GB on a 32 bit system, you can do this with Oodle,
you simply have to use the lower level APIs and avoid the higher level helpers that deal with whole file buffers.
</p>
<p>For example the basic <a href="javascript:show('OodleXIOQ_Read_Async.html')" class="paragraph">OodleXIOQ_Read_Async</a> that all other Oodle reads is built on can be used to read small parts of a large file.
</p>
<p>Similarly the whole buffer decompression routines like <a href="javascript:show('OodleLZ_Decompress.html')" class="paragraph">OodleLZ_Decompress</a> cannot be used if the whole buffer doesn't fit in
memory, but you can use the incremental decompression (<a href="javascript:show('OodleLZDecoder_DecodeSome.html')" class="paragraph">OodleLZDecoder_DecodeSome</a>) to stream a larger-than-memory file through
memory and decompress it.
</p>
<p>Oodle never makes match references further away than 1 GB, so you can encode huge buffers in 64-bit and they are gauranteed to
be decodeable in 32-bit.
</p>
<p>Oodle does not currently provide compression routines that can handle larger than memory buffers. But you can simply compress
part of the file independently and concatenate together the chunks, because OodleLZ compressed data is binary concatenatable.
(see <a href="javascript:show('OodleLZ_About.html')" class="paragraph">About OodleLZ</a>). For example you could encode 0.5 GB per call, with 0.5 GB of overlap to the previous chunk. The data you
emit this way could be decoded in one call on 64 bit systems, or with multiple calls on 32 bit.
</p>
<p>See the "oozi" example for compression of very large files.
</p>
<p>NOTE : I highly recommend using Oodle in 64 bit. Not only will it avoid memory limitations, it is significantly faster.<br>&nbsp;<br> <table class=bar> <tr>
<td width=33% align=left><span class='arrowleft'></span><a href="javascript:show('Oodle_FAQ_OutOfHandles.html')" class="paragraph">FAQ: I ran out of OodleHandle table slots; what do I do?</a></td><td width=33% align=center><span class='arrowup'></span><a href="javascript:show('Oodle_FAQ.html')" class="paragraph">Frequently Asked Questions</a></td><td width=33% align=right><span class='arrowright'></span><a href="javascript:show('Oodle_FAQ_FindingIOProblems.html')" class="paragraph">FAQ: My Files aren't loading right and I can't track it down</a></td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="OodleXIOQ_CloseFileRename_Async.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>OodleXIOQ_CloseFileRename_Async</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "OodleXIOQ_CloseFileRename_Async.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="OodleXIOQ_CloseFileRename_Async.html_backmenu">
<table class=dropmenu>
<tr><td><span class='arrowleft'></span>&nbsp;<a href="javascript:show('OodleXIOQ_CloseFile_Async.html')" class="paragraph">OodleXIOQ_CloseFile_Async</a></td></tr><tr><td><span class='arrowright'></span>&nbsp;<a href="javascript:show('OodleXIOQ_Read_Async.html')" class="paragraph">OodleXIOQ_Read_Async</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<div class=prototype><div class=prototype_header>// Function prototype:</div><pre><span class=prototype_type><a href="javascript:show('OodleXHandle.html')" class="blue">OodleXHandle</a></span> <span class=prototype_type><a href="javascript:show('OodleXIOQ_CloseFileRename_Async.html')" class="blue">OodleXIOQ_CloseFileRename_Async</a></span>( <span class=prototype_type><a href="javascript:show('OodleXIOQFile.html')" class="blue">OodleXIOQFile</a></span> file,
const char * renameTo,
OO_S64 truncateFileSize OODEFAULT( <span class=prototype_type><a href="javascript:show('OODLEX_FILE_CLOSE_NO_TRUNCATE_SIZE.html')" class="blue">OODLEX_FILE_CLOSE_NO_TRUNCATE_SIZE</a></span> ),
<span class=prototype_type><a href="javascript:show('OodleXHandleAutoDelete.html')" class="blue">OodleXHandleAutoDelete</a></span> autoDelete OODEFAULT( OodleXHandleAutoDelete_No ),
<span class=prototype_type><a href="javascript:show('OodleXPriority.html')" class="blue">OodleXPriority</a></span> priority OODEFAULT( OodleXPriority_Normal ),
const <span class=prototype_type><a href="javascript:show('OodleXHandle.html')" class="blue">OodleXHandle</a></span> * dependencies OODEFAULT( NULL ),
OO_S32 numDependencies OODEFAULT( 0 ) );</pre></div><div class=discussion_heading>Discussion</div>Start a close-file-rename request<div class=discussion_heading>Parameters</div> <table> <tr> <td style='vertical-align: top;' class=paramname><a id="OodleXIOQ_CloseFileRename_Async.html_file" class=nohover>file</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> the file to close
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXIOQ_CloseFileRename_Async.html_renameTo" class=nohover>renameTo</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> file to rename to (VFS, UTF-8)
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXIOQ_CloseFileRename_Async.html_truncateFileSize" class=nohover>truncateFileSize</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> (optional) truncate an OpenforWrite file
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXIOQ_CloseFileRename_Async.html_autoDelete" class=nohover>autoDelete</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> (optional) see <a href="javascript:show('OodleXHandleAutoDelete.html')" class="paragraph">OodleXHandleAutoDelete</a>
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXIOQ_CloseFileRename_Async.html_priority" class=nohover>priority</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> (optional) priority of the operation ; see <a href="javascript:show('OodleXPriority.html')" class="paragraph">OodleXPriority</a>
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXIOQ_CloseFileRename_Async.html_dependencies" class=nohover>dependencies</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> (optional) dependencies; the async op won't start until these are all complete; note : these are not freed, they must be autodelete or you must free them some other way.
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXIOQ_CloseFileRename_Async.html_numDependencies" class=nohover>numDependencies</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> (optional) number of handles in <i>deps</i> array
</td></tr></table><div class=discussion_heading>Return Value</div> <table> <tr> <td style='vertical-align: top;' class=paramname><a id="OodleXIOQ_CloseFileRename_Async.html_return" class=nohover>return</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> handle to the operation, or 0 if it could not be started (usually due to invalid args)
</td></tr></table><div class=discussion_heading>Discussion</div></p>
<p> Does an <a href="javascript:show('OodleXIOQ_CloseFile_Async.html')" class="paragraph">OodleXIOQ_CloseFile_Async</a> , then renames the file to "renameTo" - but only if there were no errors in writing
the file. To stop unimportant errors from causing OodleXIOQ_CloseFileRename_Async to fail, use <a href="javascript:show('OodleXIOQ_ClearError.html')" class="paragraph">OodleXIOQ_ClearError</a>
before calling this.
</p>
<p> <i>renameTo</i> can be NULL to cancel the close and delete the temp file.
</p>
<p> Useful with <a href="javascript:show('OodleXIOQ_OpenForWriteTempName_Async.html')" class="paragraph">OodleXIOQ_OpenForWriteTempName_Async</a>.
<br>&nbsp;<br> <table class=bar> <tr>
<td width=33% align=left><span class='arrowleft'></span><a href="javascript:show('OodleXIOQ_CloseFile_Async.html')" class="paragraph">OodleXIOQ_CloseFile_Async</a></td><td width=33% align=center><span class='arrowup'></span><a href="javascript:show('OodleXAPI_IOQ.html')" class="paragraph">OodleX low level async io</a></td><td width=33% align=right><span class='arrowright'></span><a href="javascript:show('OodleXIOQ_Read_Async.html')" class="paragraph">OodleXIOQ_Read_Async</a></td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="Oodle_About_ozip.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>About Oodle ozip</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "Oodle_About_ozip.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="Oodle_About_ozip.html_backmenu">
<table class=dropmenu>
<tr><td><span class='arrowleft'></span>&nbsp;<a href="javascript:show('Oodle_About_Index.html')" class="paragraph">Index of Abouts</a></td></tr><tr><td><span class='arrowup'></span>&nbsp;<a href="javascript:show('Oodle_About.html')" class="paragraph">About Oodle</a></td></tr><tr><td><span class='arrowright'></span>&nbsp;<a href="javascript:show('Oodle_About_Platforms.html')" class="paragraph">About Oodle on Platforms</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<P>
ozip is utility for Oodle that's designed to act like gzip, for piping compresed streams on Unix-like platforms.
</p>
<p>ozip comes with Oodle as a compiled executable (in the bin/ directory), and is also available as source code.
</p>
<p>The ozip code is public domain and is provided on github :
</p>
<p>https://github.com/jamesbloom/ozip/
</p>
<p>Oodle is not public domain and cannot be used without an Oodle license. The compiled ozip executable with Oodle
is not public domain.
</p>
<p>ozip can be used to test Oodle without having to write any code.
</p>
<p><div class=prototype>
<PRE>
ozip -k --kraken -6 lzt99
makes lzt99.ooz with Kraken at level 6 (Optimal2)
</PRE>
</div>
</p>
<p>When working on pipes, ozip incrementally flushes data so the stream keeps moving and memory use is limited.
It can be used as a drop in to most programs that expect gzip-like pipes. For example with tar :
</p>
<p><div class=prototype>
<PRE>
tar -cf archive.tar.ooz -I 'ozip --fast' subdir
tar cf - subdir | ozip --best > archive.tar.gz
</PRE>
</div>
</p>
<p>ozip can also be used for benchmarking. In benchmark mode it makes no output and runs the operation many times
to get accurate timing. You can use this to benchmark specific files with specific options, unlike <a href="javascript:show('example_lz_chart.html')" class="paragraph">example_lz_chart : Example that makes a chart of OodleLZ options</a>
which runs a matrix of compressors and levels with default options.
</p>
<p>For example :
</p>
<p><div class=prototype>
<PRE>
ozip -b lzt02
K 4 lzt02 : 755121 -> 161674 (4.671), 57.6 MB/s, 1808.7 MB/s
ozip -b lzt02 -9 --kraken
K 9 lzt02 : 755121 -> 135523 (5.572), 1.9 MB/s, 1547.4 MB/s
ozip -b lzt02 -9 --hydra
H 9 lzt02 : 755121 -> 130035 (5.807), 0.6 MB/s, 1291.0 MB/s
ozip -b lzt02 -9 --hydra -os512
H 9 lzt02 : 755121 -> 141414 (5.340), 0.6 MB/s, 1818.3 MB/s
zstd -b22 lzt02
22#lzt02 : 755121 -> 197827 (3.817), 10.21 MB/s , 815.0 MB/s
</PRE>
</div>
</p>
<p>See some tips on benchmarking here : <a href="javascript:show('start_Benchmarking.html')" class="paragraph">Tips for benchmarking a compressor</a><br>&nbsp;<br> <table class=bar> <tr>
<td width=33% align=left><span class='arrowleft'></span><a href="javascript:show('Oodle_About_Index.html')" class="paragraph">Index of Abouts</a></td><td width=33% align=center><span class='arrowup'></span><a href="javascript:show('Oodle_About.html')" class="paragraph">About Oodle</a></td><td width=33% align=right><span class='arrowright'></span><a href="javascript:show('Oodle_About_Platforms.html')" class="paragraph">About Oodle on Platforms</a></td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="OodleXLZ_ReadAndDecompress_Wide_Async.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>OodleXLZ_ReadAndDecompress_Wide_Async</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "OodleXLZ_ReadAndDecompress_Wide_Async.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="OodleXLZ_ReadAndDecompress_Wide_Async.html_backmenu">
<table class=dropmenu>
<tr><td><span class='arrowleft'></span>&nbsp;<a href="javascript:show('OodleXLZ_Decompress_Narrow_Async.html')" class="paragraph">OodleXLZ_Decompress_Narrow_Async</a></td></tr><tr><td><span class='arrowright'></span>&nbsp;<a href="javascript:show('OodleXLZ_Decompress_Wide_Async.html')" class="paragraph">OodleXLZ_Decompress_Wide_Async</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<div class=prototype><div class=prototype_header>// Function prototype:</div><pre><span class=prototype_type><a href="javascript:show('OodleXHandle.html')" class="blue">OodleXHandle</a></span> <span class=prototype_type><a href="javascript:show('OodleXLZ_ReadAndDecompress_Wide_Async.html')" class="blue">OodleXLZ_ReadAndDecompress_Wide_Async</a></span>( OO_U32 asyncSelect,
const <span class=prototype_type><a href="javascript:show('OodleLZ_SeekTable.html')" class="blue">OodleLZ_SeekTable</a></span> * seekTable,
const void * packedDataPtr,
OO_SINTa packedLen,
OO_SINTa packedLenPreviouslyRead,
<span class=prototype_type><a href="javascript:show('OodleXIOQFile.html')" class="blue">OodleXIOQFile</a></span> packedFile,
OO_S64 packedDataStartPos,
void * rawArray,
OO_SINTa rawArrayLen,
<span class=prototype_type><a href="javascript:show('OodleLZ_FuzzSafe.html')" class="blue">OodleLZ_FuzzSafe</a></span> fuzzSafe,
<span class=prototype_type><a href="javascript:show('OodleLZ_CheckCRC.html')" class="blue">OodleLZ_CheckCRC</a></span> checkCRC,
<span class=prototype_type><a href="javascript:show('OodleLZ_Verbosity.html')" class="blue">OodleLZ_Verbosity</a></span> verbosity OODEFAULT( OodleLZ_Verbosity_None ),
void * decBufBase OODEFAULT( NULL ),
OO_SINTa decBufSize OODEFAULT( 0 ),
<span class=prototype_type><a href="javascript:show('OodleLZ_PackedRawOverlap.html')" class="blue">OodleLZ_PackedRawOverlap</a></span> packedRawOverlap OODEFAULT( OodleLZ_PackedRawOverlap_No ),
<span class=prototype_type><a href="javascript:show('OodleXIOQFile.html')" class="blue">OodleXIOQFile</a></span> writeToFile OODEFAULT( 0 ),
OO_S64 writeToFileStartPos OODEFAULT( 0 ),
<span class=prototype_type><a href="javascript:show('OodleXHandle.html')" class="blue">OodleXHandle</a></span> * pWriteHandleGroup OODEFAULT( 0 ),
<span class=prototype_type><a href="javascript:show('OodleXHandleAutoDelete.html')" class="blue">OodleXHandleAutoDelete</a></span> autoDelete OODEFAULT( OodleXHandleAutoDelete_No ),
const <span class=prototype_type><a href="javascript:show('OodleXHandle.html')" class="blue">OodleXHandle</a></span> * dependencies OODEFAULT( NULL ),
OO_S32 numDependencies OODEFAULT( 0 ) );</pre></div><div class=discussion_heading>Discussion</div>Start an async LZ decompress, possibly read packed data and write raw data<div class=discussion_heading>Parameters</div> <table> <tr> <td style='vertical-align: top;' class=paramname><a id="OodleXLZ_ReadAndDecompress_Wide_Async.html_asyncSelect" class=nohover>asyncSelect</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> logical OR of <a href="javascript:show('OodleXAsyncSelect.html')" class="paragraph">OodleXAsyncSelect</a> flags determine how the async is run
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXLZ_ReadAndDecompress_Wide_Async.html_seekTable" class=nohover>seekTable</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> seek locations as created by <a href="javascript:show('OodleLZ_CreateSeekTable.html')" class="paragraph">OodleLZ_CreateSeekTable</a>
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXLZ_ReadAndDecompress_Wide_Async.html_packedDataPtr" class=nohover>packedDataPtr</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> pointer to LZ compressed data
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXLZ_ReadAndDecompress_Wide_Async.html_packedLen" class=nohover>packedLen</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> compressed data length
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXLZ_ReadAndDecompress_Wide_Async.html_packedLenPreviouslyRead" class=nohover>packedLenPreviouslyRead</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> number of packed bytes already in packedDataPtr from previous IO ; eg. packedLen if the whole buffer is full
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXLZ_ReadAndDecompress_Wide_Async.html_packedFile" class=nohover>packedFile</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> OodleXIOQFile to read packed bytes from
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXLZ_ReadAndDecompress_Wide_Async.html_packedDataStartPos" class=nohover>packedDataStartPos</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> file position where the packed data starts (must be misaligned the same way as <i>packedDataPtr</i>)
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXLZ_ReadAndDecompress_Wide_Async.html_rawArray" class=nohover>rawArray</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> pointer to memory filled with decompressed data
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXLZ_ReadAndDecompress_Wide_Async.html_rawArrayLen" class=nohover>rawArrayLen</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> length of decompressed data
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXLZ_ReadAndDecompress_Wide_Async.html_checkCRC" class=nohover>checkCRC</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> if OodleLZ_CheckCRC_Yes, the decompressor checks the crc to ensure data integrity
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXLZ_ReadAndDecompress_Wide_Async.html_verbosity" class=nohover>verbosity</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> (optional) if not OodleLZ_Verbosity_None, will log some information
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXLZ_ReadAndDecompress_Wide_Async.html_decBufBase" class=nohover>decBufBase</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> (optional) if not NULL, provides preceding data to prime the dictionary; must be contiguous with rawBuf, the data between the pointers <i>dictionaryBase</i> and <i>rawBuf</i> is used as the preconditioning data. The exact same precondition must be passed to encoder and decoder.
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXLZ_ReadAndDecompress_Wide_Async.html_decBufSize" class=nohover>decBufSize</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> (optional) size of circular buffer starting at decBufBase
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXLZ_ReadAndDecompress_Wide_Async.html_packedRawOverlap" class=nohover>packedRawOverlap</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> (optional) if OodleLZ_PackedRawOverlap_Yes, the compressed data is in the same memory array as the output raw data
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXLZ_ReadAndDecompress_Wide_Async.html_writeToFile" class=nohover>writeToFile</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> (optional) OodleXIOQFile to write raw data to
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXLZ_ReadAndDecompress_Wide_Async.html_writeToFileStartPos" class=nohover>writeToFileStartPos</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> (optional) file position where writeToFile should start (must be <a href="javascript:show('OODLEX_IO_MAX_ALIGNMENT.html')" class="paragraph">OODLEX_IO_MAX_ALIGNMENT</a> aligned)
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXLZ_ReadAndDecompress_Wide_Async.html_pWriteHandleGroup" class=nohover>pWriteHandleGroup</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> (optional) if writeToFile is given, this is filled with an OodleAsyncGroup OodleXHandle containing all the file IO operations
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXLZ_ReadAndDecompress_Wide_Async.html_autoDelete" class=nohover>autoDelete</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> (optional) see <a href="javascript:show('OodleXHandleAutoDelete.html')" class="paragraph">OodleXHandleAutoDelete</a>
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXLZ_ReadAndDecompress_Wide_Async.html_dependencies" class=nohover>dependencies</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> (optional) dependencies; the async op won't start until these are all complete; note : these are not freed, they must be autodelete or you must free them some other way.
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXLZ_ReadAndDecompress_Wide_Async.html_numDependencies" class=nohover>numDependencies</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> (optional) number of handles in <i>deps</i> array
</td></tr></table><div class=discussion_heading>Return Value</div> <table> <tr> <td style='vertical-align: top;' class=paramname><a id="OodleXLZ_ReadAndDecompress_Wide_Async.html_return" class=nohover>return</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> OodleXHandle to the operation, or OodleXHandle_Null for invalid arguments
</td></tr></table><div class=discussion_heading>Discussion</div></p>
<p> Start an async LZ decompress with the runner specified in asyncSelect.
</p>
<p> The entire Read-Decomp-Write is done with maximum parallelism; reads are done in chunks, as each compressed chunk is available,
it is decompressed, and as raw chunks are done, they are written.
</p>
<p> A note on the alignment of <i>packedDataPtr</i> and <i>packedDataStartPos</i> : the simplest way is if both are <a href="javascript:show('OODLEX_IO_MAX_ALIGNMENT.html')" class="paragraph">OODLEX_IO_MAX_ALIGNMENT</a>.
However, if the packed data starts some non-aligned way into the file, ensure the misalignment of both is the same. This is
automatic if you allocate a buffer to correspond to the whole file, or start your read at the preceding aligned position.
</p>
<p> If you have the data already read into memory, use <a href="javascript:show('OodleXLZ_Decompress_Wide_Async.html')" class="paragraph">OodleXLZ_Decompress_Wide_Async</a> instead.
</p>
<p> To use <a href="javascript:show('OodleLZ_PackedRawOverlap.html','OodleLZ_PackedRawOverlap.html_OodleLZ_PackedRawOverlap_Yes')" class="paragraph">OodleLZ_PackedRawOverlap_Yes</a> , make a buffer of size at least <a href="javascript:show('OodleLZ_GetInPlaceDecodeBufferSize.html')" class="paragraph">OodleLZ_GetInPlaceDecodeBufferSize</a> ; you then read
the compressed data in to the <b>end</b> of that array, and decompress with the raw pointer set to the <b>front</b> of that array.
This lets you avoid allocating two large arrays. It does hurt parallelism.
</p>
<p> <i>rawArray</i> and <i>packedDataPtr</i> memory blocks passed to this function must be kept alive for the duration of the async.
</p>
<p> To use this function, you should have stored the <i>seekTable</i> for the compressed data in a file.
</p>
<p> NOTE !! : if <i>writeToFile</i> is provided, the writes are async and are NOT necessarily done when
the returned handle is done; the returned handle is for the decompress. They are done when the
handle in <b>pWriteHandleGroup is done. You must not free the buffer being written until *pWriteHandleGroup is done.
</b><br>&nbsp;<br> <table class=bar> <tr>
<td width=33% align=left><span class='arrowleft'></span><a href="javascript:show('OodleXLZ_Decompress_Narrow_Async.html')" class="paragraph">OodleXLZ_Decompress_Narrow_Async</a></td><td width=33% align=center><span class='arrowup'></span><a href="javascript:show('OodleXAPI_LZ_Async.html')" class="paragraph">OodleXAPI_LZ_Async</a></td><td width=33% align=right><span class='arrowright'></span><a href="javascript:show('OodleXLZ_Decompress_Wide_Async.html')" class="paragraph">OodleXLZ_Decompress_Wide_Async</a></td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="OodleX_SetDefaultFileOps.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>OodleX_SetDefaultFileOps</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "OodleX_SetDefaultFileOps.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="OodleX_SetDefaultFileOps.html_backmenu">
<table class=dropmenu>
<tr><td><span class='arrowleft'></span>&nbsp;<a href="javascript:show('OodleX_GetDefaultFileOps.html')" class="paragraph">OodleX_GetDefaultFileOps</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<div class=prototype><div class=prototype_header>// Function prototype:</div><pre>void <span class=prototype_type><a href="javascript:show('OodleX_SetDefaultFileOps.html')" class="blue">OodleX_SetDefaultFileOps</a></span>( const <span class=prototype_type><a href="javascript:show('OodleXFileOpsVTable.html')" class="blue">OodleXFileOpsVTable</a></span> * pNewVTable );</pre></div><div class=discussion_heading>Discussion</div>Change the default file ops vtable<div class=discussion_heading>Discussion</div><i>pNewVTable</i> is copied into the global default file ops.
</p>
<p> These file ops are used by Oodle whenever no other vtable is provided.
</p>
<p> WARNING : access to <a href="javascript:show('OodleXFileOpsVTable.html')" class="paragraph">OodleXFileOpsVTable</a> is not thread safe. It should generally only be done
at app initialization time to set your desired func pointers, and then not done thereafter.
<br>&nbsp;<br> <table class=bar> <tr>
<td width=33% align=left><span class='arrowleft'></span><a href="javascript:show('OodleX_GetDefaultFileOps.html')" class="paragraph">OodleX_GetDefaultFileOps</a></td><td width=33% align=center><span class='arrowup'></span><a href="javascript:show('OodleXAPI_IOQ.html')" class="paragraph">OodleX low level async io</a></td><td width=33% align=right><span class='arrowright'></span><a href="javascript:show('OodleXIOQFile.html')" class="paragraph">OodleXIOQFile</a></td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="OodleLZ_GetDecodeBufferSize.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>OodleLZ_GetDecodeBufferSize</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "OodleLZ_GetDecodeBufferSize.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="OodleLZ_GetDecodeBufferSize.html_backmenu">
<table class=dropmenu>
<tr><td><span class='arrowleft'></span>&nbsp;<a href="javascript:show('OodleLZ_GetCompressedBufferSizeNeeded.html')" class="paragraph">OodleLZ_GetCompressedBufferSizeNeeded</a></td></tr><tr><td><span class='arrowright'></span>&nbsp;<a href="javascript:show('OodleLZ_GetInPlaceDecodeBufferSize.html')" class="paragraph">OodleLZ_GetInPlaceDecodeBufferSize</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<div class=prototype><div class=prototype_header>// Function prototype:</div><pre>OO_SINTa <span class=prototype_type><a href="javascript:show('OodleLZ_GetDecodeBufferSize.html')" class="blue">OodleLZ_GetDecodeBufferSize</a></span>( <span class=prototype_type><a href="javascript:show('OodleLZ_Compressor.html')" class="blue">OodleLZ_Compressor</a></span> compressor,
OO_SINTa rawSize,
OO_BOOL corruptionPossible );</pre></div><div class=discussion_heading>Discussion</div>Get the size you must malloc the decode (raw) buffer<div class=discussion_heading>Parameters</div> <table> <tr> <td style='vertical-align: top;' class=paramname><a id="OodleLZ_GetDecodeBufferSize.html_compressor" class=nohover>compressor</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> compressor used; OodleLZ_Compressor_Invalid to make it enough for any compressor
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleLZ_GetDecodeBufferSize.html_rawSize" class=nohover>rawSize</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> uncompressed (raw) size without padding
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleLZ_GetDecodeBufferSize.html_corruptionPossible" class=nohover>corruptionPossible</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> true if it is possible for the decoder to get corrupted data
</td></tr></table><div class=discussion_heading>Return Value</div> <table> <tr> <td style='vertical-align: top;' class=paramname><a id="OodleLZ_GetDecodeBufferSize.html_return" class=nohover>return</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> size of buffer to malloc; slightly larger than rawSize if padding is needed
</td></tr></table><div class=discussion_heading>Discussion</div></p>
<p> As of Oodle 2.9.0 this function is not required. For all new codecs you can just use the size of the
uncompressed data for the decode buffer size (<i>rawSize</i>), no padding is needed.
</p>
<p> Note that LZB16 is still supported in 2.9.0 but does require padding when used in a circular
window (which is deprecated).
</p>
<p> This padding is necessary for the older compressors when FuzzSafe_No is used. The old compressors
and FuzzSafe_No are no longer supported.
</p>
<p> If <i>corruptionPossible</i> is true, a slightly larger buffer size is returned.
</p>
<p> If <i>corruptionPossible</i> is false, then you must ensure that the decoder does not get corrupted data,
either by passing <a href="javascript:show('OodleLZ_CheckCRC.html','OodleLZ_CheckCRC.html_OodleLZ_CheckCRC_Yes')" class="paragraph">OodleLZ_CheckCRC_Yes</a> , or by your own mechanism.
</p>
<p> Note about possible overrun in LZ decoding (applies to the old non-fuzz-safe compressors) :
as long as the compresseddata is not corrupted,
and you decode either the entire compressed buffer, or an integer number of "seek chunks" (<a href="javascript:show('OODLELZ_BLOCK_LEN.html')" class="paragraph">OODLELZ_BLOCK_LEN</a>),
then there will be no overrun. So you can decode LZ data in place and it won't stomp any following bytes.
If those conditions are not true (eg. decoding only part of a larger compressed stream, decoding
around a circular window, decoding data that may be corrupted), then there may be some limited amount of
overrun on decode, as returned by <a href="javascript:show('OodleLZ_GetDecodeBufferSize.html')" class="paragraph">OodleLZ_GetDecodeBufferSize</a>.
</p>
<p></p>
<p><br>&nbsp;<br> <table class=bar> <tr>
<td width=33% align=left><span class='arrowleft'></span><a href="javascript:show('OodleLZ_GetCompressedBufferSizeNeeded.html')" class="paragraph">OodleLZ_GetCompressedBufferSizeNeeded</a></td><td width=33% align=center><span class='arrowup'></span><a href="javascript:show('OodleAPI_LZ_Compressors.html')" class="paragraph">OodleAPI_LZ_Compressors</a></td><td width=33% align=right><span class='arrowright'></span><a href="javascript:show('OodleLZ_GetInPlaceDecodeBufferSize.html')" class="paragraph">OodleLZ_GetInPlaceDecodeBufferSize</a></td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="OodleX_IOAlignDownS32.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>OodleX_IOAlignDownS32</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "OodleX_IOAlignDownS32.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="OodleX_IOAlignDownS32.html_backmenu">
<table class=dropmenu>
<tr><td><span class='arrowleft'></span>&nbsp;<a href="javascript:show('OodleX_IOAlignUpSINTa.html')" class="paragraph">OodleX_IOAlignUpSINTa</a></td></tr><tr><td><span class='arrowright'></span>&nbsp;<a href="javascript:show('OodleX_IOAlignDownS64.html')" class="paragraph">OodleX_IOAlignDownS64</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<div class=prototype><div class=prototype_header>// Function prototype:</div><pre>OO_S32 <span class=prototype_type><a href="javascript:show('OodleX_IOAlignDownS32.html')" class="blue">OodleX_IOAlignDownS32</a></span>( const OO_S32 x );</pre></div><div class=discussion_heading>Discussion</div>Align down to <a href="javascript:show('OODLEX_IO_MAX_ALIGNMENT.html')" class="paragraph">OODLEX_IO_MAX_ALIGNMENT</a><div class=discussion_heading>Parameters</div> <table> <tr> <td style='vertical-align: top;' class=paramname><a id="OodleX_IOAlignDownS32.html_x" class=nohover>x</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> value to align
</td></tr></table><div class=discussion_heading>Return Value</div> <table> <tr> <td style='vertical-align: top;' class=paramname><a id="OodleX_IOAlignDownS32.html_return" class=nohover>return</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> aligned value
</td></tr></table><div class=discussion_heading>Discussion</div></p>
<p> Align x down to <a href="javascript:show('OODLEX_IO_MAX_ALIGNMENT.html')" class="paragraph">OODLEX_IO_MAX_ALIGNMENT</a>
<br>&nbsp;<br> <table class=bar> <tr>
<td width=33% align=left><span class='arrowleft'></span><a href="javascript:show('OodleX_IOAlignUpSINTa.html')" class="paragraph">OodleX_IOAlignUpSINTa</a></td><td width=33% align=center><span class='arrowup'></span><a href="javascript:show('OodleXAPI_Util.html')" class="paragraph">OodleX Utils</a></td><td width=33% align=right><span class='arrowright'></span><a href="javascript:show('OodleX_IOAlignDownS64.html')" class="paragraph">OodleX_IOAlignDownS64</a></td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="t_fp_OodleCore_Plugin_WaitJob.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>t_fp_OodleCore_Plugin_WaitJob</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "t_fp_OodleCore_Plugin_WaitJob.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="t_fp_OodleCore_Plugin_WaitJob.html_backmenu">
<table class=dropmenu>
<tr><td><span class='arrowleft'></span>&nbsp;<a href="javascript:show('t_fp_OodleCore_Plugin_RunJob.html')" class="paragraph">t_fp_OodleCore_Plugin_RunJob</a></td></tr><tr><td><span class='arrowright'></span>&nbsp;<a href="javascript:show('t_fp_OodleCore_Plugin_Printf.html')" class="paragraph">t_fp_OodleCore_Plugin_Printf</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<div class=prototype><div class=prototype_header>// Function typedef:</div><pre>OODEFFUNC void( OODLE_CALLBACK <span class=prototype_type><a href="javascript:show('t_fp_OodleCore_Plugin_WaitJob.html')" class="blue">t_fp_OodleCore_Plugin_WaitJob</a></span> )( OO_U64 job_handle,
void * user_ptr );</pre></div><div class=discussion_heading>Discussion</div>Function pointer type for OodleCore_Plugins_SetJobSystem<div class=discussion_heading>Parameters</div> <table> <tr> <td style='vertical-align: top;' class=paramname><a id="t_fp_OodleCore_Plugin_WaitJob.html_job_handle" class=nohover>job_handle</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> a job handle returned from RunJob. Never 0.
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="t_fp_OodleCore_Plugin_WaitJob.html_user_ptr" class=nohover>user_ptr</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> is passed through from the OodleLZ_CompressOptions or OodleTex_Encode call.
</td></tr></table><div class=discussion_heading>Discussion</div></p>
<p> Waits until the job specified by job_handle is done and cleans up any associated resources. Oodle
will call WaitJob exactly once for every RunJob call that didn't return 0.
</p>
<p> If job_handle was already completed, this should clean it up without waiting.
</p>
<p> A handle value should not be reused by another RunJob until WaitJob has been done with that value.
</p>
<p> WaitJob will not be called from running jobs. It will be only be called from the original thread that
invoked Oodle. If you are running Oodle from a worker thread, ensure that that thread is allowed to wait
on other job threads.
</p>
<p> See <a href="javascript:show('Oodle_About_Job_Threading_Plugins.html')" class="paragraph">About Oodle Job Threading Plugins</a>
<br>&nbsp;<br> <table class=bar> <tr>
<td width=33% align=left><span class='arrowleft'></span><a href="javascript:show('t_fp_OodleCore_Plugin_RunJob.html')" class="paragraph">t_fp_OodleCore_Plugin_RunJob</a></td><td width=33% align=center><span class='arrowup'></span><a href="javascript:show('OodleAPI_OodleCore_Plugins.html')" class="paragraph">Core plugins</a></td><td width=33% align=right><span class='arrowright'></span><a href="javascript:show('t_fp_OodleCore_Plugin_Printf.html')" class="paragraph">t_fp_OodleCore_Plugin_Printf</a></td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="OodleXPriority.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>OodleXPriority</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "OodleXPriority.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="OodleXPriority.html_backmenu">
<table class=dropmenu>
<tr><td><span class='arrowright'></span>&nbsp;<a href="javascript:show('OodleXAsyncSelect.html')" class="paragraph">OodleXAsyncSelect</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<div class=prototype><div class=prototype_header>// Enumerant:</div><pre><span class=prototype_type>enum</span> <a href="javascript:show('OodleXPriority.html')">OodleXPriority</a>
{
&nbsp;&nbsp;&nbsp;&nbsp;OodleXPriority_Normal = 2,
&nbsp;&nbsp;&nbsp;&nbsp;OodleXPriority_Default = OodleXPriority_Normal,
&nbsp;&nbsp;&nbsp;&nbsp;OodleXPriority_NoPopOnWait = 1,
&nbsp;&nbsp;&nbsp;&nbsp;OodleXPriority_Force32 = 0x40000000
};
</pre></div><div class=discussion_heading>Discussion</div> Priority for async tasks. Higher prority is done before lower priority.
Async work is (on average) FIFO within priority group.<div class=discussion_heading>Enumerants</div> <table> <tr> <td style='vertical-align: top;' class=paramname><a id="OodleXPriority.html_OodleXPriority_Normal" class=nohover>OodleXPriority_Normal</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> default priority ; does pop-on-wait</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXPriority.html_OodleXPriority_Default" class=nohover>OodleXPriority_Default</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc></td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXPriority.html_OodleXPriority_NoPopOnWait" class=nohover>OodleXPriority_NoPopOnWait</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> for "high level" jobs</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXPriority.html_OodleXPriority_Force32" class=nohover>OodleXPriority_Force32</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc></td></tr></table><div class=discussion_heading>Discussion</div> Core Jobs from Jobify are above priority Normal.
</p>
<p> "low priority" work is "high level", large groups of actions
"high priority" work is "low level", splitting small actions into micro actions that should complete soon
</p>
<p><br>&nbsp;<br> <table class=bar> <tr>
<td width=33% align=left><span class='arrowleft'></span><a href="javascript:show('OODLEX_ASYNC_HANDLE_ERROR.html')" class="paragraph">OODLEX_ASYNC_HANDLE_ERROR</a></td><td width=33% align=center><span class='arrowup'></span><a href="javascript:show('OodleXAPI_Handle.html')" class="paragraph">OodleX async handle operations</a></td><td width=33% align=right><span class='arrowright'></span><a href="javascript:show('OodleXAsyncSelect.html')" class="paragraph">OodleXAsyncSelect</a></td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="OodleAPI_OodleNetwork1.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>OodleAPI_OodleNetwork1</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "OodleAPI_OodleNetwork1.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="OodleAPI_OodleNetwork1.html_backmenu">
<table class=dropmenu>
<tr><td><span class='arrowup'></span>&nbsp;<a href="javascript:show('OodleAPI_Network.html')" class="paragraph">Oodle Network compression</a></td></tr><tr><td><span class='arrowright'></span>&nbsp;<a href="javascript:show('OodleNetwork_About.html')" class="paragraph">About Oodle Network Compression</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<P>
OodleNetwork1 compressor for shared-dictionary network channel compression.
</p>
<p> <p><ul class='TOCItem'>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleNetwork1_About.html')">About OodleNetwork1</a></li>
<li><span onClick="HandleClick(event, null); return false" class='TOCGroup closedbook_icon'></span>&nbsp;Defines</li>
<ul style="display:none" class='TOCItem'>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OODLENETWORK1_MAX_DICTIONARY_SIZE.html')">OODLENETWORK1_MAX_DICTIONARY_SIZE</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OODLENETWORK1_HASH_BITS_DEFAULT.html')">OODLENETWORK1_HASH_BITS_DEFAULT</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OODLENETWORK1_DECOMP_BUF_OVERREAD_LEN.html')">OODLENETWORK1_DECOMP_BUF_OVERREAD_LEN</a></li>
</ul>
<li><span onClick="HandleClick(event, null); return false" class='TOCGroup closedbook_icon'></span>&nbsp;Structures</li>
<ul style="display:none" class='TOCItem'>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleNetwork1_Shared.html')">OodleNetwork1_Shared</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleNetwork1TCP_State.html')">OodleNetwork1TCP_State</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleNetwork1UDP_State.html')">OodleNetwork1UDP_State</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleNetwork1UDP_StateCompacted.html')">OodleNetwork1UDP_StateCompacted</a></li>
</ul>
<li><span onClick="HandleClick(event, null); return false" class='TOCGroup closedbook_icon'></span>&nbsp;Functions</li>
<ul style="display:none" class='TOCItem'>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleNetwork1_Shared_Size.html')">OodleNetwork1_Shared_Size</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleNetwork1TCP_State_Size.html')">OodleNetwork1TCP_State_Size</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleNetwork1_CompressedBufferSizeNeeded.html')">OodleNetwork1_CompressedBufferSizeNeeded</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleNetwork1_Shared_SetWindow.html')">OodleNetwork1_Shared_SetWindow</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleNetwork1TCP_State_Reset.html')">OodleNetwork1TCP_State_Reset</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleNetwork1TCP_State_InitAsCopy.html')">OodleNetwork1TCP_State_InitAsCopy</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleNetwork1TCP_Train.html')">OodleNetwork1TCP_Train</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleNetwork1TCP_Encode.html')">OodleNetwork1TCP_Encode</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleNetwork1TCP_Decode.html')">OodleNetwork1TCP_Decode</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleNetwork1UDP_Train.html')">OodleNetwork1UDP_Train</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleNetwork1UDP_State_Size.html')">OodleNetwork1UDP_State_Size</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleNetwork1UDP_Encode.html')">OodleNetwork1UDP_Encode</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleNetwork1UDP_Decode.html')">OodleNetwork1UDP_Decode</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleNetwork1UDP_StateCompacted_MaxSize.html')">OodleNetwork1UDP_StateCompacted_MaxSize</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleNetwork1UDP_State_Compact_ForVersion.html')">OodleNetwork1UDP_State_Compact_ForVersion</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleNetwork1UDP_State_Compact.html')">OodleNetwork1UDP_State_Compact</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleNetwork1UDP_State_Uncompact_ForVersion.html')">OodleNetwork1UDP_State_Uncompact_ForVersion</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleNetwork1UDP_State_Uncompact.html')">OodleNetwork1UDP_State_Uncompact</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleNetwork1_SelectDictionarySupported.html')">OodleNetwork1_SelectDictionarySupported</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleNetwork1_SelectDictionaryFromPackets.html')">OodleNetwork1_SelectDictionaryFromPackets</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleNetwork1_SelectDictionaryFromPackets_Trials.html')">OodleNetwork1_SelectDictionaryFromPackets_Trials</a></li>
</ul>
</ul>
<br>&nbsp;<br> <table class=bar> <tr>
<td width=33% align=left><span class='arrowleft'></span><a href="javascript:show('OodleAPI_Network.html')" class="paragraph">Oodle Network compression</a></td><td width=33% align=center><span class='arrowup'></span><a href="javascript:show('OodleAPI_Network.html')" class="paragraph">Oodle Network compression</a></td><td width=33% align=right><span class='arrowright'></span><a href="javascript:show('OodleNetwork1_About.html')" class="paragraph">About OodleNetwork1</a></td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="OodleDecompressCallback.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>OodleDecompressCallback</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "OodleDecompressCallback.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="OodleDecompressCallback.html_backmenu">
<table class=dropmenu>
<tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<div class=prototype><div class=prototype_header>// Function typedef:</div><pre>OODEFFUNC <span class=prototype_type><a href="javascript:show('OodleDecompressCallbackRet.html')" class="blue">OodleDecompressCallbackRet</a></span>( OODLE_CALLBACK <span class=prototype_type><a href="javascript:show('OodleDecompressCallback.html')" class="blue">OodleDecompressCallback</a></span> )( void * userdata,
const OO_U8 * rawBuf,
OO_SINTa rawLen,
const OO_U8 * compBuf,
OO_SINTa compBufferSize,
OO_SINTa rawDone,
OO_SINTa compUsed );</pre></div><div class=discussion_heading>Discussion</div>User-provided callback for decompression<div class=discussion_heading>Parameters</div> <table> <tr> <td style='vertical-align: top;' class=paramname><a id="OodleDecompressCallback.html_userdata" class=nohover>userdata</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> the data you passed for <i>pcbData</i>
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleDecompressCallback.html_rawBuf" class=nohover>rawBuf</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> the decompressed buffer
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleDecompressCallback.html_rawLen" class=nohover>rawLen</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> the total decompressed length
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleDecompressCallback.html_compBuf" class=nohover>compBuf</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> the compressed buffer
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleDecompressCallback.html_compBufferSize" class=nohover>compBufferSize</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> the total compressed length
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleDecompressCallback.html_rawDone" class=nohover>rawDone</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> number of bytes in rawBuf decompressed so far
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleDecompressCallback.html_compUsed" class=nohover>compUsed</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> number of bytes in compBuf consumed so far
</td></tr></table><div class=discussion_heading>Discussion</div></p>
<p> OodleDecompressCallback is called incrementally during decompression.
<br>&nbsp;<br> <table class=bar> <tr>
<td width=33% align=left><span class='arrowleft'></span><a href="javascript:show('OodleLZ_GetChunkCompressor.html')" class="paragraph">OodleLZ_GetChunkCompressor</a></td><td width=33% align=center><span class='arrowup'></span><a href="javascript:show('OodleAPI_LZ_Compressors.html')" class="paragraph">OodleAPI_LZ_Compressors</a></td><td width=33%>&nbsp;</td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="example_lz_simple.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>example_lz_simple : Example demonstrating very simple LZ memory->memory compression using only Oodle Core</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "example_lz_simple.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="example_lz_simple.html_backmenu">
<table class=dropmenu>
<tr><td><span class='arrowleft'></span>&nbsp;<a href="javascript:show('example_lz_overlap.html')" class="paragraph">example_lz_overlap : Example demonstrating parallel overlap with OodleLZ</a></td></tr><tr><td><span class='arrowup'></span>&nbsp;<a href="javascript:show('examples.html')" class="paragraph">Examples</a></td></tr><tr><td><span class='arrowright'></span>&nbsp;<a href="javascript:show('example_lz_threadphased.html')" class="paragraph">example_lz_threadphased : Example of 2-thread ThreadPhased decoding</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<div class=discussion_heading>Discussion</div>Oodle example_lz_simple
</p>
<p>Very simple example of OodleLZ memory -> memory compression & decompression.
</p>
<p>Uses stdio for file IO to load an input file.
</p>
<p>See <a href="javascript:show('example_lz.html')" class="paragraph">example_lz : Example demonstrating LZ compression and decompression</a> for more advanced OodleLZ usage.
</p>
<p>example_lz_simple only uses Oodle Core, no Oodle Ext
</p>
<p>include oodle2.h and not oodle2x.h<div class=prototype> <pre>
#include "../include/oodle2.h"
#ifndef _CRT_SECURE_NO_WARNINGS
#define _CRT_SECURE_NO_WARNINGS
#endif
#include &lt;stdio.h>
#include &lt;string.h>
#include &lt;assert.h>
#include &lt;stdlib.h>
#ifdef BUILDING_EXAMPLE_CALLER
#define main <span class=prototype_type><a href="javascript:show('example_lz_simple.html')" class="blue">example_lz_simple</a></span>
#endif
#include "read_whole_file.h"
extern "C" int main(int argc,char *argv[])
{
</pre></div>No initialization is needed for Oodle2 Core
</p>
<p> we let Oodle Core use the default system plugins (the C stdlib)
To change them, use <a href="javascript:show('OodleAPI_OodleCore_Plugins.html')" class="paragraph">Core plugins</a><div class=prototype> <pre>
<span style="color:#008000;">// optional check to make sure header matches lib :</span>
if ( ! <span class=prototype_type><a href="javascript:show('Oodle_CheckVersion.html')" class="blue">Oodle_CheckVersion</a></span>(<span class=prototype_type><a href="javascript:show('OODLE_HEADER_VERSION.html')" class="blue">OODLE_HEADER_VERSION</a></span>) )
{
fprintf(stderr,"Oodle header version mismatch\n");
return 10;
}
<span style="color:#008000;">// get args :</span>
const char * in_name;
if ( argc &lt; 2 )
{
in_name = "r:\\testsets\\lztestset\\lzt02";
}
else
{
in_name = argv[1];
}
</pre></div>read input file using stdio<div class=prototype> <pre>
OO_SINTa length;
void * buf = read_whole_file(in_name,&amp;length);
if ( ! buf )
{
fprintf(stderr,"couldn't open : %s\n",in_name);
return 10;
}
</pre></div>Run OodleLZ_Compress from memory (buf) to memory (compbuf)
</p>
<p>Use the OodleLZ_Compressor_Kraken compressor. Kraken is an amazing balance of good compression and fast decode
speed. It should generally be your first choice, then try Mermaid or Leviathan if you want faster decodes or more
compression.
</p>
<p>Use OodleLZ_CompressionLevel_Normal level of effort in the encoder. Normal is a balance of encode speed and compression
ratio. Different levels trade off faster or slower encoding for compressed size. See <a href="javascript:show('OodleLZ_CompressionLevel.html')" class="paragraph">OodleLZ_CompressionLevel</a>.
</p>
<p>See <a href="javascript:show('OodleLZ_About.html')" class="paragraph">About OodleLZ</a> for information on selection of the compression options.
</p>
<p>This call is synchronous and not threaded; see <a href="javascript:show('example_lz.html')" class="paragraph">example_lz : Example demonstrating LZ compression and decompression</a> for an example using the async compression APIs.<div class=prototype> <pre>
<span class=prototype_type><a href="javascript:show('OodleLZ_Compressor.html')" class="blue">OodleLZ_Compressor</a></span> compressor = OodleLZ_Compressor_Kraken;
<span class=prototype_type><a href="javascript:show('OodleLZ_CompressionLevel.html')" class="blue">OodleLZ_CompressionLevel</a></span> level = OodleLZ_CompressionLevel_Normal;
<span style="color:#008000;">//OodleLZ_CompressionLevel level = OodleLZ_CompressionLevel_Optimal; // for high compression, slower encode</span>
<span style="color:#008000;">// allocate memory big enough for compressed data :</span>
void * compbuf = malloc( <span class=prototype_type><a href="javascript:show('OodleLZ_GetCompressedBufferSizeNeeded.html')" class="blue">OodleLZ_GetCompressedBufferSizeNeeded</a></span>(compressor,length) + sizeof(length) );
if ( compbuf == NULL )
return 10;
char * compptr = (char *)compbuf;
memcpy(compptr,&amp;length,sizeof(length));
compptr += sizeof(length);
<span style="color:#008000;">// compress :</span>
OO_SINTa complen = <span class=prototype_type><a href="javascript:show('OodleLZ_Compress.html')" class="blue">OodleLZ_Compress</a></span>(compressor,buf,length,compptr,level);
compptr += complen;
<span style="color:#008000;">// log about it :</span>
<span style="color:#008000;">// full compressed size also includes the header +(int)sizeof(length)</span>
printf("%s compressed %d -> %d\n",in_name,(int)length,(int)complen);
</pre></div>Run OodleLZ_Decompress from memory (compbuf) to memory (decbuf)
</p>
<p>Note that you must provide the exact decompressed size. OodleLZ data is headerless; store the size in
your own header.
</p>
<p>We will allocate the needed decoder scratch mem to pass in, then OodleLZ_Decompress will do no allocations
internally. In real use you might want to keep the scratch mem allocated across calls so it doesn't need to
be allocated and freed each time. The scratch mem can be reused, but cannot be used by multiple threads at the
same time. See also example_lz_noallocs<div class=prototype> <pre>
OO_SINTa declength;
compptr = (char *)compbuf;
memcpy(&amp;declength,compptr,sizeof(declength));
compptr += sizeof(declength);
assert( length == declength );
<span style="color:#008000;">// malloc for decompressed buffer :</span>
void * decbuf = malloc( declength );
<span style="color:#008000;">// allocate the decoder scratch memory needed</span>
<span style="color:#008000;">// if we pass NULL for these (the default argument)</span>
<span style="color:#008000;">// then OodleLZ_Decompress will allocate them internally</span>
OO_SINTa decoderScratchMemSize = <span class=prototype_type><a href="javascript:show('OodleLZDecoder_MemorySizeNeeded.html')" class="blue">OodleLZDecoder_MemorySizeNeeded</a></span>(compressor,-1);
void * decoderScratchMem = malloc( decoderScratchMemSize );
<span style="color:#008000;">// do the decompress :</span>
OO_SINTa decompress_return = <span class=prototype_type><a href="javascript:show('OodleLZ_Decompress.html')" class="blue">OodleLZ_Decompress</a></span>(compptr,complen,decbuf,declength,
OodleLZ_FuzzSafe_Yes,OodleLZ_CheckCRC_No,OodleLZ_Verbosity_None,NULL,0,NULL,NULL,
decoderScratchMem,decoderScratchMemSize);
<span style="color:#008000;">// check it was successful :</span>
assert( decompress_return == length );
assert( memcmp(buf,decbuf,length) == 0 );
if ( decompress_return != length )
return 10;
printf("decompressed successfully.\n");
</pre></div>And finish up. No shutdown is needed for Oodle2 Core.<div class=prototype> <pre>
<span style="color:#008000;">// free all the memory :</span>
free(buf);
free(compbuf);
free(decbuf);
free(decoderScratchMem);
return 0;
}
</pre></div><br>&nbsp;<br> <table class=bar> <tr>
<td width=33% align=left><span class='arrowleft'></span><a href="javascript:show('example_lz_overlap.html')" class="paragraph">example_lz_overlap : Example demonstrating parallel overlap with OodleLZ</a></td><td width=33% align=center><span class='arrowup'></span><a href="javascript:show('examples.html')" class="paragraph">Examples</a></td><td width=33% align=right><span class='arrowright'></span><a href="javascript:show('example_lz_threadphased.html')" class="paragraph">example_lz_threadphased : Example of 2-thread ThreadPhased decoding</a></td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="OodleX_WaitAll.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>OodleX_WaitAll</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "OodleX_WaitAll.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="OodleX_WaitAll.html_backmenu">
<table class=dropmenu>
<tr><td><span class='arrowleft'></span>&nbsp;<a href="javascript:show('OodleX_Wait.html')" class="paragraph">OodleX_Wait</a></td></tr><tr><td><span class='arrowright'></span>&nbsp;<a href="javascript:show('OodleX_WaitDoneAllPending.html')" class="paragraph">OodleX_WaitDoneAllPending</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<div class=prototype><div class=prototype_header>// Function prototype:</div><pre><span class=prototype_type><a href="javascript:show('OodleXStatus.html')" class="blue">OodleXStatus</a></span> <span class=prototype_type><a href="javascript:show('OodleX_WaitAll.html')" class="blue">OodleX_WaitAll</a></span>( const <span class=prototype_type><a href="javascript:show('OodleXHandle.html')" class="blue">OodleXHandle</a></span> * handles,
OO_S32 count,
<span class=prototype_type><a href="javascript:show('OodleXHandleDeleteIfDone.html')" class="blue">OodleXHandleDeleteIfDone</a></span> deleteIfDone OODEFAULT( OodleXHandleDeleteIfDone_No ) );</pre></div><div class=discussion_heading>Discussion</div>Block the calling thread until none of the provided handles are Pending<div class=discussion_heading>Parameters</div> <table> <tr> <td style='vertical-align: top;' class=paramname><a id="OodleX_WaitAll.html_handles" class=nohover>handles</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> array of OodleXHandle weak reference
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleX_WaitAll.html_count" class=nohover>count</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> number of handles in array
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleX_WaitAll.html_deleteIfDone" class=nohover>deleteIfDone</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> if <a href="javascript:show('OodleXHandleDeleteIfDone.html','OodleXHandleDeleteIfDone.html_OodleXHandleDeleteIfDone_Yes')" class="paragraph">OodleXHandleDeleteIfDone_Yes</a>, all handle will be deleted
</td></tr></table><div class=discussion_heading>Return Value</div> <table> <tr> <td style='vertical-align: top;' class=paramname><a id="OodleX_WaitAll.html_return" class=nohover>return</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> handle status
</td></tr></table><div class=discussion_heading>Discussion</div></p>
<p> Blocks until <b>ALL</b> handles are done.
Returns OodleXStatus_Error if any of the handles in the array is done with status OodleXStatus_Error.
<br>&nbsp;<br> <table class=bar> <tr>
<td width=33% align=left><span class='arrowleft'></span><a href="javascript:show('OodleX_Wait.html')" class="paragraph">OodleX_Wait</a></td><td width=33% align=center><span class='arrowup'></span><a href="javascript:show('OodleXAPI_Handle.html')" class="paragraph">OodleX async handle operations</a></td><td width=33% align=right><span class='arrowright'></span><a href="javascript:show('OodleX_WaitDoneAllPending.html')" class="paragraph">OodleX_WaitDoneAllPending</a></td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="OodleLZ_FuzzSafe.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>OodleLZ_FuzzSafe</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "OodleLZ_FuzzSafe.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="OodleLZ_FuzzSafe.html_backmenu">
<table class=dropmenu>
<tr><td><span class='arrowleft'></span>&nbsp;<a href="javascript:show('OodleLZ_Decode_ThreadPhase.html')" class="paragraph">OodleLZ_Decode_ThreadPhase</a></td></tr><tr><td><span class='arrowright'></span>&nbsp;<a href="javascript:show('OodleLZSeekTable_Flags.html')" class="paragraph">OodleLZSeekTable_Flags</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<div class=prototype><div class=prototype_header>// Enumerant:</div><pre><span class=prototype_type>enum</span> <a href="javascript:show('OodleLZ_FuzzSafe.html')">OodleLZ_FuzzSafe</a>
{
&nbsp;&nbsp;&nbsp;&nbsp;OodleLZ_FuzzSafe_No = 0,
&nbsp;&nbsp;&nbsp;&nbsp;OodleLZ_FuzzSafe_Yes = 1
};
</pre></div><div class=discussion_heading>Discussion</div> OodleLZ_FuzzSafe (deprecated)<div class=discussion_heading>Discussion</div> About fuzz safety:
</p>
<p> Fuzz Safe decodes will not crash on corrupt data. They may or may not return failure, and produce garbage output.
</p>
<p> Fuzz safe decodes will not read out of bounds. They won't put data on the stack or previously in memory
into the output buffer.
</p>
<p> As of Oodle 2.9.0 all compressors supported are fuzzsafe, so OodleLZ_FuzzSafe_Yes should always be used and this
enum is deprecated.
</p>
<p><br>&nbsp;<br> <table class=bar> <tr>
<td width=33% align=left><span class='arrowleft'></span><a href="javascript:show('OodleLZ_Decode_ThreadPhase.html')" class="paragraph">OodleLZ_Decode_ThreadPhase</a></td><td width=33% align=center><span class='arrowup'></span><a href="javascript:show('OodleAPI_LZ_Compressors.html')" class="paragraph">OodleAPI_LZ_Compressors</a></td><td width=33% align=right><span class='arrowright'></span><a href="javascript:show('OodleLZSeekTable_Flags.html')" class="paragraph">OodleLZSeekTable_Flags</a></td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="OodleNetwork1_SelectDictionaryFromPackets.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>OodleNetwork1_SelectDictionaryFromPackets</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "OodleNetwork1_SelectDictionaryFromPackets.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="OodleNetwork1_SelectDictionaryFromPackets.html_backmenu">
<table class=dropmenu>
<tr><td><span class='arrowleft'></span>&nbsp;<a href="javascript:show('OodleNetwork1_SelectDictionarySupported.html')" class="paragraph">OodleNetwork1_SelectDictionarySupported</a></td></tr><tr><td><span class='arrowright'></span>&nbsp;<a href="javascript:show('OodleNetwork1_SelectDictionaryFromPackets_Trials.html')" class="paragraph">OodleNetwork1_SelectDictionaryFromPackets_Trials</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<div class=prototype><div class=prototype_header>// Function prototype:</div><pre>OO_BOOL <span class=prototype_type><a href="javascript:show('OodleNetwork1_SelectDictionaryFromPackets.html')" class="blue">OodleNetwork1_SelectDictionaryFromPackets</a></span>( void * dictionary_to_fill,
OO_S32 dictionary_size,
OO_S32 htbits,
const void * * dictionary_packet_pointers,
const OO_S32 * dictionary_packet_sizes,
OO_S32 num_dictionary_packets,
const void * * test_packet_pointers,
const OO_S32 * test_packet_sizes,
OO_S32 num_test_packets );</pre></div><div class=discussion_heading>Discussion</div>Build a dictionary for OodleNetwork1 from packets<div class=discussion_heading>Parameters</div> <table> <tr> <td style='vertical-align: top;' class=paramname><a id="OodleNetwork1_SelectDictionaryFromPackets.html_dictionary_to_fill" class=nohover>dictionary_to_fill</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> must be allocated by you to <i>dictionary_size</i> bytes; filled out
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleNetwork1_SelectDictionaryFromPackets.html_dictionary_size" class=nohover>dictionary_size</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> size of <i>dictionary_to_fill</i> (should be &lt;= <a href="javascript:show('OODLENETWORK1_MAX_DICTIONARY_SIZE.html')" class="paragraph">OODLENETWORK1_MAX_DICTIONARY_SIZE</a>)
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleNetwork1_SelectDictionaryFromPackets.html_htbits" class=nohover>htbits</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> hash table bits; should be the same value you pass to <a href="javascript:show('OodleNetwork1_Shared_SetWindow.html')" class="paragraph">OodleNetwork1_Shared_SetWindow</a>
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleNetwork1_SelectDictionaryFromPackets.html_dictionary_packet_pointers" class=nohover>dictionary_packet_pointers</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> pointers to packet data, <i>num_dictionary_packets</i> of them
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleNetwork1_SelectDictionaryFromPackets.html_dictionary_packet_sizes" class=nohover>dictionary_packet_sizes</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> packet sizes, <i>num_dictionary_packets</i> of them
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleNetwork1_SelectDictionaryFromPackets.html_num_dictionary_packets" class=nohover>num_dictionary_packets</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> number of packets used to make the dictionary
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleNetwork1_SelectDictionaryFromPackets.html_test_packet_pointers" class=nohover>test_packet_pointers</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> pointers to packet data, <i>num_test_packets</i> of them
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleNetwork1_SelectDictionaryFromPackets.html_test_packet_sizes" class=nohover>test_packet_sizes</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> packet sizes, <i>num_test_packets</i> of them
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleNetwork1_SelectDictionaryFromPackets.html_num_test_packets" class=nohover>num_test_packets</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> number of packets used to test the dictionary
</td></tr></table><div class=discussion_heading>Return Value</div> <table> <tr> <td style='vertical-align: top;' class=paramname><a id="OodleNetwork1_SelectDictionaryFromPackets.html_return" class=nohover>return</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> true on success, false otherwise.
</td></tr></table><div class=discussion_heading>Discussion</div></p>
<p> Fills out a dictionary from packets by rating the packets and choosing the most useful.
</p>
<p> Can be used with OodleNetwork1 UDP or TCP.
</p>
<p> The <i>dictionary_packet_pointers</i> are used to fill the dictionary. The <i>test_packet_pointers</i>
are used to evaluate the quality of the dictionary. They should not be the same packets!
They should both be independent random representative samples of your network traffic.
</p>
<p> The packets used here should not be the same ones used for training! (eg. with
<a href="javascript:show('OodleNetwork1UDP_Train.html')" class="paragraph">OodleNetwork1UDP_Train</a> or OodleNetwork1TCP_Train).
</p>
<p> This function is to be called before <a href="javascript:show('OodleNetwork1_Shared_SetWindow.html')" class="paragraph">OodleNetwork1_Shared_SetWindow</a>.
</p>
<p> This function may take a lot of time if the <i>test_packet_pointers</i> set is too large. It should
be large enough to provide good test ratings, but too large slows it down for no reason.
Something like 50 MB of packet data is usually sufficient.
</p>
<p> See TestOodleNetwork1PacketCoder_SelectDictionaryAndTrain in <a href="javascript:show('example_packet.html')" class="paragraph">example_packet : Example demonstrating network packet compression</a>
</p>
<p> On platforms where <a href="javascript:show('OodleNetwork1_SelectDictionarySupported.html')" class="paragraph">OodleNetwork1_SelectDictionarySupported</a> returns false, this
function is not supported.
</p>
<p> It's advised to run this function in 64-bit, as it can use a lot of memory.
<br>&nbsp;<br> <table class=bar> <tr>
<td width=33% align=left><span class='arrowleft'></span><a href="javascript:show('OodleNetwork1_SelectDictionarySupported.html')" class="paragraph">OodleNetwork1_SelectDictionarySupported</a></td><td width=33% align=center><span class='arrowup'></span><a href="javascript:show('OodleAPI_OodleNetwork1.html')" class="paragraph">OodleAPI_OodleNetwork1</a></td><td width=33% align=right><span class='arrowright'></span><a href="javascript:show('OodleNetwork1_SelectDictionaryFromPackets_Trials.html')" class="paragraph">OodleNetwork1_SelectDictionaryFromPackets_Trials</a></td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="OODLELZ_FAILED.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>OODLELZ_FAILED</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "OODLELZ_FAILED.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="OODLELZ_FAILED.html_backmenu">
<table class=dropmenu>
<tr><td><span class='arrowleft'></span>&nbsp;<a href="javascript:show('OODLELZ_QUANTUM_LEN.html')" class="paragraph">OODLELZ_QUANTUM_LEN</a></td></tr><tr><td><span class='arrowright'></span>&nbsp;<a href="javascript:show('OODLELZ_SCRATCH_MEM_NO_BOUND.html')" class="paragraph">OODLELZ_SCRATCH_MEM_NO_BOUND</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<div class=prototype><div class=prototype_header>// Preprocessor definition:</div><pre><span class=prototype_type>#define</span> <a href="javascript:show('OODLELZ_FAILED.html')">OODLELZ_FAILED</a> (0)</pre></div><div class=discussion_heading>Discussion</div> Return value of OodleLZ_Decompress on failure
<br>&nbsp;<br> <table class=bar> <tr>
<td width=33% align=left><span class='arrowleft'></span><a href="javascript:show('OODLELZ_QUANTUM_LEN.html')" class="paragraph">OODLELZ_QUANTUM_LEN</a></td><td width=33% align=center><span class='arrowup'></span><a href="javascript:show('OodleAPI_LZ_Compressors.html')" class="paragraph">OodleAPI_LZ_Compressors</a></td><td width=33% align=right><span class='arrowright'></span><a href="javascript:show('OODLELZ_SCRATCH_MEM_NO_BOUND.html')" class="paragraph">OODLELZ_SCRATCH_MEM_NO_BOUND</a></td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="OodleLZDecoder.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>OodleLZDecoder</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "OodleLZDecoder.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="OodleLZDecoder.html_backmenu">
<table class=dropmenu>
<tr><td><span class='arrowleft'></span>&nbsp;<a href="javascript:show('OodleLZ_DecodeSome_Out.html')" class="paragraph">OodleLZ_DecodeSome_Out</a></td></tr><tr><td><span class='arrowright'></span>&nbsp;<a href="javascript:show('OodleLZ_SeekTable.html')" class="paragraph">OodleLZ_SeekTable</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<div class=prototype><div class=prototype_header>// Structure definition:</div><pre><span class=prototype_type>struct</span> <a href="javascript:show('OodleLZDecoder.html')">OodleLZDecoder</a>;
</pre></div><div class=discussion_heading>Discussion</div> Opaque type for OodleLZDecoder<div class=discussion_heading>Discussion</div> See <a href="javascript:show('OodleLZDecoder_Create.html')" class="paragraph">OodleLZDecoder_Create</a>
<br>&nbsp;<br> <table class=bar> <tr>
<td width=33% align=left><span class='arrowleft'></span><a href="javascript:show('OodleLZ_DecodeSome_Out.html')" class="paragraph">OodleLZ_DecodeSome_Out</a></td><td width=33% align=center><span class='arrowup'></span><a href="javascript:show('OodleAPI_LZ_Compressors.html')" class="paragraph">OodleAPI_LZ_Compressors</a></td><td width=33% align=right><span class='arrowright'></span><a href="javascript:show('OodleLZ_SeekTable.html')" class="paragraph">OodleLZ_SeekTable</a></td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="OodleXIOQ_LogError.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>OodleXIOQ_LogError</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "OodleXIOQ_LogError.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="OodleXIOQ_LogError.html_backmenu">
<table class=dropmenu>
<tr><td><span class='arrowleft'></span>&nbsp;<a href="javascript:show('OodleXIOQ_GetErrorEnum.html')" class="paragraph">OodleXIOQ_GetErrorEnum</a></td></tr><tr><td><span class='arrowright'></span>&nbsp;<a href="javascript:show('OodleXIOQ_Wait.html')" class="paragraph">OodleXIOQ_Wait</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<div class=prototype><div class=prototype_header>// Function prototype:</div><pre>void <span class=prototype_type><a href="javascript:show('OodleXIOQ_LogError.html')" class="blue">OodleXIOQ_LogError</a></span>( OO_U32 code,
<span class=prototype_type><a href="javascript:show('OodleXIOQFile.html')" class="blue">OodleXIOQFile</a></span> file,
const char * pName OODEFAULT( NULL ) );</pre></div><div class=discussion_heading>Discussion</div>Logs an OS error code with a detailed text message<div class=discussion_heading>Parameters</div> <table> <tr> <td style='vertical-align: top;' class=paramname><a id="OodleXIOQ_LogError.html_code" class=nohover>code</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> the error code, eg. from <a href="javascript:show('OodleXIOQ_GetStatus.html')" class="paragraph">OodleXIOQ_GetStatus</a>
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXIOQ_LogError.html_file" class=nohover>file</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> the file that the error occurred on (or 0 for unknown)
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXIOQ_LogError.html_pName" class=nohover>pName</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> (optional) a tag to log with the error
</td></tr></table><div class=discussion_heading>Discussion</div></p>
<p> Calls <a href="javascript:show('OodleXLog_Printf.html')" class="paragraph">OodleXLog_Printf</a> to output a detailed error, as created by <a href="javascript:show('OodleXIOQ_GetErrorDetails.html')" class="paragraph">OodleXIOQ_GetErrorDetails</a>.
<br>&nbsp;<br> <table class=bar> <tr>
<td width=33% align=left><span class='arrowleft'></span><a href="javascript:show('OodleXIOQ_GetErrorEnum.html')" class="paragraph">OodleXIOQ_GetErrorEnum</a></td><td width=33% align=center><span class='arrowup'></span><a href="javascript:show('OodleXAPI_IOQ.html')" class="paragraph">OodleX low level async io</a></td><td width=33% align=right><span class='arrowright'></span><a href="javascript:show('OodleXIOQ_Wait.html')" class="paragraph">OodleXIOQ_Wait</a></td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="OodleNetwork1TCP_State_InitAsCopy.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>OodleNetwork1TCP_State_InitAsCopy</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "OodleNetwork1TCP_State_InitAsCopy.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="OodleNetwork1TCP_State_InitAsCopy.html_backmenu">
<table class=dropmenu>
<tr><td><span class='arrowleft'></span>&nbsp;<a href="javascript:show('OodleNetwork1TCP_State_Reset.html')" class="paragraph">OodleNetwork1TCP_State_Reset</a></td></tr><tr><td><span class='arrowright'></span>&nbsp;<a href="javascript:show('OodleNetwork1TCP_Train.html')" class="paragraph">OodleNetwork1TCP_Train</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<div class=prototype><div class=prototype_header>// Function prototype:</div><pre>void <span class=prototype_type><a href="javascript:show('OodleNetwork1TCP_State_InitAsCopy.html')" class="blue">OodleNetwork1TCP_State_InitAsCopy</a></span>( <span class=prototype_type><a href="javascript:show('OodleNetwork1TCP_State.html')" class="blue">OodleNetwork1TCP_State</a></span> * state,
const <span class=prototype_type><a href="javascript:show('OodleNetwork1TCP_State.html')" class="blue">OodleNetwork1TCP_State</a></span> * from );</pre></div><div class=discussion_heading>Discussion</div>Initialize a <a href="javascript:show('OodleNetwork1TCP_State.html')" class="paragraph">OodleNetwork1TCP_State</a> as a copy of another state<div class=discussion_heading>Parameters</div> <table> <tr> <td style='vertical-align: top;' class=paramname><a id="OodleNetwork1TCP_State_InitAsCopy.html_state" class=nohover>state</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> <a href="javascript:show('OodleNetwork1TCP_State.html')" class="paragraph">OodleNetwork1TCP_State</a> to initialize
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleNetwork1TCP_State_InitAsCopy.html_from" class=nohover>from</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> <a href="javascript:show('OodleNetwork1TCP_State.html')" class="paragraph">OodleNetwork1TCP_State</a> that was previously filled, to copy from
</td></tr></table><div class=discussion_heading>Discussion</div></p>
<p> Resets <i>state</i> to a copy of <i>from</i> state.
</p>
<p> Generally <i>from</i> was made with <a href="javascript:show('OodleNetwork1TCP_Train.html')" class="paragraph">OodleNetwork1TCP_Train</a> and then saved to disk so that it could be stored on both the client and server.
<br>&nbsp;<br> <table class=bar> <tr>
<td width=33% align=left><span class='arrowleft'></span><a href="javascript:show('OodleNetwork1TCP_State_Reset.html')" class="paragraph">OodleNetwork1TCP_State_Reset</a></td><td width=33% align=center><span class='arrowup'></span><a href="javascript:show('OodleAPI_OodleNetwork1.html')" class="paragraph">OodleAPI_OodleNetwork1</a></td><td width=33% align=right><span class='arrowright'></span><a href="javascript:show('OodleNetwork1TCP_Train.html')" class="paragraph">OodleNetwork1TCP_Train</a></td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="OodleX_IOAlignUpSINTa.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>OodleX_IOAlignUpSINTa</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "OodleX_IOAlignUpSINTa.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="OodleX_IOAlignUpSINTa.html_backmenu">
<table class=dropmenu>
<tr><td><span class='arrowleft'></span>&nbsp;<a href="javascript:show('OodleX_IOAlignUpS64.html')" class="paragraph">OodleX_IOAlignUpS64</a></td></tr><tr><td><span class='arrowright'></span>&nbsp;<a href="javascript:show('OodleX_IOAlignDownS32.html')" class="paragraph">OodleX_IOAlignDownS32</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<div class=prototype><div class=prototype_header>// Function prototype:</div><pre>OO_SINTa <span class=prototype_type><a href="javascript:show('OodleX_IOAlignUpSINTa.html')" class="blue">OodleX_IOAlignUpSINTa</a></span>( const OO_SINTa x );</pre></div><div class=discussion_heading>Discussion</div>Align up to <a href="javascript:show('OODLEX_IO_MAX_ALIGNMENT.html')" class="paragraph">OODLEX_IO_MAX_ALIGNMENT</a><div class=discussion_heading>Parameters</div> <table> <tr> <td style='vertical-align: top;' class=paramname><a id="OodleX_IOAlignUpSINTa.html_x" class=nohover>x</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> value to align
</td></tr></table><div class=discussion_heading>Return Value</div> <table> <tr> <td style='vertical-align: top;' class=paramname><a id="OodleX_IOAlignUpSINTa.html_return" class=nohover>return</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> aligned value
</td></tr></table><div class=discussion_heading>Discussion</div></p>
<p> Align x up to <a href="javascript:show('OODLEX_IO_MAX_ALIGNMENT.html')" class="paragraph">OODLEX_IO_MAX_ALIGNMENT</a>
<br>&nbsp;<br> <table class=bar> <tr>
<td width=33% align=left><span class='arrowleft'></span><a href="javascript:show('OodleX_IOAlignUpS64.html')" class="paragraph">OodleX_IOAlignUpS64</a></td><td width=33% align=center><span class='arrowup'></span><a href="javascript:show('OodleXAPI_Util.html')" class="paragraph">OodleX Utils</a></td><td width=33% align=right><span class='arrowright'></span><a href="javascript:show('OodleX_IOAlignDownS32.html')" class="paragraph">OodleX_IOAlignDownS32</a></td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="OodleXHandleKickDelayed.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>OodleXHandleKickDelayed</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "OodleXHandleKickDelayed.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="OodleXHandleKickDelayed.html_backmenu">
<table class=dropmenu>
<tr><td><span class='arrowleft'></span>&nbsp;<a href="javascript:show('OodleXHandleAutoDelete.html')" class="paragraph">OodleXHandleAutoDelete</a></td></tr><tr><td><span class='arrowright'></span>&nbsp;<a href="javascript:show('OodleXHandleDeleteIfDone.html')" class="paragraph">OodleXHandleDeleteIfDone</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<div class=prototype><div class=prototype_header>// Enumerant:</div><pre><span class=prototype_type>enum</span> <a href="javascript:show('OodleXHandleKickDelayed.html')">OodleXHandleKickDelayed</a>
{
&nbsp;&nbsp;&nbsp;&nbsp;OodleXHandleKickDelayed_No = 0,
&nbsp;&nbsp;&nbsp;&nbsp;OodleXHandleKickDelayed_Yes = 1,
&nbsp;&nbsp;&nbsp;&nbsp;OodleXHandleKickDelayed_Force32 = 0x40000000
};
</pre></div><div class=discussion_heading>Discussion</div> Normally async tasks are run as soon as possible; sometimes when spawning many tasks, you might not
want to let the thread switch immediately, so it can be better to fire several tasks with OodleXHandle_KickDelayed
and then kick them all together. ("kick" means activate worker threads to do the tasks)
<div class=discussion_heading>Enumerants</div> <table> <tr> <td style='vertical-align: top;' class=paramname><a id="OodleXHandleKickDelayed.html_OodleXHandleKickDelayed_No" class=nohover>OodleXHandleKickDelayed_No</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> (default) run async immediately</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXHandleKickDelayed.html_OodleXHandleKickDelayed_Yes" class=nohover>OodleXHandleKickDelayed_Yes</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> wait until manually kicked</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXHandleKickDelayed.html_OodleXHandleKickDelayed_Force32" class=nohover>OodleXHandleKickDelayed_Force32</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc></td></tr></table><br>&nbsp;<br> <table class=bar> <tr>
<td width=33% align=left><span class='arrowleft'></span><a href="javascript:show('OodleXHandleAutoDelete.html')" class="paragraph">OodleXHandleAutoDelete</a></td><td width=33% align=center><span class='arrowup'></span><a href="javascript:show('OodleXAPI_Handle.html')" class="paragraph">OodleX async handle operations</a></td><td width=33% align=right><span class='arrowright'></span><a href="javascript:show('OodleXHandleDeleteIfDone.html')" class="paragraph">OodleXHandleDeleteIfDone</a></td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="OodleXIOQ_GetInfoByName_GetResult.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>OodleXIOQ_GetInfoByName_GetResult</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "OodleXIOQ_GetInfoByName_GetResult.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="OodleXIOQ_GetInfoByName_GetResult.html_backmenu">
<table class=dropmenu>
<tr><td><span class='arrowleft'></span>&nbsp;<a href="javascript:show('OodleXIOQ_GetInfoByName_Async.html')" class="paragraph">OodleXIOQ_GetInfoByName_Async</a></td></tr><tr><td><span class='arrowright'></span>&nbsp;<a href="javascript:show('OodleXIOQ_SetInfoByName_Async.html')" class="paragraph">OodleXIOQ_SetInfoByName_Async</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<div class=prototype><div class=prototype_header>// Function prototype:</div><pre><span class=prototype_type><a href="javascript:show('OodleXStatus.html')" class="blue">OodleXStatus</a></span> <span class=prototype_type><a href="javascript:show('OodleXIOQ_GetInfoByName_GetResult.html')" class="blue">OodleXIOQ_GetInfoByName_GetResult</a></span>( <span class=prototype_type><a href="javascript:show('OodleXHandle.html')" class="blue">OodleXHandle</a></span> req,
<span class=prototype_type><a href="javascript:show('OodleXHandleDeleteIfDone.html')" class="blue">OodleXHandleDeleteIfDone</a></span> andDeleteIfDone,
<span class=prototype_type><a href="javascript:show('OodleXFileInfo.html')" class="blue">OodleXFileInfo</a></span> * pInfo );</pre></div><div class=discussion_heading>Discussion</div>Finish an asynchronous GetInfo request<div class=discussion_heading>Parameters</div> <table> <tr> <td style='vertical-align: top;' class=paramname><a id="OodleXIOQ_GetInfoByName_GetResult.html_req" class=nohover>req</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> the handle returned by <a href="javascript:show('OodleXIOQ_GetInfoByName_Async.html')" class="paragraph">OodleXIOQ_GetInfoByName_Async</a>
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXIOQ_GetInfoByName_GetResult.html_andDeleteIfDone" class=nohover>andDeleteIfDone</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> if true and the request is done, delete the request
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXIOQ_GetInfoByName_GetResult.html_pInfo" class=nohover>pInfo</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> filled out with an <a href="javascript:show('OodleXFileInfo.html')" class="paragraph">OodleXFileInfo</a>
</td></tr></table><div class=discussion_heading>Return Value</div> <table> <tr> <td style='vertical-align: top;' class=paramname><a id="OodleXIOQ_GetInfoByName_GetResult.html_return" class=nohover>return</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> OodleXStatus of the request
</td></tr></table><div class=discussion_heading>Discussion</div></p>
<p> <i>pInfo</i> is filled if the <a href="javascript:show('OodleXStatus.html')" class="paragraph">OodleXStatus</a> returned is OodleXStatus_Done. If the return value is something
else, <i>pInfo</i> is untouched (eg. not invalidated!).
</p>
<p> If the file does not exist and OodleFileNotFoundIsAnError_No was passed, this function will return
OodleXStatus_Done but <i>pInfo</i> will be set to a <a href="javascript:show('OodleXFileInfo.html','OodleXFileInfo.html_size')" class="paragraph">OodleXFileInfo:size</a> of <a href="javascript:show('OODLEX_FILE_SIZE_INVALID.html')" class="paragraph">OODLEX_FILE_SIZE_INVALID</a>;
<br>&nbsp;<br> <table class=bar> <tr>
<td width=33% align=left><span class='arrowleft'></span><a href="javascript:show('OodleXIOQ_GetInfoByName_Async.html')" class="paragraph">OodleXIOQ_GetInfoByName_Async</a></td><td width=33% align=center><span class='arrowup'></span><a href="javascript:show('OodleXAPI_IOQ.html')" class="paragraph">OodleX low level async io</a></td><td width=33% align=right><span class='arrowright'></span><a href="javascript:show('OodleXIOQ_SetInfoByName_Async.html')" class="paragraph">OodleXIOQ_SetInfoByName_Async</a></td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="Oodle_About_Platforms.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>About Oodle on Platforms</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "Oodle_About_Platforms.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="Oodle_About_Platforms.html_backmenu">
<table class=dropmenu>
<tr><td><span class='arrowleft'></span>&nbsp;<a href="javascript:show('Oodle_About_ozip.html')" class="paragraph">About Oodle ozip</a></td></tr><tr><td><span class='arrowup'></span>&nbsp;<a href="javascript:show('Oodle_About.html')" class="paragraph">About Oodle</a></td></tr><tr><td><span class='arrowright'></span>&nbsp;<a href="javascript:show('Oodle_About_Job_Threading_Plugins.html')" class="paragraph">About Oodle Job Threading Plugins</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<P>
Oodle is as uniform as possible across platforms.
</p>
<p>The contents of the distribution, and how to build and use it on that platorm is described here.
</p>
<p><p><ul class='TOCItem'>
<li><span onClick="HandleClick(event, null); return false" class='TOCGroup closedbook_icon'></span>&nbsp;<a href="javascript:show('Oodle_About_Windows.html')">About Oodle on Windows</a></li>
<ul style="display:none" class='TOCItem'>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('Oodle_About_Windows_UWP.html')">About Oodle on Windows UWP</a></li>
</ul>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('Oodle_About_PS4.html')">About Oodle on PS4</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('Oodle_About_Switch.html')">About Oodle on Nintendo Switch</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('Oodle_About_Mac.html')">About Oodle on Mac</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('Oodle_About_XboxOne.html')">About Oodle on Xbox One</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('Oodle_About_Linux.html')">About Oodle on Linux</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('Oodle_About_IOS.html')">About Oodle on IOS</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('Oodle_About_Android.html')">About Oodle on Android</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('Oodle_About_WASM.html')">About Oodle on WASM</a></li>
</ul>
<br>&nbsp;<br> <table class=bar> <tr>
<td width=33% align=left><span class='arrowleft'></span><a href="javascript:show('Oodle_About_ozip.html')" class="paragraph">About Oodle ozip</a></td><td width=33% align=center><span class='arrowup'></span><a href="javascript:show('Oodle_About.html')" class="paragraph">About Oodle</a></td><td width=33% align=right><span class='arrowright'></span><a href="javascript:show('Oodle_About_Windows.html')" class="paragraph">About Oodle on Windows</a></td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="OodleXIOQ_ReadUnalignedAdjustPointer_Async.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>OodleXIOQ_ReadUnalignedAdjustPointer_Async</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "OodleXIOQ_ReadUnalignedAdjustPointer_Async.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="OodleXIOQ_ReadUnalignedAdjustPointer_Async.html_backmenu">
<table class=dropmenu>
<tr><td><span class='arrowleft'></span>&nbsp;<a href="javascript:show('OodleXIOQ_OpenWriteWholeFileCloseTempName_Async.html')" class="paragraph">OodleXIOQ_OpenWriteWholeFileCloseTempName_Async</a></td></tr><tr><td><span class='arrowright'></span>&nbsp;<a href="javascript:show('OodleXIOQ_MakeAllDirs_Async.html')" class="paragraph">OodleXIOQ_MakeAllDirs_Async</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<div class=prototype><div class=prototype_header>// Function prototype:</div><pre><span class=prototype_type><a href="javascript:show('OodleXHandle.html')" class="blue">OodleXHandle</a></span> <span class=prototype_type><a href="javascript:show('OodleXIOQ_ReadUnalignedAdjustPointer_Async.html')" class="blue">OodleXIOQ_ReadUnalignedAdjustPointer_Async</a></span>( void * * pPtr,
<span class=prototype_type><a href="javascript:show('OodleXIOQFile.html')" class="blue">OodleXIOQFile</a></span> file,
void * memory,
OO_SINTa readSize,
OO_S64 position,
OO_SINTa memorySize,
<span class=prototype_type><a href="javascript:show('OodleXHandleAutoDelete.html')" class="blue">OodleXHandleAutoDelete</a></span> autoDelete OODEFAULT( OodleXHandleAutoDelete_No ),
<span class=prototype_type><a href="javascript:show('OodleXPriority.html')" class="blue">OodleXPriority</a></span> priority OODEFAULT( OodleXPriority_Normal ),
const <span class=prototype_type><a href="javascript:show('OodleXHandle.html')" class="blue">OodleXHandle</a></span> * dependencies OODEFAULT( NULL ),
OO_S32 numDependencies OODEFAULT( 0 ) );</pre></div><div class=discussion_heading>Discussion</div>Start a read request with unaligned position or size<div class=discussion_heading>Parameters</div> <table> <tr> <td style='vertical-align: top;' class=paramname><a id="OodleXIOQ_ReadUnalignedAdjustPointer_Async.html_pPtr" class=nohover>pPtr</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> filled with a pointer to the read memory; NULL if the read is impossible
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXIOQ_ReadUnalignedAdjustPointer_Async.html_file" class=nohover>file</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> the file to act on
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXIOQ_ReadUnalignedAdjustPointer_Async.html_memory" class=nohover>memory</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> memory to read into (no alignment required)
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXIOQ_ReadUnalignedAdjustPointer_Async.html_readSize" class=nohover>readSize</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> number of bytes to read (no alignment required)
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXIOQ_ReadUnalignedAdjustPointer_Async.html_position" class=nohover>position</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> file position to start the read (no alignment required)
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXIOQ_ReadUnalignedAdjustPointer_Async.html_memorySize" class=nohover>memorySize</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> the size of the buffer at "memory"
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXIOQ_ReadUnalignedAdjustPointer_Async.html_autoDelete" class=nohover>autoDelete</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> (optional) see <a href="javascript:show('OodleXHandleAutoDelete.html')" class="paragraph">OodleXHandleAutoDelete</a>
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXIOQ_ReadUnalignedAdjustPointer_Async.html_priority" class=nohover>priority</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> (optional) priority of the operation ; see <a href="javascript:show('OodleXPriority.html')" class="paragraph">OodleXPriority</a>
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXIOQ_ReadUnalignedAdjustPointer_Async.html_dependencies" class=nohover>dependencies</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> (optional) dependencies; the async op won't start until these are all complete; note : these are not freed, they must be autodelete or you must free them some other way.
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXIOQ_ReadUnalignedAdjustPointer_Async.html_numDependencies" class=nohover>numDependencies</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> (optional) number of handles in <i>deps</i> array
</td></tr></table><div class=discussion_heading>Return Value</div> <table> <tr> <td style='vertical-align: top;' class=paramname><a id="OodleXIOQ_ReadUnalignedAdjustPointer_Async.html_return" class=nohover>return</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> handle to the operation, or 0 if it could not be started (usually due to invalid args)
</td></tr></table><div class=discussion_heading>Discussion</div></p>
<p> High level IOQ operations are helpers built on the simpler IOQ low level ops.
</p>
<p> memorySize should be larger than size ; generally at least aligned up with <a href="javascript:show('OodleX_IOAlignUpS64.html')" class="paragraph">OodleX_IOAlignUpS64</a>.
</p>
<p> OodleXIOQ_ReadUnalignedAdjustPointer_Async reads a larger chunk than [position,size] , aligning down the start
and aligning up the end. It reads somewhere into [memory,memorySize]. The returned pointer is somewhere
in <i>memory and contains the bytes you wanted from _position.
</i></p>
<p> If memorySize is not big enough, it returns NULL.
<br>&nbsp;<br> <table class=bar> <tr>
<td width=33% align=left><span class='arrowleft'></span><a href="javascript:show('OodleXIOQ_OpenWriteWholeFileCloseTempName_Async.html')" class="paragraph">OodleXIOQ_OpenWriteWholeFileCloseTempName_Async</a></td><td width=33% align=center><span class='arrowup'></span><a href="javascript:show('OodleXAPI_IOQ.html')" class="paragraph">OodleX low level async io</a></td><td width=33% align=right><span class='arrowright'></span><a href="javascript:show('OodleXIOQ_MakeAllDirs_Async.html')" class="paragraph">OodleXIOQ_MakeAllDirs_Async</a></td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="OodleXIOQ_MakeAllDirs_Async.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>OodleXIOQ_MakeAllDirs_Async</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "OodleXIOQ_MakeAllDirs_Async.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="OodleXIOQ_MakeAllDirs_Async.html_backmenu">
<table class=dropmenu>
<tr><td><span class='arrowleft'></span>&nbsp;<a href="javascript:show('OodleXIOQ_ReadUnalignedAdjustPointer_Async.html')" class="paragraph">OodleXIOQ_ReadUnalignedAdjustPointer_Async</a></td></tr><tr><td><span class='arrowright'></span>&nbsp;<a href="javascript:show('OodleXIOQ_CopyFile_Async.html')" class="paragraph">OodleXIOQ_CopyFile_Async</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<div class=prototype><div class=prototype_header>// Function prototype:</div><pre><span class=prototype_type><a href="javascript:show('OodleXHandle.html')" class="blue">OodleXHandle</a></span> <span class=prototype_type><a href="javascript:show('OodleXIOQ_MakeAllDirs_Async.html')" class="blue">OodleXIOQ_MakeAllDirs_Async</a></span>( const char * name,
<span class=prototype_type><a href="javascript:show('OodleXHandleAutoDelete.html')" class="blue">OodleXHandleAutoDelete</a></span> autoDelete OODEFAULT( OodleXHandleAutoDelete_No ),
<span class=prototype_type><a href="javascript:show('OodleXPriority.html')" class="blue">OodleXPriority</a></span> priority OODEFAULT( OodleXPriority_Normal ),
const <span class=prototype_type><a href="javascript:show('OodleXHandle.html')" class="blue">OodleXHandle</a></span> * dependencies OODEFAULT( NULL ),
OO_S32 numDependencies OODEFAULT( 0 ) );</pre></div><div class=discussion_heading>Discussion</div>Start a high level IO request to make all dirs in name<div class=discussion_heading>Parameters</div> <table> <tr> <td style='vertical-align: top;' class=paramname><a id="OodleXIOQ_MakeAllDirs_Async.html_name" class=nohover>name</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> name of the file to make dirs for (VFS, UTF-8)
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXIOQ_MakeAllDirs_Async.html_autoDelete" class=nohover>autoDelete</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> (optional) see <a href="javascript:show('OodleXHandleAutoDelete.html')" class="paragraph">OodleXHandleAutoDelete</a>
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXIOQ_MakeAllDirs_Async.html_priority" class=nohover>priority</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> (optional) priority of the operation ; see <a href="javascript:show('OodleXPriority.html')" class="paragraph">OodleXPriority</a>
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXIOQ_MakeAllDirs_Async.html_dependencies" class=nohover>dependencies</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> (optional) dependencies; the async op won't start until these are all complete; note : these are not freed, they must be autodelete or you must free them some other way.
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXIOQ_MakeAllDirs_Async.html_numDependencies" class=nohover>numDependencies</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> (optional) number of handles in <i>deps</i> array
</td></tr></table><div class=discussion_heading>Return Value</div> <table> <tr> <td style='vertical-align: top;' class=paramname><a id="OodleXIOQ_MakeAllDirs_Async.html_return" class=nohover>return</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> handle to the operation, or 0 if it could not be started (usually due to invalid args)
</td></tr></table><div class=discussion_heading>Discussion</div></p>
<p> Makes the dirs in <i>name</i> in sequence. <i>name</i> can be a file name, or a path with trailing path delim.
</p>
<p> eg. if name is "a/b/c/d" then dir a is made, then b, then c, but not d.
<br>&nbsp;<br> <table class=bar> <tr>
<td width=33% align=left><span class='arrowleft'></span><a href="javascript:show('OodleXIOQ_ReadUnalignedAdjustPointer_Async.html')" class="paragraph">OodleXIOQ_ReadUnalignedAdjustPointer_Async</a></td><td width=33% align=center><span class='arrowup'></span><a href="javascript:show('OodleXAPI_IOQ.html')" class="paragraph">OodleX low level async io</a></td><td width=33% align=right><span class='arrowright'></span><a href="javascript:show('OodleXIOQ_CopyFile_Async.html')" class="paragraph">OodleXIOQ_CopyFile_Async</a></td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="OodleAPI_LZ_Compressors.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>OodleAPI_LZ_Compressors</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "OodleAPI_LZ_Compressors.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="OodleAPI_LZ_Compressors.html_backmenu">
<table class=dropmenu>
<tr><td><span class='arrowleft'></span>&nbsp;<a href="javascript:show('OodleLZ_About_Hydra.html')" class="paragraph">About OodleLZ Hydra</a></td></tr><tr><td><span class='arrowup'></span>&nbsp;<a href="javascript:show('OodleAPI_LZ.html')" class="paragraph">Core LZ compression</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<P>
OodleLZ low level synchronous memory to memory lossless data compression.
</p>
<p> <p><ul class='TOCItem'>
<li><span onClick="HandleClick(event, null); return false" class='TOCGroup closedbook_icon'></span>&nbsp;Defines</li>
<ul style="display:none" class='TOCItem'>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OODLE_ALLOW_DEPRECATED_COMPRESSORS.html')">OODLE_ALLOW_DEPRECATED_COMPRESSORS</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OODLELZ_LOCALDICTIONARYSIZE_MAX.html')">OODLELZ_LOCALDICTIONARYSIZE_MAX</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OODLELZ_SPACESPEEDTRADEOFFBYTES_DEFAULT.html')">OODLELZ_SPACESPEEDTRADEOFFBYTES_DEFAULT</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OODLELZ_BLOCK_LEN.html')">OODLELZ_BLOCK_LEN</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OODLELZ_BLOCK_MAX_COMPLEN.html')">OODLELZ_BLOCK_MAX_COMPLEN</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OODLELZ_QUANTUM_LEN.html')">OODLELZ_QUANTUM_LEN</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OODLELZ_FAILED.html')">OODLELZ_FAILED</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OODLELZ_SCRATCH_MEM_NO_BOUND.html')">OODLELZ_SCRATCH_MEM_NO_BOUND</a></li>
</ul>
<li><span onClick="HandleClick(event, null); return false" class='TOCGroup closedbook_icon'></span>&nbsp;Enumerants</li>
<ul style="display:none" class='TOCItem'>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleLZ_Verbosity.html')">OodleLZ_Verbosity</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleLZ_Compressor.html')">OodleLZ_Compressor</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleLZ_PackedRawOverlap.html')">OodleLZ_PackedRawOverlap</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleLZ_CheckCRC.html')">OodleLZ_CheckCRC</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleLZ_Profile.html')">OodleLZ_Profile</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleDecompressCallbackRet.html')">OodleDecompressCallbackRet</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleLZ_CompressionLevel.html')">OodleLZ_CompressionLevel</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleLZ_Jobify.html')">OodleLZ_Jobify</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleLZ_Decode_ThreadPhase.html')">OodleLZ_Decode_ThreadPhase</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleLZ_FuzzSafe.html')">OodleLZ_FuzzSafe</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleLZSeekTable_Flags.html')">OodleLZSeekTable_Flags</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleLZ_CompressScratchMemBoundType.html')">OodleLZ_CompressScratchMemBoundType</a></li>
</ul>
<li><span onClick="HandleClick(event, null); return false" class='TOCGroup closedbook_icon'></span>&nbsp;Structures</li>
<ul style="display:none" class='TOCItem'>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleLZ_CompressOptions.html')">OodleLZ_CompressOptions</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleLZ_DecodeSome_Out.html')">OodleLZ_DecodeSome_Out</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleLZDecoder.html')">OodleLZDecoder</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleLZ_SeekTable.html')">OodleLZ_SeekTable</a></li>
</ul>
<li><span onClick="HandleClick(event, null); return false" class='TOCGroup closedbook_icon'></span>&nbsp;Functions</li>
<ul style="display:none" class='TOCItem'>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleLZ_Compress.html')">OodleLZ_Compress</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleLZ_Decompress.html')">OodleLZ_Decompress</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleLZDecoder_Create.html')">OodleLZDecoder_Create</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleLZDecoder_MemorySizeNeeded.html')">OodleLZDecoder_MemorySizeNeeded</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleLZ_ThreadPhased_BlockDecoderMemorySizeNeeded.html')">OodleLZ_ThreadPhased_BlockDecoderMemorySizeNeeded</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleLZDecoder_Destroy.html')">OodleLZDecoder_Destroy</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleLZDecoder_Reset.html')">OodleLZDecoder_Reset</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleLZDecoder_DecodeSome.html')">OodleLZDecoder_DecodeSome</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleLZDecoder_MakeValidCircularWindowSize.html')">OodleLZDecoder_MakeValidCircularWindowSize</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleLZ_MakeSeekChunkLen.html')">OodleLZ_MakeSeekChunkLen</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleLZ_GetNumSeekChunks.html')">OodleLZ_GetNumSeekChunks</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleLZ_GetSeekTableMemorySizeNeeded.html')">OodleLZ_GetSeekTableMemorySizeNeeded</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleLZ_FillSeekTable.html')">OodleLZ_FillSeekTable</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleLZ_CreateSeekTable.html')">OodleLZ_CreateSeekTable</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleLZ_FreeSeekTable.html')">OodleLZ_FreeSeekTable</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleLZ_CheckSeekTableCRCs.html')">OodleLZ_CheckSeekTableCRCs</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleLZ_FindSeekEntry.html')">OodleLZ_FindSeekEntry</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleLZ_GetSeekEntryPackedPos.html')">OodleLZ_GetSeekEntryPackedPos</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleLZ_CompressionLevel_GetName.html')">OodleLZ_CompressionLevel_GetName</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleLZ_Compressor_GetName.html')">OodleLZ_Compressor_GetName</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleLZ_Jobify_GetName.html')">OodleLZ_Jobify_GetName</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleLZ_CompressOptions_GetDefault.html')">OodleLZ_CompressOptions_GetDefault</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleLZ_CompressOptions_Validate.html')">OodleLZ_CompressOptions_Validate</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleLZ_Compressor_UsesWholeBlockQuantum.html')">OodleLZ_Compressor_UsesWholeBlockQuantum</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleLZ_Compressor_UsesLargeWindow.html')">OodleLZ_Compressor_UsesLargeWindow</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleLZ_Compressor_CanDecodeInCircularWindow.html')">OodleLZ_Compressor_CanDecodeInCircularWindow</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleLZ_Compressor_CanDecodeThreadPhased.html')">OodleLZ_Compressor_CanDecodeThreadPhased</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleLZ_Compressor_CanDecodeInPlace.html')">OodleLZ_Compressor_CanDecodeInPlace</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleLZ_Compressor_MustDecodeWithoutResets.html')">OodleLZ_Compressor_MustDecodeWithoutResets</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleLZ_Compressor_CanDecodeFuzzSafe.html')">OodleLZ_Compressor_CanDecodeFuzzSafe</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleLZ_Compressor_RespectsDictionarySize.html')">OodleLZ_Compressor_RespectsDictionarySize</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleLZ_GetCompressScratchMemBound.html')">OodleLZ_GetCompressScratchMemBound</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleLZ_GetCompressScratchMemBoundEx.html')">OodleLZ_GetCompressScratchMemBoundEx</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleLZ_GetCompressedBufferSizeNeeded.html')">OodleLZ_GetCompressedBufferSizeNeeded</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleLZ_GetDecodeBufferSize.html')">OodleLZ_GetDecodeBufferSize</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleLZ_GetInPlaceDecodeBufferSize.html')">OodleLZ_GetInPlaceDecodeBufferSize</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleLZ_GetCompressedStepForRawStep.html')">OodleLZ_GetCompressedStepForRawStep</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleLZ_GetAllChunksCompressor.html')">OodleLZ_GetAllChunksCompressor</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleLZ_GetFirstChunkCompressor.html')">OodleLZ_GetFirstChunkCompressor</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleLZ_GetChunkCompressor.html')">OodleLZ_GetChunkCompressor</a></li>
</ul>
<li><span onClick="HandleClick(event, null); return false" class='TOCGroup closedbook_icon'></span>&nbsp;Typedefs</li>
<ul style="display:none" class='TOCItem'>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleDecompressCallback.html')">OodleDecompressCallback</a></li>
</ul>
</ul>
<br>&nbsp;<br> <table class=bar> <tr>
<td width=33% align=left><span class='arrowleft'></span><a href="javascript:show('OodleLZ_About_Hydra.html')" class="paragraph">About OodleLZ Hydra</a></td><td width=33% align=center><span class='arrowup'></span><a href="javascript:show('OodleAPI_LZ.html')" class="paragraph">Core LZ compression</a></td><td width=33% align=right><span class='arrowright'></span><a href="javascript:show('OODLE_ALLOW_DEPRECATED_COMPRESSORS.html')" class="paragraph">OODLE_ALLOW_DEPRECATED_COMPRESSORS</a></td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="Oodle_SetConfigValues.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>Oodle_SetConfigValues</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "Oodle_SetConfigValues.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="Oodle_SetConfigValues.html_backmenu">
<table class=dropmenu>
<tr><td><span class='arrowleft'></span>&nbsp;<a href="javascript:show('Oodle_GetConfigValues.html')" class="paragraph">Oodle_GetConfigValues</a></td></tr><tr><td><span class='arrowright'></span>&nbsp;<a href="javascript:show('Oodle_SetUsageWarnings.html')" class="paragraph">Oodle_SetUsageWarnings</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<div class=prototype><div class=prototype_header>// Function prototype:</div><pre>void <span class=prototype_type><a href="javascript:show('Oodle_SetConfigValues.html')" class="blue">Oodle_SetConfigValues</a></span>( const <span class=prototype_type><a href="javascript:show('OodleConfigValues.html')" class="blue">OodleConfigValues</a></span> * ptr );</pre></div><div class=discussion_heading>Discussion</div>Set <a href="javascript:show('OodleConfigValues.html')" class="paragraph">OodleConfigValues</a><div class=discussion_heading>Parameters</div> <table> <tr> <td style='vertical-align: top;' class=paramname><a id="Oodle_SetConfigValues.html_ptr" class=nohover>ptr</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> your desired OodleConfigValues
</td></tr></table><div class=discussion_heading>Discussion</div></p>
<p> Sets the global <a href="javascript:show('OodleConfigValues.html')" class="paragraph">OodleConfigValues</a> from your struct.
</p>
<p> You should call <a href="javascript:show('Oodle_GetConfigValues.html')" class="paragraph">Oodle_GetConfigValues</a> to fill the struct, then change the values you
want to change, then call <a href="javascript:show('Oodle_SetConfigValues.html')" class="paragraph">Oodle_SetConfigValues</a>.
</p>
<p> This should generally be done before doing anything with Oodle (eg. even before OodleX_Init).
Changing OodleConfigValues after Oodle has started has undefined effects.
<br>&nbsp;<br> <table class=bar> <tr>
<td width=33% align=left><span class='arrowleft'></span><a href="javascript:show('Oodle_GetConfigValues.html')" class="paragraph">Oodle_GetConfigValues</a></td><td width=33% align=center><span class='arrowup'></span><a href="javascript:show('OodleAPI_Base.html')" class="paragraph">Core Base</a></td><td width=33% align=right><span class='arrowright'></span><a href="javascript:show('Oodle_SetUsageWarnings.html')" class="paragraph">Oodle_SetUsageWarnings</a></td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="OodleXLZ_Decompress_Narrow_Async.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>OodleXLZ_Decompress_Narrow_Async</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "OodleXLZ_Decompress_Narrow_Async.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="OodleXLZ_Decompress_Narrow_Async.html_backmenu">
<table class=dropmenu>
<tr><td><span class='arrowleft'></span>&nbsp;<a href="javascript:show('OodleXLZ_Decompress_ThreadPhased_Narrow_Async.html')" class="paragraph">OodleXLZ_Decompress_ThreadPhased_Narrow_Async</a></td></tr><tr><td><span class='arrowright'></span>&nbsp;<a href="javascript:show('OodleXLZ_ReadAndDecompress_Wide_Async.html')" class="paragraph">OodleXLZ_ReadAndDecompress_Wide_Async</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<div class=prototype><div class=prototype_header>// Function prototype:</div><pre><span class=prototype_type><a href="javascript:show('OodleXHandle.html')" class="blue">OodleXHandle</a></span> <span class=prototype_type><a href="javascript:show('OodleXLZ_Decompress_Narrow_Async.html')" class="blue">OodleXLZ_Decompress_Narrow_Async</a></span>( OO_U32 asyncSelect,
const void * packedDataPtr,
OO_SINTa packedLen,
void * rawPtr,
OO_SINTa rawChunkLen,
<span class=prototype_type><a href="javascript:show('OodleLZ_FuzzSafe.html')" class="blue">OodleLZ_FuzzSafe</a></span> fuzzSafe OODEFAULT( OodleLZ_FuzzSafe_No ),
<span class=prototype_type><a href="javascript:show('OodleLZ_CheckCRC.html')" class="blue">OodleLZ_CheckCRC</a></span> checkCRC OODEFAULT( OodleLZ_CheckCRC_No ),
<span class=prototype_type><a href="javascript:show('OodleLZ_Verbosity.html')" class="blue">OodleLZ_Verbosity</a></span> verbosity OODEFAULT( OodleLZ_Verbosity_None ),
void * decBufBase OODEFAULT( NULL ),
OO_SINTa decBufSize OODEFAULT( 0 ),
<span class=prototype_type><a href="javascript:show('OodleDecompressCallback.html')" class="blue">OodleDecompressCallback</a></span> * pcb OODEFAULT( NULL ),
void * pcbData OODEFAULT( NULL ),
void * decMem OODEFAULT( NULL ),
OO_SINTa decMemSize OODEFAULT( 0 ),
<span class=prototype_type><a href="javascript:show('OodleLZ_Decode_ThreadPhase.html')" class="blue">OodleLZ_Decode_ThreadPhase</a></span> threadPhase OODEFAULT( OodleLZ_Decode_Unthreaded ),
<span class=prototype_type><a href="javascript:show('OodleXIOQFile.html')" class="blue">OodleXIOQFile</a></span> writeToFile OODEFAULT( 0 ),
OO_S64 writeToFileStartPos OODEFAULT( 0 ),
<span class=prototype_type><a href="javascript:show('OodleXHandle.html')" class="blue">OodleXHandle</a></span> writeHandleGroup OODEFAULT( 0 ),
OO_S32 writeHandleGroupIndex OODEFAULT( 0 ),
<span class=prototype_type><a href="javascript:show('OodleXHandleAutoDelete.html')" class="blue">OodleXHandleAutoDelete</a></span> autoDelete OODEFAULT( OodleXHandleAutoDelete_No ),
const <span class=prototype_type><a href="javascript:show('OodleXHandle.html')" class="blue">OodleXHandle</a></span> * dependencies OODEFAULT( NULL ),
OO_S32 numDependencies OODEFAULT( 0 ),
<span class=prototype_type><a href="javascript:show('OodleXPriority.html')" class="blue">OodleXPriority</a></span> work_priority OODEFAULT( OodleXPriority_Normal ) );</pre></div><div class=discussion_heading>Discussion</div>Start an async LZ decompress<div class=discussion_heading>Parameters</div> <table> <tr> <td style='vertical-align: top;' class=paramname><a id="OodleXLZ_Decompress_Narrow_Async.html_asyncSelect" class=nohover>asyncSelect</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> logical OR of <a href="javascript:show('OodleXAsyncSelect.html')" class="paragraph">OodleXAsyncSelect</a> flags determine how the async is run
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXLZ_Decompress_Narrow_Async.html_packedDataPtr" class=nohover>packedDataPtr</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> pointer to LZ compressed data
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXLZ_Decompress_Narrow_Async.html_packedLen" class=nohover>packedLen</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> compressed data length
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXLZ_Decompress_Narrow_Async.html_rawPtr" class=nohover>rawPtr</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> pointer to memory filled with decompressed data
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXLZ_Decompress_Narrow_Async.html_rawChunkLen" class=nohover>rawChunkLen</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> length of decompressed data
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXLZ_Decompress_Narrow_Async.html_checkCRC" class=nohover>checkCRC</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> if OodleLZ_CheckCRC_Yes, the decompressor checks the crc to ensure data integrity
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXLZ_Decompress_Narrow_Async.html_verbosity" class=nohover>verbosity</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> (optional) if not OodleLZ_Verbosity_None, will log some information
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXLZ_Decompress_Narrow_Async.html_decBufBase" class=nohover>decBufBase</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> (optional) if not NULL, provides preceding data to prime the dictionary; must be contiguous with rawBuf, the data between the pointers <i>dictionaryBase</i> and <i>rawBuf</i> is used as the preconditioning data. The exact same precondition must be passed to encoder and decoder.
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXLZ_Decompress_Narrow_Async.html_decBufSize" class=nohover>decBufSize</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> (optional) size of circular buffer starting at decBufBase
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXLZ_Decompress_Narrow_Async.html_pcb" class=nohover>pcb</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> (optional) OodleDecompressCallback called during decompression
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXLZ_Decompress_Narrow_Async.html_pcbData" class=nohover>pcbData</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> (optional) user data passed to pcb
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXLZ_Decompress_Narrow_Async.html_writeToFile" class=nohover>writeToFile</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> (optional) OodleXIOQFile to write raw data to
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXLZ_Decompress_Narrow_Async.html_writeToFileStartPos" class=nohover>writeToFileStartPos</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> (optional) file position where writeToFile should start (must be <a href="javascript:show('OODLEX_IO_MAX_ALIGNMENT.html')" class="paragraph">OODLEX_IO_MAX_ALIGNMENT</a> aligned)
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXLZ_Decompress_Narrow_Async.html_writeHandleGroup" class=nohover>writeHandleGroup</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> (optional) OodleAsyncGroup handle which the write handle is put into
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXLZ_Decompress_Narrow_Async.html_writeHandleGroupIndex" class=nohover>writeHandleGroupIndex</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> (optional) index in writeHandleGroup to use; must previously be <a href="javascript:show('OODLEX_ASYNC_HANDLE_PENDING.html')" class="paragraph">OODLEX_ASYNC_HANDLE_PENDING</a>
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXLZ_Decompress_Narrow_Async.html_autoDelete" class=nohover>autoDelete</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> (optional) see <a href="javascript:show('OodleXHandleAutoDelete.html')" class="paragraph">OodleXHandleAutoDelete</a>
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXLZ_Decompress_Narrow_Async.html_dependencies" class=nohover>dependencies</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> (optional) dependencies; the async op won't start until these are all complete; note : these are not freed, they must be autodelete or you must free them some other way.
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXLZ_Decompress_Narrow_Async.html_numDependencies" class=nohover>numDependencies</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> (optional) number of handles in <i>deps</i> array
</td></tr></table><div class=discussion_heading>Discussion</div></p>
<p> :return OodleXHandle to the operation, or OodleXHandle_Null for invalid arguments
</p>
<p> Start an async LZ decompress with the runner specified in asyncSelect.
</p>
<p> A Narrow decompress means the entire decompression is done on one thread.
Data will always be decompressed sequentially, eg. in order.
</p>
<p> <i>rawChunkLen</i> can be less than the entire original block, if it is a multiple of <a href="javascript:show('OODLELZ_BLOCK_LEN.html')" class="paragraph">OODLELZ_BLOCK_LEN</a>.
</p>
<p> If provided, the <a href="javascript:show('OodleDecompressCallback.html')" class="paragraph">OodleDecompressCallback</a> is called as quanta of raw data are available. The callback
may be called more often than <a href="javascript:show('OODLELZ_BLOCK_LEN.html')" class="paragraph">OODLELZ_BLOCK_LEN</a> granularity.
</p>
<p> <i>rawPtr</i> and <i>packedDataPtr</i> memory blocks passed to this function must be kept alive for the duration of the async.
</p>
<p> NOTE !! : if <i>writeToFile</i> is provided, the writes are async and are NOT necessarily done when
the returned handle is done; the returned handle is for the decompress. The handle for the write can
be retrieved by passing in <i>writeHandleGroup</i>. You must not free the buffer being written until the
write operation is done.
<br>&nbsp;<br> <table class=bar> <tr>
<td width=33% align=left><span class='arrowleft'></span><a href="javascript:show('OodleXLZ_Decompress_ThreadPhased_Narrow_Async.html')" class="paragraph">OodleXLZ_Decompress_ThreadPhased_Narrow_Async</a></td><td width=33% align=center><span class='arrowup'></span><a href="javascript:show('OodleXAPI_LZ_Async.html')" class="paragraph">OodleXAPI_LZ_Async</a></td><td width=33% align=right><span class='arrowright'></span><a href="javascript:show('OodleXLZ_ReadAndDecompress_Wide_Async.html')" class="paragraph">OodleXLZ_ReadAndDecompress_Wide_Async</a></td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="start_CoreVsExt.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>Oodle2 Core vs Oodle2 Ext</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "start_CoreVsExt.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="start_CoreVsExt.html_backmenu">
<table class=dropmenu>
<tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<P>
Oodle Data Compression comes in two libraries on most platforms : Core and Ext.
(On some embedded and mobile platforms, Ext is not provided)
</p>
<p>(note Oodle Network is in its own SDK and libraries; see <a href="javascript:show('start_NetworkSplit.html')" class="paragraph">Oodle Network and Data SDK separation</a>)
</p>
<p>Oodle2 Core lib provides simple memory->memory synchronous operations.
(eg. <a href="javascript:show('OodleLZ_Compress.html')" class="paragraph">OodleLZ_Compress</a>)
</p>
<p>Oodle2 Ext extends the Core library by adding asynchronous and multi-threaded compression,
as well as file IO and job scheduling.
(eg. <a href="javascript:show('OodleXLZ_ReadAndDecompress_Stream_Async.html')" class="paragraph">OodleXLZ_ReadAndDecompress_Stream_Async</a>)
</p>
<p>Core lib APIs start with Oodle_ , Ext lib APIs start with OodleX_
</p>
<p>In general, it's recommended that you use OodleX in your tool chain, and use only Oodle Core
in your shipping runtime.
</p>
<p>OodleX provides its own allocator. Oodle Core defaults to using clib for allocations if needed,
or you can replace that with <a href="javascript:show('OodleAPI_OodleCore_Plugins.html')" class="paragraph">Core plugins</a>.
</p>
<p>OodleX must be Init and Shutdown (see <a href="javascript:show('OodleXAPI_Init.html')" class="paragraph">OodleX Startup and Shutdown</a>) once in your app. Oodle Core does not
require any initialization or shutdown, you can start calling Core APIs at any time (but not if
you use OodleX! If you use OodleX, then Init must happen before any Oodle call, including any
Core call).
</p>
<p>Oodle Core is available on all platforms. Oodle Ext is not available on iOS or Android.
</p>
<p>Oodle Core is entirely thread-safe and reentrant with no blocking primitives, because there is no
global shared state.
</p>
<p>As much as possible, the Oodle Core functions are "pure". That is, they act only on their arguments
and do only CPU work, they do not interact with the system in any other way. The main exception is
that Core can make calls to logging and allocation through user-provided system plugins (see <a href="javascript:show('OodleAPI_OodleCore_Plugins.html')" class="paragraph">Core plugins</a>).
It is possible to make all those plugins NULL in your shipping build; see <a href="javascript:show('Oodle_FAQ_UseOodleWithNoAllocator.html')" class="paragraph">FAQ: How do I use Oodle with no allocator?</a>.
</p>
<p>NOTE : on Windows DLL (and other DLL builds) do not import both Ext and Core! The Ext DLL contains
Core as well.
</p>
<p>NOTE : Ext automatically plugs itself into Core. You do not need to use the Plugin functions to
install Ext to Core. That is not true of the new split libs Oodle Network and Oodle Texture. If you
want to install OodleX to Net or Texture you have to call the Plugin functions explicitly.<br>&nbsp;<br> <table class=bar> <tr>
<td width=33%>&nbsp;</td><td width=33%>&nbsp;</td><td width=33%>&nbsp;</td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="OodleCore_Plugins_SetAssertion.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>OodleCore_Plugins_SetAssertion</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "OodleCore_Plugins_SetAssertion.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="OodleCore_Plugins_SetAssertion.html_backmenu">
<table class=dropmenu>
<tr><td><span class='arrowleft'></span>&nbsp;<a href="javascript:show('OodleCore_Plugins_SetPrintf.html')" class="paragraph">OodleCore_Plugins_SetPrintf</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<div class=prototype><div class=prototype_header>// Function prototype:</div><pre><span class=prototype_type><a href="javascript:show('t_fp_OodleCore_Plugin_DisplayAssertion.html')" class="blue">t_fp_OodleCore_Plugin_DisplayAssertion</a></span> * <span class=prototype_type><a href="javascript:show('OodleCore_Plugins_SetAssertion.html')" class="blue">OodleCore_Plugins_SetAssertion</a></span>( <span class=prototype_type><a href="javascript:show('t_fp_OodleCore_Plugin_DisplayAssertion.html')" class="blue">t_fp_OodleCore_Plugin_DisplayAssertion</a></span> * fp_rrDisplayAssertion );</pre></div><div class=discussion_heading>Discussion</div>Install the callback used by Oodle Core for asserts<div class=discussion_heading>Parameters</div> <table> <tr> <td style='vertical-align: top;' class=paramname><a id="OodleCore_Plugins_SetAssertion.html_fp_rrDisplayAssertion" class=nohover>fp_rrDisplayAssertion</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> function pointer to your assert display function
</td></tr></table><div class=discussion_heading>Return Value</div> <table> <tr> <td style='vertical-align: top;' class=paramname><a id="OodleCore_Plugins_SetAssertion.html_return" class=nohover>return</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> returns the previous function pointer
</td></tr></table><div class=discussion_heading>Discussion</div></p>
<p> Use this function to install your own display for Oodle Core assertions.
This will only happen in debug builds.
</p>
<p> The default implementation in debug builds, if you install nothing, uses the C stderr printf for logging,
except on Microsoft platforms where it uses OutputDebugString.
</p>
<p> WARNING : this function is NOT thread safe! It should be done only once and done in a place where the caller can guarantee thread safety.
</p>
<p><br>&nbsp;<br> <table class=bar> <tr>
<td width=33% align=left><span class='arrowleft'></span><a href="javascript:show('OodleCore_Plugins_SetPrintf.html')" class="paragraph">OodleCore_Plugins_SetPrintf</a></td><td width=33% align=center><span class='arrowup'></span><a href="javascript:show('OodleAPI_OodleCore_Plugins.html')" class="paragraph">Core plugins</a></td><td width=33% align=right><span class='arrowright'></span><a href="javascript:show('t_fp_OodleCore_Plugin_MallocAligned.html')" class="paragraph">t_fp_OodleCore_Plugin_MallocAligned</a></td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="OodleX_IOAlignDownS64.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>OodleX_IOAlignDownS64</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "OodleX_IOAlignDownS64.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="OodleX_IOAlignDownS64.html_backmenu">
<table class=dropmenu>
<tr><td><span class='arrowleft'></span>&nbsp;<a href="javascript:show('OodleX_IOAlignDownS32.html')" class="paragraph">OodleX_IOAlignDownS32</a></td></tr><tr><td><span class='arrowright'></span>&nbsp;<a href="javascript:show('OodleX_IOAlignDownSINTa.html')" class="paragraph">OodleX_IOAlignDownSINTa</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<div class=prototype><div class=prototype_header>// Function prototype:</div><pre>OO_S64 <span class=prototype_type><a href="javascript:show('OodleX_IOAlignDownS64.html')" class="blue">OodleX_IOAlignDownS64</a></span>( const OO_S64 x );</pre></div><div class=discussion_heading>Discussion</div>Align down to <a href="javascript:show('OODLEX_IO_MAX_ALIGNMENT.html')" class="paragraph">OODLEX_IO_MAX_ALIGNMENT</a><div class=discussion_heading>Parameters</div> <table> <tr> <td style='vertical-align: top;' class=paramname><a id="OodleX_IOAlignDownS64.html_x" class=nohover>x</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> value to align
</td></tr></table><div class=discussion_heading>Return Value</div> <table> <tr> <td style='vertical-align: top;' class=paramname><a id="OodleX_IOAlignDownS64.html_return" class=nohover>return</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> aligned value
</td></tr></table><div class=discussion_heading>Discussion</div></p>
<p> Align x down to <a href="javascript:show('OODLEX_IO_MAX_ALIGNMENT.html')" class="paragraph">OODLEX_IO_MAX_ALIGNMENT</a>
<br>&nbsp;<br> <table class=bar> <tr>
<td width=33% align=left><span class='arrowleft'></span><a href="javascript:show('OodleX_IOAlignDownS32.html')" class="paragraph">OodleX_IOAlignDownS32</a></td><td width=33% align=center><span class='arrowup'></span><a href="javascript:show('OodleXAPI_Util.html')" class="paragraph">OodleX Utils</a></td><td width=33% align=right><span class='arrowright'></span><a href="javascript:show('OodleX_IOAlignDownSINTa.html')" class="paragraph">OodleX_IOAlignDownSINTa</a></td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="OodleLZ_CompressionLevel.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>OodleLZ_CompressionLevel</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "OodleLZ_CompressionLevel.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="OodleLZ_CompressionLevel.html_backmenu">
<table class=dropmenu>
<tr><td><span class='arrowleft'></span>&nbsp;<a href="javascript:show('OodleDecompressCallbackRet.html')" class="paragraph">OodleDecompressCallbackRet</a></td></tr><tr><td><span class='arrowright'></span>&nbsp;<a href="javascript:show('OodleLZ_Jobify.html')" class="paragraph">OodleLZ_Jobify</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<div class=prototype><div class=prototype_header>// Enumerant:</div><pre><span class=prototype_type>enum</span> <a href="javascript:show('OodleLZ_CompressionLevel.html')">OodleLZ_CompressionLevel</a>
{
&nbsp;&nbsp;&nbsp;&nbsp;OodleLZ_CompressionLevel_None = 0,
&nbsp;&nbsp;&nbsp;&nbsp;OodleLZ_CompressionLevel_SuperFast = 1,
&nbsp;&nbsp;&nbsp;&nbsp;OodleLZ_CompressionLevel_VeryFast = 2,
&nbsp;&nbsp;&nbsp;&nbsp;OodleLZ_CompressionLevel_Fast = 3,
&nbsp;&nbsp;&nbsp;&nbsp;OodleLZ_CompressionLevel_Normal = 4,
&nbsp;&nbsp;&nbsp;&nbsp;OodleLZ_CompressionLevel_Optimal1 = 5,
&nbsp;&nbsp;&nbsp;&nbsp;OodleLZ_CompressionLevel_Optimal2 = 6,
&nbsp;&nbsp;&nbsp;&nbsp;OodleLZ_CompressionLevel_Optimal3 = 7,
&nbsp;&nbsp;&nbsp;&nbsp;OodleLZ_CompressionLevel_Optimal4 = 8,
&nbsp;&nbsp;&nbsp;&nbsp;OodleLZ_CompressionLevel_Optimal5 = 9,
&nbsp;&nbsp;&nbsp;&nbsp;OodleLZ_CompressionLevel_HyperFast1 = -1,
&nbsp;&nbsp;&nbsp;&nbsp;OodleLZ_CompressionLevel_HyperFast2 = -2,
&nbsp;&nbsp;&nbsp;&nbsp;OodleLZ_CompressionLevel_HyperFast3 = -3,
&nbsp;&nbsp;&nbsp;&nbsp;OodleLZ_CompressionLevel_HyperFast4 = -4,
&nbsp;&nbsp;&nbsp;&nbsp;OodleLZ_CompressionLevel_HyperFast = OodleLZ_CompressionLevel_HyperFast1,
&nbsp;&nbsp;&nbsp;&nbsp;OodleLZ_CompressionLevel_Optimal = OodleLZ_CompressionLevel_Optimal2,
&nbsp;&nbsp;&nbsp;&nbsp;OodleLZ_CompressionLevel_Max = OodleLZ_CompressionLevel_Optimal5,
&nbsp;&nbsp;&nbsp;&nbsp;OodleLZ_CompressionLevel_Min = OodleLZ_CompressionLevel_HyperFast4,
&nbsp;&nbsp;&nbsp;&nbsp;OodleLZ_CompressionLevel_Force32 = 0x40000000,
&nbsp;&nbsp;&nbsp;&nbsp;OodleLZ_CompressionLevel_Invalid = OodleLZ_CompressionLevel_Force32
};
</pre></div><div class=discussion_heading>Discussion</div> Selection of compression encoder complexity<div class=discussion_heading>Enumerants</div> <table> <tr> <td style='vertical-align: top;' class=paramname><a id="OodleLZ_CompressionLevel.html_OodleLZ_CompressionLevel_None" class=nohover>OodleLZ_CompressionLevel_None</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> don't compress, just copy raw bytes</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleLZ_CompressionLevel.html_OodleLZ_CompressionLevel_SuperFast" class=nohover>OodleLZ_CompressionLevel_SuperFast</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> super fast mode, lower compression ratio</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleLZ_CompressionLevel.html_OodleLZ_CompressionLevel_VeryFast" class=nohover>OodleLZ_CompressionLevel_VeryFast</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> fastest LZ mode with still decent compression ratio</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleLZ_CompressionLevel.html_OodleLZ_CompressionLevel_Fast" class=nohover>OodleLZ_CompressionLevel_Fast</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> fast - good for daily use</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleLZ_CompressionLevel.html_OodleLZ_CompressionLevel_Normal" class=nohover>OodleLZ_CompressionLevel_Normal</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> standard medium speed LZ mode</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleLZ_CompressionLevel.html_OodleLZ_CompressionLevel_Optimal1" class=nohover>OodleLZ_CompressionLevel_Optimal1</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> optimal parse level 1 (faster optimal encoder)</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleLZ_CompressionLevel.html_OodleLZ_CompressionLevel_Optimal2" class=nohover>OodleLZ_CompressionLevel_Optimal2</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> optimal parse level 2 (recommended baseline optimal encoder)</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleLZ_CompressionLevel.html_OodleLZ_CompressionLevel_Optimal3" class=nohover>OodleLZ_CompressionLevel_Optimal3</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> optimal parse level 3 (slower optimal encoder)</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleLZ_CompressionLevel.html_OodleLZ_CompressionLevel_Optimal4" class=nohover>OodleLZ_CompressionLevel_Optimal4</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> optimal parse level 4 (very slow optimal encoder)</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleLZ_CompressionLevel.html_OodleLZ_CompressionLevel_Optimal5" class=nohover>OodleLZ_CompressionLevel_Optimal5</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> optimal parse level 5 (don't care about encode speed, maximum compression)</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleLZ_CompressionLevel.html_OodleLZ_CompressionLevel_HyperFast1" class=nohover>OodleLZ_CompressionLevel_HyperFast1</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> faster than SuperFast, less compression</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleLZ_CompressionLevel.html_OodleLZ_CompressionLevel_HyperFast2" class=nohover>OodleLZ_CompressionLevel_HyperFast2</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> faster than HyperFast1, less compression</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleLZ_CompressionLevel.html_OodleLZ_CompressionLevel_HyperFast3" class=nohover>OodleLZ_CompressionLevel_HyperFast3</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> faster than HyperFast2, less compression</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleLZ_CompressionLevel.html_OodleLZ_CompressionLevel_HyperFast4" class=nohover>OodleLZ_CompressionLevel_HyperFast4</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> fastest, less compression</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleLZ_CompressionLevel.html_OodleLZ_CompressionLevel_HyperFast" class=nohover>OodleLZ_CompressionLevel_HyperFast</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> alias hyperfast base level</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleLZ_CompressionLevel.html_OodleLZ_CompressionLevel_Optimal" class=nohover>OodleLZ_CompressionLevel_Optimal</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> alias optimal standard level</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleLZ_CompressionLevel.html_OodleLZ_CompressionLevel_Max" class=nohover>OodleLZ_CompressionLevel_Max</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> maximum compression level</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleLZ_CompressionLevel.html_OodleLZ_CompressionLevel_Min" class=nohover>OodleLZ_CompressionLevel_Min</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> fastest compression level</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleLZ_CompressionLevel.html_OodleLZ_CompressionLevel_Force32" class=nohover>OodleLZ_CompressionLevel_Force32</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc></td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleLZ_CompressionLevel.html_OodleLZ_CompressionLevel_Invalid" class=nohover>OodleLZ_CompressionLevel_Invalid</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc></td></tr></table><div class=discussion_heading>Discussion</div> Higher numerical value of CompressionLevel = slower compression, but smaller compressed data.
</p>
<p> The compressed stream is always decodable with the same decompressors.
CompressionLevel controls the amount of work the encoder does to find the best compressed bit stream.
CompressionLevel does not primary affect decode speed, it trades off encode speed for compressed bit stream quality.
</p>
<p> I recommend starting with OodleLZ_CompressionLevel_Normal, then try up or down if you want
faster encoding or smaller output files.
</p>
<p> The Optimal levels are good for distribution when you compress rarely and decompress often;
they provide very high compression ratios but are slow to encode. Optimal2 is the recommended level
to start with of the optimal levels.
Optimal4 and 5 are not recommended for common use, they are very slow and provide the maximum compression ratio,
but the gain over Optimal3 is usually small.
</p>
<p> The HyperFast levels have negative numeric CompressionLevel values.
They are faster than SuperFast for when you're encoder CPU time constrained or want
something closer to symmetric compression vs. decompression time.
The HyperFast levels are currently only available in Kraken, Mermaid &amp; Selkie.
Higher levels of HyperFast are faster to encode, eg. HyperFast4 is the fastest.
</p>
<p> The CompressionLevel does not affect decode speed much. Higher compression level does not mean
slower to decode. To trade off decode speed vs ratio, use <i>spaceSpeedTradeoffBytes</i> in <a href="javascript:show('OodleLZ_CompressOptions.html')" class="paragraph">OodleLZ_CompressOptions</a>
</p>
<p><br>&nbsp;<br> <table class=bar> <tr>
<td width=33% align=left><span class='arrowleft'></span><a href="javascript:show('OodleDecompressCallbackRet.html')" class="paragraph">OodleDecompressCallbackRet</a></td><td width=33% align=center><span class='arrowup'></span><a href="javascript:show('OodleAPI_LZ_Compressors.html')" class="paragraph">OodleAPI_LZ_Compressors</a></td><td width=33% align=right><span class='arrowright'></span><a href="javascript:show('OodleLZ_Jobify.html')" class="paragraph">OodleLZ_Jobify</a></td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="OodleXLZ_Decompress_ThreadPhased_Narrow_Async.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>OodleXLZ_Decompress_ThreadPhased_Narrow_Async</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "OodleXLZ_Decompress_ThreadPhased_Narrow_Async.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="OodleXLZ_Decompress_ThreadPhased_Narrow_Async.html_backmenu">
<table class=dropmenu>
<tr><td><span class='arrowright'></span>&nbsp;<a href="javascript:show('OodleXLZ_Decompress_Narrow_Async.html')" class="paragraph">OodleXLZ_Decompress_Narrow_Async</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<div class=prototype><div class=prototype_header>// Function prototype:</div><pre><span class=prototype_type><a href="javascript:show('OodleXHandle.html')" class="blue">OodleXHandle</a></span> <span class=prototype_type><a href="javascript:show('OodleXLZ_Decompress_ThreadPhased_Narrow_Async.html')" class="blue">OodleXLZ_Decompress_ThreadPhased_Narrow_Async</a></span>( const void * compBuf,
OO_SINTa compSize,
void * decBuf,
OO_SINTa rawSize,
<span class=prototype_type><a href="javascript:show('OodleLZ_CheckCRC.html')" class="blue">OodleLZ_CheckCRC</a></span> checkCRC OODEFAULT( OodleLZ_CheckCRC_No ),
void * decBufBase OODEFAULT( NULL ),
OO_SINTa decBufSize OODEFAULT( 0 ),
OO_S32 circularBufferBlockCount OODEFAULT( - 1 ),
void * scratchBuf OODEFAULT( NULL ),
OO_BOOL synchronous_use_current_thread OODEFAULT( false ) );</pre></div><div class=discussion_heading>Discussion</div>Start an async LZ decompress for ThreadPhase decoding, using 2 threads<div class=discussion_heading>Parameters</div> <table> <tr> <td style='vertical-align: top;' class=paramname><a id="OodleXLZ_Decompress_ThreadPhased_Narrow_Async.html_compBuf" class=nohover>compBuf</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> pointer to compressed data
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXLZ_Decompress_ThreadPhased_Narrow_Async.html_compBufferSize" class=nohover>compBufferSize</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> number of compressed bytes to decode
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXLZ_Decompress_ThreadPhased_Narrow_Async.html_rawBuf" class=nohover>rawBuf</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> pointer to output uncompressed data into
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXLZ_Decompress_ThreadPhased_Narrow_Async.html_rawLen" class=nohover>rawLen</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> number of uncompressed bytes to output
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXLZ_Decompress_ThreadPhased_Narrow_Async.html_checkCRC" class=nohover>checkCRC</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> (optional) if data could be corrupted and you want to know about it, pass OodleLZ_CheckCRC_Yes
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXLZ_Decompress_ThreadPhased_Narrow_Async.html_decBufBase" class=nohover>decBufBase</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> (optional) if not NULL, provides preceding data to prime the dictionary; must be contiguous with rawBuf, the data between the pointers <i>dictionaryBase</i> and <i>rawBuf</i> is used as the preconditioning data. The exact same precondition must be passed to encoder and decoder. The decBufBase must be a reset point.
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXLZ_Decompress_ThreadPhased_Narrow_Async.html_decBufSize" class=nohover>decBufSize</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> (optional) size of circular buffer starting at decBufBase
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXLZ_Decompress_ThreadPhased_Narrow_Async.html_circularBufferBlockCount" class=nohover>circularBufferBlockCount</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> (optional) number of blocks for circular buffer; generally more is faster but takes more memory; &lt; 0 means use default
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXLZ_Decompress_ThreadPhased_Narrow_Async.html_scratchBuf" class=nohover>scratchBuf</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> (optional) memory to use for scratch; must be OodleLZ_ThreadPhased_BlockDecoderMemorySizeNeeded() * circularBufferBlockCount ; if NULL will be allocated
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXLZ_Decompress_ThreadPhased_Narrow_Async.html_synchronous_use_current_thread" class=nohover>synchronous_use_current_thread</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> (optional) if true, runs on the current thread and uses 1 additional thread; this makes this a synchronous call and won't return until decompression is done (default is to use 2 worker threads and be fully async)
</td></tr></table><div class=discussion_heading>Return Value</div> <table> <tr> <td style='vertical-align: top;' class=paramname><a id="OodleXLZ_Decompress_ThreadPhased_Narrow_Async.html_return" class=nohover>return</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> OodleXHandle to the operation, wait and check status to get result
</td></tr></table><div class=discussion_heading>Discussion</div></p>
<p> Runs a 2-thread Narrow decompress using the Oodle Worker system.
You must wait and delete the return handle, for example with OodleX_WaitAndDelete
</p>
<p> This only works on data that has been compressed with a compressor that's eligible for ThreadPhased decode;
check OodleLZ_Compressor_CanDecodeThreadPhased. (currently just Kraken).
</p>
<p> See <a href="javascript:show('OodleLZ_About_ThreadPhasedDecode.html')" class="paragraph">About OodleLZ ThreadPhased Decode</a>
</p>
<p> This function (OodleXLZ_Decompress_ThreadPhased_Narrow_Async) does NOT parallelize at seek reset points.
You can however do so yourself externally to calling this function. Simply scan the compressed buffer for
seek points and launch a separate OodleXLZ_Decompress_ThreadPhased_Narrow_Async call on each seek chunk.
</p>
<p> ThreadPhased decode is always fuzz safe.
</p>
<p> If synchronous_use_current_thread then the returned handle is not async, you may check its status to get the result.
</p>
<p> </p>
<p><br>&nbsp;<br> <table class=bar> <tr>
<td width=33% align=left><span class='arrowleft'></span><a href="javascript:show('OodleDecompressCallback_WriteFile_Data.html')" class="paragraph">OodleDecompressCallback_WriteFile_Data</a></td><td width=33% align=center><span class='arrowup'></span><a href="javascript:show('OodleXAPI_LZ_Async.html')" class="paragraph">OodleXAPI_LZ_Async</a></td><td width=33% align=right><span class='arrowright'></span><a href="javascript:show('OodleXLZ_Decompress_Narrow_Async.html')" class="paragraph">OodleXLZ_Decompress_Narrow_Async</a></td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="OODLE_WORKERS_COUNT_ALL_PHYSICAL_CORES.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>OODLE_WORKERS_COUNT_ALL_PHYSICAL_CORES</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "OODLE_WORKERS_COUNT_ALL_PHYSICAL_CORES.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="OODLE_WORKERS_COUNT_ALL_PHYSICAL_CORES.html_backmenu">
<table class=dropmenu>
<tr><td><span class='arrowright'></span>&nbsp;<a href="javascript:show('OODLE_WORKERS_COUNT_ALL_HYPER_CORES.html')" class="paragraph">OODLE_WORKERS_COUNT_ALL_HYPER_CORES</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<div class=prototype><div class=prototype_header>// Preprocessor definition:</div><pre><span class=prototype_type>#define</span> <a href="javascript:show('OODLE_WORKERS_COUNT_ALL_PHYSICAL_CORES.html')">OODLE_WORKERS_COUNT_ALL_PHYSICAL_CORES</a> (-1)</pre></div><div class=discussion_heading>Discussion</div> Make workers for every physical core
eg. in a 6-physical core, 12-hyper-thread system, would make 6 threads
this is usually best for Oodle Data LZ compression work
See also <a href="javascript:show('OODLE_WORKERS_COUNT_ALL_HYPER_CORES.html')" class="paragraph">OODLE_WORKERS_COUNT_ALL_HYPER_CORES</a>
<br>&nbsp;<br> <table class=bar> <tr>
<td width=33% align=left><span class='arrowleft'></span><a href="javascript:show('OodleXAPI_Init.html')" class="paragraph">OodleX Startup and Shutdown</a></td><td width=33% align=center><span class='arrowup'></span><a href="javascript:show('OodleXAPI_Init.html')" class="paragraph">OodleX Startup and Shutdown</a></td><td width=33% align=right><span class='arrowright'></span><a href="javascript:show('OODLE_WORKERS_COUNT_ALL_HYPER_CORES.html')" class="paragraph">OODLE_WORKERS_COUNT_ALL_HYPER_CORES</a></td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="OodleLZ_Compressor_MustDecodeWithoutResets.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>OodleLZ_Compressor_MustDecodeWithoutResets</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "OodleLZ_Compressor_MustDecodeWithoutResets.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="OodleLZ_Compressor_MustDecodeWithoutResets.html_backmenu">
<table class=dropmenu>
<tr><td><span class='arrowleft'></span>&nbsp;<a href="javascript:show('OodleLZ_Compressor_CanDecodeInPlace.html')" class="paragraph">OodleLZ_Compressor_CanDecodeInPlace</a></td></tr><tr><td><span class='arrowright'></span>&nbsp;<a href="javascript:show('OodleLZ_Compressor_CanDecodeFuzzSafe.html')" class="paragraph">OodleLZ_Compressor_CanDecodeFuzzSafe</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<div class=prototype><div class=prototype_header>// Function prototype:</div><pre>OO_BOOL <span class=prototype_type><a href="javascript:show('OodleLZ_Compressor_MustDecodeWithoutResets.html')" class="blue">OodleLZ_Compressor_MustDecodeWithoutResets</a></span>( <span class=prototype_type><a href="javascript:show('OodleLZ_Compressor.html')" class="blue">OodleLZ_Compressor</a></span> compressor );</pre></div><div class=discussion_heading>Discussion</div>OodleLZ_Compressor properties helper.<div class=discussion_heading>Discussion</div>Tells you if this compressor must decode contiguous ranges of buffer with the same Decoder.
</p>
<p> That is, most of the compressors can be Reset and restart on any block, not just seek blocks,
as long as the correct window data is provided. That is, if this returns false then the only
state required across a non-reset block is the dictionary of previously decoded data.
</p>
<p> But if OodleLZ_Compressor_MustDecodeWithoutResets returns true, then you cannot do that,
because the Decoder object must carry state across blocks (except reset blocks).
</p>
<p> This does not apply to seek points - you can always reset and restart decompression at a seek point.
<br>&nbsp;<br> <table class=bar> <tr>
<td width=33% align=left><span class='arrowleft'></span><a href="javascript:show('OodleLZ_Compressor_CanDecodeInPlace.html')" class="paragraph">OodleLZ_Compressor_CanDecodeInPlace</a></td><td width=33% align=center><span class='arrowup'></span><a href="javascript:show('OodleAPI_LZ_Compressors.html')" class="paragraph">OodleAPI_LZ_Compressors</a></td><td width=33% align=right><span class='arrowright'></span><a href="javascript:show('OodleLZ_Compressor_CanDecodeFuzzSafe.html')" class="paragraph">OodleLZ_Compressor_CanDecodeFuzzSafe</a></td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="OodleNetwork1UDP_State.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>OodleNetwork1UDP_State</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "OodleNetwork1UDP_State.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="OodleNetwork1UDP_State.html_backmenu">
<table class=dropmenu>
<tr><td><span class='arrowleft'></span>&nbsp;<a href="javascript:show('OodleNetwork1TCP_State.html')" class="paragraph">OodleNetwork1TCP_State</a></td></tr><tr><td><span class='arrowright'></span>&nbsp;<a href="javascript:show('OodleNetwork1UDP_StateCompacted.html')" class="paragraph">OodleNetwork1UDP_StateCompacted</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<div class=prototype><div class=prototype_header>// Structure definition:</div><pre><span class=prototype_type>struct</span> <a href="javascript:show('OodleNetwork1UDP_State.html')">OodleNetwork1UDP_State</a>;
</pre></div><div class=discussion_heading>Discussion</div> Opaque type for an <a href="javascript:show('OodleNetwork1UDP_State.html')" class="paragraph">OodleNetwork1UDP_State</a><div class=discussion_heading>Discussion</div> OodleNetwork1UDP uses a <a href="javascript:show('OodleNetwork1_Shared.html')" class="paragraph">OodleNetwork1_Shared</a> just like the non-UDP OodleNetwork1
<br>&nbsp;<br> <table class=bar> <tr>
<td width=33% align=left><span class='arrowleft'></span><a href="javascript:show('OodleNetwork1TCP_State.html')" class="paragraph">OodleNetwork1TCP_State</a></td><td width=33% align=center><span class='arrowup'></span><a href="javascript:show('OodleAPI_OodleNetwork1.html')" class="paragraph">OodleAPI_OodleNetwork1</a></td><td width=33% align=right><span class='arrowright'></span><a href="javascript:show('OodleNetwork1UDP_StateCompacted.html')" class="paragraph">OodleNetwork1UDP_StateCompacted</a></td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="OodleX_WaitAndDestroyThread.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>OodleX_WaitAndDestroyThread</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "OodleX_WaitAndDestroyThread.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="OodleX_WaitAndDestroyThread.html_backmenu">
<table class=dropmenu>
<tr><td><span class='arrowleft'></span>&nbsp;<a href="javascript:show('OodleX_CreateThread.html')" class="paragraph">OodleX_CreateThread</a></td></tr><tr><td><span class='arrowright'></span>&nbsp;<a href="javascript:show('OodleX_ReleaseThreadTLS.html')" class="paragraph">OodleX_ReleaseThreadTLS</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<div class=prototype><div class=prototype_header>// Function prototype:</div><pre>void <span class=prototype_type><a href="javascript:show('OodleX_WaitAndDestroyThread.html')" class="blue">OodleX_WaitAndDestroyThread</a></span>( OodleX_Thread t );</pre></div><div class=discussion_heading>Discussion</div>Wait on thread being complete and free all resources<div class=discussion_heading>Discussion</div>NOTE : it is not intended that you use these in production. They are for use in the Oodle
examples. Replace with your own thread functions for shipping.
<br>&nbsp;<br> <table class=bar> <tr>
<td width=33% align=left><span class='arrowleft'></span><a href="javascript:show('OodleX_CreateThread.html')" class="paragraph">OodleX_CreateThread</a></td><td width=33% align=center><span class='arrowup'></span><a href="javascript:show('OodleXAPI_Threading.html')" class="paragraph">OodleX threading util</a></td><td width=33% align=right><span class='arrowright'></span><a href="javascript:show('OodleX_ReleaseThreadTLS.html')" class="paragraph">OodleX_ReleaseThreadTLS</a></td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="OodleLZ_Decode_ThreadPhase.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>OodleLZ_Decode_ThreadPhase</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "OodleLZ_Decode_ThreadPhase.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="OodleLZ_Decode_ThreadPhase.html_backmenu">
<table class=dropmenu>
<tr><td><span class='arrowleft'></span>&nbsp;<a href="javascript:show('OodleLZ_Jobify.html')" class="paragraph">OodleLZ_Jobify</a></td></tr><tr><td><span class='arrowright'></span>&nbsp;<a href="javascript:show('OodleLZ_FuzzSafe.html')" class="paragraph">OodleLZ_FuzzSafe</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<div class=prototype><div class=prototype_header>// Enumerant:</div><pre><span class=prototype_type>enum</span> <a href="javascript:show('OodleLZ_Decode_ThreadPhase.html')">OodleLZ_Decode_ThreadPhase</a>
{
&nbsp;&nbsp;&nbsp;&nbsp;OodleLZ_Decode_ThreadPhase1 = 1,
&nbsp;&nbsp;&nbsp;&nbsp;OodleLZ_Decode_ThreadPhase2 = 2,
&nbsp;&nbsp;&nbsp;&nbsp;OodleLZ_Decode_ThreadPhaseAll = 3,
&nbsp;&nbsp;&nbsp;&nbsp;OodleLZ_Decode_Unthreaded = OodleLZ_Decode_ThreadPhaseAll
};
</pre></div><div class=discussion_heading>Discussion</div> ThreadPhase for threaded Oodle decode<div class=discussion_heading>Discussion</div> Check <a href="javascript:show('OodleLZ_Compressor_CanDecodeThreadPhased.html')" class="paragraph">OodleLZ_Compressor_CanDecodeThreadPhased</a>
(currently only used by Kraken)
</p>
<p> See <a href="javascript:show('OodleLZ_About_ThreadPhasedDecode.html')" class="paragraph">About OodleLZ ThreadPhased Decode</a>
</p>
<p><br>&nbsp;<br> <table class=bar> <tr>
<td width=33% align=left><span class='arrowleft'></span><a href="javascript:show('OodleLZ_Jobify.html')" class="paragraph">OodleLZ_Jobify</a></td><td width=33% align=center><span class='arrowup'></span><a href="javascript:show('OodleAPI_LZ_Compressors.html')" class="paragraph">OodleAPI_LZ_Compressors</a></td><td width=33% align=right><span class='arrowright'></span><a href="javascript:show('OodleLZ_FuzzSafe.html')" class="paragraph">OodleLZ_FuzzSafe</a></td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="OodleNetwork1_Shared_SetWindow.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>OodleNetwork1_Shared_SetWindow</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "OodleNetwork1_Shared_SetWindow.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="OodleNetwork1_Shared_SetWindow.html_backmenu">
<table class=dropmenu>
<tr><td><span class='arrowleft'></span>&nbsp;<a href="javascript:show('OodleNetwork1_CompressedBufferSizeNeeded.html')" class="paragraph">OodleNetwork1_CompressedBufferSizeNeeded</a></td></tr><tr><td><span class='arrowright'></span>&nbsp;<a href="javascript:show('OodleNetwork1TCP_State_Reset.html')" class="paragraph">OodleNetwork1TCP_State_Reset</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<div class=prototype><div class=prototype_header>// Function prototype:</div><pre>void <span class=prototype_type><a href="javascript:show('OodleNetwork1_Shared_SetWindow.html')" class="blue">OodleNetwork1_Shared_SetWindow</a></span>( <span class=prototype_type><a href="javascript:show('OodleNetwork1_Shared.html')" class="blue">OodleNetwork1_Shared</a></span> * data,
OO_S32 htbits,
const void * window,
OO_S32 window_size );</pre></div><div class=discussion_heading>Discussion</div>Fill a OodleNetwork1_Shared from provided data<div class=discussion_heading>Parameters</div> <table> <tr> <td style='vertical-align: top;' class=paramname><a id="OodleNetwork1_Shared_SetWindow.html_data" class=nohover>data</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> <a href="javascript:show('OodleNetwork1_Shared.html')" class="paragraph">OodleNetwork1_Shared</a> object to fill
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleNetwork1_Shared_SetWindow.html_htbits" class=nohover>htbits</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> size of the OodleNetwork1 hash table (log2) ; typically 18-21 such as <a href="javascript:show('OODLENETWORK1_HASH_BITS_DEFAULT.html')" class="paragraph">OODLENETWORK1_HASH_BITS_DEFAULT</a>
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleNetwork1_Shared_SetWindow.html_window" class=nohover>window</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> bytes of static dictionary data to use for compression
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleNetwork1_Shared_SetWindow.html_window_size" class=nohover>window_size</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> size of window ; should be &lt;= <a href="javascript:show('OODLENETWORK1_MAX_DICTIONARY_SIZE.html')" class="paragraph">OODLENETWORK1_MAX_DICTIONARY_SIZE</a>
</td></tr></table><div class=discussion_heading>Discussion</div></p>
<p> This must be done on both the client and server to fill the <a href="javascript:show('OodleNetwork1_Shared.html')" class="paragraph">OodleNetwork1_Shared</a> object used for compression.
</p>
<p> <i>window</i> should be some typical transmitted data. The better you can make it represent the common data seen, the better compression will be. The most common types of packets should be placed at the end of the window.
</p>
<p> You must load <i>window</i> from disk somehow, or it could be data that you already have in memory for some other purpose - any data which both the client and server have exactly the same copy of can be used as the compression dictionary. To save and load the window from disk you should generally use one of the standard <a href="javascript:show('OodleLZ_About.html')" class="paragraph">About OodleLZ</a> compressors.
</p>
<p> NOTE : window is not copied ; do not free it! <a href="javascript:show('OodleNetwork1_Shared.html')" class="paragraph">OodleNetwork1_Shared</a> keeps pointers into window, it must be kept allocated while this <a href="javascript:show('OodleNetwork1_Shared.html')" class="paragraph">OodleNetwork1_Shared</a> is in use.
</p>
<p> You may call SetWindow multiple times on the same Shared data for purposes of training.
</p>
<p><br>&nbsp;<br> <table class=bar> <tr>
<td width=33% align=left><span class='arrowleft'></span><a href="javascript:show('OodleNetwork1_CompressedBufferSizeNeeded.html')" class="paragraph">OodleNetwork1_CompressedBufferSizeNeeded</a></td><td width=33% align=center><span class='arrowup'></span><a href="javascript:show('OodleAPI_OodleNetwork1.html')" class="paragraph">OodleAPI_OodleNetwork1</a></td><td width=33% align=right><span class='arrowright'></span><a href="javascript:show('OodleNetwork1TCP_State_Reset.html')" class="paragraph">OodleNetwork1TCP_State_Reset</a></td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="OodleLZ_Compressor_CanDecodeFuzzSafe.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>OodleLZ_Compressor_CanDecodeFuzzSafe</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "OodleLZ_Compressor_CanDecodeFuzzSafe.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="OodleLZ_Compressor_CanDecodeFuzzSafe.html_backmenu">
<table class=dropmenu>
<tr><td><span class='arrowleft'></span>&nbsp;<a href="javascript:show('OodleLZ_Compressor_MustDecodeWithoutResets.html')" class="paragraph">OodleLZ_Compressor_MustDecodeWithoutResets</a></td></tr><tr><td><span class='arrowright'></span>&nbsp;<a href="javascript:show('OodleLZ_Compressor_RespectsDictionarySize.html')" class="paragraph">OodleLZ_Compressor_RespectsDictionarySize</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<div class=prototype><div class=prototype_header>// Function prototype:</div><pre>OO_BOOL <span class=prototype_type><a href="javascript:show('OodleLZ_Compressor_CanDecodeFuzzSafe.html')" class="blue">OodleLZ_Compressor_CanDecodeFuzzSafe</a></span>( <span class=prototype_type><a href="javascript:show('OodleLZ_Compressor.html')" class="blue">OodleLZ_Compressor</a></span> compressor );</pre></div><div class=discussion_heading>Discussion</div>OodleLZ_Compressor properties helper.<div class=discussion_heading>Discussion</div>Tells you if this compressor is "fuzz safe" which means it can accept corrupted data
and won't crash or overrun any buffers.
<br>&nbsp;<br> <table class=bar> <tr>
<td width=33% align=left><span class='arrowleft'></span><a href="javascript:show('OodleLZ_Compressor_MustDecodeWithoutResets.html')" class="paragraph">OodleLZ_Compressor_MustDecodeWithoutResets</a></td><td width=33% align=center><span class='arrowup'></span><a href="javascript:show('OodleAPI_LZ_Compressors.html')" class="paragraph">OodleAPI_LZ_Compressors</a></td><td width=33% align=right><span class='arrowright'></span><a href="javascript:show('OodleLZ_Compressor_RespectsDictionarySize.html')" class="paragraph">OodleLZ_Compressor_RespectsDictionarySize</a></td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="Oodle_About_Android.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>About Oodle on Android</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "Oodle_About_Android.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="Oodle_About_Android.html_backmenu">
<table class=dropmenu>
<tr><td><span class='arrowleft'></span>&nbsp;<a href="javascript:show('Oodle_About_IOS.html')" class="paragraph">About Oodle on IOS</a></td></tr><tr><td><span class='arrowup'></span>&nbsp;<a href="javascript:show('Oodle_About_Platforms.html')" class="paragraph">About Oodle on Platforms</a></td></tr><tr><td><span class='arrowright'></span>&nbsp;<a href="javascript:show('Oodle_About_WASM.html')" class="paragraph">About Oodle on WASM</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<P>
Oodle on Android is currently provided as only the Oodle Core lib (no OodleX).
</p>
<p>This includes the synchronous LZ compressors, as well as Oodle Network compression.
</p>
<p>See <a href="javascript:show('start_CoreVsExt.html')" class="paragraph">Oodle2 Core vs Oodle2 Ext</a>
</p>
<p><hr>
</p>
<p>Oodle on mobile does not include the Optimal level encoders. When <a href="javascript:show('OodleLZ_CompressionLevel.html','OodleLZ_CompressionLevel.html_OodleLZ_CompressionLevel_Optimal1')" class="paragraph">OodleLZ_CompressionLevel_Optimal1</a> or higher
is requested, OodleLZ_CompressionLevel_Normal is used instead.<br>&nbsp;<br> <table class=bar> <tr>
<td width=33% align=left><span class='arrowleft'></span><a href="javascript:show('Oodle_About_IOS.html')" class="paragraph">About Oodle on IOS</a></td><td width=33% align=center><span class='arrowup'></span><a href="javascript:show('Oodle_About_Platforms.html')" class="paragraph">About Oodle on Platforms</a></td><td width=33% align=right><span class='arrowright'></span><a href="javascript:show('Oodle_About_WASM.html')" class="paragraph">About Oodle on WASM</a></td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="Oodle_About.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>About Oodle</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "Oodle_About.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="Oodle_About.html_backmenu">
<table class=dropmenu>
<tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<P>
<h1> About Oodle</h1>
</p>
<p>Oodle is a family of solutions for efficient data compression.
</p>
<p>Oodle consists of :
</p>
<p>Oodle Data : generic lossless data compression (Kraken, Leviathan, Mermaid, and Selkie)
</p>
<p>Oodle Network : packet compression to reduce bandwidth (see <a href="javascript:show('OodleNetwork_About.html')" class="paragraph">About Oodle Network Compression</a> or <a href="javascript:show('start_OodleNetwork.html')" class="paragraph">Getting Started with Oodle Network</a>).
</p>
<p>Oodle Texture : encoding for BCN block-compressed GPU textures that dramatically reduces their size.
</p>
<p>Oodle Lossless Image : specialized encoder for lossless RGB image encoding. Faster and smaller than PNG.
</p>
<p>Oodle Data and Network are both described in this help, but are distributed as separate SDKs.
Oodle Texture and Oodle Lossless Image are distributed separately.
</p>
<p>Oodle Data SDK comes as two libraries - Core and Ext. Core provides synchronous memory->memory compressors
that require no initialization and are very portable. Ext provides helpers for async compression and
file IO. Most games should use Oodle2 Core in their runtime and Oodle2 Ext in their tool chain.
(see <a href="javascript:show('start_CoreVsExt.html')" class="paragraph">Oodle2 Core vs Oodle2 Ext</a>)
</p>
<p>Oodle Data compresses packages for distribution with state of the art lossless (LZ) data compression.
Oodle provides many different levels of CPU use to compression ratio tradeoffs.
Oodle lets you use the same data compression and packaging formats on all platforms.
(see <a href="javascript:show('OodleLZ_About.html')" class="paragraph">About OodleLZ</a> or <a href="javascript:show('start_OodleData.html')" class="paragraph">Getting Started with Oodle LZ Data Compression</a>)
</p>
<p><h3> Further Reading</h3>
</p>
<p>See also :
</p>
<p><a href="javascript:show('Oodle_FAQ.html')" class="paragraph">Frequently Asked Questions</a>
</p>
<p><a href="javascript:show('Oodle_About_Index.html')" class="paragraph">Index of Abouts</a>
</p>
<p><a href="javascript:show('start_newLeviathan.html')" class="paragraph">Introducing the new Oodle Leviathan</a>
</p>
<p><a href="javascript:show('start_OodleNetwork.html')" class="paragraph">Getting Started with Oodle Network</a>
</p>
<p><a href="javascript:show('start_OodleData.html')" class="paragraph">Getting Started with Oodle LZ Data Compression</a>
</p>
<p><a href="javascript:show('start_CoreVsExt.html')" class="paragraph">Oodle2 Core vs Oodle2 Ext</a>
</p>
<p><a href="javascript:show('start_NetworkSplit.html')" class="paragraph">Oodle Network and Data SDK separation</a>
</p>
<p><p><ul class='TOCItem'>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('Oodle_About_Index.html')">Index of Abouts</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('Oodle_About_ozip.html')">About Oodle ozip</a></li>
<li><span onClick="HandleClick(event, null); return false" class='TOCGroup closedbook_icon'></span>&nbsp;<a href="javascript:show('Oodle_About_Platforms.html')">About Oodle on Platforms</a></li>
<ul style="display:none" class='TOCItem'>
<li><span onClick="HandleClick(event, null); return false" class='TOCGroup closedbook_icon'></span>&nbsp;<a href="javascript:show('Oodle_About_Windows.html')">About Oodle on Windows</a></li>
<ul style="display:none" class='TOCItem'>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('Oodle_About_Windows_UWP.html')">About Oodle on Windows UWP</a></li>
</ul>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('Oodle_About_PS4.html')">About Oodle on PS4</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('Oodle_About_Switch.html')">About Oodle on Nintendo Switch</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('Oodle_About_Mac.html')">About Oodle on Mac</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('Oodle_About_XboxOne.html')">About Oodle on Xbox One</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('Oodle_About_Linux.html')">About Oodle on Linux</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('Oodle_About_IOS.html')">About Oodle on IOS</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('Oodle_About_Android.html')">About Oodle on Android</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('Oodle_About_WASM.html')">About Oodle on WASM</a></li>
</ul>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('Oodle_About_Job_Threading_Plugins.html')">About Oodle Job Threading Plugins</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('Oodle_About_Compression_Scratch_Mem.html')">About Compression Scratch Memory</a></li>
</ul>
<br>&nbsp;<br> <table class=bar> <tr>
<td width=33%>&nbsp;</td><td width=33%>&nbsp;</td><td width=33% align=right><span class='arrowright'></span><a href="javascript:show('Oodle_About_Index.html')" class="paragraph">Index of Abouts</a></td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="OodleX_GetOSFileOps.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>OodleX_GetOSFileOps</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "OodleX_GetOSFileOps.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="OodleX_GetOSFileOps.html_backmenu">
<table class=dropmenu>
<tr><td><span class='arrowleft'></span>&nbsp;<a href="javascript:show('OodleXIOQ_NameIsDir_AsyncAndWait.html')" class="paragraph">OodleXIOQ_NameIsDir_AsyncAndWait</a></td></tr><tr><td><span class='arrowright'></span>&nbsp;<a href="javascript:show('OodleX_GetDefaultFileOps.html')" class="paragraph">OodleX_GetDefaultFileOps</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<div class=prototype><div class=prototype_header>// Function prototype:</div><pre>const <span class=prototype_type><a href="javascript:show('OodleXFileOpsVTable.html')" class="blue">OodleXFileOpsVTable</a></span> * <span class=prototype_type><a href="javascript:show('OodleX_GetOSFileOps.html')" class="blue">OodleX_GetOSFileOps</a></span>( );</pre></div><div class=discussion_heading>Discussion</div>Return a const <a href="javascript:show('OodleXFileOpsVTable.html')" class="paragraph">OodleXFileOpsVTable</a> with the base OS implementations<div class=discussion_heading>Discussion</div>Contains the base file ops functions for the current OS.
</p>
<p> Do not change this struct!
<br>&nbsp;<br> <table class=bar> <tr>
<td width=33% align=left><span class='arrowleft'></span><a href="javascript:show('OodleXIOQ_NameIsDir_AsyncAndWait.html')" class="paragraph">OodleXIOQ_NameIsDir_AsyncAndWait</a></td><td width=33% align=center><span class='arrowup'></span><a href="javascript:show('OodleXAPI_IOQ.html')" class="paragraph">OodleX low level async io</a></td><td width=33% align=right><span class='arrowright'></span><a href="javascript:show('OodleX_GetDefaultFileOps.html')" class="paragraph">OodleX_GetDefaultFileOps</a></td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="OodleXIOQ_SetInfoByName_Async.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>OodleXIOQ_SetInfoByName_Async</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "OodleXIOQ_SetInfoByName_Async.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="OodleXIOQ_SetInfoByName_Async.html_backmenu">
<table class=dropmenu>
<tr><td><span class='arrowleft'></span>&nbsp;<a href="javascript:show('OodleXIOQ_GetInfoByName_GetResult.html')" class="paragraph">OodleXIOQ_GetInfoByName_GetResult</a></td></tr><tr><td><span class='arrowright'></span>&nbsp;<a href="javascript:show('OodleXIOQ_ReadMallocWholeFile_Async.html')" class="paragraph">OodleXIOQ_ReadMallocWholeFile_Async</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<div class=prototype><div class=prototype_header>// Function prototype:</div><pre><span class=prototype_type><a href="javascript:show('OodleXHandle.html')" class="blue">OodleXHandle</a></span> <span class=prototype_type><a href="javascript:show('OodleXIOQ_SetInfoByName_Async.html')" class="blue">OodleXIOQ_SetInfoByName_Async</a></span>( const char * name,
OO_U32 flags,
OO_U64 modTime,
<span class=prototype_type><a href="javascript:show('OodleXHandleAutoDelete.html')" class="blue">OodleXHandleAutoDelete</a></span> autoDelete OODEFAULT( OodleXHandleAutoDelete_No ),
<span class=prototype_type><a href="javascript:show('OodleXPriority.html')" class="blue">OodleXPriority</a></span> priority OODEFAULT( OodleXPriority_Normal ),
const <span class=prototype_type><a href="javascript:show('OodleXHandle.html')" class="blue">OodleXHandle</a></span> * dependencies OODEFAULT( NULL ),
OO_S32 numDependencies OODEFAULT( 0 ) );</pre></div><div class=discussion_heading>Discussion</div>Start an asynchronous SetInfo request<div class=discussion_heading>Parameters</div> <table> <tr> <td style='vertical-align: top;' class=paramname><a id="OodleXIOQ_SetInfoByName_Async.html_name" class=nohover>name</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> the file name to query (VFS,UTF-8)
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXIOQ_SetInfoByName_Async.html_flags" class=nohover>flags</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> file flags (logical OR of <a href="javascript:show('OODLEX_FILEINFO_FLAGS.html')" class="paragraph">OODLEX_FILEINFO_FLAGS</a>) , or <a href="javascript:show('OODLEX_FILEINFO_FLAG_INVALID.html')" class="paragraph">OODLEX_FILEINFO_FLAG_INVALID</a> to leave unchanged
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXIOQ_SetInfoByName_Async.html_modTime" class=nohover>modTime</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> mod time to change, or %OODLEX_FILEINFO_MODTIME_INVALID to leave uncahnged
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXIOQ_SetInfoByName_Async.html_autoDelete" class=nohover>autoDelete</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> (optional) see <a href="javascript:show('OodleXHandleAutoDelete.html')" class="paragraph">OodleXHandleAutoDelete</a>
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXIOQ_SetInfoByName_Async.html_priority" class=nohover>priority</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> (optional) priority of the operation ; see <a href="javascript:show('OodleXPriority.html')" class="paragraph">OodleXPriority</a>
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXIOQ_SetInfoByName_Async.html_dependencies" class=nohover>dependencies</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> (optional) dependencies; the async op won't start until these are all complete; note : these are not freed, they must be autodelete or you must free them some other way.
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXIOQ_SetInfoByName_Async.html_numDependencies" class=nohover>numDependencies</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> (optional) number of handles in <i>deps</i> array
</td></tr></table><div class=discussion_heading>Return Value</div> <table> <tr> <td style='vertical-align: top;' class=paramname><a id="OodleXIOQ_SetInfoByName_Async.html_return" class=nohover>return</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> handle to the operation, or 0 if it could not be started (usually due to invalid args)
</td></tr></table><div class=discussion_heading>Discussion</div></p>
<p> Used to set flags or modtime on a file.
Flags and modTime correspond to <a href="javascript:show('OodleXFileInfo.html','OodleXFileInfo.html_flags')" class="paragraph">OodleXFileInfo:flags</a> and <a href="javascript:show('OodleXFileInfo.html','OodleXFileInfo.html_modTime')" class="paragraph">OodleXFileInfo:modTime</a>.
</p>
<p> All members of <a href="javascript:show('OodleXFileInfo.html')" class="paragraph">OodleXFileInfo</a> can be set this way, except size; to set size use <a href="javascript:show('OodleXIOQ_SetFileSize_Async.html')" class="paragraph">OodleXIOQ_SetFileSize_Async</a>.
<br>&nbsp;<br> <table class=bar> <tr>
<td width=33% align=left><span class='arrowleft'></span><a href="javascript:show('OodleXIOQ_GetInfoByName_GetResult.html')" class="paragraph">OodleXIOQ_GetInfoByName_GetResult</a></td><td width=33% align=center><span class='arrowup'></span><a href="javascript:show('OodleXAPI_IOQ.html')" class="paragraph">OodleX low level async io</a></td><td width=33% align=right><span class='arrowright'></span><a href="javascript:show('OodleXIOQ_ReadMallocWholeFile_Async.html')" class="paragraph">OodleXIOQ_ReadMallocWholeFile_Async</a></td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="t_OodleFPVoidVoid.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>t_OodleFPVoidVoid</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "t_OodleFPVoidVoid.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="t_OodleFPVoidVoid.html_backmenu">
<table class=dropmenu>
<tr><td><span class='arrowright'></span>&nbsp;<a href="javascript:show('t_OodleFPVoidVoidStar.html')" class="paragraph">t_OodleFPVoidVoidStar</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<div class=prototype><div class=prototype_header>// Function typedef:</div><pre>void( OODLE_CALLBACK <span class=prototype_type><a href="javascript:show('t_OodleFPVoidVoid.html')" class="blue">t_OodleFPVoidVoid</a></span> )( void );</pre></div><div class=discussion_heading>Discussion</div>void-void callback func pointer
takes void, returns void
<br>&nbsp;<br> <table class=bar> <tr>
<td width=33% align=left><span class='arrowleft'></span><a href="javascript:show('Oodle_LogHeader.html')" class="paragraph">Oodle_LogHeader</a></td><td width=33% align=center><span class='arrowup'></span><a href="javascript:show('OodleAPI_Base.html')" class="paragraph">Core Base</a></td><td width=33% align=right><span class='arrowright'></span><a href="javascript:show('t_OodleFPVoidVoidStar.html')" class="paragraph">t_OodleFPVoidVoidStar</a></td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="OodleLZ_CheckCRC.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>OodleLZ_CheckCRC</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "OodleLZ_CheckCRC.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="OodleLZ_CheckCRC.html_backmenu">
<table class=dropmenu>
<tr><td><span class='arrowleft'></span>&nbsp;<a href="javascript:show('OodleLZ_PackedRawOverlap.html')" class="paragraph">OodleLZ_PackedRawOverlap</a></td></tr><tr><td><span class='arrowright'></span>&nbsp;<a href="javascript:show('OodleLZ_Profile.html')" class="paragraph">OodleLZ_Profile</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<div class=prototype><div class=prototype_header>// Enumerant:</div><pre><span class=prototype_type>enum</span> <a href="javascript:show('OodleLZ_CheckCRC.html')">OodleLZ_CheckCRC</a>
{
&nbsp;&nbsp;&nbsp;&nbsp;OodleLZ_CheckCRC_No = 0,
&nbsp;&nbsp;&nbsp;&nbsp;OodleLZ_CheckCRC_Yes = 1,
&nbsp;&nbsp;&nbsp;&nbsp;OodleLZ_CheckCRC_Force32 = 0x40000000
};
</pre></div><div class=discussion_heading>Discussion</div> Bool enum for the LZ decoder - should it check CRC before decoding or not?<div class=discussion_heading>Discussion</div> NOTE : the CRC's in the LZH decompress checks are the CRC's of the <b>compressed</b> bytes. This allows checking the CRc
prior to decompression, so corrupted data cannot be fed to the compressor.
</p>
<p> To use OodleLZ_CheckCRC_Yes, the compressed data must have been made with <a href="javascript:show('OodleLZ_CompressOptions.html','OodleLZ_CompressOptions.html_sendQuantumCRCs')" class="paragraph">OodleLZ_CompressOptions:sendQuantumCRCs</a> set to true.
</p>
<p> If you want a CRC of the raw bytes, there is one optionally stored in the <a href="javascript:show('OodleLZ_SeekTable.html')" class="paragraph">OodleLZ_SeekTable</a> and can be confirmed with
<a href="javascript:show('OodleLZ_CheckSeekTableCRCs.html')" class="paragraph">OodleLZ_CheckSeekTableCRCs</a>
<br>&nbsp;<br> <table class=bar> <tr>
<td width=33% align=left><span class='arrowleft'></span><a href="javascript:show('OodleLZ_PackedRawOverlap.html')" class="paragraph">OodleLZ_PackedRawOverlap</a></td><td width=33% align=center><span class='arrowup'></span><a href="javascript:show('OodleAPI_LZ_Compressors.html')" class="paragraph">OodleAPI_LZ_Compressors</a></td><td width=33% align=right><span class='arrowright'></span><a href="javascript:show('OodleLZ_Profile.html')" class="paragraph">OodleLZ_Profile</a></td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="OodleXFileOpenFlags.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>OodleXFileOpenFlags</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "OodleXFileOpenFlags.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="OodleXFileOpenFlags.html_backmenu">
<table class=dropmenu>
<tr><td><span class='arrowleft'></span>&nbsp;<a href="javascript:show('OodleXFileMode.html')" class="paragraph">OodleXFileMode</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<div class=prototype><div class=prototype_header>// Enumerant:</div><pre><span class=prototype_type>enum</span> <a href="javascript:show('OodleXFileOpenFlags.html')">OodleXFileOpenFlags</a>
{
&nbsp;&nbsp;&nbsp;&nbsp;OodleXFileOpenFlags_Default = 0,
&nbsp;&nbsp;&nbsp;&nbsp;OodleXFileOpenFlags_Buffered = 1,
&nbsp;&nbsp;&nbsp;&nbsp;OodleXFileOpenFlags_NotBuffered = 2,
&nbsp;&nbsp;&nbsp;&nbsp;OodleXFileOpenFlags_WriteCreateDontStomp = 4,
&nbsp;&nbsp;&nbsp;&nbsp;OodleXFileOpenFlags_Force32 = 0x40000000
};
</pre></div><div class=discussion_heading>Discussion</div> OodleXFileOpenFlags specify options when opening files<div class=discussion_heading>Enumerants</div> <table> <tr> <td style='vertical-align: top;' class=paramname><a id="OodleXFileOpenFlags.html_OodleXFileOpenFlags_Default" class=nohover>OodleXFileOpenFlags_Default</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> use Oodle's default for this platform</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXFileOpenFlags.html_OodleXFileOpenFlags_Buffered" class=nohover>OodleXFileOpenFlags_Buffered</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> use an OS-buffered file</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXFileOpenFlags.html_OodleXFileOpenFlags_NotBuffered" class=nohover>OodleXFileOpenFlags_NotBuffered</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> use a non-OS-buffered file, when possible</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXFileOpenFlags.html_OodleXFileOpenFlags_WriteCreateDontStomp" class=nohover>OodleXFileOpenFlags_WriteCreateDontStomp</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> Open for WriteCreate by default stomps existing; this prevents it</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXFileOpenFlags.html_OodleXFileOpenFlags_Force32" class=nohover>OodleXFileOpenFlags_Force32</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc></td></tr></table><div class=discussion_heading>Discussion</div> OodleXFileOpenFlags_Default lets Oodle select buffered or unbuffered based on the system and global
settings.
</p>
<p> OodleXFileOpenFlags_Buffered files are guaranteed to work with unaligned IO.
</p>
<p> OodleXFileOpenFlags_Default and OodleXFileOpenFlags_NotBuffered files require aligned IO on some platforms.
</p>
<p> Flags may be combined with logical OR
<br>&nbsp;<br> <table class=bar> <tr>
<td width=33% align=left><span class='arrowleft'></span><a href="javascript:show('OodleXFileMode.html')" class="paragraph">OodleXFileMode</a></td><td width=33% align=center><span class='arrowup'></span><a href="javascript:show('OodleXAPI_IOQ.html')" class="paragraph">OodleX low level async io</a></td><td width=33% align=right><span class='arrowright'></span><a href="javascript:show('OodleXFileOpsVTable.html')" class="paragraph">OodleXFileOpsVTable</a></td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="OodleXLZ_Compress_AsyncAndWait.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>OodleXLZ_Compress_AsyncAndWait</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "OodleXLZ_Compress_AsyncAndWait.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="OodleXLZ_Compress_AsyncAndWait.html_backmenu">
<table class=dropmenu>
<tr><td><span class='arrowleft'></span>&nbsp;<a href="javascript:show('OodleXLZ_Compress_Wait_GetResult.html')" class="paragraph">OodleXLZ_Compress_Wait_GetResult</a></td></tr><tr><td><span class='arrowright'></span>&nbsp;<a href="javascript:show('OodleXLZ_ReadAndDecompress_Stream_Async.html')" class="paragraph">OodleXLZ_ReadAndDecompress_Stream_Async</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<div class=prototype><div class=prototype_header>// Function prototype:</div><pre>OO_SINTa <span class=prototype_type><a href="javascript:show('OodleXLZ_Compress_AsyncAndWait.html')" class="blue">OodleXLZ_Compress_AsyncAndWait</a></span>( OO_U32 asyncSelect,
<span class=prototype_type><a href="javascript:show('OodleLZ_Compressor.html')" class="blue">OodleLZ_Compressor</a></span> compressor,
const void * rawBuf,
OO_SINTa rawLen,
void * compBuf,
<span class=prototype_type><a href="javascript:show('OodleLZ_CompressionLevel.html')" class="blue">OodleLZ_CompressionLevel</a></span> compressSelect,
const <span class=prototype_type><a href="javascript:show('OodleLZ_CompressOptions.html')" class="blue">OodleLZ_CompressOptions</a></span> * pOptions OODEFAULT( NULL ),
const void * dictionaryBase OODEFAULT( NULL ) );</pre></div><div class=discussion_heading>Discussion</div>Does <a href="javascript:show('OodleXLZ_Compress_Async.html')" class="paragraph">OodleXLZ_Compress_Async</a> and <a href="javascript:show('OodleXLZ_Compress_Wait_GetResult.html')" class="paragraph">OodleXLZ_Compress_Wait_GetResult</a><br>&nbsp;<br> <table class=bar> <tr>
<td width=33% align=left><span class='arrowleft'></span><a href="javascript:show('OodleXLZ_Compress_Wait_GetResult.html')" class="paragraph">OodleXLZ_Compress_Wait_GetResult</a></td><td width=33% align=center><span class='arrowup'></span><a href="javascript:show('OodleXAPI_LZ_Async.html')" class="paragraph">OodleXAPI_LZ_Async</a></td><td width=33% align=right><span class='arrowright'></span><a href="javascript:show('OodleXLZ_ReadAndDecompress_Stream_Async.html')" class="paragraph">OodleXLZ_ReadAndDecompress_Stream_Async</a></td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="OodleXLZ_Decompress_MakeSeekTable_Wide_Async.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>OodleXLZ_Decompress_MakeSeekTable_Wide_Async</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "OodleXLZ_Decompress_MakeSeekTable_Wide_Async.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="OodleXLZ_Decompress_MakeSeekTable_Wide_Async.html_backmenu">
<table class=dropmenu>
<tr><td><span class='arrowleft'></span>&nbsp;<a href="javascript:show('OodleXLZ_Decompress_Wide_Async.html')" class="paragraph">OodleXLZ_Decompress_Wide_Async</a></td></tr><tr><td><span class='arrowright'></span>&nbsp;<a href="javascript:show('OodleXLZ_Compress_Async.html')" class="paragraph">OodleXLZ_Compress_Async</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<div class=prototype><div class=prototype_header>// Function prototype:</div><pre><span class=prototype_type><a href="javascript:show('OodleXHandle.html')" class="blue">OodleXHandle</a></span> <span class=prototype_type><a href="javascript:show('OodleXLZ_Decompress_MakeSeekTable_Wide_Async.html')" class="blue">OodleXLZ_Decompress_MakeSeekTable_Wide_Async</a></span>( OO_U32 asyncSelect,
OO_S32 seekChunkLen,
const void * packedDataPtr,
OO_SINTa packedLen,
void * rawArray,
OO_SINTa rawArrayLen,
<span class=prototype_type><a href="javascript:show('OodleLZ_FuzzSafe.html')" class="blue">OodleLZ_FuzzSafe</a></span> fuzzSafe OODEFAULT( OodleLZ_FuzzSafe_No ),
<span class=prototype_type><a href="javascript:show('OodleLZ_CheckCRC.html')" class="blue">OodleLZ_CheckCRC</a></span> checkCRC OODEFAULT( OodleLZ_CheckCRC_No ),
<span class=prototype_type><a href="javascript:show('OodleLZ_Verbosity.html')" class="blue">OodleLZ_Verbosity</a></span> verbosity OODEFAULT( OodleLZ_Verbosity_None ),
void * decBufBase OODEFAULT( NULL ),
OO_SINTa decBufSize OODEFAULT( 0 ),
<span class=prototype_type><a href="javascript:show('OodleLZ_PackedRawOverlap.html')" class="blue">OodleLZ_PackedRawOverlap</a></span> packedRawOverlap OODEFAULT( OodleLZ_PackedRawOverlap_No ),
<span class=prototype_type><a href="javascript:show('OodleXIOQFile.html')" class="blue">OodleXIOQFile</a></span> writeToFile OODEFAULT( 0 ),
OO_S64 writeToFileStartPos OODEFAULT( 0 ),
<span class=prototype_type><a href="javascript:show('OodleXHandle.html')" class="blue">OodleXHandle</a></span> * pWriteHandleGroup OODEFAULT( 0 ),
<span class=prototype_type><a href="javascript:show('OodleXHandleAutoDelete.html')" class="blue">OodleXHandleAutoDelete</a></span> autoDelete OODEFAULT( OodleXHandleAutoDelete_No ),
const <span class=prototype_type><a href="javascript:show('OodleXHandle.html')" class="blue">OodleXHandle</a></span> * dependencies OODEFAULT( NULL ),
OO_S32 numDependencies OODEFAULT( 0 ) );</pre></div><div class=discussion_heading>Discussion</div>Start an async LZ decompress, possibly write raw data<div class=discussion_heading>Parameters</div> <table> <tr> <td style='vertical-align: top;' class=paramname><a id="OodleXLZ_Decompress_MakeSeekTable_Wide_Async.html_asyncSelect" class=nohover>asyncSelect</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> logical OR of <a href="javascript:show('OodleXAsyncSelect.html')" class="paragraph">OodleXAsyncSelect</a> flags determine how the async is run
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXLZ_Decompress_MakeSeekTable_Wide_Async.html_seekChunkLen" class=nohover>seekChunkLen</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> length of seekChunks used in compression <a href="javascript:show('OodleLZ_CompressOptions.html','OodleLZ_CompressOptions.html_seekChunkLen')" class="paragraph">OodleLZ_CompressOptions:seekChunkLen</a>
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXLZ_Decompress_MakeSeekTable_Wide_Async.html_packedDataPtr" class=nohover>packedDataPtr</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> pointer to LZ compressed data
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXLZ_Decompress_MakeSeekTable_Wide_Async.html_packedLen" class=nohover>packedLen</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> compressed data length
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXLZ_Decompress_MakeSeekTable_Wide_Async.html_rawArray" class=nohover>rawArray</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> pointer to memory filled with decompressed data
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXLZ_Decompress_MakeSeekTable_Wide_Async.html_rawArrayLen" class=nohover>rawArrayLen</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> length of decompressed data
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXLZ_Decompress_MakeSeekTable_Wide_Async.html_checkCRC" class=nohover>checkCRC</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> if OodleLZ_CheckCRC_Yes, the decompressor checks the crc to ensure data integrity
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXLZ_Decompress_MakeSeekTable_Wide_Async.html_verbosity" class=nohover>verbosity</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> (optional) if not OodleLZ_Verbosity_None, will log some information
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXLZ_Decompress_MakeSeekTable_Wide_Async.html_decBufBase" class=nohover>decBufBase</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> (optional) if not NULL, provides preceding data to prime the dictionary; must be contiguous with rawBuf, the data between the pointers <i>dictionaryBase</i> and <i>rawBuf</i> is used as the preconditioning data. The exact same precondition must be passed to encoder and decoder.
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXLZ_Decompress_MakeSeekTable_Wide_Async.html_decBufSize" class=nohover>decBufSize</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> (optional) size of circular buffer starting at decBufBase
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXLZ_Decompress_MakeSeekTable_Wide_Async.html_packedRawOverlap" class=nohover>packedRawOverlap</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> (optional) if OodleLZ_PackedRawOverlap_Yes, the compressed data is in the same memory array as the output raw data
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXLZ_Decompress_MakeSeekTable_Wide_Async.html_writeToFile" class=nohover>writeToFile</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> (optional) OodleXIOQFile to write raw data to
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXLZ_Decompress_MakeSeekTable_Wide_Async.html_writeToFileStartPos" class=nohover>writeToFileStartPos</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> (optional) file position where writeToFile should start (must be <a href="javascript:show('OODLEX_IO_MAX_ALIGNMENT.html')" class="paragraph">OODLEX_IO_MAX_ALIGNMENT</a> aligned)
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXLZ_Decompress_MakeSeekTable_Wide_Async.html_pWriteHandleGroup" class=nohover>pWriteHandleGroup</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> (optional) if writeToFile is given, this is filled with an OodleAsyncGroup OodleXHandle containing all the file IO operations
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXLZ_Decompress_MakeSeekTable_Wide_Async.html_autoDelete" class=nohover>autoDelete</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> (optional) see <a href="javascript:show('OodleXHandleAutoDelete.html')" class="paragraph">OodleXHandleAutoDelete</a>
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXLZ_Decompress_MakeSeekTable_Wide_Async.html_dependencies" class=nohover>dependencies</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> (optional) dependencies; the async op won't start until these are all complete; note : these are not freed, they must be autodelete or you must free them some other way.
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXLZ_Decompress_MakeSeekTable_Wide_Async.html_numDependencies" class=nohover>numDependencies</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> (optional) number of handles in <i>deps</i> array
</td></tr></table><div class=discussion_heading>Return Value</div> <table> <tr> <td style='vertical-align: top;' class=paramname><a id="OodleXLZ_Decompress_MakeSeekTable_Wide_Async.html_return" class=nohover>return</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> OodleXHandle to the operation, or OodleXHandle_Null for invalid arguments
</td></tr></table><div class=discussion_heading>Discussion</div></p>
<p> </p>
<p> Same as <a href="javascript:show('OodleXLZ_Decompress_Wide_Async.html')" class="paragraph">OodleXLZ_Decompress_Wide_Async</a> , but makes the seek table for you.
</p>
<p> Can be used as a drop-in replacement for OodleLZ_Decompress() but with parallel decoding.
</p>
<p> If the data is not parallel-decodable (because it has no seek resets, eg.
<a href="javascript:show('OodleLZ_CompressOptions.html','OodleLZ_CompressOptions.html_seekChunkReset')" class="paragraph">OodleLZ_CompressOptions:seekChunkReset</a> was not set) this is slower than just calling OodleLZ_Decompress.
So this should only be used when you believe parallel decoding is possible.
</p>
<p> <i>seekChunkLen</i> most follow the rules for Oodle seek chunk lengths. See <a href="javascript:show('OodleLZ_MakeSeekChunkLen.html')" class="paragraph">OodleLZ_MakeSeekChunkLen</a>.
It should be a power of two and greater-equal than <a href="javascript:show('OODLELZ_BLOCK_LEN.html')" class="paragraph">OODLELZ_BLOCK_LEN</a>.
<br>&nbsp;<br> <table class=bar> <tr>
<td width=33% align=left><span class='arrowleft'></span><a href="javascript:show('OodleXLZ_Decompress_Wide_Async.html')" class="paragraph">OodleXLZ_Decompress_Wide_Async</a></td><td width=33% align=center><span class='arrowup'></span><a href="javascript:show('OodleXAPI_LZ_Async.html')" class="paragraph">OodleXAPI_LZ_Async</a></td><td width=33% align=right><span class='arrowright'></span><a href="javascript:show('OodleXLZ_Compress_Async.html')" class="paragraph">OodleXLZ_Compress_Async</a></td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="OodleLZ_Compress.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>OodleLZ_Compress</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "OodleLZ_Compress.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="OodleLZ_Compress.html_backmenu">
<table class=dropmenu>
<tr><td><span class='arrowright'></span>&nbsp;<a href="javascript:show('OodleLZ_Decompress.html')" class="paragraph">OodleLZ_Decompress</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<div class=prototype><div class=prototype_header>// Function prototype:</div><pre>OO_SINTa <span class=prototype_type><a href="javascript:show('OodleLZ_Compress.html')" class="blue">OodleLZ_Compress</a></span>( <span class=prototype_type><a href="javascript:show('OodleLZ_Compressor.html')" class="blue">OodleLZ_Compressor</a></span> compressor,
const void * rawBuf,
OO_SINTa rawLen,
void * compBuf,
<span class=prototype_type><a href="javascript:show('OodleLZ_CompressionLevel.html')" class="blue">OodleLZ_CompressionLevel</a></span> level,
const <span class=prototype_type><a href="javascript:show('OodleLZ_CompressOptions.html')" class="blue">OodleLZ_CompressOptions</a></span> * pOptions OODEFAULT( NULL ),
const void * dictionaryBase OODEFAULT( NULL ),
const void * lrm OODEFAULT( NULL ),
void * scratchMem OODEFAULT( NULL ),
OO_SINTa scratchSize OODEFAULT( 0 ) );</pre></div><div class=discussion_heading>Discussion</div>Compress some data from memory to memory, synchronously, with OodleLZ<div class=discussion_heading>Parameters</div> <table> <tr> <td style='vertical-align: top;' class=paramname><a id="OodleLZ_Compress.html_compressor" class=nohover>compressor</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> which OodleLZ variant to use in compression
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleLZ_Compress.html_rawBuf" class=nohover>rawBuf</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> raw data to compress
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleLZ_Compress.html_rawLen" class=nohover>rawLen</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> number of bytes in rawBuf to compress
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleLZ_Compress.html_compBuf" class=nohover>compBuf</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> pointer to write compressed data to. MUST be at least <a href="javascript:show('OodleLZ_GetCompressedBufferSizeNeeded.html')" class="paragraph">OodleLZ_GetCompressedBufferSizeNeeded</a> bytes
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleLZ_Compress.html_level" class=nohover>level</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> OodleLZ_CompressionLevel controls how much CPU effort is put into maximizing compression
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleLZ_Compress.html_pOptions" class=nohover>pOptions</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> (optional) options; if NULL, <a href="javascript:show('OodleLZ_CompressOptions_GetDefault.html')" class="paragraph">OodleLZ_CompressOptions_GetDefault</a> is used
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleLZ_Compress.html_dictionaryBase" class=nohover>dictionaryBase</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> (optional) if not NULL, provides preceding data to prime the dictionary; must be contiguous with rawBuf, the data between the pointers <i>dictionaryBase</i> and <i>rawBuf</i> is used as the preconditioning data. The exact same precondition must be passed to encoder and decoder.
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleLZ_Compress.html_lrm" class=nohover>lrm</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> (optional) long range matcher
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleLZ_Compress.html_scratchMem" class=nohover>scratchMem</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> (optional) pointer to scratch memory
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleLZ_Compress.html_scratchSize" class=nohover>scratchSize</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> (optional) size of scratch memory (see <a href="javascript:show('OodleLZ_GetCompressScratchMemBound.html')" class="paragraph">OodleLZ_GetCompressScratchMemBound</a>)
</td></tr></table><div class=discussion_heading>Return Value</div> <table> <tr> <td style='vertical-align: top;' class=paramname><a id="OodleLZ_Compress.html_return" class=nohover>return</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> size of compressed data written, or <a href="javascript:show('OODLELZ_FAILED.html')" class="paragraph">OODLELZ_FAILED</a> for failure
</td></tr></table><div class=discussion_heading>Discussion</div></p>
<p> Performs synchronous memory to memory LZ compression.
</p>
<p> In tools and when compressing large inputs in one call, consider using
<a href="javascript:show('OodleXLZ_Compress_AsyncAndWait.html')" class="paragraph">OodleXLZ_Compress_AsyncAndWait</a> (in the Oodle2 Ext lib) instead to get parallelism. Alternatively,
chop the data into small fixed size chunks (we recommend at least 256KiB, i.e. 262144 bytes) and
call compress on each of them, which decreases compression ratio but makes for trivial parallel
compression and decompression.
</p>
<p> You can compress a large buffer in several calls by setting <i>dictionaryBase</i> to the start
of the buffer, and then making <i>rawBuf</i> and <i>rawLen</i> select portions of that buffer. As long
as <i>rawLen</i> is a multiple of <a href="javascript:show('OODLELZ_BLOCK_LEN.html')" class="paragraph">OODLELZ_BLOCK_LEN</a>, the compressed chunks can simply be
concatenated together.
</p>
<p> The buffer that <i>compBuf</i> points to must have a certain minimum size that is returned by
<a href="javascript:show('OodleLZ_GetCompressedBufferSizeNeeded.html')" class="paragraph">OodleLZ_GetCompressedBufferSizeNeeded</a>. This size is always more than <i>rawLen</i>, usually by a few bytes
for every 256kb of input data. The "compressed" data can end up slightly larger than the input due to
internal stream headers.
</p>
<p> If <i>scratchMem</i> is provided, it will be used for the compressor's scratch memory needs before OodleMalloc is
called. If the scratch is big enough, no malloc will be done. If the scratch is not big enough, the compress
will not fail, instead OodleMalloc will be used. OodleMalloc should not return null. There is currently no way
to make compress fail cleanly due to using too much memory, it must either succeed or abort the process.
</p>
<p> If <i>scratchSize</i> is at least <a href="javascript:show('OodleLZ_GetCompressScratchMemBound.html')" class="paragraph">OodleLZ_GetCompressScratchMemBound</a> , additional allocations will not be needed.
</p>
<p> See <a href="javascript:show('OodleLZ_About.html')" class="paragraph">About OodleLZ</a> for tips on setting the compression options.
</p>
<p> If <i>dictionaryBase</i> is provided, the backup distance from <i>rawBuf</i> must be a multiple of <a href="javascript:show('OODLELZ_BLOCK_LEN.html')" class="paragraph">OODLELZ_BLOCK_LEN</a>
</p>
<p> If <a href="javascript:show('OodleLZ_CompressOptions.html','OodleLZ_CompressOptions.html_seekChunkReset')" class="paragraph">OodleLZ_CompressOptions:seekChunkReset</a> is enabled, and <i>dictionaryBase</i> is not NULL or <i>rawBuf</i> , then the
seek chunk boundaries are relative to <i>dictionaryBase</i>, not to <i>rawBuf</i>.
</p>
<p><br>&nbsp;<br> <table class=bar> <tr>
<td width=33% align=left><span class='arrowleft'></span><a href="javascript:show('OodleLZ_SeekTable.html')" class="paragraph">OodleLZ_SeekTable</a></td><td width=33% align=center><span class='arrowup'></span><a href="javascript:show('OodleAPI_LZ_Compressors.html')" class="paragraph">OodleAPI_LZ_Compressors</a></td><td width=33% align=right><span class='arrowright'></span><a href="javascript:show('OodleLZ_Decompress.html')" class="paragraph">OodleLZ_Decompress</a></td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="OodleNetwork1TCP_State_Size.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>OodleNetwork1TCP_State_Size</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "OodleNetwork1TCP_State_Size.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="OodleNetwork1TCP_State_Size.html_backmenu">
<table class=dropmenu>
<tr><td><span class='arrowleft'></span>&nbsp;<a href="javascript:show('OodleNetwork1_Shared_Size.html')" class="paragraph">OodleNetwork1_Shared_Size</a></td></tr><tr><td><span class='arrowright'></span>&nbsp;<a href="javascript:show('OodleNetwork1_CompressedBufferSizeNeeded.html')" class="paragraph">OodleNetwork1_CompressedBufferSizeNeeded</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<div class=prototype><div class=prototype_header>// Function prototype:</div><pre>OO_SINTa <span class=prototype_type><a href="javascript:show('OodleNetwork1TCP_State_Size.html')" class="blue">OodleNetwork1TCP_State_Size</a></span>( void );</pre></div><div class=discussion_heading>Discussion</div>Returns the size of memory required for an <a href="javascript:show('OodleNetwork1TCP_State.html')" class="paragraph">OodleNetwork1TCP_State</a> object<div class=discussion_heading>Discussion</div>Shared and State are allocated with malloc( Size() )
</p>
<p><br>&nbsp;<br> <table class=bar> <tr>
<td width=33% align=left><span class='arrowleft'></span><a href="javascript:show('OodleNetwork1_Shared_Size.html')" class="paragraph">OodleNetwork1_Shared_Size</a></td><td width=33% align=center><span class='arrowup'></span><a href="javascript:show('OodleAPI_OodleNetwork1.html')" class="paragraph">OodleAPI_OodleNetwork1</a></td><td width=33% align=right><span class='arrowright'></span><a href="javascript:show('OodleNetwork1_CompressedBufferSizeNeeded.html')" class="paragraph">OodleNetwork1_CompressedBufferSizeNeeded</a></td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="OodleX_IOAlignDownSINTa.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>OodleX_IOAlignDownSINTa</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "OodleX_IOAlignDownSINTa.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="OodleX_IOAlignDownSINTa.html_backmenu">
<table class=dropmenu>
<tr><td><span class='arrowleft'></span>&nbsp;<a href="javascript:show('OodleX_IOAlignDownS64.html')" class="paragraph">OodleX_IOAlignDownS64</a></td></tr><tr><td><span class='arrowright'></span>&nbsp;<a href="javascript:show('OodleX_S64_to_SINTa_check.html')" class="paragraph">OodleX_S64_to_SINTa_check</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<div class=prototype><div class=prototype_header>// Function prototype:</div><pre>OO_SINTa <span class=prototype_type><a href="javascript:show('OodleX_IOAlignDownSINTa.html')" class="blue">OodleX_IOAlignDownSINTa</a></span>( const OO_SINTa x );</pre></div><div class=discussion_heading>Discussion</div>Align down to <a href="javascript:show('OODLEX_IO_MAX_ALIGNMENT.html')" class="paragraph">OODLEX_IO_MAX_ALIGNMENT</a><div class=discussion_heading>Parameters</div> <table> <tr> <td style='vertical-align: top;' class=paramname><a id="OodleX_IOAlignDownSINTa.html_x" class=nohover>x</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> value to align
</td></tr></table><div class=discussion_heading>Return Value</div> <table> <tr> <td style='vertical-align: top;' class=paramname><a id="OodleX_IOAlignDownSINTa.html_return" class=nohover>return</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> aligned value
</td></tr></table><div class=discussion_heading>Discussion</div></p>
<p> Align x down to <a href="javascript:show('OODLEX_IO_MAX_ALIGNMENT.html')" class="paragraph">OODLEX_IO_MAX_ALIGNMENT</a>
<br>&nbsp;<br> <table class=bar> <tr>
<td width=33% align=left><span class='arrowleft'></span><a href="javascript:show('OodleX_IOAlignDownS64.html')" class="paragraph">OodleX_IOAlignDownS64</a></td><td width=33% align=center><span class='arrowup'></span><a href="javascript:show('OodleXAPI_Util.html')" class="paragraph">OodleX Utils</a></td><td width=33% align=right><span class='arrowright'></span><a href="javascript:show('OodleX_S64_to_SINTa_check.html')" class="paragraph">OodleX_S64_to_SINTa_check</a></td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="OodleXIOQ_CopyFile_AsyncAndWait.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>OodleXIOQ_CopyFile_AsyncAndWait</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "OodleXIOQ_CopyFile_AsyncAndWait.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="OodleXIOQ_CopyFile_AsyncAndWait.html_backmenu">
<table class=dropmenu>
<tr><td><span class='arrowleft'></span>&nbsp;<a href="javascript:show('OodleXIOQ_WriteWholeFile_AsyncAndWait.html')" class="paragraph">OodleXIOQ_WriteWholeFile_AsyncAndWait</a></td></tr><tr><td><span class='arrowright'></span>&nbsp;<a href="javascript:show('OodleXIOQ_GetInfoByName_AsyncAndWait.html')" class="paragraph">OodleXIOQ_GetInfoByName_AsyncAndWait</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<div class=prototype><div class=prototype_header>// Function prototype:</div><pre>OO_BOOL <span class=prototype_type><a href="javascript:show('OodleXIOQ_CopyFile_AsyncAndWait.html')" class="blue">OodleXIOQ_CopyFile_AsyncAndWait</a></span>( const char * from,
const char * to,
OO_U32 oodleCopyFileFlags );</pre></div><div class=discussion_heading>Discussion</div>See <a href="javascript:show('OodleXIOQ_CopyFile_Async.html')" class="paragraph">OodleXIOQ_CopyFile_Async</a>
<br>&nbsp;<br> <table class=bar> <tr>
<td width=33% align=left><span class='arrowleft'></span><a href="javascript:show('OodleXIOQ_WriteWholeFile_AsyncAndWait.html')" class="paragraph">OodleXIOQ_WriteWholeFile_AsyncAndWait</a></td><td width=33% align=center><span class='arrowup'></span><a href="javascript:show('OodleXAPI_IOQ.html')" class="paragraph">OodleX low level async io</a></td><td width=33% align=right><span class='arrowright'></span><a href="javascript:show('OodleXIOQ_GetInfoByName_AsyncAndWait.html')" class="paragraph">OodleXIOQ_GetInfoByName_AsyncAndWait</a></td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="OodleLZ_CompressOptions_Validate.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>OodleLZ_CompressOptions_Validate</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "OodleLZ_CompressOptions_Validate.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="OodleLZ_CompressOptions_Validate.html_backmenu">
<table class=dropmenu>
<tr><td><span class='arrowleft'></span>&nbsp;<a href="javascript:show('OodleLZ_CompressOptions_GetDefault.html')" class="paragraph">OodleLZ_CompressOptions_GetDefault</a></td></tr><tr><td><span class='arrowright'></span>&nbsp;<a href="javascript:show('OodleLZ_Compressor_UsesWholeBlockQuantum.html')" class="paragraph">OodleLZ_Compressor_UsesWholeBlockQuantum</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<div class=prototype><div class=prototype_header>// Function prototype:</div><pre>void <span class=prototype_type><a href="javascript:show('OodleLZ_CompressOptions_Validate.html')" class="blue">OodleLZ_CompressOptions_Validate</a></span>( <span class=prototype_type><a href="javascript:show('OodleLZ_CompressOptions.html')" class="blue">OodleLZ_CompressOptions</a></span> * pOptions );</pre></div><div class=discussion_heading>Discussion</div>Clamps the values in <i>pOptions</i> to be in valid range<br>&nbsp;<br> <table class=bar> <tr>
<td width=33% align=left><span class='arrowleft'></span><a href="javascript:show('OodleLZ_CompressOptions_GetDefault.html')" class="paragraph">OodleLZ_CompressOptions_GetDefault</a></td><td width=33% align=center><span class='arrowup'></span><a href="javascript:show('OodleAPI_LZ_Compressors.html')" class="paragraph">OodleAPI_LZ_Compressors</a></td><td width=33% align=right><span class='arrowright'></span><a href="javascript:show('OodleLZ_Compressor_UsesWholeBlockQuantum.html')" class="paragraph">OodleLZ_Compressor_UsesWholeBlockQuantum</a></td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="OodleAPI_OodleNet_Plugins.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>Network plugins</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "OodleAPI_OodleNet_Plugins.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="OodleAPI_OodleNet_Plugins.html_backmenu">
<table class=dropmenu>
<tr><td><span class='arrowleft'></span>&nbsp;<a href="javascript:show('OodleAPI_Network.html')" class="paragraph">Oodle Network compression</a></td></tr><tr><td><span class='arrowup'></span>&nbsp;<a href="javascript:show('OodleNetworkAPI.html')" class="paragraph">Oodle2 Network API Documentation</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<ul class='TOCItem'>
<li><span onClick="HandleClick(event, null); return false" class='TOCGroup closedbook_icon'></span>&nbsp;Functions</li>
<ul style="display:none" class='TOCItem'>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleNet_Plugins_SetAllocators.html')">OodleNet_Plugins_SetAllocators</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleNet_Plugins_SetJobSystem.html')">OodleNet_Plugins_SetJobSystem</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleNet_Plugins_SetJobSystemAndCount.html')">OodleNet_Plugins_SetJobSystemAndCount</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleNet_Plugins_SetPrintf.html')">OodleNet_Plugins_SetPrintf</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleNet_Plugins_SetAssertion.html')">OodleNet_Plugins_SetAssertion</a></li>
</ul>
<li><span onClick="HandleClick(event, null); return false" class='TOCGroup closedbook_icon'></span>&nbsp;Typedefs</li>
<ul style="display:none" class='TOCItem'>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('t_fp_OodleNet_Plugin_MallocAligned.html')">t_fp_OodleNet_Plugin_MallocAligned</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('t_fp_OodleNet_Plugin_Free.html')">t_fp_OodleNet_Plugin_Free</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('t_fp_OodleNet_Plugin_RunJob.html')">t_fp_OodleNet_Plugin_RunJob</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('t_fp_OodleNet_Plugin_WaitJob.html')">t_fp_OodleNet_Plugin_WaitJob</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('t_fp_OodleNet_Plugin_Printf.html')">t_fp_OodleNet_Plugin_Printf</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('t_fp_OodleNet_Plugin_DisplayAssertion.html')">t_fp_OodleNet_Plugin_DisplayAssertion</a></li>
</ul>
</ul>
<br>&nbsp;<br> <table class=bar> <tr>
<td width=33% align=left><span class='arrowleft'></span><a href="javascript:show('OodleNetwork_About.html')" class="paragraph">About Oodle Network Compression</a></td><td width=33% align=center><span class='arrowup'></span><a href="javascript:show('OodleNetworkAPI.html')" class="paragraph">Oodle2 Network API Documentation</a></td><td width=33% align=right><span class='arrowright'></span><a href="javascript:show('OodleNet_Plugins_SetAllocators.html')" class="paragraph">OodleNet_Plugins_SetAllocators</a></td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="OodleXAPI_Malloc.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>OodleX Memory Allocators</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "OodleXAPI_Malloc.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="OodleXAPI_Malloc.html_backmenu">
<table class=dropmenu>
<tr><td><span class='arrowleft'></span>&nbsp;<a href="javascript:show('OodleXAPI_Init.html')" class="paragraph">OodleX Startup and Shutdown</a></td></tr><tr><td><span class='arrowup'></span>&nbsp;<a href="javascript:show('OodleExtAPI.html')" class="paragraph">Oodle2 Ext API Documentation</a></td></tr><tr><td><span class='arrowright'></span>&nbsp;<a href="javascript:show('OodleXAPI_Handle.html')" class="paragraph">OodleX async handle operations</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<P>
OodleXMalloc memory allocators.
</p>
<p> <p><ul class='TOCItem'>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleXMalloc_About.html')">About OodleXMalloc</a></li>
<li><span onClick="HandleClick(event, null); return false" class='TOCGroup closedbook_icon'></span>&nbsp;Enumerants</li>
<ul style="display:none" class='TOCItem'>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleXMalloc_OS_Options.html')">OodleXMalloc_OS_Options</a></li>
</ul>
<li><span onClick="HandleClick(event, null); return false" class='TOCGroup closedbook_icon'></span>&nbsp;Structures</li>
<ul style="display:none" class='TOCItem'>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleXMallocVTable.html')">OodleXMallocVTable</a></li>
</ul>
<li><span onClick="HandleClick(event, null); return false" class='TOCGroup closedbook_icon'></span>&nbsp;Functions</li>
<ul style="display:none" class='TOCItem'>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleXMalloc_InstallVTable.html')">OodleXMalloc_InstallVTable</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleXMalloc_SetFailedHandler.html')">OodleXMalloc_SetFailedHandler</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleXMalloc.html')">OodleXMalloc</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleXMallocAligned.html')">OodleXMallocAligned</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleXFree.html')">OodleXFree</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleXFreeSized.html')">OodleXFreeSized</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleXMallocBigAlignment.html')">OodleXMallocBigAlignment</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleXMallocBig.html')">OodleXMallocBig</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleXFreeBig.html')">OodleXFreeBig</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleXMalloc_ValidatePointer.html')">OodleXMalloc_ValidatePointer</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleXMalloc_IOAligned.html')">OodleXMalloc_IOAligned</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleXFree_IOAligned.html')">OodleXFree_IOAligned</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleXMalloc_GetVTable_Clib.html')">OodleXMalloc_GetVTable_Clib</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleXMalloc_GetVTable_OS.html')">OodleXMalloc_GetVTable_OS</a></li>
</ul>
<li><span onClick="HandleClick(event, null); return false" class='TOCGroup closedbook_icon'></span>&nbsp;Typedefs</li>
<ul style="display:none" class='TOCItem'>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleXMallocFailedHandler.html')">OodleXMallocFailedHandler</a></li>
</ul>
</ul>
<br>&nbsp;<br> <table class=bar> <tr>
<td width=33% align=left><span class='arrowleft'></span><a href="javascript:show('OodleXConfigValues.html')" class="paragraph">OodleXConfigValues</a></td><td width=33% align=center><span class='arrowup'></span><a href="javascript:show('OodleExtAPI.html')" class="paragraph">Oodle2 Ext API Documentation</a></td><td width=33% align=right><span class='arrowright'></span><a href="javascript:show('OodleXMalloc_About.html')" class="paragraph">About OodleXMalloc</a></td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="OodleLZ_About_Hydra.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>About OodleLZ Hydra</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "OodleLZ_About_Hydra.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="OodleLZ_About_Hydra.html_backmenu">
<table class=dropmenu>
<tr><td><span class='arrowleft'></span>&nbsp;<a href="javascript:show('OodleLZ_About_ThreadPhasedDecode.html')" class="paragraph">About OodleLZ ThreadPhased Decode</a></td></tr><tr><td><span class='arrowup'></span>&nbsp;<a href="javascript:show('OodleAPI_LZ.html')" class="paragraph">Core LZ compression</a></td></tr><tr><td><span class='arrowright'></span>&nbsp;<a href="javascript:show('OodleAPI_LZ_Compressors.html')" class="paragraph">OodleAPI_LZ_Compressors</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<P>
<h2> About OodleLZ Hydra</h2>
</p>
<p>Oodle Hydra is a meta-compressor which automatically selects Leviathan, Kraken, Mermaid, or Selkie on a
per-block basis.
</p>
<p>When you decode a file that was compressed with Hydra, it will decode as one or several of those other
compressors.
</p>
<p>Hydra makes its decision by scoring each compressor for its space-speed performance. What this means is
Hydra automatically makes good decisions about using the slower compressors only when they are worth it.
That is, they must provide a good return in terms of bytes saved in exchange for the increase in decode
time. Exactly what qualifies as "worth it" is determined by you, via the <a href="javascript:show('OodleLZ_CompressOptions.html','OodleLZ_CompressOptions.html_spaceSpeedTradeoffBytes')" class="paragraph">OodleLZ_CompressOptions:spaceSpeedTradeoffBytes</a>
parameter.
</p>
<p>With spaceSpeedTradeoffBytes around 256 , Hydra is roughly comparable to Kraken. As you dial it lower,
Hydra will give more compression but slower decodes. Around 1500 is comparable to Mermaid, and around 50
is comparable to Leviathan. In between you can hit a balance that's somewhere between those compressors.
</p>
<p>Hydra takes more time to encode because it is considering many compressors.
</p>
<p>Hydra always beats every other Oodle compressor, it provides the best of them.<br>&nbsp;<br> <table class=bar> <tr>
<td width=33% align=left><span class='arrowleft'></span><a href="javascript:show('OodleLZ_About_ThreadPhasedDecode.html')" class="paragraph">About OodleLZ ThreadPhased Decode</a></td><td width=33% align=center><span class='arrowup'></span><a href="javascript:show('OodleAPI_LZ.html')" class="paragraph">Core LZ compression</a></td><td width=33% align=right><span class='arrowright'></span><a href="javascript:show('OodleAPI_LZ_Compressors.html')" class="paragraph">OodleAPI_LZ_Compressors</a></td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="Oodle_FAQ_vs_other_compressors.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>FAQ: How does OodleLZ compare with other compressors ?</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "Oodle_FAQ_vs_other_compressors.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="Oodle_FAQ_vs_other_compressors.html_backmenu">
<table class=dropmenu>
<tr><td><span class='arrowleft'></span>&nbsp;<a href="javascript:show('Oodle_FAQ_data_compatibility.html')" class="paragraph">FAQ: Do new Oodle versions break data compatibility ?</a></td></tr><tr><td><span class='arrowup'></span>&nbsp;<a href="javascript:show('Oodle_FAQ.html')" class="paragraph">Frequently Asked Questions</a></td></tr><tr><td><span class='arrowright'></span>&nbsp;<a href="javascript:show('Oodle_FAQ_WhichLZ.html')" class="paragraph">FAQ: Which OodleLZ should I use?</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<P>
In general, Oodle LZ is designed to get compression as good as anything in the world, while decoding much MUCH faster.
Usually 2-10X faster!
</p>
<p>Kraken is the compressor you should try first. It offers excellent compression ratio and very high decode speeds.
It's a great compromise for game data loading.
</p>
<p>Leviathan gets a bit more compression than Kraken (similar to 7zip/LZMA, or Oodle LZNA), but is a bit slower to decode than Kraken.
It's <b>way</b> faster than anything else with similar compression. Leviathan can be a bit slow to encode.
</p>
<p>Mermaid &amp; Selkie are some of the fastest decompressors in the world. They provide less compression than Kraken but
super fast decodes.
</p>
<p>Mermaid &amp; Selkie (at the fast OodleLZ_CompressionLevel settings) are also very fast to encode.
</p>
<p>Here's a chart showing the compression ratio of various files of different types :
</p>
<p><span class='seven_ratio_chart'></span>
</p>
<p>And a chart of the decode speed :
</p>
<p><span class='seven_speed_chart'></span>
</p>
<p>(all compressors were run in max compress mode; per-file hand tweakable of options was not done for any of the compressors;
multimedia and x86 filters were disabled for all compressors)
</p>
<p>The best way for you to evaluate the Oodle compressors is just to run them on your own data and see what you get.
Try <a href="javascript:show('example_lz_chart.html')" class="paragraph">example_lz_chart : Example that makes a chart of OodleLZ options</a> (in the bin dir) for an easy way to get a report of Oodle's performance.<br>&nbsp;<br> <table class=bar> <tr>
<td width=33% align=left><span class='arrowleft'></span><a href="javascript:show('Oodle_FAQ_data_compatibility.html')" class="paragraph">FAQ: Do new Oodle versions break data compatibility ?</a></td><td width=33% align=center><span class='arrowup'></span><a href="javascript:show('Oodle_FAQ.html')" class="paragraph">Frequently Asked Questions</a></td><td width=33% align=right><span class='arrowright'></span><a href="javascript:show('Oodle_FAQ_WhichLZ.html')" class="paragraph">FAQ: Which OodleLZ should I use?</a></td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="OodleLZ_GetCompressScratchMemBoundEx.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>OodleLZ_GetCompressScratchMemBoundEx</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "OodleLZ_GetCompressScratchMemBoundEx.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="OodleLZ_GetCompressScratchMemBoundEx.html_backmenu">
<table class=dropmenu>
<tr><td><span class='arrowleft'></span>&nbsp;<a href="javascript:show('OodleLZ_GetCompressScratchMemBound.html')" class="paragraph">OodleLZ_GetCompressScratchMemBound</a></td></tr><tr><td><span class='arrowright'></span>&nbsp;<a href="javascript:show('OodleLZ_GetCompressedBufferSizeNeeded.html')" class="paragraph">OodleLZ_GetCompressedBufferSizeNeeded</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<div class=prototype><div class=prototype_header>// Function prototype:</div><pre>OO_SINTa <span class=prototype_type><a href="javascript:show('OodleLZ_GetCompressScratchMemBoundEx.html')" class="blue">OodleLZ_GetCompressScratchMemBoundEx</a></span>( <span class=prototype_type><a href="javascript:show('OodleLZ_Compressor.html')" class="blue">OodleLZ_Compressor</a></span> compressor,
<span class=prototype_type><a href="javascript:show('OodleLZ_CompressionLevel.html')" class="blue">OodleLZ_CompressionLevel</a></span> level,
<span class=prototype_type><a href="javascript:show('OodleLZ_CompressScratchMemBoundType.html')" class="blue">OodleLZ_CompressScratchMemBoundType</a></span> boundType,
OO_SINTa rawLen,
const <span class=prototype_type><a href="javascript:show('OodleLZ_CompressOptions.html')" class="blue">OodleLZ_CompressOptions</a></span> * pOptions OODEFAULT( NULL ) );</pre></div><div class=discussion_heading>Discussion</div>Return an estimate for the amount of scratch mem used by OodleLZ_Compress<div class=discussion_heading>Parameters</div> <table> <tr> <td style='vertical-align: top;' class=paramname><a id="OodleLZ_GetCompressScratchMemBoundEx.html_compressor" class=nohover>compressor</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> which OodleLZ variant to use in compression
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleLZ_GetCompressScratchMemBoundEx.html_level" class=nohover>level</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> OodleLZ_CompressionLevel controls how much CPU effort is put into maximizing compression
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleLZ_GetCompressScratchMemBoundEx.html_boundType" class=nohover>boundType</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> Type of memory estimate to return.
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleLZ_GetCompressScratchMemBoundEx.html_rawLen" class=nohover>rawLen</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> maximum number of bytes you will compress (plus dictionary backup)
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleLZ_GetCompressScratchMemBoundEx.html_pOptions" class=nohover>pOptions</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> (optional) options; if NULL, <a href="javascript:show('OodleLZ_CompressOptions_GetDefault.html')" class="paragraph">OodleLZ_CompressOptions_GetDefault</a> is used
</td></tr></table><div class=discussion_heading>Discussion</div></p>
<p> Returns either a worst-case or typical scratch memory estimate for the given compressor, options
and input size.
</p>
<p> When a worst-case scratch memory estimate exists, passing that much scratch memory to
<a href="javascript:show('OodleLZ_Compress.html')" class="paragraph">OodleLZ_Compress</a> is guaranteed to not do any allocations, provided the parameters match those
of the compression call.
</p>
<p> "Typical" memory bounds are not hard guarantees but will usually not result in any extra allocations.
</p>
<p> For <i>rawLen</i> pass at least the maximum size you will ever encode. If your data is divided into chunks,
pass the chunk size. If you will encode full buffers of unbounded size, pass -1.
</p>
<p> Some options and levels may not have simple finite bounds. Then <a href="javascript:show('OODLELZ_SCRATCH_MEM_NO_BOUND.html')" class="paragraph">OODLELZ_SCRATCH_MEM_NO_BOUND</a> is returned
and the call to <a href="javascript:show('OodleLZ_Compress.html')" class="paragraph">OodleLZ_Compress</a> may use the allocator even if infinite scratch memory is provided.
Currently this applies to all the Optimal levels.
</p>
<p> When OODLELZ_SCRATCH_MEM_NO_BOUND is returned, you can still pass in scratch mem which will be used before
going to the plugin allocator.
</p>
<p><br>&nbsp;<br> <table class=bar> <tr>
<td width=33% align=left><span class='arrowleft'></span><a href="javascript:show('OodleLZ_GetCompressScratchMemBound.html')" class="paragraph">OodleLZ_GetCompressScratchMemBound</a></td><td width=33% align=center><span class='arrowup'></span><a href="javascript:show('OodleAPI_LZ_Compressors.html')" class="paragraph">OodleAPI_LZ_Compressors</a></td><td width=33% align=right><span class='arrowright'></span><a href="javascript:show('OodleLZ_GetCompressedBufferSizeNeeded.html')" class="paragraph">OodleLZ_GetCompressedBufferSizeNeeded</a></td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="OodleXAPI_Init.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>OodleX Startup and Shutdown</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "OodleXAPI_Init.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="OodleXAPI_Init.html_backmenu">
<table class=dropmenu>
<tr><td><span class='arrowleft'></span>&nbsp;<a href="javascript:show('OodleXAPI_LZ.html')" class="paragraph">OodleX LZ compression</a></td></tr><tr><td><span class='arrowup'></span>&nbsp;<a href="javascript:show('OodleExtAPI.html')" class="paragraph">Oodle2 Ext API Documentation</a></td></tr><tr><td><span class='arrowright'></span>&nbsp;<a href="javascript:show('OodleXAPI_Malloc.html')" class="paragraph">OodleX Memory Allocators</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<ul class='TOCItem'>
<li><span onClick="HandleClick(event, null); return false" class='TOCGroup closedbook_icon'></span>&nbsp;Defines</li>
<ul style="display:none" class='TOCItem'>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OODLE_WORKERS_COUNT_ALL_PHYSICAL_CORES.html')">OODLE_WORKERS_COUNT_ALL_PHYSICAL_CORES</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OODLE_WORKERS_COUNT_ALL_HYPER_CORES.html')">OODLE_WORKERS_COUNT_ALL_HYPER_CORES</a></li>
</ul>
<li><span onClick="HandleClick(event, null); return false" class='TOCGroup closedbook_icon'></span>&nbsp;Enumerants</li>
<ul style="display:none" class='TOCItem'>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleX_Init_GetDefaults_DebugSystems.html')">OodleX_Init_GetDefaults_DebugSystems</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleX_Init_GetDefaults_Threads.html')">OodleX_Init_GetDefaults_Threads</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleX_Shutdown_LogLeaks.html')">OodleX_Shutdown_LogLeaks</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleX_Shutdown_DebugBreakOnLeaks.html')">OodleX_Shutdown_DebugBreakOnLeaks</a></li>
</ul>
<li><span onClick="HandleClick(event, null); return false" class='TOCGroup closedbook_icon'></span>&nbsp;Structures</li>
<ul style="display:none" class='TOCItem'>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleXInitOptions.html')">OodleXInitOptions</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleXConfigValues.html')">OodleXConfigValues</a></li>
</ul>
<li><span onClick="HandleClick(event, null); return false" class='TOCGroup closedbook_icon'></span>&nbsp;Functions</li>
<ul style="display:none" class='TOCItem'>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleX_Init_ThreadProfilerInit.html')">OodleX_Init_ThreadProfilerInit</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleX_Init_GetDefaults.html')">OodleX_Init_GetDefaults</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleX_Init_GetDefaults_Minimal.html')">OodleX_Init_GetDefaults_Minimal</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleX_Init.html')">OodleX_Init</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleX_Init_Default.html')">OodleX_Init_Default</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleX_LogSystemInfo.html')">OodleX_LogSystemInfo</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleX_Shutdown.html')">OodleX_Shutdown</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleX_Init_NoThreads.html')">OodleX_Init_NoThreads</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleX_Shutdown_NoThreads.html')">OodleX_Shutdown_NoThreads</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleX_GetConfigValues.html')">OodleX_GetConfigValues</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleX_SetConfigValues.html')">OodleX_SetConfigValues</a></li>
</ul>
</ul>
<br>&nbsp;<br> <table class=bar> <tr>
<td width=33% align=left><span class='arrowleft'></span><a href="javascript:show('OodleXAPI_LZ_Async.html')" class="paragraph">OodleXAPI_LZ_Async</a></td><td width=33% align=center><span class='arrowup'></span><a href="javascript:show('OodleExtAPI.html')" class="paragraph">Oodle2 Ext API Documentation</a></td><td width=33% align=right><span class='arrowright'></span><a href="javascript:show('OODLE_WORKERS_COUNT_ALL_PHYSICAL_CORES.html')" class="paragraph">OODLE_WORKERS_COUNT_ALL_PHYSICAL_CORES</a></td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="start_Benchmarking.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>Tips for benchmarking a compressor</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "start_Benchmarking.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="start_Benchmarking.html_backmenu">
<table class=dropmenu>
<tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<P>
You're about to evaluate Oodle (thanks for having a look!) or some other compressor.
Before you start, consider these tips :
</p>
<p><ul>
<li> Time only the compressor.
</ul></p>
<p>Place your time measurements only around the compressor. Not IO, not your parsing, not mallocs, just the compress or
decompress calls. I understand that in the end what you care about is total time to load, but there can be a lot of
issues there that need fixing, and they can cloud the comparison of just the compression part. eg. if your parsing is
really slow, that will dominate the CPU time and hide the differences between the compressors.
</p>
<p><ul>
<li> Time what you actually care about.
</ul></p>
<p>If you care about decode time, time the decompression. If you care about encode time, time compression. If you care about
round-trip time, add the two times. Compressors are not just "fast" or "slow" at both ends, you can't time encoding and
decide that it's a fast or slow compressor if what you care about is decoding.
</p>
<p><ul>
<li> Choose the right options.
</ul></p>
<p>Most compressors have the ability to target slightly different use cases. The most common option is the ability to trade off
encode time vs. compression ratio. So, if what you care about is smallest size, then run the compressor at its highest encode
effort level. It can be tricky to get the options right in most compression libraries; we are woefully non-standardized and
not well documented. Aside from the simple "level" parameter, there may be other options that are relevant to your goals,
perhaps trading off decompressor memory usage, or decompression speed.
With Oodle the best option is always to email us and ask what options will best suit your goals.
</p>
<p><ul>
<li> Run apples-to-apples (threads-to-threads) comparisons.
</ul></p>
<p>It can be tricky to compare compressors fairly. As much as possible they should be run in the same way, and they should
be run in the way that you will actually use them in your final application. Don't profile them with threads if you will
not use them threaded in your shipping application.
</p>
<p>Threads are a common problem. Compressors should either be tested all threaded (if you will use threads in your final application),
or all non-threaded. Unfortunately the defaults are not the same. "lzma" (7z) and LZHAM create threads by default. You have
to change their options to tell them to <b>not</b> create threads. The normal Oodle_Compress calls will not use threads by default,
you have to specifically call one of the <i>Async threaded routines. So either set everything to not use threads, or set everything to
use threads, so the comparison is on equal footing. (my personal preference is to benchmark everything without threads to compare
single-threaded performance, and you can always add threads for production use)
</i></p>
<p><ul>
<li> Take the MIN of N run times.
</ul></p>
<p>To get reliable timing, you need to run the loop many times, and take the MIN of all times. The min will
give you the time it takes when the OS isn't interrupting you with task switches, the CPU isn't clocking-down
for speedstep, etc. I usually do 30 <b>per core</b> but you can probably get a way with a bit less.
</p>
<p>On some modern cores that do short term boost, or on ARM big/little cores, it can be better to take the MEDIAN
(not the average) of many runs, or to exclude the top 10% fastest runs then take the min.
</p>
<p>If possible, use BIOS and OS settings to put the procesor in a more stable mode.
</p>
<p><ul>
<li> Wipe the cache.
</ul></p>
<p>Assuming you are now doing N loops, you need to invalidate the cache between iterations. If you don't,
you will be running the compressor in a "hot cache" scenario, with some buffers already in cache.
Most likely the real world performance you actually care about is the cold cache performance, so
invalidate the cache in the timing loop.
</p>
<p>This has the biggest effect on small buffers. It's fine to do your timing in either hot cache or cold cache,
the important thing is consistency - don't care numbers from a hot cache run vs a cold cache run, particularly on
small buffers.
</p>
<p><ul>
<li> Don't pack a bunch of files together in a tar if that's not how you load.
</ul></p>
<p>It may seem like a good way to test to grab your bunch of test files and pack them together in a tar (or zip -0 or similar package)
and run the compression tests on that tar. That's a fine option if that's really how you load data in your final application - as
one big contiguous chunk that must be loaded in one big blob. But most people don't. You need to test the compressors in the same
way they will be used in the final application. If you load whole file at a time, test the compressors on whole file units. Many
people do loading on some kind of paging unit, like perhaps 1 MB chunks. If you do that, then test the compressor on the same thing.
</p>
<p><ul>
<li> Choose your test set to proportionally represent your real data load.
</ul></p>
<p>If you could test on the entire set of buffers that your final application will load, that would be an
accurate test. (though actually, even that is a bit subtle, since some buffers are more latency sensitive
than others, so for example you might care more about the first few things you load to get into a running
application as quickly as possible). That's probably not practical, so you want to choose a set that is
representative of what you will actually load. Don't exclude things like already-compressed files (JPEGs
and so on) <b>if</b> you will be running them through the compressor. (though consider <b>not</b> running them your
compressed-file loading path, in which case you should exclude them from testing). It's pretty hard to
get an accurate representative sample, so it's generally best to just get a variety of files and look at
individual per-file results.
</p>
<p>A common mistake is to test on standard corpora like Silesia or Canterbury that have a majority of their
data in ASCII text. You probably do not the majority of your bytes spent on text, so those are very poor
reflections or real world data loads.
</p>
<p><ul>
<li> Look at the spectrum of results, not the sum.
</ul></p>
<p>After you run on your test set, don't just add up the compressed sizes and times to make a "total" result. Sums can be misleading.
One issue is there are some large incompressible files, they can hide the differences on the more compressible files. But a bigger and
more subtle trap is the way that sums weight the combination of results. A sum is a weighting by the size of each file in the test
set. That's fine if your test set is all of your data, or is a perfectly proportionally representative sampling of all of your data
(a subset which acts like the whole). But most likely it's not. It's best to keep the results per file separate and just have a look
at individual cases to see what's going on, how the results differ, and try not to simplify to just looking at the sum.
</p>
<p><ul>
<li> If you do sum, sum <b>time</b> not speed, sum <b>size</b> not ratio.
</ul></p>
<p>Speed (like mb/s) and ratio (raw size/comp size) are inverted measures and shouldn't be summed. What you
actually care about is total compressed size, and total time to decode. So if you run over a set of files,
don't look at "average speed" or "average ratio" , because those are inverted meaures that will oddly weight
the accumulation. Instead accumulate total time to decode, total raw size, and total compressed size, and
then if you like you can make "overall speed" and "overall ratio" from those total.
</p>
<p><ul>
<li> Try not to malloc in the timing loop.
</ul></p>
<p>Your malloc might be fast, it might be slow, it's best to not have that as a variable in the timing. In
general try to allocate the memory for the compressor or decompressor outside of the timing loop.
(In Oodle this is done by passing in your own pointer for the "decoderMemory" argument of OodleLZ_Decompress).
That would be an unfair test if you didn't also do that in the final application - so do it in the final application too!
(similarly, make sure there's no logging inside the timing loop).
</p>
<p><ul>
<li> Consider excluding almost-incompressible files.
</ul></p>
<p>This is something you should consider for final shipping application, and if you do it in your shipping
application, then you should do it for the benchmark too. The most common case is already-compressed files
like JPEG images and MP3 audio. These files can usually be compressed slightly, maybe saving 1% of their
size, but the time to decode them is not worth it overall - you can get more total size savings by running a
more powerful compressor on other files. So it's most efficient to just send them uncompressed.
</p>
<p><ul>
<li> Tiny files should either be excluded or packed together.
</ul></p>
<p>There's almost never a use case where you really want to compress tiny files (&lt; 16k bytes or so) as
independent units. There's too much per-unit overhead in the compressor, and more importantly there's
too much per-unit overhead in IO - you don't want to eat a disk seek to just to get one tiny file. So
in a real application tiny files should always be grouped into paging units that are 256k or more, a size
where loading them won't just be a total waste of disk seek time. So, when benchmarking compressors you
also shouldn't run them on tiny independent files, because you will never do that in a shipping application.
</p>
<p><ul>
<li> Beware of trying to time IO.
</ul></p>
<p>It is attractive to try to time the entire loading process (IO + decompression + processing) to see how
Oodle affects your total load time. While this is a nice idea, it is fraught with peril in practice.
IO timing is notoriously inconsistent, and the times you measure may not reflect real user times at all.
(for example, if you measuring timing repeatedly, you may be just loading data from the system disk
cache; on a console you may be timing through a simulator or host FS which doesn't reflect real speeds;
etc.) Because of this I recommend timing just the compression portion of the loading operation, or at
least timing both aspects. To really time IO right you need to make many runs on different hardware,
after fresh reboots, it's quite a lot of work.
</p>
<p><ul>
<li> Compare to the provided Oodle executables
</ul></p>
<p>Oodle provides <a href="javascript:show('example_lz_chart.html')" class="paragraph">example_lz_chart : Example that makes a chart of OodleLZ options</a> and ozip (<a href="javascript:show('Oodle_About_ozip.html')" class="paragraph">About Oodle ozip</a>) as pre-built executables (in the bin dir)
that can be used for benchmarking. Test your code to make sure your results agree with them.
They are also available as source code so you can see how the benchmarking is done.
</p>
<p><ul>
<li> One good number is better than a million bad ones.
</ul></p>
<p>Before you go and try to be all "big data" and run over a giant corpus, make sure you can benchmark just
one file and get correct results. Compare it to the published Oodle benchmark results, which are very
carefully made, and if it doesn't agree make sure you know why. Oodle is run on some public domain data
sets, such as the Silesia corpus, which you can get here :
</p>
<p>http://sun.aei.polsl.pl/~sdeor/index.php?page=silesia
</p>
<p>if your numbers on Silesia don't agree with the standard Oodle numbers, look into why.<br>&nbsp;<br> <table class=bar> <tr>
<td width=33%>&nbsp;</td><td width=33%>&nbsp;</td><td width=33%>&nbsp;</td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="OodleXIOQ_OpenWriteWholeFileClose_Async.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>OodleXIOQ_OpenWriteWholeFileClose_Async</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "OodleXIOQ_OpenWriteWholeFileClose_Async.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="OodleXIOQ_OpenWriteWholeFileClose_Async.html_backmenu">
<table class=dropmenu>
<tr><td><span class='arrowleft'></span>&nbsp;<a href="javascript:show('OodleXIOQ_OpenAndReadMallocWholeFileAndClose_Async.html')" class="paragraph">OodleXIOQ_OpenAndReadMallocWholeFileAndClose_Async</a></td></tr><tr><td><span class='arrowright'></span>&nbsp;<a href="javascript:show('OodleXIOQ_OpenWriteWholeFileCloseTempName_Async.html')" class="paragraph">OodleXIOQ_OpenWriteWholeFileCloseTempName_Async</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<div class=prototype><div class=prototype_header>// Function prototype:</div><pre><span class=prototype_type><a href="javascript:show('OodleXHandle.html')" class="blue">OodleXHandle</a></span> <span class=prototype_type><a href="javascript:show('OodleXIOQ_OpenWriteWholeFileClose_Async.html')" class="blue">OodleXIOQ_OpenWriteWholeFileClose_Async</a></span>( const char * name,
const void * buffer,
OO_SINTa size,
<span class=prototype_type><a href="javascript:show('OodleXFileOpenFlags.html')" class="blue">OodleXFileOpenFlags</a></span> fileOpenFlags OODEFAULT( OodleXFileOpenFlags_Default ),
const <span class=prototype_type><a href="javascript:show('OodleXFileOpsVTable.html')" class="blue">OodleXFileOpsVTable</a></span> * vtable OODEFAULT( NULL ),
<span class=prototype_type><a href="javascript:show('OodleXHandleAutoDelete.html')" class="blue">OodleXHandleAutoDelete</a></span> autoDelete OODEFAULT( OodleXHandleAutoDelete_No ),
<span class=prototype_type><a href="javascript:show('OodleXPriority.html')" class="blue">OodleXPriority</a></span> priority OODEFAULT( OodleXPriority_Normal ),
const <span class=prototype_type><a href="javascript:show('OodleXHandle.html')" class="blue">OodleXHandle</a></span> * dependencies OODEFAULT( NULL ),
OO_S32 numDependencies OODEFAULT( 0 ) );</pre></div><div class=discussion_heading>Discussion</div>Start a high level IO request to open a file, write a buffer, and close it.<div class=discussion_heading>Parameters</div> <table> <tr> <td style='vertical-align: top;' class=paramname><a id="OodleXIOQ_OpenWriteWholeFileClose_Async.html_name" class=nohover>name</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> name of the file to open (VFS, UTF-8)
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXIOQ_OpenWriteWholeFileClose_Async.html_buffer" class=nohover>buffer</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> the buffer to write (must be <a href="javascript:show('OODLEX_IO_MAX_ALIGNMENT.html')" class="paragraph">OODLEX_IO_MAX_ALIGNMENT</a> aligned)
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXIOQ_OpenWriteWholeFileClose_Async.html_size" class=nohover>size</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> the final file size (no alignment required)
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXIOQ_OpenWriteWholeFileClose_Async.html_fileOpenFlags" class=nohover>fileOpenFlags</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> (optional) flags for the os file open (see <a href="javascript:show('OodleXFileOpenFlags.html')" class="paragraph">OodleXFileOpenFlags</a>)
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXIOQ_OpenWriteWholeFileClose_Async.html_vtable" class=nohover>vtable</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> (optional) the <a href="javascript:show('OodleXFileOpsVTable.html')" class="paragraph">OodleXFileOpsVTable</a> to use for all ops on this file
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXIOQ_OpenWriteWholeFileClose_Async.html_autoDelete" class=nohover>autoDelete</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> (optional) see <a href="javascript:show('OodleXHandleAutoDelete.html')" class="paragraph">OodleXHandleAutoDelete</a>
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXIOQ_OpenWriteWholeFileClose_Async.html_priority" class=nohover>priority</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> (optional) priority of the operation ; see <a href="javascript:show('OodleXPriority.html')" class="paragraph">OodleXPriority</a>
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXIOQ_OpenWriteWholeFileClose_Async.html_dependencies" class=nohover>dependencies</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> (optional) dependencies; the async op won't start until these are all complete; note : these are not freed, they must be autodelete or you must free them some other way.
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXIOQ_OpenWriteWholeFileClose_Async.html_numDependencies" class=nohover>numDependencies</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> (optional) number of handles in <i>deps</i> array
</td></tr></table><div class=discussion_heading>Return Value</div> <table> <tr> <td style='vertical-align: top;' class=paramname><a id="OodleXIOQ_OpenWriteWholeFileClose_Async.html_return" class=nohover>return</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> handle to the operation, or 0 if it could not be started (usually due to invalid args)
</td></tr></table><div class=discussion_heading>Discussion</div></p>
<p> High level IOQ operations are helpers built on the simpler IOQ low level ops.
</p>
<p> Performs <a href="javascript:show('OodleXIOQ_OpenForWriteCreate_Async.html')" class="paragraph">OodleXIOQ_OpenForWriteCreate_Async</a>, <a href="javascript:show('OodleXIOQ_Write_Async.html')" class="paragraph">OodleXIOQ_Write_Async</a>, and <a href="javascript:show('OodleXIOQ_CloseFile_Async.html')" class="paragraph">OodleXIOQ_CloseFile_Async</a>.
</p>
<p> You might also want to enqueue a <a href="javascript:show('OodleXIOQ_FreeBufferIOAligned_Async.html')" class="paragraph">OodleXIOQ_FreeBufferIOAligned_Async</a> after this, but it is not done for you.
See also <a href="javascript:show('Oodle_FAQ_BadWriteContents.html')" class="paragraph">FAQ: I write a file with IOQ but the contents are garbage?</a>.
</p>
<p> The <a href="javascript:show('OodleXHandle.html')" class="paragraph">OodleXHandle</a> returned is not done until the entire compound operation is done.
<br>&nbsp;<br> <table class=bar> <tr>
<td width=33% align=left><span class='arrowleft'></span><a href="javascript:show('OodleXIOQ_OpenAndReadMallocWholeFileAndClose_Async.html')" class="paragraph">OodleXIOQ_OpenAndReadMallocWholeFileAndClose_Async</a></td><td width=33% align=center><span class='arrowup'></span><a href="javascript:show('OodleXAPI_IOQ.html')" class="paragraph">OodleX low level async io</a></td><td width=33% align=right><span class='arrowright'></span><a href="javascript:show('OodleXIOQ_OpenWriteWholeFileCloseTempName_Async.html')" class="paragraph">OodleXIOQ_OpenWriteWholeFileCloseTempName_Async</a></td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="OodleXAPI_Debug.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>OodleX Debug aids</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "OodleXAPI_Debug.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="OodleXAPI_Debug.html_backmenu">
<table class=dropmenu>
<tr><td><span class='arrowleft'></span>&nbsp;<a href="javascript:show('OodleXAPI_IOQ.html')" class="paragraph">OodleX low level async io</a></td></tr><tr><td><span class='arrowup'></span>&nbsp;<a href="javascript:show('OodleExtAPI.html')" class="paragraph">Oodle2 Ext API Documentation</a></td></tr><tr><td><span class='arrowright'></span>&nbsp;<a href="javascript:show('OodleXAPI_Util.html')" class="paragraph">OodleX Utils</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<P>
Oodle API's to help with debugging and diagnostics.
</p>
<p> <p><ul class='TOCItem'>
<li><span onClick="HandleClick(event, null); return false" class='TOCGroup closedbook_icon'></span>&nbsp;Defines</li>
<ul style="display:none" class='TOCItem'>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleXLog_Printf.html')">OodleXLog_Printf</a></li>
</ul>
<li><span onClick="HandleClick(event, null); return false" class='TOCGroup closedbook_icon'></span>&nbsp;Enumerants</li>
<ul style="display:none" class='TOCItem'>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleXLog_StateFlags.html')">OodleXLog_StateFlags</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleXLog_VerboseLevel.html')">OodleXLog_VerboseLevel</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleXLogCallbackRetRet.html')">OodleXLogCallbackRetRet</a></li>
</ul>
<li><span onClick="HandleClick(event, null); return false" class='TOCGroup closedbook_icon'></span>&nbsp;Functions</li>
<ul style="display:none" class='TOCItem'>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleXLog_SetState.html')">OodleXLog_SetState</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleXLog_SetEcho.html')">OodleXLog_SetEcho</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleXLog_GetEcho.html')">OodleXLog_GetEcho</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleXLog_SetCallback.html')">OodleXLog_SetCallback</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleXLog_GetCallback.html')">OodleXLog_GetCallback</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleXLog_GetVerboseLevel.html')">OodleXLog_GetVerboseLevel</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleXLog_SetVerboseLevel.html')">OodleXLog_SetVerboseLevel</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleXLog_Flush.html')">OodleXLog_Flush</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleXLog_PrintfError.html')">OodleXLog_PrintfError</a></li>
</ul>
<li><span onClick="HandleClick(event, null); return false" class='TOCGroup closedbook_icon'></span>&nbsp;Typedefs</li>
<ul style="display:none" class='TOCItem'>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleXLogCallbackRet.html')">OodleXLogCallbackRet</a></li>
</ul>
</ul>
<br>&nbsp;<br> <table class=bar> <tr>
<td width=33% align=left><span class='arrowleft'></span><a href="javascript:show('OodleX_SetDefaultFileOps.html')" class="paragraph">OodleX_SetDefaultFileOps</a></td><td width=33% align=center><span class='arrowup'></span><a href="javascript:show('OodleExtAPI.html')" class="paragraph">Oodle2 Ext API Documentation</a></td><td width=33% align=right><span class='arrowright'></span><a href="javascript:show('OodleXLog_Printf.html')" class="paragraph">OodleXLog_Printf</a></td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="Oodle_About_Examples.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>How to build and use the Oodle examples</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "Oodle_About_Examples.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="Oodle_About_Examples.html_backmenu">
<table class=dropmenu>
<tr><td><span class='arrowup'></span>&nbsp;<a href="javascript:show('examples.html')" class="paragraph">Examples</a></td></tr><tr><td><span class='arrowright'></span>&nbsp;<a href="javascript:show('example_lz.html')" class="paragraph">example_lz : Example demonstrating LZ compression and decompression</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<P>
Oodle ships with several examples.
</p>
<p>Each file in the "examples" directory that starts with "example_" is an
independent example which can be built on its own.
</p>
<p>The Oodle examples are all console applications. So on Windows with MSVC you should
create an empty Win32 console app project to get started.
</p>
<p>To compile the examples, set your include path so that Oodle sdk include
directory is in the path (so that "oodle.h" can be found).
</p>
<p>To link the examples, you must specify one of the oodle libs. See <a href="javascript:show('Oodle_About_Platforms.html')" class="paragraph">About Oodle on Platforms</a>
for the name of the Oodle lib on your platform.
</p>
<p>To run the examples on Windows, they must be able to find the Oodle dll (distributed
in the "redist" directory). You can either run the examples in the redist directory,
or copy the Oodle dll do the directory you wish to run the examples from. It is not
advised to copy the Oodle dll into the windows system directory.
</p>
<p>The Oodle examples write log files and threadprofile logs to a directory called "c:\oodlelogs" ;
this directory will be created if it does not exist. If you want them to write to another
place (or not write any logs) you can change the example code.
</p>
<p>The examples use some default file names to find some data to work on; the content of these files is not important
and they are not distributed with Oodle. You can copy in any file of your choice to serve as
test data for the examples. Some of the examples load a file named "oodle_example_input_file" ; if this
file is not found, they will create one. You can also put your own test file in its place.
</p>
<p>Try starting with <a href="javascript:show('example_lz_simple.html')" class="paragraph">example_lz_simple : Example demonstrating very simple LZ memory->memory compression using only Oodle Core</a><br>&nbsp;<br> <table class=bar> <tr>
<td width=33% align=left><span class='arrowleft'></span><a href="javascript:show('examples.html')" class="paragraph">Examples</a></td><td width=33% align=center><span class='arrowup'></span><a href="javascript:show('examples.html')" class="paragraph">Examples</a></td><td width=33% align=right><span class='arrowright'></span><a href="javascript:show('example_lz.html')" class="paragraph">example_lz : Example demonstrating LZ compression and decompression</a></td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="OodleLZ_FillSeekTable.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>OodleLZ_FillSeekTable</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "OodleLZ_FillSeekTable.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="OodleLZ_FillSeekTable.html_backmenu">
<table class=dropmenu>
<tr><td><span class='arrowleft'></span>&nbsp;<a href="javascript:show('OodleLZ_GetSeekTableMemorySizeNeeded.html')" class="paragraph">OodleLZ_GetSeekTableMemorySizeNeeded</a></td></tr><tr><td><span class='arrowright'></span>&nbsp;<a href="javascript:show('OodleLZ_CreateSeekTable.html')" class="paragraph">OodleLZ_CreateSeekTable</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<div class=prototype><div class=prototype_header>// Function prototype:</div><pre>OO_BOOL <span class=prototype_type><a href="javascript:show('OodleLZ_FillSeekTable.html')" class="blue">OodleLZ_FillSeekTable</a></span>( <span class=prototype_type><a href="javascript:show('OodleLZ_SeekTable.html')" class="blue">OodleLZ_SeekTable</a></span> * pTable,
<span class=prototype_type><a href="javascript:show('OodleLZSeekTable_Flags.html')" class="blue">OodleLZSeekTable_Flags</a></span> flags,
OO_S32 seekChunkLen,
const void * rawBuf,
OO_SINTa rawLen,
const void * compBuf,
OO_SINTa compLen );</pre></div><div class=discussion_heading>Discussion</div>scan compressed LZ stream to fill the seek table<div class=discussion_heading>Parameters</div> <table> <tr> <td style='vertical-align: top;' class=paramname><a id="OodleLZ_FillSeekTable.html_pTable" class=nohover>pTable</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> pointer to table to be filled
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleLZ_FillSeekTable.html_flags" class=nohover>flags</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> options
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleLZ_FillSeekTable.html_seekChunkLen" class=nohover>seekChunkLen</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> the length of a seek chunk (eg from <a href="javascript:show('OodleLZ_MakeSeekChunkLen.html')" class="paragraph">OodleLZ_MakeSeekChunkLen</a>)
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleLZ_FillSeekTable.html_rawBuf" class=nohover>rawBuf</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> (optional) uncompressed buffer; used to compute the <i>rawCRCs</i> member of <a href="javascript:show('OodleLZ_SeekTable.html')" class="paragraph">OodleLZ_SeekTable</a>
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleLZ_FillSeekTable.html_rawLen" class=nohover>rawLen</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> size of rawBuf
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleLZ_FillSeekTable.html_compBuf" class=nohover>compBuf</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> compressed buffer
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleLZ_FillSeekTable.html_compLen" class=nohover>compLen</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> size of compBuf
</td></tr></table><div class=discussion_heading>Return Value</div> <table> <tr> <td style='vertical-align: top;' class=paramname><a id="OodleLZ_FillSeekTable.html_return" class=nohover>return</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> true for success
</td></tr></table><div class=discussion_heading>Discussion</div></p>
<p> <i>pTable</i> must be able to hold at least <a href="javascript:show('OodleLZ_GetSeekTableMemorySizeNeeded.html')" class="paragraph">OodleLZ_GetSeekTableMemorySizeNeeded</a>
</p>
<p> <i>seekChunkLen</i> must be a multiple of <a href="javascript:show('OODLELZ_BLOCK_LEN.html')" class="paragraph">OODLELZ_BLOCK_LEN</a>.
<i>seekChunkLen</i> must match what was in CompressOptions when the buffer was made, or any integer multiple thereof.
<br>&nbsp;<br> <table class=bar> <tr>
<td width=33% align=left><span class='arrowleft'></span><a href="javascript:show('OodleLZ_GetSeekTableMemorySizeNeeded.html')" class="paragraph">OodleLZ_GetSeekTableMemorySizeNeeded</a></td><td width=33% align=center><span class='arrowup'></span><a href="javascript:show('OodleAPI_LZ_Compressors.html')" class="paragraph">OodleAPI_LZ_Compressors</a></td><td width=33% align=right><span class='arrowright'></span><a href="javascript:show('OodleLZ_CreateSeekTable.html')" class="paragraph">OodleLZ_CreateSeekTable</a></td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="Oodle_About_Compression_Scratch_Mem.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>About Compression Scratch Memory</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "Oodle_About_Compression_Scratch_Mem.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="Oodle_About_Compression_Scratch_Mem.html_backmenu">
<table class=dropmenu>
<tr><td><span class='arrowleft'></span>&nbsp;<a href="javascript:show('Oodle_About_Job_Threading_Plugins.html')" class="paragraph">About Oodle Job Threading Plugins</a></td></tr><tr><td><span class='arrowup'></span>&nbsp;<a href="javascript:show('Oodle_About.html')" class="paragraph">About Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<P>
<h2> About Compression Scratch Memory</h2>
</p>
<p><a href="javascript:show('OodleLZ_Compress.html')" class="paragraph">OodleLZ_Compress</a> takes a "scratch memory" argument that lets the user provided a memory buffer that the compressors
can use instead of allocating their own using allocation callback.
</p>
<p>This has long been used at the lower compression levels that have fairly predictable memory usage.
Starting with Oodle 2.9.9, Optimal1 and higher levels (which use more complicated data structures that have less
predictable mmeory usage) use scratch memory much more extensively as well, which can greatly reduce the number of
large allocations performed by the encoder.
</p>
<p>In the common scenario where Oodle Data is used to compress individual chunks of &lt;=256KB, allocations can often be
avoided completely provided a large enough buffer is provided. For &lt;=256KB chunks, 32MB is usually more than sufficient
for all codecs and all compression levels. (Larger inputs or threaded/parallel encoding use cases are more complicated
and will, in general, still do allocations.) If the scratch memory is insufficient, Oodle will use regular allocations
and frees once that memory area is exhausted.
</p>
<p>The main advantage of providing scratch memory instead of letting the encoder do its own allocations is that this allows
a single large allocation to be shared over many consecutive encodes, reduction memory allocation/freeing overhead
significantly. Optimal1 and higher tend to allocate a few big data structures, and these large allocations tend to have
fairly high overhead otherwise.
</p>
<p>For the intended use case (encoding lots of small independent chunks), we've seen encoding speed-ups of around 10%
from using scratch memory when using a single thread. With many threads, the impact can be massive. On 64-core machines
running Windows (as of Jan 2023), we've seen speed-ups of over 8x from providing scratch memory instead of using the
default Windows heap, because otherwise large allocations get passed through to the kernel which then eventually serializes
on page table updates when the newly allocated memory is first accessed.<br>&nbsp;<br> <table class=bar> <tr>
<td width=33% align=left><span class='arrowleft'></span><a href="javascript:show('Oodle_About_Job_Threading_Plugins.html')" class="paragraph">About Oodle Job Threading Plugins</a></td><td width=33% align=center><span class='arrowup'></span><a href="javascript:show('Oodle_About.html')" class="paragraph">About Oodle</a></td><td width=33%>&nbsp;</td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="Oodle_CheckVersion.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>Oodle_CheckVersion</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "Oodle_CheckVersion.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="Oodle_CheckVersion.html_backmenu">
<table class=dropmenu>
<tr><td><span class='arrowleft'></span>&nbsp;<a href="javascript:show('Oodle_SetUsageWarnings.html')" class="paragraph">Oodle_SetUsageWarnings</a></td></tr><tr><td><span class='arrowright'></span>&nbsp;<a href="javascript:show('Oodle_LogHeader.html')" class="paragraph">Oodle_LogHeader</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<div class=prototype><div class=prototype_header>// Function prototype:</div><pre>OO_BOOL <span class=prototype_type><a href="javascript:show('Oodle_CheckVersion.html')" class="blue">Oodle_CheckVersion</a></span>( OO_U32 oodle_header_version,
OO_U32 * pOodleLibVersion OODEFAULT( NULL ) );</pre></div><div class=discussion_heading>Discussion</div>Check the Oodle lib version against the header you are compiling with<div class=discussion_heading>Parameters</div> <table> <tr> <td style='vertical-align: top;' class=paramname><a id="Oodle_CheckVersion.html_oodle_header_version" class=nohover>oodle_header_version</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> pass <a href="javascript:show('OODLE_HEADER_VERSION.html')" class="paragraph">OODLE_HEADER_VERSION</a> here
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="Oodle_CheckVersion.html_pOodleLibVersion" class=nohover>pOodleLibVersion</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> (optional) filled with the Oodle lib version
</td></tr></table><div class=discussion_heading>Return Value</div> <table> <tr> <td style='vertical-align: top;' class=paramname><a id="Oodle_CheckVersion.html_return" class=nohover>return</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> false if <a href="javascript:show('OODLE_HEADER_VERSION.html')" class="paragraph">OODLE_HEADER_VERSION</a> is not compatible with this lib
</td></tr></table><div class=discussion_heading>Discussion</div></p>
<p> If you use the Oodle2 Ext lib,, <a href="javascript:show('OodleX_Init.html')" class="paragraph">OodleX_Init</a> does it for you. But if you want to check that you have a
compatible lib before trying to Init, then use this.
<br>&nbsp;<br> <table class=bar> <tr>
<td width=33% align=left><span class='arrowleft'></span><a href="javascript:show('Oodle_SetUsageWarnings.html')" class="paragraph">Oodle_SetUsageWarnings</a></td><td width=33% align=center><span class='arrowup'></span><a href="javascript:show('OodleAPI_Base.html')" class="paragraph">Core Base</a></td><td width=33% align=right><span class='arrowright'></span><a href="javascript:show('Oodle_LogHeader.html')" class="paragraph">Oodle_LogHeader</a></td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="OodleLZDecoder_Create.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>OodleLZDecoder_Create</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "OodleLZDecoder_Create.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="OodleLZDecoder_Create.html_backmenu">
<table class=dropmenu>
<tr><td><span class='arrowleft'></span>&nbsp;<a href="javascript:show('OodleLZ_Decompress.html')" class="paragraph">OodleLZ_Decompress</a></td></tr><tr><td><span class='arrowright'></span>&nbsp;<a href="javascript:show('OodleLZDecoder_MemorySizeNeeded.html')" class="paragraph">OodleLZDecoder_MemorySizeNeeded</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<div class=prototype><div class=prototype_header>// Function prototype:</div><pre><span class=prototype_type><a href="javascript:show('OodleLZDecoder.html')" class="blue">OodleLZDecoder</a></span> * <span class=prototype_type><a href="javascript:show('OodleLZDecoder_Create.html')" class="blue">OodleLZDecoder_Create</a></span>( <span class=prototype_type><a href="javascript:show('OodleLZ_Compressor.html')" class="blue">OodleLZ_Compressor</a></span> compressor,
OO_S64 rawLen,
void * memory,
OO_SINTa memorySize );</pre></div><div class=discussion_heading>Discussion</div>Create a OodleLZDecoder<div class=discussion_heading>Parameters</div> <table> <tr> <td style='vertical-align: top;' class=paramname><a id="OodleLZDecoder_Create.html_compressor" class=nohover>compressor</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> the type of data you will decode; use <a href="javascript:show('OodleLZ_Compressor.html','OodleLZ_Compressor.html_OodleLZ_Compressor_Invalid')" class="paragraph">OodleLZ_Compressor_Invalid</a> if unknown
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleLZDecoder_Create.html_rawLen" class=nohover>rawLen</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> total raw bytes of the decode (or &lt;= 0 for any/unknown, but Reset for each buffer)
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleLZDecoder_Create.html_memory" class=nohover>memory</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> (optional) provide memory for the OodleLZDecoder object (not the window)
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleLZDecoder_Create.html_memorySize" class=nohover>memorySize</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> (optional) if memory is provided, this is its size in bytes
</td></tr></table><div class=discussion_heading>Return Value</div> <table> <tr> <td style='vertical-align: top;' class=paramname><a id="OodleLZDecoder_Create.html_return" class=nohover>return</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> the OodleLZDecoder
</td></tr></table><div class=discussion_heading>Discussion</div></p>
<p> If memory is provided, it must be of size <a href="javascript:show('OodleLZDecoder_MemorySizeNeeded.html')" class="paragraph">OodleLZDecoder_MemorySizeNeeded</a>. If it is NULL it will be
allocated with the malloc specified by <a href="javascript:show('OodleAPI_OodleCore_Plugins.html')" class="paragraph">Core plugins</a>.
</p>
<p> Free with <a href="javascript:show('OodleLZDecoder_Destroy.html')" class="paragraph">OodleLZDecoder_Destroy</a>. You should Destroy even if you passed in the memory.
</p>
<p> Providing <i>compressor</i> lets the OodleLZDecoder be the minimum size needed for that type of data.
If you pass <a href="javascript:show('OodleLZ_Compressor.html','OodleLZ_Compressor.html_OodleLZ_Compressor_Invalid')" class="paragraph">OodleLZ_Compressor_Invalid</a>, then any type of data may be decoded, and the Decoder is allocated
large enought to handle any of them.
</p>
<p> If you are going to pass <i>rawLen</i> to OodleLZDecoder_Reset , then you can pass 0 to <i>rawLen</i> here. To make a Decoder
to use with many buffer sizes, pass either &lt;= 0 (for infinite) or the largest buffer size you can see. Then call
Reset() with the correct buffer size before starting to decode each buffer.
</p>
<p> See <a href="javascript:show('OodleLZDecoder_DecodeSome.html')" class="paragraph">OodleLZDecoder_DecodeSome</a> for more.
<br>&nbsp;<br> <table class=bar> <tr>
<td width=33% align=left><span class='arrowleft'></span><a href="javascript:show('OodleLZ_Decompress.html')" class="paragraph">OodleLZ_Decompress</a></td><td width=33% align=center><span class='arrowup'></span><a href="javascript:show('OodleAPI_LZ_Compressors.html')" class="paragraph">OodleAPI_LZ_Compressors</a></td><td width=33% align=right><span class='arrowright'></span><a href="javascript:show('OodleLZDecoder_MemorySizeNeeded.html')" class="paragraph">OodleLZDecoder_MemorySizeNeeded</a></td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="OodleCoreAPI.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>Oodle2 Core API Documentation</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "OodleCoreAPI.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="OodleCoreAPI.html_backmenu">
<table class=dropmenu>
<tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<ul class='TOCItem'>
<li><span onClick="HandleClick(event, null); return false" class='TOCGroup closedbook_icon'></span>&nbsp;<a href="javascript:show('OodleAPI_Base.html')">Core Base</a></li>
<ul style="display:none" class='TOCItem'>
<li><span onClick="HandleClick(event, null); return false" class='TOCGroup closedbook_icon'></span>&nbsp;Defines</li>
<ul style="display:none" class='TOCItem'>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OODLE_MALLOC_MINIMUM_ALIGNMENT.html')">OODLE_MALLOC_MINIMUM_ALIGNMENT</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OODLE_JOB_MAX_DEPENDENCIES.html')">OODLE_JOB_MAX_DEPENDENCIES</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OODLE_JOB_NULL_HANDLE.html')">OODLE_JOB_NULL_HANDLE</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('t_fp_Oodle_Job.html')">t_fp_Oodle_Job</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OODLE_HEADER_VERSION.html')">OODLE_HEADER_VERSION</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleNetworkVersion.html')">OodleNetworkVersion</a></li>
</ul>
<li><span onClick="HandleClick(event, null); return false" class='TOCGroup closedbook_icon'></span>&nbsp;Enumerants</li>
<ul style="display:none" class='TOCItem'>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('Oodle_UsageWarnings.html')">Oodle_UsageWarnings</a></li>
</ul>
<li><span onClick="HandleClick(event, null); return false" class='TOCGroup closedbook_icon'></span>&nbsp;Structures</li>
<ul style="display:none" class='TOCItem'>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleConfigValues.html')">OodleConfigValues</a></li>
</ul>
<li><span onClick="HandleClick(event, null); return false" class='TOCGroup closedbook_icon'></span>&nbsp;Functions</li>
<ul style="display:none" class='TOCItem'>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('Oodle_GetConfigValues.html')">Oodle_GetConfigValues</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('Oodle_SetConfigValues.html')">Oodle_SetConfigValues</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('Oodle_SetUsageWarnings.html')">Oodle_SetUsageWarnings</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('Oodle_CheckVersion.html')">Oodle_CheckVersion</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('Oodle_LogHeader.html')">Oodle_LogHeader</a></li>
</ul>
<li><span onClick="HandleClick(event, null); return false" class='TOCGroup closedbook_icon'></span>&nbsp;Typedefs</li>
<ul style="display:none" class='TOCItem'>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('t_OodleFPVoidVoid.html')">t_OodleFPVoidVoid</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('t_OodleFPVoidVoidStar.html')">t_OodleFPVoidVoidStar</a></li>
</ul>
</ul>
<li><span onClick="HandleClick(event, null); return false" class='TOCGroup closedbook_icon'></span>&nbsp;<a href="javascript:show('OodleAPI_OodleCore_Plugins.html')">Core plugins</a></li>
<ul style="display:none" class='TOCItem'>
<li><span onClick="HandleClick(event, null); return false" class='TOCGroup closedbook_icon'></span>&nbsp;Functions</li>
<ul style="display:none" class='TOCItem'>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleCore_Plugins_SetAllocators.html')">OodleCore_Plugins_SetAllocators</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleCore_Plugins_SetJobSystem.html')">OodleCore_Plugins_SetJobSystem</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleCore_Plugins_SetJobSystemAndCount.html')">OodleCore_Plugins_SetJobSystemAndCount</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleCore_Plugins_SetPrintf.html')">OodleCore_Plugins_SetPrintf</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleCore_Plugins_SetAssertion.html')">OodleCore_Plugins_SetAssertion</a></li>
</ul>
<li><span onClick="HandleClick(event, null); return false" class='TOCGroup closedbook_icon'></span>&nbsp;Typedefs</li>
<ul style="display:none" class='TOCItem'>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('t_fp_OodleCore_Plugin_MallocAligned.html')">t_fp_OodleCore_Plugin_MallocAligned</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('t_fp_OodleCore_Plugin_Free.html')">t_fp_OodleCore_Plugin_Free</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('t_fp_OodleCore_Plugin_RunJob.html')">t_fp_OodleCore_Plugin_RunJob</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('t_fp_OodleCore_Plugin_WaitJob.html')">t_fp_OodleCore_Plugin_WaitJob</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('t_fp_OodleCore_Plugin_Printf.html')">t_fp_OodleCore_Plugin_Printf</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('t_fp_OodleCore_Plugin_DisplayAssertion.html')">t_fp_OodleCore_Plugin_DisplayAssertion</a></li>
</ul>
</ul>
<li><span onClick="HandleClick(event, null); return false" class='TOCGroup closedbook_icon'></span>&nbsp;<a href="javascript:show('OodleAPI_LZ.html')">Core LZ compression</a></li>
<ul style="display:none" class='TOCItem'>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleLZ_About.html')">About OodleLZ</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleLZ_About_ThreadPhasedDecode.html')">About OodleLZ ThreadPhased Decode</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleLZ_About_Hydra.html')">About OodleLZ Hydra</a></li>
<li><span onClick="HandleClick(event, null); return false" class='TOCGroup closedbook_icon'></span>&nbsp;<a href="javascript:show('OodleAPI_LZ_Compressors.html')">OodleAPI_LZ_Compressors</a></li>
<ul style="display:none" class='TOCItem'>
<li><span onClick="HandleClick(event, null); return false" class='TOCGroup closedbook_icon'></span>&nbsp;Defines</li>
<ul style="display:none" class='TOCItem'>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OODLE_ALLOW_DEPRECATED_COMPRESSORS.html')">OODLE_ALLOW_DEPRECATED_COMPRESSORS</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OODLELZ_LOCALDICTIONARYSIZE_MAX.html')">OODLELZ_LOCALDICTIONARYSIZE_MAX</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OODLELZ_SPACESPEEDTRADEOFFBYTES_DEFAULT.html')">OODLELZ_SPACESPEEDTRADEOFFBYTES_DEFAULT</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OODLELZ_BLOCK_LEN.html')">OODLELZ_BLOCK_LEN</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OODLELZ_BLOCK_MAX_COMPLEN.html')">OODLELZ_BLOCK_MAX_COMPLEN</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OODLELZ_QUANTUM_LEN.html')">OODLELZ_QUANTUM_LEN</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OODLELZ_FAILED.html')">OODLELZ_FAILED</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OODLELZ_SCRATCH_MEM_NO_BOUND.html')">OODLELZ_SCRATCH_MEM_NO_BOUND</a></li>
</ul>
<li><span onClick="HandleClick(event, null); return false" class='TOCGroup closedbook_icon'></span>&nbsp;Enumerants</li>
<ul style="display:none" class='TOCItem'>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleLZ_Verbosity.html')">OodleLZ_Verbosity</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleLZ_Compressor.html')">OodleLZ_Compressor</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleLZ_PackedRawOverlap.html')">OodleLZ_PackedRawOverlap</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleLZ_CheckCRC.html')">OodleLZ_CheckCRC</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleLZ_Profile.html')">OodleLZ_Profile</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleDecompressCallbackRet.html')">OodleDecompressCallbackRet</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleLZ_CompressionLevel.html')">OodleLZ_CompressionLevel</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleLZ_Jobify.html')">OodleLZ_Jobify</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleLZ_Decode_ThreadPhase.html')">OodleLZ_Decode_ThreadPhase</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleLZ_FuzzSafe.html')">OodleLZ_FuzzSafe</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleLZSeekTable_Flags.html')">OodleLZSeekTable_Flags</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleLZ_CompressScratchMemBoundType.html')">OodleLZ_CompressScratchMemBoundType</a></li>
</ul>
<li><span onClick="HandleClick(event, null); return false" class='TOCGroup closedbook_icon'></span>&nbsp;Structures</li>
<ul style="display:none" class='TOCItem'>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleLZ_CompressOptions.html')">OodleLZ_CompressOptions</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleLZ_DecodeSome_Out.html')">OodleLZ_DecodeSome_Out</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleLZDecoder.html')">OodleLZDecoder</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleLZ_SeekTable.html')">OodleLZ_SeekTable</a></li>
</ul>
<li><span onClick="HandleClick(event, null); return false" class='TOCGroup closedbook_icon'></span>&nbsp;Functions</li>
<ul style="display:none" class='TOCItem'>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleLZ_Compress.html')">OodleLZ_Compress</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleLZ_Decompress.html')">OodleLZ_Decompress</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleLZDecoder_Create.html')">OodleLZDecoder_Create</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleLZDecoder_MemorySizeNeeded.html')">OodleLZDecoder_MemorySizeNeeded</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleLZ_ThreadPhased_BlockDecoderMemorySizeNeeded.html')">OodleLZ_ThreadPhased_BlockDecoderMemorySizeNeeded</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleLZDecoder_Destroy.html')">OodleLZDecoder_Destroy</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleLZDecoder_Reset.html')">OodleLZDecoder_Reset</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleLZDecoder_DecodeSome.html')">OodleLZDecoder_DecodeSome</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleLZDecoder_MakeValidCircularWindowSize.html')">OodleLZDecoder_MakeValidCircularWindowSize</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleLZ_MakeSeekChunkLen.html')">OodleLZ_MakeSeekChunkLen</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleLZ_GetNumSeekChunks.html')">OodleLZ_GetNumSeekChunks</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleLZ_GetSeekTableMemorySizeNeeded.html')">OodleLZ_GetSeekTableMemorySizeNeeded</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleLZ_FillSeekTable.html')">OodleLZ_FillSeekTable</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleLZ_CreateSeekTable.html')">OodleLZ_CreateSeekTable</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleLZ_FreeSeekTable.html')">OodleLZ_FreeSeekTable</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleLZ_CheckSeekTableCRCs.html')">OodleLZ_CheckSeekTableCRCs</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleLZ_FindSeekEntry.html')">OodleLZ_FindSeekEntry</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleLZ_GetSeekEntryPackedPos.html')">OodleLZ_GetSeekEntryPackedPos</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleLZ_CompressionLevel_GetName.html')">OodleLZ_CompressionLevel_GetName</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleLZ_Compressor_GetName.html')">OodleLZ_Compressor_GetName</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleLZ_Jobify_GetName.html')">OodleLZ_Jobify_GetName</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleLZ_CompressOptions_GetDefault.html')">OodleLZ_CompressOptions_GetDefault</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleLZ_CompressOptions_Validate.html')">OodleLZ_CompressOptions_Validate</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleLZ_Compressor_UsesWholeBlockQuantum.html')">OodleLZ_Compressor_UsesWholeBlockQuantum</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleLZ_Compressor_UsesLargeWindow.html')">OodleLZ_Compressor_UsesLargeWindow</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleLZ_Compressor_CanDecodeInCircularWindow.html')">OodleLZ_Compressor_CanDecodeInCircularWindow</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleLZ_Compressor_CanDecodeThreadPhased.html')">OodleLZ_Compressor_CanDecodeThreadPhased</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleLZ_Compressor_CanDecodeInPlace.html')">OodleLZ_Compressor_CanDecodeInPlace</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleLZ_Compressor_MustDecodeWithoutResets.html')">OodleLZ_Compressor_MustDecodeWithoutResets</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleLZ_Compressor_CanDecodeFuzzSafe.html')">OodleLZ_Compressor_CanDecodeFuzzSafe</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleLZ_Compressor_RespectsDictionarySize.html')">OodleLZ_Compressor_RespectsDictionarySize</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleLZ_GetCompressScratchMemBound.html')">OodleLZ_GetCompressScratchMemBound</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleLZ_GetCompressScratchMemBoundEx.html')">OodleLZ_GetCompressScratchMemBoundEx</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleLZ_GetCompressedBufferSizeNeeded.html')">OodleLZ_GetCompressedBufferSizeNeeded</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleLZ_GetDecodeBufferSize.html')">OodleLZ_GetDecodeBufferSize</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleLZ_GetInPlaceDecodeBufferSize.html')">OodleLZ_GetInPlaceDecodeBufferSize</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleLZ_GetCompressedStepForRawStep.html')">OodleLZ_GetCompressedStepForRawStep</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleLZ_GetAllChunksCompressor.html')">OodleLZ_GetAllChunksCompressor</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleLZ_GetFirstChunkCompressor.html')">OodleLZ_GetFirstChunkCompressor</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleLZ_GetChunkCompressor.html')">OodleLZ_GetChunkCompressor</a></li>
</ul>
<li><span onClick="HandleClick(event, null); return false" class='TOCGroup closedbook_icon'></span>&nbsp;Typedefs</li>
<ul style="display:none" class='TOCItem'>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleDecompressCallback.html')">OodleDecompressCallback</a></li>
</ul>
</ul>
</ul>
</ul>
<br>&nbsp;<br> <table class=bar> <tr>
<td width=33%>&nbsp;</td><td width=33%>&nbsp;</td><td width=33% align=right><span class='arrowright'></span><a href="javascript:show('OodleAPI_Base.html')" class="paragraph">Core Base</a></td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="OODLEX_FILEINFO_MODTIME_INVALID.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>OODLEX_FILEINFO_MODTIME_INVALID</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "OODLEX_FILEINFO_MODTIME_INVALID.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="OODLEX_FILEINFO_MODTIME_INVALID.html_backmenu">
<table class=dropmenu>
<tr><td><span class='arrowleft'></span>&nbsp;<a href="javascript:show('OODLEX_FILEINFO_FLAG_INVALID.html')" class="paragraph">OODLEX_FILEINFO_FLAG_INVALID</a></td></tr><tr><td><span class='arrowright'></span>&nbsp;<a href="javascript:show('OODLEX_FILE_SIZE_INVALID.html')" class="paragraph">OODLEX_FILE_SIZE_INVALID</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<div class=prototype><div class=prototype_header>// Preprocessor definition:</div><pre><span class=prototype_type>#define</span> <a href="javascript:show('OODLEX_FILEINFO_MODTIME_INVALID.html')">OODLEX_FILEINFO_MODTIME_INVALID</a> ((OO_U64)-1)</pre></div><div class=discussion_heading>Discussion</div> Invalid value for <a href="javascript:show('OodleXFileInfo.html','OodleXFileInfo.html_modTime')" class="paragraph">OodleXFileInfo:modTime</a> <br>&nbsp;<br> <table class=bar> <tr>
<td width=33% align=left><span class='arrowleft'></span><a href="javascript:show('OODLEX_FILEINFO_FLAG_INVALID.html')" class="paragraph">OODLEX_FILEINFO_FLAG_INVALID</a></td><td width=33% align=center><span class='arrowup'></span><a href="javascript:show('OodleXAPI_IOQ.html')" class="paragraph">OodleX low level async io</a></td><td width=33% align=right><span class='arrowright'></span><a href="javascript:show('OODLEX_FILE_SIZE_INVALID.html')" class="paragraph">OODLEX_FILE_SIZE_INVALID</a></td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="OODLELZ_SCRATCH_MEM_NO_BOUND.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>OODLELZ_SCRATCH_MEM_NO_BOUND</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "OODLELZ_SCRATCH_MEM_NO_BOUND.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="OODLELZ_SCRATCH_MEM_NO_BOUND.html_backmenu">
<table class=dropmenu>
<tr><td><span class='arrowleft'></span>&nbsp;<a href="javascript:show('OODLELZ_FAILED.html')" class="paragraph">OODLELZ_FAILED</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<div class=prototype><div class=prototype_header>// Preprocessor definition:</div><pre><span class=prototype_type>#define</span> <a href="javascript:show('OODLELZ_SCRATCH_MEM_NO_BOUND.html')">OODLELZ_SCRATCH_MEM_NO_BOUND</a> (-1)</pre></div><div class=discussion_heading>Discussion</div> Scratch mem size when bound is unknown.
Installed allocator may be used no matter how much scratch mem you provide.
<br>&nbsp;<br> <table class=bar> <tr>
<td width=33% align=left><span class='arrowleft'></span><a href="javascript:show('OODLELZ_FAILED.html')" class="paragraph">OODLELZ_FAILED</a></td><td width=33% align=center><span class='arrowup'></span><a href="javascript:show('OodleAPI_LZ_Compressors.html')" class="paragraph">OodleAPI_LZ_Compressors</a></td><td width=33% align=right><span class='arrowright'></span><a href="javascript:show('OodleLZ_Verbosity.html')" class="paragraph">OodleLZ_Verbosity</a></td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="OodleNetwork1_SelectDictionaryFromPackets_Trials.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>OodleNetwork1_SelectDictionaryFromPackets_Trials</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "OodleNetwork1_SelectDictionaryFromPackets_Trials.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="OodleNetwork1_SelectDictionaryFromPackets_Trials.html_backmenu">
<table class=dropmenu>
<tr><td><span class='arrowleft'></span>&nbsp;<a href="javascript:show('OodleNetwork1_SelectDictionaryFromPackets.html')" class="paragraph">OodleNetwork1_SelectDictionaryFromPackets</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<div class=prototype><div class=prototype_header>// Function prototype:</div><pre>OO_BOOL <span class=prototype_type><a href="javascript:show('OodleNetwork1_SelectDictionaryFromPackets_Trials.html')" class="blue">OodleNetwork1_SelectDictionaryFromPackets_Trials</a></span>( void * dictionary_to_fill,
OO_S32 dictionary_size,
OO_S32 htbits,
const void * * dictionary_packet_pointers,
const OO_S32 * dictionary_packet_sizes,
OO_S32 num_dictionary_packets,
const void * * test_packet_pointers,
const OO_S32 * test_packet_sizes,
OO_S32 num_test_packets,
OO_S32 num_trials,
double randomness_percent,
OO_S32 num_generations );</pre></div><div class=discussion_heading>Discussion</div>Multi-Trial variant of <a href="javascript:show('OodleNetwork1_SelectDictionaryFromPackets.html')" class="paragraph">OodleNetwork1_SelectDictionaryFromPackets</a><div class=discussion_heading>Parameters</div> <table> <tr> <td style='vertical-align: top;' class=paramname><a id="OodleNetwork1_SelectDictionaryFromPackets_Trials.html_num_trials" class=nohover>num_trials</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> number of trials per generation; 5-20 is a good starting range
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleNetwork1_SelectDictionaryFromPackets_Trials.html_randomness_percent" class=nohover>randomness_percent</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> randomness of trials; this is a percent of standard, 100 is a good default; 50-200 is a useful range
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleNetwork1_SelectDictionaryFromPackets_Trials.html_num_generations" class=nohover>num_generations</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> number of generations; 1 is fine, more is slower
</td></tr></table><div class=discussion_heading>Return Value</div> <table> <tr> <td style='vertical-align: top;' class=paramname><a id="OodleNetwork1_SelectDictionaryFromPackets_Trials.html_return" class=nohover>return</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> true on success, false otherwise.
</td></tr></table><div class=discussion_heading>Discussion</div></p>
<p> This function runs the packet selector of <a href="javascript:show('OodleNetwork1_SelectDictionaryFromPackets.html')" class="paragraph">OodleNetwork1_SelectDictionaryFromPackets</a>
repeatedly with some randomness. Variation of packet selection can sometimes give
slightly better dictionaries.
</p>
<p> The success of the trial is measured on the "test_packet" set. Make sure that the
"dictionary_packet" set are independently randomly drawn from the packet source data
wrst the "test_packet" set so that over-training degeneracies are not created.
</p>
<p> On platforms where <a href="javascript:show('OodleNetwork1_SelectDictionarySupported.html')" class="paragraph">OodleNetwork1_SelectDictionarySupported</a> returns false, this
function is not supported.
</p>
<p> It's advised to run this function in 64-bit, as it can use a lot of memory.
<br>&nbsp;<br> <table class=bar> <tr>
<td width=33% align=left><span class='arrowleft'></span><a href="javascript:show('OodleNetwork1_SelectDictionaryFromPackets.html')" class="paragraph">OodleNetwork1_SelectDictionaryFromPackets</a></td><td width=33% align=center><span class='arrowup'></span><a href="javascript:show('OodleAPI_OodleNetwork1.html')" class="paragraph">OodleAPI_OodleNetwork1</a></td><td width=33% align=right><span class='arrowright'></span><a href="javascript:show('OodleNetwork_About.html')" class="paragraph">About Oodle Network Compression</a></td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="OodleXLog_Printf.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>OodleXLog_Printf</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "OodleXLog_Printf.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="OodleXLog_Printf.html_backmenu">
<table class=dropmenu>
<tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<div class=prototype><div class=prototype_header>// Preprocessor definition:</div><pre><span class=prototype_type>#define</span> <a href="javascript:show('OodleXLog_Printf.html')">OodleXLog_Printf</a> OodleXLog_Printf_Raw(verboseLevel,__FILE__,__LINE__,##__VA_ARGS__)</pre></div><div class=discussion_heading>Discussion</div> OodleXLog_Printf lets you write to Oodle's log.<div class=discussion_heading>Discussion</div> Use like printf : OodleXLog_Printf(verbose,fmt,arg1,arg2,...)
</p>
<p> What kind of output is produced from this depends on the bit flags set in <a href="javascript:show('OodleXLog_SetState.html')" class="paragraph">OodleXLog_SetState</a>.
</p>
<p> If the global verbose level set by <a href="javascript:show('OodleXLog_SetVerboseLevel.html')" class="paragraph">OodleXLog_SetVerboseLevel</a> is &lt; <i>verboseLevel passed here,
the message is supressed.
</i></p>
<p> OodleXLog_Printf_vN(fmt,...) is the same as OodleXLog_Printf(N,fmt,...)
<br>&nbsp;<br> <table class=bar> <tr>
<td width=33% align=left><span class='arrowleft'></span><a href="javascript:show('OodleXAPI_Debug.html')" class="paragraph">OodleX Debug aids</a></td><td width=33% align=center><span class='arrowup'></span><a href="javascript:show('OodleXAPI_Debug.html')" class="paragraph">OodleX Debug aids</a></td><td width=33% align=right><span class='arrowright'></span><a href="javascript:show('OodleXLog_StateFlags.html')" class="paragraph">OodleXLog_StateFlags</a></td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="OODLEX_ASYNC_HANDLE_ERROR.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>OODLEX_ASYNC_HANDLE_ERROR</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "OODLEX_ASYNC_HANDLE_ERROR.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="OODLEX_ASYNC_HANDLE_ERROR.html_backmenu">
<table class=dropmenu>
<tr><td><span class='arrowleft'></span>&nbsp;<a href="javascript:show('OODLEX_ASYNC_HANDLE_DONE.html')" class="paragraph">OODLEX_ASYNC_HANDLE_DONE</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<div class=prototype><div class=prototype_header>// Preprocessor definition:</div><pre><span class=prototype_type>#define</span> <a href="javascript:show('OODLEX_ASYNC_HANDLE_ERROR.html')">OODLEX_ASYNC_HANDLE_ERROR</a> ((<span class=prototype_type><a href="javascript:show('OodleXHandle.html')" class="blue">OodleXHandle</a></span>)0x0000000200000001ULL)</pre></div><div class=discussion_heading>Discussion</div> OodleXHandle to a special always-error handle.
Calls to <a href="javascript:show('OodleX_GetStatus.html')" class="paragraph">OodleX_GetStatus</a> on this handle value will return &amp;OodleXStatus_Error.
This handle must not be deleted! Do not call <a href="javascript:show('OodleX_Wait.html')" class="paragraph">OodleX_Wait</a> on it with deleteIfDone = true.
<br>&nbsp;<br> <table class=bar> <tr>
<td width=33% align=left><span class='arrowleft'></span><a href="javascript:show('OODLEX_ASYNC_HANDLE_DONE.html')" class="paragraph">OODLEX_ASYNC_HANDLE_DONE</a></td><td width=33% align=center><span class='arrowup'></span><a href="javascript:show('OodleXAPI_Handle.html')" class="paragraph">OodleX async handle operations</a></td><td width=33% align=right><span class='arrowright'></span><a href="javascript:show('OodleXPriority.html')" class="paragraph">OodleXPriority</a></td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="OodleXIOQ_ReadMallocWholeFile_GetResult.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>OodleXIOQ_ReadMallocWholeFile_GetResult</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "OodleXIOQ_ReadMallocWholeFile_GetResult.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="OodleXIOQ_ReadMallocWholeFile_GetResult.html_backmenu">
<table class=dropmenu>
<tr><td><span class='arrowleft'></span>&nbsp;<a href="javascript:show('OodleXIOQ_ReadMallocWholeFile_Async.html')" class="paragraph">OodleXIOQ_ReadMallocWholeFile_Async</a></td></tr><tr><td><span class='arrowright'></span>&nbsp;<a href="javascript:show('OodleXIOQ_OpenAndReadMallocWholeFile_Async.html')" class="paragraph">OodleXIOQ_OpenAndReadMallocWholeFile_Async</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<div class=prototype><div class=prototype_header>// Function prototype:</div><pre><span class=prototype_type><a href="javascript:show('OodleXStatus.html')" class="blue">OodleXStatus</a></span> <span class=prototype_type><a href="javascript:show('OodleXIOQ_ReadMallocWholeFile_GetResult.html')" class="blue">OodleXIOQ_ReadMallocWholeFile_GetResult</a></span>( <span class=prototype_type><a href="javascript:show('OodleXHandle.html')" class="blue">OodleXHandle</a></span> req,
<span class=prototype_type><a href="javascript:show('OodleXHandleDeleteIfDone.html')" class="blue">OodleXHandleDeleteIfDone</a></span> andDeleteIfDone,
void * * pPtr,
OO_S64 * pSize OODEFAULT( NULL ) );</pre></div><div class=discussion_heading>Discussion</div>Finish a <a href="javascript:show('OodleXIOQ_ReadMallocWholeFile_Async.html')" class="paragraph">OodleXIOQ_ReadMallocWholeFile_Async</a> request<div class=discussion_heading>Parameters</div> <table> <tr> <td style='vertical-align: top;' class=paramname><a id="OodleXIOQ_ReadMallocWholeFile_GetResult.html_req" class=nohover>req</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> the OodleXHandle to the OodleXIOQ_ReadMallocWholeFile_Async request
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXIOQ_ReadMallocWholeFile_GetResult.html_andDeleteIfDone" class=nohover>andDeleteIfDone</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> if true and the returned status is >= Done the handle will be deleted
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXIOQ_ReadMallocWholeFile_GetResult.html_pPtr" class=nohover>pPtr</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> filled out with the buffer allocated by OodleXIOQ_ReadMallocWholeFile_Async
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXIOQ_ReadMallocWholeFile_GetResult.html_pSize" class=nohover>pSize</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> (optional) filled with the file size
</td></tr></table><div class=discussion_heading>Return Value</div> <table> <tr> <td style='vertical-align: top;' class=paramname><a id="OodleXIOQ_ReadMallocWholeFile_GetResult.html_return" class=nohover>return</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> the status ; if &lt;= OodleXStatus_Pending , result pointers are set to null
</td></tr></table><div class=discussion_heading>Discussion</div></p>
<p> OodleXIOQ_ReadMallocWholeFile_GetResult does NOT wait on the handle.
</p>
<p> See <a href="javascript:show('OodleXIOQ_ReadMallocWholeFile_Async.html')" class="paragraph">OodleXIOQ_ReadMallocWholeFile_Async</a>
<br>&nbsp;<br> <table class=bar> <tr>
<td width=33% align=left><span class='arrowleft'></span><a href="javascript:show('OodleXIOQ_ReadMallocWholeFile_Async.html')" class="paragraph">OodleXIOQ_ReadMallocWholeFile_Async</a></td><td width=33% align=center><span class='arrowup'></span><a href="javascript:show('OodleXAPI_IOQ.html')" class="paragraph">OodleX low level async io</a></td><td width=33% align=right><span class='arrowright'></span><a href="javascript:show('OodleXIOQ_OpenAndReadMallocWholeFile_Async.html')" class="paragraph">OodleXIOQ_OpenAndReadMallocWholeFile_Async</a></td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="Oodle_About_Mac.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>About Oodle on Mac</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "Oodle_About_Mac.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="Oodle_About_Mac.html_backmenu">
<table class=dropmenu>
<tr><td><span class='arrowleft'></span>&nbsp;<a href="javascript:show('Oodle_About_Switch.html')" class="paragraph">About Oodle on Nintendo Switch</a></td></tr><tr><td><span class='arrowup'></span>&nbsp;<a href="javascript:show('Oodle_About_Platforms.html')" class="paragraph">About Oodle on Platforms</a></td></tr><tr><td><span class='arrowright'></span>&nbsp;<a href="javascript:show('Oodle_About_XboxOne.html')" class="paragraph">About Oodle on Xbox One</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<P>
Oodle2 for Mac is provided as a shared library. (change in 2.5.1 : static libraries now provided as well)
</p>
<p><div class=prototype>
<PRE>
lib/liboo2coremac.version.dylib
lib/liboo2coremac64.version.dylib
lib/liboo2extmac.version.dylib
lib/liboo2extmac64.version.dylib
</PRE>
</div>
</p>
<p>Where "version" is the current Oodle version (2.9.14).
</p>
<p>Oodle for Mac is provided in 32 and 64 bit builds.
</p>
<p>The debug build of the Oodle lib is also provided. Generally the release build of Oodle should be linked with all versions of your game (do not link the debug build of Oodle with the
debug build of your game typically). The debug build of Oodle is provided to help you track down problems.
</p>
<p><hr>
</p>
<p>OodleX for Mac tries to write a log file to "/var/log/oodle/" by default. If you don't want this, you
may disable logging or change the log location in <a href="javascript:show('OodleXInitOptions.html')" class="paragraph">OodleXInitOptions</a>. On most systems, Oodle will fail to
create the "oodle" subdir in "var/log/" due to lack of permissions; you must create that dir for Oodle.
When Oodle fails to write the log to the desired location, it will instead write it to "." (current directory).<br>&nbsp;<br> <table class=bar> <tr>
<td width=33% align=left><span class='arrowleft'></span><a href="javascript:show('Oodle_About_Switch.html')" class="paragraph">About Oodle on Nintendo Switch</a></td><td width=33% align=center><span class='arrowup'></span><a href="javascript:show('Oodle_About_Platforms.html')" class="paragraph">About Oodle on Platforms</a></td><td width=33% align=right><span class='arrowright'></span><a href="javascript:show('Oodle_About_XboxOne.html')" class="paragraph">About Oodle on Xbox One</a></td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="OODLE_WORKERS_COUNT_ALL_HYPER_CORES.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>OODLE_WORKERS_COUNT_ALL_HYPER_CORES</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "OODLE_WORKERS_COUNT_ALL_HYPER_CORES.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="OODLE_WORKERS_COUNT_ALL_HYPER_CORES.html_backmenu">
<table class=dropmenu>
<tr><td><span class='arrowleft'></span>&nbsp;<a href="javascript:show('OODLE_WORKERS_COUNT_ALL_PHYSICAL_CORES.html')" class="paragraph">OODLE_WORKERS_COUNT_ALL_PHYSICAL_CORES</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<div class=prototype><div class=prototype_header>// Preprocessor definition:</div><pre><span class=prototype_type>#define</span> <a href="javascript:show('OODLE_WORKERS_COUNT_ALL_HYPER_CORES.html')">OODLE_WORKERS_COUNT_ALL_HYPER_CORES</a> (-2)</pre></div><div class=discussion_heading>Discussion</div> Make workers for every hyper-thread
eg. in a 6-physical core, 12-hyper-thread system, would make 12 threads
this is usually best for Oodle Texture work
See also <a href="javascript:show('OODLE_WORKERS_COUNT_ALL_PHYSICAL_CORES.html')" class="paragraph">OODLE_WORKERS_COUNT_ALL_PHYSICAL_CORES</a>
<br>&nbsp;<br> <table class=bar> <tr>
<td width=33% align=left><span class='arrowleft'></span><a href="javascript:show('OODLE_WORKERS_COUNT_ALL_PHYSICAL_CORES.html')" class="paragraph">OODLE_WORKERS_COUNT_ALL_PHYSICAL_CORES</a></td><td width=33% align=center><span class='arrowup'></span><a href="javascript:show('OodleXAPI_Init.html')" class="paragraph">OodleX Startup and Shutdown</a></td><td width=33% align=right><span class='arrowright'></span><a href="javascript:show('OodleX_Init_GetDefaults_DebugSystems.html')" class="paragraph">OodleX_Init_GetDefaults_DebugSystems</a></td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="OodleXIOQ_GetErrorDetails.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>OodleXIOQ_GetErrorDetails</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "OodleXIOQ_GetErrorDetails.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="OodleXIOQ_GetErrorDetails.html_backmenu">
<table class=dropmenu>
<tr><td><span class='arrowleft'></span>&nbsp;<a href="javascript:show('OodleXIOQ_GetStatus.html')" class="paragraph">OodleXIOQ_GetStatus</a></td></tr><tr><td><span class='arrowright'></span>&nbsp;<a href="javascript:show('OodleXIOQ_GetErrorEnum.html')" class="paragraph">OodleXIOQ_GetErrorEnum</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<div class=prototype><div class=prototype_header>// Function prototype:</div><pre>OO_BOOL <span class=prototype_type><a href="javascript:show('OodleXIOQ_GetErrorDetails.html')" class="blue">OodleXIOQ_GetErrorDetails</a></span>( OO_U32 code,
<span class=prototype_type><a href="javascript:show('OodleXIOQFile.html')" class="blue">OodleXIOQFile</a></span> file,
char * pMessage,
int messageSize );</pre></div><div class=discussion_heading>Discussion</div>Convert an OS error code into a text message<div class=discussion_heading>Parameters</div> <table> <tr> <td style='vertical-align: top;' class=paramname><a id="OodleXIOQ_GetErrorDetails.html_code" class=nohover>code</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> the error code, eg. from <a href="javascript:show('OodleXIOQ_GetStatus.html')" class="paragraph">OodleXIOQ_GetStatus</a>
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXIOQ_GetErrorDetails.html_file" class=nohover>file</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> the file that the error occurred on (or 0 for unknown)
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXIOQ_GetErrorDetails.html_pMessage" class=nohover>pMessage</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> pointer to a text buffer that will be filled out
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXIOQ_GetErrorDetails.html_messageSize" class=nohover>messageSize</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> number of bytes in the text buffer
</td></tr></table><div class=discussion_heading>Return Value</div> <table> <tr> <td style='vertical-align: top;' class=paramname><a id="OodleXIOQ_GetErrorDetails.html_return" class=nohover>return</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> bool for success/failure
</td></tr></table><div class=discussion_heading>Discussion</div></p>
<p> fills out pMessage with a text description of the error (if available).
<br>&nbsp;<br> <table class=bar> <tr>
<td width=33% align=left><span class='arrowleft'></span><a href="javascript:show('OodleXIOQ_GetStatus.html')" class="paragraph">OodleXIOQ_GetStatus</a></td><td width=33% align=center><span class='arrowup'></span><a href="javascript:show('OodleXAPI_IOQ.html')" class="paragraph">OodleX low level async io</a></td><td width=33% align=right><span class='arrowright'></span><a href="javascript:show('OodleXIOQ_GetErrorEnum.html')" class="paragraph">OodleXIOQ_GetErrorEnum</a></td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="t_fp_Oodle_Job.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>t_fp_Oodle_Job</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "t_fp_Oodle_Job.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="t_fp_Oodle_Job.html_backmenu">
<table class=dropmenu>
<tr><td><span class='arrowleft'></span>&nbsp;<a href="javascript:show('OODLE_JOB_NULL_HANDLE.html')" class="paragraph">OODLE_JOB_NULL_HANDLE</a></td></tr><tr><td><span class='arrowright'></span>&nbsp;<a href="javascript:show('OODLE_HEADER_VERSION.html')" class="paragraph">OODLE_HEADER_VERSION</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<div class=prototype><div class=prototype_header>// Preprocessor definition:</div><pre><span class=prototype_type>#define</span> <a href="javascript:show('t_fp_Oodle_Job.html')">t_fp_Oodle_Job</a> <span class=prototype_type><a href="javascript:show('t_OodleFPVoidVoidStar.html')" class="blue">t_OodleFPVoidVoidStar</a></span></pre></div><div class=discussion_heading>Discussion</div> Job function pointer for Plugin Jobify system<div class=discussion_heading>Discussion</div> takes void pointer returns void
<br>&nbsp;<br> <table class=bar> <tr>
<td width=33% align=left><span class='arrowleft'></span><a href="javascript:show('OODLE_JOB_NULL_HANDLE.html')" class="paragraph">OODLE_JOB_NULL_HANDLE</a></td><td width=33% align=center><span class='arrowup'></span><a href="javascript:show('OodleAPI_Base.html')" class="paragraph">Core Base</a></td><td width=33% align=right><span class='arrowright'></span><a href="javascript:show('OODLE_HEADER_VERSION.html')" class="paragraph">OODLE_HEADER_VERSION</a></td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="OodleXHandle.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>OodleXHandle</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "OodleXHandle.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="OodleXHandle.html_backmenu">
<table class=dropmenu>
<tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<div class=prototype><div class=prototype_header>// Type definition:</div><pre>OO_U64 <span class=prototype_type><a href="javascript:show('OodleXHandle.html')" class="blue">OodleXHandle</a></span></pre></div><div class=discussion_heading>Discussion</div> Opaque weak reference to Oodle asynchronous objects <div class=discussion_heading>Discussion</div> </p>
<p> Any op which returns an OodleXHandle can be used in <a href="javascript:show('OodleX_Wait.html')" class="paragraph">OodleX_Wait</a> or as a dependency for other ops.
</p>
<p> See <a href="javascript:show('OodleXAPI_Handle.html')" class="paragraph">OodleX async handle operations</a>
<br>&nbsp;<br> <table class=bar> <tr>
<td width=33% align=left><span class='arrowleft'></span><a href="javascript:show('OodleXHandleCountdown_Decrement.html')" class="paragraph">OodleXHandleCountdown_Decrement</a></td><td width=33% align=center><span class='arrowup'></span><a href="javascript:show('OodleXAPI_Handle.html')" class="paragraph">OodleX async handle operations</a></td><td width=33% align=right><span class='arrowright'></span><a href="javascript:show('OodleXAPI_Threading.html')" class="paragraph">OodleX threading util</a></td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="Oodle_FAQ_UseOodleWithNoAllocator.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>FAQ: How do I use Oodle with no allocator?</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "Oodle_FAQ_UseOodleWithNoAllocator.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="Oodle_FAQ_UseOodleWithNoAllocator.html_backmenu">
<table class=dropmenu>
<tr><td><span class='arrowleft'></span>&nbsp;<a href="javascript:show('Oodle_FAQ_OodleLZ_Decompress_Failed.html')" class="paragraph">FAQ: OodleLZ_Decompress is failing how do I diagnose it?</a></td></tr><tr><td><span class='arrowup'></span>&nbsp;<a href="javascript:show('Oodle_FAQ.html')" class="paragraph">Frequently Asked Questions</a></td></tr><tr><td><span class='arrowright'></span>&nbsp;<a href="javascript:show('Oodle_FAQ_limit_encoder_memory_use.html')" class="paragraph">FAQ: How do I limit the encoder memory use?</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<P>
If you want to use Oodle2 Core without it doing any allocations itself, you may still do
decompression.
</p>
<p>1. Don't use OodleX. Use Oodle Core only. OodleX requires allocators and installs its
own.
</p>
<p>2. The default allocator in Oodle Core is clib. If you want to ensure the clib allocators
are never used, you may call <a href="javascript:show('OodleCore_Plugins_SetAllocators.html')" class="paragraph">OodleCore_Plugins_SetAllocators</a> with NULL function pointers to
ensure all allocations are forbidden. Note that if you call anything in Oodle that
attempts to allocate, it will be a fatal error. For production it's safer to just leave
the clib allocator in place; try setting the allocators to NULL only in a developer's debug
build to verify that Oodle is not calling the allocator. (See <a href="javascript:show('example_lz_noallocs.html')" class="paragraph">example_lz_noallocs : Example demonstrating Oodle compression with no allocations</a>)
</p>
<p>3. To do LZ decoding, call <a href="javascript:show('OodleLZDecoder_Create.html')" class="paragraph">OodleLZDecoder_Create</a> or <a href="javascript:show('OodleLZ_Decompress.html')" class="paragraph">OodleLZ_Decompress</a>, and provide pre-allocated
memory for the decoder with the <i>decoderMemory</i> argument, of size <a href="javascript:show('OodleLZDecoder_MemorySizeNeeded.html')" class="paragraph">OodleLZDecoder_MemorySizeNeeded</a>.
</p>
<p>4. To do LZ encoding, call <a href="javascript:show('OodleLZ_Compress.html')" class="paragraph">OodleLZ_Compress</a> with <i>scratchMem</i> large enough for all the encoder's
memory needs. Call <a href="javascript:show('OodleLZ_GetCompressScratchMemBound.html')" class="paragraph">OodleLZ_GetCompressScratchMemBound</a> to find the size needed.
If the <i>scratchMem</i> you provide is not big enough, the encoder will use the installed
allocator function (and stop the process if you made it null). Note that only the new LZ's and
levels equal to or below "Normal" can be made allocation free, the old compressors and Optimal
levels cannot.
</p>
<p>5. You can also do OodleNetwork1 network packet encoding and decoding from previously
trained states without Oodle doing any internal allocations (you provide all required
memory). You cannot do the off-line training or dictionary selection, those require an allocator.
</p>
<p>6. The encoder &amp; decoder only use the provided memory as scratch space, not as retained data storage.
This means you can reuse it between calls, it can be allocated only once and used as scratch each time.
Note however that each thread must have its own scratch memory, it cannot be used simultaneously by
multiple threads.
</p>
<p>7. See <a href="javascript:show('example_lz_noallocs.html')" class="paragraph">example_lz_noallocs : Example demonstrating Oodle compression with no allocations</a><br>&nbsp;<br> <table class=bar> <tr>
<td width=33% align=left><span class='arrowleft'></span><a href="javascript:show('Oodle_FAQ_OodleLZ_Decompress_Failed.html')" class="paragraph">FAQ: OodleLZ_Decompress is failing how do I diagnose it?</a></td><td width=33% align=center><span class='arrowup'></span><a href="javascript:show('Oodle_FAQ.html')" class="paragraph">Frequently Asked Questions</a></td><td width=33% align=right><span class='arrowright'></span><a href="javascript:show('Oodle_FAQ_limit_encoder_memory_use.html')" class="paragraph">FAQ: How do I limit the encoder memory use?</a></td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="Oodle_LogHeader.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>Oodle_LogHeader</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "Oodle_LogHeader.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="Oodle_LogHeader.html_backmenu">
<table class=dropmenu>
<tr><td><span class='arrowleft'></span>&nbsp;<a href="javascript:show('Oodle_CheckVersion.html')" class="paragraph">Oodle_CheckVersion</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<div class=prototype><div class=prototype_header>// Function prototype:</div><pre>void <span class=prototype_type><a href="javascript:show('Oodle_LogHeader.html')" class="blue">Oodle_LogHeader</a></span>( void );</pre></div><div class=discussion_heading>Discussion</div>Log the Oodle version &amp; copyright<div class=discussion_heading>Discussion</div>Uses the log set with <a href="javascript:show('OodleCore_Plugins_SetPrintf.html')" class="paragraph">OodleCore_Plugins_SetPrintf</a>
<br>&nbsp;<br> <table class=bar> <tr>
<td width=33% align=left><span class='arrowleft'></span><a href="javascript:show('Oodle_CheckVersion.html')" class="paragraph">Oodle_CheckVersion</a></td><td width=33% align=center><span class='arrowup'></span><a href="javascript:show('OodleAPI_Base.html')" class="paragraph">Core Base</a></td><td width=33% align=right><span class='arrowright'></span><a href="javascript:show('t_OodleFPVoidVoid.html')" class="paragraph">t_OodleFPVoidVoid</a></td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="OodleLZ_Compressor_RespectsDictionarySize.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>OodleLZ_Compressor_RespectsDictionarySize</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "OodleLZ_Compressor_RespectsDictionarySize.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="OodleLZ_Compressor_RespectsDictionarySize.html_backmenu">
<table class=dropmenu>
<tr><td><span class='arrowleft'></span>&nbsp;<a href="javascript:show('OodleLZ_Compressor_CanDecodeFuzzSafe.html')" class="paragraph">OodleLZ_Compressor_CanDecodeFuzzSafe</a></td></tr><tr><td><span class='arrowright'></span>&nbsp;<a href="javascript:show('OodleLZ_GetCompressScratchMemBound.html')" class="paragraph">OodleLZ_GetCompressScratchMemBound</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<div class=prototype><div class=prototype_header>// Function prototype:</div><pre>OO_BOOL <span class=prototype_type><a href="javascript:show('OodleLZ_Compressor_RespectsDictionarySize.html')" class="blue">OodleLZ_Compressor_RespectsDictionarySize</a></span>( <span class=prototype_type><a href="javascript:show('OodleLZ_Compressor.html')" class="blue">OodleLZ_Compressor</a></span> compressor );</pre></div><div class=discussion_heading>Discussion</div>OodleLZ_Compressor properties helper.<div class=discussion_heading>Discussion</div>Tells you if this compressor obeys <a href="javascript:show('OodleLZ_CompressOptions.html','OodleLZ_CompressOptions.html_dictionarySize')" class="paragraph">OodleLZ_CompressOptions:dictionarySize</a> which limits
match references to a finite bound. (eg. for sliding window decompression).
</p>
<p> All the new codecs do (Kraken,Mermaid,Selkie,Leviathan). Some old codecs don't.
<br>&nbsp;<br> <table class=bar> <tr>
<td width=33% align=left><span class='arrowleft'></span><a href="javascript:show('OodleLZ_Compressor_CanDecodeFuzzSafe.html')" class="paragraph">OodleLZ_Compressor_CanDecodeFuzzSafe</a></td><td width=33% align=center><span class='arrowup'></span><a href="javascript:show('OodleAPI_LZ_Compressors.html')" class="paragraph">OodleAPI_LZ_Compressors</a></td><td width=33% align=right><span class='arrowright'></span><a href="javascript:show('OodleLZ_GetCompressScratchMemBound.html')" class="paragraph">OodleLZ_GetCompressScratchMemBound</a></td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="OodleXIOQ_Read_Async.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>OodleXIOQ_Read_Async</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "OodleXIOQ_Read_Async.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="OodleXIOQ_Read_Async.html_backmenu">
<table class=dropmenu>
<tr><td><span class='arrowleft'></span>&nbsp;<a href="javascript:show('OodleXIOQ_CloseFileRename_Async.html')" class="paragraph">OodleXIOQ_CloseFileRename_Async</a></td></tr><tr><td><span class='arrowright'></span>&nbsp;<a href="javascript:show('OodleXIOQ_Write_Async.html')" class="paragraph">OodleXIOQ_Write_Async</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<div class=prototype><div class=prototype_header>// Function prototype:</div><pre><span class=prototype_type><a href="javascript:show('OodleXHandle.html')" class="blue">OodleXHandle</a></span> <span class=prototype_type><a href="javascript:show('OodleXIOQ_Read_Async.html')" class="blue">OodleXIOQ_Read_Async</a></span>( <span class=prototype_type><a href="javascript:show('OodleXIOQFile.html')" class="blue">OodleXIOQFile</a></span> file,
void * memory,
OO_SINTa size,
OO_S64 position,
<span class=prototype_type><a href="javascript:show('OodleXHandleAutoDelete.html')" class="blue">OodleXHandleAutoDelete</a></span> autoDelete OODEFAULT( OodleXHandleAutoDelete_No ),
<span class=prototype_type><a href="javascript:show('OodleXPriority.html')" class="blue">OodleXPriority</a></span> priority OODEFAULT( OodleXPriority_Normal ),
const <span class=prototype_type><a href="javascript:show('OodleXHandle.html')" class="blue">OodleXHandle</a></span> * dependencies OODEFAULT( NULL ),
OO_S32 numDependencies OODEFAULT( 0 ) );</pre></div><div class=discussion_heading>Discussion</div>Start a read request<div class=discussion_heading>Parameters</div> <table> <tr> <td style='vertical-align: top;' class=paramname><a id="OodleXIOQ_Read_Async.html_file" class=nohover>file</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> the file to act on
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXIOQ_Read_Async.html_memory" class=nohover>memory</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> memory to read into (must be <a href="javascript:show('OODLEX_IO_MAX_ALIGNMENT.html')" class="paragraph">OODLEX_IO_MAX_ALIGNMENT</a> aligned)
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXIOQ_Read_Async.html_size" class=nohover>size</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> number of bytes to read (must be <a href="javascript:show('OODLEX_IO_MAX_ALIGNMENT.html')" class="paragraph">OODLEX_IO_MAX_ALIGNMENT</a> aligned)
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXIOQ_Read_Async.html_position" class=nohover>position</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> file position to start the read (must be <a href="javascript:show('OODLEX_IO_MAX_ALIGNMENT.html')" class="paragraph">OODLEX_IO_MAX_ALIGNMENT</a> aligned)
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXIOQ_Read_Async.html_autoDelete" class=nohover>autoDelete</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> (optional) see <a href="javascript:show('OodleXHandleAutoDelete.html')" class="paragraph">OodleXHandleAutoDelete</a>
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXIOQ_Read_Async.html_priority" class=nohover>priority</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> (optional) priority of the operation ; see <a href="javascript:show('OodleXPriority.html')" class="paragraph">OodleXPriority</a>
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXIOQ_Read_Async.html_dependencies" class=nohover>dependencies</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> (optional) dependencies; the async op won't start until these are all complete; note : these are not freed, they must be autodelete or you must free them some other way.
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXIOQ_Read_Async.html_numDependencies" class=nohover>numDependencies</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> (optional) number of handles in <i>deps</i> array
</td></tr></table><div class=discussion_heading>Return Value</div> <table> <tr> <td style='vertical-align: top;' class=paramname><a id="OodleXIOQ_Read_Async.html_return" class=nohover>return</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> handle to the operation, or 0 if it could not be started (usually due to invalid args)
</td></tr></table><div class=discussion_heading>Discussion</div></p>
<p> Starts an async read into <i>memory at file offset _position , of _size bytes.
</i></p>
<p> To do unaligned reads, use <a href="javascript:show('OodleXIOQ_ReadUnalignedAdjustPointer_Async.html')" class="paragraph">OodleXIOQ_ReadUnalignedAdjustPointer_Async</a> , or
simply read a larger amount, and use <a href="javascript:show('OodleX_IOAlignDownS64.html')" class="paragraph">OodleX_IOAlignDownS64</a> on <i>position and <a href="javascript:show('OodleX_IOAlignUpS64.html')" class="paragraph">OodleX_IOAlignUpS64</a> on _size.
</i></p>
<p> The read is not done when OodleXIOQ_Read_Async returns. You must not free <i>memory until the read is done, as reported by
the handle returned;
</i><br>&nbsp;<br> <table class=bar> <tr>
<td width=33% align=left><span class='arrowleft'></span><a href="javascript:show('OodleXIOQ_CloseFileRename_Async.html')" class="paragraph">OodleXIOQ_CloseFileRename_Async</a></td><td width=33% align=center><span class='arrowup'></span><a href="javascript:show('OodleXAPI_IOQ.html')" class="paragraph">OodleX low level async io</a></td><td width=33% align=right><span class='arrowright'></span><a href="javascript:show('OodleXIOQ_Write_Async.html')" class="paragraph">OodleXIOQ_Write_Async</a></td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="OodleXIOQ_OpenWriteWholeFileCloseTempName_Async.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>OodleXIOQ_OpenWriteWholeFileCloseTempName_Async</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "OodleXIOQ_OpenWriteWholeFileCloseTempName_Async.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="OodleXIOQ_OpenWriteWholeFileCloseTempName_Async.html_backmenu">
<table class=dropmenu>
<tr><td><span class='arrowleft'></span>&nbsp;<a href="javascript:show('OodleXIOQ_OpenWriteWholeFileClose_Async.html')" class="paragraph">OodleXIOQ_OpenWriteWholeFileClose_Async</a></td></tr><tr><td><span class='arrowright'></span>&nbsp;<a href="javascript:show('OodleXIOQ_ReadUnalignedAdjustPointer_Async.html')" class="paragraph">OodleXIOQ_ReadUnalignedAdjustPointer_Async</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<div class=prototype><div class=prototype_header>// Function prototype:</div><pre><span class=prototype_type><a href="javascript:show('OodleXHandle.html')" class="blue">OodleXHandle</a></span> <span class=prototype_type><a href="javascript:show('OodleXIOQ_OpenWriteWholeFileCloseTempName_Async.html')" class="blue">OodleXIOQ_OpenWriteWholeFileCloseTempName_Async</a></span>( const char * name,
const void * buffer,
OO_SINTa size,
<span class=prototype_type><a href="javascript:show('OodleXFileOpenFlags.html')" class="blue">OodleXFileOpenFlags</a></span> fileOpenFlags OODEFAULT( OodleXFileOpenFlags_Default ),
const <span class=prototype_type><a href="javascript:show('OodleXFileOpsVTable.html')" class="blue">OodleXFileOpsVTable</a></span> * vtable OODEFAULT( NULL ),
<span class=prototype_type><a href="javascript:show('OodleXHandleAutoDelete.html')" class="blue">OodleXHandleAutoDelete</a></span> autoDelete OODEFAULT( OodleXHandleAutoDelete_No ),
<span class=prototype_type><a href="javascript:show('OodleXPriority.html')" class="blue">OodleXPriority</a></span> priority OODEFAULT( OodleXPriority_Normal ),
const <span class=prototype_type><a href="javascript:show('OodleXHandle.html')" class="blue">OodleXHandle</a></span> * dependencies OODEFAULT( NULL ),
OO_S32 numDependencies OODEFAULT( 0 ) );</pre></div><div class=discussion_heading>Discussion</div>Start a high level IO request to open a file, write a buffer, close it, and rename it.<div class=discussion_heading>Parameters</div> <table> <tr> <td style='vertical-align: top;' class=paramname><a id="OodleXIOQ_OpenWriteWholeFileCloseTempName_Async.html_name" class=nohover>name</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> name of the file to open (VFS, UTF-8)
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXIOQ_OpenWriteWholeFileCloseTempName_Async.html_buffer" class=nohover>buffer</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> the buffer to write (must be <a href="javascript:show('OODLEX_IO_MAX_ALIGNMENT.html')" class="paragraph">OODLEX_IO_MAX_ALIGNMENT</a> aligned)
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXIOQ_OpenWriteWholeFileCloseTempName_Async.html_size" class=nohover>size</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> the final file size (no alignment required)
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXIOQ_OpenWriteWholeFileCloseTempName_Async.html_fileOpenFlags" class=nohover>fileOpenFlags</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> (optional) flags for the os file open (see <a href="javascript:show('OodleXFileOpenFlags.html')" class="paragraph">OodleXFileOpenFlags</a>)
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXIOQ_OpenWriteWholeFileCloseTempName_Async.html_vtable" class=nohover>vtable</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> (optional) the <a href="javascript:show('OodleXFileOpsVTable.html')" class="paragraph">OodleXFileOpsVTable</a> to use for all ops on this file
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXIOQ_OpenWriteWholeFileCloseTempName_Async.html_autoDelete" class=nohover>autoDelete</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> (optional) see <a href="javascript:show('OodleXHandleAutoDelete.html')" class="paragraph">OodleXHandleAutoDelete</a>
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXIOQ_OpenWriteWholeFileCloseTempName_Async.html_priority" class=nohover>priority</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> (optional) priority of the operation ; see <a href="javascript:show('OodleXPriority.html')" class="paragraph">OodleXPriority</a>
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXIOQ_OpenWriteWholeFileCloseTempName_Async.html_dependencies" class=nohover>dependencies</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> (optional) dependencies; the async op won't start until these are all complete; note : these are not freed, they must be autodelete or you must free them some other way.
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXIOQ_OpenWriteWholeFileCloseTempName_Async.html_numDependencies" class=nohover>numDependencies</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> (optional) number of handles in <i>deps</i> array
</td></tr></table><div class=discussion_heading>Return Value</div> <table> <tr> <td style='vertical-align: top;' class=paramname><a id="OodleXIOQ_OpenWriteWholeFileCloseTempName_Async.html_return" class=nohover>return</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> handle to the operation, or 0 if it could not be started (usually due to invalid args)
</td></tr></table><div class=discussion_heading>Discussion</div></p>
<p> High level IOQ operations are helpers built on the simpler IOQ low level ops.
</p>
<p> This is the same as <a href="javascript:show('OodleXIOQ_OpenWriteWholeFileClose_Async.html')" class="paragraph">OodleXIOQ_OpenWriteWholeFileClose_Async</a> , but the writing is done to a temp file, and then
renamed to <i>name at the end, like <a href="javascript:show('OodleXIOQ_CloseFileRename_Async.html')" class="paragraph">OodleXIOQ_CloseFileRename_Async</a>. The rename is only done if the writing succeeded.
</i></p>
<p><br>&nbsp;<br> <table class=bar> <tr>
<td width=33% align=left><span class='arrowleft'></span><a href="javascript:show('OodleXIOQ_OpenWriteWholeFileClose_Async.html')" class="paragraph">OodleXIOQ_OpenWriteWholeFileClose_Async</a></td><td width=33% align=center><span class='arrowup'></span><a href="javascript:show('OodleXAPI_IOQ.html')" class="paragraph">OodleX low level async io</a></td><td width=33% align=right><span class='arrowright'></span><a href="javascript:show('OodleXIOQ_ReadUnalignedAdjustPointer_Async.html')" class="paragraph">OodleXIOQ_ReadUnalignedAdjustPointer_Async</a></td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="OodleX_IOAlignUpS64.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>OodleX_IOAlignUpS64</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "OodleX_IOAlignUpS64.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="OodleX_IOAlignUpS64.html_backmenu">
<table class=dropmenu>
<tr><td><span class='arrowleft'></span>&nbsp;<a href="javascript:show('OodleX_IOAlignUpS32.html')" class="paragraph">OodleX_IOAlignUpS32</a></td></tr><tr><td><span class='arrowright'></span>&nbsp;<a href="javascript:show('OodleX_IOAlignUpSINTa.html')" class="paragraph">OodleX_IOAlignUpSINTa</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<div class=prototype><div class=prototype_header>// Function prototype:</div><pre>OO_S64 <span class=prototype_type><a href="javascript:show('OodleX_IOAlignUpS64.html')" class="blue">OodleX_IOAlignUpS64</a></span>( const OO_S64 x );</pre></div><div class=discussion_heading>Discussion</div>Align up to <a href="javascript:show('OODLEX_IO_MAX_ALIGNMENT.html')" class="paragraph">OODLEX_IO_MAX_ALIGNMENT</a><div class=discussion_heading>Parameters</div> <table> <tr> <td style='vertical-align: top;' class=paramname><a id="OodleX_IOAlignUpS64.html_x" class=nohover>x</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> value to align
</td></tr></table><div class=discussion_heading>Return Value</div> <table> <tr> <td style='vertical-align: top;' class=paramname><a id="OodleX_IOAlignUpS64.html_return" class=nohover>return</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> aligned value
</td></tr></table><div class=discussion_heading>Discussion</div></p>
<p> Align x up to <a href="javascript:show('OODLEX_IO_MAX_ALIGNMENT.html')" class="paragraph">OODLEX_IO_MAX_ALIGNMENT</a>
<br>&nbsp;<br> <table class=bar> <tr>
<td width=33% align=left><span class='arrowleft'></span><a href="javascript:show('OodleX_IOAlignUpS32.html')" class="paragraph">OodleX_IOAlignUpS32</a></td><td width=33% align=center><span class='arrowup'></span><a href="javascript:show('OodleXAPI_Util.html')" class="paragraph">OodleX Utils</a></td><td width=33% align=right><span class='arrowright'></span><a href="javascript:show('OodleX_IOAlignUpSINTa.html')" class="paragraph">OodleX_IOAlignUpSINTa</a></td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="OodleFileNotFoundIsAnError.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>OodleFileNotFoundIsAnError</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "OodleFileNotFoundIsAnError.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="OodleFileNotFoundIsAnError.html_backmenu">
<table class=dropmenu>
<tr><td><span class='arrowleft'></span>&nbsp;<a href="javascript:show('OodleXCopyFileFlags.html')" class="paragraph">OodleXCopyFileFlags</a></td></tr><tr><td><span class='arrowright'></span>&nbsp;<a href="javascript:show('OODLEX_FILEINFO_FLAGS.html')" class="paragraph">OODLEX_FILEINFO_FLAGS</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<div class=prototype><div class=prototype_header>// Enumerant:</div><pre><span class=prototype_type>enum</span> <a href="javascript:show('OodleFileNotFoundIsAnError.html')">OodleFileNotFoundIsAnError</a>
{
&nbsp;&nbsp;&nbsp;&nbsp;OodleFileNotFoundIsAnError_No = 0,
&nbsp;&nbsp;&nbsp;&nbsp;OodleFileNotFoundIsAnError_Yes = 1,
&nbsp;&nbsp;&nbsp;&nbsp;OodleFileNotFoundIsAnError_Force32 = 0x40000000
};
</pre></div><div class=discussion_heading>Discussion</div> Bool for whether a file not found is a completion status of <a href="javascript:show('OodleXStatus.html','OodleXStatus.html_OodleXStatus_Error')" class="paragraph">OodleXStatus_Error</a> or <a href="javascript:show('OodleXStatus.html','OodleXStatus.html_OodleXStatus_Done')" class="paragraph">OodleXStatus_Done</a>
<br>&nbsp;<br> <table class=bar> <tr>
<td width=33% align=left><span class='arrowleft'></span><a href="javascript:show('OodleXCopyFileFlags.html')" class="paragraph">OodleXCopyFileFlags</a></td><td width=33% align=center><span class='arrowup'></span><a href="javascript:show('OodleXAPI_IOQ.html')" class="paragraph">OodleX low level async io</a></td><td width=33% align=right><span class='arrowright'></span><a href="javascript:show('OODLEX_FILEINFO_FLAGS.html')" class="paragraph">OODLEX_FILEINFO_FLAGS</a></td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="OodleXIOQ_ClearError.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>OodleXIOQ_ClearError</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "OodleXIOQ_ClearError.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="OodleXIOQ_ClearError.html_backmenu">
<table class=dropmenu>
<tr><td><span class='arrowleft'></span>&nbsp;<a href="javascript:show('OodleXIOQ_GetLastError.html')" class="paragraph">OodleXIOQ_GetLastError</a></td></tr><tr><td><span class='arrowright'></span>&nbsp;<a href="javascript:show('OodleXIOQ_LogLastError.html')" class="paragraph">OodleXIOQ_LogLastError</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<div class=prototype><div class=prototype_header>// Function prototype:</div><pre>void <span class=prototype_type><a href="javascript:show('OodleXIOQ_ClearError.html')" class="blue">OodleXIOQ_ClearError</a></span>( <span class=prototype_type><a href="javascript:show('OodleXIOQFile.html')" class="blue">OodleXIOQFile</a></span> file );</pre></div><div class=discussion_heading>Discussion</div>Clear any errors on the file<div class=discussion_heading>Parameters</div> <table> <tr> <td style='vertical-align: top;' class=paramname><a id="OodleXIOQ_ClearError.html_file" class=nohover>file</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> the IOQFile to query
</td></tr></table><div class=discussion_heading>Discussion</div></p>
<p> Wipe out any previous errors recorded on the file, so that <a href="javascript:show('OodleXIOQ_GetLastError.html')" class="paragraph">OodleXIOQ_GetLastError</a> now returns zero.
<br>&nbsp;<br> <table class=bar> <tr>
<td width=33% align=left><span class='arrowleft'></span><a href="javascript:show('OodleXIOQ_GetLastError.html')" class="paragraph">OodleXIOQ_GetLastError</a></td><td width=33% align=center><span class='arrowup'></span><a href="javascript:show('OodleXAPI_IOQ.html')" class="paragraph">OodleX low level async io</a></td><td width=33% align=right><span class='arrowright'></span><a href="javascript:show('OodleXIOQ_LogLastError.html')" class="paragraph">OodleXIOQ_LogLastError</a></td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="Oodle_About_Job_Threading_Plugins.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>About Oodle Job Threading Plugins</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "Oodle_About_Job_Threading_Plugins.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="Oodle_About_Job_Threading_Plugins.html_backmenu">
<table class=dropmenu>
<tr><td><span class='arrowleft'></span>&nbsp;<a href="javascript:show('Oodle_About_Platforms.html')" class="paragraph">About Oodle on Platforms</a></td></tr><tr><td><span class='arrowup'></span>&nbsp;<a href="javascript:show('Oodle_About.html')" class="paragraph">About Oodle</a></td></tr><tr><td><span class='arrowright'></span>&nbsp;<a href="javascript:show('Oodle_About_Compression_Scratch_Mem.html')" class="paragraph">About Compression Scratch Memory</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<P>
<h2> About Oodle Job Threading Plugins</h2>
</p>
<p>Oodle Core can run multi-threaded with a user-supplied job system via <a href="javascript:show('OodleCore_Plugins_SetJobSystem.html')" class="paragraph">OodleCore_Plugins_SetJobSystem</a>
</p>
<p>Oodle Core does not provide its own threading (or IO). It is as low level and minimal as possible, doing primary
memory to memory compression and decompression. High level and system-dependent functionality is kept in OodleX.
</p>
<p>If you use OodleX, it plugs in its own job system to Oodle Core automatically in OodleX_Init.
</p>
<p>If you do not use OodleX, you may plug in your own job system to get threading of Oodle Core.
Some examples are provided of common job systems (see example_jobify_gcd.mm , example_jobify_linuxtbb.cpp, or example_jobify_win32tp.cpp).
</p>
<p>Currently Oodle Core uses the Job plugin system to parallelize Optimal level encoding in <a href="javascript:show('OodleLZ_Compress.html')" class="paragraph">OodleLZ_Compress</a>.
It is controlled via the <a href="javascript:show('OodleLZ_CompressOptions.html','OodleLZ_CompressOptions.html_jobify')" class="paragraph">OodleLZ_CompressOptions:jobify</a> option (see <a href="javascript:show('OodleLZ_Jobify.html')" class="paragraph">OodleLZ_Jobify</a>).
</p>
<p>The default setting of <a href="javascript:show('OodleLZ_CompressOptions.html','OodleLZ_CompressOptions.html_jobify')" class="paragraph">OodleLZ_CompressOptions:jobify</a>, <a href="javascript:show('OodleLZ_Jobify.html','OodleLZ_Jobify.html_OodleLZ_Jobify_Default')" class="paragraph">OodleLZ_Jobify_Default</a>, is to use a job system for
multithreading if one is provided.
</p>
<p>When a job system is provided, encoding of buffers larger than one <a href="javascript:show('OODLELZ_BLOCK_LEN.html')" class="paragraph">OODLELZ_BLOCK_LEN</a> (256 KB),
at <a href="javascript:show('OodleLZ_CompressionLevel.html')" class="paragraph">OodleLZ_CompressionLevel</a> greater or equal to <a href="javascript:show('OodleLZ_CompressionLevel.html','OodleLZ_CompressionLevel.html_OodleLZ_CompressionLevel_Optimal1')" class="paragraph">OodleLZ_CompressionLevel_Optimal1</a>, will use
multiple threads.
</p>
<p>If you are encoding small chunks (less or equal to <a href="javascript:show('OODLELZ_BLOCK_LEN.html')" class="paragraph">OODLELZ_BLOCK_LEN</a>), or if you are already encoding lots of files
at the same time with multiple threads, or if you are encoding below level Optimal1, Jobify will not do much for you.
If you are encoding only one file at a time (or care about latency rather than throughput), if you use level >= Optimal1,
and you encode large files, Jobify will improve encode speed.
</p>
<p>Jobify summary :
</p>
<p><ul>
<li> What is currently threaded? Only encoding (<a href="javascript:show('OodleLZ_Compress.html')" class="paragraph">OodleLZ_Compress</a>), of the new LZ codecs (Kraken,Mermaid,Selkie,Leviathan), at level Optimal1+ , only with more than 1 BLOCK
</ul></p>
<p><ul>
<li> Jobify does nothing if you encode single BLOCKS or smaller (256 KB)
</ul></p>
<p><ul>
<li> if you parallel encode many files at a time (which you should), further encoder threading with Jobify
will be a big benefit (but also doesn't hurt)
</ul></p>
<p><ul>
<li> Jobify uses Wait() on workers from the calling thread.
if your calling thread is already a worker, you must be able to wait-from-worker
which many thread systems cannot do
</ul></p>
<p><ul>
<li> Jobify default (OodleLZ_Jobify_Default) is "yes do jobify if a thread system is provided"
so you do not need to set any options to get threaded encoding enabled. If you want to turn off threaded
encoding, even though you provided a thread system, set <a href="javascript:show('OodleLZ_CompressOptions.html','OodleLZ_CompressOptions.html_jobify')" class="paragraph">OodleLZ_CompressOptions:jobify</a> to OodleLZ_Jobify_Disable.
</ul></p>
<p><ul>
<li> OodleX provides its thread system automatically, so if you use OodleX then jobify will just be on by default without you doing anything
</ul></p>
<p><ul>
<li> example plugin job system implementations are provided
(see example_jobify_gcd.mm , example_jobify_linuxtbb.cpp, or example_jobify_win32tp.cpp).
</ul></p>
<p><ul>
<li> Note that when possible you should paralellelize at the chunk level or the file level. This is provides
better parallelism than Jobify.
</ul></p>
<p></p>
<p>If you provide your own plugins for Jobify, be aware of the requirements on RunJob and WaitJob :
</p>
<p><ul>
<li> RunJob returns an async handle that can be passed to WaitJob. That handle should be unique until it is returned by
the paired call to WaitJob.
</ul></p>
<p><ul>
<li> RunJob may be passed dependencies. It should not start its job function until those depenencies are done, but this is
not the same as WaitJob - should not delete those dependency jobs.
</ul></p>
<p><ul>
<li> WaitJob may be called before or after the job is done. It should wait on the job (if it is still running), then
clean it up and release the job handle.
</ul></p>
<p><ul>
<li> Job handle value 0 is reserved to mean "none"; if RunJob returns 0 it means the work was done synchronously.
</ul></p>
<p><ul>
<li> WaitJob will only be called from the original thread that called <a href="javascript:show('OodleLZ_Compress.html')" class="paragraph">OodleLZ_Compress</a>. It will not be called from a job
function we invoked.
</ul></p>
<p>Some thread systems cannot wait from a worker thread. If you are running OodleLZ_Compress from a worker thread, be aware
then WaitJob may be called on that thread. If Jobify uses the same thread system, WaitJob can be a deadlock.
</p>
<p>One option is to use a separate thread pool for your top level parallelism (parallelizing on files or chunks), and a
separate pool for Jobify. That way thread pool 1 only waits on thread pool 2. There is no wait-on-workers from within the
same pool.
</p>
<p>OodleX worker thread system supports wait-from-worker so it is okay to use Jobify and OodleLZ parallelism
For example, if you call <a href="javascript:show('OodleXLZ_Compress_Async.html')" class="paragraph">OodleXLZ_Compress_Async</a> with <a href="javascript:show('OodleLZ_CompressOptions.html','OodleLZ_CompressOptions.html_seekChunkReset')" class="paragraph">OodleLZ_CompressOptions:seekChunkReset</a>, it will
parallellize at the seek chunk level, and then again at the jobify level (if each seek chunk is bigger than 1 block).
This means the jobify-level parallelism will call WaitJob on the worker threads that were spawned for seek-level
parallelism. This may not work in some thread systems but is okay with OodleX.
</p>
<p>(note that OodleX supports wait-from-worker only for Jobs; you should not OodleX_Wait on non-Job handles from inside a Job,
but you can use them as dependencies)<br>&nbsp;<br> <table class=bar> <tr>
<td width=33% align=left><span class='arrowleft'></span><a href="javascript:show('Oodle_About_WASM.html')" class="paragraph">About Oodle on WASM</a></td><td width=33% align=center><span class='arrowup'></span><a href="javascript:show('Oodle_About.html')" class="paragraph">About Oodle</a></td><td width=33% align=right><span class='arrowright'></span><a href="javascript:show('Oodle_About_Compression_Scratch_Mem.html')" class="paragraph">About Compression Scratch Memory</a></td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="OodleXLog_GetEcho.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>OodleXLog_GetEcho</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "OodleXLog_GetEcho.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="OodleXLog_GetEcho.html_backmenu">
<table class=dropmenu>
<tr><td><span class='arrowleft'></span>&nbsp;<a href="javascript:show('OodleXLog_SetEcho.html')" class="paragraph">OodleXLog_SetEcho</a></td></tr><tr><td><span class='arrowright'></span>&nbsp;<a href="javascript:show('OodleXLog_SetCallback.html')" class="paragraph">OodleXLog_SetCallback</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<div class=prototype><div class=prototype_header>// Function prototype:</div><pre>void * <span class=prototype_type><a href="javascript:show('OodleXLog_GetEcho.html')" class="blue">OodleXLog_GetEcho</a></span>( );</pre></div><div class=discussion_heading>Discussion</div>Get the current echo FILE<div class=discussion_heading>Return Value</div> <table> <tr> <td style='vertical-align: top;' class=paramname><a id="OodleXLog_GetEcho.html_return" class=nohover>return</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> the current echo FILE
</td></tr></table><div class=discussion_heading>Discussion</div></p>
<p> See <a href="javascript:show('OodleXLog_SetEcho.html')" class="paragraph">OodleXLog_SetEcho</a>
<br>&nbsp;<br> <table class=bar> <tr>
<td width=33% align=left><span class='arrowleft'></span><a href="javascript:show('OodleXLog_SetEcho.html')" class="paragraph">OodleXLog_SetEcho</a></td><td width=33% align=center><span class='arrowup'></span><a href="javascript:show('OodleXAPI_Debug.html')" class="paragraph">OodleX Debug aids</a></td><td width=33% align=right><span class='arrowright'></span><a href="javascript:show('OodleXLog_SetCallback.html')" class="paragraph">OodleXLog_SetCallback</a></td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="OodleXIOQ_GetLastError.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>OodleXIOQ_GetLastError</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "OodleXIOQ_GetLastError.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="OodleXIOQ_GetLastError.html_backmenu">
<table class=dropmenu>
<tr><td><span class='arrowleft'></span>&nbsp;<a href="javascript:show('OodleXIOQ_GetName.html')" class="paragraph">OodleXIOQ_GetName</a></td></tr><tr><td><span class='arrowright'></span>&nbsp;<a href="javascript:show('OodleXIOQ_ClearError.html')" class="paragraph">OodleXIOQ_ClearError</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<div class=prototype><div class=prototype_header>// Function prototype:</div><pre>OO_U32 <span class=prototype_type><a href="javascript:show('OodleXIOQ_GetLastError.html')" class="blue">OodleXIOQ_GetLastError</a></span>( <span class=prototype_type><a href="javascript:show('OodleXIOQFile.html')" class="blue">OodleXIOQFile</a></span> file );</pre></div><div class=discussion_heading>Discussion</div>Get the last error on a file<div class=discussion_heading>Parameters</div> <table> <tr> <td style='vertical-align: top;' class=paramname><a id="OodleXIOQ_GetLastError.html_file" class=nohover>file</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> the IOQFile to query
</td></tr></table><div class=discussion_heading>Return Value</div> <table> <tr> <td style='vertical-align: top;' class=paramname><a id="OodleXIOQ_GetLastError.html_return" class=nohover>return</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> the last error on the file (0 for none)
</td></tr></table><div class=discussion_heading>Discussion</div></p>
<p> IO operation errors are tracked on the file to simplify error tracking.
Individual operation errors can be queried with <a href="javascript:show('OodleXIOQ_GetStatus.html')" class="paragraph">OodleXIOQ_GetStatus</a>.
The error code returned can be processed with <a href="javascript:show('OodleXIOQ_GetErrorEnum.html')" class="paragraph">OodleXIOQ_GetErrorEnum</a> or <a href="javascript:show('OodleXIOQ_GetErrorDetails.html')" class="paragraph">OodleXIOQ_GetErrorDetails</a>.
<br>&nbsp;<br> <table class=bar> <tr>
<td width=33% align=left><span class='arrowleft'></span><a href="javascript:show('OodleXIOQ_GetName.html')" class="paragraph">OodleXIOQ_GetName</a></td><td width=33% align=center><span class='arrowup'></span><a href="javascript:show('OodleXAPI_IOQ.html')" class="paragraph">OodleX low level async io</a></td><td width=33% align=right><span class='arrowright'></span><a href="javascript:show('OodleXIOQ_ClearError.html')" class="paragraph">OodleXIOQ_ClearError</a></td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="start_OodleData.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>Getting Started with Oodle LZ Data Compression</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "start_OodleData.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="start_OodleData.html_backmenu">
<table class=dropmenu>
<tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<P>
Oodle compresses generic data with lossless (LZ) data compression.
Oodle provides many different levels of speed vs compression ratio tradeoffs.
Oodle lets you use the same data compression and packaging formats on all platforms.
(see <a href="javascript:show('OodleLZ_About.html')" class="paragraph">About OodleLZ</a> for more)
</p>
<p>If you're benchmarking Oodle compression, please consider <a href="javascript:show('start_Benchmarking.html')" class="paragraph">Tips for benchmarking a compressor</a>
</p>
<p><hr>
</p>
<p>To sample a range of Oodle compressor speeds &amp; compression ratios, try <a href="javascript:show('example_lz_chart.html')" class="paragraph">example_lz_chart : Example that makes a chart of OodleLZ options</a>.
</p>
<p>example_lz_chart is now provided as a pre-built executable on desktop platforms. Just go run it
on one of your data files to get a sample of Oodle's performance.
</p>
<p>The compressors offer a variety of tradeoffs to suit different needs (see <a href="javascript:show('OodleLZ_About.html')" class="paragraph">About OodleLZ</a>). The
higher CompressionLevel always provides smaller file sizes at the expense of longer encode times.
</p>
<p>You can also use the "ozip" command line utility to test Oodle without building any code.
ozip lets you try various Oodle options and test compression ratios and performance with the ozip -b benchmark mode.
See <a href="javascript:show('Oodle_About_ozip.html')" class="paragraph">About Oodle ozip</a>.
</p>
<p>Feel free to contact oodle@radgametools.com for help on deciding which compressor is best for your
needs.
</p>
<p><hr>
</p>
<p>Try building an example. <a href="javascript:show('example_lz_simple.html')" class="paragraph">example_lz_simple : Example demonstrating very simple LZ memory->memory compression using only Oodle Core</a> is a good place to start. It includes only "oodle2.h"
from the include dir. Link it with the appropriate oo2core lib from the "lib" directory.
(on Windows, you also need the DLL from the "redist" directory).
</p>
<p>Now run it on one of your game data files to try it.
</p>
<p><a href="javascript:show('example_lz_simple.html')" class="paragraph">example_lz_simple : Example demonstrating very simple LZ memory->memory compression using only Oodle Core</a> uses the compressor OodleLZ_Compressor_Kraken , and the encode effort
OodleLZ_CompressionLevel_Normal. Kraken generally provides a good tradeoff between compression ratio
and decode speed. A higher CompressionLevel trades off encode speed for greater compression ratio.
</p>
<p><hr>
</p>
<p><h2> Using Oodle for simple memory to memory compression</h2>
</p>
<p>To compress memory->memory synchronously, you call <a href="javascript:show('OodleLZ_Compress.html')" class="paragraph">OodleLZ_Compress</a>. To decompress the same way you call
<a href="javascript:show('OodleLZ_Decompress.html')" class="paragraph">OodleLZ_Decompress</a>. These are in the API group <a href="javascript:show('OodleAPI_LZ_Compressors.html')" class="paragraph">OodleAPI_LZ_Compressors</a> in Oodle Core.
</p>
<p>To decode parts of the stream into a buffer incrementally use <a href="javascript:show('OodleLZDecoder_DecodeSome.html')" class="paragraph">OodleLZDecoder_DecodeSome</a>
</p>
<p>Let's walk through a simple memory to memory encode and decode with Oodle's LZ compressors.
The LZ compressors are lossless and compress any kind of data.
</p>
<p>For this simple synchronous operation, we can use just Oodle Core, not OodleX. No intialization is required.
</p>
<p>We can simply make the call to do memory->memory compression :
</p>
<p><div class=prototype>
<PRE>
SINTa comp_len = OodleLZ_Compress(OodleLZ_Compressor_Kraken,raw_buf,raw_len,comp_buf,
OodleLZ_CompressionLevel_Optimal1);
</PRE>
</div>
</p>
<p>where comp_buf should be at least <a href="javascript:show('OodleLZ_GetCompressedBufferSizeNeeded.html')" class="paragraph">OodleLZ_GetCompressedBufferSizeNeeded</a> bytes large to take
the compressed data.
</p>
<p>Here we have chosen the compressor <a href="javascript:show('OodleLZ_Compressor.html','OodleLZ_Compressor.html_OodleLZ_Compressor_Kraken')" class="paragraph">OodleLZ_Compressor_Kraken</a> , which is generally a good balance
of compression ratio and decode speed. We've also chosen a high compression
level (<a href="javascript:show('OodleLZ_CompressionLevel.html','OodleLZ_CompressionLevel.html_OodleLZ_CompressionLevel_Optimal1')" class="paragraph">OodleLZ_CompressionLevel_Optimal1</a>), so this encode will be rather slow, but give us a smaller
output size. The compression level
sets the amount of effort the encoder does for string matching, and is how you can control the
encode time (try <a href="javascript:show('OodleLZ_CompressionLevel.html','OodleLZ_CompressionLevel.html_OodleLZ_CompressionLevel_Fast')" class="paragraph">OodleLZ_CompressionLevel_Fast</a> for example). The compression level does not affect
the decode time, generally.
</p>
<p>You can then decompress in a similar way :
</p>
<p><div class=prototype>
<PRE>
SINTa dec_len = OodleLZ_Decompress(comp_buf,comp_len,dec_buf,raw_len);
ASSERT( dec_len == raw_len );
</PRE>
</div>
</p>
<p><a href="javascript:show('OodleLZ_Decompress.html')" class="paragraph">OodleLZ_Decompress</a> will decode data from any of the compressors. Raw OodleLZ compressed data is
headerless - you have to pass in the raw and compressed data sizes to the decode call.
See <a href="javascript:show('OodleLZ_About.html')" class="paragraph">About OodleLZ</a> for more details about OodleLZ data.
</p>
<p>Oodle Core requires no shutdown.
</p>
<p>You can see a full working example in <a href="javascript:show('example_lz_simple.html')" class="paragraph">example_lz_simple : Example demonstrating very simple LZ memory->memory compression using only Oodle Core</a>.
</p>
<p><hr>
</p>
<p><h2> A note on evaluating Oodle</h2>
</p>
<p>When evaluating Oodle, be careful what kind of data you use to test the compressors.
</p>
<p>You should not run the compressors on already-compressed data such as PNG or JPEG images or Bink movies.
No compressor can do much with already-compressed data, so the differences between them will be hidden.
</p>
<p>If you have your game data in an existing archive like a Zip, unpack that before trying
those files in Oodle.
</p>
<p>Oodle is optimized for typical game data - levels, meshes, animations, bitmap and hardware compressed textures.
</p>
<p>To use Oodle with Granny animation data, make sure you disable Granny's built-in compressor on those files.
</p>
<p>In general, on signal media such as images, audio and video, the appropriate data-specific compressor should be used.
On other data that have optional compression, it should be turned off. For example things like pdf or geometry mesh
formats that have optional zlib compression, it's better to turn that compression off and give the data uncompressed
to Oodle, because Oodle will do a better job.
</p>
<p>If your data is not compressing as you hoped, feel free to contact oodle@radgametools.com and we'll have
a look at it.
</p>
<p>Also, if you want to donate some data to go in our test set, that would be appreciated, and the
Oodle compressors will get better at your data as we refine them.
</p>
<p>See some tips on benchmarking here : <a href="javascript:show('start_Benchmarking.html')" class="paragraph">Tips for benchmarking a compressor</a>
</p>
<p><hr>
</p>
<p>Oodle does not provide packaging or archiving. You create your packages however you want for you
game, and use Oodle just for the data compression.
</p>
<p>OodleX provides multi-threaded encode and decode. You can also write your own parallel encode and
decode using Oodle Core with your own threading system.
</p>
<p>Oodle currently provides only generic lossless data compression, no specialized image or audio
compression.
</p>
<p><hr>
</p>
<p>The Oodle LZ compressors can encode &amp; decode incrementally, they can encode &amp; decode multi-threaded,
they can provide seek points for random access in compressed streams, they can overlap IO and encoding
or decoding. There are lots of capabilities as you dig deeper.
</p>
<p>You can examine some of the more advanced LZ <a href="javascript:show('examples.html')" class="paragraph">Examples</a> , or visit <a href="javascript:show('OodleLZ_About.html')" class="paragraph">About OodleLZ</a> or <a href="javascript:show('Oodle_FAQ.html')" class="paragraph">Frequently Asked Questions</a>,
or contact oodle@radgametools.com.
</p>
<p><hr>
</p>
<p>For a guide to how to build with the Oodle library on your platform, see <a href="javascript:show('Oodle_About_Platforms.html')" class="paragraph">About Oodle on Platforms</a>.
For information about the Core vs Ext libs see <a href="javascript:show('start_CoreVsExt.html')" class="paragraph">Oodle2 Core vs Oodle2 Ext</a>.<br>&nbsp;<br> <table class=bar> <tr>
<td width=33%>&nbsp;</td><td width=33%>&nbsp;</td><td width=33%>&nbsp;</td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="OODLELZ_SPACESPEEDTRADEOFFBYTES_DEFAULT.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>OODLELZ_SPACESPEEDTRADEOFFBYTES_DEFAULT</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "OODLELZ_SPACESPEEDTRADEOFFBYTES_DEFAULT.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="OODLELZ_SPACESPEEDTRADEOFFBYTES_DEFAULT.html_backmenu">
<table class=dropmenu>
<tr><td><span class='arrowleft'></span>&nbsp;<a href="javascript:show('OODLELZ_LOCALDICTIONARYSIZE_MAX.html')" class="paragraph">OODLELZ_LOCALDICTIONARYSIZE_MAX</a></td></tr><tr><td><span class='arrowright'></span>&nbsp;<a href="javascript:show('OODLELZ_BLOCK_LEN.html')" class="paragraph">OODLELZ_BLOCK_LEN</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<div class=prototype><div class=prototype_header>// Preprocessor definition:</div><pre><span class=prototype_type>#define</span> <a href="javascript:show('OODLELZ_SPACESPEEDTRADEOFFBYTES_DEFAULT.html')">OODLELZ_SPACESPEEDTRADEOFFBYTES_DEFAULT</a> (256)</pre></div><div class=discussion_heading>Discussion</div> Default value of spaceSpeedTradeoffBytes in OodleLZ_CompressOptions
Changes how the encoder makes decisions in the bit stream
Higher spaceSpeedTradeoffBytes favors decode speed more (larger compressed files)
Lower spaceSpeedTradeoffBytes favors smaller compressed files (slower decoder)
Goes in a power of 2 scale; so try 64,128 and 512,1024
(OODLELZ_SPACESPEEDTRADEOFFBYTES_DEFAULT/2) or (OODLELZ_SPACESPEEDTRADEOFFBYTES_DEFAULT*2)
<br>&nbsp;<br> <table class=bar> <tr>
<td width=33% align=left><span class='arrowleft'></span><a href="javascript:show('OODLELZ_LOCALDICTIONARYSIZE_MAX.html')" class="paragraph">OODLELZ_LOCALDICTIONARYSIZE_MAX</a></td><td width=33% align=center><span class='arrowup'></span><a href="javascript:show('OodleAPI_LZ_Compressors.html')" class="paragraph">OodleAPI_LZ_Compressors</a></td><td width=33% align=right><span class='arrowright'></span><a href="javascript:show('OODLELZ_BLOCK_LEN.html')" class="paragraph">OODLELZ_BLOCK_LEN</a></td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="OodleX_Semaphore.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>OodleX_Semaphore</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "OodleX_Semaphore.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="OodleX_Semaphore.html_backmenu">
<table class=dropmenu>
<tr><td><span class='arrowright'></span>&nbsp;<a href="javascript:show('OodleX_ThreadFunc.html')" class="paragraph">OodleX_ThreadFunc</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<div class=prototype><div class=prototype_header>// Type definition:</div><pre>OO_U32 <span class=prototype_type><a href="javascript:show('OodleX_Semaphore.html')" class="blue">OodleX_Semaphore</a></span></pre></div><div class=discussion_heading>Discussion</div> Semaphore ; initialize with = 0 , no cleanup necessary<div class=discussion_heading>Discussion</div> NOTE : it is not intended that you use these in production. They are for use in the Oodle
examples. Replace with your own thread functions for shipping.
<br>&nbsp;<br> <table class=bar> <tr>
<td width=33% align=left><span class='arrowleft'></span><a href="javascript:show('OodleX_GetNumWorkerThreads.html')" class="paragraph">OodleX_GetNumWorkerThreads</a></td><td width=33% align=center><span class='arrowup'></span><a href="javascript:show('OodleXAPI_Threading.html')" class="paragraph">OodleX threading util</a></td><td width=33% align=right><span class='arrowright'></span><a href="javascript:show('OodleX_ThreadFunc.html')" class="paragraph">OodleX_ThreadFunc</a></td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="OodleX_Init_GetDefaults.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>OodleX_Init_GetDefaults</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "OodleX_Init_GetDefaults.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="OodleX_Init_GetDefaults.html_backmenu">
<table class=dropmenu>
<tr><td><span class='arrowleft'></span>&nbsp;<a href="javascript:show('OodleX_Init_ThreadProfilerInit.html')" class="paragraph">OodleX_Init_ThreadProfilerInit</a></td></tr><tr><td><span class='arrowright'></span>&nbsp;<a href="javascript:show('OodleX_Init_GetDefaults_Minimal.html')" class="paragraph">OodleX_Init_GetDefaults_Minimal</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<div class=prototype><div class=prototype_header>// Function prototype:</div><pre>OO_BOOL <span class=prototype_type><a href="javascript:show('OodleX_Init_GetDefaults.html')" class="blue">OodleX_Init_GetDefaults</a></span>( OO_U32 oodle_header_version,
<span class=prototype_type><a href="javascript:show('OodleXInitOptions.html')" class="blue">OodleXInitOptions</a></span> * pOptions,
<span class=prototype_type><a href="javascript:show('OodleX_Init_GetDefaults_DebugSystems.html')" class="blue">OodleX_Init_GetDefaults_DebugSystems</a></span> debugSystems OODEFAULT( OodleX_Init_GetDefaults_DebugSystems_Yes ),
<span class=prototype_type><a href="javascript:show('OodleX_Init_GetDefaults_Threads.html')" class="blue">OodleX_Init_GetDefaults_Threads</a></span> threads OODEFAULT( OodleX_Init_GetDefaults_Threads_Yes ) );</pre></div><div class=discussion_heading>Discussion</div>Get defaults for <a href="javascript:show('OodleXInitOptions.html')" class="paragraph">OodleXInitOptions</a><div class=discussion_heading>Parameters</div> <table> <tr> <td style='vertical-align: top;' class=paramname><a id="OodleX_Init_GetDefaults.html_oodle_header_version" class=nohover>oodle_header_version</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> pass <a href="javascript:show('OODLE_HEADER_VERSION.html')" class="paragraph">OODLE_HEADER_VERSION</a> here
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleX_Init_GetDefaults.html_pOptions" class=nohover>pOptions</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> filled with default <a href="javascript:show('OodleXInitOptions.html')" class="paragraph">OodleXInitOptions</a>
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleX_Init_GetDefaults.html_debugSystems" class=nohover>debugSystems</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> should OodleX_Init enable any debug systems (leaktrack, log, etc) ?
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleX_Init_GetDefaults.html_threads" class=nohover>threads</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> should OodleX_Init start any threads?
</td></tr></table><div class=discussion_heading>Return Value</div> <table> <tr> <td style='vertical-align: top;' class=paramname><a id="OodleX_Init_GetDefaults.html_return" class=nohover>return</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> false if <a href="javascript:show('OODLE_HEADER_VERSION.html')" class="paragraph">OODLE_HEADER_VERSION</a> is not compatible with this lib
</td></tr></table><div class=discussion_heading>Discussion</div></p>
<p> The <i>debugSystems</i> and <i>threads</i> options are just easy ways of getting pOptions filled out for common
use cases. For fine control of individual settings, you can always set the values in OodleXInitOptions yourself.
</p>
<p> NOTE : do not use this if you want minimal linkage. See <a href="javascript:show('OodleX_Init_GetDefaults_Minimal.html')" class="paragraph">OodleX_Init_GetDefaults_Minimal</a>.
<br>&nbsp;<br> <table class=bar> <tr>
<td width=33% align=left><span class='arrowleft'></span><a href="javascript:show('OodleX_Init_ThreadProfilerInit.html')" class="paragraph">OodleX_Init_ThreadProfilerInit</a></td><td width=33% align=center><span class='arrowup'></span><a href="javascript:show('OodleXAPI_Init.html')" class="paragraph">OodleX Startup and Shutdown</a></td><td width=33% align=right><span class='arrowright'></span><a href="javascript:show('OodleX_Init_GetDefaults_Minimal.html')" class="paragraph">OodleX_Init_GetDefaults_Minimal</a></td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="OodleNetworkVersion.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>OodleNetworkVersion</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "OodleNetworkVersion.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="OodleNetworkVersion.html_backmenu">
<table class=dropmenu>
<tr><td><span class='arrowleft'></span>&nbsp;<a href="javascript:show('OODLE_HEADER_VERSION.html')" class="paragraph">OODLE_HEADER_VERSION</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<div class=prototype><div class=prototype_header>// Preprocessor definition:</div><pre><span class=prototype_type>#define</span> <a href="javascript:show('OodleNetworkVersion.html')">OodleNetworkVersion</a> 2.9.14</pre></div><div class=discussion_heading>Discussion</div></p>
<p><br>&nbsp;<br> <table class=bar> <tr>
<td width=33% align=left><span class='arrowleft'></span><a href="javascript:show('OODLE_HEADER_VERSION.html')" class="paragraph">OODLE_HEADER_VERSION</a></td><td width=33% align=center><span class='arrowup'></span><a href="javascript:show('OodleAPI_Base.html')" class="paragraph">Core Base</a></td><td width=33% align=right><span class='arrowright'></span><a href="javascript:show('Oodle_UsageWarnings.html')" class="paragraph">Oodle_UsageWarnings</a></td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="OodleXIOQ_GetFileSize_AsyncAndWait.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>OodleXIOQ_GetFileSize_AsyncAndWait</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "OodleXIOQ_GetFileSize_AsyncAndWait.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="OodleXIOQ_GetFileSize_AsyncAndWait.html_backmenu">
<table class=dropmenu>
<tr><td><span class='arrowleft'></span>&nbsp;<a href="javascript:show('OodleXIOQ_Rename_AsyncAndWait.html')" class="paragraph">OodleXIOQ_Rename_AsyncAndWait</a></td></tr><tr><td><span class='arrowright'></span>&nbsp;<a href="javascript:show('OodleXIOQ_NameIsDir_AsyncAndWait.html')" class="paragraph">OodleXIOQ_NameIsDir_AsyncAndWait</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<div class=prototype><div class=prototype_header>// Function prototype:</div><pre>OO_S64 <span class=prototype_type><a href="javascript:show('OodleXIOQ_GetFileSize_AsyncAndWait.html')" class="blue">OodleXIOQ_GetFileSize_AsyncAndWait</a></span>( const char * vfsName,
<span class=prototype_type><a href="javascript:show('OodleFileNotFoundIsAnError.html')" class="blue">OodleFileNotFoundIsAnError</a></span> fnfiae );</pre></div><div class=discussion_heading>Discussion</div>Convenience version of <a href="javascript:show('OodleXIOQ_GetInfoByName_AsyncAndWait.html')" class="paragraph">OodleXIOQ_GetInfoByName_AsyncAndWait</a>
returns negative for error
<br>&nbsp;<br> <table class=bar> <tr>
<td width=33% align=left><span class='arrowleft'></span><a href="javascript:show('OodleXIOQ_Rename_AsyncAndWait.html')" class="paragraph">OodleXIOQ_Rename_AsyncAndWait</a></td><td width=33% align=center><span class='arrowup'></span><a href="javascript:show('OodleXAPI_IOQ.html')" class="paragraph">OodleX low level async io</a></td><td width=33% align=right><span class='arrowright'></span><a href="javascript:show('OodleXIOQ_NameIsDir_AsyncAndWait.html')" class="paragraph">OodleXIOQ_NameIsDir_AsyncAndWait</a></td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="OodleXIOQ_CloseFile_Async.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>OodleXIOQ_CloseFile_Async</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "OodleXIOQ_CloseFile_Async.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="OodleXIOQ_CloseFile_Async.html_backmenu">
<table class=dropmenu>
<tr><td><span class='arrowleft'></span>&nbsp;<a href="javascript:show('OodleXIOQ_OpenForWriteTempName_Async.html')" class="paragraph">OodleXIOQ_OpenForWriteTempName_Async</a></td></tr><tr><td><span class='arrowright'></span>&nbsp;<a href="javascript:show('OodleXIOQ_CloseFileRename_Async.html')" class="paragraph">OodleXIOQ_CloseFileRename_Async</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<div class=prototype><div class=prototype_header>// Function prototype:</div><pre><span class=prototype_type><a href="javascript:show('OodleXHandle.html')" class="blue">OodleXHandle</a></span> <span class=prototype_type><a href="javascript:show('OodleXIOQ_CloseFile_Async.html')" class="blue">OodleXIOQ_CloseFile_Async</a></span>( <span class=prototype_type><a href="javascript:show('OodleXIOQFile.html')" class="blue">OodleXIOQFile</a></span> file,
OO_S64 truncateFileSize OODEFAULT( <span class=prototype_type><a href="javascript:show('OODLEX_FILE_CLOSE_NO_TRUNCATE_SIZE.html')" class="blue">OODLEX_FILE_CLOSE_NO_TRUNCATE_SIZE</a></span> ),
<span class=prototype_type><a href="javascript:show('OodleXHandleAutoDelete.html')" class="blue">OodleXHandleAutoDelete</a></span> autoDelete OODEFAULT( OodleXHandleAutoDelete_No ),
<span class=prototype_type><a href="javascript:show('OodleXPriority.html')" class="blue">OodleXPriority</a></span> priority OODEFAULT( OodleXPriority_Normal ),
const <span class=prototype_type><a href="javascript:show('OodleXHandle.html')" class="blue">OodleXHandle</a></span> * dependencies OODEFAULT( NULL ),
OO_S32 numDependencies OODEFAULT( 0 ) );</pre></div><div class=discussion_heading>Discussion</div>Start a close-file request<div class=discussion_heading>Parameters</div> <table> <tr> <td style='vertical-align: top;' class=paramname><a id="OodleXIOQ_CloseFile_Async.html_file" class=nohover>file</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> the file to close
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXIOQ_CloseFile_Async.html_truncateFileSize" class=nohover>truncateFileSize</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> (optional) truncate an OpenforWrite file
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXIOQ_CloseFile_Async.html_autoDelete" class=nohover>autoDelete</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> (optional) see <a href="javascript:show('OodleXHandleAutoDelete.html')" class="paragraph">OodleXHandleAutoDelete</a>
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXIOQ_CloseFile_Async.html_priority" class=nohover>priority</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> (optional) priority of the operation ; see <a href="javascript:show('OodleXPriority.html')" class="paragraph">OodleXPriority</a>
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXIOQ_CloseFile_Async.html_dependencies" class=nohover>dependencies</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> (optional) dependencies; the async op won't start until these are all complete; note : these are not freed, they must be autodelete or you must free them some other way.
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXIOQ_CloseFile_Async.html_numDependencies" class=nohover>numDependencies</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> (optional) number of handles in <i>deps</i> array
</td></tr></table><div class=discussion_heading>Return Value</div> <table> <tr> <td style='vertical-align: top;' class=paramname><a id="OodleXIOQ_CloseFile_Async.html_return" class=nohover>return</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> handle to the operation, or 0 if it could not be started (usually due to invalid args)
</td></tr></table><div class=discussion_heading>Discussion</div></p>
<p> CloseFile also copies any errors on the file to the request, so that an <a href="javascript:show('OodleXIOQ_GetStatus.html')" class="paragraph">OodleXIOQ_GetStatus</a> on the CloseFile
request will return <a href="javascript:show('OodleXStatus.html','OodleXStatus.html_OodleXStatus_Error')" class="paragraph">OodleXStatus_Error</a> if there are any errors on the file.
</p>
<p> If the file was OpenForWrite, then truncateFileSize can be used to set the final file size. This is mainly
used when the file was reserved with <a href="javascript:show('OodleXIOQ_ReserveFileSizeForWrite_Async.html')" class="paragraph">OodleXIOQ_ReserveFileSizeForWrite_Async</a> , but it should also be used any time
a file size that is not <a href="javascript:show('OODLEX_IO_MAX_ALIGNMENT.html')" class="paragraph">OODLEX_IO_MAX_ALIGNMENT</a> aligned is desired. truncateFileSize does not need to be
<a href="javascript:show('OODLEX_IO_MAX_ALIGNMENT.html')" class="paragraph">OODLEX_IO_MAX_ALIGNMENT</a> aligned, but all sized for <a href="javascript:show('OodleXIOQ_Write_Async.html')" class="paragraph">OodleXIOQ_Write_Async</a> do, so without doing this file sizes will
be aligned up. Pass OODLEX_FILE_CLOSE_NO_TRUNCATE_SIZE (or use the default argument) if you don't want to truncate.
<br>&nbsp;<br> <table class=bar> <tr>
<td width=33% align=left><span class='arrowleft'></span><a href="javascript:show('OodleXIOQ_OpenForWriteTempName_Async.html')" class="paragraph">OodleXIOQ_OpenForWriteTempName_Async</a></td><td width=33% align=center><span class='arrowup'></span><a href="javascript:show('OodleXAPI_IOQ.html')" class="paragraph">OodleX low level async io</a></td><td width=33% align=right><span class='arrowright'></span><a href="javascript:show('OodleXIOQ_CloseFileRename_Async.html')" class="paragraph">OodleXIOQ_CloseFileRename_Async</a></td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="OodleXIOQ_Write_Async.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>OodleXIOQ_Write_Async</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "OodleXIOQ_Write_Async.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="OodleXIOQ_Write_Async.html_backmenu">
<table class=dropmenu>
<tr><td><span class='arrowleft'></span>&nbsp;<a href="javascript:show('OodleXIOQ_Read_Async.html')" class="paragraph">OodleXIOQ_Read_Async</a></td></tr><tr><td><span class='arrowright'></span>&nbsp;<a href="javascript:show('OodleXIOQ_SetFileSize_Async.html')" class="paragraph">OodleXIOQ_SetFileSize_Async</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<div class=prototype><div class=prototype_header>// Function prototype:</div><pre><span class=prototype_type><a href="javascript:show('OodleXHandle.html')" class="blue">OodleXHandle</a></span> <span class=prototype_type><a href="javascript:show('OodleXIOQ_Write_Async.html')" class="blue">OodleXIOQ_Write_Async</a></span>( <span class=prototype_type><a href="javascript:show('OodleXIOQFile.html')" class="blue">OodleXIOQFile</a></span> file,
const void * memory,
OO_SINTa size,
OO_S64 position,
<span class=prototype_type><a href="javascript:show('OodleXHandleAutoDelete.html')" class="blue">OodleXHandleAutoDelete</a></span> autoDelete OODEFAULT( OodleXHandleAutoDelete_No ),
<span class=prototype_type><a href="javascript:show('OodleXPriority.html')" class="blue">OodleXPriority</a></span> priority OODEFAULT( OodleXPriority_Normal ),
const <span class=prototype_type><a href="javascript:show('OodleXHandle.html')" class="blue">OodleXHandle</a></span> * dependencies OODEFAULT( NULL ),
OO_S32 numDependencies OODEFAULT( 0 ) );</pre></div><div class=discussion_heading>Discussion</div>Start a write request<div class=discussion_heading>Parameters</div> <table> <tr> <td style='vertical-align: top;' class=paramname><a id="OodleXIOQ_Write_Async.html_file" class=nohover>file</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> the file to act on
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXIOQ_Write_Async.html_memory" class=nohover>memory</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> memory to write from (must be <a href="javascript:show('OODLEX_IO_MAX_ALIGNMENT.html')" class="paragraph">OODLEX_IO_MAX_ALIGNMENT</a> aligned)
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXIOQ_Write_Async.html_size" class=nohover>size</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> number of bytes to write (must be <a href="javascript:show('OODLEX_IO_MAX_ALIGNMENT.html')" class="paragraph">OODLEX_IO_MAX_ALIGNMENT</a> aligned)
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXIOQ_Write_Async.html_position" class=nohover>position</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> file position to start the write (must be <a href="javascript:show('OODLEX_IO_MAX_ALIGNMENT.html')" class="paragraph">OODLEX_IO_MAX_ALIGNMENT</a> aligned)
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXIOQ_Write_Async.html_autoDelete" class=nohover>autoDelete</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> (optional) see <a href="javascript:show('OodleXHandleAutoDelete.html')" class="paragraph">OodleXHandleAutoDelete</a>
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXIOQ_Write_Async.html_priority" class=nohover>priority</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> (optional) priority of the operation ; see <a href="javascript:show('OodleXPriority.html')" class="paragraph">OodleXPriority</a>
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXIOQ_Write_Async.html_dependencies" class=nohover>dependencies</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> (optional) dependencies; the async op won't start until these are all complete; note : these are not freed, they must be autodelete or you must free them some other way.
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXIOQ_Write_Async.html_numDependencies" class=nohover>numDependencies</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> (optional) number of handles in <i>deps</i> array
</td></tr></table><div class=discussion_heading>Return Value</div> <table> <tr> <td style='vertical-align: top;' class=paramname><a id="OodleXIOQ_Write_Async.html_return" class=nohover>return</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> handle to the operation, or 0 if it could not be started (usually due to invalid args)
</td></tr></table><div class=discussion_heading>Discussion</div></p>
<p> Starts an async write from <i>memory at file offset _position , of _size bytes.
</i></p>
<p> The write is not done when OodleXIOQ_Write_Async returns. You must not free <i>memory until the write is done, as reported by
the handle returned.
</i></p>
<p> Writes are faster on some platforms if the file size is first reserved past the end of the write, using
<a href="javascript:show('OodleXIOQ_SetFileSize_Async.html')" class="paragraph">OodleXIOQ_SetFileSize_Async</a> or <a href="javascript:show('OodleXIOQ_ReserveFileSizeForWrite_Async.html')" class="paragraph">OodleXIOQ_ReserveFileSizeForWrite_Async</a>.
<br>&nbsp;<br> <table class=bar> <tr>
<td width=33% align=left><span class='arrowleft'></span><a href="javascript:show('OodleXIOQ_Read_Async.html')" class="paragraph">OodleXIOQ_Read_Async</a></td><td width=33% align=center><span class='arrowup'></span><a href="javascript:show('OodleXAPI_IOQ.html')" class="paragraph">OodleX low level async io</a></td><td width=33% align=right><span class='arrowright'></span><a href="javascript:show('OodleXIOQ_SetFileSize_Async.html')" class="paragraph">OodleXIOQ_SetFileSize_Async</a></td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="OodleXIOQ_Delete_Async.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>OodleXIOQ_Delete_Async</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "OodleXIOQ_Delete_Async.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="OodleXIOQ_Delete_Async.html_backmenu">
<table class=dropmenu>
<tr><td><span class='arrowleft'></span>&nbsp;<a href="javascript:show('OodleXIOQ_ForceWriteable_Async.html')" class="paragraph">OodleXIOQ_ForceWriteable_Async</a></td></tr><tr><td><span class='arrowright'></span>&nbsp;<a href="javascript:show('OodleXIOQ_Rename_Async.html')" class="paragraph">OodleXIOQ_Rename_Async</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<div class=prototype><div class=prototype_header>// Function prototype:</div><pre><span class=prototype_type><a href="javascript:show('OodleXHandle.html')" class="blue">OodleXHandle</a></span> <span class=prototype_type><a href="javascript:show('OodleXIOQ_Delete_Async.html')" class="blue">OodleXIOQ_Delete_Async</a></span>( const char * name,
<span class=prototype_type><a href="javascript:show('OodleXHandleAutoDelete.html')" class="blue">OodleXHandleAutoDelete</a></span> autoDelete OODEFAULT( OodleXHandleAutoDelete_No ),
<span class=prototype_type><a href="javascript:show('OodleXPriority.html')" class="blue">OodleXPriority</a></span> priority OODEFAULT( OodleXPriority_Normal ),
const <span class=prototype_type><a href="javascript:show('OodleXHandle.html')" class="blue">OodleXHandle</a></span> * dependencies OODEFAULT( NULL ),
OO_S32 numDependencies OODEFAULT( 0 ) );</pre></div><div class=discussion_heading>Discussion</div>Start a delete request.<div class=discussion_heading>Parameters</div> <table> <tr> <td style='vertical-align: top;' class=paramname><a id="OodleXIOQ_Delete_Async.html_name" class=nohover>name</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> the file to delete (VFS, UTF-8)
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXIOQ_Delete_Async.html_autoDelete" class=nohover>autoDelete</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> (optional) see <a href="javascript:show('OodleXHandleAutoDelete.html')" class="paragraph">OodleXHandleAutoDelete</a>
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXIOQ_Delete_Async.html_priority" class=nohover>priority</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> (optional) priority of the operation ; see <a href="javascript:show('OodleXPriority.html')" class="paragraph">OodleXPriority</a>
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXIOQ_Delete_Async.html_dependencies" class=nohover>dependencies</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> (optional) dependencies; the async op won't start until these are all complete; note : these are not freed, they must be autodelete or you must free them some other way.
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXIOQ_Delete_Async.html_numDependencies" class=nohover>numDependencies</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> (optional) number of handles in <i>deps</i> array
</td></tr></table><div class=discussion_heading>Return Value</div> <table> <tr> <td style='vertical-align: top;' class=paramname><a id="OodleXIOQ_Delete_Async.html_return" class=nohover>return</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> handle to the operation, or 0 if it could not be started (usually due to invalid args)
</td></tr></table><div class=discussion_heading>Discussion</div></p>
<p> Asynchronously delete a file or dir.
</p>
<p> Use OodleXIOQ_ForceWriteable_Async before the Delete to force the deletion of read-only and other no-access conditions.
<br>&nbsp;<br> <table class=bar> <tr>
<td width=33% align=left><span class='arrowleft'></span><a href="javascript:show('OodleXIOQ_ForceWriteable_Async.html')" class="paragraph">OodleXIOQ_ForceWriteable_Async</a></td><td width=33% align=center><span class='arrowup'></span><a href="javascript:show('OodleXAPI_IOQ.html')" class="paragraph">OodleX low level async io</a></td><td width=33% align=right><span class='arrowright'></span><a href="javascript:show('OodleXIOQ_Rename_Async.html')" class="paragraph">OodleXIOQ_Rename_Async</a></td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="OodleXIOQ_WaitDoneAllPending.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>OodleXIOQ_WaitDoneAllPending</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "OodleXIOQ_WaitDoneAllPending.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="OodleXIOQ_WaitDoneAllPending.html_backmenu">
<table class=dropmenu>
<tr><td><span class='arrowright'></span>&nbsp;<a href="javascript:show('OodleXIOQ_KickAnyDelayed.html')" class="paragraph">OodleXIOQ_KickAnyDelayed</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<div class=prototype><div class=prototype_header>// Function prototype:</div><pre>void <span class=prototype_type><a href="javascript:show('OodleXIOQ_WaitDoneAllPending.html')" class="blue">OodleXIOQ_WaitDoneAllPending</a></span>( );</pre></div><div class=discussion_heading>Discussion</div>Block the calling thread until all pending IOQ operations are complete<div class=discussion_heading>Discussion</div>Should generally only be used for errors or shutdown.
<a href="javascript:show('OodleX_WaitDoneAllPending.html')" class="paragraph">OodleX_WaitDoneAllPending</a> does this and more.
<br>&nbsp;<br> <table class=bar> <tr>
<td width=33% align=left><span class='arrowleft'></span><a href="javascript:show('OodleXFileInfo.html')" class="paragraph">OodleXFileInfo</a></td><td width=33% align=center><span class='arrowup'></span><a href="javascript:show('OodleXAPI_IOQ.html')" class="paragraph">OodleX low level async io</a></td><td width=33% align=right><span class='arrowright'></span><a href="javascript:show('OodleXIOQ_KickAnyDelayed.html')" class="paragraph">OodleXIOQ_KickAnyDelayed</a></td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="OodleXIOQ_Wait.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>OodleXIOQ_Wait</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "OodleXIOQ_Wait.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="OodleXIOQ_Wait.html_backmenu">
<table class=dropmenu>
<tr><td><span class='arrowleft'></span>&nbsp;<a href="javascript:show('OodleXIOQ_LogError.html')" class="paragraph">OodleXIOQ_LogError</a></td></tr><tr><td><span class='arrowright'></span>&nbsp;<a href="javascript:show('OodleXIOQ_GetInfo.html')" class="paragraph">OodleXIOQ_GetInfo</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<div class=prototype><div class=prototype_header>// Function prototype:</div><pre><span class=prototype_type><a href="javascript:show('OodleXStatus.html')" class="blue">OodleXStatus</a></span> <span class=prototype_type><a href="javascript:show('OodleXIOQ_Wait.html')" class="blue">OodleXIOQ_Wait</a></span>( <span class=prototype_type><a href="javascript:show('OodleXHandle.html')" class="blue">OodleXHandle</a></span> req,
<span class=prototype_type><a href="javascript:show('OodleXHandleDeleteIfDone.html')" class="blue">OodleXHandleDeleteIfDone</a></span> andDelete,
OO_U32 * pErrorCode OODEFAULT( NULL ) );</pre></div><div class=discussion_heading>Discussion</div>Block the calling thread until request is not pending<div class=discussion_heading>Parameters</div> <table> <tr> <td style='vertical-align: top;' class=paramname><a id="OodleXIOQ_Wait.html_req" class=nohover>req</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> the IOQ operation handle to work on
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXIOQ_Wait.html_andDelete" class=nohover>andDelete</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> if true, delete the request
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXIOQ_Wait.html_pErrorCode" class=nohover>pErrorCode</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> (optional) filled with the os error code, if any
</td></tr></table><div class=discussion_heading>Return Value</div> <table> <tr> <td style='vertical-align: top;' class=paramname><a id="OodleXIOQ_Wait.html_return" class=nohover>return</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> the status
</td></tr></table><div class=discussion_heading>Discussion</div></p>
<p> The status returned will not be OodleAsync_Pending.
Similar to <a href="javascript:show('OodleX_Wait.html')" class="paragraph">OodleX_Wait</a> , but only works on IOQ requests, and can return the IOQ error code.
Generally you should just call OodleX_Wait in most cases.
<br>&nbsp;<br> <table class=bar> <tr>
<td width=33% align=left><span class='arrowleft'></span><a href="javascript:show('OodleXIOQ_LogError.html')" class="paragraph">OodleXIOQ_LogError</a></td><td width=33% align=center><span class='arrowup'></span><a href="javascript:show('OodleXAPI_IOQ.html')" class="paragraph">OodleX low level async io</a></td><td width=33% align=right><span class='arrowright'></span><a href="javascript:show('OodleXIOQ_GetInfo.html')" class="paragraph">OodleXIOQ_GetInfo</a></td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="OodleXLog_SetState.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>OodleXLog_SetState</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "OodleXLog_SetState.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="OodleXLog_SetState.html_backmenu">
<table class=dropmenu>
<tr><td><span class='arrowright'></span>&nbsp;<a href="javascript:show('OodleXLog_SetEcho.html')" class="paragraph">OodleXLog_SetEcho</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<div class=prototype><div class=prototype_header>// Function prototype:</div><pre>void <span class=prototype_type><a href="javascript:show('OodleXLog_SetState.html')" class="blue">OodleXLog_SetState</a></span>( OO_U32 options );</pre></div><div class=discussion_heading>Discussion</div>Set the global log state<div class=discussion_heading>Parameters</div> <table> <tr> <td style='vertical-align: top;' class=paramname><a id="OodleXLog_SetState.html_options" class=nohover>options</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> a combination of <a href="javascript:show('OodleXLog_StateFlags.html')" class="paragraph">OodleXLog_StateFlags</a>
</td></tr></table><div class=discussion_heading>Discussion</div></p>
<p> SetState(0) disables all logging. Combine the bit mask flags of <a href="javascript:show('OodleXLog_StateFlags.html')" class="paragraph">OodleXLog_StateFlags</a>
with logical OR to create a log state.
<br>&nbsp;<br> <table class=bar> <tr>
<td width=33% align=left><span class='arrowleft'></span><a href="javascript:show('OodleXLogCallbackRetRet.html')" class="paragraph">OodleXLogCallbackRetRet</a></td><td width=33% align=center><span class='arrowup'></span><a href="javascript:show('OodleXAPI_Debug.html')" class="paragraph">OodleX Debug aids</a></td><td width=33% align=right><span class='arrowright'></span><a href="javascript:show('OodleXLog_SetEcho.html')" class="paragraph">OodleXLog_SetEcho</a></td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="OodleNetwork1TCP_Train.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>OodleNetwork1TCP_Train</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "OodleNetwork1TCP_Train.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="OodleNetwork1TCP_Train.html_backmenu">
<table class=dropmenu>
<tr><td><span class='arrowleft'></span>&nbsp;<a href="javascript:show('OodleNetwork1TCP_State_InitAsCopy.html')" class="paragraph">OodleNetwork1TCP_State_InitAsCopy</a></td></tr><tr><td><span class='arrowright'></span>&nbsp;<a href="javascript:show('OodleNetwork1TCP_Encode.html')" class="paragraph">OodleNetwork1TCP_Encode</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<div class=prototype><div class=prototype_header>// Function prototype:</div><pre>void <span class=prototype_type><a href="javascript:show('OodleNetwork1TCP_Train.html')" class="blue">OodleNetwork1TCP_Train</a></span>( <span class=prototype_type><a href="javascript:show('OodleNetwork1TCP_State.html')" class="blue">OodleNetwork1TCP_State</a></span> * state,
const <span class=prototype_type><a href="javascript:show('OodleNetwork1_Shared.html')" class="blue">OodleNetwork1_Shared</a></span> * shared,
const void * * training_packet_pointers,
const OO_S32 * training_packet_sizes,
OO_S32 num_training_packets );</pre></div><div class=discussion_heading>Discussion</div>Fill a <a href="javascript:show('OodleNetwork1TCP_State.html')" class="paragraph">OodleNetwork1TCP_State</a> from training data<div class=discussion_heading>Parameters</div> <table> <tr> <td style='vertical-align: top;' class=paramname><a id="OodleNetwork1TCP_Train.html_state" class=nohover>state</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> the <a href="javascript:show('OodleNetwork1TCP_State.html')" class="paragraph">OodleNetwork1TCP_State</a> which is filled out; this state should not need to be initialized in any way before calling Train, it will be reset internally.
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleNetwork1TCP_Train.html_shared" class=nohover>shared</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> the <a href="javascript:show('OodleNetwork1_Shared.html')" class="paragraph">OodleNetwork1_Shared</a> data to use in compression ; this shared data should already have had <a href="javascript:show('OodleNetwork1_Shared_SetWindow.html')" class="paragraph">OodleNetwork1_Shared_SetWindow</a> done on it.
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleNetwork1TCP_Train.html_training_packet_pointers" class=nohover>training_packet_pointers</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> array of pointers to packet data; array of size num_training_packets
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleNetwork1TCP_Train.html_training_packet_sizes" class=nohover>training_packet_sizes</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> array of sizes of packets; array of size num_training_packets
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleNetwork1TCP_Train.html_num_training_packets" class=nohover>num_training_packets</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> number of packets
</td></tr></table><div class=discussion_heading>Discussion</div></p>
<p> OodleNetwork1TCP_Train uses the provided training packet data to initialize <i>state</i>.
</p>
<p> The training packet data provided here should not overlap the window passed to <a href="javascript:show('OodleNetwork1_Shared_SetWindow.html')" class="paragraph">OodleNetwork1_Shared_SetWindow</a> ; it should not come from the same source or you will get false training.
</p>
<p> You may call <a href="javascript:show('OodleNetwork1_Shared_SetWindow.html')" class="paragraph">OodleNetwork1_Shared_SetWindow</a> and <a href="javascript:show('OodleNetwork1TCP_Train.html')" class="paragraph">OodleNetwork1TCP_Train</a> many times with different windows to optimize the window selection.
</p>
<p> Once training is done, the resulting <a href="javascript:show('OodleNetwork1TCP_State.html')" class="paragraph">OodleNetwork1TCP_State</a> should be written to disk and used by both the client and server as the initial channel state in <a href="javascript:show('OodleNetwork1TCP_State_InitAsCopy.html')" class="paragraph">OodleNetwork1TCP_State_InitAsCopy</a>.
<br>&nbsp;<br> <table class=bar> <tr>
<td width=33% align=left><span class='arrowleft'></span><a href="javascript:show('OodleNetwork1TCP_State_InitAsCopy.html')" class="paragraph">OodleNetwork1TCP_State_InitAsCopy</a></td><td width=33% align=center><span class='arrowup'></span><a href="javascript:show('OodleAPI_OodleNetwork1.html')" class="paragraph">OodleAPI_OodleNetwork1</a></td><td width=33% align=right><span class='arrowright'></span><a href="javascript:show('OodleNetwork1TCP_Encode.html')" class="paragraph">OodleNetwork1TCP_Encode</a></td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="Oodle_FAQ_LZCompareTable.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>FAQ: What are the speeds and ratios of the OodleLZ compressors and levels?</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "Oodle_FAQ_LZCompareTable.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="Oodle_FAQ_LZCompareTable.html_backmenu">
<table class=dropmenu>
<tr><td><span class='arrowleft'></span>&nbsp;<a href="javascript:show('Oodle_FAQ_WhichLZ.html')" class="paragraph">FAQ: Which OodleLZ should I use?</a></td></tr><tr><td><span class='arrowup'></span>&nbsp;<a href="javascript:show('Oodle_FAQ.html')" class="paragraph">Frequently Asked Questions</a></td></tr><tr><td><span class='arrowright'></span>&nbsp;<a href="javascript:show('Oodle_FAQ_DecompressingToGraphicsMemoryIsSlow.html')" class="paragraph">FAQ: How do I decompress to graphics memory quickly?</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<P>
To test the various options for compressor &amp; level, the best option is to run <a href="javascript:show('example_lz_chart.html')" class="paragraph">example_lz_chart : Example that makes a chart of OodleLZ options</a>.
This lets you generate numbers on your own machine, on your own file.
</p>
<p>In general, <a href="javascript:show('OodleLZ_CompressionLevel.html')" class="paragraph">OodleLZ_CompressionLevel</a> always trades off worse encode speed for compression ratio. It's the amount of
encoder effort, and typically doesn't affect decode speed much (though better compression also leads to better decode speed).
</p>
<p>Here is a sample run of example_lz_chart
showing the choice of <a href="javascript:show('OodleLZ_Compressor.html')" class="paragraph">OodleLZ_Compressor</a> vs <a href="javascript:show('OodleLZ_CompressionLevel.html')" class="paragraph">OodleLZ_CompressionLevel</a>. See also <a href="javascript:show('Oodle_FAQ_WhichLZ.html')" class="paragraph">FAQ: Which OodleLZ should I use?</a>
and <a href="javascript:show('OodleLZ_About.html')" class="paragraph">About OodleLZ</a>.
</p>
<p><PRE>
Oodle 2.6.3 example_lz_chart &lt;file>
lz_chart loading r:testsetslztestsetlzt99...
file size : 24700820
<hr>
Selkie : super fast to encode &amp; decode, least compression
Mermaid: fast decode with better-than-zlib compression
Kraken : good compression, fast decoding, great tradeoff!
Leviathan : very high compression, slowest decode
<hr>
chart cell shows | raw/comp ratio : encode MB/s : decode MB/s |
All compressors run at various encoder effort levels (SuperFast - Optimal).
Many repetitions are run for accurate timing.
<hr>
| HyperFast4| HyperFast3| HyperFast2| HyperFast1| SuperFast |
Selkie |1.41:675:3895|1.45:622:3888|1.53:465:3696|1.68:369:3785|1.70:342:3759|
Mermaid|1.66:436:2189|1.66:436:2188|1.79:352:2090|2.01:276:2055|2.04:261:2025|
Kraken |1.55:588:1839|1.71:419:1136|1.88:331:1087|2.10:279:1093|2.27:167:1010|
<hr>
compression ratio (raw/comp):
| HyperFast4| HyperFast3| HyperFast2| HyperFast1| SuperFast |
Selkie | 1.412 | 1.447 | 1.526 | 1.678 | 1.698 |
Mermaid| 1.660 | 1.660 | 1.793 | 2.011 | 2.041 |
Kraken | 1.548 | 1.711 | 1.877 | 2.103 | 2.268 |
<hr>
encode speed (MB/s):
| HyperFast4| HyperFast3| HyperFast2| HyperFast1| SuperFast |
Selkie | 674.548 | 621.811 | 464.555 | 369.364 | 341.588 |
Mermaid| 435.650 | 435.923 | 352.475 | 276.199 | 260.511 |
Kraken | 588.488 | 418.921 | 331.423 | 279.129 | 167.206 |
<hr>
decode speed (MB/s):
| HyperFast4| HyperFast3| HyperFast2| HyperFast1| SuperFast |
Selkie | 3894.644 | 3887.820 | 3695.984 | 3785.457 | 3758.594 |
Mermaid| 2189.030 | 2187.863 | 2090.319 | 2054.897 | 2024.692 |
Kraken | 1839.091 | 1135.920 | 1086.922 | 1093.407 | 1009.967 |
<hr>
| VeryFast | Fast | Normal | Optimal1 | Optimal3 |
Selkie |1.75:205:3490|1.83:105:3687|1.86: 43:3815|1.93:5.1:3858|1.94:2.6:3856|
Mermaid|2.12:173:1991|2.19: 84:2177|2.21: 32:2291|2.37:2.8:2058|2.44:1.8:1978|
Kraken |2.32:112:1104|2.39: 37:1187|2.43: 20:1189|2.55:3.1:1103|2.65:1.2:1038|
Leviath|2.50: 31: 738|2.57: 17: 787|2.62:9.5: 807|2.71:1.6: 811|2.76:0.9: 776|
<hr>
compression ratio (raw/comp):
| VeryFast | Fast | Normal | Optimal1 | Optimal3 |
Selkie | 1.748 | 1.833 | 1.863 | 1.933 | 1.943 |
Mermaid| 2.118 | 2.194 | 2.207 | 2.367 | 2.437 |
Kraken | 2.320 | 2.390 | 2.434 | 2.551 | 2.646 |
Leviath| 2.504 | 2.572 | 2.617 | 2.707 | 2.756 |
<hr>
encode speed (MB/s):
| VeryFast | Fast | Normal | Optimal1 | Optimal3 |
Selkie | 204.621 | 104.758 | 42.504 | 5.102 | 2.554 |
Mermaid| 172.681 | 84.227 | 32.030 | 2.798 | 1.836 |
Kraken | 111.858 | 37.126 | 19.859 | 3.091 | 1.204 |
Leviath| 31.031 | 16.697 | 9.461 | 1.621 | 0.869 |
<hr>
decode speed (MB/s):
| VeryFast | Fast | Normal | Optimal1 | Optimal3 |
Selkie | 3490.442 | 3686.689 | 3814.655 | 3857.857 | 3856.226 |
Mermaid| 1991.442 | 2176.725 | 2291.498 | 2057.575 | 1977.721 |
Kraken | 1104.172 | 1186.638 | 1189.372 | 1103.148 | 1038.352 |
Leviath| 737.934 | 787.152 | 806.523 | 811.161 | 775.800 |
<hr>
</PRE><br>&nbsp;<br> <table class=bar> <tr>
<td width=33% align=left><span class='arrowleft'></span><a href="javascript:show('Oodle_FAQ_WhichLZ.html')" class="paragraph">FAQ: Which OodleLZ should I use?</a></td><td width=33% align=center><span class='arrowup'></span><a href="javascript:show('Oodle_FAQ.html')" class="paragraph">Frequently Asked Questions</a></td><td width=33% align=right><span class='arrowright'></span><a href="javascript:show('Oodle_FAQ_DecompressingToGraphicsMemoryIsSlow.html')" class="paragraph">FAQ: How do I decompress to graphics memory quickly?</a></td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="OodleLZ_PackedRawOverlap.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>OodleLZ_PackedRawOverlap</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "OodleLZ_PackedRawOverlap.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="OodleLZ_PackedRawOverlap.html_backmenu">
<table class=dropmenu>
<tr><td><span class='arrowleft'></span>&nbsp;<a href="javascript:show('OodleLZ_Compressor.html')" class="paragraph">OodleLZ_Compressor</a></td></tr><tr><td><span class='arrowright'></span>&nbsp;<a href="javascript:show('OodleLZ_CheckCRC.html')" class="paragraph">OodleLZ_CheckCRC</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<div class=prototype><div class=prototype_header>// Enumerant:</div><pre><span class=prototype_type>enum</span> <a href="javascript:show('OodleLZ_PackedRawOverlap.html')">OodleLZ_PackedRawOverlap</a>
{
&nbsp;&nbsp;&nbsp;&nbsp;OodleLZ_PackedRawOverlap_No = 0,
&nbsp;&nbsp;&nbsp;&nbsp;OodleLZ_PackedRawOverlap_Yes = 1,
&nbsp;&nbsp;&nbsp;&nbsp;OodleLZ_PackedRawOverlap_Force32 = 0x40000000
};
</pre></div><div class=discussion_heading>Discussion</div> Bool enum
<br>&nbsp;<br> <table class=bar> <tr>
<td width=33% align=left><span class='arrowleft'></span><a href="javascript:show('OodleLZ_Compressor.html')" class="paragraph">OodleLZ_Compressor</a></td><td width=33% align=center><span class='arrowup'></span><a href="javascript:show('OodleAPI_LZ_Compressors.html')" class="paragraph">OodleAPI_LZ_Compressors</a></td><td width=33% align=right><span class='arrowright'></span><a href="javascript:show('OodleLZ_CheckCRC.html')" class="paragraph">OodleLZ_CheckCRC</a></td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="OodleLZ_GetSeekEntryPackedPos.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>OodleLZ_GetSeekEntryPackedPos</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "OodleLZ_GetSeekEntryPackedPos.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="OodleLZ_GetSeekEntryPackedPos.html_backmenu">
<table class=dropmenu>
<tr><td><span class='arrowleft'></span>&nbsp;<a href="javascript:show('OodleLZ_FindSeekEntry.html')" class="paragraph">OodleLZ_FindSeekEntry</a></td></tr><tr><td><span class='arrowright'></span>&nbsp;<a href="javascript:show('OodleLZ_CompressionLevel_GetName.html')" class="paragraph">OodleLZ_CompressionLevel_GetName</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<div class=prototype><div class=prototype_header>// Function prototype:</div><pre>OO_S64 <span class=prototype_type><a href="javascript:show('OodleLZ_GetSeekEntryPackedPos.html')" class="blue">OodleLZ_GetSeekEntryPackedPos</a></span>( OO_S32 seekI,
const <span class=prototype_type><a href="javascript:show('OodleLZ_SeekTable.html')" class="blue">OodleLZ_SeekTable</a></span> * seekTable );</pre></div><div class=discussion_heading>Discussion</div>Get the compressed position of a seek entry<div class=discussion_heading>Parameters</div> <table> <tr> <td style='vertical-align: top;' class=paramname><a id="OodleLZ_GetSeekEntryPackedPos.html_seekI" class=nohover>seekI</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> seek entry index , in [0,numSeekEntries)
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleLZ_GetSeekEntryPackedPos.html_seekTable" class=nohover>seekTable</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> result of <a href="javascript:show('OodleLZ_CreateSeekTable.html')" class="paragraph">OodleLZ_CreateSeekTable</a>
</td></tr></table><div class=discussion_heading>Return Value</div> <table> <tr> <td style='vertical-align: top;' class=paramname><a id="OodleLZ_GetSeekEntryPackedPos.html_return" class=nohover>return</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> compressed buffer position of the start of this seek entry
</td></tr></table><div class=discussion_heading>Discussion</div></p>
<p></p>
<p><br>&nbsp;<br> <table class=bar> <tr>
<td width=33% align=left><span class='arrowleft'></span><a href="javascript:show('OodleLZ_FindSeekEntry.html')" class="paragraph">OodleLZ_FindSeekEntry</a></td><td width=33% align=center><span class='arrowup'></span><a href="javascript:show('OodleAPI_LZ_Compressors.html')" class="paragraph">OodleAPI_LZ_Compressors</a></td><td width=33% align=right><span class='arrowright'></span><a href="javascript:show('OodleLZ_CompressionLevel_GetName.html')" class="paragraph">OodleLZ_CompressionLevel_GetName</a></td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="OodleNet_Plugins_SetPrintf.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>OodleNet_Plugins_SetPrintf</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "OodleNet_Plugins_SetPrintf.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="OodleNet_Plugins_SetPrintf.html_backmenu">
<table class=dropmenu>
<tr><td><span class='arrowleft'></span>&nbsp;<a href="javascript:show('OodleNet_Plugins_SetJobSystemAndCount.html')" class="paragraph">OodleNet_Plugins_SetJobSystemAndCount</a></td></tr><tr><td><span class='arrowright'></span>&nbsp;<a href="javascript:show('OodleNet_Plugins_SetAssertion.html')" class="paragraph">OodleNet_Plugins_SetAssertion</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<div class=prototype><div class=prototype_header>// Function prototype:</div><pre><span class=prototype_type><a href="javascript:show('t_fp_OodleNet_Plugin_Printf.html')" class="blue">t_fp_OodleNet_Plugin_Printf</a></span> * <span class=prototype_type><a href="javascript:show('OodleNet_Plugins_SetPrintf.html')" class="blue">OodleNet_Plugins_SetPrintf</a></span>( <span class=prototype_type><a href="javascript:show('t_fp_OodleNet_Plugin_Printf.html')" class="blue">t_fp_OodleNet_Plugin_Printf</a></span> * fp_rrRawPrintf );</pre></div><div class=discussion_heading>Discussion</div>Install the callback used by Oodle Core for logging<div class=discussion_heading>Parameters</div> <table> <tr> <td style='vertical-align: top;' class=paramname><a id="OodleNet_Plugins_SetPrintf.html_fp_rrRawPrintf" class=nohover>fp_rrRawPrintf</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> function pointer to your log function; may be NULL to disable all logging
</td></tr></table><div class=discussion_heading>Return Value</div> <table> <tr> <td style='vertical-align: top;' class=paramname><a id="OodleNet_Plugins_SetPrintf.html_return" class=nohover>return</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> returns the previous function pointer
</td></tr></table><div class=discussion_heading>Discussion</div></p>
<p> Use this function to install your own printf for Oodle Core.
</p>
<p> The default implementation in debug builds, if you install nothing, uses the C stdio printf for logging.
On Microsoft platforms, it uses OutputDebugString and not stdio.
</p>
<p> To disable all logging, call OodleNet_Plugins_SetPrintf(NULL)
</p>
<p> WARNING : this function is NOT thread safe! It should be done only once and done in a place where the caller can guarantee thread safety.
</p>
<p> In the debug build of Oodle, you can install OodleNet_Plugin_Printf_Verbose to get more verbose logging
</p>
<p><br>&nbsp;<br> <table class=bar> <tr>
<td width=33% align=left><span class='arrowleft'></span><a href="javascript:show('OodleNet_Plugins_SetJobSystemAndCount.html')" class="paragraph">OodleNet_Plugins_SetJobSystemAndCount</a></td><td width=33% align=center><span class='arrowup'></span><a href="javascript:show('OodleAPI_OodleNet_Plugins.html')" class="paragraph">Network plugins</a></td><td width=33% align=right><span class='arrowright'></span><a href="javascript:show('OodleNet_Plugins_SetAssertion.html')" class="paragraph">OodleNet_Plugins_SetAssertion</a></td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="OodleXLog_SetCallback.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>OodleXLog_SetCallback</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "OodleXLog_SetCallback.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="OodleXLog_SetCallback.html_backmenu">
<table class=dropmenu>
<tr><td><span class='arrowleft'></span>&nbsp;<a href="javascript:show('OodleXLog_GetEcho.html')" class="paragraph">OodleXLog_GetEcho</a></td></tr><tr><td><span class='arrowright'></span>&nbsp;<a href="javascript:show('OodleXLog_GetCallback.html')" class="paragraph">OodleXLog_GetCallback</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<div class=prototype><div class=prototype_header>// Function prototype:</div><pre>void <span class=prototype_type><a href="javascript:show('OodleXLog_SetCallback.html')" class="blue">OodleXLog_SetCallback</a></span>( <span class=prototype_type><a href="javascript:show('OodleXLogCallbackRet.html')" class="blue">OodleXLogCallbackRet</a></span> * cb );</pre></div><div class=discussion_heading>Discussion</div>Set the <a href="javascript:show('OodleXLogCallbackRet.html')" class="paragraph">OodleXLogCallbackRet</a> used for logs<div class=discussion_heading>Parameters</div> <table> <tr> <td style='vertical-align: top;' class=paramname><a id="OodleXLog_SetCallback.html_cb" class=nohover>cb</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> the callback to use
</td></tr></table><div class=discussion_heading>Discussion</div></p>
<p> The callback is only called if the <a href="javascript:show('OodleXLog_StateFlags.html','OodleXLog_StateFlags.html_OODLEXLOG_CALLBACK')" class="paragraph">OODLEXLOG_CALLBACK</a> bit is set in
<a href="javascript:show('OodleXLog_SetState.html')" class="paragraph">OodleXLog_SetState</a>
<br>&nbsp;<br> <table class=bar> <tr>
<td width=33% align=left><span class='arrowleft'></span><a href="javascript:show('OodleXLog_GetEcho.html')" class="paragraph">OodleXLog_GetEcho</a></td><td width=33% align=center><span class='arrowup'></span><a href="javascript:show('OodleXAPI_Debug.html')" class="paragraph">OodleX Debug aids</a></td><td width=33% align=right><span class='arrowright'></span><a href="javascript:show('OodleXLog_GetCallback.html')" class="paragraph">OodleXLog_GetCallback</a></td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="OodleLZ_Compressor_CanDecodeInCircularWindow.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>OodleLZ_Compressor_CanDecodeInCircularWindow</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "OodleLZ_Compressor_CanDecodeInCircularWindow.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="OodleLZ_Compressor_CanDecodeInCircularWindow.html_backmenu">
<table class=dropmenu>
<tr><td><span class='arrowleft'></span>&nbsp;<a href="javascript:show('OodleLZ_Compressor_UsesLargeWindow.html')" class="paragraph">OodleLZ_Compressor_UsesLargeWindow</a></td></tr><tr><td><span class='arrowright'></span>&nbsp;<a href="javascript:show('OodleLZ_Compressor_CanDecodeThreadPhased.html')" class="paragraph">OodleLZ_Compressor_CanDecodeThreadPhased</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<div class=prototype><div class=prototype_header>// Function prototype:</div><pre>OO_BOOL <span class=prototype_type><a href="javascript:show('OodleLZ_Compressor_CanDecodeInCircularWindow.html')" class="blue">OodleLZ_Compressor_CanDecodeInCircularWindow</a></span>( <span class=prototype_type><a href="javascript:show('OodleLZ_Compressor.html')" class="blue">OodleLZ_Compressor</a></span> compressor );</pre></div><div class=discussion_heading>Discussion</div>OodleLZ_Compressor properties helper.<div class=discussion_heading>Discussion</div>Tells you if this compressor can be decoded using a fixed size circular window.
deprecated as of 2.9.0
<br>&nbsp;<br> <table class=bar> <tr>
<td width=33% align=left><span class='arrowleft'></span><a href="javascript:show('OodleLZ_Compressor_UsesLargeWindow.html')" class="paragraph">OodleLZ_Compressor_UsesLargeWindow</a></td><td width=33% align=center><span class='arrowup'></span><a href="javascript:show('OodleAPI_LZ_Compressors.html')" class="paragraph">OodleAPI_LZ_Compressors</a></td><td width=33% align=right><span class='arrowright'></span><a href="javascript:show('OodleLZ_Compressor_CanDecodeThreadPhased.html')" class="paragraph">OodleLZ_Compressor_CanDecodeThreadPhased</a></td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="OodleLZ_GetAllChunksCompressor.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>OodleLZ_GetAllChunksCompressor</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "OodleLZ_GetAllChunksCompressor.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="OodleLZ_GetAllChunksCompressor.html_backmenu">
<table class=dropmenu>
<tr><td><span class='arrowleft'></span>&nbsp;<a href="javascript:show('OodleLZ_GetCompressedStepForRawStep.html')" class="paragraph">OodleLZ_GetCompressedStepForRawStep</a></td></tr><tr><td><span class='arrowright'></span>&nbsp;<a href="javascript:show('OodleLZ_GetFirstChunkCompressor.html')" class="paragraph">OodleLZ_GetFirstChunkCompressor</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<div class=prototype><div class=prototype_header>// Function prototype:</div><pre><span class=prototype_type><a href="javascript:show('OodleLZ_Compressor.html')" class="blue">OodleLZ_Compressor</a></span> <span class=prototype_type><a href="javascript:show('OodleLZ_GetAllChunksCompressor.html')" class="blue">OodleLZ_GetAllChunksCompressor</a></span>( const void * compBuf,
OO_SINTa compBufSize,
OO_SINTa rawLen );</pre></div><div class=discussion_heading>Discussion</div>ask who compressed all chunks in this buf chunk<div class=discussion_heading>Parameters</div> <table> <tr> <td style='vertical-align: top;' class=paramname><a id="OodleLZ_GetAllChunksCompressor.html_compBuf" class=nohover>compBuf</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> pointer to compressed data; must be the start of compressed buffer, or a step of <a href="javascript:show('OODLELZ_BLOCK_LEN.html')" class="paragraph">OODLELZ_BLOCK_LEN</a> raw bytes
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleLZ_GetAllChunksCompressor.html_compBufSize" class=nohover>compBufSize</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> size of <i>compBuf</i>
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleLZ_GetAllChunksCompressor.html_rawLen" class=nohover>rawLen</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> rawlen of data in <i>compBuf</i>
</td></tr></table><div class=discussion_heading>Return Value</div> <table> <tr> <td style='vertical-align: top;' class=paramname><a id="OodleLZ_GetAllChunksCompressor.html_return" class=nohover>return</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> the <a href="javascript:show('OodleLZ_Compressor.html')" class="paragraph">OodleLZ_Compressor</a> used to encode this chunk
</td></tr></table><div class=discussion_heading>Discussion</div></p>
<p> returns a simple compressor (for example OodleLZ_Compressor_Kraken) if that was used on all chunks
</p>
<p> returns OodleLZ_Compressor_Hydra if different NewLZ encoders were used (for example Kraken+Mermaid)
</p>
<p> returns OodleLZ_Compressor_Count if a heterogenous mix of compressors was used (not just NewLZ)
</p>
<p> returns OodleLZ_Compressor_Invalid on error
</p>
<p> note this is only for this chunk - later chunks may have different compressors (eg. with Hydra)
if you compressed all chunks the same it's up to you to store that info in your header
</p>
<p> returns OodleLZ_Compressor_Invalid if <i>compBufSize</i> is too small or any chunk is corrupt
<br>&nbsp;<br> <table class=bar> <tr>
<td width=33% align=left><span class='arrowleft'></span><a href="javascript:show('OodleLZ_GetCompressedStepForRawStep.html')" class="paragraph">OodleLZ_GetCompressedStepForRawStep</a></td><td width=33% align=center><span class='arrowup'></span><a href="javascript:show('OodleAPI_LZ_Compressors.html')" class="paragraph">OodleAPI_LZ_Compressors</a></td><td width=33% align=right><span class='arrowright'></span><a href="javascript:show('OodleLZ_GetFirstChunkCompressor.html')" class="paragraph">OodleLZ_GetFirstChunkCompressor</a></td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="t_fp_OodleNet_Plugin_Free.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>t_fp_OodleNet_Plugin_Free</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "t_fp_OodleNet_Plugin_Free.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="t_fp_OodleNet_Plugin_Free.html_backmenu">
<table class=dropmenu>
<tr><td><span class='arrowleft'></span>&nbsp;<a href="javascript:show('t_fp_OodleNet_Plugin_MallocAligned.html')" class="paragraph">t_fp_OodleNet_Plugin_MallocAligned</a></td></tr><tr><td><span class='arrowright'></span>&nbsp;<a href="javascript:show('t_fp_OodleNet_Plugin_RunJob.html')" class="paragraph">t_fp_OodleNet_Plugin_RunJob</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<div class=prototype><div class=prototype_header>// Function typedef:</div><pre>OODEFFUNC void( OODLE_CALLBACK <span class=prototype_type><a href="javascript:show('t_fp_OodleNet_Plugin_Free.html')" class="blue">t_fp_OodleNet_Plugin_Free</a></span> )( void * ptr );</pre></div><div class=discussion_heading>Discussion</div>Function pointer type for OodleFree<div class=discussion_heading>Parameters</div> <table> <tr> <td style='vertical-align: top;' class=paramname><a id="t_fp_OodleNet_Plugin_Free.html_ptr" class=nohover>ptr</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> pointer to memory to free
</td></tr></table><div class=discussion_heading>Discussion</div></p>
<p><br>&nbsp;<br> <table class=bar> <tr>
<td width=33% align=left><span class='arrowleft'></span><a href="javascript:show('t_fp_OodleNet_Plugin_MallocAligned.html')" class="paragraph">t_fp_OodleNet_Plugin_MallocAligned</a></td><td width=33% align=center><span class='arrowup'></span><a href="javascript:show('OodleAPI_OodleNet_Plugins.html')" class="paragraph">Network plugins</a></td><td width=33% align=right><span class='arrowright'></span><a href="javascript:show('t_fp_OodleNet_Plugin_RunJob.html')" class="paragraph">t_fp_OodleNet_Plugin_RunJob</a></td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="t_fp_OodleNet_Plugin_MallocAligned.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>t_fp_OodleNet_Plugin_MallocAligned</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "t_fp_OodleNet_Plugin_MallocAligned.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="t_fp_OodleNet_Plugin_MallocAligned.html_backmenu">
<table class=dropmenu>
<tr><td><span class='arrowright'></span>&nbsp;<a href="javascript:show('t_fp_OodleNet_Plugin_Free.html')" class="paragraph">t_fp_OodleNet_Plugin_Free</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<div class=prototype><div class=prototype_header>// Function typedef:</div><pre>OODEFFUNC void *( OODLE_CALLBACK <span class=prototype_type><a href="javascript:show('t_fp_OodleNet_Plugin_MallocAligned.html')" class="blue">t_fp_OodleNet_Plugin_MallocAligned</a></span> )( OO_SINTa bytes,
OO_S32 alignment );</pre></div><div class=discussion_heading>Discussion</div>Function pointer type for OodleMallocAligned<div class=discussion_heading>Parameters</div> <table> <tr> <td style='vertical-align: top;' class=paramname><a id="t_fp_OodleNet_Plugin_MallocAligned.html_bytes" class=nohover>bytes</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> number of bytes to allocate
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="t_fp_OodleNet_Plugin_MallocAligned.html_alignment" class=nohover>alignment</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> required alignment of returned pointer
</td></tr></table><div class=discussion_heading>Return Value</div> <table> <tr> <td style='vertical-align: top;' class=paramname><a id="t_fp_OodleNet_Plugin_MallocAligned.html_return" class=nohover>return</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> pointer to memory allocated (must not be NULL)
</td></tr></table><div class=discussion_heading>Discussion</div></p>
<p> <i>alignment</i> will always be a power of two
</p>
<p> <i>alignment</i> will always be >= <a href="javascript:show('OODLE_MALLOC_MINIMUM_ALIGNMENT.html')" class="paragraph">OODLE_MALLOC_MINIMUM_ALIGNMENT</a>
</p>
<p><br>&nbsp;<br> <table class=bar> <tr>
<td width=33% align=left><span class='arrowleft'></span><a href="javascript:show('OodleNet_Plugins_SetAssertion.html')" class="paragraph">OodleNet_Plugins_SetAssertion</a></td><td width=33% align=center><span class='arrowup'></span><a href="javascript:show('OodleAPI_OodleNet_Plugins.html')" class="paragraph">Network plugins</a></td><td width=33% align=right><span class='arrowright'></span><a href="javascript:show('t_fp_OodleNet_Plugin_Free.html')" class="paragraph">t_fp_OodleNet_Plugin_Free</a></td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="OodleX_IOAlignUpS32.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>OodleX_IOAlignUpS32</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "OodleX_IOAlignUpS32.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="OodleX_IOAlignUpS32.html_backmenu">
<table class=dropmenu>
<tr><td><span class='arrowleft'></span>&nbsp;<a href="javascript:show('OodleX_MakeExtensionKey.html')" class="paragraph">OodleX_MakeExtensionKey</a></td></tr><tr><td><span class='arrowright'></span>&nbsp;<a href="javascript:show('OodleX_IOAlignUpS64.html')" class="paragraph">OodleX_IOAlignUpS64</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<div class=prototype><div class=prototype_header>// Function prototype:</div><pre>OO_S32 <span class=prototype_type><a href="javascript:show('OodleX_IOAlignUpS32.html')" class="blue">OodleX_IOAlignUpS32</a></span>( const OO_S32 x );</pre></div><div class=discussion_heading>Discussion</div>Align up to <a href="javascript:show('OODLEX_IO_MAX_ALIGNMENT.html')" class="paragraph">OODLEX_IO_MAX_ALIGNMENT</a><div class=discussion_heading>Parameters</div> <table> <tr> <td style='vertical-align: top;' class=paramname><a id="OodleX_IOAlignUpS32.html_x" class=nohover>x</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> value to align
</td></tr></table><div class=discussion_heading>Return Value</div> <table> <tr> <td style='vertical-align: top;' class=paramname><a id="OodleX_IOAlignUpS32.html_return" class=nohover>return</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> aligned value
</td></tr></table><div class=discussion_heading>Discussion</div></p>
<p> Align x up to <a href="javascript:show('OODLEX_IO_MAX_ALIGNMENT.html')" class="paragraph">OODLEX_IO_MAX_ALIGNMENT</a>
<br>&nbsp;<br> <table class=bar> <tr>
<td width=33% align=left><span class='arrowleft'></span><a href="javascript:show('OodleX_MakeExtensionKey.html')" class="paragraph">OodleX_MakeExtensionKey</a></td><td width=33% align=center><span class='arrowup'></span><a href="javascript:show('OodleXAPI_Util.html')" class="paragraph">OodleX Utils</a></td><td width=33% align=right><span class='arrowright'></span><a href="javascript:show('OodleX_IOAlignUpS64.html')" class="paragraph">OodleX_IOAlignUpS64</a></td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="OodleXMallocBig.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>OodleXMallocBig</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "OodleXMallocBig.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="OodleXMallocBig.html_backmenu">
<table class=dropmenu>
<tr><td><span class='arrowleft'></span>&nbsp;<a href="javascript:show('OodleXMallocBigAlignment.html')" class="paragraph">OodleXMallocBigAlignment</a></td></tr><tr><td><span class='arrowright'></span>&nbsp;<a href="javascript:show('OodleXFreeBig.html')" class="paragraph">OodleXFreeBig</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<div class=prototype><div class=prototype_header>// Function prototype:</div><pre>void * <span class=prototype_type><a href="javascript:show('OodleXMallocBig.html')" class="blue">OodleXMallocBig</a></span>( OO_SINTa bytes );</pre></div><div class=discussion_heading>Discussion</div>alloc a large block with "Big" alignment<div class=discussion_heading>Parameters</div> <table> <tr> <td style='vertical-align: top;' class=paramname><a id="OodleXMallocBig.html_bytes" class=nohover>bytes</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> the amount to allocate (must be > 0)
</td></tr></table><div class=discussion_heading>Return Value</div> <table> <tr> <td style='vertical-align: top;' class=paramname><a id="OodleXMallocBig.html_return" class=nohover>return</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> pointer to allocated memory
</td></tr></table><div class=discussion_heading>Discussion</div></p>
<p> query the alignment via <a href="javascript:show('OodleXMallocBigAlignment.html')" class="paragraph">OodleXMallocBigAlignment</a>
<br>&nbsp;<br> <table class=bar> <tr>
<td width=33% align=left><span class='arrowleft'></span><a href="javascript:show('OodleXMallocBigAlignment.html')" class="paragraph">OodleXMallocBigAlignment</a></td><td width=33% align=center><span class='arrowup'></span><a href="javascript:show('OodleXAPI_Malloc.html')" class="paragraph">OodleX Memory Allocators</a></td><td width=33% align=right><span class='arrowright'></span><a href="javascript:show('OodleXFreeBig.html')" class="paragraph">OodleXFreeBig</a></td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="Oodle_SetUsageWarnings.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>Oodle_SetUsageWarnings</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "Oodle_SetUsageWarnings.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="Oodle_SetUsageWarnings.html_backmenu">
<table class=dropmenu>
<tr><td><span class='arrowleft'></span>&nbsp;<a href="javascript:show('Oodle_SetConfigValues.html')" class="paragraph">Oodle_SetConfigValues</a></td></tr><tr><td><span class='arrowright'></span>&nbsp;<a href="javascript:show('Oodle_CheckVersion.html')" class="paragraph">Oodle_CheckVersion</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<div class=prototype><div class=prototype_header>// Function prototype:</div><pre>void <span class=prototype_type><a href="javascript:show('Oodle_SetUsageWarnings.html')" class="blue">Oodle_SetUsageWarnings</a></span>( <span class=prototype_type><a href="javascript:show('Oodle_UsageWarnings.html')" class="blue">Oodle_UsageWarnings</a></span> state );</pre></div><div class=discussion_heading>Discussion</div>Enables or disables Oodle usage warnings.<div class=discussion_heading>Parameters</div> <table> <tr> <td style='vertical-align: top;' class=paramname><a id="Oodle_SetUsageWarnings.html_state" class=nohover>state</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> whether usage warnings should be enabled or disabled.
</td></tr></table><div class=discussion_heading>Discussion</div></p>
<p> Usage warnings are enabled by default and try to be low-noise, but in case you want to
disable them, this is how.
</p>
<p> This should generally be done once at startup. Setting this state while there are Oodle
calls running on other threads has undefined results.
<br>&nbsp;<br> <table class=bar> <tr>
<td width=33% align=left><span class='arrowleft'></span><a href="javascript:show('Oodle_SetConfigValues.html')" class="paragraph">Oodle_SetConfigValues</a></td><td width=33% align=center><span class='arrowup'></span><a href="javascript:show('OodleAPI_Base.html')" class="paragraph">Core Base</a></td><td width=33% align=right><span class='arrowright'></span><a href="javascript:show('Oodle_CheckVersion.html')" class="paragraph">Oodle_CheckVersion</a></td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="OodleNetwork1UDP_Encode.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>OodleNetwork1UDP_Encode</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "OodleNetwork1UDP_Encode.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="OodleNetwork1UDP_Encode.html_backmenu">
<table class=dropmenu>
<tr><td><span class='arrowleft'></span>&nbsp;<a href="javascript:show('OodleNetwork1UDP_State_Size.html')" class="paragraph">OodleNetwork1UDP_State_Size</a></td></tr><tr><td><span class='arrowright'></span>&nbsp;<a href="javascript:show('OodleNetwork1UDP_Decode.html')" class="paragraph">OodleNetwork1UDP_Decode</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<div class=prototype><div class=prototype_header>// Function prototype:</div><pre>OO_SINTa <span class=prototype_type><a href="javascript:show('OodleNetwork1UDP_Encode.html')" class="blue">OodleNetwork1UDP_Encode</a></span>( const <span class=prototype_type><a href="javascript:show('OodleNetwork1UDP_State.html')" class="blue">OodleNetwork1UDP_State</a></span> * state,
const <span class=prototype_type><a href="javascript:show('OodleNetwork1_Shared.html')" class="blue">OodleNetwork1_Shared</a></span> * shared,
const void * raw,
OO_SINTa rawLen,
void * comp );</pre></div><div class=discussion_heading>Discussion</div>Encode a packet<div class=discussion_heading>Parameters</div> <table> <tr> <td style='vertical-align: top;' class=paramname><a id="OodleNetwork1UDP_Encode.html_state" class=nohover>state</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> const shared compression state
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleNetwork1UDP_Encode.html_shared" class=nohover>shared</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> const shared compression context
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleNetwork1UDP_Encode.html_raw" class=nohover>raw</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> packet bytes to compress
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleNetwork1UDP_Encode.html_rawLen" class=nohover>rawLen</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> size of the packet to compress ; can be >= 0
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleNetwork1UDP_Encode.html_comp" class=nohover>comp</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> output compressed bytes; must be allocated to at least <a href="javascript:show('OodleNetwork1_CompressedBufferSizeNeeded.html')" class="paragraph">OodleNetwork1_CompressedBufferSizeNeeded</a> bytes
</td></tr></table><div class=discussion_heading>Return Value</div> <table> <tr> <td style='vertical-align: top;' class=paramname><a id="OodleNetwork1UDP_Encode.html_return" class=nohover>return</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> length of output compressed data written to <i>comp</i> ; the returned compLen is strictly &lt;= rawLen
</td></tr></table><div class=discussion_heading>Discussion</div></p>
<p> Encodes one packet.
</p>
<p> <i>state</i> and <i>shared</i> are both const and can be shared by all encoders and decoders.
</p>
<p> The returned compLen will never be greater than rawLen, because OodleNetwork1 won't send packets that expand under compression (it just sends them uncompressed) - however it may write further than that during the compression attempt. Do not use the returned compLen to check the size of the compressed buffer needed.
</p>
<p><br>&nbsp;<br> <table class=bar> <tr>
<td width=33% align=left><span class='arrowleft'></span><a href="javascript:show('OodleNetwork1UDP_State_Size.html')" class="paragraph">OodleNetwork1UDP_State_Size</a></td><td width=33% align=center><span class='arrowup'></span><a href="javascript:show('OodleAPI_OodleNetwork1.html')" class="paragraph">OodleAPI_OodleNetwork1</a></td><td width=33% align=right><span class='arrowright'></span><a href="javascript:show('OodleNetwork1UDP_Decode.html')" class="paragraph">OodleNetwork1UDP_Decode</a></td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="start_NetworkSplit.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>Oodle Network and Data SDK separation</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "start_NetworkSplit.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="start_NetworkSplit.html_backmenu">
<table class=dropmenu>
<tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<P>
As of Oodle 2.7.0 , Oodle Network is now a separate SDK from Oodle Data.
</p>
<p>Oodle Data compression provides two libraries (Core and Ext). Oodle Network provides another library.
</p>
<p>For example on Windows you have :
</p>
<p>In the Data SDK :
</p>
<p>oo2core_win64.lib
oo2ext_win64.lib
</p>
<p>In the Network SDK :
</p>
<p>oo2net_win64.lib
</p>
<p>Oodle Data &amp; Network are independent and do not link together.
</p>
<p>If you are using Network &amp; Data of the same SDK version, you may install the SDKs to the same place, allow
them to overwrite shared files that are identical in the two SDKs.
</p>
<p>The Oodle Network examples build without Oodle Data, but can optionally be set to use Oodle Data to compress
the shared model state.
</p>
<p>Oodle Core and Oodle Network have similar but independent plugins that the client can set to control their
interaction with the system via logging, allocations, and assertions.
If you use both SDKs, you can install your functions by calling both plugins, for example <a href="javascript:show('OodleNet_Plugins_SetAllocators.html')" class="paragraph">OodleNet_Plugins_SetAllocators</a> and <a href="javascript:show('OodleCore_Plugins_SetAllocators.html')" class="paragraph">OodleCore_Plugins_SetAllocators</a>.
</p>
<p>If you do Oodle Ext Init, the Oodle Ext plugins are installed to Oodle Core. Oodle Ext does not interact with
Oodle Network.<br>&nbsp;<br> <table class=bar> <tr>
<td width=33%>&nbsp;</td><td width=33%>&nbsp;</td><td width=33%>&nbsp;</td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="OodleXInitOptions.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>OodleXInitOptions</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "OodleXInitOptions.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="OodleXInitOptions.html_backmenu">
<table class=dropmenu>
<tr><td><span class='arrowright'></span>&nbsp;<a href="javascript:show('OodleXConfigValues.html')" class="paragraph">OodleXConfigValues</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<div class=prototype><div class=prototype_header>// Structure definition:</div><pre><span class=prototype_type>struct</span> <a href="javascript:show('OodleXInitOptions.html')">OodleXInitOptions</a>
{
&nbsp;&nbsp;&nbsp;&nbsp;const <span class=prototype_type><a href="javascript:show('OodleXMallocVTable.html')" class="blue">OodleXMallocVTable</a></span> * m_pBaseVTable;
&nbsp;&nbsp;&nbsp;&nbsp;OO_BOOL m_OodleInit_DebugAllocator;
&nbsp;&nbsp;&nbsp;&nbsp;OO_S32 m_num_handles_log2;
&nbsp;&nbsp;&nbsp;&nbsp;OO_BOOL m_OodleInit_ThreadLog;
&nbsp;&nbsp;&nbsp;&nbsp;OO_BOOL m_OodleInit_Log;
&nbsp;&nbsp;&nbsp;&nbsp;OO_BOOL m_OodleInit_Log_Header;
&nbsp;&nbsp;&nbsp;&nbsp;const char * m_OodleInit_Log_FileName;
&nbsp;&nbsp;&nbsp;&nbsp;OO_BOOL m_OodleInit_Log_FlushEachWrite;
&nbsp;&nbsp;&nbsp;&nbsp;OO_BOOL m_OodleInit_BreakOnLogError;
&nbsp;&nbsp;&nbsp;&nbsp;OO_BOOL m_OodleInit_Telemetry;
&nbsp;&nbsp;&nbsp;&nbsp;void * m_OodleInit_Telemetry_Context;
&nbsp;&nbsp;&nbsp;&nbsp;OO_BOOL m_OodleInit_StackTrace;
&nbsp;&nbsp;&nbsp;&nbsp;OO_BOOL m_OodleInit_LeakTrack;
&nbsp;&nbsp;&nbsp;&nbsp;OO_BOOL m_OodleInit_SimpleProf;
&nbsp;&nbsp;&nbsp;&nbsp;OO_BOOL m_OodleInit_FuzzTest;
&nbsp;&nbsp;&nbsp;&nbsp;<span class=prototype_type><a href="javascript:show('t_OodleFPVoidVoid.html')" class="blue">t_OodleFPVoidVoid</a></span> * m_OodleInit_ThreadProfiler_funcptr;
&nbsp;&nbsp;&nbsp;&nbsp;OO_BOOL m_OodleInit_IOQ;
&nbsp;&nbsp;&nbsp;&nbsp;OO_BOOL m_OodleInit_IOQ_Log;
&nbsp;&nbsp;&nbsp;&nbsp;OO_BOOL m_OodleInit_IOQ_BreakOnError;
&nbsp;&nbsp;&nbsp;&nbsp;OO_BOOL m_OodleInit_IOQ_Threaded;
&nbsp;&nbsp;&nbsp;&nbsp;OO_BOOL m_OodleInit_IOQ_CheckAlignment;
&nbsp;&nbsp;&nbsp;&nbsp;OO_BOOL m_OodleInit_Workers;
&nbsp;&nbsp;&nbsp;&nbsp;OO_S32 m_OodleInit_Workers_Count;
};
</pre></div><div class=discussion_heading>Discussion</div> Options struct for <a href="javascript:show('OodleX_Init.html')" class="paragraph">OodleX_Init</a>
can be filled with <a href="javascript:show('OodleX_Init_GetDefaults.html')" class="paragraph">OodleX_Init_GetDefaults</a>
<div class=discussion_heading>Members</div> <table> <tr> <td style='vertical-align: top;' class=paramname><a id="OodleXInitOptions.html_m_pBaseVTable" class=nohover>m_pBaseVTable</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> vtable for OodleMalloc to use [OodleXMalloc_GetVTable_OS]</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXInitOptions.html_m_OodleInit_DebugAllocator" class=nohover>m_OodleInit_DebugAllocator</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> option : put a debug allocator layer on top of m_pBaseVTable [false]</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXInitOptions.html_m_num_handles_log2" class=nohover>m_num_handles_log2</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> log2 of the number of handle 2048 item chunks for the OodleXHandleTable [13]</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXInitOptions.html_m_OodleInit_ThreadLog" class=nohover>m_OodleInit_ThreadLog</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> option : enable the ThreadLog [true]</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXInitOptions.html_m_OodleInit_Log" class=nohover>m_OodleInit_Log</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> option : enable the Log [true]</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXInitOptions.html_m_OodleInit_Log_Header" class=nohover>m_OodleInit_Log_Header</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> option : write a header to the Log at startup [true]</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXInitOptions.html_m_OodleInit_Log_FileName" class=nohover>m_OodleInit_Log_FileName</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> set the log file name (NULL for default, which is described in <a href="javascript:show('Oodle_About_Platforms.html')" class="paragraph">About Oodle on Platforms</a>)</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXInitOptions.html_m_OodleInit_Log_FlushEachWrite" class=nohover>m_OodleInit_Log_FlushEachWrite</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> option : flush the log after each write [false]</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXInitOptions.html_m_OodleInit_BreakOnLogError" class=nohover>m_OodleInit_BreakOnLogError</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> option : debug break when Oodle logs an error</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXInitOptions.html_m_OodleInit_Telemetry" class=nohover>m_OodleInit_Telemetry</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> option : make the Telemetry connection for tracking Oodle [false]</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXInitOptions.html_m_OodleInit_Telemetry_Context" class=nohover>m_OodleInit_Telemetry_Context</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> the telemetry context, NULL means I will make it (if m_OodleInit_Telemetry is true)</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXInitOptions.html_m_OodleInit_StackTrace" class=nohover>m_OodleInit_StackTrace</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> option : enable stack tracing in Oodle [true]</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXInitOptions.html_m_OodleInit_LeakTrack" class=nohover>m_OodleInit_LeakTrack</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> option : enable LeakTrack in Oodle</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXInitOptions.html_m_OodleInit_SimpleProf" class=nohover>m_OodleInit_SimpleProf</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> option : enable simple profiler (this is mainly for me)</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXInitOptions.html_m_OodleInit_FuzzTest" class=nohover>m_OodleInit_FuzzTest</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> deprecated , does nothing</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXInitOptions.html_m_OodleInit_ThreadProfiler_funcptr" class=nohover>m_OodleInit_ThreadProfiler_funcptr</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> option : enable the thread profiler</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXInitOptions.html_m_OodleInit_IOQ" class=nohover>m_OodleInit_IOQ</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> option : enable the IOQ</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXInitOptions.html_m_OodleInit_IOQ_Log" class=nohover>m_OodleInit_IOQ_Log</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> option : enable logging operations on the IOQ</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXInitOptions.html_m_OodleInit_IOQ_BreakOnError" class=nohover>m_OodleInit_IOQ_BreakOnError</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> option : make the IOQ issue a debug break on any error (for debugging)</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXInitOptions.html_m_OodleInit_IOQ_Threaded" class=nohover>m_OodleInit_IOQ_Threaded</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> option : enable threading on IOQ (turn off for debugging)</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXInitOptions.html_m_OodleInit_IOQ_CheckAlignment" class=nohover>m_OodleInit_IOQ_CheckAlignment</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> option : should IOQ check alignment of parameters?</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXInitOptions.html_m_OodleInit_Workers" class=nohover>m_OodleInit_Workers</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> option : enable the worker thread system</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXInitOptions.html_m_OodleInit_Workers_Count" class=nohover>m_OodleInit_Workers_Count</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> number of worker threads to start (default is <a href="javascript:show('OODLE_WORKERS_COUNT_ALL_PHYSICAL_CORES.html')" class="paragraph">OODLE_WORKERS_COUNT_ALL_PHYSICAL_CORES</a>)</td></tr></table><br>&nbsp;<br> <table class=bar> <tr>
<td width=33% align=left><span class='arrowleft'></span><a href="javascript:show('OodleX_Shutdown_DebugBreakOnLeaks.html')" class="paragraph">OodleX_Shutdown_DebugBreakOnLeaks</a></td><td width=33% align=center><span class='arrowup'></span><a href="javascript:show('OodleXAPI_Init.html')" class="paragraph">OodleX Startup and Shutdown</a></td><td width=33% align=right><span class='arrowright'></span><a href="javascript:show('OodleXConfigValues.html')" class="paragraph">OodleXConfigValues</a></td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="OodleX_Wait.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>OodleX_Wait</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "OodleX_Wait.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="OodleX_Wait.html_backmenu">
<table class=dropmenu>
<tr><td><span class='arrowleft'></span>&nbsp;<a href="javascript:show('OodleX_GetStatus.html')" class="paragraph">OodleX_GetStatus</a></td></tr><tr><td><span class='arrowright'></span>&nbsp;<a href="javascript:show('OodleX_WaitAll.html')" class="paragraph">OodleX_WaitAll</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<div class=prototype><div class=prototype_header>// Function prototype:</div><pre><span class=prototype_type><a href="javascript:show('OodleXStatus.html')" class="blue">OodleXStatus</a></span> <span class=prototype_type><a href="javascript:show('OodleX_Wait.html')" class="blue">OodleX_Wait</a></span>( <span class=prototype_type><a href="javascript:show('OodleXHandle.html')" class="blue">OodleXHandle</a></span> h,
<span class=prototype_type><a href="javascript:show('OodleXHandleDeleteIfDone.html')" class="blue">OodleXHandleDeleteIfDone</a></span> deleteIfDone OODEFAULT( OodleXHandleDeleteIfDone_No ) );</pre></div><div class=discussion_heading>Discussion</div>Block the calling thread until handle is not Pending<div class=discussion_heading>Parameters</div> <table> <tr> <td style='vertical-align: top;' class=paramname><a id="OodleX_Wait.html_h" class=nohover>h</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> OodleXHandle weak reference
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleX_Wait.html_deleteIfDone" class=nohover>deleteIfDone</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> if <a href="javascript:show('OodleXHandleDeleteIfDone.html','OodleXHandleDeleteIfDone.html_OodleXHandleDeleteIfDone_Yes')" class="paragraph">OodleXHandleDeleteIfDone_Yes</a>, handle will be deleted
</td></tr></table><div class=discussion_heading>Return Value</div> <table> <tr> <td style='vertical-align: top;' class=paramname><a id="OodleX_Wait.html_return" class=nohover>return</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> handle status
</td></tr></table><div class=discussion_heading>Discussion</div></p>
<p> Will not return OodleXStatus_Pending.
</p>
<p> OodleX_WaitNoDelete and OodleX_WaitAndDelete are macros that are provided as short-hands for OodleX_Wait. They are :
</p>
<p><div class=prototype>
<PRE>
#define OodleX_WaitNoDelete (h) OodleX_Wait(h,OodleXHandleDeleteIfDone_No)
#define OodleX_WaitAndDelete(h) OodleX_Wait(h,OodleXHandleDeleteIfDone_Yes)
</PRE>
</div>
</p>
<p><br>&nbsp;<br> <table class=bar> <tr>
<td width=33% align=left><span class='arrowleft'></span><a href="javascript:show('OodleX_GetStatus.html')" class="paragraph">OodleX_GetStatus</a></td><td width=33% align=center><span class='arrowup'></span><a href="javascript:show('OodleXAPI_Handle.html')" class="paragraph">OodleX async handle operations</a></td><td width=33% align=right><span class='arrowright'></span><a href="javascript:show('OodleX_WaitAll.html')" class="paragraph">OodleX_WaitAll</a></td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="example_network_client.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>example_network_client : Example with simple network client support</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "example_network_client.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="example_network_client.html_backmenu">
<table class=dropmenu>
<tr><td><span class='arrowleft'></span>&nbsp;<a href="javascript:show('example_lz_threadphased.html')" class="paragraph">example_lz_threadphased : Example of 2-thread ThreadPhased decoding</a></td></tr><tr><td><span class='arrowup'></span>&nbsp;<a href="javascript:show('examples.html')" class="paragraph">Examples</a></td></tr><tr><td><span class='arrowright'></span>&nbsp;<a href="javascript:show('example_packet.html')" class="paragraph">example_packet : Example demonstrating network packet compression</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<div class=discussion_heading>Discussion</div>Oodle example_network_client
</p>
<p>This is an example of an Oodle Network UDP client (such as in a game's runtime).
</p>
<p>It loads a previously trained model, such as created by <a href="javascript:show('example_packet.html')" class="paragraph">example_packet : Example demonstrating network packet compression</a>. This would be done offline by your game's
tools.
</p>
<p>The runtime component loads a previously created model and uses it to compress packets on the fly.
</p>
<p>This example uses only Oodle2 Network lib.
</p>
<p>(Oodle2 data compression is optional)<div class=prototype> <pre>
#include "../include/oodle2net.h"
<span style="color:#008000;">// optional, use Oodle LZ for the network model data</span>
<span style="color:#008000;">//#define USE_OODLE_LZ_DATA_COMPRESSION</span>
#ifdef USE_OODLE_LZ_DATA_COMPRESSION
#include "../include/oodle2.h"
#endif
#include "ooex.h" <span style="color:#008000;">// example helpers</span>
#ifndef _CRT_SECURE_NO_WARNINGS
#define _CRT_SECURE_NO_WARNINGS
#endif
#include &lt;stdio.h>
#include &lt;string.h>
#include &lt;assert.h>
#include &lt;stdlib.h>
#ifdef BUILDING_EXAMPLE_CALLER
#define main <span class=prototype_type><a href="javascript:show('example_network_client.html')" class="blue">example_network_client</a></span>
#endif
#include "read_whole_file.h"
</pre></div>example_packet_file should contain a capture of packets from a real game session.
It should be at least 100 MB.
</p>
<p>See <a href="javascript:show('OodleNetwork_About_CapturingTrainingData.html')" class="paragraph">Capturing Training data for OodleNetwork</a>
</p>
<p>Some portion (as set by example_packet_test_holdout_fraction_denominator) will be held out for testing
the compression level. The remainder will be used for training. In real game usage, you don't need to
hold out any for testing, this is just for evaluating the compression level. To be fair, the packets
used in training are not used in testing.
</p>
<p>The file format is :
</p>
<p>packet.bin :
OO_U32 [LE] : numbers of channels (num_channels)
repeatedly :
{
OO_U32 [LE] : channel index in [0,num_channels-1]
OO_U32 [LE] : number of bytes of data in this packet (num_bytes)
OO_U8 * num_bytes : payload of this packet
}<div class=prototype> <pre>
static const char * c_example_packet_file = "r:\\packet.bin"; <span style="color:#008000;">// &lt;- change this to your file name</span>
<span style="color:#008000;">// runtimedata file name written by "example_packet" :</span>
static const char * c_runtimedata_fileName = "example_packet_on1udpnew_runtimedata.bin";
<span style="color:#008000;">// OodleNetworkRuntimeData is held by the client &amp; server for runtime encoding or decoding</span>
struct OodleNetworkRuntimeData;
<span style="color:#008000;">// load a previously saved network compression model :</span>
static OodleNetworkRuntimeData * OodleNetwork_CreateFromFile( const char * fileName );
<span style="color:#008000;">// release the compressor memory :</span>
static void OodleNetwork_Destroy(OodleNetworkRuntimeData * pCompressor);
<span style="color:#008000;">// OodleNetwork_Encode returns compressed size</span>
static OO_SINTa OodleNetwork_Encode(
const OodleNetworkRuntimeData * c,
const void * raw, OO_SINTa rawLen,
void * comp );
<span style="color:#008000;">// OodleNetwork_Decode returned decompressed size, or 0 for error</span>
static OO_SINTa OodleNetwork_Decode(
const OodleNetworkRuntimeData * c,
const void * comp, OO_SINTa compLen,
void * raw );
extern "C" int main(int argc,char *argv[])
{
printf("example_network_client [packet_file] [runtimedata_file]\n");
<span style="color:#008000;">// defaults :</span>
const char * example_packet_file = c_example_packet_file;
const char * runtimedata_file = c_runtimedata_fileName;
<span style="color:#008000;">// override from command line args :</span>
if ( argc >= 2 )
{
example_packet_file = argv[1];
if ( argc >= 3 )
runtimedata_file = argv[2];
}
</pre></div>---------------------------------------------------------------------
</p>
<p> Load the previously trained model data
</p>
<p> This compressor is const and will be used to compress all packets
</p>
<p> ---------------------------------------------------<div class=prototype> <pre>
printf("Loading runtimedata file : %s\n",runtimedata_file);
OodleNetworkRuntimeData * c = OodleNetwork_CreateFromFile( runtimedata_file );
if ( c == NULL )
{
printf("FAILED!\n");
return 10;
}
</pre></div>-----------------------------------------------------
</p>
<p> Load some test packet data from a file
</p>
<p> -----------------------------------<div class=prototype> <pre>
printf("Loading packet file : %s\n",example_packet_file);
void * packet_file_data;
OO_SINTa packet_file_size;
packet_file_data = read_whole_file(example_packet_file,&amp;packet_file_size);
if ( packet_file_data == NULL )
{
printf("ERROR : couldn't load packet file\n");
OodleNetwork_Destroy(c);
return 10;
}
</pre></div>-----------------------------------------------------
</p>
<p> Use the OodleNetwork model to encode & decode the packets :
</p>
<p> --------------------------------------<div class=prototype> <pre>
printf("Testing compression...\n");
<span style="color:#008000;">// point at the packet data : </span>
const OO_U8 * packet_bin_buf = (const OO_U8 *) packet_file_data;
OO_SINTa packet_bin_size = packet_file_size;
<span style="color:#008000;">// get the number of channels ; first dword in packet bin : </span>
const OO_U8 * packet_bin_ptr = packet_bin_buf;
const OO_U8 * packet_bin_end = packet_bin_ptr + packet_bin_size;
OO_S32 num_channels = OOEX_GET32_LE(packet_bin_ptr); packet_bin_ptr += sizeof(OO_S32);
<span style="color:#008000;">// num_channels ignored for UDP</span>
OOEX_UNUSED_VARIABLE(num_channels);
<span style="color:#008000;">// max packet size is just used for the stack buffer sizes :</span>
#define MAX_PACKET_SIZE 16384
<span style="color:#008000;">// technically comp_buffer should be OodleNetwork1_CompressedBufferSizeNeeded(MAX_PACKET_SIZE) bytes</span>
OO_U8 comp_buffer[MAX_PACKET_SIZE];
OO_U8 decomp_buffer[MAX_PACKET_SIZE];
OO_S64 tot_rawLen = 0;
OO_S64 tot_compLen = 0;
OO_S64 tot_numPackets = 0;
while( packet_bin_ptr &lt; packet_bin_end )
{
<span style="color:#008000;">// grab the current packet header :</span>
OO_S32 channel = OOEX_GET32_LE(packet_bin_ptr); packet_bin_ptr += sizeof(OO_S32);
OOEX_UNUSED_VARIABLE(channel);
OO_S32 bytes = OOEX_GET32_LE(packet_bin_ptr); packet_bin_ptr += sizeof(OO_S32);
OOEX_ASSERT( channel >= 0 &amp;&amp; channel &lt; num_channels );
OOEX_ASSERT( bytes > 0 );
if ( packet_bin_ptr + bytes > packet_bin_end )
{
<span style="color:#008000;">// partial end packet</span>
break;
}
OOEX_ASSERT( bytes &lt; MAX_PACKET_SIZE );
<span style="color:#008000;">// compress one packet : (right before sending over the network)</span>
OO_SINTa cur_compLen =
OodleNetwork_Encode(c,packet_bin_ptr,bytes,comp_buffer);
<span style="color:#008000;">// [comp_buffer,cur_compLen] is sent over the network</span>
<span style="color:#008000;">// check I'm not lying about compLen :</span>
comp_buffer[cur_compLen] = 0xCD;
<span style="color:#008000;">// decompress it : (upon receipt from the net)</span>
OO_SINTa decode_rawLen = OodleNetwork_Decode(c,
comp_buffer,cur_compLen,
decomp_buffer);
OOEX_ASSERT_ALWAYS( decode_rawLen == bytes );
<span style="color:#008000;">// verify we got the packet back :</span>
OOEX_ASSERT_ALWAYS( memcmp(packet_bin_ptr,decomp_buffer,bytes) == 0 );
packet_bin_ptr += bytes;
tot_rawLen += bytes;
tot_compLen += cur_compLen;
tot_numPackets ++;
}
free(packet_file_data);
printf("%d packets compressed %.2f -> %.2f average\n",(int)tot_numPackets,
(double)tot_rawLen/tot_numPackets,(double)tot_compLen/tot_numPackets);
<span style="color:#008000;">//-----------------------------------------------------</span>
<span style="color:#008000;">// release the OodleNetwork memory :</span>
OodleNetwork_Destroy(c);
return 0;
}
</pre></div>=================================================================================
</p>
<p>Sample packet size transmission using "encodemod"
</p>
<p>Packet size is sent in 1 byte if possible, else 2 bytes
</p>
<p>This encoding assumes a max packet size is known.
</p>
<p>c_packetsize_modbits should be set as low as possible, while still ensuring c_packetsize_max
is large enough to send the largest packet size.
</p>
<p>For example if your max packet size is 1500 , you could use modbits=3<div class=prototype> <pre>
static const int c_packetsize_modbits = 6;
static const int c_packetsize_immediate = 256 - (1&lt;&lt;c_packetsize_modbits); <span style="color:#008000;">// = 192 for modbits=6</span>
static const int c_packetsize_max = c_packetsize_immediate + (1&lt;&lt;(c_packetsize_modbits+8)); <span style="color:#008000;">// =16576 for modbits = 6</span>
static OO_U8 * PutPacketSize(OO_U8 * ptr,OO_SINTa size)
{
OOEX_ASSERT( size &lt; c_packetsize_max );
if ( size &lt; c_packetsize_immediate )
{
*ptr++ = (OO_U8) size;
}
else
{
size -= c_packetsize_immediate;
OO_U8 lo = (OO_U8) size;
OO_U8 hi = (OO_U8) (size>>8);
OOEX_ASSERT( hi &lt; 256-c_packetsize_immediate );
*ptr++ = c_packetsize_immediate + hi;
*ptr++ = lo;
}
return ptr;
}
static const OO_U8 * GetPacketSize(const OO_U8 * ptr,OO_SINTa * psize)
{
OO_U8 first = *ptr++;
if ( first &lt; c_packetsize_immediate )
{
*psize = first;
}
else
{
int hi = first - c_packetsize_immediate;
int lo = *ptr++;
*psize = (hi&lt;&lt;8) + lo + c_packetsize_immediate;
}
return ptr;
}
<span style="color:#008000;">//================================================================================= </span>
</pre></div>OodleNetwork1_SavedModel_Header is an example header for the saved Oodle Network trained model.
</p>
<p>This is copied from example_packet
</p>
<p>You could of course use your own header, and your own engine's IO code to persist this data.<div class=prototype> <pre>
struct OodleNetwork1_SavedModel_Header
{
#define ON1_MAGIC 0x11235801
OO_U32 magic;
OO_U32 compressor;
OO_U32 ht_bits;
OO_U32 dic_size;
OO_U32 oodle_major_version;
OO_U32 dic_complen;
OO_U32 statecompacted_size;
OO_U32 statecompacted_complen;
};
</pre></div>OodleNetwork1_SavedModel_Header is written to file like a flat struct,
but we ensure it's always little endian.<div class=prototype> <pre>
static void OodleNetwork1_SavedModel_Header_Read(OodleNetwork1_SavedModel_Header * pHeader,const void * from_memory)
{
const OO_U32 * from_ptr = (const OO_U32 *)from_memory;
pHeader->magic = OOEX_GET32_LE(from_ptr); from_ptr++;
pHeader->compressor = OOEX_GET32_LE(from_ptr); from_ptr++;
pHeader->ht_bits = OOEX_GET32_LE(from_ptr); from_ptr++;
pHeader->dic_size = OOEX_GET32_LE(from_ptr); from_ptr++;
pHeader->oodle_major_version = OOEX_GET32_LE(from_ptr); from_ptr++;
pHeader->dic_complen = OOEX_GET32_LE(from_ptr); from_ptr++;
pHeader->statecompacted_size = OOEX_GET32_LE(from_ptr); from_ptr++;
pHeader->statecompacted_complen = OOEX_GET32_LE(from_ptr); from_ptr++;
OOEX_ASSERT( (((OO_U8 *)from_ptr) - ((OO_U8 *)from_memory)) == sizeof(OodleNetwork1_SavedModel_Header) );
}
struct OodleNetworkRuntimeData
{
void * dic;
<span class=prototype_type><a href="javascript:show('OodleNetwork1UDP_State.html')" class="blue">OodleNetwork1UDP_State</a></span> * state;
<span class=prototype_type><a href="javascript:show('OodleNetwork1_Shared.html')" class="blue">OodleNetwork1_Shared</a></span> * shared;
};
static OO_SINTa OodleNetwork_Encode(
const OodleNetworkRuntimeData * c,
const void * raw, OO_SINTa rawLen,
void * comp )
{
<span style="color:#008000;">// put uncompressed packet size first :</span>
<span style="color:#008000;">// NOTE : if you have this in some kind of header already, then don't put it again here!</span>
OO_U8 * compPtr = (OO_U8 *)comp;
compPtr = PutPacketSize(compPtr,rawLen);
<span style="color:#008000;">// then put the compressed packet :</span>
compPtr += <span class=prototype_type><a href="javascript:show('OodleNetwork1UDP_Encode.html')" class="blue">OodleNetwork1UDP_Encode</a></span>(c->state,c->shared,raw,rawLen,compPtr);
return compPtr - (OO_U8 *)comp;
}
static OO_SINTa OodleNetwork_Decode(
const OodleNetworkRuntimeData * c,
const void * comp, OO_SINTa compLen,
void * raw )
{
const OO_U8 * compPtr = (const OO_U8 * )comp;
OO_SINTa rawLen;
<span style="color:#008000;">// first get the uncompressed packet size :</span>
compPtr = GetPacketSize(compPtr,&amp;rawLen);
OO_SINTa packet_compLen = ((const OO_U8 * )comp + compLen) - compPtr;
<span style="color:#008000;">// try to check that the packet size we got makes sense :</span>
<span style="color:#008000;">// it should be >= compressed size because OodleNetwork never expands :</span>
OOEX_ASSERT( rawLen >= packet_compLen );
if ( rawLen &lt; packet_compLen )
return 0; <span style="color:#008000;">// corruption!</span>
<span style="color:#008000;">// then decode the packet :</span>
OO_BOOL ok = <span class=prototype_type><a href="javascript:show('OodleNetwork1UDP_Decode.html')" class="blue">OodleNetwork1UDP_Decode</a></span>(c->state,c->shared,compPtr,packet_compLen,
raw,rawLen);
if ( ! ok )
return 0;
return rawLen;
}
static void OodleNetwork_Destroy(OodleNetworkRuntimeData * pCompressor)
{
free(pCompressor->dic);
free(pCompressor->shared);
free(pCompressor->state);
free(pCompressor);
}
static bool OodleNetwork_LoadFromFileData( OodleNetworkRuntimeData * pCompressor, const void * fileData, OO_SINTa fileSize )
{
<span style="color:#008000;">// parse header :</span>
OodleNetwork1_SavedModel_Header header;
OodleNetwork1_SavedModel_Header_Read(&amp;header,fileData);
if ( header.magic != ON1_MAGIC )
{
printf("ERROR : state_file ON1_MAGIC mismatch\n");
return false;
}
#if 0
<span style="color:#008000;">// optional check for oodle_major_version being the same</span>
<span style="color:#008000;">// NOTE : this is more conservative than necessary</span>
<span style="color:#008000;">// you may disable this check to keep loading old state files</span>
OO_U32 oodle_major_version_major = header.oodle_major_version;
if ( oodle_major_version_major &lt; 1 )
{
OodleXLog_Printf_v0("state_file version too old!\n");
return false;
}
if ( oodle_major_version_major > OODLE2NET_VERSION_MAJOR )
{
OodleXLog_Printf_v0("state_file version newer that SDK!\n");
return false;
}
#endif
OO_S32 on1udpnew_ht_bits = header.ht_bits;
OO_SINTa on1udpnew_dic_size = header.dic_size;
OO_SINTa on1udpnew_dic_complen = header.dic_complen;
OO_SINTa on1udpnew_statecompacted_size = header.statecompacted_size;
OO_SINTa on1udpnew_statecompacted_complen = header.statecompacted_complen;
OOEX_ASSERT_ALWAYS( on1udpnew_dic_size >= on1udpnew_dic_complen );
OOEX_ASSERT_ALWAYS( on1udpnew_statecompacted_size >= on1udpnew_statecompacted_complen );
OOEX_ASSERT_ALWAYS( on1udpnew_statecompacted_size > 0 &amp;&amp; on1udpnew_statecompacted_size &lt; <span class=prototype_type><a href="javascript:show('OodleNetwork1UDP_StateCompacted_MaxSize.html')" class="blue">OodleNetwork1UDP_StateCompacted_MaxSize</a></span>() );
OOEX_ASSERT_ALWAYS( fileSize == (OO_S64)sizeof(OodleNetwork1_SavedModel_Header) + on1udpnew_dic_complen + on1udpnew_statecompacted_complen );
<span style="color:#008000;">// printf("OodleNetwork1UDP Loading; dic comp %d , state %d->%d\n",</span>
<span style="color:#008000;">// (int)on1udpnew_dic_complen,(int)on1udpnew_statecompacted_size,(int)on1udpnew_statecompacted_complen);</span>
<span style="color:#008000;">//-------------------------------------------</span>
<span style="color:#008000;">// decompress on1udpnew_dic and on1udpnew_statecompacted</span>
pCompressor->dic = malloc(on1udpnew_dic_size);
const void * on1udpnew_dic_comp_ptr = (const OO_U8 *)(fileData) + sizeof(OodleNetwork1_SavedModel_Header);
<span class=prototype_type><a href="javascript:show('OodleNetwork1UDP_StateCompacted.html')" class="blue">OodleNetwork1UDP_StateCompacted</a></span> * on1udpnew_compacted = (<span class=prototype_type><a href="javascript:show('OodleNetwork1UDP_StateCompacted.html')" class="blue">OodleNetwork1UDP_StateCompacted</a></span> *) malloc( on1udpnew_statecompacted_size );
void * on1udpnew_statecompacted_comp_ptr = (OO_U8 *)on1udpnew_dic_comp_ptr + on1udpnew_dic_complen;
#ifdef USE_OODLE_LZ_DATA_COMPRESSION
<span style="color:#008000;">// the dictionary and the state might be compressed with Oodle LZ</span>
<span style="color:#008000;">// decode them :</span>
if ( header.compressor == (OO_U32)OodleLZ_Compressor_Invalid )
{
OOEX_ASSERT_ALWAYS( on1udpnew_dic_complen == on1udpnew_dic_size );
memcpy(pCompressor->dic,on1udpnew_dic_comp_ptr,on1udpnew_dic_size);
OOEX_ASSERT_ALWAYS( on1udpnew_statecompacted_size == on1udpnew_statecompacted_complen );
memcpy(on1udpnew_compacted,on1udpnew_statecompacted_comp_ptr,on1udpnew_statecompacted_size);
}
else
{
OO_SINTa decomp_dic_size = <span class=prototype_type><a href="javascript:show('OodleLZ_Decompress.html')" class="blue">OodleLZ_Decompress</a></span>(on1udpnew_dic_comp_ptr,on1udpnew_dic_complen,pCompressor->dic,on1udpnew_dic_size,OodleLZ_FuzzSafe_Yes);
OOEX_ASSERT_ALWAYS( decomp_dic_size == on1udpnew_dic_size );
OO_SINTa decomp_statecompacted_size = <span class=prototype_type><a href="javascript:show('OodleLZ_Decompress.html')" class="blue">OodleLZ_Decompress</a></span>(on1udpnew_statecompacted_comp_ptr,on1udpnew_statecompacted_complen,on1udpnew_compacted,on1udpnew_statecompacted_size,OodleLZ_FuzzSafe_Yes);
OOEX_ASSERT_ALWAYS( decomp_statecompacted_size == on1udpnew_statecompacted_size );
}
#else
OOEX_ASSERT_ALWAYS( header.compressor == (OO_U32)-1 );
OOEX_ASSERT_ALWAYS( on1udpnew_dic_complen == on1udpnew_dic_size );
memcpy(pCompressor->dic,on1udpnew_dic_comp_ptr,on1udpnew_dic_size);
OOEX_ASSERT_ALWAYS( on1udpnew_statecompacted_size == on1udpnew_statecompacted_complen );
memcpy(on1udpnew_compacted,on1udpnew_statecompacted_comp_ptr,on1udpnew_statecompacted_size);
#endif
<span style="color:#008000;">//OodleXFree_IOAligned(state_fileData); state_fileData = NULL;</span>
<span style="color:#008000;">//----------------------------------------------</span>
<span style="color:#008000;">// Uncompact the "Compacted" state into a usable state</span>
OO_SINTa on1udpnew_state_size = <span class=prototype_type><a href="javascript:show('OodleNetwork1UDP_State_Size.html')" class="blue">OodleNetwork1UDP_State_Size</a></span>();
pCompressor->state = (<span class=prototype_type><a href="javascript:show('OodleNetwork1UDP_State.html')" class="blue">OodleNetwork1UDP_State</a></span> *) malloc( on1udpnew_state_size );
OOEX_ASSERT_ALWAYS( pCompressor->state != NULL );
if ( ! <span class=prototype_type><a href="javascript:show('OodleNetwork1UDP_State_Uncompact.html')" class="blue">OodleNetwork1UDP_State_Uncompact</a></span>(pCompressor->state,on1udpnew_compacted) )
{
printf("OodleNetwork1UDP_State_Uncompact failed\n");
return false;
}
free(on1udpnew_compacted);
<span style="color:#008000;">//----------------------------------------------</span>
<span style="color:#008000;">// fill out on1udpnew_shared from the dictionary</span>
OO_SINTa shared_size = <span class=prototype_type><a href="javascript:show('OodleNetwork1_Shared_Size.html')" class="blue">OodleNetwork1_Shared_Size</a></span>(header.ht_bits);
pCompressor->shared = (<span class=prototype_type><a href="javascript:show('OodleNetwork1_Shared.html')" class="blue">OodleNetwork1_Shared</a></span> *) malloc( shared_size );
OOEX_ASSERT_ALWAYS( pCompressor->shared != NULL );
<span class=prototype_type><a href="javascript:show('OodleNetwork1_Shared_SetWindow.html')" class="blue">OodleNetwork1_Shared_SetWindow</a></span>(pCompressor->shared,on1udpnew_ht_bits,pCompressor->dic,(OO_S32)on1udpnew_dic_size);
return true;
}
static OodleNetworkRuntimeData * OodleNetwork_CreateFromFile( const char * fileName )
{
void * fileData;
OO_SINTa fileSize;
fileData = read_whole_file(fileName,&amp;fileSize);
if ( ! fileData )
{
printf("ERROR : couldn't read file %s\n",fileName);
return NULL;
}
OodleNetworkRuntimeData * c = (OodleNetworkRuntimeData *) malloc( sizeof(OodleNetworkRuntimeData) );
memset(c,0,sizeof(*c));
bool ok = OodleNetwork_LoadFromFileData(c,fileData,fileSize);
free(fileData);
if ( ! ok )
{
printf("ERROR : couldn't parse file %s\n",fileName);
OodleNetwork_Destroy(c);
return NULL;
}
return c;
}
<span style="color:#008000;">//==================================================================================</span>
</pre></div><br>&nbsp;<br> <table class=bar> <tr>
<td width=33% align=left><span class='arrowleft'></span><a href="javascript:show('example_lz_threadphased.html')" class="paragraph">example_lz_threadphased : Example of 2-thread ThreadPhased decoding</a></td><td width=33% align=center><span class='arrowup'></span><a href="javascript:show('examples.html')" class="paragraph">Examples</a></td><td width=33% align=right><span class='arrowright'></span><a href="javascript:show('example_packet.html')" class="paragraph">example_packet : Example demonstrating network packet compression</a></td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="OodleCore_Plugins_SetJobSystemAndCount.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>OodleCore_Plugins_SetJobSystemAndCount</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "OodleCore_Plugins_SetJobSystemAndCount.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="OodleCore_Plugins_SetJobSystemAndCount.html_backmenu">
<table class=dropmenu>
<tr><td><span class='arrowleft'></span>&nbsp;<a href="javascript:show('OodleCore_Plugins_SetJobSystem.html')" class="paragraph">OodleCore_Plugins_SetJobSystem</a></td></tr><tr><td><span class='arrowright'></span>&nbsp;<a href="javascript:show('OodleCore_Plugins_SetPrintf.html')" class="paragraph">OodleCore_Plugins_SetPrintf</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<div class=prototype><div class=prototype_header>// Function prototype:</div><pre>void <span class=prototype_type><a href="javascript:show('OodleCore_Plugins_SetJobSystemAndCount.html')" class="blue">OodleCore_Plugins_SetJobSystemAndCount</a></span>( <span class=prototype_type><a href="javascript:show('t_fp_OodleCore_Plugin_RunJob.html')" class="blue">t_fp_OodleCore_Plugin_RunJob</a></span> * fp_RunJob,
<span class=prototype_type><a href="javascript:show('t_fp_OodleCore_Plugin_WaitJob.html')" class="blue">t_fp_OodleCore_Plugin_WaitJob</a></span> * fp_WaitJob,
int target_parallelism );</pre></div><div class=discussion_heading>Discussion</div>Set the function pointers for async job system used by Oodle.<div class=discussion_heading>Parameters</div> <table> <tr> <td style='vertical-align: top;' class=paramname><a id="OodleCore_Plugins_SetJobSystemAndCount.html_fp_RunJob" class=nohover>fp_RunJob</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> pointer to RunJob function
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleCore_Plugins_SetJobSystemAndCount.html_fp_WaitJob" class=nohover>fp_WaitJob</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> pointer to WaitJob function
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleCore_Plugins_SetJobSystemAndCount.html_target_parallelism" class=nohover>target_parallelism</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> goal of number of jobs to run simultaneously
</td></tr></table><div class=discussion_heading>Discussion</div></p>
<p> If these are not set, the default implementation runs jobs synchronously on the calling thread.
</p>
<p> These must not be changed once they are set! Set them once then don't change them.
</p>
<p> <i>target_parallelism</i> allows you to tell Oodle how many Jobs it should try to keep in flight at once.
Depending on the operation it may not be able to split work into this many jobs (so fewer will be used),
but it will not exceed this count.
</p>
<p> For Oodle Data LZ work, typically <i>target_parallelism</i> is usually best at the number of hardware cores
not including hyper threads).
</p>
<p> For Oodle Texture BCN encoding work, <i>target_parallelism</i> is usually best as the full number of hyper cores.
</p>
<p> In some cases you may wish to reduce <i>target_parallelism</i> by 1 or 2 cores to leave some of the CPU free for
other work.
</p>
<p> For example on a CPU with 16 cores and 32 hardware threads, for LZ work you might set <i>target_parallelism</i> to 15
when calling OodleCorePlugins. For BC7 encoding you might set <i>target_parallelism</i> to 30 when calling OodleTexPlugins.
</p>
<p> NOTE : if you are using Oodle Ext, do NOT call this. OodleX_Init will install a job system for Oodle Core.
Note OodleX only installs automatically to Oodle Core, not Net or Tex. See example_jobify.cpp for manual
plugin.
</p>
<p> Replaces deprecated <a href="javascript:show('OodleCore_Plugins_SetJobSystem.html')" class="paragraph">OodleCore_Plugins_SetJobSystem</a>
</p>
<p> See <a href="javascript:show('Oodle_About_Job_Threading_Plugins.html')" class="paragraph">About Oodle Job Threading Plugins</a>
<br>&nbsp;<br> <table class=bar> <tr>
<td width=33% align=left><span class='arrowleft'></span><a href="javascript:show('OodleCore_Plugins_SetJobSystem.html')" class="paragraph">OodleCore_Plugins_SetJobSystem</a></td><td width=33% align=center><span class='arrowup'></span><a href="javascript:show('OodleAPI_OodleCore_Plugins.html')" class="paragraph">Core plugins</a></td><td width=33% align=right><span class='arrowright'></span><a href="javascript:show('OodleCore_Plugins_SetPrintf.html')" class="paragraph">OodleCore_Plugins_SetPrintf</a></td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="OodleCore_Plugins_SetAllocators.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>OodleCore_Plugins_SetAllocators</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "OodleCore_Plugins_SetAllocators.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="OodleCore_Plugins_SetAllocators.html_backmenu">
<table class=dropmenu>
<tr><td><span class='arrowright'></span>&nbsp;<a href="javascript:show('OodleCore_Plugins_SetJobSystem.html')" class="paragraph">OodleCore_Plugins_SetJobSystem</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<div class=prototype><div class=prototype_header>// Function prototype:</div><pre>void <span class=prototype_type><a href="javascript:show('OodleCore_Plugins_SetAllocators.html')" class="blue">OodleCore_Plugins_SetAllocators</a></span>( <span class=prototype_type><a href="javascript:show('t_fp_OodleCore_Plugin_MallocAligned.html')" class="blue">t_fp_OodleCore_Plugin_MallocAligned</a></span> * fp_OodleMallocAligned,
<span class=prototype_type><a href="javascript:show('t_fp_OodleCore_Plugin_Free.html')" class="blue">t_fp_OodleCore_Plugin_Free</a></span> * fp_OodleFree );</pre></div><div class=discussion_heading>Discussion</div>Set the function pointers for allocations by Oodle.<div class=discussion_heading>Discussion</div>If these are not set, the default implementation on most platforms uses the C stdlib.
On Microsoft platforms the default implementation uses HeapAlloc.
</p>
<p> These must not be changed once they are set! Set them once then don't change them.
</p>
<p> NOTE: if you are using Oodle Ext, do NOT call this. OodleX_Init will install an allocator for Oodle Core. Do not mix your own allocator with the OodleX allocator. See <a href="javascript:show('OodleXAPI_Malloc.html')" class="paragraph">OodleX Memory Allocators</a>.
</p>
<p> If you want to ensure that Oodle is not doing any allocations, you can call OodleCore_Plugins_SetAllocators(NULL,NULL);
If you do that, then any time Oodle needs to allocate memory internally, it will stop the process.
It is STRONGLY not recommended that you ship that way. You can verify that Oodle is not allocating, but then leave some
fallback allocator installed when you actually ship just in case.
</p>
<p> Also note that on many consoles the standard allocation practices may not
leave much heap memory for the C stdlib malloc. In this case Oodle may fail to allocate.
</p>
<p><br>&nbsp;<br> <table class=bar> <tr>
<td width=33% align=left><span class='arrowleft'></span><a href="javascript:show('OodleAPI_OodleCore_Plugins.html')" class="paragraph">Core plugins</a></td><td width=33% align=center><span class='arrowup'></span><a href="javascript:show('OodleAPI_OodleCore_Plugins.html')" class="paragraph">Core plugins</a></td><td width=33% align=right><span class='arrowright'></span><a href="javascript:show('OodleCore_Plugins_SetJobSystem.html')" class="paragraph">OodleCore_Plugins_SetJobSystem</a></td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="OodleLZ_GetChunkCompressor.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>OodleLZ_GetChunkCompressor</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "OodleLZ_GetChunkCompressor.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="OodleLZ_GetChunkCompressor.html_backmenu">
<table class=dropmenu>
<tr><td><span class='arrowleft'></span>&nbsp;<a href="javascript:show('OodleLZ_GetFirstChunkCompressor.html')" class="paragraph">OodleLZ_GetFirstChunkCompressor</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<div class=prototype><div class=prototype_header>// Function prototype:</div><pre><span class=prototype_type><a href="javascript:show('OodleLZ_Compressor.html')" class="blue">OodleLZ_Compressor</a></span> <span class=prototype_type><a href="javascript:show('OodleLZ_GetChunkCompressor.html')" class="blue">OodleLZ_GetChunkCompressor</a></span>( const void * compChunkPtr,
OO_SINTa compBufAvail,
OO_BOOL * pIndependent );</pre></div><div class=discussion_heading>Discussion</div>Deprecated entry point for backwards compatibility<div class=discussion_heading>Discussion</div>Use <a href="javascript:show('OodleLZ_GetFirstChunkCompressor.html')" class="paragraph">OodleLZ_GetFirstChunkCompressor</a> or <a href="javascript:show('OodleLZ_GetAllChunksCompressor.html')" class="paragraph">OodleLZ_GetAllChunksCompressor</a>
</p>
<p><br>&nbsp;<br> <table class=bar> <tr>
<td width=33% align=left><span class='arrowleft'></span><a href="javascript:show('OodleLZ_GetFirstChunkCompressor.html')" class="paragraph">OodleLZ_GetFirstChunkCompressor</a></td><td width=33% align=center><span class='arrowup'></span><a href="javascript:show('OodleAPI_LZ_Compressors.html')" class="paragraph">OodleAPI_LZ_Compressors</a></td><td width=33% align=right><span class='arrowright'></span><a href="javascript:show('OodleDecompressCallback.html')" class="paragraph">OodleDecompressCallback</a></td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="OodleLZ_FreeSeekTable.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>OodleLZ_FreeSeekTable</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "OodleLZ_FreeSeekTable.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="OodleLZ_FreeSeekTable.html_backmenu">
<table class=dropmenu>
<tr><td><span class='arrowleft'></span>&nbsp;<a href="javascript:show('OodleLZ_CreateSeekTable.html')" class="paragraph">OodleLZ_CreateSeekTable</a></td></tr><tr><td><span class='arrowright'></span>&nbsp;<a href="javascript:show('OodleLZ_CheckSeekTableCRCs.html')" class="paragraph">OodleLZ_CheckSeekTableCRCs</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<div class=prototype><div class=prototype_header>// Function prototype:</div><pre>void <span class=prototype_type><a href="javascript:show('OodleLZ_FreeSeekTable.html')" class="blue">OodleLZ_FreeSeekTable</a></span>( <span class=prototype_type><a href="javascript:show('OodleLZ_SeekTable.html')" class="blue">OodleLZ_SeekTable</a></span> * pTable );</pre></div><div class=discussion_heading>Discussion</div>Frees a table allocated by <a href="javascript:show('OodleLZ_CreateSeekTable.html')" class="paragraph">OodleLZ_CreateSeekTable</a>
<br>&nbsp;<br> <table class=bar> <tr>
<td width=33% align=left><span class='arrowleft'></span><a href="javascript:show('OodleLZ_CreateSeekTable.html')" class="paragraph">OodleLZ_CreateSeekTable</a></td><td width=33% align=center><span class='arrowup'></span><a href="javascript:show('OodleAPI_LZ_Compressors.html')" class="paragraph">OodleAPI_LZ_Compressors</a></td><td width=33% align=right><span class='arrowright'></span><a href="javascript:show('OodleLZ_CheckSeekTableCRCs.html')" class="paragraph">OodleLZ_CheckSeekTableCRCs</a></td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="t_fp_OodleCore_Plugin_DisplayAssertion.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>t_fp_OodleCore_Plugin_DisplayAssertion</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "t_fp_OodleCore_Plugin_DisplayAssertion.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="t_fp_OodleCore_Plugin_DisplayAssertion.html_backmenu">
<table class=dropmenu>
<tr><td><span class='arrowleft'></span>&nbsp;<a href="javascript:show('t_fp_OodleCore_Plugin_Printf.html')" class="paragraph">t_fp_OodleCore_Plugin_Printf</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<div class=prototype><div class=prototype_header>// Function typedef:</div><pre>OODEFFUNC OO_BOOL( OODLE_CALLBACK <span class=prototype_type><a href="javascript:show('t_fp_OodleCore_Plugin_DisplayAssertion.html')" class="blue">t_fp_OodleCore_Plugin_DisplayAssertion</a></span> )( const char * file,
const int line,
const char * function,
const char * message );</pre></div><div class=discussion_heading>Discussion</div>Function pointer to Oodle Core assert callback<div class=discussion_heading>Parameters</div> <table> <tr> <td style='vertical-align: top;' class=paramname><a id="t_fp_OodleCore_Plugin_DisplayAssertion.html_file" class=nohover>file</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> C file that triggered the assert
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="t_fp_OodleCore_Plugin_DisplayAssertion.html_line" class=nohover>line</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> C line that triggered the assert
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="t_fp_OodleCore_Plugin_DisplayAssertion.html_function" class=nohover>function</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> C function that triggered the assert (may be NULL)
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="t_fp_OodleCore_Plugin_DisplayAssertion.html_message" class=nohover>message</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> assert message
</td></tr></table><div class=discussion_heading>Return Value</div> <table> <tr> <td style='vertical-align: top;' class=paramname><a id="t_fp_OodleCore_Plugin_DisplayAssertion.html_return" class=nohover>return</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> true to break execution at the assertion site, false to continue
</td></tr></table><div class=discussion_heading>Discussion</div></p>
<p> This callback is called by Oodle Core when it detects an assertion condition.
</p>
<p> This will only happen in debug builds.
</p>
<p></p>
<p><br>&nbsp;<br> <table class=bar> <tr>
<td width=33% align=left><span class='arrowleft'></span><a href="javascript:show('t_fp_OodleCore_Plugin_Printf.html')" class="paragraph">t_fp_OodleCore_Plugin_Printf</a></td><td width=33% align=center><span class='arrowup'></span><a href="javascript:show('OodleAPI_OodleCore_Plugins.html')" class="paragraph">Core plugins</a></td><td width=33% align=right><span class='arrowright'></span><a href="javascript:show('OodleAPI_LZ.html')" class="paragraph">Core LZ compression</a></td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="OODLEX_IO_MAX_ALIGNMENT.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>OODLEX_IO_MAX_ALIGNMENT</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "OODLEX_IO_MAX_ALIGNMENT.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="OODLEX_IO_MAX_ALIGNMENT.html_backmenu">
<table class=dropmenu>
<tr><td><span class='arrowright'></span>&nbsp;<a href="javascript:show('OODLEX_BUFFER_SIZE_DEFAULT.html')" class="paragraph">OODLEX_BUFFER_SIZE_DEFAULT</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<div class=prototype><div class=prototype_header>// Preprocessor definition:</div><pre><span class=prototype_type>#define</span> <a href="javascript:show('OODLEX_IO_MAX_ALIGNMENT.html')">OODLEX_IO_MAX_ALIGNMENT</a> (4096)</pre></div><div class=discussion_heading>Discussion</div> Oodle low level offsets and sizes are aligned to OODLEX_IO_MAX_ALIGNMENT <div class=discussion_heading>Discussion</div> Unbuffered IO (as in <a href="javascript:show('OodleXAPI_IOQ.html')" class="paragraph">OodleX low level async io</a>) require alignment to OODLEX_IO_MAX_ALIGNMENT.
Pointers returned by <a href="javascript:show('OodleXMalloc_IOAligned.html')" class="paragraph">OodleXMalloc_IOAligned</a> are so aligned.
You can also use the utility functions such as <a href="javascript:show('OodleX_IOAlignUpS32.html')" class="paragraph">OodleX_IOAlignUpS32</a> to align values.
<br>&nbsp;<br> <table class=bar> <tr>
<td width=33% align=left><span class='arrowleft'></span><a href="javascript:show('OodleXIOQ_About.html')" class="paragraph">About OodleIOQ</a></td><td width=33% align=center><span class='arrowup'></span><a href="javascript:show('OodleXAPI_IOQ.html')" class="paragraph">OodleX low level async io</a></td><td width=33% align=right><span class='arrowright'></span><a href="javascript:show('OODLEX_BUFFER_SIZE_DEFAULT.html')" class="paragraph">OODLEX_BUFFER_SIZE_DEFAULT</a></td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="OodleLZDecoder_DecodeSome.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>OodleLZDecoder_DecodeSome</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "OodleLZDecoder_DecodeSome.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="OodleLZDecoder_DecodeSome.html_backmenu">
<table class=dropmenu>
<tr><td><span class='arrowleft'></span>&nbsp;<a href="javascript:show('OodleLZDecoder_Reset.html')" class="paragraph">OodleLZDecoder_Reset</a></td></tr><tr><td><span class='arrowright'></span>&nbsp;<a href="javascript:show('OodleLZDecoder_MakeValidCircularWindowSize.html')" class="paragraph">OodleLZDecoder_MakeValidCircularWindowSize</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<div class=prototype><div class=prototype_header>// Function prototype:</div><pre>OO_BOOL <span class=prototype_type><a href="javascript:show('OodleLZDecoder_DecodeSome.html')" class="blue">OodleLZDecoder_DecodeSome</a></span>( <span class=prototype_type><a href="javascript:show('OodleLZDecoder.html')" class="blue">OodleLZDecoder</a></span> * decoder,
<span class=prototype_type><a href="javascript:show('OodleLZ_DecodeSome_Out.html')" class="blue">OodleLZ_DecodeSome_Out</a></span> * out,
void * decBuf,
OO_SINTa decBufPos,
OO_SINTa decBufferSize,
OO_SINTa decBufAvail,
const void * compPtr,
OO_SINTa compAvail,
<span class=prototype_type><a href="javascript:show('OodleLZ_FuzzSafe.html')" class="blue">OodleLZ_FuzzSafe</a></span> fuzzSafe OODEFAULT( OodleLZ_FuzzSafe_No ),
<span class=prototype_type><a href="javascript:show('OodleLZ_CheckCRC.html')" class="blue">OodleLZ_CheckCRC</a></span> checkCRC OODEFAULT( OodleLZ_CheckCRC_No ),
<span class=prototype_type><a href="javascript:show('OodleLZ_Verbosity.html')" class="blue">OodleLZ_Verbosity</a></span> verbosity OODEFAULT( OodleLZ_Verbosity_None ),
<span class=prototype_type><a href="javascript:show('OodleLZ_Decode_ThreadPhase.html')" class="blue">OodleLZ_Decode_ThreadPhase</a></span> threadPhase OODEFAULT( OodleLZ_Decode_Unthreaded ) );</pre></div><div class=discussion_heading>Discussion</div>Incremental decode some LZ compressed data<div class=discussion_heading>Parameters</div> <table> <tr> <td style='vertical-align: top;' class=paramname><a id="OodleLZDecoder_DecodeSome.html_decoder" class=nohover>decoder</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> the OodleLZDecoder, made by <a href="javascript:show('OodleLZDecoder_Create.html')" class="paragraph">OodleLZDecoder_Create</a>
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleLZDecoder_DecodeSome.html_out" class=nohover>out</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> filled with results
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleLZDecoder_DecodeSome.html_decBuf" class=nohover>decBuf</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> the decode buffer (window)
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleLZDecoder_DecodeSome.html_decBufPos" class=nohover>decBufPos</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> the current position in the buffer
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleLZDecoder_DecodeSome.html_decBufferSize" class=nohover>decBufferSize</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> size of decBuf ; this must be either equal to the total decompressed size (<i>rawLen</i> passed to <a href="javascript:show('OodleLZDecoder_Create.html')" class="paragraph">OodleLZDecoder_Create</a>) or the result of <a href="javascript:show('OodleLZDecoder_MakeValidCircularWindowSize.html')" class="paragraph">OodleLZDecoder_MakeValidCircularWindowSize</a>
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleLZDecoder_DecodeSome.html_decBufAvail" class=nohover>decBufAvail</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> the number of bytes available after decBufPos in decBuf ; usually (decBufferSize - decBufPos), but can be less
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleLZDecoder_DecodeSome.html_compPtr" class=nohover>compPtr</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> pointer to compressed data to read
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleLZDecoder_DecodeSome.html_compAvail" class=nohover>compAvail</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> number of compressed bytes available at compPtr
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleLZDecoder_DecodeSome.html_fuzzSafe" class=nohover>fuzzSafe</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> (optional) should the decode be fuzz safe
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleLZDecoder_DecodeSome.html_checkCRC" class=nohover>checkCRC</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> (optional) if data could be corrupted and you want to know about it, pass OodleLZ_CheckCRC_Yes
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleLZDecoder_DecodeSome.html_verbosity" class=nohover>verbosity</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> (optional) if not OodleLZ_Verbosity_None, logs some info
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleLZDecoder_DecodeSome.html_threadPhase" class=nohover>threadPhase</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> (optional) for threaded decode; see <a href="javascript:show('OodleLZ_About_ThreadPhasedDecode.html')" class="paragraph">About OodleLZ ThreadPhased Decode</a> (default OodleLZ_Decode_Unthreaded)
</td></tr></table><div class=discussion_heading>Return Value</div> <table> <tr> <td style='vertical-align: top;' class=paramname><a id="OodleLZDecoder_DecodeSome.html_return" class=nohover>return</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> true if success, false if invalid arguments or data is encountered
</td></tr></table><div class=discussion_heading>Discussion</div></p>
<p> Decodes data encoded with an OodleLZ compressor.
</p>
<p> Decodes an integer number of quanta; quanta are <a href="javascript:show('OODLELZ_QUANTUM_LEN.html')" class="paragraph">OODLELZ_QUANTUM_LEN</a> uncompressed bytes.
</p>
<p> <i>decBuf</i> can either be a circular window or the whole <i>rawLen</i> array.
In either case, <i>decBufPos</i> should be in the range [0,<i>decBufferSize</i>).
If <i>decBuf</i> is a circular window, then <i>decBufferSize</i> should come from <a href="javascript:show('OodleLZDecoder_MakeValidCircularWindowSize.html')" class="paragraph">OodleLZDecoder_MakeValidCircularWindowSize</a>.
</p>
<p> (circular windows are deprecated as of 2.9.0)
</p>
<p> NOTE : all the new LZ codecs (Kraken, etc.) do not do circular windows. They can do sliding windows, see lz_test_11 in <a href="javascript:show('example_lz.html')" class="paragraph">example_lz : Example demonstrating LZ compression and decompression</a>.
They should always have decBufferSize = total raw size, even if the decode buffer is smaller than that.
</p>
<p> NOTE : insufficient data provided (with <i>compAvail</i> > 0 but not enough to decode a quantum) is a <b>success</b> case
(return value of true), even though nothing is decoded. A return of false always indicates a non-recoverable error.
</p>
<p> If <i>decBufAvail</i> or <i>compAvail</i> is insufficient for any decompression, the "curQuantum" fields of <a href="javascript:show('OodleLZ_DecodeSome_Out.html')" class="paragraph">OodleLZ_DecodeSome_Out</a>
will tell you how much you must provide to proceed. That is, if enough compressed bytes are provided to get a quantum header, but not enough to decode a quantum, this
function returns true and fills out the <a href="javascript:show('OodleLZ_DecodeSome_Out.html')" class="paragraph">OodleLZ_DecodeSome_Out</a> structure with the size of the quantum.
</p>
<p> See <a href="javascript:show('OodleLZ_Decompress.html')" class="paragraph">OodleLZ_Decompress</a> about fuzz safety.
</p>
<p> NOTE : DecodeSome expect to decode either one full quantum (of len <a href="javascript:show('OODLELZ_QUANTUM_LEN.html')" class="paragraph">OODLELZ_QUANTUM_LEN</a>) or up to the length of the total buffer specified in the
call to <a href="javascript:show('OodleLZDecoder_Create.html')" class="paragraph">OodleLZDecoder_Create</a> or <a href="javascript:show('OodleLZDecoder_Reset.html')" class="paragraph">OodleLZDecoder_Reset</a>. That total buffer length
must match what was use during compression (or be a seek-chunk portion thereof).
That is, you cannot decompress partial streams in intervals smaller than
<a href="javascript:show('OODLELZ_QUANTUM_LEN.html')" class="paragraph">OODLELZ_QUANTUM_LEN</a> except for the final partial quantum at the end of the stream.
</p>
<p><br>&nbsp;<br> <table class=bar> <tr>
<td width=33% align=left><span class='arrowleft'></span><a href="javascript:show('OodleLZDecoder_Reset.html')" class="paragraph">OodleLZDecoder_Reset</a></td><td width=33% align=center><span class='arrowup'></span><a href="javascript:show('OodleAPI_LZ_Compressors.html')" class="paragraph">OodleAPI_LZ_Compressors</a></td><td width=33% align=right><span class='arrowright'></span><a href="javascript:show('OodleLZDecoder_MakeValidCircularWindowSize.html')" class="paragraph">OodleLZDecoder_MakeValidCircularWindowSize</a></td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="OodleNetwork1UDP_State_Uncompact.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>OodleNetwork1UDP_State_Uncompact</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "OodleNetwork1UDP_State_Uncompact.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="OodleNetwork1UDP_State_Uncompact.html_backmenu">
<table class=dropmenu>
<tr><td><span class='arrowleft'></span>&nbsp;<a href="javascript:show('OodleNetwork1UDP_State_Uncompact_ForVersion.html')" class="paragraph">OodleNetwork1UDP_State_Uncompact_ForVersion</a></td></tr><tr><td><span class='arrowright'></span>&nbsp;<a href="javascript:show('OodleNetwork1_SelectDictionarySupported.html')" class="paragraph">OodleNetwork1_SelectDictionarySupported</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<div class=prototype><div class=prototype_header>// Function prototype:</div><pre>OO_BOOL <span class=prototype_type><a href="javascript:show('OodleNetwork1UDP_State_Uncompact.html')" class="blue">OodleNetwork1UDP_State_Uncompact</a></span>( <span class=prototype_type><a href="javascript:show('OodleNetwork1UDP_State.html')" class="blue">OodleNetwork1UDP_State</a></span> * to,
const <span class=prototype_type><a href="javascript:show('OodleNetwork1UDP_StateCompacted.html')" class="blue">OodleNetwork1UDP_StateCompacted</a></span> * from );</pre></div><div class=discussion_heading>Discussion</div>Fills a OodleNetwork1UDP_State from a OodleNetwork1UDP_StateCompacted<div class=discussion_heading>Parameters</div> <table> <tr> <td style='vertical-align: top;' class=paramname><a id="OodleNetwork1UDP_State_Uncompact.html_to" class=nohover>to</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> filled out
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleNetwork1UDP_State_Uncompact.html_from" class=nohover>from</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> read
</td></tr></table><div class=discussion_heading>Return Value</div> <table> <tr> <td style='vertical-align: top;' class=paramname><a id="OodleNetwork1UDP_State_Uncompact.html_return" class=nohover>return</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> false if invalid data is detected
</td></tr></table><div class=discussion_heading>Discussion</div></p>
<p> Use this when the OodleNetwork1UDP_StateCompacted is read from a file, so that the OodleNetwork1UDP_State can be used for coding. You may discard the OodleNetwork1UDP_StateCompacted after this call.
</p>
<p> <i>to</i> should be allocated to <a href="javascript:show('OodleNetwork1UDP_State_Size.html')" class="paragraph">OodleNetwork1UDP_State_Size</a> bytes.
</p>
<p> NOTE : the return value here is not a robust way to detect tampered data. You should use encryption and/or a safe checksum on your saved model file data.
</p>
<p><br>&nbsp;<br> <table class=bar> <tr>
<td width=33% align=left><span class='arrowleft'></span><a href="javascript:show('OodleNetwork1UDP_State_Uncompact_ForVersion.html')" class="paragraph">OodleNetwork1UDP_State_Uncompact_ForVersion</a></td><td width=33% align=center><span class='arrowup'></span><a href="javascript:show('OodleAPI_OodleNetwork1.html')" class="paragraph">OodleAPI_OodleNetwork1</a></td><td width=33% align=right><span class='arrowright'></span><a href="javascript:show('OodleNetwork1_SelectDictionarySupported.html')" class="paragraph">OodleNetwork1_SelectDictionarySupported</a></td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="OodleNetwork1UDP_Train.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>OodleNetwork1UDP_Train</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "OodleNetwork1UDP_Train.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="OodleNetwork1UDP_Train.html_backmenu">
<table class=dropmenu>
<tr><td><span class='arrowleft'></span>&nbsp;<a href="javascript:show('OodleNetwork1TCP_Decode.html')" class="paragraph">OodleNetwork1TCP_Decode</a></td></tr><tr><td><span class='arrowright'></span>&nbsp;<a href="javascript:show('OodleNetwork1UDP_State_Size.html')" class="paragraph">OodleNetwork1UDP_State_Size</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<div class=prototype><div class=prototype_header>// Function prototype:</div><pre>void <span class=prototype_type><a href="javascript:show('OodleNetwork1UDP_Train.html')" class="blue">OodleNetwork1UDP_Train</a></span>( <span class=prototype_type><a href="javascript:show('OodleNetwork1UDP_State.html')" class="blue">OodleNetwork1UDP_State</a></span> * state,
const <span class=prototype_type><a href="javascript:show('OodleNetwork1_Shared.html')" class="blue">OodleNetwork1_Shared</a></span> * shared,
const void * * training_packet_pointers,
const OO_S32 * training_packet_sizes,
OO_S32 num_training_packets );</pre></div><div class=discussion_heading>Discussion</div>Fill a <a href="javascript:show('OodleNetwork1UDP_State.html')" class="paragraph">OodleNetwork1UDP_State</a> from training data<div class=discussion_heading>Parameters</div> <table> <tr> <td style='vertical-align: top;' class=paramname><a id="OodleNetwork1UDP_Train.html_state" class=nohover>state</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> the <a href="javascript:show('OodleNetwork1UDP_State.html')" class="paragraph">OodleNetwork1UDP_State</a> which is filled out; this state should not need to be initialized in any way before calling Train, it will be reset internally.
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleNetwork1UDP_Train.html_shared" class=nohover>shared</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> the <a href="javascript:show('OodleNetwork1_Shared.html')" class="paragraph">OodleNetwork1_Shared</a> data to use in compression ; this shared data should already have had <a href="javascript:show('OodleNetwork1_Shared_SetWindow.html')" class="paragraph">OodleNetwork1_Shared_SetWindow</a> done on it.
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleNetwork1UDP_Train.html_training_packet_pointers" class=nohover>training_packet_pointers</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> array of pointers to packet data; array of size num_training_packets
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleNetwork1UDP_Train.html_training_packet_sizes" class=nohover>training_packet_sizes</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> array of sizes of packets; array of size num_training_packets
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleNetwork1UDP_Train.html_num_training_packets" class=nohover>num_training_packets</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> number of packets
</td></tr></table><div class=discussion_heading>Discussion</div></p>
<p> OodleNetwork1UDP_Train uses the provided training packet data to initialize <i>state</i>.
</p>
<p> The training packet data provided here should not overlap the window passed to <a href="javascript:show('OodleNetwork1_Shared_SetWindow.html')" class="paragraph">OodleNetwork1_Shared_SetWindow</a> ; it should not come from the same source or you will get false training.
</p>
<p> You may call <a href="javascript:show('OodleNetwork1_Shared_SetWindow.html')" class="paragraph">OodleNetwork1_Shared_SetWindow</a> and <a href="javascript:show('OodleNetwork1UDP_Train.html')" class="paragraph">OodleNetwork1UDP_Train</a> many times with different windows to optimize the window selection.
</p>
<p> Once training is done, the resulting <a href="javascript:show('OodleNetwork1UDP_State.html')" class="paragraph">OodleNetwork1UDP_State</a> should be written to disk and used by both the client and server.
</p>
<p> There's no need to copy a <a href="javascript:show('OodleNetwork1UDP_State.html')" class="paragraph">OodleNetwork1UDP_State</a> , the same state object can be used by all encoders and decoders.
<br>&nbsp;<br> <table class=bar> <tr>
<td width=33% align=left><span class='arrowleft'></span><a href="javascript:show('OodleNetwork1TCP_Decode.html')" class="paragraph">OodleNetwork1TCP_Decode</a></td><td width=33% align=center><span class='arrowup'></span><a href="javascript:show('OodleAPI_OodleNetwork1.html')" class="paragraph">OodleAPI_OodleNetwork1</a></td><td width=33% align=right><span class='arrowright'></span><a href="javascript:show('OodleNetwork1UDP_State_Size.html')" class="paragraph">OodleNetwork1UDP_State_Size</a></td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="OodleXCopyFileFlags.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>OodleXCopyFileFlags</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "OodleXCopyFileFlags.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="OodleXCopyFileFlags.html_backmenu">
<table class=dropmenu>
<tr><td><span class='arrowright'></span>&nbsp;<a href="javascript:show('OodleFileNotFoundIsAnError.html')" class="paragraph">OodleFileNotFoundIsAnError</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<div class=prototype><div class=prototype_header>// Enumerant:</div><pre><span class=prototype_type>enum</span> <a href="javascript:show('OodleXCopyFileFlags.html')">OodleXCopyFileFlags</a>
{
&nbsp;&nbsp;&nbsp;&nbsp;OodleXCopyFileFlags_Overwrite = 0,
&nbsp;&nbsp;&nbsp;&nbsp;OodleXCopyFileFlags_DontOverwriteExisting = 1,
&nbsp;&nbsp;&nbsp;&nbsp;OodleXCopyFileFlags_OverwriteOnlyIfNewer = 2,
&nbsp;&nbsp;&nbsp;&nbsp;OodleXCopyFileFlags_OverwriteOnlyIfDifferentSize = 4,
&nbsp;&nbsp;&nbsp;&nbsp;OodleXCopyFileFlags_OverwriteOnlyIfNewerOrDifferentSize = 2|4,
&nbsp;&nbsp;&nbsp;&nbsp;OodleXCopyFileFlags_Mask = 7,
&nbsp;&nbsp;&nbsp;&nbsp;OodleXCopyFileFlags_Default = 0,
&nbsp;&nbsp;&nbsp;&nbsp;OodleXCopyFileFlags_Force32 = 0x40000000
};
</pre></div><div class=discussion_heading>Discussion</div> Flags for Oodle CopyFile operations.<div class=discussion_heading>Enumerants</div> <table> <tr> <td style='vertical-align: top;' class=paramname><a id="OodleXCopyFileFlags.html_OodleXCopyFileFlags_Overwrite" class=nohover>OodleXCopyFileFlags_Overwrite</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> always overwrite existing</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXCopyFileFlags.html_OodleXCopyFileFlags_DontOverwriteExisting" class=nohover>OodleXCopyFileFlags_DontOverwriteExisting</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> never overwrite existing</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXCopyFileFlags.html_OodleXCopyFileFlags_OverwriteOnlyIfNewer" class=nohover>OodleXCopyFileFlags_OverwriteOnlyIfNewer</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> overwrite only if source modtime is >= dest modtime</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXCopyFileFlags.html_OodleXCopyFileFlags_OverwriteOnlyIfDifferentSize" class=nohover>OodleXCopyFileFlags_OverwriteOnlyIfDifferentSize</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> overwrite if source size != dest size</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXCopyFileFlags.html_OodleXCopyFileFlags_OverwriteOnlyIfNewerOrDifferentSize" class=nohover>OodleXCopyFileFlags_OverwriteOnlyIfNewerOrDifferentSize</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> common combo of overwrite options</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXCopyFileFlags.html_OodleXCopyFileFlags_Mask" class=nohover>OodleXCopyFileFlags_Mask</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc></td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXCopyFileFlags.html_OodleXCopyFileFlags_Default" class=nohover>OodleXCopyFileFlags_Default</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> default action Overwrite</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXCopyFileFlags.html_OodleXCopyFileFlags_Force32" class=nohover>OodleXCopyFileFlags_Force32</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc></td></tr></table><div class=discussion_heading>Discussion</div> Combine with logical OR.
</p>
<p><br>&nbsp;<br> <table class=bar> <tr>
<td width=33% align=left><span class='arrowleft'></span><a href="javascript:show('OODLEX_FILE_CLOSE_NO_TRUNCATE_SIZE.html')" class="paragraph">OODLEX_FILE_CLOSE_NO_TRUNCATE_SIZE</a></td><td width=33% align=center><span class='arrowup'></span><a href="javascript:show('OodleXAPI_IOQ.html')" class="paragraph">OodleX low level async io</a></td><td width=33% align=right><span class='arrowright'></span><a href="javascript:show('OodleFileNotFoundIsAnError.html')" class="paragraph">OodleFileNotFoundIsAnError</a></td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="OodleXMalloc_InstallVTable.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>OodleXMalloc_InstallVTable</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "OodleXMalloc_InstallVTable.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="OodleXMalloc_InstallVTable.html_backmenu">
<table class=dropmenu>
<tr><td><span class='arrowright'></span>&nbsp;<a href="javascript:show('OodleXMalloc_SetFailedHandler.html')" class="paragraph">OodleXMalloc_SetFailedHandler</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<div class=prototype><div class=prototype_header>// Function prototype:</div><pre>void <span class=prototype_type><a href="javascript:show('OodleXMalloc_InstallVTable.html')" class="blue">OodleXMalloc_InstallVTable</a></span>( const <span class=prototype_type><a href="javascript:show('OodleXMallocVTable.html')" class="blue">OodleXMallocVTable</a></span> * pvt,
const <span class=prototype_type><a href="javascript:show('OodleXMallocVTable.html')" class="blue">OodleXMallocVTable</a></span> * pBaseVT );</pre></div><div class=discussion_heading>Discussion</div>Install the vtable that OodleX will use to allocate memory<div class=discussion_heading>Parameters</div> <table> <tr> <td style='vertical-align: top;' class=paramname><a id="OodleXMalloc_InstallVTable.html_pvt" class=nohover>pvt</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> pointer to the vtable to be installed (will be copied)
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXMalloc_InstallVTable.html_pBaseVT" class=nohover>pBaseVT</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> if pvt is a layered vtable, this is the underlying alloc; if not it should be = pvt
</td></tr></table><div class=discussion_heading>Discussion</div></p>
<p> Sets the global vtable that will de used by the OodleXMalloc calls. Typically let <a href="javascript:show('OodleX_Init.html')" class="paragraph">OodleX_Init</a> install a
suitable vtable for you. If you do it manually, it must be done before any other OodleX initialization.
</p>
<p> WARNING : You must not change the vtable after OodleX is running; pointers allocated from the previous
vtable will still need to be freed and will call to the global vtable.
<br>&nbsp;<br> <table class=bar> <tr>
<td width=33% align=left><span class='arrowleft'></span><a href="javascript:show('OodleXMallocVTable.html')" class="paragraph">OodleXMallocVTable</a></td><td width=33% align=center><span class='arrowup'></span><a href="javascript:show('OodleXAPI_Malloc.html')" class="paragraph">OodleX Memory Allocators</a></td><td width=33% align=right><span class='arrowright'></span><a href="javascript:show('OodleXMalloc_SetFailedHandler.html')" class="paragraph">OodleXMalloc_SetFailedHandler</a></td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="OodleX_Semaphore_Post.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>OodleX_Semaphore_Post</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "OodleX_Semaphore_Post.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="OodleX_Semaphore_Post.html_backmenu">
<table class=dropmenu>
<tr><td><span class='arrowright'></span>&nbsp;<a href="javascript:show('OodleX_Semaphore_Wait.html')" class="paragraph">OodleX_Semaphore_Wait</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<div class=prototype><div class=prototype_header>// Function prototype:</div><pre>void <span class=prototype_type><a href="javascript:show('OodleX_Semaphore_Post.html')" class="blue">OodleX_Semaphore_Post</a></span>( <span class=prototype_type><a href="javascript:show('OodleX_Semaphore.html')" class="blue">OodleX_Semaphore</a></span> * sem,
OO_S32 count OODEFAULT( 1 ) );</pre></div><div class=discussion_heading>Discussion</div>OodleX_Semaphore_Post<div class=discussion_heading>Discussion</div>NOTE : it is not intended that you use these in production. They are for use in the Oodle
examples. Replace with your own thread functions for shipping.
<br>&nbsp;<br> <table class=bar> <tr>
<td width=33% align=left><span class='arrowleft'></span><a href="javascript:show('OodleXAPI_Threading.html')" class="paragraph">OodleX threading util</a></td><td width=33% align=center><span class='arrowup'></span><a href="javascript:show('OodleXAPI_Threading.html')" class="paragraph">OodleX threading util</a></td><td width=33% align=right><span class='arrowright'></span><a href="javascript:show('OodleX_Semaphore_Wait.html')" class="paragraph">OodleX_Semaphore_Wait</a></td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="OodleXHandleCountdown_Decrement.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>OodleXHandleCountdown_Decrement</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "OodleXHandleCountdown_Decrement.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="OodleXHandleCountdown_Decrement.html_backmenu">
<table class=dropmenu>
<tr><td><span class='arrowleft'></span>&nbsp;<a href="javascript:show('OodleXHandleCountdown_Alloc.html')" class="paragraph">OodleXHandleCountdown_Alloc</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<div class=prototype><div class=prototype_header>// Function prototype:</div><pre><span class=prototype_type><a href="javascript:show('OodleXStatus.html')" class="blue">OodleXStatus</a></span> <span class=prototype_type><a href="javascript:show('OodleXHandleCountdown_Decrement.html')" class="blue">OodleXHandleCountdown_Decrement</a></span>( <span class=prototype_type><a href="javascript:show('OodleXHandle.html')" class="blue">OodleXHandle</a></span> h,
OO_S32 decCount OODEFAULT( 1 ) );</pre></div><div class=discussion_heading>Discussion</div>Decrement a countdown handle created by <a href="javascript:show('OodleXHandleCountdown_Alloc.html')" class="paragraph">OodleXHandleCountdown_Alloc</a><div class=discussion_heading>Parameters</div> <table> <tr> <td style='vertical-align: top;' class=paramname><a id="OodleXHandleCountdown_Decrement.html_h" class=nohover>h</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> handle allocated by <a href="javascript:show('OodleXHandleCountdown_Alloc.html')" class="paragraph">OodleXHandleCountdown_Alloc</a>
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXHandleCountdown_Decrement.html_decCount" class=nohover>decCount</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> how much to decrement the countdown
</td></tr></table><div class=discussion_heading>Return Value</div> <table> <tr> <td style='vertical-align: top;' class=paramname><a id="OodleXHandleCountdown_Decrement.html_return" class=nohover>return</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> status after the decrement
</td></tr></table><div class=discussion_heading>Discussion</div></p>
<p> Returns <a href="javascript:show('OodleXStatus.html','OodleXStatus.html_OodleXStatus_Done')" class="paragraph">OodleXStatus_Done</a> if this decrement took the countdown to 0, else <a href="javascript:show('OodleXStatus.html','OodleXStatus.html_OodleXStatus_Pending')" class="paragraph">OodleXStatus_Pending</a>.
<br>&nbsp;<br> <table class=bar> <tr>
<td width=33% align=left><span class='arrowleft'></span><a href="javascript:show('OodleXHandleCountdown_Alloc.html')" class="paragraph">OodleXHandleCountdown_Alloc</a></td><td width=33% align=center><span class='arrowup'></span><a href="javascript:show('OodleXAPI_Handle.html')" class="paragraph">OodleX async handle operations</a></td><td width=33% align=right><span class='arrowright'></span><a href="javascript:show('OodleXHandle.html')" class="paragraph">OodleXHandle</a></td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="OodleLZDecoder_MemorySizeNeeded.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>OodleLZDecoder_MemorySizeNeeded</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "OodleLZDecoder_MemorySizeNeeded.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="OodleLZDecoder_MemorySizeNeeded.html_backmenu">
<table class=dropmenu>
<tr><td><span class='arrowleft'></span>&nbsp;<a href="javascript:show('OodleLZDecoder_Create.html')" class="paragraph">OodleLZDecoder_Create</a></td></tr><tr><td><span class='arrowright'></span>&nbsp;<a href="javascript:show('OodleLZ_ThreadPhased_BlockDecoderMemorySizeNeeded.html')" class="paragraph">OodleLZ_ThreadPhased_BlockDecoderMemorySizeNeeded</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<div class=prototype><div class=prototype_header>// Function prototype:</div><pre>OO_S32 <span class=prototype_type><a href="javascript:show('OodleLZDecoder_MemorySizeNeeded.html')" class="blue">OodleLZDecoder_MemorySizeNeeded</a></span>( <span class=prototype_type><a href="javascript:show('OodleLZ_Compressor.html')" class="blue">OodleLZ_Compressor</a></span> compressor OODEFAULT( OodleLZ_Compressor_Invalid ),
OO_SINTa rawLen OODEFAULT( - 1 ) );</pre></div><div class=discussion_heading>Discussion</div>If you want to provide the memory needed by <a href="javascript:show('OodleLZDecoder_Create.html')" class="paragraph">OodleLZDecoder_Create</a> , this tells you how big it must be.<div class=discussion_heading>Parameters</div> <table> <tr> <td style='vertical-align: top;' class=paramname><a id="OodleLZDecoder_MemorySizeNeeded.html_compressor" class=nohover>compressor</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> the type of data you will decode; use <a href="javascript:show('OodleLZ_Compressor.html','OodleLZ_Compressor.html_OodleLZ_Compressor_Invalid')" class="paragraph">OodleLZ_Compressor_Invalid</a> if unknown
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleLZDecoder_MemorySizeNeeded.html_rawLen" class=nohover>rawLen</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> should almost always be -1, which supports any size of raw data decompression
</td></tr></table><div class=discussion_heading>Return Value</div> <table> <tr> <td style='vertical-align: top;' class=paramname><a id="OodleLZDecoder_MemorySizeNeeded.html_return" class=nohover>return</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> bytes to allocate or reserve, 0 for failure
</td></tr></table><div class=discussion_heading>Discussion</div></p>
<p> NOTE : using <a href="javascript:show('OodleLZ_Compressor.html','OodleLZ_Compressor.html_OodleLZ_Compressor_Invalid')" class="paragraph">OodleLZ_Compressor_Invalid</a> lets you decode any time of compressed data.
It requests as much memory as the largest compressor. This may be a <b>lot</b> more than your data needs;
try to use the correct compressor type.
</p>
<p> If <i>rawLen</i> is -1 (default) then the Decoder object created can be used on any length of raw data
decompression. If <i>rawLen</i> is specified here, then you can only use it to decode data shorter than
the length you specified here. This use case is very rare, contact support for details.
<br>&nbsp;<br> <table class=bar> <tr>
<td width=33% align=left><span class='arrowleft'></span><a href="javascript:show('OodleLZDecoder_Create.html')" class="paragraph">OodleLZDecoder_Create</a></td><td width=33% align=center><span class='arrowup'></span><a href="javascript:show('OodleAPI_LZ_Compressors.html')" class="paragraph">OodleAPI_LZ_Compressors</a></td><td width=33% align=right><span class='arrowright'></span><a href="javascript:show('OodleLZ_ThreadPhased_BlockDecoderMemorySizeNeeded.html')" class="paragraph">OodleLZ_ThreadPhased_BlockDecoderMemorySizeNeeded</a></td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="Oodle_FAQ_HowDoIGetOodleLogs.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>FAQ: How do I get the Oodle logs?</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "Oodle_FAQ_HowDoIGetOodleLogs.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="Oodle_FAQ_HowDoIGetOodleLogs.html_backmenu">
<table class=dropmenu>
<tr><td><span class='arrowleft'></span>&nbsp;<a href="javascript:show('Oodle_FAQ_DecompressingToGraphicsMemoryIsSlow.html')" class="paragraph">FAQ: How do I decompress to graphics memory quickly?</a></td></tr><tr><td><span class='arrowup'></span>&nbsp;<a href="javascript:show('Oodle_FAQ.html')" class="paragraph">Frequently Asked Questions</a></td></tr><tr><td><span class='arrowright'></span>&nbsp;<a href="javascript:show('Oodle_FAQ_BadWriteContents.html')" class="paragraph">FAQ: I write a file with IOQ but the contents are garbage?</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<P>
When you have a problem with Oodle, I might ask you to send me your log file. This is how to find it.
</p>
<p>(if you are using Oodle Core only, with no Oodle X, Oodle does not write its own log file, that's up to you.
You could link in OodleX and use it to enable logging. This gets OodleX to call OodlePlugins_SetPrintf to
install its logger in Oodle Core. Another option with Oodle Core is to use OodlePlugins_SetPrintf with
OodlePlugin_Printf_Verbose to get more detailed logging, but only in the debug version of Oodle).
</p>
<p>NOTE : if you are using Core only on a Microsoft target, the default core log function only goes to
OutputDebugString - not stdio - so you may not see any error messages unless you are running in the debugger.
Either use Oodle X or install your own logger to get messages however you want.
</p>
<p>If you are running Oodle Ext with the default options to <a href="javascript:show('OodleX_Init.html')" class="paragraph">OodleX_Init</a>, a log file is written by default.
If you are setting the options by hand, ensure <a href="javascript:show('OodleXInitOptions.html','OodleXInitOptions.html_m_OodleInit_Log')" class="paragraph">OodleXInitOptions:m_OodleInit_Log</a> is on. You can also
toggle logging on the fly with <a href="javascript:show('OodleXLog_SetState.html')" class="paragraph">OodleXLog_SetState</a>.
</p>
<p>To get more information in the log, call <a href="javascript:show('OodleXLog_SetVerboseLevel.html')" class="paragraph">OodleXLog_SetVerboseLevel</a> with <a href="javascript:show('OodleXLog_VerboseLevel.html','OodleXLog_VerboseLevel.html_OodleXLog_Verbose_Lots')" class="paragraph">OodleXLog_Verbose_Lots</a>.
You can also pass a higher level of <a href="javascript:show('OodleLZ_Verbosity.html')" class="paragraph">OodleLZ_Verbosity</a> to the <a href="javascript:show('OodleLZ_Decompress.html')" class="paragraph">OodleLZ_Decompress</a> call.
</p>
<p>If you know which function is failing, it helps to call <a href="javascript:show('OodleXLog_Printf.html')" class="paragraph">OodleXLog_Printf</a> with the value of the arguments that
you are passing (Oodle does not automatically log the value of every argument passed).
</p>
<p>If your app is crashing because of the error and you can't debug, you
can set <a href="javascript:show('OodleXInitOptions.html','OodleXInitOptions.html_m_OodleInit_Log_FlushEachWrite')" class="paragraph">OodleXInitOptions:m_OodleInit_Log_FlushEachWrite</a> ; hopefully this will
get the log to flush out some information about the error before the crash.
</p>
<p>You can set the log file name in <a href="javascript:show('OodleXInitOptions.html','OodleXInitOptions.html_m_OodleInit_Log_FileName')" class="paragraph">OodleXInitOptions:m_OodleInit_Log_FileName</a>. If you don't set it, Oodle will
use a default name that depends on the platform
(see <a href="javascript:show('Oodle_About_Platforms.html')" class="paragraph">About Oodle on Platforms</a> for per-platform log info).
</p>
<p>It may be useful to call <a href="javascript:show('OodleX_LogSystemInfo.html')" class="paragraph">OodleX_LogSystemInfo</a> at startup (after calling <a href="javascript:show('OodleX_Init.html')" class="paragraph">OodleX_Init</a>).
This will write a bunch of information about your machine and your Oodle build version
to the log file. It is not done automatically.
</p>
<p>Please grab the entire log file and mail it to me, don't send just a portion of it.<br>&nbsp;<br> <table class=bar> <tr>
<td width=33% align=left><span class='arrowleft'></span><a href="javascript:show('Oodle_FAQ_DecompressingToGraphicsMemoryIsSlow.html')" class="paragraph">FAQ: How do I decompress to graphics memory quickly?</a></td><td width=33% align=center><span class='arrowup'></span><a href="javascript:show('Oodle_FAQ.html')" class="paragraph">Frequently Asked Questions</a></td><td width=33% align=right><span class='arrowright'></span><a href="javascript:show('Oodle_FAQ_BadWriteContents.html')" class="paragraph">FAQ: I write a file with IOQ but the contents are garbage?</a></td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="OodleNetwork1UDP_Decode.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>OodleNetwork1UDP_Decode</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "OodleNetwork1UDP_Decode.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="OodleNetwork1UDP_Decode.html_backmenu">
<table class=dropmenu>
<tr><td><span class='arrowleft'></span>&nbsp;<a href="javascript:show('OodleNetwork1UDP_Encode.html')" class="paragraph">OodleNetwork1UDP_Encode</a></td></tr><tr><td><span class='arrowright'></span>&nbsp;<a href="javascript:show('OodleNetwork1UDP_StateCompacted_MaxSize.html')" class="paragraph">OodleNetwork1UDP_StateCompacted_MaxSize</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<div class=prototype><div class=prototype_header>// Function prototype:</div><pre>OO_BOOL <span class=prototype_type><a href="javascript:show('OodleNetwork1UDP_Decode.html')" class="blue">OodleNetwork1UDP_Decode</a></span>( const <span class=prototype_type><a href="javascript:show('OodleNetwork1UDP_State.html')" class="blue">OodleNetwork1UDP_State</a></span> * state,
const <span class=prototype_type><a href="javascript:show('OodleNetwork1_Shared.html')" class="blue">OodleNetwork1_Shared</a></span> * shared,
const void * comp,
OO_SINTa compLen,
void * raw,
OO_SINTa rawLen );</pre></div><div class=discussion_heading>Discussion</div>Decode a packet<div class=discussion_heading>Parameters</div> <table> <tr> <td style='vertical-align: top;' class=paramname><a id="OodleNetwork1UDP_Decode.html_state" class=nohover>state</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> const shared compression state
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleNetwork1UDP_Decode.html_shared" class=nohover>shared</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> const shared compression context
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleNetwork1UDP_Decode.html_comp" class=nohover>comp</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> compressed packet received
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleNetwork1UDP_Decode.html_compLen" class=nohover>compLen</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> size of compressed data
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleNetwork1UDP_Decode.html_raw" class=nohover>raw</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> output decompressed packet
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleNetwork1UDP_Decode.html_rawLen" class=nohover>rawLen</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> size of the packet to write
</td></tr></table><div class=discussion_heading>Return Value</div> <table> <tr> <td style='vertical-align: top;' class=paramname><a id="OodleNetwork1UDP_Decode.html_return" class=nohover>return</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> false for failure
</td></tr></table><div class=discussion_heading>Discussion</div></p>
<p> Decodes one packet.
</p>
<p> <i>state</i> and <i>shared</i> are both const and can be shared by all encoders and decoders.
</p>
<p> The <i>rawLen</i> provided here must match the length used in <a href="javascript:show('OodleNetwork1UDP_Encode.html')" class="paragraph">OodleNetwork1UDP_Encode</a> when creating this compressed packet. The OodleNetwork1 data is headerless, it's up to you to send the packet decompressed size in your own header.
</p>
<p> If corrupt data is detected, false is returned.
</p>
<p> If the number of compressed bytes consumed does not match <i>compLen</i>, false is returned.
If the number of output bytes does not match <i>rawLen</i>, false is returned.
</p>
<p> This function, however, does not do verify data integrity. It will return 'true' if the correct number of bytes are coded,
even if the data does not match.
</p>
<p> The buffer <i>comp</i> must be allowed to read at least <i>compLen</i> + OODLENETWORK1_DECOMP_BUF_OVERREAD_LEN bytes
(note that this is strictly less than OodleNetwork1_CompressedBufferSizeNeeded(<i>rawLen</i>) , so that may be used as well)
</p>
<p><br>&nbsp;<br> <table class=bar> <tr>
<td width=33% align=left><span class='arrowleft'></span><a href="javascript:show('OodleNetwork1UDP_Encode.html')" class="paragraph">OodleNetwork1UDP_Encode</a></td><td width=33% align=center><span class='arrowup'></span><a href="javascript:show('OodleAPI_OodleNetwork1.html')" class="paragraph">OodleAPI_OodleNetwork1</a></td><td width=33% align=right><span class='arrowright'></span><a href="javascript:show('OodleNetwork1UDP_StateCompacted_MaxSize.html')" class="paragraph">OodleNetwork1UDP_StateCompacted_MaxSize</a></td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="OodleXIOQFile.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>OodleXIOQFile</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "OodleXIOQFile.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="OodleXIOQFile.html_backmenu">
<table class=dropmenu>
<tr><td><span class='arrowright'></span>&nbsp;<a href="javascript:show('OodleXOSFile.html')" class="paragraph">OodleXOSFile</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<div class=prototype><div class=prototype_header>// Type definition:</div><pre>OO_U64 <span class=prototype_type><a href="javascript:show('OodleXIOQFile.html')" class="blue">OodleXIOQFile</a></span></pre></div><div class=discussion_heading>Discussion</div> Opaque weak reference handle to an IOQ File <br>&nbsp;<br> <table class=bar> <tr>
<td width=33% align=left><span class='arrowleft'></span><a href="javascript:show('OodleX_SetDefaultFileOps.html')" class="paragraph">OodleX_SetDefaultFileOps</a></td><td width=33% align=center><span class='arrowup'></span><a href="javascript:show('OodleXAPI_IOQ.html')" class="paragraph">OodleX low level async io</a></td><td width=33% align=right><span class='arrowright'></span><a href="javascript:show('OodleXOSFile.html')" class="paragraph">OodleXOSFile</a></td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="OodleLZ_ThreadPhased_BlockDecoderMemorySizeNeeded.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>OodleLZ_ThreadPhased_BlockDecoderMemorySizeNeeded</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "OodleLZ_ThreadPhased_BlockDecoderMemorySizeNeeded.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="OodleLZ_ThreadPhased_BlockDecoderMemorySizeNeeded.html_backmenu">
<table class=dropmenu>
<tr><td><span class='arrowleft'></span>&nbsp;<a href="javascript:show('OodleLZDecoder_MemorySizeNeeded.html')" class="paragraph">OodleLZDecoder_MemorySizeNeeded</a></td></tr><tr><td><span class='arrowright'></span>&nbsp;<a href="javascript:show('OodleLZDecoder_Destroy.html')" class="paragraph">OodleLZDecoder_Destroy</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<div class=prototype><div class=prototype_header>// Function prototype:</div><pre>OO_S32 <span class=prototype_type><a href="javascript:show('OodleLZ_ThreadPhased_BlockDecoderMemorySizeNeeded.html')" class="blue">OodleLZ_ThreadPhased_BlockDecoderMemorySizeNeeded</a></span>( void );</pre></div><div class=discussion_heading>Discussion</div>Returns the size of the decoder needed for ThreadPhased decode<div class=discussion_heading>Discussion</div>For use with <a href="javascript:show('OodleLZ_Decode_ThreadPhase.html')" class="paragraph">OodleLZ_Decode_ThreadPhase</a>
See <a href="javascript:show('OodleLZ_About_ThreadPhasedDecode.html')" class="paragraph">About OodleLZ ThreadPhased Decode</a>
<br>&nbsp;<br> <table class=bar> <tr>
<td width=33% align=left><span class='arrowleft'></span><a href="javascript:show('OodleLZDecoder_MemorySizeNeeded.html')" class="paragraph">OodleLZDecoder_MemorySizeNeeded</a></td><td width=33% align=center><span class='arrowup'></span><a href="javascript:show('OodleAPI_LZ_Compressors.html')" class="paragraph">OodleAPI_LZ_Compressors</a></td><td width=33% align=right><span class='arrowright'></span><a href="javascript:show('OodleLZDecoder_Destroy.html')" class="paragraph">OodleLZDecoder_Destroy</a></td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="OodleXIOQ_SetInfoByName_AsyncAndWait.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>OodleXIOQ_SetInfoByName_AsyncAndWait</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "OodleXIOQ_SetInfoByName_AsyncAndWait.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="OodleXIOQ_SetInfoByName_AsyncAndWait.html_backmenu">
<table class=dropmenu>
<tr><td><span class='arrowleft'></span>&nbsp;<a href="javascript:show('OodleXIOQ_GetInfoByName_AsyncAndWait.html')" class="paragraph">OodleXIOQ_GetInfoByName_AsyncAndWait</a></td></tr><tr><td><span class='arrowright'></span>&nbsp;<a href="javascript:show('OodleXIOQ_MakeAllDirs_AsyncAndWait.html')" class="paragraph">OodleXIOQ_MakeAllDirs_AsyncAndWait</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<div class=prototype><div class=prototype_header>// Function prototype:</div><pre>OO_BOOL <span class=prototype_type><a href="javascript:show('OodleXIOQ_SetInfoByName_AsyncAndWait.html')" class="blue">OodleXIOQ_SetInfoByName_AsyncAndWait</a></span>( const char * name,
OO_U32 flags,
OO_U64 modTime );</pre></div><div class=discussion_heading>Discussion</div>See <a href="javascript:show('OodleXIOQ_SetInfoByName_Async.html')" class="paragraph">OodleXIOQ_SetInfoByName_Async</a>
<br>&nbsp;<br> <table class=bar> <tr>
<td width=33% align=left><span class='arrowleft'></span><a href="javascript:show('OodleXIOQ_GetInfoByName_AsyncAndWait.html')" class="paragraph">OodleXIOQ_GetInfoByName_AsyncAndWait</a></td><td width=33% align=center><span class='arrowup'></span><a href="javascript:show('OodleXAPI_IOQ.html')" class="paragraph">OodleX low level async io</a></td><td width=33% align=right><span class='arrowright'></span><a href="javascript:show('OodleXIOQ_MakeAllDirs_AsyncAndWait.html')" class="paragraph">OodleXIOQ_MakeAllDirs_AsyncAndWait</a></td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="OodleX_GetNumWorkerThreads.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>OodleX_GetNumWorkerThreads</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "OodleX_GetNumWorkerThreads.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="OodleX_GetNumWorkerThreads.html_backmenu">
<table class=dropmenu>
<tr><td><span class='arrowleft'></span>&nbsp;<a href="javascript:show('OodleX_CorePlugin_WaitJob.html')" class="paragraph">OodleX_CorePlugin_WaitJob</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<div class=prototype><div class=prototype_header>// Function prototype:</div><pre>OO_S32 <span class=prototype_type><a href="javascript:show('OodleX_GetNumWorkerThreads.html')" class="blue">OodleX_GetNumWorkerThreads</a></span>( );</pre></div><div class=discussion_heading>Discussion</div>Returns the number of worker threads<div class=discussion_heading>Discussion</div>When there are 0 worker threads, the OodleWork system still succeeds, it just runs Worklets synchronously
on the calling thread.
</p>
<p> The worker thread count is set in <a href="javascript:show('OodleXInitOptions.html','OodleXInitOptions.html_m_OodleInit_Workers_Count')" class="paragraph">OodleXInitOptions:m_OodleInit_Workers_Count</a>
<br>&nbsp;<br> <table class=bar> <tr>
<td width=33% align=left><span class='arrowleft'></span><a href="javascript:show('OodleX_CorePlugin_WaitJob.html')" class="paragraph">OodleX_CorePlugin_WaitJob</a></td><td width=33% align=center><span class='arrowup'></span><a href="javascript:show('OodleXAPI_Threading.html')" class="paragraph">OodleX threading util</a></td><td width=33% align=right><span class='arrowright'></span><a href="javascript:show('OodleX_Semaphore.html')" class="paragraph">OodleX_Semaphore</a></td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="OodleLZ_Compressor_GetName.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>OodleLZ_Compressor_GetName</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "OodleLZ_Compressor_GetName.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="OodleLZ_Compressor_GetName.html_backmenu">
<table class=dropmenu>
<tr><td><span class='arrowleft'></span>&nbsp;<a href="javascript:show('OodleLZ_CompressionLevel_GetName.html')" class="paragraph">OodleLZ_CompressionLevel_GetName</a></td></tr><tr><td><span class='arrowright'></span>&nbsp;<a href="javascript:show('OodleLZ_Jobify_GetName.html')" class="paragraph">OodleLZ_Jobify_GetName</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<div class=prototype><div class=prototype_header>// Function prototype:</div><pre>const char * <span class=prototype_type><a href="javascript:show('OodleLZ_Compressor_GetName.html')" class="blue">OodleLZ_Compressor_GetName</a></span>( <span class=prototype_type><a href="javascript:show('OodleLZ_Compressor.html')" class="blue">OodleLZ_Compressor</a></span> compressor );</pre></div><div class=discussion_heading>Discussion</div>Provides a string naming a <a href="javascript:show('OodleLZ_Compressor.html')" class="paragraph">OodleLZ_Compressor</a> compressor
<br>&nbsp;<br> <table class=bar> <tr>
<td width=33% align=left><span class='arrowleft'></span><a href="javascript:show('OodleLZ_CompressionLevel_GetName.html')" class="paragraph">OodleLZ_CompressionLevel_GetName</a></td><td width=33% align=center><span class='arrowup'></span><a href="javascript:show('OodleAPI_LZ_Compressors.html')" class="paragraph">OodleAPI_LZ_Compressors</a></td><td width=33% align=right><span class='arrowright'></span><a href="javascript:show('OodleLZ_Jobify_GetName.html')" class="paragraph">OodleLZ_Jobify_GetName</a></td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="OodleX_GetSeconds.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>OodleX_GetSeconds</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "OodleX_GetSeconds.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="OodleX_GetSeconds.html_backmenu">
<table class=dropmenu>
<tr><td><span class='arrowleft'></span>&nbsp;<a href="javascript:show('OodleX_S64_to_SINTa_check.html')" class="paragraph">OodleX_S64_to_SINTa_check</a></td></tr><tr><td><span class='arrowright'></span>&nbsp;<a href="javascript:show('OodleXUtil_ConvertUTF8ToUTF16.html')" class="paragraph">OodleXUtil_ConvertUTF8ToUTF16</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<div class=prototype><div class=prototype_header>// Function prototype:</div><pre>OO_F64 <span class=prototype_type><a href="javascript:show('OodleX_GetSeconds.html')" class="blue">OodleX_GetSeconds</a></span>( );</pre></div><div class=discussion_heading>Discussion</div>Get current time in seconds<div class=discussion_heading>Return Value</div> <table> <tr> <td style='vertical-align: top;' class=paramname><a id="OodleX_GetSeconds.html_return" class=nohover>return</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> current time in seconds
</td></tr></table><div class=discussion_heading>Discussion</div></p>
<p> What it do.
<br>&nbsp;<br> <table class=bar> <tr>
<td width=33% align=left><span class='arrowleft'></span><a href="javascript:show('OodleX_S64_to_SINTa_check.html')" class="paragraph">OodleX_S64_to_SINTa_check</a></td><td width=33% align=center><span class='arrowup'></span><a href="javascript:show('OodleXAPI_Util.html')" class="paragraph">OodleX Utils</a></td><td width=33% align=right><span class='arrowright'></span><a href="javascript:show('OodleXUtil_ConvertUTF8ToUTF16.html')" class="paragraph">OodleXUtil_ConvertUTF8ToUTF16</a></td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="OodleLZ_Compressor_CanDecodeInPlace.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>OodleLZ_Compressor_CanDecodeInPlace</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "OodleLZ_Compressor_CanDecodeInPlace.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="OodleLZ_Compressor_CanDecodeInPlace.html_backmenu">
<table class=dropmenu>
<tr><td><span class='arrowleft'></span>&nbsp;<a href="javascript:show('OodleLZ_Compressor_CanDecodeThreadPhased.html')" class="paragraph">OodleLZ_Compressor_CanDecodeThreadPhased</a></td></tr><tr><td><span class='arrowright'></span>&nbsp;<a href="javascript:show('OodleLZ_Compressor_MustDecodeWithoutResets.html')" class="paragraph">OodleLZ_Compressor_MustDecodeWithoutResets</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<div class=prototype><div class=prototype_header>// Function prototype:</div><pre>OO_BOOL <span class=prototype_type><a href="javascript:show('OodleLZ_Compressor_CanDecodeInPlace.html')" class="blue">OodleLZ_Compressor_CanDecodeInPlace</a></span>( <span class=prototype_type><a href="javascript:show('OodleLZ_Compressor.html')" class="blue">OodleLZ_Compressor</a></span> compressor );</pre></div><div class=discussion_heading>Discussion</div>OodleLZ_Compressor properties helper.<div class=discussion_heading>Discussion</div>Tells you if this compressor can be used with "in-place" decoding.
</p>
<p> This is now always true (all compressors support in-place decoding). The function is left
for backward compatibility.
</p>
<p> All compressors in the future will support in-place, you don't need to check this property.
</p>
<p><br>&nbsp;<br> <table class=bar> <tr>
<td width=33% align=left><span class='arrowleft'></span><a href="javascript:show('OodleLZ_Compressor_CanDecodeThreadPhased.html')" class="paragraph">OodleLZ_Compressor_CanDecodeThreadPhased</a></td><td width=33% align=center><span class='arrowup'></span><a href="javascript:show('OodleAPI_LZ_Compressors.html')" class="paragraph">OodleAPI_LZ_Compressors</a></td><td width=33% align=right><span class='arrowright'></span><a href="javascript:show('OodleLZ_Compressor_MustDecodeWithoutResets.html')" class="paragraph">OodleLZ_Compressor_MustDecodeWithoutResets</a></td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="OodleX_Shutdown_DebugBreakOnLeaks.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>OodleX_Shutdown_DebugBreakOnLeaks</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "OodleX_Shutdown_DebugBreakOnLeaks.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="OodleX_Shutdown_DebugBreakOnLeaks.html_backmenu">
<table class=dropmenu>
<tr><td><span class='arrowleft'></span>&nbsp;<a href="javascript:show('OodleX_Shutdown_LogLeaks.html')" class="paragraph">OodleX_Shutdown_LogLeaks</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<div class=prototype><div class=prototype_header>// Enumerant:</div><pre><span class=prototype_type>enum</span> <a href="javascript:show('OodleX_Shutdown_DebugBreakOnLeaks.html')">OodleX_Shutdown_DebugBreakOnLeaks</a>
{
&nbsp;&nbsp;&nbsp;&nbsp;OodleX_Shutdown_DebugBreakOnLeaks_No = 0,
&nbsp;&nbsp;&nbsp;&nbsp;OodleX_Shutdown_DebugBreakOnLeaks_Yes = 1,
&nbsp;&nbsp;&nbsp;&nbsp;OodleX_Shutdown_DebugBreakOnLeaks_Force32 = 0x40000000
};
</pre></div><div class=discussion_heading>Discussion</div> bool enum
<br>&nbsp;<br> <table class=bar> <tr>
<td width=33% align=left><span class='arrowleft'></span><a href="javascript:show('OodleX_Shutdown_LogLeaks.html')" class="paragraph">OodleX_Shutdown_LogLeaks</a></td><td width=33% align=center><span class='arrowup'></span><a href="javascript:show('OodleXAPI_Init.html')" class="paragraph">OodleX Startup and Shutdown</a></td><td width=33% align=right><span class='arrowright'></span><a href="javascript:show('OodleXInitOptions.html')" class="paragraph">OodleXInitOptions</a></td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="OodleNetwork_About_FormingPacketsForMaximumCompression.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>Forming Packets for Maximum Compression</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "OodleNetwork_About_FormingPacketsForMaximumCompression.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="OodleNetwork_About_FormingPacketsForMaximumCompression.html_backmenu">
<table class=dropmenu>
<tr><td><span class='arrowleft'></span>&nbsp;<a href="javascript:show('OodleNetwork_About_CapturingTrainingData.html')" class="paragraph">Capturing Training data for OodleNetwork</a></td></tr><tr><td><span class='arrowup'></span>&nbsp;<a href="javascript:show('OodleNetwork_About.html')" class="paragraph">About Oodle Network Compression</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<P>
The way you create your network packets can have a large effect on their compressability.
These are a few tips for people who are interested in experimenting to get more compression.
</p>
<p>What works on different games varies, some of these may not work for your game.
</p>
<p><ul>
<li> Try not to include pre-compressed data. Don't use zlib or any other compressor before giving the data to
Oodle. If you do need to send pre-compressed data to the client, don't run those packets through OodleNetwork,
and don't include them in the training set.
</ul></p>
<p><ul>
<li> Getting rid of floats is always good. Floating point numbers usually have a lot of useless precision in
the low bits that the game doesn't actually care about. These show up as a nearly random byte in the low
part of the word. It's best to figure out how much precision you actually need and covert all floats to
fixed point integers.
</ul></p>
<p><ul>
<li> Do do reductions that are mathematical in nature, which the compressor will never be able to figure out.
For example, send matrices as Euler angles, send only 2 components of normalized vectors, etc.
</ul></p>
<p><ul>
<li> Don't worry too much about bit packing or entropy reduction that is purely statistical. This is what the
Oodle Network compressor is good at.
</ul></p>
<p><ul>
<li> Consider turning off bit packing entirely. In some cases it's better to just do byte-aligned packet
construction and let the compressor handle all the bit packing. Even though the uncompressed packet will be
much bigger, it can result in a smaller compressed packet. It also may save a lot of CPU time by avoiding the
bit packing. (this varies a lot from game to game)
</ul></p>
<p><ul>
<li> If you do bit-pack, try to byte-align in strategic places. At the very least at the start of each game entity
you should flush to byte alignment. Possibly in other places, such as between the property index and the property
value.
</ul></p>
<p><ul>
<li> Try to use absolute indices instead of relative indices when refering to properties or other entities.
This makes the identifier stable and consistent, so that the compressor can identify repeated uses of the same
identifier.
</ul></p>
<p><ul>
<li> If possible, try to include a hint about the property or entity in its first bytes. Generally don't do this
if requires adding a byte you weren't already sending. For example if you send an entity index, use the top bits
to indicate the type of entity. That way the compressor can see the first bytes and use them to expect what's
coming next.
</ul></p>
<p><ul>
<li> Very large and rare packets should usually be compressed with Oodle Data Compression and not piped through the
Oodle Network system. For example you might send a huge initial join packet that's 100 kB , then normal game play
packets are around 200 bytes. Those are very different things and should be compressed separately.
</ul></p>
<p><ul>
<li> Split packets for MTU after Oodle network, not before.
</ul></p>
<p>See also :
</p>
<p>http://cbloomrants.blogspot.com/2012/10/10-16-12-thoughts-on-bit-packing.html<br>&nbsp;<br> <table class=bar> <tr>
<td width=33% align=left><span class='arrowleft'></span><a href="javascript:show('OodleNetwork_About_CapturingTrainingData.html')" class="paragraph">Capturing Training data for OodleNetwork</a></td><td width=33% align=center><span class='arrowup'></span><a href="javascript:show('OodleNetwork_About.html')" class="paragraph">About Oodle Network Compression</a></td><td width=33% align=right><span class='arrowright'></span><a href="javascript:show('OodleAPI_OodleNet_Plugins.html')" class="paragraph">Network plugins</a></td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="OodleXIOQ_ReadMallocWholeFile_Async.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>OodleXIOQ_ReadMallocWholeFile_Async</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "OodleXIOQ_ReadMallocWholeFile_Async.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="OodleXIOQ_ReadMallocWholeFile_Async.html_backmenu">
<table class=dropmenu>
<tr><td><span class='arrowleft'></span>&nbsp;<a href="javascript:show('OodleXIOQ_SetInfoByName_Async.html')" class="paragraph">OodleXIOQ_SetInfoByName_Async</a></td></tr><tr><td><span class='arrowright'></span>&nbsp;<a href="javascript:show('OodleXIOQ_ReadMallocWholeFile_GetResult.html')" class="paragraph">OodleXIOQ_ReadMallocWholeFile_GetResult</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<div class=prototype><div class=prototype_header>// Function prototype:</div><pre><span class=prototype_type><a href="javascript:show('OodleXHandle.html')" class="blue">OodleXHandle</a></span> <span class=prototype_type><a href="javascript:show('OodleXIOQ_ReadMallocWholeFile_Async.html')" class="blue">OodleXIOQ_ReadMallocWholeFile_Async</a></span>( <span class=prototype_type><a href="javascript:show('OodleXIOQFile.html')" class="blue">OodleXIOQFile</a></span> file,
<span class=prototype_type><a href="javascript:show('OodleXHandleAutoDelete.html')" class="blue">OodleXHandleAutoDelete</a></span> autoDelete OODEFAULT( OodleXHandleAutoDelete_No ),
<span class=prototype_type><a href="javascript:show('OodleXPriority.html')" class="blue">OodleXPriority</a></span> priority OODEFAULT( OodleXPriority_Normal ),
const <span class=prototype_type><a href="javascript:show('OodleXHandle.html')" class="blue">OodleXHandle</a></span> * dependencies OODEFAULT( NULL ),
OO_S32 numDependencies OODEFAULT( 0 ) );</pre></div><div class=discussion_heading>Discussion</div>Start a high level IO request to allocate a buffer for a whole file and read it<div class=discussion_heading>Parameters</div> <table> <tr> <td style='vertical-align: top;' class=paramname><a id="OodleXIOQ_ReadMallocWholeFile_Async.html_file" class=nohover>file</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> the file to act on
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXIOQ_ReadMallocWholeFile_Async.html_autoDelete" class=nohover>autoDelete</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> (optional) see <a href="javascript:show('OodleXHandleAutoDelete.html')" class="paragraph">OodleXHandleAutoDelete</a>
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXIOQ_ReadMallocWholeFile_Async.html_priority" class=nohover>priority</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> (optional) priority of the operation ; see <a href="javascript:show('OodleXPriority.html')" class="paragraph">OodleXPriority</a>
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXIOQ_ReadMallocWholeFile_Async.html_dependencies" class=nohover>dependencies</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> (optional) dependencies; the async op won't start until these are all complete; note : these are not freed, they must be autodelete or you must free them some other way.
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXIOQ_ReadMallocWholeFile_Async.html_numDependencies" class=nohover>numDependencies</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> (optional) number of handles in <i>deps</i> array
</td></tr></table><div class=discussion_heading>Return Value</div> <table> <tr> <td style='vertical-align: top;' class=paramname><a id="OodleXIOQ_ReadMallocWholeFile_Async.html_return" class=nohover>return</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> handle to the operation, or 0 if it could not be started (usually due to invalid args)
</td></tr></table><div class=discussion_heading>Discussion</div></p>
<p> High level IOQ operations are helpers built on the simpler IOQ low level ops.
</p>
<p> OodleXIOQ_ReadMallocWholeFile_Async calls <a href="javascript:show('OodleXMalloc_IOAligned.html')" class="paragraph">OodleXMalloc_IOAligned</a> to allocate a buffer the size of the whole file
(aligned up by <a href="javascript:show('OODLEX_IO_MAX_ALIGNMENT.html')" class="paragraph">OODLEX_IO_MAX_ALIGNMENT</a>), and reads the whole file into that buffer.
</p>
<p> Get the buffer pointer with <a href="javascript:show('OodleXIOQ_ReadMallocWholeFile_GetResult.html')" class="paragraph">OodleXIOQ_ReadMallocWholeFile_GetResult</a>. You must free it.
<br>&nbsp;<br> <table class=bar> <tr>
<td width=33% align=left><span class='arrowleft'></span><a href="javascript:show('OodleXIOQ_SetInfoByName_Async.html')" class="paragraph">OodleXIOQ_SetInfoByName_Async</a></td><td width=33% align=center><span class='arrowup'></span><a href="javascript:show('OodleXAPI_IOQ.html')" class="paragraph">OodleX low level async io</a></td><td width=33% align=right><span class='arrowright'></span><a href="javascript:show('OodleXIOQ_ReadMallocWholeFile_GetResult.html')" class="paragraph">OodleXIOQ_ReadMallocWholeFile_GetResult</a></td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="OodleXLog_PrintfError.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>OodleXLog_PrintfError</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "OodleXLog_PrintfError.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="OodleXLog_PrintfError.html_backmenu">
<table class=dropmenu>
<tr><td><span class='arrowleft'></span>&nbsp;<a href="javascript:show('OodleXLog_Flush.html')" class="paragraph">OodleXLog_Flush</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<div class=prototype><div class=prototype_header>// Function prototype:</div><pre>void <span class=prototype_type><a href="javascript:show('OodleXLog_PrintfError.html')" class="blue">OodleXLog_PrintfError</a></span>( <span class=prototype_type><a href="javascript:show('OodleXError.html')" class="blue">OodleXError</a></span> err );</pre></div><div class=discussion_heading>Discussion</div>Log a string describing the <a href="javascript:show('OodleXError.html')" class="paragraph">OodleXError</a> with <a href="javascript:show('OodleXLog_Printf.html')" class="paragraph">OodleXLog_Printf</a>
<br>&nbsp;<br> <table class=bar> <tr>
<td width=33% align=left><span class='arrowleft'></span><a href="javascript:show('OodleXLog_Flush.html')" class="paragraph">OodleXLog_Flush</a></td><td width=33% align=center><span class='arrowup'></span><a href="javascript:show('OodleXAPI_Debug.html')" class="paragraph">OodleX Debug aids</a></td><td width=33% align=right><span class='arrowright'></span><a href="javascript:show('OodleXLogCallbackRet.html')" class="paragraph">OodleXLogCallbackRet</a></td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="OodleX_Init_GetDefaults_Minimal.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>OodleX_Init_GetDefaults_Minimal</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "OodleX_Init_GetDefaults_Minimal.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="OodleX_Init_GetDefaults_Minimal.html_backmenu">
<table class=dropmenu>
<tr><td><span class='arrowleft'></span>&nbsp;<a href="javascript:show('OodleX_Init_GetDefaults.html')" class="paragraph">OodleX_Init_GetDefaults</a></td></tr><tr><td><span class='arrowright'></span>&nbsp;<a href="javascript:show('OodleX_Init.html')" class="paragraph">OodleX_Init</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<div class=prototype><div class=prototype_header>// Function prototype:</div><pre>OO_BOOL <span class=prototype_type><a href="javascript:show('OodleX_Init_GetDefaults_Minimal.html')" class="blue">OodleX_Init_GetDefaults_Minimal</a></span>( OO_U32 oodle_header_version,
<span class=prototype_type><a href="javascript:show('OodleXInitOptions.html')" class="blue">OodleXInitOptions</a></span> * pOptions );</pre></div><div class=discussion_heading>Discussion</div>Get minimal defaults for <a href="javascript:show('OodleXInitOptions.html')" class="paragraph">OodleXInitOptions</a> , enabling only necessary Oodle systems<div class=discussion_heading>Parameters</div> <table> <tr> <td style='vertical-align: top;' class=paramname><a id="OodleX_Init_GetDefaults_Minimal.html_oodle_header_version" class=nohover>oodle_header_version</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> pass <a href="javascript:show('OODLE_HEADER_VERSION.html')" class="paragraph">OODLE_HEADER_VERSION</a> here
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleX_Init_GetDefaults_Minimal.html_pOptions" class=nohover>pOptions</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> filled with default <a href="javascript:show('OodleXInitOptions.html')" class="paragraph">OodleXInitOptions</a>
</td></tr></table><div class=discussion_heading>Return Value</div> <table> <tr> <td style='vertical-align: top;' class=paramname><a id="OodleX_Init_GetDefaults_Minimal.html_return" class=nohover>return</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> false if <a href="javascript:show('OODLE_HEADER_VERSION.html')" class="paragraph">OODLE_HEADER_VERSION</a> is not compatible with this lib
</td></tr></table><div class=discussion_heading>Discussion</div></p>
<p> Fill options such that a minimal part of the Oodle library is imported.
</p>
<p> All memory->memory compressors will work.
</p>
<p> IO and Threading will be disabled.
</p>
<p> Can be used with <a href="javascript:show('OodleX_Init_NoThreads.html')" class="paragraph">OodleX_Init_NoThreads</a> or <a href="javascript:show('OodleX_Init.html')" class="paragraph">OodleX_Init</a>
<br>&nbsp;<br> <table class=bar> <tr>
<td width=33% align=left><span class='arrowleft'></span><a href="javascript:show('OodleX_Init_GetDefaults.html')" class="paragraph">OodleX_Init_GetDefaults</a></td><td width=33% align=center><span class='arrowup'></span><a href="javascript:show('OodleXAPI_Init.html')" class="paragraph">OodleX Startup and Shutdown</a></td><td width=33% align=right><span class='arrowright'></span><a href="javascript:show('OodleX_Init.html')" class="paragraph">OodleX_Init</a></td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="example_lz.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>example_lz : Example demonstrating LZ compression and decompression</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "example_lz.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="example_lz.html_backmenu">
<table class=dropmenu>
<tr><td><span class='arrowleft'></span>&nbsp;<a href="javascript:show('Oodle_About_Examples.html')" class="paragraph">How to build and use the Oodle examples</a></td></tr><tr><td><span class='arrowup'></span>&nbsp;<a href="javascript:show('examples.html')" class="paragraph">Examples</a></td></tr><tr><td><span class='arrowright'></span>&nbsp;<a href="javascript:show('example_lz_chart.html')" class="paragraph">example_lz_chart : Example that makes a chart of OodleLZ options</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<div class=discussion_heading>Discussion</div>Oodle example_lz
</p>
<p>Use the various LZ compress/decompress API's
</p>
<p>API's demonstrated here :
</p>
<p>OodleLZ : low level buffer compress/decompress
</p>
<p>OodleLZDecoder : streaming decoder
</p>
<p>OodleLZ_Async : high level async helpers<div class=prototype> <pre>
#include "../include/oodle2x.h"
#include "ooex.h"
#include &lt;stdlib.h>
#include &lt;stdio.h>
#include &lt;string.h>
#include "make_example_input.h"
#ifdef BUILDING_EXAMPLE_CALLER
#define main <span class=prototype_type><a href="javascript:show('example_lz.html')" class="blue">example_lz</a></span>
#endif
<span style="color:#008000;">//===========================================================</span>
<span style="color:#008000;">// file names :</span>
static const char * in_name = "oodle_example_input_file";
static const char * out_name = "oodle_example_output_file";
<span style="color:#008000;">// just make the input buffer global here so all the tests can use it :</span>
static void * in_buffer = NULL;
static OO_SINTa in_size = 0;
<span style="color:#008000;">//===========================================================</span>
<span style="color:#008000;">// protos :</span>
void lz_test_1();
void lz_test_2();
void lz_test_4();
void lz_test_9();
void lz_test_10();
void lz_test_11();
void lz_test_12();
void lz_test_13();
<span style="color:#008000;">//===========================================================</span>
extern "C" int main(int argc,char *argv[])
{
OodleXLog_Printf_v1("usage: example_lz [in] [out]\n");
<span style="color:#008000;">// Init Oodle systems with default options :</span>
<span class=prototype_type><a href="javascript:show('OodleXInitOptions.html')" class="blue">OodleXInitOptions</a></span> opts;
if ( ! <span class=prototype_type><a href="javascript:show('OodleX_Init_GetDefaults.html')" class="blue">OodleX_Init_GetDefaults</a></span>(<span class=prototype_type><a href="javascript:show('OODLE_HEADER_VERSION.html')" class="blue">OODLE_HEADER_VERSION</a></span>,&amp;opts) )
{
fprintf(stderr,"Oodle header version mismatch.\n");
return 10;
}
<span style="color:#008000;">// change opts here if you like</span>
if ( ! <span class=prototype_type><a href="javascript:show('OodleX_Init.html')" class="blue">OodleX_Init</a></span>(<span class=prototype_type><a href="javascript:show('OODLE_HEADER_VERSION.html')" class="blue">OODLE_HEADER_VERSION</a></span>,&amp;opts) )
{
fprintf(stderr,"OodleX_Init failed.\n");
return 10;
}
if ( argc >= 2 ) in_name = argv[1];
else make_example_input(in_name);
if ( argc >= 3 ) out_name = argv[2];
OodleXLog_Printf_v1("lz test %s to %s\n",in_name,out_name);
<span style="color:#008000;">// read the input file to the global buffer :</span>
OO_S64 in_size_64;
in_buffer = <span class=prototype_type><a href="javascript:show('OodleXIOQ_ReadMallocWholeFile_AsyncAndWait.html')" class="blue">OodleXIOQ_ReadMallocWholeFile_AsyncAndWait</a></span>(in_name,&amp;in_size_64);
if ( ! in_buffer)
{
OodleXLog_Printf_v0("failed to read %s\n",in_name);
return 10;
}
in_size = <span class=prototype_type><a href="javascript:show('OodleX_S64_to_SINTa_check.html')" class="blue">OodleX_S64_to_SINTa_check</a></span>( in_size_64 );
lz_test_1();
lz_test_2();
lz_test_4();
lz_test_9();
lz_test_10();
lz_test_11();
lz_test_12();
lz_test_13();
OodleXLog_Printf_v1("\ndone.\n");
<span class=prototype_type><a href="javascript:show('OodleXFree_IOAligned.html')" class="blue">OodleXFree_IOAligned</a></span>(in_buffer);
<span style="color:#008000;">//OodleX_Shutdown();</span>
<span class=prototype_type><a href="javascript:show('OodleX_Shutdown.html')" class="blue">OodleX_Shutdown</a></span>(NULL,OodleX_Shutdown_LogLeaks_Yes,0);
<span style="color:#008000;">//OodleXLog_Printf_v1("press a key\n");</span>
<span style="color:#008000;">//fgetc(stdin);</span>
return 0;
}
<span style="color:#008000;">//=================================================</span>
</pre></div>lz_test_1 :
</p>
<p>example of directly calling the simple buffer->buffer compression API's
</p>
<p>OodleLZ_Compress
OodleLZ_Decompress<div class=prototype> <pre>
void lz_test_1()
{
OodleXLog_Printf_v0("lz_test_1\n");
<span style="color:#008000;">// allocate compressed buffer &amp; decoded buffer of the correct sizes :</span>
OO_SINTa comp_buf_size = <span class=prototype_type><a href="javascript:show('OodleLZ_GetCompressedBufferSizeNeeded.html')" class="blue">OodleLZ_GetCompressedBufferSizeNeeded</a></span>(OodleLZ_Compressor_Kraken,in_size);
void * comp_buf = <span class=prototype_type><a href="javascript:show('OodleXMalloc.html')" class="blue">OodleXMalloc</a></span>( comp_buf_size );
OOEX_ASSERT( comp_buf != NULL );
void * dec_buf = <span class=prototype_type><a href="javascript:show('OodleXMalloc.html')" class="blue">OodleXMalloc</a></span>( in_size );
OOEX_ASSERT( dec_buf != NULL );
<span style="color:#008000;">//---------------------------------------------------</span>
<span style="color:#008000;">// compress buffer -> buffer :</span>
<span class=prototype_type><a href="javascript:show('OodleLZ_CompressionLevel.html')" class="blue">OodleLZ_CompressionLevel</a></span> level = OodleLZ_CompressionLevel_VeryFast;
OO_SINTa comp_len = <span class=prototype_type><a href="javascript:show('OodleLZ_Compress.html')" class="blue">OodleLZ_Compress</a></span>(OodleLZ_Compressor_Kraken,in_buffer,in_size,comp_buf,level);
OodleXLog_Printf_v1("Kraken compress %d -> %d\n",(int)in_size,(int)comp_len);
<span style="color:#008000;">// decompress :</span>
OO_SINTa dec_len = <span class=prototype_type><a href="javascript:show('OodleLZ_Decompress.html')" class="blue">OodleLZ_Decompress</a></span>(comp_buf,comp_len,dec_buf,in_size,OodleLZ_FuzzSafe_Yes);
OOEX_ASSERT_ALWAYS( dec_len == in_size );
OOEX_ASSERT_ALWAYS( memcmp(in_buffer,dec_buf,in_size) == 0 );
<span style="color:#008000;">//---------------------------------------------------</span>
<span style="color:#008000;">// do it again with another compressor, and custom options :</span>
<span style="color:#008000;">// compress buffer -> buffer :</span>
<span class=prototype_type><a href="javascript:show('OodleLZ_CompressOptions.html')" class="blue">OodleLZ_CompressOptions</a></span> options = * <span class=prototype_type><a href="javascript:show('OodleLZ_CompressOptions_GetDefault.html')" class="blue">OodleLZ_CompressOptions_GetDefault</a></span>(OodleLZ_Compressor_Leviathan,level);
options.spaceSpeedTradeoffBytes = <span class=prototype_type><a href="javascript:show('OODLELZ_SPACESPEEDTRADEOFFBYTES_DEFAULT.html')" class="blue">OODLELZ_SPACESPEEDTRADEOFFBYTES_DEFAULT</a></span>/2; <span style="color:#008000;">// favor size over decode speed</span>
comp_len = <span class=prototype_type><a href="javascript:show('OodleLZ_Compress.html')" class="blue">OodleLZ_Compress</a></span>(OodleLZ_Compressor_Leviathan,in_buffer,in_size,comp_buf,level,&amp;options);
OodleXLog_Printf_v1("Leviathan compress %d -> %d\n",(int)in_size,(int)comp_len);
<span style="color:#008000;">// decompress :</span>
dec_len = <span class=prototype_type><a href="javascript:show('OodleLZ_Decompress.html')" class="blue">OodleLZ_Decompress</a></span>(comp_buf,comp_len,dec_buf,in_size,OodleLZ_FuzzSafe_Yes);
OOEX_ASSERT( dec_len == in_size );
OOEX_ASSERT( memcmp(in_buffer,dec_buf,in_size) == 0 );
<span style="color:#008000;">//-------------------------------------</span>
<span style="color:#008000;">// free buffers :</span>
<span class=prototype_type><a href="javascript:show('OodleXFree.html')" class="blue">OodleXFree</a></span>(comp_buf);
<span class=prototype_type><a href="javascript:show('OodleXFree.html')" class="blue">OodleXFree</a></span>(dec_buf);
}
</pre></div>lz_test_2
</p>
<p>example of using the OodleLZ_Async_ async helper functions (eg OodleXLZ_Decompress_Wide_Async)
this is the simple way to get the best performance
</p>
<p>Use the seekChunkReset option on to get a seekable packed stream.<div class=prototype> <pre>
void lz_test_2()
{
OodleXLog_Printf_v0("lz_test_2\n");
<span style="color:#008000;">// allocate compressed buffer &amp; decoded buffer of the correct sizes :</span>
OO_SINTa comp_buf_size = <span class=prototype_type><a href="javascript:show('OodleLZ_GetCompressedBufferSizeNeeded.html')" class="blue">OodleLZ_GetCompressedBufferSizeNeeded</a></span>(OodleLZ_Compressor_Kraken,in_size);
void * comp_buf = <span class=prototype_type><a href="javascript:show('OodleXMalloc.html')" class="blue">OodleXMalloc</a></span>( comp_buf_size );
OOEX_ASSERT( comp_buf != NULL );
void * dec_buf = <span class=prototype_type><a href="javascript:show('OodleXMalloc.html')" class="blue">OodleXMalloc</a></span>( in_size );
OOEX_ASSERT( dec_buf != NULL );
<span style="color:#008000;">//---------------------------------------------------</span>
<span class=prototype_type><a href="javascript:show('OodleLZ_CompressOptions.html')" class="blue">OodleLZ_CompressOptions</a></span> options = * <span class=prototype_type><a href="javascript:show('OodleLZ_CompressOptions_GetDefault.html')" class="blue">OodleLZ_CompressOptions_GetDefault</a></span>(OodleLZ_Compressor_Kraken,OodleLZ_CompressionLevel_Normal);
<span style="color:#008000;">// turn on seekChunkReset</span>
<span style="color:#008000;">// this makes chunks independent so they can be decompressed in any order (not just linear)</span>
options.seekChunkReset = true;
options.seekChunkLen = <span class=prototype_type><a href="javascript:show('OodleLZ_MakeSeekChunkLen.html')" class="blue">OodleLZ_MakeSeekChunkLen</a></span>(in_size,8);
<span style="color:#008000;">// with seekChunkReset on, compression will also go in parallel</span>
<span style="color:#008000;">// (actually compression can *always* run in parallel, but seekChunkReset makes it scale more linearly,</span>
<span style="color:#008000;">// and parallelize on a smaller granularity) </span>
<span style="color:#008000;">// use the OodleLZ_Compressor_Kraken compressor</span>
<span class=prototype_type><a href="javascript:show('OodleXHandle.html')" class="blue">OodleXHandle</a></span> h = <span class=prototype_type><a href="javascript:show('OodleXLZ_Compress_Async.html')" class="blue">OodleXLZ_Compress_Async</a></span>(OodleXAsyncSelect_Full,OodleLZ_Compressor_Kraken,in_buffer,in_size,comp_buf,OodleLZ_CompressionLevel_Normal,&amp;options);
<span style="color:#008000;">// ... do other game work while compression runs ...</span>
OO_SINTa comp_len = -1;
<span class=prototype_type><a href="javascript:show('OodleXLZ_Compress_Wait_GetResult.html')" class="blue">OodleXLZ_Compress_Wait_GetResult</a></span>(h,&amp;comp_len);
OodleXLog_Printf_v1("LZ compress %d -> %d\n",(int)in_size,(int)comp_len);
<span style="color:#008000;">//-----------------------------------------------------</span>
<span style="color:#008000;">// make seek entries :</span>
<span style="color:#008000;">// seek entries allow parallel decompression</span>
<span class=prototype_type><a href="javascript:show('OodleLZ_SeekTable.html')" class="blue">OodleLZ_SeekTable</a></span> * seekTable = <span class=prototype_type><a href="javascript:show('OodleLZ_CreateSeekTable.html')" class="blue">OodleLZ_CreateSeekTable</a></span>(OodleLZSeekTable_Flags_None,options.seekChunkLen,in_buffer,in_size,comp_buf,comp_len);
OOEX_ASSERT( seekTable != NULL );
<span style="color:#008000;">//-----------------------------------------------------</span>
<span class=prototype_type><a href="javascript:show('OodleXHandle.html')" class="blue">OodleXHandle</a></span> dh = <span class=prototype_type><a href="javascript:show('OodleXLZ_Decompress_Wide_Async.html')" class="blue">OodleXLZ_Decompress_Wide_Async</a></span>(OodleXAsyncSelect_Full,seekTable,comp_buf,comp_len,dec_buf,in_size,
OodleLZ_FuzzSafe_Yes,OodleLZ_CheckCRC_No,OodleLZ_Verbosity_None,0,0,OodleLZ_PackedRawOverlap_No,0,0);
<span style="color:#008000;">// ... do other game work while decompression runs ...</span>
<span class=prototype_type><a href="javascript:show('OodleXStatus.html')" class="blue">OodleXStatus</a></span> st = <span class=prototype_type><a href="javascript:show('OodleX_Wait.html')" class="blue">OodleX_Wait</a></span>(dh,OodleXHandleDeleteIfDone_Yes);
OOEX_ASSERT_ALWAYS( st == OodleXStatus_Done );
<span style="color:#008000;">//-----------------------------------------------------</span>
<span style="color:#008000;">// check :</span>
OOEX_ASSERT( memcmp(in_buffer,dec_buf,in_size) == 0 );
<span style="color:#008000;">//-------------------------------------</span>
<span style="color:#008000;">// free buffers :</span>
<span class=prototype_type><a href="javascript:show('OodleLZ_FreeSeekTable.html')" class="blue">OodleLZ_FreeSeekTable</a></span>(seekTable);
<span class=prototype_type><a href="javascript:show('OodleXFree.html')" class="blue">OodleXFree</a></span>(comp_buf);
<span class=prototype_type><a href="javascript:show('OodleXFree.html')" class="blue">OodleXFree</a></span>(dec_buf);
}
</pre></div>test_4 :
</p>
<p>example of seeking in packed stream
and firing per-chunk decompression tasks
</p>
<p>Sort of like what OodleXLZ_Decompress_Wide_Async does internally.<div class=prototype> <pre>
void lz_test_4()
{
OodleXLog_Printf_v0("lz_test_4\n");
<span style="color:#008000;">// allocate compressed buffer &amp; decoded buffer of the correct sizes :</span>
OO_SINTa comp_buf_size = <span class=prototype_type><a href="javascript:show('OodleLZ_GetCompressedBufferSizeNeeded.html')" class="blue">OodleLZ_GetCompressedBufferSizeNeeded</a></span>(OodleLZ_Compressor_Kraken,in_size);
void * comp_buf = <span class=prototype_type><a href="javascript:show('OodleXMalloc.html')" class="blue">OodleXMalloc</a></span>( comp_buf_size );
OOEX_ASSERT( comp_buf != NULL );
void * dec_buf = <span class=prototype_type><a href="javascript:show('OodleXMalloc.html')" class="blue">OodleXMalloc</a></span>( in_size );
OOEX_ASSERT( dec_buf != NULL );
<span style="color:#008000;">// set up compress options for independent seek chunks of the smallest allowed size :</span>
<span class=prototype_type><a href="javascript:show('OodleLZ_CompressOptions.html')" class="blue">OodleLZ_CompressOptions</a></span> lzOptions = * <span class=prototype_type><a href="javascript:show('OodleLZ_CompressOptions_GetDefault.html')" class="blue">OodleLZ_CompressOptions_GetDefault</a></span>(OodleLZ_Compressor_Kraken,OodleLZ_CompressionLevel_VeryFast);
lzOptions.seekChunkReset = true;
<span style="color:#008000;">//lzOptions.seekChunkLen = OODLELZ_BLOCK_LEN;</span>
<span style="color:#008000;">// make a seek chunk len to target 32 chunks :</span>
lzOptions.seekChunkLen = <span class=prototype_type><a href="javascript:show('OodleLZ_MakeSeekChunkLen.html')" class="blue">OodleLZ_MakeSeekChunkLen</a></span>(in_size,32);
<span style="color:#008000;">//---------------------------------------------------</span>
<span style="color:#008000;">// compress buffer -> buffer :</span>
OO_SINTa comp_len = <span class=prototype_type><a href="javascript:show('OodleLZ_Compress.html')" class="blue">OodleLZ_Compress</a></span>(OodleLZ_Compressor_Kraken,in_buffer,in_size,comp_buf,OodleLZ_CompressionLevel_VeryFast,&amp;lzOptions);
OodleXLog_Printf_v1("LZ compress %d -> %d\n",(int)in_size,(int)comp_len);
<span style="color:#008000;">//---------------------------------------------------</span>
<span style="color:#008000;">// decompress by seeking and firing async decodes</span>
OO_SINTa maxNumSeeks = (in_size + lzOptions.seekChunkLen-1)/lzOptions.seekChunkLen;
<span class=prototype_type><a href="javascript:show('OodleXHandle.html')" class="blue">OodleXHandle</a></span> * handles = (<span class=prototype_type><a href="javascript:show('OodleXHandle.html')" class="blue">OodleXHandle</a></span> *) <span class=prototype_type><a href="javascript:show('OodleXMalloc.html')" class="blue">OodleXMalloc</a></span>( sizeof(<span class=prototype_type><a href="javascript:show('OodleXHandle.html')" class="blue">OodleXHandle</a></span>) * maxNumSeeks );
OOEX_ASSERT( handles != NULL );
OO_S32 numHandles = 0;
{
OO_SINTa dec_pos = 0;
OO_U8 * comp_ptr = (OO_U8 *)comp_buf;
OO_SINTa comp_avail = comp_len;
while(dec_pos &lt; in_size)
{
OO_SINTa dec_chunk_len = OOEX_MIN(lzOptions.seekChunkLen, (in_size-dec_pos) );
<span class=prototype_type><a href="javascript:show('OodleXHandle.html')" class="blue">OodleXHandle</a></span> h = <span class=prototype_type><a href="javascript:show('OodleXLZ_Decompress_Narrow_Async.html')" class="blue">OodleXLZ_Decompress_Narrow_Async</a></span>(OodleXAsyncSelect_Full,comp_ptr,comp_avail,(OO_U8 *)dec_buf+dec_pos,dec_chunk_len);
<span style="color:#008000;">// OodleLZ_CheckCRC_No,OodleLZ_Verbosity_None, etc</span>
handles[numHandles++] = h;
OO_SINTa seek_step = <span class=prototype_type><a href="javascript:show('OodleLZ_GetCompressedStepForRawStep.html')" class="blue">OodleLZ_GetCompressedStepForRawStep</a></span>(comp_ptr,comp_avail,dec_pos,dec_chunk_len);
comp_ptr += seek_step;
dec_pos += dec_chunk_len;
<span style="color:#008000;">// wait on handles[numHandles-128] to prevent handle count exceeding handle table size :</span>
if ( numHandles >= 128 )
{
<span class=prototype_type><a href="javascript:show('OodleXStatus.html')" class="blue">OodleXStatus</a></span> st = OodleX_WaitAndDelete(handles[numHandles-128]);
OOEX_ASSERT_ALWAYS( st == OodleXStatus_Done );
}
}
}
<span style="color:#008000;">// ... do other game work while async decomps run ...</span>
<span class=prototype_type><a href="javascript:show('OodleXStatus.html')" class="blue">OodleXStatus</a></span> st = <span class=prototype_type><a href="javascript:show('OodleX_WaitAll.html')" class="blue">OodleX_WaitAll</a></span>(handles,numHandles,OodleXHandleDeleteIfDone_Yes);
OOEX_ASSERT_ALWAYS( st == OodleXStatus_Done );
<span class=prototype_type><a href="javascript:show('OodleXFree.html')" class="blue">OodleXFree</a></span>(handles);
<span style="color:#008000;">// check it's okay :</span>
OOEX_ASSERT_ALWAYS( memcmp(in_buffer,dec_buf,in_size) == 0 );
<span style="color:#008000;">//-------------------------------------</span>
<span style="color:#008000;">// free buffers :</span>
<span class=prototype_type><a href="javascript:show('OodleXFree.html')" class="blue">OodleXFree</a></span>(comp_buf);
<span class=prototype_type><a href="javascript:show('OodleXFree.html')" class="blue">OodleXFree</a></span>(dec_buf);
}
</pre></div>test_9 :
</p>
<p>Demonstrate separate block compression & decompression
</p>
<p>OodleLZ blocks can be concatenated to form a single valid LZ data stream
That means you can just call OodleLZ_Compress on separate blocks and append the output,
then decode in one call.
</p>
<p>OodleLZ blocks that were made from separate Compress calls will be independent
unless you specified dictionary backup in the encode, which makes them depend on previous
data.
</p>
<p></p>
<p>The rules are :
</p>
<p>1. OodleLZ Decompress can be called on invidual blocks (OODLELZ_BLOCK_LEN) if :
</p>
<p> they are seek-chunk-reset points,
OR if they were made by separate OodleLZ Compress calls
OR if the compressor does not carry state across blocks (OodleLZ_Compressor_MustDecodeWithoutResets)
</p>
<p>2. OodleLZ Decompress must get the same dictionary as OodleLZ Compress saw
no previous dictionary is needed if it's a seek-chunk-reset point
(the start of an OodleLZ_Compress call is always a seek reset point,
if no dictionary backup is provided to the encoder)<div class=prototype> <pre>
void lz_test_9()
{
OodleXLog_Printf_v0("lz_test_9\n");
<span style="color:#008000;">//---------------------------------------------------</span>
<span style="color:#008000;">// split the buffer into two pieces</span>
<span style="color:#008000;">// such that the split point is a valid seek chunk point :</span>
OO_SINTa block_size = <span class=prototype_type><a href="javascript:show('OodleLZ_MakeSeekChunkLen.html')" class="blue">OodleLZ_MakeSeekChunkLen</a></span>(in_size,2);
if ( block_size >= in_size )
{
<span style="color:#008000;">// too small to split at seek chunk</span>
return;
}
char * in1 = (char *)in_buffer;
char * in2 = in1 + block_size;
OO_SINTa len1 = block_size;
OO_SINTa len2 = in_size - len1;
OodleXLog_Printf_v1("Chunks : %d + %d\n",(int)len1,(int)len2);
<span style="color:#008000;">//---------------------------------------------------</span>
<span style="color:#008000;">// allocate compressed buffer &amp; decoded buffer of the correct sizes :</span>
OO_SINTa comp_buf_size = <span class=prototype_type><a href="javascript:show('OodleLZ_GetCompressedBufferSizeNeeded.html')" class="blue">OodleLZ_GetCompressedBufferSizeNeeded</a></span>(OodleLZ_Compressor_Kraken,in_size);
void * comp_buf = <span class=prototype_type><a href="javascript:show('OodleXMalloc.html')" class="blue">OodleXMalloc</a></span>( comp_buf_size );
OOEX_ASSERT( comp_buf != NULL );
void * dec_buf = <span class=prototype_type><a href="javascript:show('OodleXMalloc.html')" class="blue">OodleXMalloc</a></span>( in_size );
OOEX_ASSERT( dec_buf != NULL );
<span style="color:#008000;">//---------------------------------------------------</span>
<span class=prototype_type><a href="javascript:show('OodleLZ_Compressor.html')" class="blue">OodleLZ_Compressor</a></span> compressor = OodleLZ_Compressor_Kraken;
<span class=prototype_type><a href="javascript:show('OodleLZ_CompressionLevel.html')" class="blue">OodleLZ_CompressionLevel</a></span> level = OodleLZ_CompressionLevel_Fast;
<span class=prototype_type><a href="javascript:show('OodleLZ_CompressOptions.html')" class="blue">OodleLZ_CompressOptions</a></span> options = * <span class=prototype_type><a href="javascript:show('OodleLZ_CompressOptions_GetDefault.html')" class="blue">OodleLZ_CompressOptions_GetDefault</a></span>(compressor,level);
<span style="color:#008000;">// options does NOT have seek resets by default</span>
<span style="color:#008000;">//-----------------------------</span>
<span style="color:#008000;">// compress as one part :</span>
{
OO_SINTa comp_len = <span class=prototype_type><a href="javascript:show('OodleLZ_Compress.html')" class="blue">OodleLZ_Compress</a></span>(compressor,in_buffer,in_size,comp_buf,level,&amp;options);
OodleXLog_Printf_v1("Whole buffer compress : %d -> %d\n",(int)in_size,(int)comp_len);
<span style="color:#008000;">// normal one part decompression :</span>
memset(dec_buf,0xEE,in_size);
<span class=prototype_type><a href="javascript:show('OodleLZ_Decompress.html')" class="blue">OodleLZ_Decompress</a></span>(comp_buf,comp_len,dec_buf,in_size,OodleLZ_FuzzSafe_Yes);
OOEX_ASSERT_ALWAYS( memcmp(in_buffer,dec_buf,in_size) == 0 );
OO_U8 * comp_end = (OO_U8 *)comp_buf + comp_len;
<span style="color:#008000;">//===================================================================</span>
<span style="color:#008000;">// can decode in two calls with the full dictionary, but only for compressors that don't carry state :</span>
if ( ! <span class=prototype_type><a href="javascript:show('OodleLZ_Compressor_MustDecodeWithoutResets.html')" class="blue">OodleLZ_Compressor_MustDecodeWithoutResets</a></span>(compressor) )
{
<span style="color:#008000;">//-------------------------------------------------------------</span>
<span style="color:#008000;">// decode as two parts : (len1,len2) :</span>
memset(dec_buf,0xEE,in_size);
OO_SINTa dec_comp_len1 = <span class=prototype_type><a href="javascript:show('OodleLZ_GetCompressedStepForRawStep.html')" class="blue">OodleLZ_GetCompressedStepForRawStep</a></span>(comp_buf,comp_len,0,len1);
<span class=prototype_type><a href="javascript:show('OodleLZ_Decompress.html')" class="blue">OodleLZ_Decompress</a></span>(comp_buf,comp_len,dec_buf,len1,OodleLZ_FuzzSafe_Yes);
<span style="color:#008000;">// decompress second part with dictionary base :</span>
<span class=prototype_type><a href="javascript:show('OodleLZ_Decompress.html')" class="blue">OodleLZ_Decompress</a></span>((char *)comp_buf+dec_comp_len1,comp_len-dec_comp_len1,(char *)dec_buf+len1,len2,
OodleLZ_FuzzSafe_Yes,OodleLZ_CheckCRC_No,OodleLZ_Verbosity_None,dec_buf,in_size);
OOEX_ASSERT_ALWAYS( memcmp(in_buffer,dec_buf,in_size) == 0 );
<span style="color:#008000;">//-------------------------------------------------------------</span>
<span style="color:#008000;">// can also decode block by block :</span>
memset(dec_buf,0xEE,in_size);
<span style="color:#008000;">// scan comp_ptr through blocks :</span>
OO_U8 * comp_ptr = (OO_U8 *)comp_buf;
for(OO_SINTa block_pos=0;block_pos &lt; in_size;block_pos += <span class=prototype_type><a href="javascript:show('OODLELZ_BLOCK_LEN.html')" class="blue">OODLELZ_BLOCK_LEN</a></span>)
{
OO_SINTa block_len = OOEX_MIN(<span class=prototype_type><a href="javascript:show('OODLELZ_BLOCK_LEN.html')" class="blue">OODLELZ_BLOCK_LEN</a></span>, (in_size - block_pos) );
OO_SINTa block_comp_len = <span class=prototype_type><a href="javascript:show('OodleLZ_GetCompressedStepForRawStep.html')" class="blue">OodleLZ_GetCompressedStepForRawStep</a></span>(comp_ptr,comp_end-comp_ptr,0,block_len);
<span style="color:#008000;">// decode current block, with window set to whole buffer :</span>
OO_SINTa got_pos = <span class=prototype_type><a href="javascript:show('OodleLZ_Decompress.html')" class="blue">OodleLZ_Decompress</a></span>(comp_ptr,block_comp_len,(char *)dec_buf+block_pos,block_len,
OodleLZ_FuzzSafe_Yes,OodleLZ_CheckCRC_No,OodleLZ_Verbosity_None,dec_buf,in_size);
OOEX_ASSERT_ALWAYS( got_pos == block_pos+block_len );
comp_ptr += block_comp_len;
}
OOEX_ASSERT_ALWAYS( memcmp(in_buffer,dec_buf,in_size) == 0 );
<span style="color:#008000;">//-------------------------------------------------------------</span>
}
}
<span style="color:#008000;">//-----------------------------</span>
<span style="color:#008000;">// two part compression with overlap :</span>
<span style="color:#008000;">// two compress calls, but using the full window, so decompression must use full window as well</span>
{
OO_SINTa comp_len1 = <span class=prototype_type><a href="javascript:show('OodleLZ_Compress.html')" class="blue">OodleLZ_Compress</a></span>(compressor,in1,len1,comp_buf,level,&amp;options,in_buffer);
OO_SINTa comp_len2 = <span class=prototype_type><a href="javascript:show('OodleLZ_Compress.html')" class="blue">OodleLZ_Compress</a></span>(compressor,in2,len2,(char *)comp_buf + comp_len1,level,&amp;options,in_buffer);
OO_SINTa comp_len = comp_len1 + comp_len2;
OodleXLog_Printf_v1("Two part compress with overlap : %d -> %d\n",(int)in_size,(int)comp_len);
<span style="color:#008000;">// must decode whole buffer, but can do it in two calls :</span>
<span style="color:#008000;">// you can always just do a whole buffer decode here :</span>
memset(dec_buf,0xEE,in_size);
<span class=prototype_type><a href="javascript:show('OodleLZ_Decompress.html')" class="blue">OodleLZ_Decompress</a></span>(comp_buf,comp_len,dec_buf,in_size,OodleLZ_FuzzSafe_Yes);
OOEX_ASSERT_ALWAYS( memcmp(in_buffer,dec_buf,in_size) == 0 );
<span style="color:#008000;">// or incremental, but with the whole dictionary :</span>
memset(dec_buf,0xEE,in_size);
OO_SINTa dec_comp_len1 = <span class=prototype_type><a href="javascript:show('OodleLZ_GetCompressedStepForRawStep.html')" class="blue">OodleLZ_GetCompressedStepForRawStep</a></span>(comp_buf,comp_len,0,len1);
<span class=prototype_type><a href="javascript:show('OodleLZ_Decompress.html')" class="blue">OodleLZ_Decompress</a></span>(comp_buf,comp_len,dec_buf,len1,OodleLZ_FuzzSafe_Yes);
<span class=prototype_type><a href="javascript:show('OodleLZ_Decompress.html')" class="blue">OodleLZ_Decompress</a></span>((char *)comp_buf+dec_comp_len1,comp_len-dec_comp_len1,(char *)dec_buf+len1,len2,
OodleLZ_FuzzSafe_Yes,OodleLZ_CheckCRC_No,OodleLZ_Verbosity_None,dec_buf,in_size);
OOEX_ASSERT_ALWAYS( memcmp(in_buffer,dec_buf,in_size) == 0 );
}
<span style="color:#008000;">//-----------------------------</span>
<span style="color:#008000;">// two part no overlap :</span>
<span style="color:#008000;">// second compress doesn't use earlier dictionary here</span>
<span style="color:#008000;">// so decompression can be done in two pieces with no overlap</span>
{
OO_SINTa comp_len1 = <span class=prototype_type><a href="javascript:show('OodleLZ_Compress.html')" class="blue">OodleLZ_Compress</a></span>(compressor,in1,len1,comp_buf,level,&amp;options);
OO_SINTa comp_len2 = <span class=prototype_type><a href="javascript:show('OodleLZ_Compress.html')" class="blue">OodleLZ_Compress</a></span>(compressor,in2,len2,(char *)comp_buf + comp_len1,level,&amp;options);
OO_SINTa comp_len = comp_len1 + comp_len2;
OodleXLog_Printf_v1("Two part compress no overlap : %d -> %d\n",(int)in_size,(int)comp_len);
<span style="color:#008000;">// can decode in two parts :</span>
<span style="color:#008000;">// you can always just do a whole buffer decode here :</span>
memset(dec_buf,0xEE,in_size);
<span class=prototype_type><a href="javascript:show('OodleLZ_Decompress.html')" class="blue">OodleLZ_Decompress</a></span>(comp_buf,comp_len,dec_buf,in_size,OodleLZ_FuzzSafe_Yes);
OOEX_ASSERT_ALWAYS( memcmp(in_buffer,dec_buf,in_size) == 0 );
<span style="color:#008000;">// or incremental :</span>
memset(dec_buf,0xEE,in_size);
OO_SINTa dec_comp_len1 = <span class=prototype_type><a href="javascript:show('OodleLZ_GetCompressedStepForRawStep.html')" class="blue">OodleLZ_GetCompressedStepForRawStep</a></span>(comp_buf,comp_len,0,len1);
<span style="color:#008000;">// no dictionary backup needed</span>
<span style="color:#008000;">// decode in reverse order to simulate random access :</span>
<span class=prototype_type><a href="javascript:show('OodleLZ_Decompress.html')" class="blue">OodleLZ_Decompress</a></span>((char *)comp_buf+dec_comp_len1,comp_len-dec_comp_len1,(char *)dec_buf+len1,len2,OodleLZ_FuzzSafe_Yes);
<span class=prototype_type><a href="javascript:show('OodleLZ_Decompress.html')" class="blue">OodleLZ_Decompress</a></span>(comp_buf,comp_len,dec_buf,len1,OodleLZ_FuzzSafe_Yes);
OOEX_ASSERT_ALWAYS( memcmp(in_buffer,dec_buf,in_size) == 0 );
}
<span style="color:#008000;">//-----------------------------</span>
<span style="color:#008000;">// two part no overlap via seek reset :</span>
<span style="color:#008000;">// seek reset system is equivalent to splitting Compress calls like the above</span>
{
options.seekChunkReset = true;
options.seekChunkLen = (OO_S32)block_size;
OodleXLog_Printf_v1("seekChunkLen : %d\n",options.seekChunkLen);
OO_SINTa comp_len = <span class=prototype_type><a href="javascript:show('OodleLZ_Compress.html')" class="blue">OodleLZ_Compress</a></span>(compressor,in_buffer,in_size,comp_buf,level,&amp;options);
OodleXLog_Printf_v1("Whole buffer compress seek reset : %d -> %d\n",(int)in_size,(int)comp_len);
<span style="color:#008000;">// can decode in two parts :</span>
<span style="color:#008000;">// you can always just do a whole buffer decode here :</span>
memset(dec_buf,0xEE,in_size);
OodleXLog_Printf_v1("one part : \n");
<span class=prototype_type><a href="javascript:show('OodleLZ_Decompress.html')" class="blue">OodleLZ_Decompress</a></span>(comp_buf,comp_len,dec_buf,in_size,OodleLZ_FuzzSafe_Yes);
OOEX_ASSERT_ALWAYS( memcmp(in_buffer,dec_buf,in_size) == 0 );
<span style="color:#008000;">// or incremental :</span>
memset(dec_buf,0xEE,in_size);
OodleXLog_Printf_v1("two part : \n");
OO_SINTa dec_comp_len1 = <span class=prototype_type><a href="javascript:show('OodleLZ_GetCompressedStepForRawStep.html')" class="blue">OodleLZ_GetCompressedStepForRawStep</a></span>(comp_buf,comp_len,0,len1);
OodleXLog_Printf_v1("dec_comp_len1 = %d\n",(int)dec_comp_len1);
<span style="color:#008000;">// no dictionary backup needed</span>
<span style="color:#008000;">// decode in reverse order to simulate random access :</span>
<span class=prototype_type><a href="javascript:show('OodleLZ_Decompress.html')" class="blue">OodleLZ_Decompress</a></span>((char *)comp_buf+dec_comp_len1,comp_len-dec_comp_len1,(char *)dec_buf+len1,len2,OodleLZ_FuzzSafe_Yes);
<span class=prototype_type><a href="javascript:show('OodleLZ_Decompress.html')" class="blue">OodleLZ_Decompress</a></span>(comp_buf,comp_len,dec_buf,len1,OodleLZ_FuzzSafe_Yes);
OOEX_ASSERT_ALWAYS( memcmp(in_buffer,dec_buf,in_size) == 0 );
}
<span style="color:#008000;">//=============================================</span>
<span class=prototype_type><a href="javascript:show('OodleXFree.html')" class="blue">OodleXFree</a></span>(dec_buf);
<span class=prototype_type><a href="javascript:show('OodleXFree.html')" class="blue">OodleXFree</a></span>(comp_buf);
}
</pre></div>lz_test_10 :
</p>
<p>example of using the incremental/streaming decoder
</p>
<p>OodleLZDecoder_Create, etc.
</p>
<p>this example shows decoding *from* a limited window
</p>
<p>outputs into a single buffer
</p>
<p>this example simulates using a limited IO buffer for compressed data
</p>
<p>it decodes quanta from the available compressed data<div class=prototype> <pre>
void lz_test_10()
{
OodleXLog_Printf_v0("lz_test_10\n");
<span style="color:#008000;">// allocate compressed buffer &amp; decoded buffer of the correct sizes :</span>
<span class=prototype_type><a href="javascript:show('OodleLZ_Compressor.html')" class="blue">OodleLZ_Compressor</a></span> compressor = OodleLZ_Compressor_Kraken;
<span class=prototype_type><a href="javascript:show('OodleLZ_CompressionLevel.html')" class="blue">OodleLZ_CompressionLevel</a></span> level = OodleLZ_CompressionLevel_Fast;
OO_SINTa comp_buf_size = <span class=prototype_type><a href="javascript:show('OodleLZ_GetCompressedBufferSizeNeeded.html')" class="blue">OodleLZ_GetCompressedBufferSizeNeeded</a></span>(OodleLZ_Compressor_Kraken,in_size);
OO_U8 * comp_buf = (OO_U8 *) <span class=prototype_type><a href="javascript:show('OodleXMalloc.html')" class="blue">OodleXMalloc</a></span>( comp_buf_size );
OOEX_ASSERT( comp_buf != NULL );
OO_U8 * dec_buf = (OO_U8 *)<span class=prototype_type><a href="javascript:show('OodleXMalloc.html')" class="blue">OodleXMalloc</a></span>( in_size );
OOEX_ASSERT( dec_buf != NULL );
<span style="color:#008000;">//---------------------------------------------------</span>
<span style="color:#008000;">// compress buffer -> buffer :</span>
OO_SINTa comp_len = <span class=prototype_type><a href="javascript:show('OodleLZ_Compress.html')" class="blue">OodleLZ_Compress</a></span>(compressor,in_buffer,in_size,comp_buf,level);
OodleXLog_Printf_v1("LZ compress %d -> %d\n",(int)in_size,(int)comp_len);
<span style="color:#008000;">//---------------------------------------------------</span>
<span style="color:#008000;">// decompress with incremental streaming decoder :</span>
<span style="color:#008000;">// we're now going to pretend that "comp_buf" is in a file</span>
<span style="color:#008000;">// and we can't read the whole thing</span>
<span style="color:#008000;">// 64k IO buffer to stress the code :</span>
<span style="color:#008000;">// obviously you would use much larger</span>
<span style="color:#008000;">// must be at least enough for 1 whole compressed quantum (OODLELZ_BLOCK_MAX_COMPLEN = 256k + 2)</span>
<span style="color:#008000;">// (for Kraken / whole-block compressors you probably want 512k io_buffer minimum)</span>
const OO_SINTa io_buffer_size = <span class=prototype_type><a href="javascript:show('OODLELZ_BLOCK_LEN.html')" class="blue">OODLELZ_BLOCK_LEN</a></span>*2;
OO_U8 * io_buffer = (OO_U8 *) <span class=prototype_type><a href="javascript:show('OodleXMalloc_IOAligned.html')" class="blue">OodleXMalloc_IOAligned</a></span>(io_buffer_size);
OOEX_ASSERT( io_buffer != NULL );
OO_SINTa io_buffer_avail = 0; <span style="color:#008000;">// starts empty</span>
OO_SINTa comp_file_io_pos = 0; <span style="color:#008000;">// simulated compressed file next read pos</span>
{
<span style="color:#008000;">// make the Decoder object using on-stack memory :</span>
<span style="color:#008000;">//OO_S32 memSize = OodleLZDecoder_MemorySizeNeeded(compressor,in_size);</span>
<span class=prototype_type><a href="javascript:show('OodleLZDecoder.html')" class="blue">OodleLZDecoder</a></span> * decoder = <span class=prototype_type><a href="javascript:show('OodleLZDecoder_Create.html')" class="blue">OodleLZDecoder_Create</a></span>(compressor,in_size,NULL,0);
OO_SINTa io_buffer_pos = 0;
OO_U8 * dec_buf_ptr = (OO_U8 *) dec_buf;
OO_U8 * dec_buf_end = (OO_U8 *) dec_buf + in_size;;
while(dec_buf_ptr&lt;dec_buf_end)
{
<span style="color:#008000;">// see if we can do a "read" into the io_buffer :</span>
if ( comp_file_io_pos &lt; comp_len )
{
<span style="color:#008000;">// don't bother with an IO unless I have some minimum amount of room :</span>
OO_SINTa min_io_size = 16*1024;
if ( (io_buffer_size - io_buffer_avail) > min_io_size )
{
OO_SINTa io_size = OOEX_MIN( (io_buffer_size - io_buffer_avail), (comp_len - comp_file_io_pos) );
<span style="color:#008000;">// stress - limit IO size :</span>
<span style="color:#008000;">//io_size = OOEX_MIN(io_size,64*1024);</span>
<span style="color:#008000;">//OodleXLog_Printf_v1("IO read : %d at %d\n",(int)io_size,(int)comp_file_io_pos);</span>
<span style="color:#008000;">// IO read :</span>
memcpy(io_buffer+io_buffer_avail,comp_buf+comp_file_io_pos,io_size);
comp_file_io_pos += io_size;
io_buffer_avail += io_size;
}
}
<span style="color:#008000;">// ask the Decoder for a partial decode :</span>
<span class=prototype_type><a href="javascript:show('OodleLZ_DecodeSome_Out.html')" class="blue">OodleLZ_DecodeSome_Out</a></span> out;
OO_BOOL ok = <span class=prototype_type><a href="javascript:show('OodleLZDecoder_DecodeSome.html')" class="blue">OodleLZDecoder_DecodeSome</a></span>(decoder,&amp;out,
dec_buf,(dec_buf_ptr - dec_buf),in_size,(dec_buf_end - dec_buf_ptr),
io_buffer+io_buffer_pos,io_buffer_avail-io_buffer_pos);
<span style="color:#008000;">// real usage should check error return conditions</span>
OOEX_ASSERT_ALWAYS( ok );
OO_S32 decoded = out.decodedCount;
OO_S32 comp_used = out.compBufUsed;
<span style="color:#008000;">// advance the decoder :</span>
dec_buf_ptr += decoded;
io_buffer_pos += comp_used;
OOEX_ASSERT( out.curQuantumCompLen &lt; io_buffer_size );
<span style="color:#008000;">//OodleXLog_Printf_v1("decoded : %d using %d\n",decoded,comp_used);</span>
if ( decoded == 0 )
{
<span style="color:#008000;">// couldn't decode anything</span>
<span style="color:#008000;">// this should only happen because we're near the end of the io buffer</span>
<span style="color:#008000;">// and don't have enough compressed data to do antyhing</span>
OOEX_ASSERT( io_buffer_pos > 0 );
<span style="color:#008000;">// slide down the io buffer so it can refill</span>
OO_SINTa io_buffer_keep = io_buffer_avail - io_buffer_pos;
memmove(io_buffer,io_buffer+io_buffer_pos,io_buffer_keep);
io_buffer_pos = 0;
io_buffer_avail = io_buffer_keep;
}
}
OOEX_ASSERT( comp_file_io_pos == comp_len );
<span class=prototype_type><a href="javascript:show('OodleLZDecoder_Destroy.html')" class="blue">OodleLZDecoder_Destroy</a></span>(decoder);
}
<span style="color:#008000;">// check it's okay :</span>
OOEX_ASSERT_ALWAYS( memcmp(in_buffer,dec_buf,in_size) == 0 );
<span style="color:#008000;">//-------------------------------------</span>
<span style="color:#008000;">// free buffers :</span>
<span class=prototype_type><a href="javascript:show('OodleXFree.html')" class="blue">OodleXFree</a></span>(comp_buf);
<span class=prototype_type><a href="javascript:show('OodleXFree.html')" class="blue">OodleXFree</a></span>(dec_buf);
<span class=prototype_type><a href="javascript:show('OodleXFree_IOAligned.html')" class="blue">OodleXFree_IOAligned</a></span>(io_buffer);
}
</pre></div>lz_test_11 :
</p>
<p>example of using the incremental/streaming decoder
</p>
<p>OodleLZDecoder_Create, etc.
</p>
<p>this example simulates using a limited IO buffer for compressed data (like lz_test_10)
</p>
<p>Kraken does not currently have a true "sliding window" decoder; it can't wrap around a circular
window. This example shows how to simulate a sliding window with the Kraken decoder by sliding down chunks.
</p>
<p>It decodes 256k at a time into a 512k window. It decodes into the second half of the window, with
the first window filled by the previous decode. After each decode, it memcopies down the data to be used
as dictionary for the next block.
</p>
<p>---------
</p>
<p>In general this method should not be used if you can just decode directly into the output buffer.
That's always the best way if possible.
</p>
<p>One case where you might want to use this is if your output buffer is in non-cached graphics memory.
</p>
<p>---------
</p>
<p>The simpler alternative to this is just to reset every 256k block, so there's no dictionary overlap.
eg. just set :
</p>
<p>options.seekChunkReset = true;
options.seekChunkLen = OODLELZ_BLOCK_LEN;
</p>
<p>then you can use a 256k decode output window and don't need to memcpy to slide down the dictionary.
The disadvantage of resetting is just lower compression.<div class=prototype> <pre>
void lz_test_11()
{
OodleXLog_Printf_v0("lz_test_11\n");
<span style="color:#008000;">//*</span>
<span style="color:#008000;">// fast encoder:</span>
<span class=prototype_type><a href="javascript:show('OodleLZ_Compressor.html')" class="blue">OodleLZ_Compressor</a></span> compressor = OodleLZ_Compressor_Kraken;
<span class=prototype_type><a href="javascript:show('OodleLZ_CompressionLevel.html')" class="blue">OodleLZ_CompressionLevel</a></span> level = OodleLZ_CompressionLevel_VeryFast;
</pre></div>/
// slowest encoder:
OodleLZ_Compressor compressor = OodleLZ_Compressor_Leviathan;
OodleLZ_CompressionLevel level = OodleLZ_CompressionLevel_Optimal5;
/*<div class=prototype> <pre>
<span style="color:#008000;">//---------------------------------------------------</span>
</pre></div>// minimum size :
// we will decode 256k (one "block") at a time
// +256k more for dictionary references to preceding data
</p>
<p> OO_S32 decode_window_size = 2*OODLELZ_BLOCK_LEN; // OODLELZ_BLOCK_LEN = 256k
OO_S32 dictionary_size = OODLELZ_BLOCK_LEN;
/<div class=prototype> <pre>
<span style="color:#008000;">// more reasonable size :</span>
<span style="color:#008000;">// dictionary limit 2M</span>
<span style="color:#008000;">// decode in a 3M window, so we do a memcpy after every 1M streamed</span>
OO_S32 decode_window_size = 3*1024*1024; <span style="color:#008000;">// OODLELZ_BLOCK_LEN = 256k</span>
OO_S32 dictionary_size = 2*1024*1024;
</pre></div><div class=prototype> <pre>
OodleXLog_Printf_v1("dictionary_size : %d, decode_window_size : %d\n",dictionary_size,decode_window_size);
<span style="color:#008000;">//---------------------------------------------------</span>
OO_SINTa comp_buf_size = <span class=prototype_type><a href="javascript:show('OodleLZ_GetCompressedBufferSizeNeeded.html')" class="blue">OodleLZ_GetCompressedBufferSizeNeeded</a></span>(compressor,in_size);
OO_U8 * comp_buf = (OO_U8 *) <span class=prototype_type><a href="javascript:show('OodleXMalloc.html')" class="blue">OodleXMalloc</a></span>( comp_buf_size );
OOEX_ASSERT( comp_buf != NULL );
<span style="color:#008000;">// dec_window is our scratch circular window</span>
OO_U8 * dec_window = (OO_U8 *)<span class=prototype_type><a href="javascript:show('OodleXMalloc.html')" class="blue">OodleXMalloc</a></span>( decode_window_size );
OOEX_ASSERT( dec_window != NULL );
<span style="color:#008000;">// dec_out_buf is the final output location (perhaps uncached graphics memory)</span>
OO_U8 * dec_out_buf = (OO_U8 *)<span class=prototype_type><a href="javascript:show('OodleXMalloc.html')" class="blue">OodleXMalloc</a></span>( in_size );
OOEX_ASSERT( dec_out_buf != NULL );
<span style="color:#008000;">// decoderMem is used for the OodleLZ decoder object</span>
OO_S32 memSize = <span class=prototype_type><a href="javascript:show('OodleLZDecoder_MemorySizeNeeded.html')" class="blue">OodleLZDecoder_MemorySizeNeeded</a></span>(compressor);
OO_U8 * decoderMem = (OO_U8 *) <span class=prototype_type><a href="javascript:show('OodleXMalloc.html')" class="blue">OodleXMalloc</a></span>(memSize);
<span style="color:#008000;">//---------------------------------------------------</span>
<span style="color:#008000;">// compress buffer -> buffer :</span>
<span style="color:#008000;">// limit dictionarySize so matches can't go out of the decode window :</span>
<span class=prototype_type><a href="javascript:show('OodleLZ_CompressOptions.html')" class="blue">OodleLZ_CompressOptions</a></span> options = * <span class=prototype_type><a href="javascript:show('OodleLZ_CompressOptions_GetDefault.html')" class="blue">OodleLZ_CompressOptions_GetDefault</a></span>(compressor,level);
options.dictionarySize = dictionary_size;
OO_SINTa comp_len = <span class=prototype_type><a href="javascript:show('OodleLZ_Compress.html')" class="blue">OodleLZ_Compress</a></span>(compressor,in_buffer,in_size,comp_buf,level,&amp;options);
OodleXLog_Printf_v1("LZ compress %d -> %d\n",(int)in_size,(int)comp_len);
<span style="color:#008000;">//---------------------------------------------------</span>
<span style="color:#008000;">// decompress with incremental streaming decoder :</span>
<span style="color:#008000;">// we're now going to pretend that "comp_buf" is in a file</span>
<span style="color:#008000;">// and we can't read the whole thing</span>
<span style="color:#008000;">// IO buffer must be at least enough for 1 whole quantum (256k + a little bit)</span>
<span style="color:#008000;">// Kraken uses "large block quantum" (256k) not the old 16k quantum</span>
const OO_SINTa io_buffer_size = (256+63)*1024;
OO_U8 io_buffer[io_buffer_size];
OO_SINTa io_buffer_avail = 0; <span style="color:#008000;">// starts empty</span>
OO_SINTa comp_file_io_pos = 0; <span style="color:#008000;">// simulated compressed file next read pos</span>
{
<span class=prototype_type><a href="javascript:show('OodleLZDecoder.html')" class="blue">OodleLZDecoder</a></span> * decoder = <span class=prototype_type><a href="javascript:show('OodleLZDecoder_Create.html')" class="blue">OodleLZDecoder_Create</a></span>(compressor,in_size,decoderMem,memSize);
OO_SINTa io_buffer_pos = 0;
OO_U8 * dec_out_ptr = (OO_U8 *) dec_out_buf;
OO_U8 * dec_out_end = (OO_U8 *) dec_out_buf + in_size;;
OO_SINTa dec_window_pos = 0;
while(dec_out_ptr&lt;dec_out_end)
{
<span style="color:#008000;">// see if we can do a "read" into the io_buffer :</span>
if ( comp_file_io_pos &lt; comp_len )
{
OO_SINTa min_io_size = 16*1024;
if ( (io_buffer_size - io_buffer_avail) > min_io_size )
{
OO_SINTa io_size = OOEX_MIN( (io_buffer_size - io_buffer_avail), (comp_len - comp_file_io_pos) );
<span style="color:#008000;">//OodleXLog_Printf_v1("IO read : %d at %d\n",(int)io_size,(int)comp_file_io_pos);</span>
<span style="color:#008000;">// IO read :</span>
memcpy(io_buffer+io_buffer_avail,comp_buf+comp_file_io_pos,io_size);
comp_file_io_pos += io_size;
io_buffer_avail += io_size;
}
}
<span style="color:#008000;">// when dec_window_pos reaches end of window :</span>
if ( (dec_window_pos + <span class=prototype_type><a href="javascript:show('OODLELZ_BLOCK_LEN.html')" class="blue">OODLELZ_BLOCK_LEN</a></span>) > decode_window_size )
{
OodleXLog_Printf_v1("slide!\n");
<span style="color:#008000;">// slide down the dictionary for the next block :</span>
memmove(dec_window,dec_window + dec_window_pos - dictionary_size,dictionary_size);
dec_window_pos = dictionary_size;
}
OodleXLog_Printf_v1("decode : at %d in window, %d in output\n",(int)dec_window_pos,(int)(dec_out_ptr - dec_out_buf));
<span style="color:#008000;">// ask the Decoder for a partial decode :</span>
<span class=prototype_type><a href="javascript:show('OodleLZ_DecodeSome_Out.html')" class="blue">OodleLZ_DecodeSome_Out</a></span> out;
<span style="color:#008000;">// no need to truncate dec_avail at the end, the "in_size" passed to LZDecoder_Create does this</span>
<span style="color:#008000;">//OO_SINTa dec_avail = OOEX_MIN(dec_out_remain,decode_window_size - dec_window_pos); </span>
OO_SINTa dec_avail = decode_window_size - dec_window_pos;
OO_BOOL ok = <span class=prototype_type><a href="javascript:show('OodleLZDecoder_DecodeSome.html')" class="blue">OodleLZDecoder_DecodeSome</a></span>(decoder,&amp;out,
dec_window,dec_window_pos,
in_size, <span style="color:#008000;">//decode_window_size, // !!</span>
dec_avail,
io_buffer+io_buffer_pos,io_buffer_avail-io_buffer_pos,
OodleLZ_FuzzSafe_Yes,OodleLZ_CheckCRC_No);
<span style="color:#008000;">// !! = this is a bit funny; we lie about the window size here</span>
<span style="color:#008000;">// if Kraken had a true sliding window decoder (like eg. LZH or LZB16 does)</span>
<span style="color:#008000;">// then you would pass decode_window_size here and let it do the wrapping</span>
<span style="color:#008000;">// but Kraken does not, so we pretend that we are decoding the whole file</span>
<span style="color:#008000;">// so that OodleLZDecoder_DecodeSome doesn't try to use its sliding window path</span>
<span style="color:#008000;">// (which would fail)</span>
<span style="color:#008000;">// the "dec_avail" value prevents DecodeSome from going out of the window</span>
<span style="color:#008000;">// and we simulate the sliding using the memcpy</span>
<span style="color:#008000;">// real usage should check error return conditions</span>
OOEX_ASSERT_ALWAYS( ok );
OO_S32 decoded = out.decodedCount;
OO_S32 comp_used = out.compBufUsed;
io_buffer_pos += comp_used;
OOEX_ASSERT( out.curQuantumCompLen &lt; io_buffer_size );
<span style="color:#008000;">//OodleXLog_Printf_v1("decoded : %d using %d\n",decoded,comp_used);</span>
if ( decoded == 0 )
{
<span style="color:#008000;">// couldn't decode anything</span>
<span style="color:#008000;">// this should only happen because we're near the end of the io buffer</span>
<span style="color:#008000;">// and don't have enough compressed data to do antyhing</span>
OOEX_ASSERT( io_buffer_pos > 0 );
<span style="color:#008000;">// slide down the io buffer so it can refill</span>
OO_SINTa io_buffer_keep = io_buffer_avail - io_buffer_pos;
memmove(io_buffer,io_buffer+io_buffer_pos,io_buffer_keep);
io_buffer_pos = 0;
io_buffer_avail = io_buffer_keep;
}
else
{
<span style="color:#008000;">// copy out the decoded data :</span>
OO_U8 * dec_window_ptr = dec_window + dec_window_pos;
<span style="color:#008000;">// dec_out_ptr is the final output memory ; eg. perhaps uncached graphics memory</span>
<span style="color:#008000;">// "decoded" is always OODLELZ_BLOCK_LEN unless we hit EOF</span>
memcpy(dec_out_ptr,dec_window_ptr,decoded);
<span style="color:#008000;">// advance the decoder :</span>
dec_out_ptr += decoded;
dec_window_pos += decoded;
}
}
OOEX_ASSERT( comp_file_io_pos == comp_len );
OOEX_ASSERT( dec_out_ptr == dec_out_end );
<span class=prototype_type><a href="javascript:show('OodleLZDecoder_Destroy.html')" class="blue">OodleLZDecoder_Destroy</a></span>(decoder);
}
<span style="color:#008000;">// check it's okay :</span>
OOEX_ASSERT_ALWAYS( memcmp(in_buffer,dec_out_buf,in_size) == 0 );
<span style="color:#008000;">//-------------------------------------</span>
<span style="color:#008000;">// free buffers :</span>
<span class=prototype_type><a href="javascript:show('OodleXFree.html')" class="blue">OodleXFree</a></span>(decoderMem);
<span class=prototype_type><a href="javascript:show('OodleXFree.html')" class="blue">OodleXFree</a></span>(comp_buf);
<span class=prototype_type><a href="javascript:show('OodleXFree.html')" class="blue">OodleXFree</a></span>(dec_out_buf);
<span class=prototype_type><a href="javascript:show('OodleXFree.html')" class="blue">OodleXFree</a></span>(dec_window);
}
</pre></div>lz_test_12 :
</p>
<p>example of directly calling the simple buffer->buffer compression API's using an "in place" buffer
</p>
<p>OodleLZ_Compress
OodleLZ_Decompress
OodleLZ_GetInPlaceDecodeBufferSize<div class=prototype> <pre>
void lz_test_12()
{
OodleXLog_Printf_v0("lz_test_12\n");
<span style="color:#008000;">// allocate compressed buffer &amp; decoded buffer of the correct sizes :</span>
OO_SINTa comp_buf_size = <span class=prototype_type><a href="javascript:show('OodleLZ_GetCompressedBufferSizeNeeded.html')" class="blue">OodleLZ_GetCompressedBufferSizeNeeded</a></span>(OodleLZ_Compressor_Kraken,in_size);
void * comp_buf = <span class=prototype_type><a href="javascript:show('OodleXMalloc.html')" class="blue">OodleXMalloc</a></span>( comp_buf_size );
OOEX_ASSERT( comp_buf != NULL );
<span style="color:#008000;">//---------------------------------------------------</span>
<span style="color:#008000;">// compress buffer -> buffer :</span>
OO_SINTa comp_len;
{
comp_len = <span class=prototype_type><a href="javascript:show('OodleLZ_Compress.html')" class="blue">OodleLZ_Compress</a></span>(OodleLZ_Compressor_Kraken,in_buffer,in_size,comp_buf,OodleLZ_CompressionLevel_Fast);
}
<span style="color:#008000;">//---------------------------------------------------</span>
OO_SINTa inplace_size = <span class=prototype_type><a href="javascript:show('OodleLZ_GetInPlaceDecodeBufferSize.html')" class="blue">OodleLZ_GetInPlaceDecodeBufferSize</a></span>(OodleLZ_Compressor_Kraken,comp_len,in_size);
OodleXLog_Printf_v1("Kraken compress %d -> %d ; inplace_size = %d , padding = %d\n",
(int)in_size,(int)comp_len,
(int)inplace_size,(int)(inplace_size - in_size));
void * inplace_buf = <span class=prototype_type><a href="javascript:show('OodleXMalloc.html')" class="blue">OodleXMalloc</a></span>( inplace_size );
OOEX_ASSERT( inplace_buf != NULL );
<span style="color:#008000;">// in game use, you load the compressed data into the *end* of the inplace buffer </span>
<span style="color:#008000;">// simulate the loading by doing a memcpy :</span>
char * inplace_comp_ptr = (char *)inplace_buf;
inplace_comp_ptr += inplace_size - comp_len;
memcpy(inplace_comp_ptr,comp_buf,comp_len);
<span style="color:#008000;">//---------------------------------------------------</span>
<span style="color:#008000;">// decompress :</span>
<span style="color:#008000;">// note the source (inplace_comp_ptr) and dest (inplace_buf) overlap</span>
<span style="color:#008000;">// - the compressed data at inplace_comp_ptr is destroyed by this call</span>
OO_SINTa dec_len = <span class=prototype_type><a href="javascript:show('OodleLZ_Decompress.html')" class="blue">OodleLZ_Decompress</a></span>(inplace_comp_ptr,comp_len,inplace_buf,in_size,OodleLZ_FuzzSafe_Yes);
OOEX_ASSERT_ALWAYS( dec_len == in_size );
OOEX_ASSERT_ALWAYS( memcmp(in_buffer,inplace_buf,in_size) == 0 );
<span style="color:#008000;">//---------------------------------------------------</span>
<span style="color:#008000;">// free buffers :</span>
<span class=prototype_type><a href="javascript:show('OodleXFree.html')" class="blue">OodleXFree</a></span>(comp_buf);
<span class=prototype_type><a href="javascript:show('OodleXFree.html')" class="blue">OodleXFree</a></span>(inplace_buf);
}
<span style="color:#008000;">//=================================================</span>
</pre></div>lz_test_13 :
</p>
<p>example of dictionary-relative compression
</p>
<p>This is a technique in which you train a dictionary offline based on typical data, then for
each packet you wish to compress, the dictionary can be used a reference to improve compression ratio.
</p>
<p>Oodle can do dictionary relative compression by putting the packet buffer to compress
in a contiguous buffer immediately following the dictionary.
</p>
<p>Then simply use memcpy to move the active packet to the desired memory location.
</p>
<p>NOTE that the work space for {dictionary + packet} must be allocated per thread, or mutex controlled
(it cannot be shared by simultaneously decoding threads)
</p>
<p>For small packets (under 4 KB or so) such as network packets, consider Oodle Network instead.
</p>
<p>For large buffers (over 128 KB or so), dictionary-relative compression doesn't help much and isn't recommended.
</p>
<p>dictionary-relative compression is most typically useful on data in the 4 - 128 KB range.<div class=prototype> <pre>
void lz_test_13()
{
OodleXLog_Printf_v0("lz_test_13\n");
<span style="color:#008000;">//---------------------------------------------------</span>
<span style="color:#008000;">// pretend that "in_buffer" consists of a trained dictionary + a packet to compress</span>
void * dictionary = in_buffer;
OO_SINTa dictionary_size = (in_size * 2) /3;
<span style="color:#008000;">// dictionary_size must be a multiple of OODLELZ_BLOCK_LEN :</span>
dictionary_size &amp;= ~(<span class=prototype_type><a href="javascript:show('OODLELZ_BLOCK_LEN.html')" class="blue">OODLELZ_BLOCK_LEN</a></span>-1);
void * packet1 = (char *)dictionary + dictionary_size;
OO_SINTa packet1_size = in_size / 4;
void * packet2 = (char *)packet1 + packet1_size;
OO_SINTa packet2_size = in_size - packet1_size - dictionary_size;
OodleXLog_Printf_v1("dictionary_size : %d ; packets : %d + %d\n",dictionary_size,packet1_size,packet2_size);
<span style="color:#008000;">//---------------------------------------------------</span>
<span style="color:#008000;">// allocate compressed buffer &amp; decoded buffer of the correct sizes :</span>
OO_SINTa max_packet_size = OOEX_MAX(packet1_size,packet2_size);
<span style="color:#008000;">// room for dictionary + a packet following :</span>
void * dictionary_and_packet_buf = <span class=prototype_type><a href="javascript:show('OodleXMalloc.html')" class="blue">OodleXMalloc</a></span>( dictionary_size + max_packet_size );
OOEX_ASSERT( dictionary_and_packet_buf != NULL );
<span style="color:#008000;">// comp buf just for a packet :</span>
OO_SINTa comp_buf_size = <span class=prototype_type><a href="javascript:show('OodleLZ_GetCompressedBufferSizeNeeded.html')" class="blue">OodleLZ_GetCompressedBufferSizeNeeded</a></span>(OodleLZ_Compressor_Kraken, max_packet_size );
void * comp_buf = <span class=prototype_type><a href="javascript:show('OodleXMalloc.html')" class="blue">OodleXMalloc</a></span>( comp_buf_size );
OOEX_ASSERT( comp_buf != NULL );
<span style="color:#008000;">// room for dictionary + a packet following :</span>
void * dec_buf = <span class=prototype_type><a href="javascript:show('OodleXMalloc.html')" class="blue">OodleXMalloc</a></span>( dictionary_size + max_packet_size );
OOEX_ASSERT( dec_buf != NULL );
<span style="color:#008000;">//---------------------------------------------------</span>
void * packets[2] = { packet1, packet2 };
OO_SINTa packet_sizes[2] = { packet1_size, packet2_size };
<span style="color:#008000;">// setup work that's done in advance :</span>
<span style="color:#008000;">// put dictionary at head of dictionary_and_packet_buf (for encoder) :</span>
memcpy(dictionary_and_packet_buf,dictionary,dictionary_size);
void * after_dictionary_ptr = (char *)dictionary_and_packet_buf + dictionary_size;
<span style="color:#008000;">// preload dictionary at head of dec_buf (for decoder) :</span>
memcpy(dec_buf,dictionary,dictionary_size);
for(int packet_i=0;packet_i&lt;2;packet_i++)
{
<span style="color:#008000;">// work that's done per packet :</span>
void * packet_ptr = packets[packet_i];
OO_SINTa packet_size = packet_sizes[packet_i];
<span style="color:#008000;">// compress packet to comp_buf</span>
<span style="color:#008000;">// preload with dictionary</span>
<span style="color:#008000;">// copy packet to be immediately following dictionary :</span>
memcpy(after_dictionary_ptr,packet_ptr,packet_size);
OO_SINTa comp_len = <span class=prototype_type><a href="javascript:show('OodleLZ_Compress.html')" class="blue">OodleLZ_Compress</a></span>(OodleLZ_Compressor_Kraken,after_dictionary_ptr,packet_size,comp_buf,OodleLZ_CompressionLevel_Fast,NULL,dictionary_and_packet_buf);
OodleXLog_Printf_v1("Kraken compress %d -> %d\n",(int)packet_size,(int)comp_len);
<span style="color:#008000;">// decompress :</span>
<span style="color:#008000;">// decode into buffer containing dictionary, immediately following dictionary :</span>
void * dec_packet_ptr = (char *)dec_buf + dictionary_size;
OO_SINTa dec_len = <span class=prototype_type><a href="javascript:show('OodleLZ_Decompress.html')" class="blue">OodleLZ_Decompress</a></span>(comp_buf,comp_len,dec_packet_ptr,packet_size,OodleLZ_FuzzSafe_Yes,OodleLZ_CheckCRC_No,OodleLZ_Verbosity_None,dec_buf);
OOEX_ASSERT_ALWAYS( dec_len == packet_size + dictionary_size );
OOEX_ASSERT_ALWAYS( memcmp(packet_ptr,dec_packet_ptr,packet_size) == 0 );
<span style="color:#008000;">// if you need the decoded packet to be in another memory location, memcpy it there now</span>
}
<span style="color:#008000;">//---------------------------------------------------</span>
<span style="color:#008000;">// free buffers :</span>
<span class=prototype_type><a href="javascript:show('OodleXFree.html')" class="blue">OodleXFree</a></span>(dictionary_and_packet_buf);
<span class=prototype_type><a href="javascript:show('OodleXFree.html')" class="blue">OodleXFree</a></span>(comp_buf);
<span class=prototype_type><a href="javascript:show('OodleXFree.html')" class="blue">OodleXFree</a></span>(dec_buf);
}
</pre></div><br>&nbsp;<br> <table class=bar> <tr>
<td width=33% align=left><span class='arrowleft'></span><a href="javascript:show('Oodle_About_Examples.html')" class="paragraph">How to build and use the Oodle examples</a></td><td width=33% align=center><span class='arrowup'></span><a href="javascript:show('examples.html')" class="paragraph">Examples</a></td><td width=33% align=right><span class='arrowright'></span><a href="javascript:show('example_lz_chart.html')" class="paragraph">example_lz_chart : Example that makes a chart of OodleLZ options</a></td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="Oodle_About_WASM.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>About Oodle on WASM</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "Oodle_About_WASM.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="Oodle_About_WASM.html_backmenu">
<table class=dropmenu>
<tr><td><span class='arrowleft'></span>&nbsp;<a href="javascript:show('Oodle_About_Android.html')" class="paragraph">About Oodle on Android</a></td></tr><tr><td><span class='arrowup'></span>&nbsp;<a href="javascript:show('Oodle_About_Platforms.html')" class="paragraph">About Oodle on Platforms</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<P>
Oodle on WASM is currently provided as only the Oodle Core lib (no OodleX).
</p>
<p>This includes the synchronous LZ compressors. For WASM, the library tries to have zero
runtime dependencies. Among other things, that means that unlike other Oodle platforms,
it does not have a default memory allocator or logging implementation.
</p>
<p>The Oodle compressors and decompressors do not require dynamic allocations as long as
sufficient "scratch"/"decoder" memory is passed in; refer to the documentation for
<a href="javascript:show('OodleLZ_Compress.html')" class="paragraph">OodleLZ_Compress</a> and <a href="javascript:show('OodleLZ_Decompress.html')" class="paragraph">OodleLZ_Decompress</a> for details. You need to either do this or
install a memory allocator via <a href="javascript:show('OodleCore_Plugins_SetAllocators.html')" class="paragraph">OodleCore_Plugins_SetAllocators</a>. If you do neither,
Oodle compression/decompression requests will fail.
</p>
<p>Likewise, if you want to see Oodle diagnostic log messages, install a printf plugin via
<a href="javascript:show('OodleCore_Plugins_SetPrintf.html')" class="paragraph">OodleCore_Plugins_SetPrintf</a>.
</p>
<p>Finally, Oodle on WASM does not include the Optimal level encoders. When <a href="javascript:show('OodleLZ_CompressionLevel.html','OodleLZ_CompressionLevel.html_OodleLZ_CompressionLevel_Optimal1')" class="paragraph">OodleLZ_CompressionLevel_Optimal1</a> or
higher is requested, the encoder falls back to a variant of <a href="javascript:show('OodleLZ_CompressionLevel.html','OodleLZ_CompressionLevel.html_OodleLZ_CompressionLevel_Normal')" class="paragraph">OodleLZ_CompressionLevel_Normal</a> instead.<br>&nbsp;<br> <table class=bar> <tr>
<td width=33% align=left><span class='arrowleft'></span><a href="javascript:show('Oodle_About_Android.html')" class="paragraph">About Oodle on Android</a></td><td width=33% align=center><span class='arrowup'></span><a href="javascript:show('Oodle_About_Platforms.html')" class="paragraph">About Oodle on Platforms</a></td><td width=33% align=right><span class='arrowright'></span><a href="javascript:show('Oodle_About_Job_Threading_Plugins.html')" class="paragraph">About Oodle Job Threading Plugins</a></td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="OodleLZ_DecodeSome_Out.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>OodleLZ_DecodeSome_Out</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "OodleLZ_DecodeSome_Out.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="OodleLZ_DecodeSome_Out.html_backmenu">
<table class=dropmenu>
<tr><td><span class='arrowleft'></span>&nbsp;<a href="javascript:show('OodleLZ_CompressOptions.html')" class="paragraph">OodleLZ_CompressOptions</a></td></tr><tr><td><span class='arrowright'></span>&nbsp;<a href="javascript:show('OodleLZDecoder.html')" class="paragraph">OodleLZDecoder</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<div class=prototype><div class=prototype_header>// Structure definition:</div><pre><span class=prototype_type>struct</span> <a href="javascript:show('OodleLZ_DecodeSome_Out.html')">OodleLZ_DecodeSome_Out</a>
{
&nbsp;&nbsp;&nbsp;&nbsp;OO_S32 decodedCount;
&nbsp;&nbsp;&nbsp;&nbsp;OO_S32 compBufUsed;
&nbsp;&nbsp;&nbsp;&nbsp;OO_S32 curQuantumRawLen;
&nbsp;&nbsp;&nbsp;&nbsp;OO_S32 curQuantumCompLen;
};
</pre></div><div class=discussion_heading>Discussion</div> Output value of <a href="javascript:show('OodleLZDecoder_DecodeSome.html')" class="paragraph">OodleLZDecoder_DecodeSome</a>
<div class=discussion_heading>Members</div> <table> <tr> <td style='vertical-align: top;' class=paramname><a id="OodleLZ_DecodeSome_Out.html_decodedCount" class=nohover>decodedCount</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> number of uncompressed bytes decoded</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleLZ_DecodeSome_Out.html_compBufUsed" class=nohover>compBufUsed</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> number of compressed bytes consumed</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleLZ_DecodeSome_Out.html_curQuantumRawLen" class=nohover>curQuantumRawLen</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> tells you the current quantum size. you must have at least this much room available in the output buffer to be able to decode anything.</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleLZ_DecodeSome_Out.html_curQuantumCompLen" class=nohover>curQuantumCompLen</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> if you didn't pass in enough data, nothing will decode (decodedCount will be 0), and this will tell you how much is needed</td></tr></table><br>&nbsp;<br> <table class=bar> <tr>
<td width=33% align=left><span class='arrowleft'></span><a href="javascript:show('OodleLZ_CompressOptions.html')" class="paragraph">OodleLZ_CompressOptions</a></td><td width=33% align=center><span class='arrowup'></span><a href="javascript:show('OodleAPI_LZ_Compressors.html')" class="paragraph">OodleAPI_LZ_Compressors</a></td><td width=33% align=right><span class='arrowright'></span><a href="javascript:show('OodleLZDecoder.html')" class="paragraph">OodleLZDecoder</a></td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="OodleXIOQ_GetErrorEnum.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>OodleXIOQ_GetErrorEnum</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "OodleXIOQ_GetErrorEnum.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="OodleXIOQ_GetErrorEnum.html_backmenu">
<table class=dropmenu>
<tr><td><span class='arrowleft'></span>&nbsp;<a href="javascript:show('OodleXIOQ_GetErrorDetails.html')" class="paragraph">OodleXIOQ_GetErrorDetails</a></td></tr><tr><td><span class='arrowright'></span>&nbsp;<a href="javascript:show('OodleXIOQ_LogError.html')" class="paragraph">OodleXIOQ_LogError</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<div class=prototype><div class=prototype_header>// Function prototype:</div><pre><span class=prototype_type><a href="javascript:show('OodleXError.html')" class="blue">OodleXError</a></span> <span class=prototype_type><a href="javascript:show('OodleXIOQ_GetErrorEnum.html')" class="blue">OodleXIOQ_GetErrorEnum</a></span>( OO_U32 code,
<span class=prototype_type><a href="javascript:show('OodleXIOQFile.html')" class="blue">OodleXIOQFile</a></span> file );</pre></div><div class=discussion_heading>Discussion</div>Convert an OS error code into a text message<div class=discussion_heading>Parameters</div> <table> <tr> <td style='vertical-align: top;' class=paramname><a id="OodleXIOQ_GetErrorEnum.html_code" class=nohover>code</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> the error code, eg. from <a href="javascript:show('OodleXIOQ_GetStatus.html')" class="paragraph">OodleXIOQ_GetStatus</a>
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXIOQ_GetErrorEnum.html_file" class=nohover>file</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> the file that the error occurred on (or 0 for unknown)
</td></tr></table><div class=discussion_heading>Return Value</div> <table> <tr> <td style='vertical-align: top;' class=paramname><a id="OodleXIOQ_GetErrorEnum.html_return" class=nohover>return</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> an OS-neutral <a href="javascript:show('OodleXError.html')" class="paragraph">OodleXError</a>
</td></tr></table><div class=discussion_heading>Discussion</div></p>
<p> Converts an OS-specific error code into a platform agnostic error enum. Useful for
recognizing common error cases like OodleXError_FileNotFound. Any unusual or platform-specific
codes will return OodleXError_Unknown.
<br>&nbsp;<br> <table class=bar> <tr>
<td width=33% align=left><span class='arrowleft'></span><a href="javascript:show('OodleXIOQ_GetErrorDetails.html')" class="paragraph">OodleXIOQ_GetErrorDetails</a></td><td width=33% align=center><span class='arrowup'></span><a href="javascript:show('OodleXAPI_IOQ.html')" class="paragraph">OodleX low level async io</a></td><td width=33% align=right><span class='arrowright'></span><a href="javascript:show('OodleXIOQ_LogError.html')" class="paragraph">OodleXIOQ_LogError</a></td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="Oodle_FAQ_FindingIOProblems.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>FAQ: My Files aren't loading right and I can't track it down</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "Oodle_FAQ_FindingIOProblems.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="Oodle_FAQ_FindingIOProblems.html_backmenu">
<table class=dropmenu>
<tr><td><span class='arrowleft'></span>&nbsp;<a href="javascript:show('Oodle_FAQ_S64_And_SINTa.html')" class="paragraph">FAQ: What is SINTa? How do I load files bigger than 2 GB?</a></td></tr><tr><td><span class='arrowup'></span>&nbsp;<a href="javascript:show('Oodle_FAQ.html')" class="paragraph">Frequently Asked Questions</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<P>
It can be hard to diagnose IO problems when using async IO, because the actual error is removed from
the call that caused the error.
</p>
<p>Here are some steps that may help :
</p>
<p>1. Make your own <a href="javascript:show('OodleXInitOptions.html')" class="paragraph">OodleXInitOptions</a> struct to pass to <a href="javascript:show('OodleX_Init.html')" class="paragraph">OodleX_Init</a> so we can
change some of the flags. Use <a href="javascript:show('OodleX_Init_GetDefaults.html')" class="paragraph">OodleX_Init_GetDefaults</a> to fill it out at first.
The members <a href="javascript:show('OodleXInitOptions.html','OodleXInitOptions.html_m_OodleInit_Log')" class="paragraph">OodleXInitOptions:m_OodleInit_Log</a> and <a href="javascript:show('OodleXInitOptions.html','OodleXInitOptions.html_m_OodleInit_ThreadLog')" class="paragraph">OodleXInitOptions:m_OodleInit_ThreadLog</a>
should be on by default, don't turn them off.
</p>
<p>2. Set <a href="javascript:show('OodleXInitOptions.html','OodleXInitOptions.html_m_OodleInit_IOQ_Log')" class="paragraph">OodleXInitOptions:m_OodleInit_IOQ_Log</a> to true ; this will enable all IO
to be logged, and you may see what's causing the error.
</p>
<p>3. Set <a href="javascript:show('OodleXInitOptions.html','OodleXInitOptions.html_m_OodleInit_IOQ_Threaded')" class="paragraph">OodleXInitOptions:m_OodleInit_IOQ_Threaded</a> to false ; this will disable
IO threading so the error will occur at the call site.
</p>
<p>4. Set <a href="javascript:show('OodleXInitOptions.html','OodleXInitOptions.html_m_OodleInit_IOQ_BreakOnError')" class="paragraph">OodleXInitOptions:m_OodleInit_IOQ_BreakOnError</a> to true; this will cause
Oodle IO to do a debug break when it encounters an error. If using this, make sure
you are linking with the debug build of Oodle, and using the debug dll on Windows
(in the "redistdebug" directory). You should now be able to see the stack of
the call causing the error, and your log should contain information about the
failure.
</p>
<p>5. If your app is crashing because of the error and you can't debug, you
can set <a href="javascript:show('OodleXInitOptions.html','OodleXInitOptions.html_m_OodleInit_Log_FlushEachWrite')" class="paragraph">OodleXInitOptions:m_OodleInit_Log_FlushEachWrite</a> ; hopefully this will
get the log to flush out some information about the error before the crash.
The log file is written to c:\oodlelogs on Windows unless you have set m_OodleInit_Log_FileName.
</p>
<p>(see <a href="javascript:show('Oodle_About_Platforms.html')" class="paragraph">About Oodle on Platforms</a> for per-platform log info, or set the log name yourself in <a href="javascript:show('OodleXInitOptions.html')" class="paragraph">OodleXInitOptions</a>)<br>&nbsp;<br> <table class=bar> <tr>
<td width=33% align=left><span class='arrowleft'></span><a href="javascript:show('Oodle_FAQ_S64_And_SINTa.html')" class="paragraph">FAQ: What is SINTa? How do I load files bigger than 2 GB?</a></td><td width=33% align=center><span class='arrowup'></span><a href="javascript:show('Oodle_FAQ.html')" class="paragraph">Frequently Asked Questions</a></td><td width=33%>&nbsp;</td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="OodleNet_Plugins_SetAllocators.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>OodleNet_Plugins_SetAllocators</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "OodleNet_Plugins_SetAllocators.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="OodleNet_Plugins_SetAllocators.html_backmenu">
<table class=dropmenu>
<tr><td><span class='arrowright'></span>&nbsp;<a href="javascript:show('OodleNet_Plugins_SetJobSystem.html')" class="paragraph">OodleNet_Plugins_SetJobSystem</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<div class=prototype><div class=prototype_header>// Function prototype:</div><pre>void <span class=prototype_type><a href="javascript:show('OodleNet_Plugins_SetAllocators.html')" class="blue">OodleNet_Plugins_SetAllocators</a></span>( <span class=prototype_type><a href="javascript:show('t_fp_OodleNet_Plugin_MallocAligned.html')" class="blue">t_fp_OodleNet_Plugin_MallocAligned</a></span> * fp_OodleMallocAligned,
<span class=prototype_type><a href="javascript:show('t_fp_OodleNet_Plugin_Free.html')" class="blue">t_fp_OodleNet_Plugin_Free</a></span> * fp_OodleFree );</pre></div><div class=discussion_heading>Discussion</div>Set the function pointers for allocations by Oodle.<div class=discussion_heading>Discussion</div>If these are not set, the default implementation on most platforms uses the C stdlib.
On Microsoft platforms the default implementation uses HeapAlloc.
</p>
<p> These must not be changed once they are set! Set them once then don't change them.
</p>
<p> </p>
<p></p>
<p> If you want to ensure that Oodle is not doing any allocations, you can call OodleNet_Plugins_SetAllocators(NULL,NULL);
If you do that, then any time Oodle needs to allocate memory internally, it will stop the process.
It is STRONGLY not recommended that you ship that way. You can verify that Oodle is not allocating, but then leave some
fallback allocator installed when you actually ship just in case.
</p>
<p> Also note that on many consoles the standard allocation practices may not
leave much heap memory for the C stdlib malloc. In this case Oodle may fail to allocate.
</p>
<p><br>&nbsp;<br> <table class=bar> <tr>
<td width=33% align=left><span class='arrowleft'></span><a href="javascript:show('OodleAPI_OodleNet_Plugins.html')" class="paragraph">Network plugins</a></td><td width=33% align=center><span class='arrowup'></span><a href="javascript:show('OodleAPI_OodleNet_Plugins.html')" class="paragraph">Network plugins</a></td><td width=33% align=right><span class='arrowright'></span><a href="javascript:show('OodleNet_Plugins_SetJobSystem.html')" class="paragraph">OodleNet_Plugins_SetJobSystem</a></td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="OodleNet_Plugins_SetJobSystemAndCount.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>OodleNet_Plugins_SetJobSystemAndCount</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "OodleNet_Plugins_SetJobSystemAndCount.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="OodleNet_Plugins_SetJobSystemAndCount.html_backmenu">
<table class=dropmenu>
<tr><td><span class='arrowleft'></span>&nbsp;<a href="javascript:show('OodleNet_Plugins_SetJobSystem.html')" class="paragraph">OodleNet_Plugins_SetJobSystem</a></td></tr><tr><td><span class='arrowright'></span>&nbsp;<a href="javascript:show('OodleNet_Plugins_SetPrintf.html')" class="paragraph">OodleNet_Plugins_SetPrintf</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<div class=prototype><div class=prototype_header>// Function prototype:</div><pre>void <span class=prototype_type><a href="javascript:show('OodleNet_Plugins_SetJobSystemAndCount.html')" class="blue">OodleNet_Plugins_SetJobSystemAndCount</a></span>( <span class=prototype_type><a href="javascript:show('t_fp_OodleNet_Plugin_RunJob.html')" class="blue">t_fp_OodleNet_Plugin_RunJob</a></span> * fp_RunJob,
<span class=prototype_type><a href="javascript:show('t_fp_OodleNet_Plugin_WaitJob.html')" class="blue">t_fp_OodleNet_Plugin_WaitJob</a></span> * fp_WaitJob,
int target_parallelism );</pre></div><div class=discussion_heading>Discussion</div>Set the function pointers for async job system used by Oodle.<div class=discussion_heading>Parameters</div> <table> <tr> <td style='vertical-align: top;' class=paramname><a id="OodleNet_Plugins_SetJobSystemAndCount.html_fp_RunJob" class=nohover>fp_RunJob</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> pointer to RunJob function
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleNet_Plugins_SetJobSystemAndCount.html_fp_WaitJob" class=nohover>fp_WaitJob</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> pointer to WaitJob function
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleNet_Plugins_SetJobSystemAndCount.html_target_parallelism" class=nohover>target_parallelism</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> goal of number of jobs to run simultaneously
</td></tr></table><div class=discussion_heading>Discussion</div></p>
<p> If these are not set, the default implementation runs jobs synchronously on the calling thread.
</p>
<p> These must not be changed once they are set! Set them once then don't change them.
</p>
<p> <i>target_parallelism</i> allows you to tell Oodle how many Jobs it should try to keep in flight at once.
Depending on the operation it may not be able to split work into this many jobs (so fewer will be used),
but it will not exceed this count.
</p>
<p> For Oodle Data LZ work, typically <i>target_parallelism</i> is usually best at the number of hardware cores
not including hyper threads).
</p>
<p> For Oodle Texture BCN encoding work, <i>target_parallelism</i> is usually best as the full number of hyper cores.
</p>
<p> In some cases you may wish to reduce <i>target_parallelism</i> by 1 or 2 cores to leave some of the CPU free for
other work.
</p>
<p> For example on a CPU with 16 cores and 32 hardware threads, for LZ work you might set <i>target_parallelism</i> to 15
when calling OodleCorePlugins. For BC7 encoding you might set <i>target_parallelism</i> to 30 when calling OodleTexPlugins.
</p>
<p> NOTE : if you are using Oodle Ext, do NOT call this. OodleX_Init will install a job system for Oodle Core.
Note OodleX only installs automatically to Oodle Core, not Net or Tex. See example_jobify.cpp for manual
plugin.
</p>
<p> Replaces deprecated <a href="javascript:show('OodleNet_Plugins_SetJobSystem.html')" class="paragraph">OodleNet_Plugins_SetJobSystem</a>
</p>
<p> See <a href="javascript:show('Oodle_About_Job_Threading_Plugins.html')" class="paragraph">About Oodle Job Threading Plugins</a>
<br>&nbsp;<br> <table class=bar> <tr>
<td width=33% align=left><span class='arrowleft'></span><a href="javascript:show('OodleNet_Plugins_SetJobSystem.html')" class="paragraph">OodleNet_Plugins_SetJobSystem</a></td><td width=33% align=center><span class='arrowup'></span><a href="javascript:show('OodleAPI_OodleNet_Plugins.html')" class="paragraph">Network plugins</a></td><td width=33% align=right><span class='arrowright'></span><a href="javascript:show('OodleNet_Plugins_SetPrintf.html')" class="paragraph">OodleNet_Plugins_SetPrintf</a></td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="OodleXConfigValues.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>OodleXConfigValues</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "OodleXConfigValues.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="OodleXConfigValues.html_backmenu">
<table class=dropmenu>
<tr><td><span class='arrowleft'></span>&nbsp;<a href="javascript:show('OodleXInitOptions.html')" class="paragraph">OodleXInitOptions</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<div class=prototype><div class=prototype_header>// Structure definition:</div><pre><span class=prototype_type>struct</span> <a href="javascript:show('OodleXConfigValues.html')">OodleXConfigValues</a>
{
&nbsp;&nbsp;&nbsp;&nbsp;OO_S32 m_Oodle_DefaultIOBufferSize;
&nbsp;&nbsp;&nbsp;&nbsp;OO_S32 m_Oodle_DefaultWriteReserveSize;
&nbsp;&nbsp;&nbsp;&nbsp;OO_S32 m_Oodle_MaxSingleIOSize;
&nbsp;&nbsp;&nbsp;&nbsp;OO_S32 m_OodleIOQStream_MaxReadSize;
&nbsp;&nbsp;&nbsp;&nbsp;OO_S32 m_OodleIOQStream_MinReadSize;
&nbsp;&nbsp;&nbsp;&nbsp;OO_S32 m_OodleIOQStream_OffsetAlignment;
&nbsp;&nbsp;&nbsp;&nbsp;OO_S32 m_Oodle_very_long_wait_seconds;
&nbsp;&nbsp;&nbsp;&nbsp;OO_S32 m_deprecated_Desired_Parallel_BranchFactor;
&nbsp;&nbsp;&nbsp;&nbsp;OO_BOOL m_Oodle_OSFileOpen_Default_Read_Buffered;
&nbsp;&nbsp;&nbsp;&nbsp;OO_BOOL m_Oodle_OSFileOpen_Default_Write_Buffered;
&nbsp;&nbsp;&nbsp;&nbsp;OO_BOOL m_Oodle_PathsCaseSensitive;
&nbsp;&nbsp;&nbsp;&nbsp;OO_U32 m_oodle_header_version;
};
</pre></div><div class=discussion_heading>Discussion</div> OodleXConfigValues<div class=discussion_heading>Members</div> <table> <tr> <td style='vertical-align: top;' class=paramname><a id="OodleXConfigValues.html_m_Oodle_DefaultIOBufferSize" class=nohover>m_Oodle_DefaultIOBufferSize</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> the buffer size to use when none is given</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXConfigValues.html_m_Oodle_DefaultWriteReserveSize" class=nohover>m_Oodle_DefaultWriteReserveSize</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> default size to reserve in files opened for write, if none is given</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXConfigValues.html_m_Oodle_MaxSingleIOSize" class=nohover>m_Oodle_MaxSingleIOSize</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> the maximum IO size to submit to the system; larger IO's than this are broken into several pieces; this allows other IO's to interleave, and also prevents heavy loads on kernel resources</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXConfigValues.html_m_OodleIOQStream_MaxReadSize" class=nohover>m_OodleIOQStream_MaxReadSize</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> IOQStream doesn't read larger than this (unless a client is blocking on needing more than these bytes immediately). Smaller MaxReadSize reduces IOQStream service latency, but also reduces max throughput</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXConfigValues.html_m_OodleIOQStream_MinReadSize" class=nohover>m_OodleIOQStream_MinReadSize</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> IOQStream tries not to read less than this in a single IO op (unless a client is blocking or we're at EOF or the loop point). </td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXConfigValues.html_m_OodleIOQStream_OffsetAlignment" class=nohover>m_OodleIOQStream_OffsetAlignment</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> IOQStream tries to align all its reads this granularity; some platforms are much faster if the position of IO ops are aligned to large sectors (eg. on the PS3 DVD)</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXConfigValues.html_m_Oodle_very_long_wait_seconds" class=nohover>m_Oodle_very_long_wait_seconds</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> seconds to consider "very long" and warn about possible deadlock</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXConfigValues.html_m_deprecated_Desired_Parallel_BranchFactor" class=nohover>m_deprecated_Desired_Parallel_BranchFactor</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> number of buffer splits for parallel compress</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXConfigValues.html_m_Oodle_OSFileOpen_Default_Read_Buffered" class=nohover>m_Oodle_OSFileOpen_Default_Read_Buffered</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> should files opened with <a href="javascript:show('OodleXFileOpenFlags.html','OodleXFileOpenFlags.html_OodleXFileOpenFlags_Default')" class="paragraph">OodleXFileOpenFlags_Default</a> for Read be buffered or not?</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXConfigValues.html_m_Oodle_OSFileOpen_Default_Write_Buffered" class=nohover>m_Oodle_OSFileOpen_Default_Write_Buffered</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> should files opened with <a href="javascript:show('OodleXFileOpenFlags.html','OodleXFileOpenFlags.html_OodleXFileOpenFlags_Default')" class="paragraph">OodleXFileOpenFlags_Default</a> for Write be buffered or not?</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXConfigValues.html_m_Oodle_PathsCaseSensitive" class=nohover>m_Oodle_PathsCaseSensitive</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> are paths compared case-sensitive or not? Defaults to the per-platform value OODLEX_PLATFORM_CASE_SENSITIVE.</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXConfigValues.html_m_oodle_header_version" class=nohover>m_oodle_header_version</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> = OODLE_HEADER_VERSION</td></tr></table><div class=discussion_heading>Discussion</div> Struct of user-settable low level config values. See <a href="javascript:show('OodleX_SetConfigValues.html')" class="paragraph">OodleX_SetConfigValues</a>.
</p>
<p> May have different defaults per platform.
<br>&nbsp;<br> <table class=bar> <tr>
<td width=33% align=left><span class='arrowleft'></span><a href="javascript:show('OodleXInitOptions.html')" class="paragraph">OodleXInitOptions</a></td><td width=33% align=center><span class='arrowup'></span><a href="javascript:show('OodleXAPI_Init.html')" class="paragraph">OodleX Startup and Shutdown</a></td><td width=33% align=right><span class='arrowright'></span><a href="javascript:show('OodleX_Init_ThreadProfilerInit.html')" class="paragraph">OodleX_Init_ThreadProfilerInit</a></td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="OodleXIOQ_SetVTable.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>OodleXIOQ_SetVTable</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "OodleXIOQ_SetVTable.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="OodleXIOQ_SetVTable.html_backmenu">
<table class=dropmenu>
<tr><td><span class='arrowleft'></span>&nbsp;<a href="javascript:show('OodleXIOQ_GetOSHandle.html')" class="paragraph">OodleXIOQ_GetOSHandle</a></td></tr><tr><td><span class='arrowright'></span>&nbsp;<a href="javascript:show('OodleXIOQ_Fence_Async.html')" class="paragraph">OodleXIOQ_Fence_Async</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<div class=prototype><div class=prototype_header>// Function prototype:</div><pre>const <span class=prototype_type><a href="javascript:show('OodleXFileOpsVTable.html')" class="blue">OodleXFileOpsVTable</a></span> * <span class=prototype_type><a href="javascript:show('OodleXIOQ_SetVTable.html')" class="blue">OodleXIOQ_SetVTable</a></span>( <span class=prototype_type><a href="javascript:show('OodleXIOQFile.html')" class="blue">OodleXIOQFile</a></span> file,
const <span class=prototype_type><a href="javascript:show('OodleXFileOpsVTable.html')" class="blue">OodleXFileOpsVTable</a></span> * vtable );</pre></div><div class=discussion_heading>Discussion</div>Set the VTable used for ops the file.<div class=discussion_heading>Parameters</div> <table> <tr> <td style='vertical-align: top;' class=paramname><a id="OodleXIOQ_SetVTable.html_file" class=nohover>file</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> the IOQFile to query
</td></tr></table><div class=discussion_heading>Return Value</div> <table> <tr> <td style='vertical-align: top;' class=paramname><a id="OodleXIOQ_SetVTable.html_return" class=nohover>return</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> the previous vtable
</td></tr></table><div class=discussion_heading>Discussion</div></p>
<p> Change the VTable used for ops the file after opening. This is discouraged, generally try to set the right
vtable in the <a href="javascript:show('OodleXIOQ_OpenForRead_Async.html')" class="paragraph">OodleXIOQ_OpenForRead_Async</a> call and then don't change it.
Warning : vtables are not themselves internally mutex protected !
WARNING : changing the file's VTable while there are ops on that file in the Queue has undefined results !!
</p>
<p><br>&nbsp;<br> <table class=bar> <tr>
<td width=33% align=left><span class='arrowleft'></span><a href="javascript:show('OodleXIOQ_GetOSHandle.html')" class="paragraph">OodleXIOQ_GetOSHandle</a></td><td width=33% align=center><span class='arrowup'></span><a href="javascript:show('OodleXAPI_IOQ.html')" class="paragraph">OodleX low level async io</a></td><td width=33% align=right><span class='arrowright'></span><a href="javascript:show('OodleXIOQ_Fence_Async.html')" class="paragraph">OodleXIOQ_Fence_Async</a></td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="Oodle_FAQ_WhichLZ.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>FAQ: Which OodleLZ should I use?</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "Oodle_FAQ_WhichLZ.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="Oodle_FAQ_WhichLZ.html_backmenu">
<table class=dropmenu>
<tr><td><span class='arrowleft'></span>&nbsp;<a href="javascript:show('Oodle_FAQ_vs_other_compressors.html')" class="paragraph">FAQ: How does OodleLZ compare with other compressors ?</a></td></tr><tr><td><span class='arrowup'></span>&nbsp;<a href="javascript:show('Oodle_FAQ.html')" class="paragraph">Frequently Asked Questions</a></td></tr><tr><td><span class='arrowright'></span>&nbsp;<a href="javascript:show('Oodle_FAQ_LZCompareTable.html')" class="paragraph">FAQ: What are the speeds and ratios of the OodleLZ compressors and levels?</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<P>
The primary Oodle compressors you might want to use are : Kraken, Mermaid, Selkie, and Leviathan.
They are designed for slightly different usage scenarios. This is a simple guide to choosing one.
</p>
<p>(See also <a href="javascript:show('OodleLZ_About.html')" class="paragraph">About OodleLZ</a> for more detailed information about OodleLZ)
</p>
<p>The best way to sample them is just to run <a href="javascript:show('example_lz_chart.html')" class="paragraph">example_lz_chart : Example that makes a chart of OodleLZ options</a> on some of your data.
</p>
<p>All the Oodle compressors support seeking in packed streams and parallel decompression, if you set up
the <a href="javascript:show('OodleLZ_CompressOptions.html')" class="paragraph">OodleLZ_CompressOptions</a> to request that. (set seekChunkReset)
</p>
<p>Kraken is a great general purpose place to start. It has high compression and great decode speed.
</p>
<p>Mermaid &amp; Selkie are some of the fastest decompressors in the world. They provide less compression than Kraken but
super fast decodes. Selkie is faster than LZ4.
</p>
<p>Leviathan offers the highest compression. It's comparable to LZMA (7zip), but a lot faster to decode!
</p>
<p>Again :
</p>
<p><ul>
<li> Kraken should be your default choice. For good compression and good decode speed, use Kraken.
</ul></p>
<p><ul>
<li> For more compression, use Leviathan (and <a href="javascript:show('OodleLZ_CompressionLevel.html','OodleLZ_CompressionLevel.html_OodleLZ_CompressionLevel_Optimal1')" class="paragraph">OodleLZ_CompressionLevel_Optimal1</a> or higher)
</ul></p>
<p><ul>
<li> For maximum decompression speed, use Selkie. For very fast decoding with more compression, use Mermaid.
(Mermaid is between Selkie and Kraken)
</ul></p>
<p><ul>
<li> Kraken, Mermaid, Selkie and Leviathan should normally be your first choice,
but they do better on larger files and may not do well on very small files.
</ul></p>
<p><ul>
<li> For fast encoding, use Mermaid or Selkie with
<a href="javascript:show('OodleLZ_CompressionLevel.html','OodleLZ_CompressionLevel.html_OodleLZ_CompressionLevel_Fast')" class="paragraph">OodleLZ_CompressionLevel_Fast</a> or <a href="javascript:show('OodleLZ_CompressionLevel.html','OodleLZ_CompressionLevel.html_OodleLZ_CompressionLevel_VeryFast')" class="paragraph">OodleLZ_CompressionLevel_VeryFast</a> or <a href="javascript:show('OodleLZ_CompressionLevel.html','OodleLZ_CompressionLevel.html_OodleLZ_CompressionLevel_SuperFast')" class="paragraph">OodleLZ_CompressionLevel_SuperFast</a>.
Kraken, Mermaid &amp; Selkie now also have HyperFast levels with even faster encoding and less compression.
</ul></p>
<p><ul>
<li> Unless you know that you specifically need a small sliding window or seeking, you should
compress buffers in the largest pieces possible. In general, cutting data into pieces
(via seekChunkReset or your own cutting) reduces compression ratio.
</ul></p>
<p>See also <a href="javascript:show('Oodle_FAQ_LZCompareTable.html')" class="paragraph">FAQ: What are the speeds and ratios of the OodleLZ compressors and levels?</a>.<br>&nbsp;<br> <table class=bar> <tr>
<td width=33% align=left><span class='arrowleft'></span><a href="javascript:show('Oodle_FAQ_vs_other_compressors.html')" class="paragraph">FAQ: How does OodleLZ compare with other compressors ?</a></td><td width=33% align=center><span class='arrowup'></span><a href="javascript:show('Oodle_FAQ.html')" class="paragraph">Frequently Asked Questions</a></td><td width=33% align=right><span class='arrowright'></span><a href="javascript:show('Oodle_FAQ_LZCompareTable.html')" class="paragraph">FAQ: What are the speeds and ratios of the OodleLZ compressors and levels?</a></td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="OodleNetwork1_Shared.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>OodleNetwork1_Shared</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "OodleNetwork1_Shared.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="OodleNetwork1_Shared.html_backmenu">
<table class=dropmenu>
<tr><td><span class='arrowright'></span>&nbsp;<a href="javascript:show('OodleNetwork1TCP_State.html')" class="paragraph">OodleNetwork1TCP_State</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<div class=prototype><div class=prototype_header>// Structure definition:</div><pre><span class=prototype_type>struct</span> <a href="javascript:show('OodleNetwork1_Shared.html')">OodleNetwork1_Shared</a>;
</pre></div><div class=discussion_heading>Discussion</div> Opaque data type for OodleNetwork1_Shared<div class=discussion_heading>Discussion</div> This data is made from the shared static dictionary. After it is made it is const,
and can be used by all compression channels.
</p>
<p> This data is filled by <a href="javascript:show('OodleNetwork1_Shared_SetWindow.html')" class="paragraph">OodleNetwork1_Shared_SetWindow</a>.
</p>
<p> You can allocate and free it yourself. It must be of size <a href="javascript:show('OodleNetwork1_Shared_Size.html')" class="paragraph">OodleNetwork1_Shared_Size</a>.
</p>
<p> Your server must have one of these, and each client must have the exact same one.
<br>&nbsp;<br> <table class=bar> <tr>
<td width=33% align=left><span class='arrowleft'></span><a href="javascript:show('OODLENETWORK1_DECOMP_BUF_OVERREAD_LEN.html')" class="paragraph">OODLENETWORK1_DECOMP_BUF_OVERREAD_LEN</a></td><td width=33% align=center><span class='arrowup'></span><a href="javascript:show('OodleAPI_OodleNetwork1.html')" class="paragraph">OodleAPI_OodleNetwork1</a></td><td width=33% align=right><span class='arrowright'></span><a href="javascript:show('OodleNetwork1TCP_State.html')" class="paragraph">OodleNetwork1TCP_State</a></td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="OodleNetwork1_CompressedBufferSizeNeeded.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>OodleNetwork1_CompressedBufferSizeNeeded</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "OodleNetwork1_CompressedBufferSizeNeeded.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="OodleNetwork1_CompressedBufferSizeNeeded.html_backmenu">
<table class=dropmenu>
<tr><td><span class='arrowleft'></span>&nbsp;<a href="javascript:show('OodleNetwork1TCP_State_Size.html')" class="paragraph">OodleNetwork1TCP_State_Size</a></td></tr><tr><td><span class='arrowright'></span>&nbsp;<a href="javascript:show('OodleNetwork1_Shared_SetWindow.html')" class="paragraph">OodleNetwork1_Shared_SetWindow</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<div class=prototype><div class=prototype_header>// Function prototype:</div><pre>OO_SINTa <span class=prototype_type><a href="javascript:show('OodleNetwork1_CompressedBufferSizeNeeded.html')" class="blue">OodleNetwork1_CompressedBufferSizeNeeded</a></span>( OO_SINTa rawLen );</pre></div><div class=discussion_heading>Discussion</div>Returns the size of memory required for the compressed buffer passed to <a href="javascript:show('OodleNetwork1TCP_Encode.html')" class="paragraph">OodleNetwork1TCP_Encode</a><br>&nbsp;<br> <table class=bar> <tr>
<td width=33% align=left><span class='arrowleft'></span><a href="javascript:show('OodleNetwork1TCP_State_Size.html')" class="paragraph">OodleNetwork1TCP_State_Size</a></td><td width=33% align=center><span class='arrowup'></span><a href="javascript:show('OodleAPI_OodleNetwork1.html')" class="paragraph">OodleAPI_OodleNetwork1</a></td><td width=33% align=right><span class='arrowright'></span><a href="javascript:show('OodleNetwork1_Shared_SetWindow.html')" class="paragraph">OodleNetwork1_Shared_SetWindow</a></td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="OodleXIOQ_GetOSHandle.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>OodleXIOQ_GetOSHandle</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "OodleXIOQ_GetOSHandle.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="OodleXIOQ_GetOSHandle.html_backmenu">
<table class=dropmenu>
<tr><td><span class='arrowleft'></span>&nbsp;<a href="javascript:show('OodleXIOQ_LogLastError.html')" class="paragraph">OodleXIOQ_LogLastError</a></td></tr><tr><td><span class='arrowright'></span>&nbsp;<a href="javascript:show('OodleXIOQ_SetVTable.html')" class="paragraph">OodleXIOQ_SetVTable</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<div class=prototype><div class=prototype_header>// Function prototype:</div><pre>void * <span class=prototype_type><a href="javascript:show('OodleXIOQ_GetOSHandle.html')" class="blue">OodleXIOQ_GetOSHandle</a></span>( <span class=prototype_type><a href="javascript:show('OodleXIOQFile.html')" class="blue">OodleXIOQFile</a></span> file );</pre></div><div class=discussion_heading>Discussion</div>Get the OS file handle for this OodleXIOQFile<div class=discussion_heading>Parameters</div> <table> <tr> <td style='vertical-align: top;' class=paramname><a id="OodleXIOQ_GetOSHandle.html_file" class=nohover>file</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> the IOQFile to query
</td></tr></table><div class=discussion_heading>Return Value</div> <table> <tr> <td style='vertical-align: top;' class=paramname><a id="OodleXIOQ_GetOSHandle.html_return" class=nohover>return</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> the OS file handle
</td></tr></table><div class=discussion_heading>Discussion</div></p>
<p> If the file is not yet open (eg. <a href="javascript:show('OodleXIOQ_OpenForRead_Async.html')" class="paragraph">OodleXIOQ_OpenForRead_Async</a> was started but is still pending), this
returns NULL.
<br>&nbsp;<br> <table class=bar> <tr>
<td width=33% align=left><span class='arrowleft'></span><a href="javascript:show('OodleXIOQ_LogLastError.html')" class="paragraph">OodleXIOQ_LogLastError</a></td><td width=33% align=center><span class='arrowup'></span><a href="javascript:show('OodleXAPI_IOQ.html')" class="paragraph">OodleX low level async io</a></td><td width=33% align=right><span class='arrowright'></span><a href="javascript:show('OodleXIOQ_SetVTable.html')" class="paragraph">OodleXIOQ_SetVTable</a></td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="OODLEX_FILE_SIZE_INVALID.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>OODLEX_FILE_SIZE_INVALID</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "OODLEX_FILE_SIZE_INVALID.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="OODLEX_FILE_SIZE_INVALID.html_backmenu">
<table class=dropmenu>
<tr><td><span class='arrowleft'></span>&nbsp;<a href="javascript:show('OODLEX_FILEINFO_MODTIME_INVALID.html')" class="paragraph">OODLEX_FILEINFO_MODTIME_INVALID</a></td></tr><tr><td><span class='arrowright'></span>&nbsp;<a href="javascript:show('OODLEX_FILE_OPEN_NO_RESERVE_SIZE.html')" class="paragraph">OODLEX_FILE_OPEN_NO_RESERVE_SIZE</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<div class=prototype><div class=prototype_header>// Preprocessor definition:</div><pre><span class=prototype_type>#define</span> <a href="javascript:show('OODLEX_FILE_SIZE_INVALID.html')">OODLEX_FILE_SIZE_INVALID</a> ((OO_S64)-1)</pre></div><div class=discussion_heading>Discussion</div> Unknown or failure retreiving file size <br>&nbsp;<br> <table class=bar> <tr>
<td width=33% align=left><span class='arrowleft'></span><a href="javascript:show('OODLEX_FILEINFO_MODTIME_INVALID.html')" class="paragraph">OODLEX_FILEINFO_MODTIME_INVALID</a></td><td width=33% align=center><span class='arrowup'></span><a href="javascript:show('OodleXAPI_IOQ.html')" class="paragraph">OodleX low level async io</a></td><td width=33% align=right><span class='arrowright'></span><a href="javascript:show('OODLEX_FILE_OPEN_NO_RESERVE_SIZE.html')" class="paragraph">OODLEX_FILE_OPEN_NO_RESERVE_SIZE</a></td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="OodleNetwork1UDP_State_Compact.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>OodleNetwork1UDP_State_Compact</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "OodleNetwork1UDP_State_Compact.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="OodleNetwork1UDP_State_Compact.html_backmenu">
<table class=dropmenu>
<tr><td><span class='arrowleft'></span>&nbsp;<a href="javascript:show('OodleNetwork1UDP_State_Compact_ForVersion.html')" class="paragraph">OodleNetwork1UDP_State_Compact_ForVersion</a></td></tr><tr><td><span class='arrowright'></span>&nbsp;<a href="javascript:show('OodleNetwork1UDP_State_Uncompact_ForVersion.html')" class="paragraph">OodleNetwork1UDP_State_Uncompact_ForVersion</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<div class=prototype><div class=prototype_header>// Function prototype:</div><pre>OO_SINTa <span class=prototype_type><a href="javascript:show('OodleNetwork1UDP_State_Compact.html')" class="blue">OodleNetwork1UDP_State_Compact</a></span>( <span class=prototype_type><a href="javascript:show('OodleNetwork1UDP_StateCompacted.html')" class="blue">OodleNetwork1UDP_StateCompacted</a></span> * to,
const <span class=prototype_type><a href="javascript:show('OodleNetwork1UDP_State.html')" class="blue">OodleNetwork1UDP_State</a></span> * from );</pre></div><div class=discussion_heading>Discussion</div>Fills a OodleNetwork1UDP_StateCompacted from a OodleNetwork1UDP_State<div class=discussion_heading>Parameters</div> <table> <tr> <td style='vertical-align: top;' class=paramname><a id="OodleNetwork1UDP_State_Compact.html_to" class=nohover>to</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> filled out
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleNetwork1UDP_State_Compact.html_from" class=nohover>from</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> read
</td></tr></table><div class=discussion_heading>Return Value</div> <table> <tr> <td style='vertical-align: top;' class=paramname><a id="OodleNetwork1UDP_State_Compact.html_return" class=nohover>return</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> number of bytes filled in <i>to</i>
</td></tr></table><div class=discussion_heading>Discussion</div></p>
<p> Use this when the OodleNetwork1UDP_State is created to make a Compacted state to save to a file.
</p>
<p> <i>to</i> should be allocated to at least <a href="javascript:show('OodleNetwork1UDP_StateCompacted_MaxSize.html')" class="paragraph">OodleNetwork1UDP_StateCompacted_MaxSize</a>
</p>
<p> Note - use the return value to save only the prefix of the Compacted state.
</p>
<p><br>&nbsp;<br> <table class=bar> <tr>
<td width=33% align=left><span class='arrowleft'></span><a href="javascript:show('OodleNetwork1UDP_State_Compact_ForVersion.html')" class="paragraph">OodleNetwork1UDP_State_Compact_ForVersion</a></td><td width=33% align=center><span class='arrowup'></span><a href="javascript:show('OodleAPI_OodleNetwork1.html')" class="paragraph">OodleAPI_OodleNetwork1</a></td><td width=33% align=right><span class='arrowright'></span><a href="javascript:show('OodleNetwork1UDP_State_Uncompact_ForVersion.html')" class="paragraph">OodleNetwork1UDP_State_Uncompact_ForVersion</a></td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="OodleXLog_StateFlags.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>OodleXLog_StateFlags</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "OodleXLog_StateFlags.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="OodleXLog_StateFlags.html_backmenu">
<table class=dropmenu>
<tr><td><span class='arrowright'></span>&nbsp;<a href="javascript:show('OodleXLog_VerboseLevel.html')" class="paragraph">OodleXLog_VerboseLevel</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<div class=prototype><div class=prototype_header>// Enumerant:</div><pre><span class=prototype_type>enum</span> <a href="javascript:show('OodleXLog_StateFlags.html')">OodleXLog_StateFlags</a>
{
&nbsp;&nbsp;&nbsp;&nbsp;OODLEXLOG_TO_FILE = ((OO_U32)1&lt;&lt;0),
&nbsp;&nbsp;&nbsp;&nbsp;OODLEXLOG_ECHO = ((OO_U32)1&lt;&lt;1),
&nbsp;&nbsp;&nbsp;&nbsp;OODLEXLOG_TO_DEBUGGER = ((OO_U32)1&lt;&lt;2),
&nbsp;&nbsp;&nbsp;&nbsp;OODLEXLOG_FILE_LINE = ((OO_U32)1&lt;&lt;3),
&nbsp;&nbsp;&nbsp;&nbsp;OODLEXLOG_CALLBACK = ((OO_U32)1&lt;&lt;4),
&nbsp;&nbsp;&nbsp;&nbsp;OODLEXLOG_PREFIX_THREAD_TIME = ((OO_U32)1&lt;&lt;5),
&nbsp;&nbsp;&nbsp;&nbsp;OODLEXLOG_AUTOFLUSH_THREADLOG = ((OO_U32)1&lt;&lt;6),
&nbsp;&nbsp;&nbsp;&nbsp;OODLEXLOG_FLUSH_EVERY_WRITE = ((OO_U32)1&lt;&lt;7),
&nbsp;&nbsp;&nbsp;&nbsp;OODLEXLOG_STATE_VERBOSITY_NONE = ((OO_U32)0&lt;&lt;16),
&nbsp;&nbsp;&nbsp;&nbsp;OODLEXLOG_STATE_VERBOSITY0 = ((OO_U32)1&lt;&lt;16),
&nbsp;&nbsp;&nbsp;&nbsp;OODLEXLOG_STATE_VERBOSITY1 = ((OO_U32)2&lt;&lt;16),
&nbsp;&nbsp;&nbsp;&nbsp;OODLEXLOG_STATE_VERBOSITY2 = ((OO_U32)3&lt;&lt;16)
};
</pre></div><div class=discussion_heading>Discussion</div> Flags for use with <a href="javascript:show('OodleXLog_SetState.html')" class="paragraph">OodleXLog_SetState</a>
<div class=discussion_heading>Enumerants</div> <table> <tr> <td style='vertical-align: top;' class=paramname><a id="OodleXLog_StateFlags.html_OODLEXLOG_TO_FILE" class=nohover>OODLEXLOG_TO_FILE</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> log to the log file</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXLog_StateFlags.html_OODLEXLOG_ECHO" class=nohover>OODLEXLOG_ECHO</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> echo to a stdio file (stdout/stderr typically)</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXLog_StateFlags.html_OODLEXLOG_TO_DEBUGGER" class=nohover>OODLEXLOG_TO_DEBUGGER</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> log to the debugger</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXLog_StateFlags.html_OODLEXLOG_FILE_LINE" class=nohover>OODLEXLOG_FILE_LINE</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> put file &amp; line on all logs</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXLog_StateFlags.html_OODLEXLOG_CALLBACK" class=nohover>OODLEXLOG_CALLBACK</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> log to the user-provided callback</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXLog_StateFlags.html_OODLEXLOG_PREFIX_THREAD_TIME" class=nohover>OODLEXLOG_PREFIX_THREAD_TIME</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> prefix the thread id &amp; time</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXLog_StateFlags.html_OODLEXLOG_AUTOFLUSH_THREADLOG" class=nohover>OODLEXLOG_AUTOFLUSH_THREADLOG</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> flush the threadlog to the primary log automatically</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXLog_StateFlags.html_OODLEXLOG_FLUSH_EVERY_WRITE" class=nohover>OODLEXLOG_FLUSH_EVERY_WRITE</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> flush log file after every write, useful for debugging crashes</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXLog_StateFlags.html_OODLEXLOG_STATE_VERBOSITY_NONE" class=nohover>OODLEXLOG_STATE_VERBOSITY_NONE</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> verbosity in state</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXLog_StateFlags.html_OODLEXLOG_STATE_VERBOSITY0" class=nohover>OODLEXLOG_STATE_VERBOSITY0</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc></td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXLog_StateFlags.html_OODLEXLOG_STATE_VERBOSITY1" class=nohover>OODLEXLOG_STATE_VERBOSITY1</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc></td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXLog_StateFlags.html_OODLEXLOG_STATE_VERBOSITY2" class=nohover>OODLEXLOG_STATE_VERBOSITY2</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc></td></tr></table><br>&nbsp;<br> <table class=bar> <tr>
<td width=33% align=left><span class='arrowleft'></span><a href="javascript:show('OodleXLog_Printf.html')" class="paragraph">OodleXLog_Printf</a></td><td width=33% align=center><span class='arrowup'></span><a href="javascript:show('OodleXAPI_Debug.html')" class="paragraph">OodleX Debug aids</a></td><td width=33% align=right><span class='arrowright'></span><a href="javascript:show('OodleXLog_VerboseLevel.html')" class="paragraph">OodleXLog_VerboseLevel</a></td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="OodleLZ_Verbosity.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>OodleLZ_Verbosity</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "OodleLZ_Verbosity.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="OodleLZ_Verbosity.html_backmenu">
<table class=dropmenu>
<tr><td><span class='arrowright'></span>&nbsp;<a href="javascript:show('OodleLZ_Compressor.html')" class="paragraph">OodleLZ_Compressor</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<div class=prototype><div class=prototype_header>// Enumerant:</div><pre><span class=prototype_type>enum</span> <a href="javascript:show('OodleLZ_Verbosity.html')">OodleLZ_Verbosity</a>
{
&nbsp;&nbsp;&nbsp;&nbsp;OodleLZ_Verbosity_None = 0,
&nbsp;&nbsp;&nbsp;&nbsp;OodleLZ_Verbosity_Minimal = 1,
&nbsp;&nbsp;&nbsp;&nbsp;OodleLZ_Verbosity_Some = 2,
&nbsp;&nbsp;&nbsp;&nbsp;OodleLZ_Verbosity_Lots = 3,
&nbsp;&nbsp;&nbsp;&nbsp;OodleLZ_Verbosity_Force32 = 0x40000000
};
</pre></div><div class=discussion_heading>Discussion</div> Verbosity of LZ functions
LZ functions print information to the function set by <a href="javascript:show('OodleCore_Plugins_SetPrintf.html')" class="paragraph">OodleCore_Plugins_SetPrintf</a>
or <a href="javascript:show('OodleXLog_Printf.html')" class="paragraph">OodleXLog_Printf</a> if using OodleX.
<br>&nbsp;<br> <table class=bar> <tr>
<td width=33% align=left><span class='arrowleft'></span><a href="javascript:show('OODLELZ_SCRATCH_MEM_NO_BOUND.html')" class="paragraph">OODLELZ_SCRATCH_MEM_NO_BOUND</a></td><td width=33% align=center><span class='arrowup'></span><a href="javascript:show('OodleAPI_LZ_Compressors.html')" class="paragraph">OodleAPI_LZ_Compressors</a></td><td width=33% align=right><span class='arrowright'></span><a href="javascript:show('OodleLZ_Compressor.html')" class="paragraph">OodleLZ_Compressor</a></td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="t_fp_OodleNet_Plugin_WaitJob.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>t_fp_OodleNet_Plugin_WaitJob</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "t_fp_OodleNet_Plugin_WaitJob.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="t_fp_OodleNet_Plugin_WaitJob.html_backmenu">
<table class=dropmenu>
<tr><td><span class='arrowleft'></span>&nbsp;<a href="javascript:show('t_fp_OodleNet_Plugin_RunJob.html')" class="paragraph">t_fp_OodleNet_Plugin_RunJob</a></td></tr><tr><td><span class='arrowright'></span>&nbsp;<a href="javascript:show('t_fp_OodleNet_Plugin_Printf.html')" class="paragraph">t_fp_OodleNet_Plugin_Printf</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<div class=prototype><div class=prototype_header>// Function typedef:</div><pre>OODEFFUNC void( OODLE_CALLBACK <span class=prototype_type><a href="javascript:show('t_fp_OodleNet_Plugin_WaitJob.html')" class="blue">t_fp_OodleNet_Plugin_WaitJob</a></span> )( OO_U64 job_handle,
void * user_ptr );</pre></div><div class=discussion_heading>Discussion</div>Function pointer type for OodleNet_Plugins_SetJobSystem<div class=discussion_heading>Parameters</div> <table> <tr> <td style='vertical-align: top;' class=paramname><a id="t_fp_OodleNet_Plugin_WaitJob.html_job_handle" class=nohover>job_handle</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> a job handle returned from RunJob. Never 0.
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="t_fp_OodleNet_Plugin_WaitJob.html_user_ptr" class=nohover>user_ptr</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> is passed through from the OodleLZ_CompressOptions or OodleTex_Encode call.
</td></tr></table><div class=discussion_heading>Discussion</div></p>
<p> Waits until the job specified by job_handle is done and cleans up any associated resources. Oodle
will call WaitJob exactly once for every RunJob call that didn't return 0.
</p>
<p> If job_handle was already completed, this should clean it up without waiting.
</p>
<p> A handle value should not be reused by another RunJob until WaitJob has been done with that value.
</p>
<p> WaitJob will not be called from running jobs. It will be only be called from the original thread that
invoked Oodle. If you are running Oodle from a worker thread, ensure that that thread is allowed to wait
on other job threads.
</p>
<p> See <a href="javascript:show('Oodle_About_Job_Threading_Plugins.html')" class="paragraph">About Oodle Job Threading Plugins</a>
<br>&nbsp;<br> <table class=bar> <tr>
<td width=33% align=left><span class='arrowleft'></span><a href="javascript:show('t_fp_OodleNet_Plugin_RunJob.html')" class="paragraph">t_fp_OodleNet_Plugin_RunJob</a></td><td width=33% align=center><span class='arrowup'></span><a href="javascript:show('OodleAPI_OodleNet_Plugins.html')" class="paragraph">Network plugins</a></td><td width=33% align=right><span class='arrowright'></span><a href="javascript:show('t_fp_OodleNet_Plugin_Printf.html')" class="paragraph">t_fp_OodleNet_Plugin_Printf</a></td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="OodleX_CombinePaths.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>OodleX_CombinePaths</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "OodleX_CombinePaths.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="OodleX_CombinePaths.html_backmenu">
<table class=dropmenu>
<tr><td><span class='arrowleft'></span>&nbsp;<a href="javascript:show('OodleXUtil_ConvertUTF16ToUTF8.html')" class="paragraph">OodleXUtil_ConvertUTF16ToUTF8</a></td></tr><tr><td><span class='arrowright'></span>&nbsp;<a href="javascript:show('OodleX_GetOSCwd.html')" class="paragraph">OodleX_GetOSCwd</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<div class=prototype><div class=prototype_header>// Function prototype:</div><pre>void <span class=prototype_type><a href="javascript:show('OodleX_CombinePaths.html')" class="blue">OodleX_CombinePaths</a></span>( const char * base,
const char * add,
char * into,
OO_S32 intoSize );</pre></div><div class=discussion_heading>Discussion</div>Combine a base and added path to make an absolute path, correctly<div class=discussion_heading>Parameters</div> <table> <tr> <td style='vertical-align: top;' class=paramname><a id="OodleX_CombinePaths.html_base" class=nohover>base</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> first part of path
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleX_CombinePaths.html_add" class=nohover>add</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> second part of path
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleX_CombinePaths.html_into" class=nohover>into</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> result is written here
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleX_CombinePaths.html_intoSize" class=nohover>intoSize</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> bytes available in <i>into</i>
</td></tr></table><div class=discussion_heading>Discussion</div></p>
<p> Combines two paths to make an absolute path. Some of the rules followed :
</p>
<p> If <i>add</i> is absolute, <i>into</i> = <i>add</i>
</p>
<p> If <i>add</i> begins with ":" or "/" , then <i>into</i> is the drive from <i>base</i> and the full path from <i>add</i>
</p>
<p> If <i>add</i> does not begin with a path delim and <i>base</i> does not end with a path delim, one is inserted
</p>
<p> (in particular : to do a normal path concatenation, <i>add</i> should NOT start with a path delim)
</p>
<p> Relative path actions in <i>add</i> like ".." and "." are respected, but not in <i>base</i>.
</p>
<p> The funny DOS-style per-drive current directory reference (eg. "c:blah") is respected at the beginning of <i>add</i>.
</p>
<p> The string put in <i>into</i> always has only the preferred path delim for this OS (<a href="javascript:show('OODLEX_PATH_DELIM.html')" class="paragraph">OODLEX_PATH_DELIM</a>).
</p>
<p><br>&nbsp;<br> <table class=bar> <tr>
<td width=33% align=left><span class='arrowleft'></span><a href="javascript:show('OodleXUtil_ConvertUTF16ToUTF8.html')" class="paragraph">OodleXUtil_ConvertUTF16ToUTF8</a></td><td width=33% align=center><span class='arrowup'></span><a href="javascript:show('OodleXAPI_Util.html')" class="paragraph">OodleX Utils</a></td><td width=33% align=right><span class='arrowright'></span><a href="javascript:show('OodleX_GetOSCwd.html')" class="paragraph">OodleX_GetOSCwd</a></td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="OodleXAPI_Handle.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>OodleX async handle operations</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "OodleXAPI_Handle.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="OodleXAPI_Handle.html_backmenu">
<table class=dropmenu>
<tr><td><span class='arrowleft'></span>&nbsp;<a href="javascript:show('OodleXAPI_Malloc.html')" class="paragraph">OodleX Memory Allocators</a></td></tr><tr><td><span class='arrowup'></span>&nbsp;<a href="javascript:show('OodleExtAPI.html')" class="paragraph">Oodle2 Ext API Documentation</a></td></tr><tr><td><span class='arrowright'></span>&nbsp;<a href="javascript:show('OodleXAPI_Threading.html')" class="paragraph">OodleX threading util</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<P>
OodleXHandle is the ubiquitous weak reference to an Oodle Async operation.
</p>
<p> <p><ul class='TOCItem'>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleXHandle_About.html')">About OodleXHandle</a></li>
<li><span onClick="HandleClick(event, null); return false" class='TOCGroup closedbook_icon'></span>&nbsp;Defines</li>
<ul style="display:none" class='TOCItem'>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OODLEX_ASYNC_HANDLE_INVALID.html')">OODLEX_ASYNC_HANDLE_INVALID</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OODLEX_ASYNC_HANDLE_PENDING.html')">OODLEX_ASYNC_HANDLE_PENDING</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OODLEX_ASYNC_HANDLE_DONE.html')">OODLEX_ASYNC_HANDLE_DONE</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OODLEX_ASYNC_HANDLE_ERROR.html')">OODLEX_ASYNC_HANDLE_ERROR</a></li>
</ul>
<li><span onClick="HandleClick(event, null); return false" class='TOCGroup closedbook_icon'></span>&nbsp;Enumerants</li>
<ul style="display:none" class='TOCItem'>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleXPriority.html')">OodleXPriority</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleXAsyncSelect.html')">OodleXAsyncSelect</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleXStatus.html')">OodleXStatus</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleXHandleAutoDelete.html')">OodleXHandleAutoDelete</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleXHandleKickDelayed.html')">OodleXHandleKickDelayed</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleXHandleDeleteIfDone.html')">OodleXHandleDeleteIfDone</a></li>
</ul>
<li><span onClick="HandleClick(event, null); return false" class='TOCGroup closedbook_icon'></span>&nbsp;Functions</li>
<ul style="display:none" class='TOCItem'>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleX_GetStatus.html')">OodleX_GetStatus</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleX_Wait.html')">OodleX_Wait</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleX_WaitAll.html')">OodleX_WaitAll</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleX_WaitDoneAllPending.html')">OodleX_WaitDoneAllPending</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleX_SetHandleAutoDelete.html')">OodleX_SetHandleAutoDelete</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleX_GetAvailableAsyncSelect.html')">OodleX_GetAvailableAsyncSelect</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleXHandleEvent_Alloc.html')">OodleXHandleEvent_Alloc</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleXHandleEvent_SetDone.html')">OodleXHandleEvent_SetDone</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleXHandleEvent_SetError.html')">OodleXHandleEvent_SetError</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleXHandleCountdown_Alloc.html')">OodleXHandleCountdown_Alloc</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleXHandleCountdown_Decrement.html')">OodleXHandleCountdown_Decrement</a></li>
</ul>
<li><span onClick="HandleClick(event, null); return false" class='TOCGroup closedbook_icon'></span>&nbsp;Typedefs</li>
<ul style="display:none" class='TOCItem'>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleXHandle.html')">OodleXHandle</a></li>
</ul>
</ul>
<br>&nbsp;<br> <table class=bar> <tr>
<td width=33% align=left><span class='arrowleft'></span><a href="javascript:show('OodleXMalloc_GetVTable_OS.html')" class="paragraph">OodleXMalloc_GetVTable_OS</a></td><td width=33% align=center><span class='arrowup'></span><a href="javascript:show('OodleExtAPI.html')" class="paragraph">Oodle2 Ext API Documentation</a></td><td width=33% align=right><span class='arrowright'></span><a href="javascript:show('OodleXHandle_About.html')" class="paragraph">About OodleXHandle</a></td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="OodleLZ_About.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>About OodleLZ</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "OodleLZ_About.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="OodleLZ_About.html_backmenu">
<table class=dropmenu>
<tr><td><span class='arrowup'></span>&nbsp;<a href="javascript:show('OodleAPI_LZ.html')" class="paragraph">Core LZ compression</a></td></tr><tr><td><span class='arrowright'></span>&nbsp;<a href="javascript:show('OodleLZ_About_ThreadPhasedDecode.html')" class="paragraph">About OodleLZ ThreadPhased Decode</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<P>
<h2> About OodleLZ</h2>
</p>
<p>OodleLZ consists of two major API groups : <a href="javascript:show('OodleAPI_LZ_Compressors.html')" class="paragraph">OodleAPI_LZ_Compressors</a> for simple
synchronous memory to memory compression (like <a href="javascript:show('OodleLZ_Compress.html')" class="paragraph">OodleLZ_Compress</a>) (in the Oodle2 Core lib), and <a href="javascript:show('OodleXAPI_LZ_Async.html')" class="paragraph">OodleXAPI_LZ_Async</a>
(in the Oodle2 Ext lib)
for helpers that coordinate IO and multi-threaded invocation of the simple compressors
(like <a href="javascript:show('OodleXLZ_ReadAndDecompress_Wide_Async.html')" class="paragraph">OodleXLZ_ReadAndDecompress_Wide_Async</a>).
</p>
<p>The Oodle LZ compressors are lossless generic data compressors. They offer world-beating decode speed, with
good encode speed and compression ratio. They are particularly
well suited to binary "structured data" as is typically found in games.
</p>
<p>The most basic Oodle LZ APIs (<a href="javascript:show('OodleLZ_Compress.html')" class="paragraph">OodleLZ_Compress</a> and <a href="javascript:show('OodleLZ_Decompress.html')" class="paragraph">OodleLZ_Decompress</a>) just compress and decompress from
memory to memory, one whole buffer at a time.
</p>
<p>There are several compressors offered in Oodle. They are listed in the <a href="javascript:show('OodleLZ_Compressor.html')" class="paragraph">OodleLZ_Compressor</a> enum. Each has slightly
different tradeoffs in compression ratio, decode speed, and encode speed. Some of them have other special purpose uses,
such as sliding windows or incremental encoding. (feel free to contact oodle@radgametools.com if you have an unusual use case
and need guidance)
</p>
<p>For each choice of compressor, you can also vary the <a href="javascript:show('OodleLZ_CompressionLevel.html')" class="paragraph">OodleLZ_CompressionLevel</a>. The compression level just varies the encode speed;
slower encodes give higher compression ratios. Typically decode speed is unaffected; it's simply trying harder to pack the data
as small as possible in the encoder.
</p>
<p>You can also dial decode speed vs compression ratio using the <a href="javascript:show('OodleLZ_CompressOptions.html')" class="paragraph">OodleLZ_CompressOptions</a>:<i>spaceSpeedTradeoffBytes</i> parameter.
</p>
<p>Kraken (OodleLZ_Compressor_Kraken) is the best compressor to try first. It offers superb decode speed with high compression. It's excellent for data
loading in game, distribution, and most general purpose uses.
</p>
<p>Mermaid &amp; Selkie are some of the fastest decompressors in the world. They provide less compression than Kraken but
super fast decodes. Selkie is faster than LZ4 and offers more compression.
</p>
<p>Leviathan offers very high compression with still excellent decode speed, 10X faster than LZMA/7zip.
Leviathan should be your choice when you need maximum compression and don't mind being 10-50% slower than Kraken.
</p>
<p>Hydra is a meta-compressor that selects Leviathan,Kraken, Mermaid or Selkie for you. See <a href="javascript:show('OodleLZ_About_Hydra.html')" class="paragraph">About OodleLZ Hydra</a>
</p>
<p>The older Oodle compressors are now deprecated and should not be used (see <a href="javascript:show('Oodle_FAQ_deprecated_compressors.html')" class="paragraph">FAQ: What are the Oodle deprecated compressors ?</a>).
Stick to the new sea monsters.
</p>
<p>Go ahead and try them with the Oodle <a href="javascript:show('examples.html')" class="paragraph">Examples</a>
</p>
<p>All OodleLZ compressors can optionally break their data into "seek chunks" if
<a href="javascript:show('OodleLZ_CompressOptions.html','OodleLZ_CompressOptions.html_seekChunkReset')" class="paragraph">OodleLZ_CompressOptions:seekChunkReset</a> is set. The granularity is set in <a href="javascript:show('OodleLZ_CompressOptions.html','OodleLZ_CompressOptions.html_seekChunkLen')" class="paragraph">OodleLZ_CompressOptions:seekChunkLen</a> , but must
be at least 256k (<a href="javascript:show('OODLELZ_BLOCK_LEN.html')" class="paragraph">OODLELZ_BLOCK_LEN</a>). You must enable this at compress time.
Doing seekChunkReset hurts compression ratio slightly, but makes it possible to seek in the packed data
and decompress just a portion without decompressing the whole thing. It also
allows parallel decompression. You may also want an <a href="javascript:show('OodleLZ_SeekTable.html')" class="paragraph">OodleLZ_SeekTable</a> , which records
the locations of the seek points; it should be created from the compressed buffer at encode time
via <a href="javascript:show('OodleLZ_CreateSeekTable.html')" class="paragraph">OodleLZ_CreateSeekTable</a>.
This is needed if you want Oodle to parallelize decompression for you via <a href="javascript:show('OodleXLZ_ReadAndDecompress_Wide_Async.html')" class="paragraph">OodleXLZ_ReadAndDecompress_Wide_Async</a>.
</p>
<p>(see <a href="javascript:show('Oodle_FAQ_WhichLZ.html')" class="paragraph">FAQ: Which OodleLZ should I use?</a> for a guide to choosing a compressor)
</p>
<p>(see <a href="javascript:show('Oodle_FAQ_LZCompareTable.html')" class="paragraph">FAQ: What are the speeds and ratios of the OodleLZ compressors and levels?</a> for a table of performance for the different choices,
or run <a href="javascript:show('example_lz_chart.html')" class="paragraph">example_lz_chart : Example that makes a chart of OodleLZ options</a>)
</p>
<p>The normal <a href="javascript:show('OodleLZ_Compress.html')" class="paragraph">OodleLZ_Compress</a> and <a href="javascript:show('OodleLZ_Decompress.html')" class="paragraph">OodleLZ_Decompress</a> calls require a full buffer to encode
or decode (eg. not streaming or incremental), though you can do individual seek chunks or
<a href="javascript:show('OODLELZ_BLOCK_LEN.html')" class="paragraph">OODLELZ_BLOCK_LEN</a> at a time. There is also
a streaming decoder, which can decode incrementally (eg. <a href="javascript:show('OodleLZDecoder_Create.html')" class="paragraph">OodleLZDecoder_Create</a>).
</p>
<p>The OodleLZ compressed data does not include any header. You must store
the raw size and compressed size yourself.
Because OodleLZ data is headerless, it can be concated at seek chunk boundaries.
You can compress any multiple of <a href="javascript:show('OODLELZ_BLOCK_LEN.html')" class="paragraph">OODLELZ_BLOCK_LEN</a> bytes separately and simply
concatenate the compressed buffers together. This is how you can compress a file
that's too big to fit in memory in one piece. You can also use this to do your own
multi-threaded compression if you don't want to use Oodle's <a href="javascript:show('OodleXLZ_Compress_Async.html')" class="paragraph">OodleXLZ_Compress_Async</a>.
This is demonstrated in <a href="javascript:show('example_lz.html')" class="paragraph">example_lz : Example demonstrating LZ compression and decompression</a> lz_test_9.
</p>
<p>The OodleLZ compressors can create a CRC of each compressed chunk so that you can
verify its integrity before decompressing (you must set <a href="javascript:show('OodleLZ_CompressOptions.html')" class="paragraph">OodleLZ_CompressOptions</a>:sendQuantumCRCs). This CRC is not checked in decode by default,
but can be enabled via the <a href="javascript:show('OodleLZ_CheckCRC.html')" class="paragraph">OodleLZ_CheckCRC</a> option.
</p>
<p>Kraken (and other new compressors) can now do parallel decodes without seek points.
See <a href="javascript:show('OodleLZ_About_ThreadPhasedDecode.html')" class="paragraph">About OodleLZ ThreadPhased Decode</a> for more.
</p>
<p><hr>
</p>
<p><h2> How to choose a compressor and options</h2>
</p>
<p>The best way to choose a compressor is just to try them. An easy way is to run <a href="javascript:show('example_lz_chart.html')" class="paragraph">example_lz_chart : Example that makes a chart of OodleLZ options</a> on your data file to get
a sample of how the various Oodle LZ options perform.
</p>
<p>Different compression algorithms have different tradeoffs in terms of speed, memory use, and compression ratio.
</p>
<p>The OodleLZ compressors are intended to be at the sweet spot for in-game decompression on current game platforms.
Their speed/ratio tradeoff is designed to make loading compressed data and then decompressing it faster than just
loading decompressed data (in most cases; the exact balance depends on the data and how compressible it is).
</p>
<p>Some notes on how to tweak the compressor to meet your goals :
</p>
<p>First of all, <a href="javascript:show('OodleLZ_CompressionLevel.html')" class="paragraph">OodleLZ_CompressionLevel</a> controls how much work the compressor does to
optimize the stream. This affects compression time (NOTE : <b>encoding</b> time, not <b>decoding</b> time), but makes better streams. The
better streams are both smaller <b>and</b> often decompress faster. So if your goal is to have
the smallest stream or the fastest to decompress, in all cases you want to use the
highest level of <a href="javascript:show('OodleLZ_CompressionLevel.html')" class="paragraph">OodleLZ_CompressionLevel</a> that you can tolerate (usually Optimal2 is as high as you need to go).
</p>
<p>Note the <a href="javascript:show('OodleLZ_CompressionLevel.html')" class="paragraph">OodleLZ_CompressionLevel</a> you pass to <a href="javascript:show('OodleLZ_CompressOptions_GetDefault.html')" class="paragraph">OodleLZ_CompressOptions_GetDefault</a> does
not have to match the one you use for running the compression.
</p>
<p>In general, always start with <a href="javascript:show('OodleLZ_Compressor.html','OodleLZ_Compressor.html_OodleLZ_Compressor_Kraken')" class="paragraph">OodleLZ_Compressor_Kraken</a> as your first choice.
</p>
<p>1. If you want maximum compression :
</p>
<p>Use <a href="javascript:show('OodleLZ_Compressor.html','OodleLZ_Compressor.html_OodleLZ_Compressor_Leviathan')" class="paragraph">OodleLZ_Compressor_Leviathan</a> . Don't compress small buffers independently; instead
append them together and compress them as one chunk.
Do not set <a href="javascript:show('OodleLZ_CompressOptions.html','OodleLZ_CompressOptions.html_seekChunkReset')" class="paragraph">OodleLZ_CompressOptions:seekChunkReset</a> (make it false).
</p>
<p>Dial <a href="javascript:show('OodleLZ_CompressOptions.html','OodleLZ_CompressOptions.html_spaceSpeedTradeoffBytes')" class="paragraph">OodleLZ_CompressOptions:spaceSpeedTradeoffBytes</a> down. Perhaps try 32. This trades off decode
speed for smaller compressed files.
</p>
<p>2. If you want maximum decompress speed :
</p>
<p>Use <a href="javascript:show('OodleLZ_Compressor.html','OodleLZ_Compressor.html_OodleLZ_Compressor_Selkie')" class="paragraph">OodleLZ_Compressor_Selkie</a>.
</p>
<p>For threaded decodes, set <a href="javascript:show('OodleLZ_CompressOptions.html','OodleLZ_CompressOptions.html_seekChunkReset')" class="paragraph">OodleLZ_CompressOptions:seekChunkReset</a> to true. This
ensures that decompression can proceed in parallel.
</p>
<p>Make and transmit a <a href="javascript:show('OodleLZ_SeekTable.html')" class="paragraph">OodleLZ_SeekTable</a> table so that the parallel decoder can find its start points without scanning the data.
You can do this manually via <a href="javascript:show('OodleLZ_CreateSeekTable.html')" class="paragraph">OodleLZ_CreateSeekTable</a> , or you can use an OOZ or OOP file to do this for you.
</p>
<p>There are options in <a href="javascript:show('OodleLZ_CompressOptions.html')" class="paragraph">OodleLZ_CompressOptions</a> which can adjust decode speed, such as minMatchLen, dictionarySize,
and spaceSpeedTradeOffBytes. Contact Oodle support for advice on these.
</p>
<p>3. About manually setting up <a href="javascript:show('OodleLZ_CompressOptions.html')" class="paragraph">OodleLZ_CompressOptions</a> :
</p>
<p>Normally you should just use <a href="javascript:show('OodleLZ_CompressOptions_GetDefault.html')" class="paragraph">OodleLZ_CompressOptions_GetDefault</a> , but if you want the last bit of speed or compression ratio,
you can sometimes find some more win by playing with individuals options. (this is particularly true with unusual data that
does not fit well with the default heuristics).
</p>
<p><ul>
<li> <i>seekChunkReset</i> : makes chunks independent; hurts compression but allows parallel decompression, as well as seeking.
</ul></p>
<p><ul>
<li> <i>seekChunkLen</i> : sets the length of seek chunks. Generally you want this to be as large as possible,
while providing enough chunks to utilitize all worker threads. A good way to set it is to call <a href="javascript:show('OodleLZ_MakeSeekChunkLen.html')" class="paragraph">OodleLZ_MakeSeekChunkLen</a>
with a seek point count of 8 or so.
</ul></p>
<p><ul>
<li> <i>spaceSpeedTradeoffBytes</i> : controls the compressors decision about whether it should favor speed of decompression or
small size. It has units of bytes per time; roughly it's the number of bytes that must be saved in compression to
make a choice that hurts decode time by some fixed unit of time. The default is 256. For maximum speed of decompress you can set <i>spaceSpeedTradeoffBytes</i>
to a larger number (512). For maximum compression set <i>spaceSpeedTradeoffBytes</i> to a small number (32). In normal use
the values provided by <a href="javascript:show('OodleLZ_CompressOptions_GetDefault.html')" class="paragraph">OodleLZ_CompressOptions_GetDefault</a> are appropriate.
</ul></p>
<p><ul>
<li> <i>minMatchLen</i> : can be used to raise the minimum match length of a compressor (you can't make it lower than
the compressor's default). Increasing to 6 or 8 (for example) can sometimes be good for compression or decode speed
on some types of data, such as image prediction residuals.
</ul></p>
<p><ul>
<li> <i>dictionarySize</i> : can be used to limit the maximum offset, which may be useful for decode speed on devices with
small caches or slow RAM, and can be used to prepare data for sliding window decoding.
</ul></p>
<p><hr>
</p>
<p>If you specify <a href="javascript:show('OodleLZ_FuzzSafe.html','OodleLZ_FuzzSafe.html_OodleLZ_FuzzSafe_Yes')" class="paragraph">OodleLZ_FuzzSafe_Yes</a> then the output buffer will never be exceeded, even on corrupt data.
All the new compressors support Fuzz safe decoding, and it doesn't cost any decode speed. I recommend
always using <a href="javascript:show('OodleLZ_FuzzSafe.html','OodleLZ_FuzzSafe.html_OodleLZ_FuzzSafe_Yes')" class="paragraph">OodleLZ_FuzzSafe_Yes</a>
</p>
<p><hr>
</p>
<p>See also <a href="javascript:show('example_lz.html')" class="paragraph">example_lz : Example demonstrating LZ compression and decompression</a> , <a href="javascript:show('example_lz_simple.html')" class="paragraph">example_lz_simple : Example demonstrating very simple LZ memory->memory compression using only Oodle Core</a>, <a href="javascript:show('example_lz_overlap.html')" class="paragraph">example_lz_overlap : Example demonstrating parallel overlap with OodleLZ</a>, <a href="javascript:show('example_lz_chart.html')" class="paragraph">example_lz_chart : Example that makes a chart of OodleLZ options</a><br>&nbsp;<br> <table class=bar> <tr>
<td width=33% align=left><span class='arrowleft'></span><a href="javascript:show('OodleAPI_LZ.html')" class="paragraph">Core LZ compression</a></td><td width=33% align=center><span class='arrowup'></span><a href="javascript:show('OodleAPI_LZ.html')" class="paragraph">Core LZ compression</a></td><td width=33% align=right><span class='arrowright'></span><a href="javascript:show('OodleLZ_About_ThreadPhasedDecode.html')" class="paragraph">About OodleLZ ThreadPhased Decode</a></td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="OodleX_GetDefaultFileOps.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>OodleX_GetDefaultFileOps</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "OodleX_GetDefaultFileOps.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="OodleX_GetDefaultFileOps.html_backmenu">
<table class=dropmenu>
<tr><td><span class='arrowleft'></span>&nbsp;<a href="javascript:show('OodleX_GetOSFileOps.html')" class="paragraph">OodleX_GetOSFileOps</a></td></tr><tr><td><span class='arrowright'></span>&nbsp;<a href="javascript:show('OodleX_SetDefaultFileOps.html')" class="paragraph">OodleX_SetDefaultFileOps</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<div class=prototype><div class=prototype_header>// Function prototype:</div><pre>const <span class=prototype_type><a href="javascript:show('OodleXFileOpsVTable.html')" class="blue">OodleXFileOpsVTable</a></span> * <span class=prototype_type><a href="javascript:show('OodleX_GetDefaultFileOps.html')" class="blue">OodleX_GetDefaultFileOps</a></span>( );</pre></div><div class=discussion_heading>Discussion</div>Return the current <a href="javascript:show('OodleXFileOpsVTable.html')" class="paragraph">OodleXFileOpsVTable</a><div class=discussion_heading>Discussion</div>Contains the default file ops function vtable that is used whenever no other vtable is provided.
</p>
<p> This begins life equal to the vtable of <a href="javascript:show('OodleX_GetOSFileOps.html')" class="paragraph">OodleX_GetOSFileOps</a> , but can be changed.
</p>
<p> To mutate use <a href="javascript:show('OodleX_SetDefaultFileOps.html')" class="paragraph">OodleX_SetDefaultFileOps</a>
<br>&nbsp;<br> <table class=bar> <tr>
<td width=33% align=left><span class='arrowleft'></span><a href="javascript:show('OodleX_GetOSFileOps.html')" class="paragraph">OodleX_GetOSFileOps</a></td><td width=33% align=center><span class='arrowup'></span><a href="javascript:show('OodleXAPI_IOQ.html')" class="paragraph">OodleX low level async io</a></td><td width=33% align=right><span class='arrowright'></span><a href="javascript:show('OodleX_SetDefaultFileOps.html')" class="paragraph">OodleX_SetDefaultFileOps</a></td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="OODLEX_PATH_DELIM.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>OODLEX_PATH_DELIM</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "OODLEX_PATH_DELIM.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="OODLEX_PATH_DELIM.html_backmenu">
<table class=dropmenu>
<tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<div class=prototype><div class=prototype_header>// Preprocessor definition:</div><pre><span class=prototype_type>#define</span> <a href="javascript:show('OODLEX_PATH_DELIM.html')">OODLEX_PATH_DELIM</a> /\\</pre></div><div class=discussion_heading>Discussion</div> OODLEX_PATH_DELIM is either forward slash or back slash, whichever is preferred for the current OS.<div class=discussion_heading>Discussion</div> Oodle IO functions are path-delim agnostic. You only need this if you are using non-Oodle OS IO functions.
</p>
<p><br>&nbsp;<br> <table class=bar> <tr>
<td width=33% align=left><span class='arrowleft'></span><a href="javascript:show('OodleXAPI_Util.html')" class="paragraph">OodleX Utils</a></td><td width=33% align=center><span class='arrowup'></span><a href="javascript:show('OodleXAPI_Util.html')" class="paragraph">OodleX Utils</a></td><td width=33% align=right><span class='arrowright'></span><a href="javascript:show('OodleX_GetExtensionKey.html')" class="paragraph">OodleX_GetExtensionKey</a></td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="Oodle_About_Linux.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>About Oodle on Linux</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "Oodle_About_Linux.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="Oodle_About_Linux.html_backmenu">
<table class=dropmenu>
<tr><td><span class='arrowleft'></span>&nbsp;<a href="javascript:show('Oodle_About_XboxOne.html')" class="paragraph">About Oodle on Xbox One</a></td></tr><tr><td><span class='arrowup'></span>&nbsp;<a href="javascript:show('Oodle_About_Platforms.html')" class="paragraph">About Oodle on Platforms</a></td></tr><tr><td><span class='arrowright'></span>&nbsp;<a href="javascript:show('Oodle_About_IOS.html')" class="paragraph">About Oodle on IOS</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<P>
Oodle for Linux is provided as a lib. There are separate libs for 32 and 64 bit Linux :
</p>
<p><div class=prototype>
<PRE>
lib/liboo2corelinux.a
lib/liboo2extlinux.a
lib/liboo2corelinux64.a
lib/liboo2extlinux64.a
lib/liboo2corelinux.so.##
lib/liboo2extlinux.so.##
lib/liboo2corelinux64.so.##
lib/liboo2extlinux64.so.##
</PRE>
</div>
</p>
<p>where ## is the Oodle API major version number.
</p>
<p>Choose either 32 or 64 bit libs. You may use the static lib (.a) or shared library (.so).
You may use just oo2core for Oodle Core, or also use oo2ext for OodleX.
</p>
<p>You exe should link against the Oodle shared library with its major version number
(eg. liboo2corelinux.so.8) to ensure a compatible library is used. You can make a symbolic link
from liboo2corelinux.so to liboo2corelinux.so.8 so that -loo2corelinux can be used.
</p>
<p>The SO of OodleX also contains Core. If you use the OodleX SO do <b>not</b> use the Core SO !!
</p>
<p>The 64-bit build of Oodle is faster, so should be used when possible.
</p>
<p>The debug build of the Oodle lib is also provided. Generally the release build of Oodle should be linked
with all versions of your game (do not link the debug build of Oodle with the
debug build of your game typically). The debug build of Oodle is provided to help you track down problems.
</p>
<p>oo2core requires libm and libc and libstdc++. oo2core requires glibc version 2.3.4
</p>
<p>oo2ext has more system requirements.
</p>
<p>OodleX on Linux requires these standard libs to be linked in :
</p>
<p><div class=prototype>
<PRE>
-lm -lpthread -lrt -lstdc++
</PRE>
</div>
</p>
<p><hr>
</p>
<p>Oodle on Linux assumes SCHED_OTHER and doesn't try to do anything with thread priorities.
</p>
<p><hr>
</p>
<p>If you don't set a log file name yourself, OodleX for Linux tries to write a log file to "/var/log/oodle/" by default. If you don't want this, you
may disable logging or change the log location in <a href="javascript:show('OodleXInitOptions.html')" class="paragraph">OodleXInitOptions</a>. On most systems, Oodle will fail to
create the "oodle" subdir in "var/log/" due to lack of permissions; you must use an administrator account to
create that dir for Oodle (and make that dir writeable).
If Oodle fails to write the log to the desired location, it will instead write it to "." (current directory).<br>&nbsp;<br> <table class=bar> <tr>
<td width=33% align=left><span class='arrowleft'></span><a href="javascript:show('Oodle_About_XboxOne.html')" class="paragraph">About Oodle on Xbox One</a></td><td width=33% align=center><span class='arrowup'></span><a href="javascript:show('Oodle_About_Platforms.html')" class="paragraph">About Oodle on Platforms</a></td><td width=33% align=right><span class='arrowright'></span><a href="javascript:show('Oodle_About_IOS.html')" class="paragraph">About Oodle on IOS</a></td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="OodleXHandleAutoDelete.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>OodleXHandleAutoDelete</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "OodleXHandleAutoDelete.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="OodleXHandleAutoDelete.html_backmenu">
<table class=dropmenu>
<tr><td><span class='arrowleft'></span>&nbsp;<a href="javascript:show('OodleXStatus.html')" class="paragraph">OodleXStatus</a></td></tr><tr><td><span class='arrowright'></span>&nbsp;<a href="javascript:show('OodleXHandleKickDelayed.html')" class="paragraph">OodleXHandleKickDelayed</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<div class=prototype><div class=prototype_header>// Enumerant:</div><pre><span class=prototype_type>enum</span> <a href="javascript:show('OodleXHandleAutoDelete.html')">OodleXHandleAutoDelete</a>
{
&nbsp;&nbsp;&nbsp;&nbsp;OodleXHandleAutoDelete_No = 0,
&nbsp;&nbsp;&nbsp;&nbsp;OodleXHandleAutoDelete_Yes = 1,
&nbsp;&nbsp;&nbsp;&nbsp;OodleXHandleAutoDelete_Force32 = 0x40000000
};
</pre></div><div class=discussion_heading>Discussion</div> When you spawn an async task and get an OodleXHandle back to track the task, with a normal
OodleXHandleAutoDelete_No handle you have to ensure that the handle is deleted at some point
(typically by calling <a href="javascript:show('OodleX_Wait.html')" class="paragraph">OodleX_Wait</a> with <a href="javascript:show('OodleXHandleDeleteIfDone.html','OodleXHandleDeleteIfDone.html_OodleXHandleDeleteIfDone_Yes')" class="paragraph">OodleXHandleDeleteIfDone_Yes</a>).<div class=discussion_heading>Enumerants</div> <table> <tr> <td style='vertical-align: top;' class=paramname><a id="OodleXHandleAutoDelete.html_OodleXHandleAutoDelete_No" class=nohover>OodleXHandleAutoDelete_No</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> (default) handle lifetime will be managed by the client</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXHandleAutoDelete.html_OodleXHandleAutoDelete_Yes" class=nohover>OodleXHandleAutoDelete_Yes</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> handle will deleted itself when done</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXHandleAutoDelete.html_OodleXHandleAutoDelete_Force32" class=nohover>OodleXHandleAutoDelete_Force32</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc></td></tr></table><div class=discussion_heading>Discussion</div>Alternative you can make the handle self-deleting by creating it with the OodleXHandleAutoDelete_Yes option.
In that case you can still inspect the handle status with <a href="javascript:show('OodleX_GetStatus.html')" class="paragraph">OodleX_GetStatus</a> and <a href="javascript:show('OodleX_Wait.html')" class="paragraph">OodleX_Wait</a>, but when the handle completes
and deletes itself, you will get <a href="javascript:show('OodleXStatus.html','OodleXStatus.html_OodleXStatus_Invalid')" class="paragraph">OodleXStatus_Invalid</a>. You cannot detect Done vs. Error cases with an OodleXHandleAutoDelete_Yes
handle.
<br>&nbsp;<br> <table class=bar> <tr>
<td width=33% align=left><span class='arrowleft'></span><a href="javascript:show('OodleXStatus.html')" class="paragraph">OodleXStatus</a></td><td width=33% align=center><span class='arrowup'></span><a href="javascript:show('OodleXAPI_Handle.html')" class="paragraph">OodleX async handle operations</a></td><td width=33% align=right><span class='arrowright'></span><a href="javascript:show('OodleXHandleKickDelayed.html')" class="paragraph">OodleXHandleKickDelayed</a></td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="OodleXLogCallbackRetRet.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>OodleXLogCallbackRetRet</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "OodleXLogCallbackRetRet.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="OodleXLogCallbackRetRet.html_backmenu">
<table class=dropmenu>
<tr><td><span class='arrowleft'></span>&nbsp;<a href="javascript:show('OodleXLog_VerboseLevel.html')" class="paragraph">OodleXLog_VerboseLevel</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<div class=prototype><div class=prototype_header>// Enumerant:</div><pre><span class=prototype_type>enum</span> <a href="javascript:show('OodleXLogCallbackRetRet.html')">OodleXLogCallbackRetRet</a>
{
&nbsp;&nbsp;&nbsp;&nbsp;OodleXLogCallbackRetRet_Continue = 1,
&nbsp;&nbsp;&nbsp;&nbsp;OodleXLogCallbackRetRet_Terminate = 0,
&nbsp;&nbsp;&nbsp;&nbsp;OodleXLogCallbackRetRet_Force32 = 0x40000000
};
</pre></div><div class=discussion_heading>Discussion</div> Return value for <a href="javascript:show('OodleXLogCallbackRet.html')" class="paragraph">OodleXLogCallbackRet</a> <div class=discussion_heading>Enumerants</div> <table> <tr> <td style='vertical-align: top;' class=paramname><a id="OodleXLogCallbackRetRet.html_OodleXLogCallbackRetRet_Continue" class=nohover>OodleXLogCallbackRetRet_Continue</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> output to other log States</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXLogCallbackRetRet.html_OodleXLogCallbackRetRet_Terminate" class=nohover>OodleXLogCallbackRetRet_Terminate</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> suppress further logging of this message</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXLogCallbackRetRet.html_OodleXLogCallbackRetRet_Force32" class=nohover>OodleXLogCallbackRetRet_Force32</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc></td></tr></table><br>&nbsp;<br> <table class=bar> <tr>
<td width=33% align=left><span class='arrowleft'></span><a href="javascript:show('OodleXLog_VerboseLevel.html')" class="paragraph">OodleXLog_VerboseLevel</a></td><td width=33% align=center><span class='arrowup'></span><a href="javascript:show('OodleXAPI_Debug.html')" class="paragraph">OodleX Debug aids</a></td><td width=33% align=right><span class='arrowright'></span><a href="javascript:show('OodleXLog_SetState.html')" class="paragraph">OodleXLog_SetState</a></td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="OodleLZDecoder_MakeValidCircularWindowSize.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>OodleLZDecoder_MakeValidCircularWindowSize</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "OodleLZDecoder_MakeValidCircularWindowSize.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="OodleLZDecoder_MakeValidCircularWindowSize.html_backmenu">
<table class=dropmenu>
<tr><td><span class='arrowleft'></span>&nbsp;<a href="javascript:show('OodleLZDecoder_DecodeSome.html')" class="paragraph">OodleLZDecoder_DecodeSome</a></td></tr><tr><td><span class='arrowright'></span>&nbsp;<a href="javascript:show('OodleLZ_MakeSeekChunkLen.html')" class="paragraph">OodleLZ_MakeSeekChunkLen</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<div class=prototype><div class=prototype_header>// Function prototype:</div><pre>OO_S32 <span class=prototype_type><a href="javascript:show('OodleLZDecoder_MakeValidCircularWindowSize.html')" class="blue">OodleLZDecoder_MakeValidCircularWindowSize</a></span>( <span class=prototype_type><a href="javascript:show('OodleLZ_Compressor.html')" class="blue">OodleLZ_Compressor</a></span> compressor,
OO_S32 minWindowSize OODEFAULT( 0 ) );</pre></div><div class=discussion_heading>Discussion</div>Get a valid "Window" size for an LZ<div class=discussion_heading>Parameters</div> <table> <tr> <td style='vertical-align: top;' class=paramname><a id="OodleLZDecoder_MakeValidCircularWindowSize.html_compressor" class=nohover>compressor</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> which compressor you will be decoding
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleLZDecoder_MakeValidCircularWindowSize.html_minWindowSize" class=nohover>minWindowSize</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> (optional) minimum size of the window
</td></tr></table><div class=discussion_heading>Discussion</div></p>
<p> NOTE: circular windows are deprecated as of 2.9.0
</p>
<p> Most common usage is OodleLZDecoder_MakeValidCircularWindowSize(0) to get the minimum window size.
</p>
<p> Only compressors which pass <a href="javascript:show('OodleLZ_Compressor_CanDecodeInCircularWindow.html')" class="paragraph">OodleLZ_Compressor_CanDecodeInCircularWindow</a> can be decoded in a circular window.
</p>
<p> WARNING : this is NOT the size to malloc the window! you need to call <a href="javascript:show('OodleLZ_GetDecodeBufferSize.html')" class="paragraph">OodleLZ_GetDecodeBufferSize</a>() and
pass in the window size to get the malloc size.
<br>&nbsp;<br> <table class=bar> <tr>
<td width=33% align=left><span class='arrowleft'></span><a href="javascript:show('OodleLZDecoder_DecodeSome.html')" class="paragraph">OodleLZDecoder_DecodeSome</a></td><td width=33% align=center><span class='arrowup'></span><a href="javascript:show('OodleAPI_LZ_Compressors.html')" class="paragraph">OodleAPI_LZ_Compressors</a></td><td width=33% align=right><span class='arrowright'></span><a href="javascript:show('OodleLZ_MakeSeekChunkLen.html')" class="paragraph">OodleLZ_MakeSeekChunkLen</a></td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="OodleXHandleEvent_Alloc.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>OodleXHandleEvent_Alloc</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "OodleXHandleEvent_Alloc.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="OodleXHandleEvent_Alloc.html_backmenu">
<table class=dropmenu>
<tr><td><span class='arrowleft'></span>&nbsp;<a href="javascript:show('OodleX_GetAvailableAsyncSelect.html')" class="paragraph">OodleX_GetAvailableAsyncSelect</a></td></tr><tr><td><span class='arrowright'></span>&nbsp;<a href="javascript:show('OodleXHandleEvent_SetDone.html')" class="paragraph">OodleXHandleEvent_SetDone</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<div class=prototype><div class=prototype_header>// Function prototype:</div><pre><span class=prototype_type><a href="javascript:show('OodleXHandle.html')" class="blue">OodleXHandle</a></span> <span class=prototype_type><a href="javascript:show('OodleXHandleEvent_Alloc.html')" class="blue">OodleXHandleEvent_Alloc</a></span>( <span class=prototype_type><a href="javascript:show('OodleXHandleAutoDelete.html')" class="blue">OodleXHandleAutoDelete</a></span> autoDelete OODEFAULT( OodleXHandleAutoDelete_No ) );</pre></div><div class=discussion_heading>Discussion</div>Allocate an <a href="javascript:show('OodleXHandle.html')" class="paragraph">OodleXHandle</a> to a simple data-less event <div class=discussion_heading>Parameters</div> <table> <tr> <td style='vertical-align: top;' class=paramname><a id="OodleXHandleEvent_Alloc.html_autoDelete" class=nohover>autoDelete</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> (optional) set the <a href="javascript:show('OodleXHandleAutoDelete.html')" class="paragraph">OodleXHandleAutoDelete</a> of the handle
</td></tr></table><div class=discussion_heading>Return Value</div> <table> <tr> <td style='vertical-align: top;' class=paramname><a id="OodleXHandleEvent_Alloc.html_return" class=nohover>return</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> the handle
</td></tr></table><div class=discussion_heading>Discussion</div></p>
<p> An "event" simply stores a transition from Pending -> Done/Error and can be used to wait on something you can trigger.
<br>&nbsp;<br> <table class=bar> <tr>
<td width=33% align=left><span class='arrowleft'></span><a href="javascript:show('OodleX_GetAvailableAsyncSelect.html')" class="paragraph">OodleX_GetAvailableAsyncSelect</a></td><td width=33% align=center><span class='arrowup'></span><a href="javascript:show('OodleXAPI_Handle.html')" class="paragraph">OodleX async handle operations</a></td><td width=33% align=right><span class='arrowright'></span><a href="javascript:show('OodleXHandleEvent_SetDone.html')" class="paragraph">OodleXHandleEvent_SetDone</a></td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="OodleLZ_Decompress.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>OodleLZ_Decompress</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "OodleLZ_Decompress.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="OodleLZ_Decompress.html_backmenu">
<table class=dropmenu>
<tr><td><span class='arrowleft'></span>&nbsp;<a href="javascript:show('OodleLZ_Compress.html')" class="paragraph">OodleLZ_Compress</a></td></tr><tr><td><span class='arrowright'></span>&nbsp;<a href="javascript:show('OodleLZDecoder_Create.html')" class="paragraph">OodleLZDecoder_Create</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<div class=prototype><div class=prototype_header>// Function prototype:</div><pre>OO_SINTa <span class=prototype_type><a href="javascript:show('OodleLZ_Decompress.html')" class="blue">OodleLZ_Decompress</a></span>( const void * compBuf,
OO_SINTa compBufSize,
void * rawBuf,
OO_SINTa rawLen,
<span class=prototype_type><a href="javascript:show('OodleLZ_FuzzSafe.html')" class="blue">OodleLZ_FuzzSafe</a></span> fuzzSafe OODEFAULT( OodleLZ_FuzzSafe_Yes ),
<span class=prototype_type><a href="javascript:show('OodleLZ_CheckCRC.html')" class="blue">OodleLZ_CheckCRC</a></span> checkCRC OODEFAULT( OodleLZ_CheckCRC_No ),
<span class=prototype_type><a href="javascript:show('OodleLZ_Verbosity.html')" class="blue">OodleLZ_Verbosity</a></span> verbosity OODEFAULT( OodleLZ_Verbosity_None ),
void * decBufBase OODEFAULT( NULL ),
OO_SINTa decBufSize OODEFAULT( 0 ),
<span class=prototype_type><a href="javascript:show('OodleDecompressCallback.html')" class="blue">OodleDecompressCallback</a></span> * fpCallback OODEFAULT( NULL ),
void * callbackUserData OODEFAULT( NULL ),
void * decoderMemory OODEFAULT( NULL ),
OO_SINTa decoderMemorySize OODEFAULT( 0 ),
<span class=prototype_type><a href="javascript:show('OodleLZ_Decode_ThreadPhase.html')" class="blue">OodleLZ_Decode_ThreadPhase</a></span> threadPhase OODEFAULT( OodleLZ_Decode_Unthreaded ) );</pre></div><div class=discussion_heading>Discussion</div>Decompress a some data from memory to memory, synchronously.<div class=discussion_heading>Parameters</div> <table> <tr> <td style='vertical-align: top;' class=paramname><a id="OodleLZ_Decompress.html_compBuf" class=nohover>compBuf</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> pointer to compressed data
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleLZ_Decompress.html_compBufSize" class=nohover>compBufSize</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> number of compressed bytes available (must be greater or equal to the number consumed)
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleLZ_Decompress.html_rawBuf" class=nohover>rawBuf</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> pointer to output uncompressed data into
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleLZ_Decompress.html_rawLen" class=nohover>rawLen</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> number of uncompressed bytes to output
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleLZ_Decompress.html_fuzzSafe" class=nohover>fuzzSafe</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> (optional) should the decode fail if it contains non-fuzz safe codecs?
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleLZ_Decompress.html_checkCRC" class=nohover>checkCRC</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> (optional) if data could be corrupted and you want to know about it, pass OodleLZ_CheckCRC_Yes
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleLZ_Decompress.html_verbosity" class=nohover>verbosity</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> (optional) if not OodleLZ_Verbosity_None, logs some info
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleLZ_Decompress.html_decBufBase" class=nohover>decBufBase</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> (optional) if not NULL, provides preceding data to prime the dictionary; must be contiguous with rawBuf, the data between the pointers <i>dictionaryBase</i> and <i>rawBuf</i> is used as the preconditioning data. The exact same precondition must be passed to encoder and decoder. The decBufBase must be a reset point.
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleLZ_Decompress.html_decBufSize" class=nohover>decBufSize</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> (optional) size of decode buffer starting at decBufBase, if 0, <i>rawLen</i> is assumed
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleLZ_Decompress.html_fpCallback" class=nohover>fpCallback</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> (optional) OodleDecompressCallback to call incrementally as decode proceeds
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleLZ_Decompress.html_callbackUserData" class=nohover>callbackUserData</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> (optional) passed as userData to fpCallback
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleLZ_Decompress.html_decoderMemory" class=nohover>decoderMemory</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> (optional) pre-allocated memory for the Decoder, of size <i>decoderMemorySize</i>
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleLZ_Decompress.html_decoderMemorySize" class=nohover>decoderMemorySize</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> (optional) size of the buffer at <i>decoderMemory</i>; must be at least <a href="javascript:show('OodleLZDecoder_MemorySizeNeeded.html')" class="paragraph">OodleLZDecoder_MemorySizeNeeded</a> bytes to be used
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleLZ_Decompress.html_threadPhase" class=nohover>threadPhase</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> (optional) for threaded decode; see <a href="javascript:show('OodleLZ_About_ThreadPhasedDecode.html')" class="paragraph">About OodleLZ ThreadPhased Decode</a> (default OodleLZ_Decode_Unthreaded)
</td></tr></table><div class=discussion_heading>Return Value</div> <table> <tr> <td style='vertical-align: top;' class=paramname><a id="OodleLZ_Decompress.html_return" class=nohover>return</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> the number of decompressed bytes output, <a href="javascript:show('OODLELZ_FAILED.html')" class="paragraph">OODLELZ_FAILED</a> (0) if none can be decompressed
</td></tr></table><div class=discussion_heading>Discussion</div></p>
<p> Decodes data encoded with any <a href="javascript:show('OodleLZ_Compressor.html')" class="paragraph">OodleLZ_Compressor</a>.
</p>
<p> Note : <i>rawLen</i> must be the actual number of bytes to output, the same as the number that were encoded with the corresponding
OodleLZ_Compress size. You must store this somewhere in your own header and pass it in to this call. <i>compBufSize</i> does NOT
need to be the exact number of compressed bytes, is the number of bytes available in the buffer, it must be greater or equal to
the actual compressed length.
</p>
<p> Note that the new compressors (Kraken, Mermaid, Selkie, Leviathan) are all fuzz safe and you can use OodleLZ_FuzzSafe_Yes
with them and no padding of the decode target buffer.
</p>
<p> If checkCRC is OodleLZ_CheckCRC_Yes, then corrupt data will be detected and the decode aborted.
If checkCRC is OodleLZ_CheckCRC_No, then corruption might result in invalid data, but no detection of any error (garbage in, garbage out).
</p>
<p> If corruption is possible, <i>fuzzSafe</i> is No and <i>checkCRC</i> is OodleLZ_CheckCRC_No, <a href="javascript:show('OodleLZ_GetDecodeBufferSize.html')" class="paragraph">OodleLZ_GetDecodeBufferSize</a> must be used to allocate
<i>rawBuf</i> large enough to prevent overrun.
</p>
<p> With the legacy LZB16 codec, <a href="javascript:show('OodleLZ_GetDecodeBufferSize.html')" class="paragraph">OodleLZ_GetDecodeBufferSize</a> should be used to ensure <i>rawBuf</i> is large enough,
even when corruption is not possible (when fuzzSafe is No).
</p>
<p> <i>compBuf</i> and <i>rawBuf</i> are allowed to overlap for "in place" decoding, but then <i>rawBuf</i> must be allocated to
the size given by <a href="javascript:show('OodleLZ_GetInPlaceDecodeBufferSize.html')" class="paragraph">OodleLZ_GetInPlaceDecodeBufferSize</a> , and the compressed data must be at the end of that buffer.
</p>
<p> An easy way to take the next step to parallel decoding is with <a href="javascript:show('OodleXLZ_Decompress_MakeSeekTable_Wide_Async.html')" class="paragraph">OodleXLZ_Decompress_MakeSeekTable_Wide_Async</a> (in the Oodle2 Ext lib)
</p>
<p> NOTE : the return value is the <b>total</b> number of decompressed bytes output so far. If rawBuf is > decBufBase, that means
the initial inset of (rawBuf - decBufBase) is included! (eg. you won't just get <i>rawLen</i>)
</p>
<p> If <i>decBufBase</i> is provided, the backup distance from <i>rawBuf</i> must be a multiple of <a href="javascript:show('OODLELZ_BLOCK_LEN.html')" class="paragraph">OODLELZ_BLOCK_LEN</a>
</p>
<p> About fuzz safety:
</p>
<p> OodleLZ_Decompress is guaranteed not to crash even if the data is corrupted when <i>fuzzSafe</i> is set to OodleLZ_FuzzSafe_Yes.
When <i>fuzzSafe</i> is Yes, the target buffer (<i>rawBuf</i> and <i>rawLen</i>) will never be overrun. Note that corrupted data might not
be detected (the return value might indicate success).
</p>
<p> Fuzz Safe decodes will not crash on corrupt data. They may or may not return failure, and produce garbage output.
</p>
<p> Fuzz safe decodes will not read out of bounds. They won't put data on the stack or previously in memory
into the output buffer.
</p>
<p> Fuzz safe decodes will not output more than the uncompressed size. (eg. the output buffer does not need to
be padded like OodleLZ_GetDecodeBufferSize)
</p>
<p> If you ask for a fuzz safe decode and the compressor doesn't satisfy OodleLZ_Compressor_CanDecodeFuzzSafe
then it will return failure.
</p>
<p> The <i>fuzzSafe</i> argument should always be OodleLZ_FuzzSafe_Yes as of Oodle 2.9.0 ; older compressors did not
support fuzz safety but they now all do.
</p>
<p> Use of OodleLZ_FuzzSafe_No is deprecated.
</p>
<p><br>&nbsp;<br> <table class=bar> <tr>
<td width=33% align=left><span class='arrowleft'></span><a href="javascript:show('OodleLZ_Compress.html')" class="paragraph">OodleLZ_Compress</a></td><td width=33% align=center><span class='arrowup'></span><a href="javascript:show('OodleAPI_LZ_Compressors.html')" class="paragraph">OodleAPI_LZ_Compressors</a></td><td width=33% align=right><span class='arrowright'></span><a href="javascript:show('OodleLZDecoder_Create.html')" class="paragraph">OodleLZDecoder_Create</a></td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="OodleXIOQ_LogLastError.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>OodleXIOQ_LogLastError</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "OodleXIOQ_LogLastError.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="OodleXIOQ_LogLastError.html_backmenu">
<table class=dropmenu>
<tr><td><span class='arrowleft'></span>&nbsp;<a href="javascript:show('OodleXIOQ_ClearError.html')" class="paragraph">OodleXIOQ_ClearError</a></td></tr><tr><td><span class='arrowright'></span>&nbsp;<a href="javascript:show('OodleXIOQ_GetOSHandle.html')" class="paragraph">OodleXIOQ_GetOSHandle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<div class=prototype><div class=prototype_header>// Function prototype:</div><pre>OO_BOOL <span class=prototype_type><a href="javascript:show('OodleXIOQ_LogLastError.html')" class="blue">OodleXIOQ_LogLastError</a></span>( <span class=prototype_type><a href="javascript:show('OodleXIOQFile.html')" class="blue">OodleXIOQFile</a></span> file );</pre></div><div class=discussion_heading>Discussion</div>Log the last error on a file<div class=discussion_heading>Parameters</div> <table> <tr> <td style='vertical-align: top;' class=paramname><a id="OodleXIOQ_LogLastError.html_file" class=nohover>file</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> the IOQFile to query
</td></tr></table><div class=discussion_heading>Return Value</div> <table> <tr> <td style='vertical-align: top;' class=paramname><a id="OodleXIOQ_LogLastError.html_return" class=nohover>return</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> true if any error was logged
</td></tr></table><div class=discussion_heading>Discussion</div></p>
<p> Calls <a href="javascript:show('OodleXIOQ_GetLastError.html')" class="paragraph">OodleXIOQ_GetLastError</a> and <a href="javascript:show('OodleXIOQ_LogLastError.html')" class="paragraph">OodleXIOQ_LogLastError</a>
<br>&nbsp;<br> <table class=bar> <tr>
<td width=33% align=left><span class='arrowleft'></span><a href="javascript:show('OodleXIOQ_ClearError.html')" class="paragraph">OodleXIOQ_ClearError</a></td><td width=33% align=center><span class='arrowup'></span><a href="javascript:show('OodleXAPI_IOQ.html')" class="paragraph">OodleX low level async io</a></td><td width=33% align=right><span class='arrowright'></span><a href="javascript:show('OodleXIOQ_GetOSHandle.html')" class="paragraph">OodleXIOQ_GetOSHandle</a></td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="OodleXMallocVTable.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>OodleXMallocVTable</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "OodleXMallocVTable.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="OodleXMallocVTable.html_backmenu">
<table class=dropmenu>
<tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<div class=prototype><div class=prototype_header>// Structure definition:</div><pre><span class=prototype_type>struct</span> <a href="javascript:show('OodleXMallocVTable.html')">OodleXMallocVTable</a>
{
&nbsp;&nbsp;&nbsp;&nbsp;void * m_context;
&nbsp;&nbsp;&nbsp;&nbsp;void * (OODLE_CALLBACK *m_pMalloc)( void * context, OO_SINTa bytes );
&nbsp;&nbsp;&nbsp;&nbsp;void * (OODLE_CALLBACK *m_pMallocAligned)( void * context, OO_SINTa bytes , OO_S32 alignment );
&nbsp;&nbsp;&nbsp;&nbsp;void (OODLE_CALLBACK *m_pFree)(void * context, void * ptr);
&nbsp;&nbsp;&nbsp;&nbsp;void (OODLE_CALLBACK *m_pFreeSized)(void * context, void * ptr, OO_SINTa bytes);
&nbsp;&nbsp;&nbsp;&nbsp;OO_S32 m_bigAlignment;
&nbsp;&nbsp;&nbsp;&nbsp;void * (OODLE_CALLBACK *m_pMallocBig)(void * context, OO_SINTa bytes);
&nbsp;&nbsp;&nbsp;&nbsp;void (OODLE_CALLBACK *m_pFreeBig) (void * context, void * ptr);
&nbsp;&nbsp;&nbsp;&nbsp;OO_BOOL (OODLE_CALLBACK *m_pValidatePointer)(void * context, void * ptr, OO_SINTa bytes);
};
</pre></div><div class=discussion_heading>Discussion</div></p>
<p> Function pointer table used to install the OodleX memory allocation functions<div class=discussion_heading>Members</div> <table> <tr> <td style='vertical-align: top;' class=paramname><a id="OodleXMallocVTable.html_m_context" class=nohover>m_context</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> provided context pointer will be passed to the function pointers</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXMallocVTable.html_m_pMalloc" class=nohover>m_pMalloc</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> must return OODLE_MALLOC_MINIMUM_ALIGNMENT aligned memory</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXMallocVTable.html_m_pMallocAligned" class=nohover>m_pMallocAligned</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> alignment will always be power of two</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXMallocVTable.html_m_pFree" class=nohover>m_pFree</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> must be able to free pointers from m_pMalloc or m_pMallocAligned</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXMallocVTable.html_m_pFreeSized" class=nohover>m_pFreeSized</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> use size to make free faster</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXMallocVTable.html_m_bigAlignment" class=nohover>m_bigAlignment</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> indicates the alignment provided by MallocBig ; must be a multiple of <a href="javascript:show('OODLEX_IO_MAX_ALIGNMENT.html')" class="paragraph">OODLEX_IO_MAX_ALIGNMENT</a> for OodleX</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXMallocVTable.html_m_pMallocBig" class=nohover>m_pMallocBig</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> must return memory aligned to m_bigAlignment</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXMallocVTable.html_m_pFreeBig" class=nohover>m_pFreeBig</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> free a pointer allocated by m_pMallocBig</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXMallocVTable.html_m_pValidatePointer" class=nohover>m_pValidatePointer</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> check on an allocation</td></tr></table><div class=discussion_heading>Discussion</div> </p>
<p> Use <a href="javascript:show('OodleXMalloc_InstallVTable.html')" class="paragraph">OodleXMalloc_InstallVTable</a> to register a vtable as the one you want OodleX to use.
More commonly let <a href="javascript:show('OodleX_Init.html')" class="paragraph">OodleX_Init</a> set one for you.
<br>&nbsp;<br> <table class=bar> <tr>
<td width=33% align=left><span class='arrowleft'></span><a href="javascript:show('OodleXMalloc_OS_Options.html')" class="paragraph">OodleXMalloc_OS_Options</a></td><td width=33% align=center><span class='arrowup'></span><a href="javascript:show('OodleXAPI_Malloc.html')" class="paragraph">OodleX Memory Allocators</a></td><td width=33% align=right><span class='arrowright'></span><a href="javascript:show('OodleXMalloc_InstallVTable.html')" class="paragraph">OodleXMalloc_InstallVTable</a></td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="Oodle_UsageWarnings.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>Oodle_UsageWarnings</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "Oodle_UsageWarnings.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="Oodle_UsageWarnings.html_backmenu">
<table class=dropmenu>
<tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<div class=prototype><div class=prototype_header>// Enumerant:</div><pre><span class=prototype_type>enum</span> <a href="javascript:show('Oodle_UsageWarnings.html')">Oodle_UsageWarnings</a>
{
&nbsp;&nbsp;&nbsp;&nbsp;Oodle_UsageWarnings_Enabled = 0,
&nbsp;&nbsp;&nbsp;&nbsp;Oodle_UsageWarnings_Disabled = 1,
&nbsp;&nbsp;&nbsp;&nbsp;Oodle_UsageWarnings_Force32 = 0x40000000
};
</pre></div><div class=discussion_heading>Discussion</div> Whether Oodle usage warnings are enable or disabled. <br>&nbsp;<br> <table class=bar> <tr>
<td width=33% align=left><span class='arrowleft'></span><a href="javascript:show('OodleNetworkVersion.html')" class="paragraph">OodleNetworkVersion</a></td><td width=33% align=center><span class='arrowup'></span><a href="javascript:show('OodleAPI_Base.html')" class="paragraph">Core Base</a></td><td width=33% align=right><span class='arrowright'></span><a href="javascript:show('OodleConfigValues.html')" class="paragraph">OodleConfigValues</a></td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="OodleLZ_CreateSeekTable.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>OodleLZ_CreateSeekTable</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "OodleLZ_CreateSeekTable.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="OodleLZ_CreateSeekTable.html_backmenu">
<table class=dropmenu>
<tr><td><span class='arrowleft'></span>&nbsp;<a href="javascript:show('OodleLZ_FillSeekTable.html')" class="paragraph">OodleLZ_FillSeekTable</a></td></tr><tr><td><span class='arrowright'></span>&nbsp;<a href="javascript:show('OodleLZ_FreeSeekTable.html')" class="paragraph">OodleLZ_FreeSeekTable</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<div class=prototype><div class=prototype_header>// Function prototype:</div><pre><span class=prototype_type><a href="javascript:show('OodleLZ_SeekTable.html')" class="blue">OodleLZ_SeekTable</a></span> * <span class=prototype_type><a href="javascript:show('OodleLZ_CreateSeekTable.html')" class="blue">OodleLZ_CreateSeekTable</a></span>( <span class=prototype_type><a href="javascript:show('OodleLZSeekTable_Flags.html')" class="blue">OodleLZSeekTable_Flags</a></span> flags,
OO_S32 seekChunkLen,
const void * rawBuf,
OO_SINTa rawLen,
const void * compBuf,
OO_SINTa compLen );</pre></div><div class=discussion_heading>Discussion</div>allocate a table, then scan compressed LZ stream to fill the seek table<div class=discussion_heading>Parameters</div> <table> <tr> <td style='vertical-align: top;' class=paramname><a id="OodleLZ_CreateSeekTable.html_flags" class=nohover>flags</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> options
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleLZ_CreateSeekTable.html_seekChunkLen" class=nohover>seekChunkLen</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> the length of a seek chunk (eg from <a href="javascript:show('OodleLZ_MakeSeekChunkLen.html')" class="paragraph">OodleLZ_MakeSeekChunkLen</a>)
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleLZ_CreateSeekTable.html_rawBuf" class=nohover>rawBuf</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> (optional) uncompressed buffer; used to compute the <i>rawCRCs</i> member of <a href="javascript:show('OodleLZ_SeekTable.html')" class="paragraph">OodleLZ_SeekTable</a>
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleLZ_CreateSeekTable.html_rawLen" class=nohover>rawLen</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> size of rawBuf
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleLZ_CreateSeekTable.html_compBuf" class=nohover>compBuf</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> compressed buffer
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleLZ_CreateSeekTable.html_compLen" class=nohover>compLen</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> size of compBuf
</td></tr></table><div class=discussion_heading>Return Value</div> <table> <tr> <td style='vertical-align: top;' class=paramname><a id="OodleLZ_CreateSeekTable.html_return" class=nohover>return</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> pointer to table if succeeded, null if failed
</td></tr></table><div class=discussion_heading>Discussion</div></p>
<p> Same as <a href="javascript:show('OodleLZ_FillSeekTable.html')" class="paragraph">OodleLZ_FillSeekTable</a> , but allocates the memory for you. Use <a href="javascript:show('OodleLZ_FreeSeekTable.html')" class="paragraph">OodleLZ_FreeSeekTable</a> to free.
</p>
<p> <i>seekChunkLen</i> must be a multiple of <a href="javascript:show('OODLELZ_BLOCK_LEN.html')" class="paragraph">OODLELZ_BLOCK_LEN</a>.
<i>seekChunkLen</i> must match what was in CompressOptions when the buffer was made, or any integer multiple thereof.
</p>
<p><br>&nbsp;<br> <table class=bar> <tr>
<td width=33% align=left><span class='arrowleft'></span><a href="javascript:show('OodleLZ_FillSeekTable.html')" class="paragraph">OodleLZ_FillSeekTable</a></td><td width=33% align=center><span class='arrowup'></span><a href="javascript:show('OodleAPI_LZ_Compressors.html')" class="paragraph">OodleAPI_LZ_Compressors</a></td><td width=33% align=right><span class='arrowright'></span><a href="javascript:show('OodleLZ_FreeSeekTable.html')" class="paragraph">OodleLZ_FreeSeekTable</a></td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="OodleX_SetHandleAutoDelete.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>OodleX_SetHandleAutoDelete</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "OodleX_SetHandleAutoDelete.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="OodleX_SetHandleAutoDelete.html_backmenu">
<table class=dropmenu>
<tr><td><span class='arrowleft'></span>&nbsp;<a href="javascript:show('OodleX_WaitDoneAllPending.html')" class="paragraph">OodleX_WaitDoneAllPending</a></td></tr><tr><td><span class='arrowright'></span>&nbsp;<a href="javascript:show('OodleX_GetAvailableAsyncSelect.html')" class="paragraph">OodleX_GetAvailableAsyncSelect</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<div class=prototype><div class=prototype_header>// Function prototype:</div><pre><span class=prototype_type><a href="javascript:show('OodleXStatus.html')" class="blue">OodleXStatus</a></span> <span class=prototype_type><a href="javascript:show('OodleX_SetHandleAutoDelete.html')" class="blue">OodleX_SetHandleAutoDelete</a></span>( <span class=prototype_type><a href="javascript:show('OodleXHandle.html')" class="blue">OodleXHandle</a></span> h,
<span class=prototype_type><a href="javascript:show('OodleXHandleAutoDelete.html')" class="blue">OodleXHandleAutoDelete</a></span> autoDelete );</pre></div><div class=discussion_heading>Discussion</div>change handle lifetime management <div class=discussion_heading>Parameters</div> <table> <tr> <td style='vertical-align: top;' class=paramname><a id="OodleX_SetHandleAutoDelete.html_h" class=nohover>h</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> OodleXHandle weak reference
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleX_SetHandleAutoDelete.html_autoDelete" class=nohover>autoDelete</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> if OodleXHandleAutoDelete_Yes, the handle deletes itself when not pending
</td></tr></table><div class=discussion_heading>Discussion</div></p>
<p> Handles that are <a href="javascript:show('OodleXHandleAutoDelete.html','OodleXHandleAutoDelete.html_OodleXHandleAutoDelete_No')" class="paragraph">OodleXHandleAutoDelete_No</a> must be deleted or they will leak. The normal way to
delete them is by calling <a href="javascript:show('OodleX_Wait.html')" class="paragraph">OodleX_Wait</a> with <a href="javascript:show('OodleXHandleDeleteIfDone.html','OodleXHandleDeleteIfDone.html_OodleXHandleDeleteIfDone_Yes')" class="paragraph">OodleXHandleDeleteIfDone_Yes</a> .
</p>
<p> A handle that deletes itself when done will then report <a href="javascript:show('OodleXStatus.html','OodleXStatus.html_OodleXStatus_Invalid')" class="paragraph">OodleXStatus_Invalid</a> to queries, because it no longer exists.
</p>
<p> If you change a handle to OodleXHandleAutoDelete_Yes and it is already done, this function
will delete it immediately, and the returned Status will not be <a href="javascript:show('OodleXStatus.html','OodleXStatus.html_OodleXStatus_Pending')" class="paragraph">OodleXStatus_Pending</a>.
<br>&nbsp;<br> <table class=bar> <tr>
<td width=33% align=left><span class='arrowleft'></span><a href="javascript:show('OodleX_WaitDoneAllPending.html')" class="paragraph">OodleX_WaitDoneAllPending</a></td><td width=33% align=center><span class='arrowup'></span><a href="javascript:show('OodleXAPI_Handle.html')" class="paragraph">OodleX async handle operations</a></td><td width=33% align=right><span class='arrowright'></span><a href="javascript:show('OodleX_GetAvailableAsyncSelect.html')" class="paragraph">OodleX_GetAvailableAsyncSelect</a></td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="OodleExtAPI.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>Oodle2 Ext API Documentation</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "OodleExtAPI.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="OodleExtAPI.html_backmenu">
<table class=dropmenu>
<tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<ul class='TOCItem'>
<li><span onClick="HandleClick(event, null); return false" class='TOCGroup closedbook_icon'></span>&nbsp;<a href="javascript:show('OodleXAPI_LZ.html')">OodleX LZ compression</a></li>
<ul style="display:none" class='TOCItem'>
<li><span onClick="HandleClick(event, null); return false" class='TOCGroup closedbook_icon'></span>&nbsp;<a href="javascript:show('OodleXAPI_LZ_Async.html')">OodleXAPI_LZ_Async</a></li>
<ul style="display:none" class='TOCItem'>
<li><span onClick="HandleClick(event, null); return false" class='TOCGroup closedbook_icon'></span>&nbsp;Structures</li>
<ul style="display:none" class='TOCItem'>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleDecompressCallback_WriteFile_Data.html')">OodleDecompressCallback_WriteFile_Data</a></li>
</ul>
<li><span onClick="HandleClick(event, null); return false" class='TOCGroup closedbook_icon'></span>&nbsp;Functions</li>
<ul style="display:none" class='TOCItem'>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleXLZ_Decompress_ThreadPhased_Narrow_Async.html')">OodleXLZ_Decompress_ThreadPhased_Narrow_Async</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleXLZ_Decompress_Narrow_Async.html')">OodleXLZ_Decompress_Narrow_Async</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleXLZ_ReadAndDecompress_Wide_Async.html')">OodleXLZ_ReadAndDecompress_Wide_Async</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleXLZ_Decompress_Wide_Async.html')">OodleXLZ_Decompress_Wide_Async</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleXLZ_Decompress_MakeSeekTable_Wide_Async.html')">OodleXLZ_Decompress_MakeSeekTable_Wide_Async</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleXLZ_Compress_Async.html')">OodleXLZ_Compress_Async</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleXLZ_Compress_Wait_GetResult.html')">OodleXLZ_Compress_Wait_GetResult</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleXLZ_Compress_AsyncAndWait.html')">OodleXLZ_Compress_AsyncAndWait</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleXLZ_ReadAndDecompress_Stream_Async.html')">OodleXLZ_ReadAndDecompress_Stream_Async</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleXDecompressCallback_WriteFile_Data_Init.html')">OodleXDecompressCallback_WriteFile_Data_Init</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleDecompressCallback_WriteFile.html')">OodleDecompressCallback_WriteFile</a></li>
</ul>
</ul>
</ul>
<li><span onClick="HandleClick(event, null); return false" class='TOCGroup closedbook_icon'></span>&nbsp;<a href="javascript:show('OodleXAPI_Init.html')">OodleX Startup and Shutdown</a></li>
<ul style="display:none" class='TOCItem'>
<li><span onClick="HandleClick(event, null); return false" class='TOCGroup closedbook_icon'></span>&nbsp;Defines</li>
<ul style="display:none" class='TOCItem'>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OODLE_WORKERS_COUNT_ALL_PHYSICAL_CORES.html')">OODLE_WORKERS_COUNT_ALL_PHYSICAL_CORES</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OODLE_WORKERS_COUNT_ALL_HYPER_CORES.html')">OODLE_WORKERS_COUNT_ALL_HYPER_CORES</a></li>
</ul>
<li><span onClick="HandleClick(event, null); return false" class='TOCGroup closedbook_icon'></span>&nbsp;Enumerants</li>
<ul style="display:none" class='TOCItem'>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleX_Init_GetDefaults_DebugSystems.html')">OodleX_Init_GetDefaults_DebugSystems</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleX_Init_GetDefaults_Threads.html')">OodleX_Init_GetDefaults_Threads</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleX_Shutdown_LogLeaks.html')">OodleX_Shutdown_LogLeaks</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleX_Shutdown_DebugBreakOnLeaks.html')">OodleX_Shutdown_DebugBreakOnLeaks</a></li>
</ul>
<li><span onClick="HandleClick(event, null); return false" class='TOCGroup closedbook_icon'></span>&nbsp;Structures</li>
<ul style="display:none" class='TOCItem'>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleXInitOptions.html')">OodleXInitOptions</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleXConfigValues.html')">OodleXConfigValues</a></li>
</ul>
<li><span onClick="HandleClick(event, null); return false" class='TOCGroup closedbook_icon'></span>&nbsp;Functions</li>
<ul style="display:none" class='TOCItem'>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleX_Init_ThreadProfilerInit.html')">OodleX_Init_ThreadProfilerInit</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleX_Init_GetDefaults.html')">OodleX_Init_GetDefaults</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleX_Init_GetDefaults_Minimal.html')">OodleX_Init_GetDefaults_Minimal</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleX_Init.html')">OodleX_Init</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleX_Init_Default.html')">OodleX_Init_Default</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleX_LogSystemInfo.html')">OodleX_LogSystemInfo</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleX_Shutdown.html')">OodleX_Shutdown</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleX_Init_NoThreads.html')">OodleX_Init_NoThreads</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleX_Shutdown_NoThreads.html')">OodleX_Shutdown_NoThreads</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleX_GetConfigValues.html')">OodleX_GetConfigValues</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleX_SetConfigValues.html')">OodleX_SetConfigValues</a></li>
</ul>
</ul>
<li><span onClick="HandleClick(event, null); return false" class='TOCGroup closedbook_icon'></span>&nbsp;<a href="javascript:show('OodleXAPI_Malloc.html')">OodleX Memory Allocators</a></li>
<ul style="display:none" class='TOCItem'>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleXMalloc_About.html')">About OodleXMalloc</a></li>
<li><span onClick="HandleClick(event, null); return false" class='TOCGroup closedbook_icon'></span>&nbsp;Enumerants</li>
<ul style="display:none" class='TOCItem'>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleXMalloc_OS_Options.html')">OodleXMalloc_OS_Options</a></li>
</ul>
<li><span onClick="HandleClick(event, null); return false" class='TOCGroup closedbook_icon'></span>&nbsp;Structures</li>
<ul style="display:none" class='TOCItem'>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleXMallocVTable.html')">OodleXMallocVTable</a></li>
</ul>
<li><span onClick="HandleClick(event, null); return false" class='TOCGroup closedbook_icon'></span>&nbsp;Functions</li>
<ul style="display:none" class='TOCItem'>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleXMalloc_InstallVTable.html')">OodleXMalloc_InstallVTable</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleXMalloc_SetFailedHandler.html')">OodleXMalloc_SetFailedHandler</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleXMalloc.html')">OodleXMalloc</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleXMallocAligned.html')">OodleXMallocAligned</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleXFree.html')">OodleXFree</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleXFreeSized.html')">OodleXFreeSized</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleXMallocBigAlignment.html')">OodleXMallocBigAlignment</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleXMallocBig.html')">OodleXMallocBig</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleXFreeBig.html')">OodleXFreeBig</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleXMalloc_ValidatePointer.html')">OodleXMalloc_ValidatePointer</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleXMalloc_IOAligned.html')">OodleXMalloc_IOAligned</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleXFree_IOAligned.html')">OodleXFree_IOAligned</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleXMalloc_GetVTable_Clib.html')">OodleXMalloc_GetVTable_Clib</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleXMalloc_GetVTable_OS.html')">OodleXMalloc_GetVTable_OS</a></li>
</ul>
<li><span onClick="HandleClick(event, null); return false" class='TOCGroup closedbook_icon'></span>&nbsp;Typedefs</li>
<ul style="display:none" class='TOCItem'>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleXMallocFailedHandler.html')">OodleXMallocFailedHandler</a></li>
</ul>
</ul>
<li><span onClick="HandleClick(event, null); return false" class='TOCGroup closedbook_icon'></span>&nbsp;<a href="javascript:show('OodleXAPI_Handle.html')">OodleX async handle operations</a></li>
<ul style="display:none" class='TOCItem'>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleXHandle_About.html')">About OodleXHandle</a></li>
<li><span onClick="HandleClick(event, null); return false" class='TOCGroup closedbook_icon'></span>&nbsp;Defines</li>
<ul style="display:none" class='TOCItem'>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OODLEX_ASYNC_HANDLE_INVALID.html')">OODLEX_ASYNC_HANDLE_INVALID</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OODLEX_ASYNC_HANDLE_PENDING.html')">OODLEX_ASYNC_HANDLE_PENDING</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OODLEX_ASYNC_HANDLE_DONE.html')">OODLEX_ASYNC_HANDLE_DONE</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OODLEX_ASYNC_HANDLE_ERROR.html')">OODLEX_ASYNC_HANDLE_ERROR</a></li>
</ul>
<li><span onClick="HandleClick(event, null); return false" class='TOCGroup closedbook_icon'></span>&nbsp;Enumerants</li>
<ul style="display:none" class='TOCItem'>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleXPriority.html')">OodleXPriority</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleXAsyncSelect.html')">OodleXAsyncSelect</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleXStatus.html')">OodleXStatus</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleXHandleAutoDelete.html')">OodleXHandleAutoDelete</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleXHandleKickDelayed.html')">OodleXHandleKickDelayed</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleXHandleDeleteIfDone.html')">OodleXHandleDeleteIfDone</a></li>
</ul>
<li><span onClick="HandleClick(event, null); return false" class='TOCGroup closedbook_icon'></span>&nbsp;Functions</li>
<ul style="display:none" class='TOCItem'>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleX_GetStatus.html')">OodleX_GetStatus</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleX_Wait.html')">OodleX_Wait</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleX_WaitAll.html')">OodleX_WaitAll</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleX_WaitDoneAllPending.html')">OodleX_WaitDoneAllPending</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleX_SetHandleAutoDelete.html')">OodleX_SetHandleAutoDelete</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleX_GetAvailableAsyncSelect.html')">OodleX_GetAvailableAsyncSelect</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleXHandleEvent_Alloc.html')">OodleXHandleEvent_Alloc</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleXHandleEvent_SetDone.html')">OodleXHandleEvent_SetDone</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleXHandleEvent_SetError.html')">OodleXHandleEvent_SetError</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleXHandleCountdown_Alloc.html')">OodleXHandleCountdown_Alloc</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleXHandleCountdown_Decrement.html')">OodleXHandleCountdown_Decrement</a></li>
</ul>
<li><span onClick="HandleClick(event, null); return false" class='TOCGroup closedbook_icon'></span>&nbsp;Typedefs</li>
<ul style="display:none" class='TOCItem'>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleXHandle.html')">OodleXHandle</a></li>
</ul>
</ul>
<li><span onClick="HandleClick(event, null); return false" class='TOCGroup closedbook_icon'></span>&nbsp;<a href="javascript:show('OodleXAPI_Threading.html')">OodleX threading util</a></li>
<ul style="display:none" class='TOCItem'>
<li><span onClick="HandleClick(event, null); return false" class='TOCGroup closedbook_icon'></span>&nbsp;Functions</li>
<ul style="display:none" class='TOCItem'>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleX_Semaphore_Post.html')">OodleX_Semaphore_Post</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleX_Semaphore_Wait.html')">OodleX_Semaphore_Wait</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleX_CreateThread.html')">OodleX_CreateThread</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleX_WaitAndDestroyThread.html')">OodleX_WaitAndDestroyThread</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleX_ReleaseThreadTLS.html')">OodleX_ReleaseThreadTLS</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleX_CorePlugin_RunJob.html')">OodleX_CorePlugin_RunJob</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleX_CorePlugin_WaitJob.html')">OodleX_CorePlugin_WaitJob</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleX_GetNumWorkerThreads.html')">OodleX_GetNumWorkerThreads</a></li>
</ul>
<li><span onClick="HandleClick(event, null); return false" class='TOCGroup closedbook_icon'></span>&nbsp;Typedefs</li>
<ul style="display:none" class='TOCItem'>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleX_Semaphore.html')">OodleX_Semaphore</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleX_ThreadFunc.html')">OodleX_ThreadFunc</a></li>
</ul>
</ul>
<li><span onClick="HandleClick(event, null); return false" class='TOCGroup closedbook_icon'></span>&nbsp;<a href="javascript:show('OodleXAPI_IOQ.html')">OodleX low level async io</a></li>
<ul style="display:none" class='TOCItem'>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleXIOQ_About.html')">About OodleIOQ</a></li>
<li><span onClick="HandleClick(event, null); return false" class='TOCGroup closedbook_icon'></span>&nbsp;Defines</li>
<ul style="display:none" class='TOCItem'>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OODLEX_IO_MAX_ALIGNMENT.html')">OODLEX_IO_MAX_ALIGNMENT</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OODLEX_BUFFER_SIZE_DEFAULT.html')">OODLEX_BUFFER_SIZE_DEFAULT</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OODLEX_FILEINFO_FLAG_INVALID.html')">OODLEX_FILEINFO_FLAG_INVALID</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OODLEX_FILEINFO_MODTIME_INVALID.html')">OODLEX_FILEINFO_MODTIME_INVALID</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OODLEX_FILE_SIZE_INVALID.html')">OODLEX_FILE_SIZE_INVALID</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OODLEX_FILE_OPEN_NO_RESERVE_SIZE.html')">OODLEX_FILE_OPEN_NO_RESERVE_SIZE</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OODLEX_FILE_CLOSE_NO_TRUNCATE_SIZE.html')">OODLEX_FILE_CLOSE_NO_TRUNCATE_SIZE</a></li>
</ul>
<li><span onClick="HandleClick(event, null); return false" class='TOCGroup closedbook_icon'></span>&nbsp;Enumerants</li>
<ul style="display:none" class='TOCItem'>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleXCopyFileFlags.html')">OodleXCopyFileFlags</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleFileNotFoundIsAnError.html')">OodleFileNotFoundIsAnError</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OODLEX_FILEINFO_FLAGS.html')">OODLEX_FILEINFO_FLAGS</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleXError.html')">OodleXError</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleXFileMode.html')">OodleXFileMode</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleXFileOpenFlags.html')">OodleXFileOpenFlags</a></li>
</ul>
<li><span onClick="HandleClick(event, null); return false" class='TOCGroup closedbook_icon'></span>&nbsp;Structures</li>
<ul style="display:none" class='TOCItem'>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleXFileOpsVTable.html')">OodleXFileOpsVTable</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleXFileInfo.html')">OodleXFileInfo</a></li>
</ul>
<li><span onClick="HandleClick(event, null); return false" class='TOCGroup closedbook_icon'></span>&nbsp;Functions</li>
<ul style="display:none" class='TOCItem'>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleXIOQ_WaitDoneAllPending.html')">OodleXIOQ_WaitDoneAllPending</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleXIOQ_KickAnyDelayed.html')">OodleXIOQ_KickAnyDelayed</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleXIOQ_GetStatus.html')">OodleXIOQ_GetStatus</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleXIOQ_GetErrorDetails.html')">OodleXIOQ_GetErrorDetails</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleXIOQ_GetErrorEnum.html')">OodleXIOQ_GetErrorEnum</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleXIOQ_LogError.html')">OodleXIOQ_LogError</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleXIOQ_Wait.html')">OodleXIOQ_Wait</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleXIOQ_GetInfo.html')">OodleXIOQ_GetInfo</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleXIOQ_Wait_GetInfo.html')">OodleXIOQ_Wait_GetInfo</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleXIOQ_GetLastPendingOpOnFile.html')">OodleXIOQ_GetLastPendingOpOnFile</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleXIOQ_GetName.html')">OodleXIOQ_GetName</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleXIOQ_GetLastError.html')">OodleXIOQ_GetLastError</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleXIOQ_ClearError.html')">OodleXIOQ_ClearError</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleXIOQ_LogLastError.html')">OodleXIOQ_LogLastError</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleXIOQ_GetOSHandle.html')">OodleXIOQ_GetOSHandle</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleXIOQ_SetVTable.html')">OodleXIOQ_SetVTable</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleXIOQ_Fence_Async.html')">OodleXIOQ_Fence_Async</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleXIOQ_OpenForRead_Async.html')">OodleXIOQ_OpenForRead_Async</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleXIOQ_OpenAndRead_Async.html')">OodleXIOQ_OpenAndRead_Async</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleXIOQ_OpenForWriteCreate_Async.html')">OodleXIOQ_OpenForWriteCreate_Async</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleXIOQ_OpenForWriteTempName_Async.html')">OodleXIOQ_OpenForWriteTempName_Async</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleXIOQ_CloseFile_Async.html')">OodleXIOQ_CloseFile_Async</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleXIOQ_CloseFileRename_Async.html')">OodleXIOQ_CloseFileRename_Async</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleXIOQ_Read_Async.html')">OodleXIOQ_Read_Async</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleXIOQ_Write_Async.html')">OodleXIOQ_Write_Async</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleXIOQ_SetFileSize_Async.html')">OodleXIOQ_SetFileSize_Async</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleXIOQ_ReserveFileSizeForWrite_Async.html')">OodleXIOQ_ReserveFileSizeForWrite_Async</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleXIOQ_ForceWriteable_Async.html')">OodleXIOQ_ForceWriteable_Async</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleXIOQ_Delete_Async.html')">OodleXIOQ_Delete_Async</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleXIOQ_Rename_Async.html')">OodleXIOQ_Rename_Async</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleXIOQ_MakeDir_Async.html')">OodleXIOQ_MakeDir_Async</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleXIOQ_FreeBufferIOAligned_Async.html')">OodleXIOQ_FreeBufferIOAligned_Async</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleXIOQ_GetInfoByName_Async.html')">OodleXIOQ_GetInfoByName_Async</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleXIOQ_GetInfoByName_GetResult.html')">OodleXIOQ_GetInfoByName_GetResult</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleXIOQ_SetInfoByName_Async.html')">OodleXIOQ_SetInfoByName_Async</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleXIOQ_ReadMallocWholeFile_Async.html')">OodleXIOQ_ReadMallocWholeFile_Async</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleXIOQ_ReadMallocWholeFile_GetResult.html')">OodleXIOQ_ReadMallocWholeFile_GetResult</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleXIOQ_OpenAndReadMallocWholeFile_Async.html')">OodleXIOQ_OpenAndReadMallocWholeFile_Async</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleXIOQ_OpenAndReadMallocWholeFileAndClose_Async.html')">OodleXIOQ_OpenAndReadMallocWholeFileAndClose_Async</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleXIOQ_OpenWriteWholeFileClose_Async.html')">OodleXIOQ_OpenWriteWholeFileClose_Async</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleXIOQ_OpenWriteWholeFileCloseTempName_Async.html')">OodleXIOQ_OpenWriteWholeFileCloseTempName_Async</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleXIOQ_ReadUnalignedAdjustPointer_Async.html')">OodleXIOQ_ReadUnalignedAdjustPointer_Async</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleXIOQ_MakeAllDirs_Async.html')">OodleXIOQ_MakeAllDirs_Async</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleXIOQ_CopyFile_Async.html')">OodleXIOQ_CopyFile_Async</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleXIOQ_ReadMallocWholeFile_AsyncAndWait.html')">OodleXIOQ_ReadMallocWholeFile_AsyncAndWait</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleXIOQ_WriteWholeFile_AsyncAndWait.html')">OodleXIOQ_WriteWholeFile_AsyncAndWait</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleXIOQ_CopyFile_AsyncAndWait.html')">OodleXIOQ_CopyFile_AsyncAndWait</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleXIOQ_GetInfoByName_AsyncAndWait.html')">OodleXIOQ_GetInfoByName_AsyncAndWait</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleXIOQ_SetInfoByName_AsyncAndWait.html')">OodleXIOQ_SetInfoByName_AsyncAndWait</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleXIOQ_MakeAllDirs_AsyncAndWait.html')">OodleXIOQ_MakeAllDirs_AsyncAndWait</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleXIOQ_Delete_AsyncAndWait.html')">OodleXIOQ_Delete_AsyncAndWait</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleXIOQ_Rename_AsyncAndWait.html')">OodleXIOQ_Rename_AsyncAndWait</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleXIOQ_GetFileSize_AsyncAndWait.html')">OodleXIOQ_GetFileSize_AsyncAndWait</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleXIOQ_NameIsDir_AsyncAndWait.html')">OodleXIOQ_NameIsDir_AsyncAndWait</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleX_GetOSFileOps.html')">OodleX_GetOSFileOps</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleX_GetDefaultFileOps.html')">OodleX_GetDefaultFileOps</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleX_SetDefaultFileOps.html')">OodleX_SetDefaultFileOps</a></li>
</ul>
<li><span onClick="HandleClick(event, null); return false" class='TOCGroup closedbook_icon'></span>&nbsp;Typedefs</li>
<ul style="display:none" class='TOCItem'>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleXIOQFile.html')">OodleXIOQFile</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleXOSFile.html')">OodleXOSFile</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleXOSFileListing.html')">OodleXOSFileListing</a></li>
</ul>
</ul>
<li><span onClick="HandleClick(event, null); return false" class='TOCGroup closedbook_icon'></span>&nbsp;<a href="javascript:show('OodleXAPI_Debug.html')">OodleX Debug aids</a></li>
<ul style="display:none" class='TOCItem'>
<li><span onClick="HandleClick(event, null); return false" class='TOCGroup closedbook_icon'></span>&nbsp;Defines</li>
<ul style="display:none" class='TOCItem'>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleXLog_Printf.html')">OodleXLog_Printf</a></li>
</ul>
<li><span onClick="HandleClick(event, null); return false" class='TOCGroup closedbook_icon'></span>&nbsp;Enumerants</li>
<ul style="display:none" class='TOCItem'>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleXLog_StateFlags.html')">OodleXLog_StateFlags</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleXLog_VerboseLevel.html')">OodleXLog_VerboseLevel</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleXLogCallbackRetRet.html')">OodleXLogCallbackRetRet</a></li>
</ul>
<li><span onClick="HandleClick(event, null); return false" class='TOCGroup closedbook_icon'></span>&nbsp;Functions</li>
<ul style="display:none" class='TOCItem'>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleXLog_SetState.html')">OodleXLog_SetState</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleXLog_SetEcho.html')">OodleXLog_SetEcho</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleXLog_GetEcho.html')">OodleXLog_GetEcho</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleXLog_SetCallback.html')">OodleXLog_SetCallback</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleXLog_GetCallback.html')">OodleXLog_GetCallback</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleXLog_GetVerboseLevel.html')">OodleXLog_GetVerboseLevel</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleXLog_SetVerboseLevel.html')">OodleXLog_SetVerboseLevel</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleXLog_Flush.html')">OodleXLog_Flush</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleXLog_PrintfError.html')">OodleXLog_PrintfError</a></li>
</ul>
<li><span onClick="HandleClick(event, null); return false" class='TOCGroup closedbook_icon'></span>&nbsp;Typedefs</li>
<ul style="display:none" class='TOCItem'>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleXLogCallbackRet.html')">OodleXLogCallbackRet</a></li>
</ul>
</ul>
<li><span onClick="HandleClick(event, null); return false" class='TOCGroup closedbook_icon'></span>&nbsp;<a href="javascript:show('OodleXAPI_Util.html')">OodleX Utils</a></li>
<ul style="display:none" class='TOCItem'>
<li><span onClick="HandleClick(event, null); return false" class='TOCGroup closedbook_icon'></span>&nbsp;Defines</li>
<ul style="display:none" class='TOCItem'>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OODLEX_PATH_DELIM.html')">OODLEX_PATH_DELIM</a></li>
</ul>
<li><span onClick="HandleClick(event, null); return false" class='TOCGroup closedbook_icon'></span>&nbsp;Functions</li>
<ul style="display:none" class='TOCItem'>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleX_GetExtensionKey.html')">OodleX_GetExtensionKey</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleX_MakeExtensionKey.html')">OodleX_MakeExtensionKey</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleX_IOAlignUpS32.html')">OodleX_IOAlignUpS32</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleX_IOAlignUpS64.html')">OodleX_IOAlignUpS64</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleX_IOAlignUpSINTa.html')">OodleX_IOAlignUpSINTa</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleX_IOAlignDownS32.html')">OodleX_IOAlignDownS32</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleX_IOAlignDownS64.html')">OodleX_IOAlignDownS64</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleX_IOAlignDownSINTa.html')">OodleX_IOAlignDownSINTa</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleX_S64_to_SINTa_check.html')">OodleX_S64_to_SINTa_check</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleX_GetSeconds.html')">OodleX_GetSeconds</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleXUtil_ConvertUTF8ToUTF16.html')">OodleXUtil_ConvertUTF8ToUTF16</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleXUtil_ConvertUTF16ToUTF8.html')">OodleXUtil_ConvertUTF16ToUTF8</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleX_CombinePaths.html')">OodleX_CombinePaths</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleX_GetOSCwd.html')">OodleX_GetOSCwd</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleX_PrefixOSCwd.html')">OodleX_PrefixOSCwd</a></li>
</ul>
</ul>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('Oodle_AboutExt.html')">About Oodle Ext</a></li>
</ul>
<br>&nbsp;<br> <table class=bar> <tr>
<td width=33%>&nbsp;</td><td width=33%>&nbsp;</td><td width=33% align=right><span class='arrowright'></span><a href="javascript:show('OodleXAPI_LZ.html')" class="paragraph">OodleX LZ compression</a></td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="OodleXFreeBig.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>OodleXFreeBig</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "OodleXFreeBig.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="OodleXFreeBig.html_backmenu">
<table class=dropmenu>
<tr><td><span class='arrowleft'></span>&nbsp;<a href="javascript:show('OodleXMallocBig.html')" class="paragraph">OodleXMallocBig</a></td></tr><tr><td><span class='arrowright'></span>&nbsp;<a href="javascript:show('OodleXMalloc_ValidatePointer.html')" class="paragraph">OodleXMalloc_ValidatePointer</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<div class=prototype><div class=prototype_header>// Function prototype:</div><pre>void <span class=prototype_type><a href="javascript:show('OodleXFreeBig.html')" class="blue">OodleXFreeBig</a></span>( void * ptr );</pre></div><div class=discussion_heading>Discussion</div>free a pointer allocated by <a href="javascript:show('OodleXMallocBig.html')" class="paragraph">OodleXMallocBig</a> <div class=discussion_heading>Parameters</div> <table> <tr> <td style='vertical-align: top;' class=paramname><a id="OodleXFreeBig.html_ptr" class=nohover>ptr</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> pointer to free (must not be NULL)
</td></tr></table><div class=discussion_heading>Discussion</div></p>
<p> You cannot call <a href="javascript:show('OodleXFree.html')" class="paragraph">OodleXFree</a> on a pointer allocated by <a href="javascript:show('OodleXMallocBig.html')" class="paragraph">OodleXMallocBig</a>.
Uses the current <a href="javascript:show('OodleXMallocVTable.html')" class="paragraph">OodleXMallocVTable</a> ; this is an error if ptr was allocated from a different VTable.
<br>&nbsp;<br> <table class=bar> <tr>
<td width=33% align=left><span class='arrowleft'></span><a href="javascript:show('OodleXMallocBig.html')" class="paragraph">OodleXMallocBig</a></td><td width=33% align=center><span class='arrowup'></span><a href="javascript:show('OodleXAPI_Malloc.html')" class="paragraph">OodleX Memory Allocators</a></td><td width=33% align=right><span class='arrowright'></span><a href="javascript:show('OodleXMalloc_ValidatePointer.html')" class="paragraph">OodleXMalloc_ValidatePointer</a></td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="OodleX_Init_Default.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>OodleX_Init_Default</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "OodleX_Init_Default.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="OodleX_Init_Default.html_backmenu">
<table class=dropmenu>
<tr><td><span class='arrowleft'></span>&nbsp;<a href="javascript:show('OodleX_Init.html')" class="paragraph">OodleX_Init</a></td></tr><tr><td><span class='arrowright'></span>&nbsp;<a href="javascript:show('OodleX_LogSystemInfo.html')" class="paragraph">OodleX_LogSystemInfo</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<div class=prototype><div class=prototype_header>// Function prototype:</div><pre>OO_BOOL <span class=prototype_type><a href="javascript:show('OodleX_Init_Default.html')" class="blue">OodleX_Init_Default</a></span>( OO_U32 oodle_header_version,
<span class=prototype_type><a href="javascript:show('OodleX_Init_GetDefaults_DebugSystems.html')" class="blue">OodleX_Init_GetDefaults_DebugSystems</a></span> debugSystems OODEFAULT( OodleX_Init_GetDefaults_DebugSystems_Yes ),
<span class=prototype_type><a href="javascript:show('OodleX_Init_GetDefaults_Threads.html')" class="blue">OodleX_Init_GetDefaults_Threads</a></span> threads OODEFAULT( OodleX_Init_GetDefaults_Threads_Yes ) );</pre></div><div class=discussion_heading>Discussion</div>Initialize Oodle, without options struct<div class=discussion_heading>Parameters</div> <table> <tr> <td style='vertical-align: top;' class=paramname><a id="OodleX_Init_Default.html_oodle_header_version" class=nohover>oodle_header_version</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> pass <a href="javascript:show('OODLE_HEADER_VERSION.html')" class="paragraph">OODLE_HEADER_VERSION</a> here
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleX_Init_Default.html_debugSystems" class=nohover>debugSystems</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> should OodleX_Init enable any debug systems (leaktrack, log, etc) ?
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleX_Init_Default.html_threads" class=nohover>threads</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> should OodleX_Init start any threads?
</td></tr></table><div class=discussion_heading>Return Value</div> <table> <tr> <td style='vertical-align: top;' class=paramname><a id="OodleX_Init_Default.html_return" class=nohover>return</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> false if <a href="javascript:show('OODLE_HEADER_VERSION.html')" class="paragraph">OODLE_HEADER_VERSION</a> is not compatible with this lib
</td></tr></table><div class=discussion_heading>Discussion</div></p>
<p> The <i>debugSystems</i> and <i>threads</i> options are just easy ways of getting pOptions filled out for common
use cases. For fine control of individual settings, you can always set the values in OodleXInitOptions yourself.
</p>
<p> This is just a shortcut to <a href="javascript:show('OodleX_Init_GetDefaults.html')" class="paragraph">OodleX_Init_GetDefaults</a> then <a href="javascript:show('OodleX_Init.html')" class="paragraph">OodleX_Init</a>
</p>
<p> NOTE : do not use this if you want minimal linkage.
<br>&nbsp;<br> <table class=bar> <tr>
<td width=33% align=left><span class='arrowleft'></span><a href="javascript:show('OodleX_Init.html')" class="paragraph">OodleX_Init</a></td><td width=33% align=center><span class='arrowup'></span><a href="javascript:show('OodleXAPI_Init.html')" class="paragraph">OodleX Startup and Shutdown</a></td><td width=33% align=right><span class='arrowright'></span><a href="javascript:show('OodleX_LogSystemInfo.html')" class="paragraph">OodleX_LogSystemInfo</a></td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="OodleXLZ_Compress_Wait_GetResult.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>OodleXLZ_Compress_Wait_GetResult</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "OodleXLZ_Compress_Wait_GetResult.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="OodleXLZ_Compress_Wait_GetResult.html_backmenu">
<table class=dropmenu>
<tr><td><span class='arrowleft'></span>&nbsp;<a href="javascript:show('OodleXLZ_Compress_Async.html')" class="paragraph">OodleXLZ_Compress_Async</a></td></tr><tr><td><span class='arrowright'></span>&nbsp;<a href="javascript:show('OodleXLZ_Compress_AsyncAndWait.html')" class="paragraph">OodleXLZ_Compress_AsyncAndWait</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<div class=prototype><div class=prototype_header>// Function prototype:</div><pre><span class=prototype_type><a href="javascript:show('OodleXStatus.html')" class="blue">OodleXStatus</a></span> <span class=prototype_type><a href="javascript:show('OodleXLZ_Compress_Wait_GetResult.html')" class="blue">OodleXLZ_Compress_Wait_GetResult</a></span>( <span class=prototype_type><a href="javascript:show('OodleXHandle.html')" class="blue">OodleXHandle</a></span> h,
OO_SINTa * pCompLen );</pre></div><div class=discussion_heading>Discussion</div>Wait, get result, and delete the handle<div class=discussion_heading>Parameters</div> <table> <tr> <td style='vertical-align: top;' class=paramname><a id="OodleXLZ_Compress_Wait_GetResult.html_h" class=nohover>h</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> the handle from <a href="javascript:show('OodleXLZ_Compress_Async.html')" class="paragraph">OodleXLZ_Compress_Async</a>
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXLZ_Compress_Wait_GetResult.html_pCompLen" class=nohover>pCompLen</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> filled with the compressed len
</td></tr></table><div class=discussion_heading>Return Value</div> <table> <tr> <td style='vertical-align: top;' class=paramname><a id="OodleXLZ_Compress_Wait_GetResult.html_return" class=nohover>return</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> OodleXStatus_Done for success
</td></tr></table><div class=discussion_heading>Discussion</div></p>
<p><br>&nbsp;<br> <table class=bar> <tr>
<td width=33% align=left><span class='arrowleft'></span><a href="javascript:show('OodleXLZ_Compress_Async.html')" class="paragraph">OodleXLZ_Compress_Async</a></td><td width=33% align=center><span class='arrowup'></span><a href="javascript:show('OodleXAPI_LZ_Async.html')" class="paragraph">OodleXAPI_LZ_Async</a></td><td width=33% align=right><span class='arrowright'></span><a href="javascript:show('OodleXLZ_Compress_AsyncAndWait.html')" class="paragraph">OodleXLZ_Compress_AsyncAndWait</a></td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="OodleLZ_GetSeekTableMemorySizeNeeded.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>OodleLZ_GetSeekTableMemorySizeNeeded</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "OodleLZ_GetSeekTableMemorySizeNeeded.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="OodleLZ_GetSeekTableMemorySizeNeeded.html_backmenu">
<table class=dropmenu>
<tr><td><span class='arrowleft'></span>&nbsp;<a href="javascript:show('OodleLZ_GetNumSeekChunks.html')" class="paragraph">OodleLZ_GetNumSeekChunks</a></td></tr><tr><td><span class='arrowright'></span>&nbsp;<a href="javascript:show('OodleLZ_FillSeekTable.html')" class="paragraph">OodleLZ_FillSeekTable</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<div class=prototype><div class=prototype_header>// Function prototype:</div><pre>OO_SINTa <span class=prototype_type><a href="javascript:show('OodleLZ_GetSeekTableMemorySizeNeeded.html')" class="blue">OodleLZ_GetSeekTableMemorySizeNeeded</a></span>( OO_S32 numSeekChunks,
<span class=prototype_type><a href="javascript:show('OodleLZSeekTable_Flags.html')" class="blue">OodleLZSeekTable_Flags</a></span> flags );</pre></div><div class=discussion_heading>Discussion</div>Tells you the size in bytes to allocate the seekTable before calling <a href="javascript:show('OodleLZ_FillSeekTable.html')" class="paragraph">OodleLZ_FillSeekTable</a><div class=discussion_heading>Parameters</div> <table> <tr> <td style='vertical-align: top;' class=paramname><a id="OodleLZ_GetSeekTableMemorySizeNeeded.html_numSeekChunks" class=nohover>numSeekChunks</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> number of seek chunks (eg from <a href="javascript:show('OodleLZ_GetNumSeekChunks.html')" class="paragraph">OodleLZ_GetNumSeekChunks</a>)
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleLZ_GetSeekTableMemorySizeNeeded.html_flags" class=nohover>flags</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> options that will be passed to <a href="javascript:show('OodleLZ_CreateSeekTable.html')" class="paragraph">OodleLZ_CreateSeekTable</a>
</td></tr></table><div class=discussion_heading>Return Value</div> <table> <tr> <td style='vertical-align: top;' class=paramname><a id="OodleLZ_GetSeekTableMemorySizeNeeded.html_return" class=nohover>return</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> size in bytes of memory needed for seek table
</td></tr></table><div class=discussion_heading>Discussion</div></p>
<p> If you wish to provide the memory for the seek table yourself, you may call this to get the required size,
allocate the memory, and then simply point a <a href="javascript:show('OodleLZ_SeekTable.html')" class="paragraph">OodleLZ_SeekTable</a> at your memory.
Then use <a href="javascript:show('OodleLZ_FillSeekTable.html')" class="paragraph">OodleLZ_FillSeekTable</a> to fill it out.
</p>
<p> Do NOT use sizeof(OodleLZ_SeekTable) !
<br>&nbsp;<br> <table class=bar> <tr>
<td width=33% align=left><span class='arrowleft'></span><a href="javascript:show('OodleLZ_GetNumSeekChunks.html')" class="paragraph">OodleLZ_GetNumSeekChunks</a></td><td width=33% align=center><span class='arrowup'></span><a href="javascript:show('OodleAPI_LZ_Compressors.html')" class="paragraph">OodleAPI_LZ_Compressors</a></td><td width=33% align=right><span class='arrowright'></span><a href="javascript:show('OodleLZ_FillSeekTable.html')" class="paragraph">OodleLZ_FillSeekTable</a></td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="OodleLZ_Compressor_CanDecodeThreadPhased.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>OodleLZ_Compressor_CanDecodeThreadPhased</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "OodleLZ_Compressor_CanDecodeThreadPhased.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="OodleLZ_Compressor_CanDecodeThreadPhased.html_backmenu">
<table class=dropmenu>
<tr><td><span class='arrowleft'></span>&nbsp;<a href="javascript:show('OodleLZ_Compressor_CanDecodeInCircularWindow.html')" class="paragraph">OodleLZ_Compressor_CanDecodeInCircularWindow</a></td></tr><tr><td><span class='arrowright'></span>&nbsp;<a href="javascript:show('OodleLZ_Compressor_CanDecodeInPlace.html')" class="paragraph">OodleLZ_Compressor_CanDecodeInPlace</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<div class=prototype><div class=prototype_header>// Function prototype:</div><pre>OO_BOOL <span class=prototype_type><a href="javascript:show('OodleLZ_Compressor_CanDecodeThreadPhased.html')" class="blue">OodleLZ_Compressor_CanDecodeThreadPhased</a></span>( <span class=prototype_type><a href="javascript:show('OodleLZ_Compressor.html')" class="blue">OodleLZ_Compressor</a></span> compressor );</pre></div><div class=discussion_heading>Discussion</div>OodleLZ_Compressor properties helper.<div class=discussion_heading>Discussion</div>Tells you if this compressor can be used with the <a href="javascript:show('OodleLZ_Decode_ThreadPhase.html')" class="paragraph">OodleLZ_Decode_ThreadPhase</a>.
</p>
<p> See <a href="javascript:show('OodleLZ_About_ThreadPhasedDecode.html')" class="paragraph">About OodleLZ ThreadPhased Decode</a>
<br>&nbsp;<br> <table class=bar> <tr>
<td width=33% align=left><span class='arrowleft'></span><a href="javascript:show('OodleLZ_Compressor_CanDecodeInCircularWindow.html')" class="paragraph">OodleLZ_Compressor_CanDecodeInCircularWindow</a></td><td width=33% align=center><span class='arrowup'></span><a href="javascript:show('OodleAPI_LZ_Compressors.html')" class="paragraph">OodleAPI_LZ_Compressors</a></td><td width=33% align=right><span class='arrowright'></span><a href="javascript:show('OodleLZ_Compressor_CanDecodeInPlace.html')" class="paragraph">OodleLZ_Compressor_CanDecodeInPlace</a></td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="t_OodleFPVoidVoidStar.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>t_OodleFPVoidVoidStar</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "t_OodleFPVoidVoidStar.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="t_OodleFPVoidVoidStar.html_backmenu">
<table class=dropmenu>
<tr><td><span class='arrowleft'></span>&nbsp;<a href="javascript:show('t_OodleFPVoidVoid.html')" class="paragraph">t_OodleFPVoidVoid</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<div class=prototype><div class=prototype_header>// Function typedef:</div><pre>void( OODLE_CALLBACK <span class=prototype_type><a href="javascript:show('t_OodleFPVoidVoidStar.html')" class="blue">t_OodleFPVoidVoidStar</a></span> )( void * );</pre></div><div class=discussion_heading>Discussion</div>void-void-star callback func pointer
takes void pointer, returns void
<br>&nbsp;<br> <table class=bar> <tr>
<td width=33% align=left><span class='arrowleft'></span><a href="javascript:show('t_OodleFPVoidVoid.html')" class="paragraph">t_OodleFPVoidVoid</a></td><td width=33% align=center><span class='arrowup'></span><a href="javascript:show('OodleAPI_Base.html')" class="paragraph">Core Base</a></td><td width=33% align=right><span class='arrowright'></span><a href="javascript:show('OodleAPI_OodleCore_Plugins.html')" class="paragraph">Core plugins</a></td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="OODLELZ_BLOCK_LEN.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>OODLELZ_BLOCK_LEN</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "OODLELZ_BLOCK_LEN.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="OODLELZ_BLOCK_LEN.html_backmenu">
<table class=dropmenu>
<tr><td><span class='arrowleft'></span>&nbsp;<a href="javascript:show('OODLELZ_SPACESPEEDTRADEOFFBYTES_DEFAULT.html')" class="paragraph">OODLELZ_SPACESPEEDTRADEOFFBYTES_DEFAULT</a></td></tr><tr><td><span class='arrowright'></span>&nbsp;<a href="javascript:show('OODLELZ_BLOCK_MAX_COMPLEN.html')" class="paragraph">OODLELZ_BLOCK_MAX_COMPLEN</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<div class=prototype><div class=prototype_header>// Preprocessor definition:</div><pre><span class=prototype_type>#define</span> <a href="javascript:show('OODLELZ_BLOCK_LEN.html')">OODLELZ_BLOCK_LEN</a> (1&lt;&lt;18)</pre></div><div class=discussion_heading>Discussion</div> The number of raw bytes per "seek chunk"
Seek chunks can be decompressed independently if <a href="javascript:show('OodleLZ_CompressOptions.html','OodleLZ_CompressOptions.html_seekChunkReset')" class="paragraph">OodleLZ_CompressOptions:seekChunkReset</a> is set.
<br>&nbsp;<br> <table class=bar> <tr>
<td width=33% align=left><span class='arrowleft'></span><a href="javascript:show('OODLELZ_SPACESPEEDTRADEOFFBYTES_DEFAULT.html')" class="paragraph">OODLELZ_SPACESPEEDTRADEOFFBYTES_DEFAULT</a></td><td width=33% align=center><span class='arrowup'></span><a href="javascript:show('OodleAPI_LZ_Compressors.html')" class="paragraph">OodleAPI_LZ_Compressors</a></td><td width=33% align=right><span class='arrowright'></span><a href="javascript:show('OODLELZ_BLOCK_MAX_COMPLEN.html')" class="paragraph">OODLELZ_BLOCK_MAX_COMPLEN</a></td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="OodleXAPI_LZ_Async.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>OodleXAPI_LZ_Async</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "OodleXAPI_LZ_Async.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="OodleXAPI_LZ_Async.html_backmenu">
<table class=dropmenu>
<tr><td><span class='arrowup'></span>&nbsp;<a href="javascript:show('OodleXAPI_LZ.html')" class="paragraph">OodleX LZ compression</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<P>
Async dispatchers and high level helpers for OodleLZ
</p>
<p> <p><ul class='TOCItem'>
<li><span onClick="HandleClick(event, null); return false" class='TOCGroup closedbook_icon'></span>&nbsp;Structures</li>
<ul style="display:none" class='TOCItem'>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleDecompressCallback_WriteFile_Data.html')">OodleDecompressCallback_WriteFile_Data</a></li>
</ul>
<li><span onClick="HandleClick(event, null); return false" class='TOCGroup closedbook_icon'></span>&nbsp;Functions</li>
<ul style="display:none" class='TOCItem'>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleXLZ_Decompress_ThreadPhased_Narrow_Async.html')">OodleXLZ_Decompress_ThreadPhased_Narrow_Async</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleXLZ_Decompress_Narrow_Async.html')">OodleXLZ_Decompress_Narrow_Async</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleXLZ_ReadAndDecompress_Wide_Async.html')">OodleXLZ_ReadAndDecompress_Wide_Async</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleXLZ_Decompress_Wide_Async.html')">OodleXLZ_Decompress_Wide_Async</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleXLZ_Decompress_MakeSeekTable_Wide_Async.html')">OodleXLZ_Decompress_MakeSeekTable_Wide_Async</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleXLZ_Compress_Async.html')">OodleXLZ_Compress_Async</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleXLZ_Compress_Wait_GetResult.html')">OodleXLZ_Compress_Wait_GetResult</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleXLZ_Compress_AsyncAndWait.html')">OodleXLZ_Compress_AsyncAndWait</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleXLZ_ReadAndDecompress_Stream_Async.html')">OodleXLZ_ReadAndDecompress_Stream_Async</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleXDecompressCallback_WriteFile_Data_Init.html')">OodleXDecompressCallback_WriteFile_Data_Init</a></li>
<li><span class='topic_icon'></span>&nbsp;<a href="javascript:show('OodleDecompressCallback_WriteFile.html')">OodleDecompressCallback_WriteFile</a></li>
</ul>
</ul>
<br>&nbsp;<br> <table class=bar> <tr>
<td width=33% align=left><span class='arrowleft'></span><a href="javascript:show('OodleXAPI_LZ.html')" class="paragraph">OodleX LZ compression</a></td><td width=33% align=center><span class='arrowup'></span><a href="javascript:show('OodleXAPI_LZ.html')" class="paragraph">OodleX LZ compression</a></td><td width=33% align=right><span class='arrowright'></span><a href="javascript:show('OodleDecompressCallback_WriteFile_Data.html')" class="paragraph">OodleDecompressCallback_WriteFile_Data</a></td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="OODLEX_FILE_OPEN_NO_RESERVE_SIZE.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>OODLEX_FILE_OPEN_NO_RESERVE_SIZE</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "OODLEX_FILE_OPEN_NO_RESERVE_SIZE.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="OODLEX_FILE_OPEN_NO_RESERVE_SIZE.html_backmenu">
<table class=dropmenu>
<tr><td><span class='arrowleft'></span>&nbsp;<a href="javascript:show('OODLEX_FILE_SIZE_INVALID.html')" class="paragraph">OODLEX_FILE_SIZE_INVALID</a></td></tr><tr><td><span class='arrowright'></span>&nbsp;<a href="javascript:show('OODLEX_FILE_CLOSE_NO_TRUNCATE_SIZE.html')" class="paragraph">OODLEX_FILE_CLOSE_NO_TRUNCATE_SIZE</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<div class=prototype><div class=prototype_header>// Preprocessor definition:</div><pre><span class=prototype_type>#define</span> <a href="javascript:show('OODLEX_FILE_OPEN_NO_RESERVE_SIZE.html')">OODLEX_FILE_OPEN_NO_RESERVE_SIZE</a> (0)</pre></div><div class=discussion_heading>Discussion</div> Pass for <i>reserveSize</i> to OpenFile calls if you don't want it to reserve any space <br>&nbsp;<br> <table class=bar> <tr>
<td width=33% align=left><span class='arrowleft'></span><a href="javascript:show('OODLEX_FILE_SIZE_INVALID.html')" class="paragraph">OODLEX_FILE_SIZE_INVALID</a></td><td width=33% align=center><span class='arrowup'></span><a href="javascript:show('OodleXAPI_IOQ.html')" class="paragraph">OodleX low level async io</a></td><td width=33% align=right><span class='arrowright'></span><a href="javascript:show('OODLEX_FILE_CLOSE_NO_TRUNCATE_SIZE.html')" class="paragraph">OODLEX_FILE_CLOSE_NO_TRUNCATE_SIZE</a></td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="OodleXError.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>OodleXError</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "OodleXError.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="OodleXError.html_backmenu">
<table class=dropmenu>
<tr><td><span class='arrowleft'></span>&nbsp;<a href="javascript:show('OODLEX_FILEINFO_FLAGS.html')" class="paragraph">OODLEX_FILEINFO_FLAGS</a></td></tr><tr><td><span class='arrowright'></span>&nbsp;<a href="javascript:show('OodleXFileMode.html')" class="paragraph">OodleXFileMode</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<div class=prototype><div class=prototype_header>// Enumerant:</div><pre><span class=prototype_type>enum</span> <a href="javascript:show('OodleXError.html')">OodleXError</a>
{
&nbsp;&nbsp;&nbsp;&nbsp;OodleXError_Ok = 0,
&nbsp;&nbsp;&nbsp;&nbsp;OodleXError_InvalidHandle = 1,
&nbsp;&nbsp;&nbsp;&nbsp;OodleXError_FileNotFound = 2,
&nbsp;&nbsp;&nbsp;&nbsp;OodleXError_NoAccess = 3,
&nbsp;&nbsp;&nbsp;&nbsp;OodleXError_BadParameters = 4,
&nbsp;&nbsp;&nbsp;&nbsp;OodleXError_Corrupt = 5,
&nbsp;&nbsp;&nbsp;&nbsp;OodleXError_Alignment = 6,
&nbsp;&nbsp;&nbsp;&nbsp;OodleXError_Malloc = 7,
&nbsp;&nbsp;&nbsp;&nbsp;OodleXError_Compressor = 8,
&nbsp;&nbsp;&nbsp;&nbsp;OodleXError_UnexpectedEOF = 9,
&nbsp;&nbsp;&nbsp;&nbsp;OodleXError_PreviousAsyncFailed = 10,
&nbsp;&nbsp;&nbsp;&nbsp;OodleXError_Close = 11,
&nbsp;&nbsp;&nbsp;&nbsp;OodleXError_Unknown,
&nbsp;&nbsp;&nbsp;&nbsp;OodleXError_Count,
&nbsp;&nbsp;&nbsp;&nbsp;OodleXError_Force32 = 0x40000000
};
</pre></div><div class=discussion_heading>Discussion</div> oodle error enum to get a platform independent simple error code <div class=discussion_heading>Enumerants</div> <table> <tr> <td style='vertical-align: top;' class=paramname><a id="OodleXError.html_OodleXError_Ok" class=nohover>OodleXError_Ok</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> no error</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXError.html_OodleXError_InvalidHandle" class=nohover>OodleXError_InvalidHandle</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> null pointer, not open file, etc</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXError.html_OodleXError_FileNotFound" class=nohover>OodleXError_FileNotFound</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> file not found</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXError.html_OodleXError_NoAccess" class=nohover>OodleXError_NoAccess</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> attrib or sharing violation</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXError.html_OodleXError_BadParameters" class=nohover>OodleXError_BadParameters</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> usually unaligned or out of bounds file pointers</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXError.html_OodleXError_Corrupt" class=nohover>OodleXError_Corrupt</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> scratch or ejected media, damaged bits</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXError.html_OodleXError_Alignment" class=nohover>OodleXError_Alignment</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> wrong alignment</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXError.html_OodleXError_Malloc" class=nohover>OodleXError_Malloc</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> alloc failed</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXError.html_OodleXError_Compressor" class=nohover>OodleXError_Compressor</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> a compressor or decompressor failed</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXError.html_OodleXError_UnexpectedEOF" class=nohover>OodleXError_UnexpectedEOF</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> eof where I needed data</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXError.html_OodleXError_PreviousAsyncFailed" class=nohover>OodleXError_PreviousAsyncFailed</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> dependent async failed, so I can't run</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXError.html_OodleXError_Close" class=nohover>OodleXError_Close</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> error in close or object deletion, so I can't get more info</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXError.html_OodleXError_Unknown" class=nohover>OodleXError_Unknown</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> error that doesn't match any of the other enums</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXError.html_OodleXError_Count" class=nohover>OodleXError_Count</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc></td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXError.html_OodleXError_Force32" class=nohover>OodleXError_Force32</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc></td></tr></table><br>&nbsp;<br> <table class=bar> <tr>
<td width=33% align=left><span class='arrowleft'></span><a href="javascript:show('OODLEX_FILEINFO_FLAGS.html')" class="paragraph">OODLEX_FILEINFO_FLAGS</a></td><td width=33% align=center><span class='arrowup'></span><a href="javascript:show('OodleXAPI_IOQ.html')" class="paragraph">OodleX low level async io</a></td><td width=33% align=right><span class='arrowright'></span><a href="javascript:show('OodleXFileMode.html')" class="paragraph">OodleXFileMode</a></td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="OodleX_Init_GetDefaults_Threads.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>OodleX_Init_GetDefaults_Threads</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "OodleX_Init_GetDefaults_Threads.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="OodleX_Init_GetDefaults_Threads.html_backmenu">
<table class=dropmenu>
<tr><td><span class='arrowleft'></span>&nbsp;<a href="javascript:show('OodleX_Init_GetDefaults_DebugSystems.html')" class="paragraph">OodleX_Init_GetDefaults_DebugSystems</a></td></tr><tr><td><span class='arrowright'></span>&nbsp;<a href="javascript:show('OodleX_Shutdown_LogLeaks.html')" class="paragraph">OodleX_Shutdown_LogLeaks</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<div class=prototype><div class=prototype_header>// Enumerant:</div><pre><span class=prototype_type>enum</span> <a href="javascript:show('OodleX_Init_GetDefaults_Threads.html')">OodleX_Init_GetDefaults_Threads</a>
{
&nbsp;&nbsp;&nbsp;&nbsp;OodleX_Init_GetDefaults_Threads_No = 0,
&nbsp;&nbsp;&nbsp;&nbsp;OodleX_Init_GetDefaults_Threads_Yes = 1,
&nbsp;&nbsp;&nbsp;&nbsp;OodleX_Init_GetDefaults_Threads_Force32 = 0x40000000
};
</pre></div><div class=discussion_heading>Discussion</div> Should GetDefaults enable any threads?
<br>&nbsp;<br> <table class=bar> <tr>
<td width=33% align=left><span class='arrowleft'></span><a href="javascript:show('OodleX_Init_GetDefaults_DebugSystems.html')" class="paragraph">OodleX_Init_GetDefaults_DebugSystems</a></td><td width=33% align=center><span class='arrowup'></span><a href="javascript:show('OodleXAPI_Init.html')" class="paragraph">OodleX Startup and Shutdown</a></td><td width=33% align=right><span class='arrowright'></span><a href="javascript:show('OodleX_Shutdown_LogLeaks.html')" class="paragraph">OodleX_Shutdown_LogLeaks</a></td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="Oodle_FAQ_data_compatibility.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>FAQ: Do new Oodle versions break data compatibility ?</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "Oodle_FAQ_data_compatibility.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="Oodle_FAQ_data_compatibility.html_backmenu">
<table class=dropmenu>
<tr><td><span class='arrowleft'></span>&nbsp;<a href="javascript:show('Oodle_FAQ_deprecated_compressors.html')" class="paragraph">FAQ: What are the Oodle deprecated compressors ?</a></td></tr><tr><td><span class='arrowup'></span>&nbsp;<a href="javascript:show('Oodle_FAQ.html')" class="paragraph">Frequently Asked Questions</a></td></tr><tr><td><span class='arrowright'></span>&nbsp;<a href="javascript:show('Oodle_FAQ_vs_other_compressors.html')" class="paragraph">FAQ: How does OodleLZ compare with other compressors ?</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<P>
The short answer is NO : Oodle LZ compressed data is intended to be a lifetime supported bitstream format.
New versions of Oodle can read all data written by previous versions of Oodle.
</p>
<p>If you have old compressed assets, and you want to know can I update to a new version of Oodle (to get a bug fix
or performance boost) and still load the old compressed assets - YES , always.
</p>
<p>For details, continue reading :
</p>
<p>Oodle will always be able to load old compressed data. That is, newer code will be forever backward
compatible with old compressed data.
</p>
<p>Once in a rare while I rev a format to add new capabilities to the bitstream. When I do that, new compressed
data cannot be loaded by older code.
</p>
<p>But - my intention is that when possible there is an option to stick with outputing the old format. This is exposed as
</p>
<p>OodleConfigValues::m_OodleLZ_BackwardsCompatible_MajorVersion
</p>
<p>(the "major" version is the one in the middle ; eg. 2.5.0 has a major version of 5)
</p>
<p>For example Oodle 2.3.0 rev'ed the Kraken compressed format; this was the changelog :
</p>
<p><h2> Release 2.3.0 - July 14, 2016</h2>
</p>
<p><ul>
<li> <b>change</b> : WARNING Kraken data made by 2.3.0 by default cannot be loaded by Oodle 2.2.0 ; set m_OodleLZ_BackwardsCompatible_MajorVersion if you need that.
Oodle can always load data made by previous versions, but the reverse is not necessarily true.
</ul></p>
<p></p>
<p>So if you have a version of Oodle >= 2.3.0 it will load data that's made by earlier versions.
</p>
<p>By default Kraken data made by Oodle >= 2.3.0 cannot be loaded by earlier versions.
</p>
<p>If you set OodleConfigValues::m_OodleLZ_BackwardsCompatible_MajorVersion to 2 , then the new modes will be disabled and the newer Oodle can make data compatible with earlier versions.
</p>
<p>This could be useful if you have already shipped a game with an older version of Oodle, and you want to deliver new content but don't want to force an update of the decoder, but you do want to take a new version of the encoder (say for a bug fix or whatever), so you can continue to make content that works with the older decoders that customers have.
</p>
<p></p>
<p>Obviously when I add new compressors, they will make data that can't be loaded by earlier versions. That is not explicitly called out or handled by the "BackwardsCompatible" system - it's up to you to choose compressors that are supported in the versions you have.
</p>
<p>For example Mermaid &amp; Selkie start in Oodle 2.3.0 , so if you use them then earlier versions won't load that data.
</p>
<p></p>
<p>The only time I would ever completely break the format, requiring a full recompress of all content, would be if there was a major bug that I couldn't fix any other way. That's never happened and is unlikely, but I definitely advise you to always keep originals of all data just in case.
</p>
<p>Special note about Hydra :
</p>
<p>If you use Hydra, it can make use of any of the compressors available. When a new compressor is added to Hydra, it could make
compressed data that is not compatible with older versions. eg. in Oodle 2.6.0 Leviathan is added to Hydra, which means that Hydra
data made using Oodle 2.6.0 cannot be loaded with earlier versions of Oodle. This can be changed by setting m_OodleLZ_BackwardsCompatible_MajorVersion to 5,
which will exclude Leviathan from Hydra's menu to ensure it makes data that can be loaded with the previous version.<br>&nbsp;<br> <table class=bar> <tr>
<td width=33% align=left><span class='arrowleft'></span><a href="javascript:show('Oodle_FAQ_deprecated_compressors.html')" class="paragraph">FAQ: What are the Oodle deprecated compressors ?</a></td><td width=33% align=center><span class='arrowup'></span><a href="javascript:show('Oodle_FAQ.html')" class="paragraph">Frequently Asked Questions</a></td><td width=33% align=right><span class='arrowright'></span><a href="javascript:show('Oodle_FAQ_vs_other_compressors.html')" class="paragraph">FAQ: How does OodleLZ compare with other compressors ?</a></td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="t_fp_OodleCore_Plugin_Printf.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>t_fp_OodleCore_Plugin_Printf</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "t_fp_OodleCore_Plugin_Printf.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="t_fp_OodleCore_Plugin_Printf.html_backmenu">
<table class=dropmenu>
<tr><td><span class='arrowleft'></span>&nbsp;<a href="javascript:show('t_fp_OodleCore_Plugin_WaitJob.html')" class="paragraph">t_fp_OodleCore_Plugin_WaitJob</a></td></tr><tr><td><span class='arrowright'></span>&nbsp;<a href="javascript:show('t_fp_OodleCore_Plugin_DisplayAssertion.html')" class="paragraph">t_fp_OodleCore_Plugin_DisplayAssertion</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<div class=prototype><div class=prototype_header>// Function typedef:</div><pre>OODEFFUNC void( OODLE_CALLBACK <span class=prototype_type><a href="javascript:show('t_fp_OodleCore_Plugin_Printf.html')" class="blue">t_fp_OodleCore_Plugin_Printf</a></span> )( int verboseLevel,
const char * file,
int line,
const char * fmt,
. . . );</pre></div><div class=discussion_heading>Discussion</div>Function pointer to Oodle Core printf<div class=discussion_heading>Parameters</div> <table> <tr> <td style='vertical-align: top;' class=paramname><a id="t_fp_OodleCore_Plugin_Printf.html_verboseLevel" class=nohover>verboseLevel</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> verbosity of the message; 0-2 ; lower = more important
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="t_fp_OodleCore_Plugin_Printf.html_file" class=nohover>file</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> C file that sent the message
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="t_fp_OodleCore_Plugin_Printf.html_line" class=nohover>line</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> C line that sent the message
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="t_fp_OodleCore_Plugin_Printf.html_fmt" class=nohover>fmt</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> vararg printf format string
</td></tr></table><div class=discussion_heading>Discussion</div></p>
<p> The logging function installed here must parse varargs like printf.
</p>
<p> <i>verboseLevel</i> may be used to omit verbose messages.
<br>&nbsp;<br> <table class=bar> <tr>
<td width=33% align=left><span class='arrowleft'></span><a href="javascript:show('t_fp_OodleCore_Plugin_WaitJob.html')" class="paragraph">t_fp_OodleCore_Plugin_WaitJob</a></td><td width=33% align=center><span class='arrowup'></span><a href="javascript:show('OodleAPI_OodleCore_Plugins.html')" class="paragraph">Core plugins</a></td><td width=33% align=right><span class='arrowright'></span><a href="javascript:show('t_fp_OodleCore_Plugin_DisplayAssertion.html')" class="paragraph">t_fp_OodleCore_Plugin_DisplayAssertion</a></td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="OodleLZ_CompressionLevel_GetName.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>OodleLZ_CompressionLevel_GetName</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "OodleLZ_CompressionLevel_GetName.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="OodleLZ_CompressionLevel_GetName.html_backmenu">
<table class=dropmenu>
<tr><td><span class='arrowleft'></span>&nbsp;<a href="javascript:show('OodleLZ_GetSeekEntryPackedPos.html')" class="paragraph">OodleLZ_GetSeekEntryPackedPos</a></td></tr><tr><td><span class='arrowright'></span>&nbsp;<a href="javascript:show('OodleLZ_Compressor_GetName.html')" class="paragraph">OodleLZ_Compressor_GetName</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<div class=prototype><div class=prototype_header>// Function prototype:</div><pre>const char * <span class=prototype_type><a href="javascript:show('OodleLZ_CompressionLevel_GetName.html')" class="blue">OodleLZ_CompressionLevel_GetName</a></span>( <span class=prototype_type><a href="javascript:show('OodleLZ_CompressionLevel.html')" class="blue">OodleLZ_CompressionLevel</a></span> compressSelect );</pre></div><div class=discussion_heading>Discussion</div>Provides a string naming a <a href="javascript:show('OodleLZ_CompressionLevel.html')" class="paragraph">OodleLZ_CompressionLevel</a> compressSelect
<br>&nbsp;<br> <table class=bar> <tr>
<td width=33% align=left><span class='arrowleft'></span><a href="javascript:show('OodleLZ_GetSeekEntryPackedPos.html')" class="paragraph">OodleLZ_GetSeekEntryPackedPos</a></td><td width=33% align=center><span class='arrowup'></span><a href="javascript:show('OodleAPI_LZ_Compressors.html')" class="paragraph">OodleAPI_LZ_Compressors</a></td><td width=33% align=right><span class='arrowright'></span><a href="javascript:show('OodleLZ_Compressor_GetName.html')" class="paragraph">OodleLZ_Compressor_GetName</a></td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="changelog.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>Change Log</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "changelog.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="changelog.html_backmenu">
<table class=dropmenu>
<tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<P>
<h2> Release 2.9.14 -</h2>
</p>
<p><ul>
<li> <b>fix</b> : Data : Fail early when asked to decode a negative number of bytes, instead of returning a confusing error message about data corruption later.
<li> <b>fix</b> : Data : Detect Intel 13th/14th gen Core CPUs and work around instruction sequences implicated in high crash rates w/o microcode patches. Can be up to 20% slower on affected machines for certain rare inputs, but typical decoder slow-downs are around 0.5%.
<li> <b>fix</b> : Texture : Fix incorrect results in BC6-RDO when image data contains absolute values larger than FLT16_MAX (65504.0). (Add missing input canonicalization; BC6 non-RDO was correct.)
<li> <b>fix</b> : Texture : Fix AVX/AVX-512 detection not checking for OS-side (XSAVE) support as well
</ul></p>
<p><ul>
<li> <b>enhancement</b> : Data : Substantially improved Kraken "Fast" compression for large input blocks (much faster for binary data and typically smaller), slightly faster Kraken "Normal" compression (~5% higher throughput is common).
<li> <b>enhancement</b> : Data : Leviathan "Fast" compression for large input blocks is typically faster and higher ratio.
<li> <b>enhancement</b> : Texture : Encoding can now be aborted early (for interactive applications) - see OodleTex_Plugins_SetCancelRequested
</ul></p>
<p><h2> Release 2.9.13 - Nov 4, 2024</h2>
</p>
<p>This release focuses on BC7 and BC7-RDO encoding speed.
</p>
<p><ul>
<li> <b>new</b> : Oodle Data and Oodle Network for 64-bit WASM (beta)
<li> <b>new</b> : Texture : Added "Memory allocators on Windows" section to "Oodle Texture overviews" section in the docs - please read when using Oodle Texture on many-core machines running Windows.
</ul></p>
<p><ul>
<li> <b>fix</b> : Data : Fix MacOS linker warning about missing build version in some object files when building for x86 with new linker.
<li> <b>fix</b> : Texture : Fix static libraries on Windows warning if <i>HAS_ITERATOR_DEBUGGING != 0.
</i><li> <b>fix</b> : Texture : Fix docs incorrectly claiming that BC4/5 encoders don't accept float input.
<li> <b>fix</b> : Texture : Fix rare crash when encoding BC6 textures (potential OOB read but not write in tail handling of AVX2 float32->float16 pixel format conversion).
<li> <b>fix</b> : Texture : Fix tiny memory leak of internal bookkeeping data in OodleTex_EncodeBCN_LinearSurfaces when encoding from multiple source surfaces with incorrect block count. Found during code review, we are not aware of any customers hitting this bug.
</ul></p>
<p><ul>
<li> <b>change</b> : Ext : Changed worker thread names from just "ioqueue" and "workerN" to "OodleIoqueue" and "OodleWorkerN" respectively.
<li> <b>change</b> : Texture : Texviz is now DPI aware.
</ul></p>
<p><ul>
<li> <b>enhancement</b> : Ext : On Windows, also set thread names via SetThreadDescription, not just the older exception-based method.
<li> <b>enhancement</b> : Texture : Slight improvements to encoded BC7 quality in both non-RDO and RDO modes. (Encoder presets tuned for higher quality.)
<li> <b>enhancement</b> : Texture : non-RDO BC7 encode time reduced by around 20-25% on typical content. (1.25x-1.33x speed-up)
<li> <b>enhancement</b> : Texture : RDO BC7 encode time reduced by around 25-30% on typical content at "normal" effort level (1.33x-1.43x speed-up); "high" effort level encode time reduced by 35-40% on typical content (1.54x-1.67x speed-up).
<li> <b>enhancement</b> : Texture : Reduced number of temporary allocs in several places.
</ul></p>
<p><h2> Release 2.9.12 - Jan 25, 2024</h2>
</p>
<p>NOTE: Windows libs in Jan 23, 2024 accidentally had an unnecessary dependency
on "getenv" in uCRT from internal testing code. Jan 25 re-release fixes this
without any other behavioral changes.
</p>
<p><ul>
<li> <b>change</b> : OODLETEX_MAX_SURFACE_DIMENSION increased to 2097152 (from 16384)
</ul></p>
<p><ul>
<li> <b>change</b> : PS4 built with SDK 11.000
<li> <b>change</b> : PS5 built with SDK 8.000
</ul></p>
<p><ul>
<li> <b>enhancement</b> : Texture : OodleTex_RMSE_Normalized_BCNAware allocates less memory and is faster in typical use cases (on-the-fly instead of up-front pixel format conversion)
<li> <b>enhancement</b> : Texture : Slight improvements to BC7 quality and encoding speed, especially at "Low" effort level.
</ul></p>
<p><ul>
<li> <b>fix</b> : Texture : Fix incorrect assertion in debug builds when BC7 RDO encoding in ignore alpha mode and the texture has pixels with non-255 source alpha
<li> <b>fix</b> : Texture : Fix incorrect handling of very large positive and NaN float input pixels on x86 (ARM was already correct)
</ul></p>
<p><ul>
<li> <b>fix</b> : Data : Fix very rare assertion failure in OodleX workmgr.cpp PopQueue (spurious wake-ups are possible in certain conditions, just highly unlikely). Oodle Data without OodleX is unaffected.
</ul></p>
<p><h2> Release 2.9.11 - Oct 9, 2023</h2>
</p>
<p><ul>
<li> <b>new</b> : Oodle Data and Oodle Network for Apple VisionOS (beta).
</ul></p>
<p><ul>
<li> <b>change</b> : Xbox One legacy XDK support removed. Xbox One GDK/GameCore continues to be suppported.
<li> <b>change</b> : Xbox built with GDK March 2023 Update 6
<li> <b>change</b> : PS4 built with SDK 10.508
<li> <b>change</b> : PS5 built with SDK 7.00
<li> <b>change</b> : Switch built with SDK 16.2.3
</ul></p>
<p><ul>
<li> <b>change</b> : Data : Usage warning when decoding to slow-to-read (likely uncached) memory updated to provide more detail.
</ul></p>
<p><ul>
<li> <b>enhancement</b> : Texture : Improved end-to-end latency in multi-threaded encoding, especially for BC1 and BC4/5. (Activity tiling)
<li> <b>enhancement</b> : Texture : AVX-512 paths are significantly faster on AMD Zen 4 CPUs. (Avoid memory-destination forms of VPCOMPRESSD)
<li> <b>enhancement</b> : Texture : re-designed BC7 mode/partition selection logic that typically gives better quality while simultaneously encoding faster. Especially for diffuse albedo, we've seen RMS error reduced by 2-3% while simultaneously being about 2x faster to encode at "Normal" or "High" effort level.
</ul></p>
<p><ul>
<li> <b>fix</b> : Texture : BC7 RDO fix bug in "preserve extremes" mode where extremal alpha values weren't correctly preserved in certain rare cases. (Add check for mode 7 pbit mismatch in are_indices_permitted check)
</ul></p>
<p><ul>
<li> <b>regression</b> : PS4 Leviathan decode speed about 2-3% slower after compiler update
</ul></p>
<p><h2> Release 2.9.10b - Apr 19, 2023</h2>
</p>
<p>NOTE: re-release due to a buffer overflow issue in Oodle Texture 2.9.10 (Apr 17), please update immediately.
</p>
<p><ul>
<li> <b>new</b> : Data : OodleLZ_GetCompressScratchMemBoundEx which can estimate typical, not just worst-case compression scratch memory bounds.
</ul></p>
<p><ul>
<li> <b>enhancement</b> : Data : Mermaid "Optimal1" (level 5) and higher levels now encode much faster (35-50% encode time reduction is typical), usually with slightly increased compression ratio as well.
<li> <b>enhancement</b> : Data : Selkie, Kraken and Leviathan "Optimal1" (level 5) levels have faster encoding (10-25% encode time reduction is typical). "Optimal2" and higher levels slightly faster as well.
<li> <b>enhancement</b> : Texture : Speed-ups to RDO activity mask generation, RDO encoding of all formats got slightly faster as a result.
</ul></p>
<p><ul>
<li> <b>fix</b> : Texture : RDO threading changes in 2.9.6 disabled threading of activity calc in most cases, re-tune heuristics.
<li> <b>fix</b> : Texture : Fix assertion failure when encoding 16384x16384 pixel BC5 textures from 4x U16 source data.
<li> <b>fix</b> : Texture : Fix float input pixels for non-BC6 formats triggering assertions when RDO encoding except for tiny input images.
<li> <b>fix</b> : Texture : Fix incorrect RDO encoding of BC6H surfaces with non-multiple-of-4 width or height and at least 16 blocks. Due to the interaction of these two criteria, typical power-of-2 textures with aspect ratios between 1:4 and 4:1 were generally unaffected. The bug typically results in higher visual fidelity and lower compression ratio than indicated by the target lambda, i.e. sub-optimal compression but no objectionable artifacts.
<li> <b>fix</b> : Texture : Input pixel format validation is now stricter. Previous versions erroneously accepted some unsupported input formats, e.g. 4x U16 pixel formats for BC1 encoding, then failed with internal errors later.
</ul></p>
<p><ul>
<li> <b>note</b> : Oodle 2.9.10 will be the last release with Xbox One XDK libraries. Xbox One support in upcoming releases will be GDK only.
</ul></p>
<p><h2> Release 2.9.9 - Feb 8, 2023</h2>
</p>
<p>This release focuses on Oodle Data compression speed.
</p>
<p><ul>
<li> <b>new</b> : AArch64 (ARM 64-bit) simulator libraries for tvOS. tvOS distributions now also include the libs/headers packaged as an .xcframework.
</ul></p>
<p><ul>
<li> <b>enhancement</b> : Data : Kraken "Fast" (level 3) now takes typically around 10% less time.
<li> <b>enhancement</b> : Data : Kraken "Optimal1" (level 5) and higher levels encode in typically around 7-10% less time. This is independent of speed-ups from encoder scratch memory (see below) which can be in the same ballpark when encoding lots of independent chunks, sometimes much larger.
<li> <b>enhancement</b> : Data : Optimal1 and higher levels for all codecs now use provided scratch memory much more extensively and can sometimes avoid separate allocations completely if enough scratch memory is supplied. Especially when encoding many small, independent chunks, reusing allocations in this way can be a massive throughput increase on many-core machines. We've observed speed-ups of around 8.5x when encoding 256k Kraken chunks at Optimal2 level on a 64-core Threadripper. See "About Compression Scratch Memory" in the docs.
<li> <b>enhancement</b> : Data : OodleX parallel compress calls set up and reuse encoder scratch memory by default.
<li> <b>enhancement</b> : Data : "Optimal1" (level 5) compression on 64-bit ARM typically 10-15% faster independent of other changes noted above. (CTMF improvements)
<li> <b>enhancement</b> : Texture : BC7 RDO encoding is slightly faster, 5-8% reduction on typical textures in our test set.
</ul></p>
<p><ul>
<li> <b>fix</b> : Data : fix incorrect Linux 64-bit build settings for some files resulting in missing .note.GNU-stack sections and thus executable stacks.
<li> <b>fix</b> : Data : fix OodleX not balancing worker threads across multiple processor groups correctly if number of cores in a processor group wasn't 64. (Incorrect SetThreadGroupAffinity with ~0 affinity mask.)
<li> <b>fix</b> : Texture : Fix bug in float->sRGB conversion on x86 targets
</ul></p>
<p><h2> Release 2.9.8 - Sep 28, 2022</h2>
</p>
<p><ul>
<li> <b>new</b> : Oodle Data for WASM is now out of beta! Beta customers are encouraged to update due to smaller library size and encoder/decoder speed improvements. Please read "About Oodle on WASM" in the docs for integration notes.
<li> <b>new</b> : AArch64 (ARM 64-bit) simulator libraries for iOS. iOS distributions now also include the libs/headers packaged as an .xcframework.
<li> <b>new</b> : Texture : Support encoding from and decoding to float for BC1-5 and BC7 too, not just BC6H.
<li> <b>new</b> : Texture : BC1-3 and BC7 encode from float can now convert linear->sRGB (OodleTex_BCNFlag_LinearToSRGB), decode to float can convert sRGB->linear (OodleTex_BCNDecodeFlag_SRGBToLinear).
<li> <b>new</b> : Texture : Added OodleTex_DecodeBCN_Blocks_Ex and OodleTex_DecodeBCN_LinearSurfaces_Ex with "decode flags" argument to enable sRGB->linear encoding.
</ul></p>
<p><ul>
<li> <b>change</b> : iOS static libs now come as pairs of libs, libfoo.a and libfoo.sim.a, with the latter being for simulator. AArch64 (ARM64) targets exist for both device and sim so a single lib is no longer possible.
</ul></p>
<p><ul>
<li> <b>enhancement</b> : Data : Enable "destination is in write-combined memory" usage warnings for Windows/Linux/Mac x64 targets, not just game consoles
<li> <b>enhancement</b> : Texture : significantly improved rate-distortion performance of BC7 "preserve extremes" encoding
<li> <b>enhancement</b> : Texture : reduced worst-case memory use for BC1, BC3, BC4, BC5, BC7 RDO encoding (index merge heap size limit enforced).
</ul></p>
<p><ul>
<li> <b>fix</b> : Data : fix confusing symbol table entries around address 0 showing up in backtraces on NULL pointer fn calls on some ELF targets (NASM issue)
<li> <b>fix</b> : Data : fix memory leak in certain cases for Optimal2+ compression levels introduced in 2.9.6 (rrPool leak when allocation was attempted from scratch arena, but failed and fell back to user allocator instead)
<li> <b>fix</b> : Texture : Fix incorrect constant for "prefer wide vectors"/AVX-512 flag in public API (which didn't work correctly as a result)
<li> <b>fix</b> : Texture : Fix "preserve extremes" mode for BC7 RDO not preserving pixels correctly in certain rare cases (sometimes not round-tripping mode 7 endpoints in in-loop matrix pass)
<li> <b>fix</b> : Setting malloc/free allocator pointers to 0 through the plugin mechanism now installs always-failing dummy allocators instead of crashing on allocation.
</ul></p>
<p><h2> Release 2.9.7 - June 30, 2022</h2>
</p>
<p><ul>
<li> <b>fix</b> : Network : fix a crash bug in the dictionary builder introduced in 2.9.6 (m_scratch uninitialized)
</ul></p>
<p><ul>
<li> <b>change</b> : Data : OodleX Handle Table size is now growable up to 2048 times what it was before (2^m_num_handles_log2), making it practically unlimited
<li> <b>change</b> : Data : DirectStorage example updated for DirectStorage 1.0.2
<li> <b>change</b> : Texture : Encoder enables AVX-512 by default on more machine types.
</ul></p>
<p><ul>
<li> <b>enhancement</b> : Texture : Encoder now gives bitwise same results on all supported host platforms (Windows x64, Linux x64/ARM64, Mac x64/ARM64). This will be guaranteed going forward.
<li> <b>enhancement</b> : Texture : Significantly decreased memory usage for BC3-5 RDO encoding, slightly decreased for BC1-2.
<li> <b>enhancement</b> : Texture : "Preserve extremes" mode (preserves 0/1 in alpha channel exactly) is now supported for BC7. New BCNFlag name is OodleTex_BCNFlag_PreserveExtremes_BC3457, but the old OodleTex_BCNFlag_PreserveExtremes_BC345 will continue to be supported.
<li> <b>enhancement</b> : Texture : Encoding on ARM64 hosts is now significantly faster. On M1 Macs in particular, native ARM64 is now around ~2x faster than Rosetta x86_64 emulation, which used to be the faster path.
</ul></p>
<p><ul>
<li> <b>note</b> : Oodle 2.9.7 will be the last Oodle release to support 32-bit iOS, tvOS, MacOS targets or 32-bit x86 Linux. (Windows and Android 32-bit targets, as well as 32-bit ARM Linux, continue to be supported.)
</ul></p>
<p><h2> Release 2.9.6 - May 2, 2022</h2>
</p>
<p><ul>
<li> <b>fix</b> : Texture : fix an int overflow on textures 2 GB or larger, causing an effective under 2 GB limit for earlier versions, for example on RGBA float textures of 16k x 8k or larger.
<li> <b>fix</b> : Texture : fix incorrect assert in BC1 RDO encoder in debug builds when encoding BC1 textures without transparency that had fully black pixels
<li> <b>fix</b> : Texture : decreased error in baseline/RDO BC7 encodings for areas with certain singular covariance matrices
</ul></p>
<p><ul>
<li> <b>new</b> : Data : New example showing how to use Oodle Data with DirectStorage on Windows
</ul></p>
<p><ul>
<li> <b>change</b> : Data : improve error messages when trying to decode data that is not an Oodle stream
<li> <b>change</b> : Texture : Linux builds now enable AVX2 and higher support (previously disabled). Texture encoding on Linux should be significantly faster.
<li> <b>change</b> : Texture : Reduce number of small OodleJobs spawned, especially when compressing small mip levels.
</ul></p>
<p><ul>
<li> <b>enhancement</b> : Texture : BC1 RDO now produces slightly smaller results at same perceptual quality (or equivalently, better quality at the same size). The same improvement applies to RGB portion of BC2 and BC3.
<li> <b>enhancement</b> : Texture : AVX-512 support. We've seen up to 30% encode time reduction on AVX-512-supporting machines when encoding BC1, less for other formats. See "AVX-512" in the "Oodle Texture overviews" section in the documentation for usage notes.
</ul></p>
<p><h2> Release 2.9.5 - October 13, 2021</h2>
</p>
<p><ul>
<li> <b>fix</b> : Texture : fix bug in BC1 RDO encoder incorrectly emitting transparent black blocks in very rare cases
<li> <b>fix</b> : Texture : fix bug in BC1 RDO encoder not preserving BC1 transparency correctly in certain rare circumstances
</ul></p>
<p><ul>
<li> <b>new</b> : UWP ARM64 builds now provided
</ul></p>
<p><ul>
<li> <b>change</b> : Texture : BC1-3 decoders have changed, and the encoders now target the new decoders instead of the old ones (which matched the D3D reference). See "BCn decoding" in the "Oodle Texture overviews" section of the docs for rationale.
</ul></p>
<p><ul>
<li> <b>enhancement</b> : Texture : BC1-5 RDO encoding is significantly faster (often 3x or more); BC1 non-RDO encoding up to 2x faster; BC7 RDO encoding typically 1.13x faster.
</ul></p>
<p><h2> Release 2.9.4 - September 2, 2021</h2>
</p>
<p>This is a re-release of 2.9.3 with a change in compiler switches to fix a
binary compatibility issue on platforms compiled using MSVC. There are no
other changes.
</p>
<p><ul>
<li> <b>fix</b> : Disable FH4 exception handling for link compatibility with VC 2017
</ul></p>
<p><h2> Release 2.9.3 - July 26, 2021</h2>
</p>
<p><ul>
<li> <b>fix</b> : Data : Fix crash encoding at level Optimal1 on buffers just over block size (eg. 256k+2 bytes) when matches cross block boundary (CTMF)
<li> <b>fix</b> : Data : Fix crash when calling OodleLZ_GetCompressScratchMemBound for OodleLZ_Compressor_None introduced in 2.9.1
<li> <b>fix</b> : Data : Fix debug lib on 32-bit Linux inadvertently using SSE4.1 in some static initializers prior to CPUID check
<li> <b>fix</b> : Data : Fix Oodle decompress erroneously reporting input as corrupted when the compressed data buffer is very close to the top of virtual memory
</ul></p>
<p><ul>
<li> <b>new</b> : Network : OodleNetwork1UDP_State_Compact_ForVersion and OodleNetwork1UDP_State_Uncompact_ForVersion allow you to read/write compacted Network state for old versions (eg. 5 for 2.5.x); compacted binary state changed from v5 to v6
</ul></p>
<p><ul>
<li> <b>change</b> : Linux built with Clang 12
<li> <b>change</b> : Linux built with Jcc erratum mitigation (-mbranches-within-32B-boundaries)
<li> <b>change</b> : NX built with SDK 11.4.3
<li> <b>change</b> : PS4 built with SDK 8.500
</ul></p>
<p><ul>
<li> <b>enhancement</b> : Faster Leviathan encoding at "Normal" and "Optimal" levels
<li> <b>enhancement</b> : CPU BC7Prep decode will now use AVX2 256-bit instructions when available, for a speed win of about 25% typically (it's frequently memory bound). You can disable usage of wide vectors when desired via OodleTexRT_BC7PrepDecodeFlags_AvoidWideVectors (see docs).
</ul></p>
<p><ul>
<li> <b>regression</b> : minor regression (5-6%) in encode speed for Mermaid/Selkie on PS4 at some compression levels after update to SDK 8.5 and clang 11
</ul></p>
<p><h2> Release 2.9.2 - June 16, 2021</h2>
</p>
<p><ul>
<li> <b>fix</b> : Texture : fix crash bug in RDO encoding with Universal Tiling option enabled on some texture sizes
</ul></p>
<p><h2> Release 2.9.1 - June 7, 2021</h2>
</p>
<p><ul>
<li> <b>fix</b> : Data : Fix incorrect warnings about OodleLZ_Compressor_None being deprecated
<li> <b>fix</b> : Texture : fix bug where large textures (eg. 8k x 8k) and high job worker counts (eg. 128) could cause an int overflow leading to a crash or huge alloc. Previous versions can work around this issue by clamping image size or worker count in OodleTex_Plugins_SetJobSystemAndCount.
<li> <b>fix</b> : Texture : fix bug in negative signed float values in BC6H RDO encoding producing garbage results.
<li> <b>fix</b> : Texture : fix high-error blocks in certain very rare cases when encoding BC1-3 textures without RDO at "High" setting
</ul></p>
<p><ul>
<li> <b>change</b> : MS platforms built with VC 2019 (except Durango-XDK still built with 2017)
<li> <b>change</b> : Windows built with JCC mitigation (/QIntel-jcc-erratum) and new FH4 exception handler
<li> <b>change</b> : Oodle Texture functions now have an explicit, enforced limit on surface dimensions (OODLETEX_MAX_SURFACE_DIMENSION)
<li> <b>change</b> : OodleTex_RMSE_Normalized_BCNAware on BC6/float changed metric, values will not compare to previous versions
</ul></p>
<p><ul>
<li> <b>enhancement</b> : Faster Kraken decompression on Zen
<li> <b>enhancement</b> : Faster decompression on Mac M1 ARM64
<li> <b>enhancement</b> : Faster Oodle Texture RDO encoding of BC4/BC5 even at highest quality level.
<li> <b>enhancement</b> : New entry point OodleTex_EncodeBCN_RDO_Ex that enables several new features like RDO effort levels and Universal Tiling.
<li> <b>enhancement</b> : Oodle Texure RDO encoding now has an "effort level" parameter, just like baseline encode. Lower effort levels are significantly faster to encode but reduce quality/compression slightly. Use for fast iteration, higher effort for final builds.
<li> <b>enhancement</b> : Oodle Texture Universal Tiling, to share a single RDO encode for linear and platform-specific tiled formats. Minor hit in compression rate, but much better than always RDO encoding in linear layout and much faster than encoding per-platform.
<li> <b>enhancement</b> : Can pass OODLETEX_JOBS_DISABLE to Oodle Texture functions to cause them not to spawn any jobs even when a job system is installed. Intended for cases that run many encodes in parallel anyway (e.g. Virtual Texture tiles) where spawning more fine-grained jobs isn't useful.
</ul></p>
<p><h2> Release 2.9.0 - March 23, 2021</h2>
</p>
<p><ul>
<li> <b>fix</b> : OodleLZ_Compress had an encoder crash bug in the Optimal level encodes on data in sizes just slightly over a 256KB chunk (eg. 262145) with a repeated substring at the very end
</ul></p>
<p><ul>
<li> <b>change</b> : Mac libs and dylibs are now fat binaries with x64 and ARM64
<li> <b>change</b> : Tex : Oodle Texture no longer checks for license file
<li> <b>change</b> : defining OODLE_IMPORT_LIB / OODLE_IMPORT_DLL is no longer needed; you can link with either type of lib without setting a define
<li> <b>change</b> : Oodle public headers no longer define types like U8, SINTa, they are instead OO_U8, OO_SINTa, etc.
<li> <b>change</b> : Oodle public headers now require stdint.h which on Windows/MSVC means VC2010 or higher
</ul></p>
<p><ul>
<li> <b>change</b> : Net : OODLE_PLATFORM_HAS_SELECTDICTIONARYANDTRAIN define removed. Call OodleNetwork1_SelectDictionarySupported instead.
</ul></p>
<p><ul>
<li> <b>removed</b> : Core : support for the deprecated LZ compressors is now removed (LZH,LZA,etc.). Only newlz (Kraken,Mermaid,Selkie,Leviathan,Hydra) and LZB16 are supported.
<li> <b>removed</b> : Core : OodleLZ_CompressContext_* functions removed; streaming encoders no longer supported
<li> <b>removed</b> : Ext : OODLEX_PATH_* public defines removed.
<li> <b>removed</b> : Ext : OODLEX_WCHAR_SIZE public define removed.
<li> <b>removed</b> : Tex : OodleTex_CheckLicense func removed ; Oodle Texture no longer checks for license files
</ul></p>
<p><ul>
<li> <b>deprecation</b> : OodleConfigValues::m_OodleLZ_Small_Buffer_LZ_Fallback_Size no longer used; newlz compressors no longer ever drop down to LZB16 (default behavior unchanged)
</ul></p>
<p><h2> Release 2.8.14 - 2.8.x long term support release version</h2>
<h2> update March 21, 2021</h2>
</p>
<p><ul>
<li> <b>fix</b> : OodleLZ_Compress had an encoder crash bug in the Optimal level encodes on data in sizes just slightly over a 256KB chunk (eg. 262145) with a repeated substring at the very end
</ul></p>
<p><ul>
<li> <b>fix</b> : PS4 decode speed regression fixed
</ul></p>
<p><h2> Release 2.8.14 - February 15, 2021</h2>
</p>
<p><ul>
<li> <b>enhancement</b> : BC7 encoding is faster ; slightly different encodings at higher speed with similar quality
</ul></p>
<p><ul>
<li> <b>new</b> : Mac ARM64 build now provided ; Mac example exes are fat x64+arm64
<li> <b>new</b> : Apple tvOS build now provided
</ul></p>
<p><ul>
<li> <b>deprecation</b> : Mac 32 bit x86 build no longer provided
</ul></p>
<p><ul>
<li> <b>change</b> : Xbox built with Nov 2020 GDK
<li> <b>change</b> : PS5 built with SDK 2.0
<li> <b>change</b> : PS4 built with SDK 8.0
<li> <b>note</b> : NX built with SDK 9.4.1
<li> <b>note</b> : Windows built with MSVC 2017
</ul></p>
<p><ul>
<li> <b>regression</b> : PS4 decode speed worse due to clang 10 in SDK 8.0
</ul></p>
<p><h2> Release 2.8.13 - November 4, 2020</h2>
</p>
<p><ul>
<li> <b>fix</b> : BC1 RDO could compute different results on Intel and AMD processors
</ul></p>
<p><ul>
<li> <b>change</b> : remove use of CRT in MSVC builds to remove -MT/-MD incompatibility
</ul></p>
<p><h2> Release 2.8.12 - September 18, 2020</h2>
</p>
<p><ul>
<li> <b>change</b> : Unreal Oodle Texture plugin now has support for all consoles
<li> <b>change</b> : Unreal Oodle Data plugin better support for soft disable and per-platform disable
</ul></p>
<p><ul>
<li> <b>change</b> : Texture full license files never stop working even if they are expired; eval licenses add 30 day grace period
</ul></p>
<p><ul>
<li> <b>enhancement</b> : Fix some regressions from 2.6.3 in OodleLZ encode &amp; decode speed, particularly with Mermaid and Selkie on tiny buffers (tested on 1k and 4k)
<li> <b>enhancement</b> : clang10 Linux build with Jcc erratum mitigation workaround, and vc 2019, optional builds (gcc 47 and vc 2017 primary builds still available)
</ul></p>
<p><h2> Release 2.8.11 - rerelease - April 11, 2022</h2>
</p>
<p><ul>
<li> license check removed
</ul></p>
<p><ul>
<li> Call to rsqrt removed. Encoding will match previous behavior on Intel.
Use of reciprocal sqrt instruction caused texture encodings to be different on Intel and AMD processors.
</ul></p>
<p><h2> Release 2.8.11 - August 20, 2020</h2>
</p>
<p><ul>
<li> <b>change</b> : OodleTex_BC1_WithTransparency and OodleTex_BC2 now also support RDO ; OodleTex_BC1_WithTransparency can be used to preserve opaque alpha in the BC1 encoding.
</ul></p>
<p><ul>
<li> <b>fix</b> : Unreal integration for Oodle Texture was incorrectly using OodleTex_BC1 which has undefined alpha value; Unreal requires OodleTex_BC1_WithTransparency to output opaque alpha
</ul></p>
<p><ul>
<li> <b>enhancement</b> : OodleTex_BC1_WithTransparency non-RDO encode faster (was slower than BC1, now roughly same speed)
<li> <b>enhancement</b> : BC1-BC3 RDO quality very slightly better
</ul></p>
<p><h2> Release 2.8.10 - August 4, 2020</h2>
</p>
<p><ul>
<li> <b>new</b> : OodleTex_PixelFormat_GetName and OodleTex_BC_GetName helpers
</ul></p>
<p><ul>
<li> <b>change</b> : OodleTex_EncodeBCN_RDO and OodleTex_EncodeBCN_LinearSurfaces now accept more than 1 input surface with layout = NULL, so all mips/slices can be encoded in one call
<li> <b>change</b> : otexdds example now does all mips/volumes as a single Encode call for better parallelism
<li> <b>change</b> : default OodlePlugins_SetPrintf log plugin in MSVC platforms now uses stdio, creating a ucrt VC 2015+ dependency (previously all other platforms used stdio but MSVC platforms did not)
<li> <b>change</b> : (Windows only) when license is expired, it shows a message box and allows you to keep running rather than just failing
</ul></p>
<p><ul>
<li> <b>fix</b> : license file date compare could incorrectly report an expired license when it wasn't
<li> <b>fix</b> : potential race causing a crash in example_jobify_linuxtbb.inl (same as example_jobify_win32tp.inl fix in last release)
</ul></p>
<p><h2> Release 2.8.9 - July 25, 2020</h2>
</p>
<p><ul>
<li> <b>new</b> : Oodle Texture integration for UE4 (TextureFormatOodle for UE4.25.1)
</ul></p>
<p><ul>
<li> <b>enhancement</b> : Oodle Texture RDO encode much faster on large images
</ul></p>
<p><ul>
<li> <b>change</b> : Oodle Windows static lib build was using static lib CRT, changed to DLL CRT.
<li> <b>change</b> : OODLE_WORKERS_COUNT_ALL_HYPER_CORES can be used with OodleXInitOptions m_OodleInit_Workers_Count
<li> <b>change</b> : iOS libs incorrectly had the version number in the name (Oodle static libs do not have version number in the name, dynamic libs do)
</ul></p>
<p><ul>
<li> <b>fix</b> : Oodle Network training could fail on input larger than 2 GB (32 bit count overflow)
<li> <b>fix</b> : potential race causing a crash in example_jobify_win32tp.inl in dep link lifetime
</ul></p>
<p><h2> Release 2.8.8 - July 7, 2020</h2>
</p>
<p><ul>
<li> <b>new</b> : OodleTexRT_PS5GPU_BC7Prep_DecodeMulti to decode multiple BC7Prep chunks at once with reduced memory use and GPU synchronization overhead
<li> <b>new</b> : GPU-side BC7Prep decoding now supported on Xbox Series X, Xbox One and PS4
</ul></p>
<p><ul>
<li> <b>enhancement</b> : CPU-side BC7Prep decoding is significantly faster for large textures or when decoding to write-combined memory, and requires less scratch memory
<li> <b>enhancement</b> : PS5 GPU BC7Prep decode is 2x-3x faster, uses less GPU memory bandwidth, and significantly less scratch memory
</ul></p>
<p><ul>
<li> <b>change</b> : rename OodleTex_PixelFormat_3_F32_RGBA to OodleTex_PixelFormat_3_F32_RGB
<li> <b>change</b> : PS5 GPU BC7Prep no longer implicitly performs any cache invalidations; this is now up to the app.
</ul></p>
<p><ul>
<li> <b>deprecation</b> : OodleTexRT_BC7Prep_PS5GPU_Init is deprecated, call OodleTexRT_PS5GPU_Init instead
<li> <b>deprecation</b> : OodleTexRT_BC7Prep_PS5GPU_MinDecodeScratchSize is deprecated, call OodleTexRT_PS5GPU_BC7Prep_MinDecodeScratchSize instead
<li> <b>deprecation</b> : OodleTexRT_BC7Prep_PS5GPU_Decode is deprecated, use OodleTexRT_PS5GPU_BC7Prep_DecodeMulti instead
</ul></p>
<p><ul>
<li> <b>fix</b> : Xbox import lib names for DLLs had version number in the lib name; remove to match Windows names. Version number is in the DLL but not the import lib name.
<li> <b>fix</b> : 1 and 2 channel U16 promotion to 4 channel was not filling the implicit opaque alpha correctly, affected BC4 and BC5 decodes to 4 channel formats
</ul></p>
<p><h2> Release 2.8.7 - June 8, 2020</h2>
</p>
<p><ul>
<li> <b>new</b> : Oodle Texture! Oodle Texture is a new product separate from Oodle Data. Oodle Texture dramatically reduces the size of block-compressed BC1-BC7 textures.
</ul></p>
<p><ul>
<li> <b>change</b> : executables provided with SDK are now in bin dir
<li> <b>change</b> : oodle2base.h header with basic types now shared by Oodle Data, Net, and Texture
<li> <b>change</b> : example_jobify now provides a plug-in job system that can be used with Oodle Data, Net, and Texture
<li> <b>change</b> : t_fp_Oodle_Job common data type for Jobify functions in Oodle Data, Net, and Texture (replaces t_fp_OodleCore_Plugin_Job)
<li> <b>change</b> : OODLE_JOB_MAX_DEPENDENCIES common define for Jobify in Oodle Data, Net, and Texture (replaces OODLECORE_PLUGIN_JOB_MAX_DEPENDENCIES)
<li> <b>change</b> : <i>_SALSA</i>_ define no longer needed for PS5 Oodle header
<li> <b>change</b> : remove OodleLZ_CompressionLevel_Count ; the correct range is [Min,Max] because of negative levels
</ul></p>
<p><h2> Release 2.8.6 - May 9, 2020</h2>
</p>
<p><ul>
<li> <b>new</b>: OodlePlugins_SetJobSystemAndCount replaces OodlePlugins_SetJobSystem with desired parallelism argument
</ul></p>
<p><ul>
<li> <b>enhancement</b> : Leviathan decodes 5-10% faster on modern x86/64 platforms.
</ul></p>
<p><ul>
<li> <b>change</b> : Oodle build for Windows now compiled with MSVC 2017 and uses ucrt
<li> <b>change</b> : Oodle build for Mustard now compiled with MSVC 2017
<li> <b>change</b> : fix Mac and Linux debug &amp; dead stripping
</ul></p>
<p><ul>
<li> <b>deprecation</b> : remove async Cancels from the public API (OodleX_CancelOrWait_AndDelete, OodleX_WaitCancelAllPending, OodleXIOQ_Pause, OodleXIOQ_WaitCancelAllPending)
<li> <b>deprecation</b> : m_OodleLZ_Desired_Parallel_BranchFactor removed from OodleXConfigValues, now automatically scaled to worker count
<li> <b>deprecation</b> : OodlePlugins_SetJobSystem is deprecated. Prefer OodlePlugins_SetJobSystemAndCount.
<li> <b>deprecation</b> : OodleXPriority levels are no longer exposed to the client. Client work should be OodleXPriority_Normal only. Prevents a potential deadlock bug mixing high priority client work with Core Jobs.
</ul></p>
<p><h2> Release 2.8.5 - March 10, 2020</h2>
</p>
<p><ul>
<li> <b>fix</b> : iOS build could assert "OodleAssert, 32 >= 48" in debug builds; this was also a bug in release builds on iOS that could cause stack variable corruption; do not use sendQuantumCRCs on iOS before this version!
</ul></p>
<p><ul>
<li> <b>new</b>: initial Mustard release version
<li> <b>new</b>: Xbox One GDK release version
<li> <b>change</b> : Stadia build variant
</ul></p>
<p><h2> Release 2.8.4 - October 31, 2019</h2>
</p>
<p><ul>
<li> <b>fix</b> : OodleNetwork1UDP_Encode could read one byte past the end of the input buffer, causing an access violation. The extra byte read was not used in coding, there's no problem with the compressed packets made. Allocating the input buffer with padding is an acceptable workaround for older versions.
</ul></p>
<p><h2> Release 2.8.3 - October 4, 2019</h2>
</p>
<p><ul>
<li> <b>new</b>: initial Salsa release version
</ul></p>
<p><ul>
<li> <b>change</b> : Stadia build SO extracts debug info to .debug file and uses add-gnu-debuglink to link to it
<li> <b>change</b> : disable debug info in Linux ARM64 build because of TLS debug relocation bug in clang
</ul></p>
<p><h2> Release 2.8.2 - September 19, 2019</h2>
</p>
<p><ul>
<li> <b>fix</b> : Rare non-critical issue : "WARNING: Too many indices for decoder scratch!" could be logged by the encoder in Leviathan Level 9. Valid compressed data was still made, but in some cases it was suboptimal.
<li> <b>fix</b> : Rare crash bug in Optimal level encoders on large buffers (LRM degeneracy jumpInShift 32) (since 2.8.1)
<li> <b>fix</b> : fix some spurious valgrind detections in Oodle (there were no bugs)
</ul></p>
<p><h2> Release 2.8.1 - July 7, 2019</h2>
</p>
<p><ul>
<li> <b>new</b>: Oodle Core API : OodleLZ_GetFirstChunkCompressor preferred name of old API OodleLZ_GetChunkCompressor
<li> <b>new</b>: Oodle Core API : OodleLZ_GetAllChunksCompressor should be used when chunks may have heterogeneous compressors (eg. with Hydra)
<li> <b>new</b>: Oodle Ext API : OodleX_CorePlugin_RunJob and OodleX_CorePlugin_WaitJob
<li> <b>new</b>: Oodle Ext API : OodleX_GetNumWorkerThreads
</ul></p>
<p><ul>
<li> <b>enhancement</b> : reduce OodleLZ_GetCompressScratchMemBound, particularly on small buffers and small hash table options, and more so for Mermaid/Selkie
<li> <b>enhancement</b> : OodleLZDecoder_MemorySizeNeeded was increased in version 2.8.0 to allow for apparent Mermaid/Selkie data possibly being Hydra ; it is now reduced back down and OodleLZ_GetAllChunksCompressor should be used to detect Hydra data.
<li> <b>enhancement</b> : Optimal level encoders 5-10% faster on large buffers (LRM Bloom filter)
</ul></p>
<p><ul>
<li> <b>change</b> : Hydra data now needs to be explicitly identified when used as the OodleLZ_Compressor type in functions like OodleLZDecoder_MemorySizeNeeded (or use OodleLZ_GetAllChunksCompressor)
<li> <b>change</b> : built with Switch SDK 7.4.0 (clang 7.0.1)
<li> <b>change</b> : built with PS4 SDK 6.5 (clang 7.0.1)
</ul></p>
<p><ul>
<li> <b>fix</b> : Switch : fix intermittent problem with debugging in the VSI in apps that use Oodle; Oodle linkage confused the debugger.
<li> <b>fix</b> : OodleLZ_GetCompressedStepForRawStep was incorrectly casting the return value to 32 bit, making it wrong for steps over 2 GB
<li> <b>fix</b> : fix rare read out of array bounds in Kraken &amp; Leviathan encoder (multiarrays non-indexed splitter), would not be an access violation or compression failure, but could cause unexpected behavior and non-deterministic encoding.
</ul></p>
<p><ul>
<li> <b>deprecation</b> : OodleLZ_GetChunkCompressor will be removed in the future; use OodleLZ_GetAllChunksCompressor or OodleLZ_GetFirstChunkCompressor
<li> <b>deprecation</b> : OodleXMallocCall family of functions were incorrectly public, removed
</ul></p>
<p><h2> Release 2.8.0 - April 9, 2019</h2>
</p>
<p><ul>
<li> <b>new</b> : OodleCore_Plugins_SetJobSystem for Job plugin system to thread work in Oodle Core using a user-provided worker thread system (see Oodle_About_Job_Threading_Plugins)
<li> <b>new</b> : OodleLZ_GetCompressScratchMemBound to query how much scratch is needed for OodleLZ_Compress to avoid additional allocations
<li> <b>new</b> : example_lz_noallocs : example demonstrating Oodle compression &amp; decompression with no allocations done by Oodle
</ul></p>
<p><ul>
<li> <b>enhancement</b> : Optimal level encoders are faster, particularly Kraken, and even more so with Jobify threading (but also faster single threaded)
<li> <b>enhancement</b> : Leviathan fast levels (SuperFast-Normal) encode much faster with a small decrease in compression ratio
</ul></p>
<p><ul>
<li> <b>change</b> : API : WARNING CompressOptions struct changed. Old fields have not moved, new fields have been added at the end of the struct. Zero initializing the new fields means "use default".
<li> <b>change</b> : CompressOptions:jobify option to control threading of the OodleLZ_Compress encoder in Oodle Core (see Oodle_About_Job_Threading_Plugins)
<li> <b>change</b> : CompressOptions:farMatchMinLen option to allow decode platform cache targeting of the encoded stream
<li> <b>change</b> : CompressOptions:spaceSpeedTradeoffBytes value of zero now means "use default" (256) to make it consistent with all other Options taking zero for "default". Use negative to get zero.
<li> <b>change</b> : docs are now html instead of chm
<li> <b>change</b> : Android x86_64 build
<li> <b>change</b> : add a Mermaid HyperFast4 level (previously HF4 was the same as HF3 in Mermaid)
<li> <b>change</b> : API : OodleLZ_GetDecodeBufferSize, OodleLZ_GetCompressedBufferSizeNeeded and OodleLZ_GetInPlaceDecodeBufferSize : take compressor argument to return smaller padding for the new codecs.
<li> <b>change</b> : API : OodleLZ_GetChunkCompressor : take compressed size argument to ensure it doesn't read past end
<li> <b>change</b> : Kraken Optimal1 level gets a bit less compression in trade off for much faster encoding
</ul></p>
<p><ul>
<li> <b>fix</b> : WARNING! Nasty destructive bug in the example code : examples calling "make_example_input" were stomping the input file. This was not in the Oodle libs, just the example code.
<li> <b>fix</b> : Leviathan no longer uses the allocator if sufficient scratch mem is passed in to OodleLZ_Compress
<li> <b>fix</b> : bug in Leviathan scratch accounting could rarely make it refuse to encode some chunks (valid compressed data would still be made, but it might be suboptimal)
<li> <b>fix</b> : Mermaid/Selkie in-place decompression could fail ("in place" decoding is when the input compressed and output decompressed buffers overlap)
<li> <b>fix</b> : OodleX worker threads restored to LIFO wakeup order after being incorrectly FIFO for a few versions (improves cache coherence)
</ul></p>
<p><ul>
<li> <b>deprecation</b> : OodleXLZ_ReadCompressWrite_Async API removed
<li> <b>deprecation</b> : CompressOptions previously deprecated maxHuffmansPerChunk now unused
<li> <b>deprecation</b> : CompressOptions verbosity deprecated; wasn't used by the new compressors anyway
</ul></p>
<p><h2> Release 2.7.6 - December 18, 2018</h2>
</p>
<p><ul>
<li> <b>enhancement</b> : Linux ARM64 : Mermaid/Selkie decode faster
</ul></p>
<p><ul>
<li> <b>change</b> : Android libs now in abi subdirectories
<li> <b>change</b> : added new usage warning that verifies the compressed buffer passed in to OodleLZ_Compress is at least OodleLZ_GetCompressedBufferSizeNeeded bytes long; can be disabled with Oodle_SetUsageWarnings
</ul></p>
<p><ul>
<li> <b>fix</b> : Fix Leviathan at Optimal levels using a large amount of stack memory (was 512k, now fits in 64k)
<li> <b>fix</b> : Fix the Unreal .build.cs rules for the Oodle integration on non-Windows platforms, for Unreal 4.20
<li> <b>fix</b> : Fix the Unreal data integration with bAsync compression turned on there could be a crash due to a race
<li> <b>fix</b> : Fix Oodle Network lib name on Switch ; was "oo2corenet" should be "oo2netswitch"
<li> <b>fix</b> : Fix a bug in the Mermaid/Selkie decode on Switch that could cause a fuzz safety failure (overrun on corrupt data)
</ul></p>
<p><h2> Release 2.7.5 - October 31, 2018</h2>
</p>
<p><ul>
<li> <b>new</b> : OodleLZ_Compressor_RespectsDictionarySize property query tells if a compressor obeys OodleLZ_CompressOptions:dictionarySize (all the new codecs do, some old ones do not)
<li> <b>new</b> : ozip -b (benchmark) command line argument, similar to zstd -b
</ul></p>
<p><ul>
<li> <b>enhancement</b> : Linux ARM64 : enable ASM optimized kernels in build
</ul></p>
<p><ul>
<li> <b>change</b> : clarify that seek chunk boundaries are relative to dictionary base, not current raw buffer
<li> <b>change</b> : old compressor LZH was doing archaic RLE mode at level 1 (superfast), now removed
<li> <b>change</b> : Oodle Windows SDK import libs back in the "lib" folder (temporarily was "import_lib")
</ul></p>
<p><ul>
<li> <b>fix</b> : Fix bug with seekChunkReset on very large buffers (over 1 GB)
<li> <b>fix</b> : OodleLZ_CompressOptions_Validate was not making seekChunkLen power of 2, which it must be
<li> <b>fix</b> : change OODLELZ_SEEKCHUNKLEN_MAX from 1 GB to half GB. (recommend using OodleLZ_MakeSeekChunkLen)
</ul></p>
<p></p>
<p><h2> Release 2.7.4 - October 25, 2018</h2>
</p>
<p><ul>
<li> <b>fix</b> : Fix bug in Leviathan Optimal5 (level 9) encoder reading uninitialized memory. The encoder did not crash and always made valid data, but it was not deterministic.
</ul></p>
<p><h2> Release 2.7.3 - October 10, 2018</h2>
</p>
<p><ul>
<li> <b>enhancement</b> : Mermaid, Kraken &amp; Leviathan decompress faster in 32-bit by about 5% on x86, even more on ARM.
</ul></p>
<p><ul>
<li> <b>change</b> : Oodle windows SDK now ships DLLs and static libs. Libs are in "import_lib" and "static_lib". (dir names changed in 2.7.5). To use the static lib define OODLE_IMPORT_LIB.
</ul></p>
<p><ul>
<li> <b>fix</b> : Fix bug that could cause the Kraken &amp; Leviathan encoder to crash at level 8 and 9.
</ul></p>
<p><h2> Release 2.7.2 - September 10, 2018</h2>
</p>
<p><ul>
<li> <b>fix</b> : Fix linkage in 32-bit iOS build
</ul></p>
<p><h2> Release 2.7.1 SDK Update - August 13, 2018</h2>
</p>
<p><ul>
<li> <b>change</b> : Switch SDK updated to 5.5
<li> <b>change</b> : PS4 SDK updated to 5.5
</ul></p>
<p><h2> Release 2.7.1 - August 8, 2018</h2>
</p>
<p><ul>
<li> <b>fix</b> : Fix a fuzz safety failure. Decoding corrupt or attack data with Mermaid or Selkie could cause a read access violation.
</ul></p>
<p><h2> Release 2.7.0 - August 6, 2018</h2>
</p>
<p><ul>
<li> <b>change</b> : Oodle Network is now a separate SDK and lib from Oodle Data compression (Core &amp; Ext).
</ul></p>
<p><ul>
<li> <b>new</b> : OodleLZ_CompressOptions::profile option added (replaces "unused")
<li> <b>new</b> : example_lz / lz_test_13 shows how static dictionaries can be used with Oodle LZ via memcpy
</ul></p>
<p><ul>
<li> <b>enhancement</b> : Mermaid, Kraken &amp; Leviathan decompress faster by 5-10%
</ul></p>
<p><ul>
<li> <b>change</b> : OodleHuffman public APIs removed
<li> <b>change</b> : OodlePlugins_ API set renamed to OodleCore_Plugins_ and OodleNet_Plugins_
eg. OodlePlugins_SetPrintf -> OodleCore_Plugins_SetPrintf
and OodleNet_Plugins_SetPrintf added
<li> <b>change</b> : PS3 and Xbox 360 builds removed
<li> <b>change</b> : Oodle Mac SDK now requires min OSX version 10.9 with libc++ instead of libstdc++
(note using the dylib prevents most of these problems; it's recommended to use the shared libs instead of the static libs if possible)
</ul></p>
<p><ul>
<li> <b>deprecation</b> : begin removal of archaic option; rename OodleLZ_CompressOptions::maxHuffmansPerChunk -> deprecated_maxHuffmansPerChunk
</ul></p>
<p><h2> Release 2.6.3 Update 1 - July 3, 2018</h2>
</p>
<p><ul>
<li> <b>fix</b> : iOS lib didn't include bitcode correctly
</ul></p>
<p><h2> Release 2.6.3 - June 6, 2018</h2>
</p>
<p><ul>
<li> <b>new</b> : new faster "HyperFast" compression levels; OodleLZ_CompressionLevel_HyperFast1-4 provide super fast encoding with lower compression ratios for real-time encoding needs. Available in Kraken, Mermaid &amp; Selkie.
<li> <b>new</b> : example_lz_chart is now provided as a pre-built executable for evaluators on desktop platforms
<li> <b>new</b> : ozip executable provided on desktop platforms which acts like gzip; can be used for pipe or file compression.
</ul></p>
<p><ul>
<li> <b>fix</b> : Mermaid Normal encoder wasn't doing dictionary preload; this made compression ratio worse than it should be in parallel encodes (a tiny bit).
<li> <b>fix</b> : OodleXLZ_Compress_Async was running wide even when OodleXAsyncSelect_Wide flag was not set. Now uses only one thread if Wide is not set.
<li> <b>fix</b> : Compression of buffers larger than 1 GB, with Options enabled for seekChunkReset with seekChunkLen of 0.5 GB or less could create invalid compressed data which would fail to decode or not respect the requested seek chunking
</ul></p>
<p><h2> Release 2.6.2 - April 30, 2018</h2>
</p>
<p><ul>
<li> <b>enhancement</b> : improve parallelism of the OodleX Async wide compression
</ul></p>
<p><ul>
<li> <b>fix</b> : Some SIMD code could try to run the SSE4 variant even on CPU's that don't have SSE4, causing a crash. (Affects x86/x64 Windows, Linux &amp; Mac)
<li> <b>fix</b> : XBox One libs failed BinScope due to NASM assembly objects setting wrong MASM version number
</ul></p>
<p><h2> Release 2.6.1 - April 4, 2018</h2>
</p>
<p><ul>
<li> <b>enhancement</b> : Huffman encoders slightly faster. Fast levels of Mermaid, Kraken, etc. about 1% faster to encode.
</ul></p>
<p><ul>
<li> <b>fix</b> : setting OodleLZ_CompressOptions::maxLocalDictionarySize above 2^26 could cause a crash in the optimal encoders due to S32 wrapping to negative
<li> <b>fix</b> : OodleLZ in backward compatible mode for version &lt; 6 would not compress memset chunks correctly (would send them uncompressed); they did not fail to encode or decode, it was just inefficient
<li> <b>fix</b> : Selkie wasn't sending memset chunks; now does
<li> <b>fix</b> : Oodle Network could assert if only one packet was given to SelectDictionaryFromPackets. This bug affected the debug lib only.
</ul></p>
<p><ul>
<li> <b>deprecation</b> : Optimal encode levels of old codecs LZNIB, LZBLW and LZA removed. Optimal encodes with those codecs now use Normal level encoder.
</ul></p>
<p></p>
<p><h2> Release 2.6.0 - Feb 27, 2018</h2>
</p>
<p><ul>
<li> <b>new</b> : new compressor Leviathan !!
</ul></p>
<p><ul>
<li> <b>new</b> : new API Oodle_SetUsageWarnings ; usage warnings are on by default
<li> <b>new</b> : OodlePlugin_Printf_Verbose added; can be installed in Oodle Core via OodlePlugins_SetPrintf
</ul></p>
<p><ul>
<li> <b>enhancement</b> : Kraken &amp; Mermaid optimal levels now get more compression (chunk adaptation &amp; TLL parse)
<li> <b>enhancement</b> : Mermaid optimal levels now get more compression on some files (costing of entropy offsets)
<li> <b>enhancement</b> : Kraken &amp; Mermaid generally achieve better space-speed with the >= 2.6.0 bit stream changes (smaller sizes and/or faster to decode)
<li> <b>enhancement</b> : Kraken, Mermaid &amp; Selkie fast levels are now much faster to encode! (especially SuperFast and VeryFast)
</ul></p>
<p><ul>
<li> <b>change</b> : WARNING Kraken &amp; Mermaid data made by 2.6.0 by default cannot be loaded by Oodle 2.5 and earlier ;
set m_OodleLZ_BackwardsCompatible_MajorVersion if you need that.
Oodle can always load data made by previous versions, but the reverse is not necessarily true.
</ul></p>
<p><ul>
<li> <b>change</b> : WARNING Oodle Network Compact/Uncompact is not compatible between before 2.6.0 and after 2.6.0
</ul></p>
<p><ul>
<li> <b>change</b> : OodleLZ_Small_Buffer_LZ_Fallback_Size default value changed to 0 so it never happens unless the client
modifies this value to something larger.
<li> <b>change</b> : example_lz : added lz_test_12 showing in place decoding
<li> <b>change</b> : Hydra can select Leviathan. Hydra-compressed data cannot be loaded by Oodle 2.5 and earlier because they
don't contain Leviathan. To use Hydra to make data compatible with previous versions, set m_OodleLZ_BackwardsCompatible_MajorVersion.
<li> <b>change</b> : OodleLZ_Compress API change , added scratch memory arguments so client can pass in pre-allocated memory to
eliminate internal Oodle alloc calls. (non-optimal levels only in the new compressor family; optimal levels &amp; old compressors will still do allocations even if scratch is
provided)
<li> <b>change</b> : fix name of enums to match OodleX convention : OodleLog_VerboseLevel renamed to OodleXLog_VerboseLevel , OodleLog_StateFlags renamed to OodleXLog_StateFlags
<li> <b>change</b> : secret level 8 (OodleLZ_CompressionLevel_Optimal4) is now public ; no longer modifies compress options or changes space-speed tradeoff target
<li> <b>change</b> : OodleLZ_CompressionLevel_Optimal4 Mermaid &amp; Kraken higher compression optimal parse
<li> <b>change</b> : Oodle for Switch is now built with SDK 3.4
<li> <b>change</b> : OodleHuffman_EncodeArrayU8 takes scratch memory argument to avoid internal allocation
<li> <b>change</b> : OodleXLZ_Decompress_ThreadPhased_Narrow_Async takes scratch memory argument to avoid internal allocation
<li> <b>change</b> : OodleLZ_Decompress API : default argument value of OodleLZ_FuzzSafe_No removed; recommend passing OodleLZ_FuzzSafe_Yes
<li> <b>change</b> : LZH and LZHLW removed from FuzzSafe set. If you were previously decoding them using FuzzSafe_Yes they will now fail.
<li> <b>change</b> : OodleXLZ_ReadAndDecompress_Stream_Async API : added decBufBase argument
<li> <b>change</b> : OodleLZ_CompressOptions_GetDefault at level 8 was returning a lower spaceSpeedTradeoffBytes ; don't do that anymore, the default is always 256 ; decode speed is mostly independent of compression level.
</ul></p>
<p><ul>
<li> <b>fix</b> : Mermaid/Selkie : some of the non-optimal encode levels were not respecting the dictionarySize option to limit the match window
<li> <b>fix</b> : Kraken/Mermaid/Selkie didn't support CompressionLevel_None correctly. They now pass through data uncompressed at that level.
<li> <b>fix</b> : Kraken/Mermaid/Selkie decoders had some potential fuzz safety violations (long matches at end of buffer)
<li> <b>fix</b> : OodleHuffman_DecodeArrayU8 wasn't doing CPU detection; it was slower than it should be if you didn't call other Oodle functions
<li> <b>fix</b> : the OodleXLZ_Compress_WriteOOZ family of functions took seekChunkLen as both as a function argument and via the OodleLZ_CompressOptions , creating a potential for mismatch ; the function argument is now removed.
<li> <b>fix</b> : Mermaid encoder was not putting backwards compatible streams correctly for major version 3 (2.3) compatibility (was always making streams for version >= 2.4.0)
<li> <b>fix</b> : Mermaid/Selkie encoder could overrun compressed buffer beyond OodleLZ_GetCompressedBufferSizeNeeded on some blocks. In parallel encoding mode this could cause corrupted compressed streams.
<li> <b>fix</b> : OodleXLZ_Decompress_ThreadPhased_Narrow_Async had a race in its finalization that could cause a read from freed memory
<li> <b>fix</b> : OodleLZDecoder_DecodeSome was incorrectly returning false when compAvail was too small to parse the first header (typically &lt; 16 bytes); now returns true with no progress
<li> <b>fix</b> : OodleLZ_Decompress could return -1 for failure; it should always return 0 for failure (OODLELZ_FAILED); check &lt;= 0 in previous versions
</ul></p>
<p><ul>
<li> <b>warning</b> : DEPRECATION : Oodle compressors that predate Kraken are being gradually deprecated. (eg. LZH, LZNA, etc.) You should always be encoding with compressors
from the new Kraken family (Kraken, Mermaid, Selkie, Leviathan, Hydra). Old decompressors will be supported for the forseeable future, so old data will still be loaded but
the encoders will be removed in some future version. Attempts to encode with outdated compressors is now logged as an Oodle Usage Warning. This can be disabled with Oodle_SetUsageWarnings.
The OodleLZ_Compressor enums for the old codecs are now hidden; you must define OODLE_ALLOW_DEPRECATED_COMPRESSORS before including oodle2.h to get them.
</ul></p>
<p><ul>
<li> <b>obsolescence</b> : EASTL is no longer used
<li> <b>deprecation</b> : old OodleLZ_CompressionLevel_RLE removed
<li> <b>deprecation</b> : OodleX OOZ functions removed (OodleXLZ_Compress_WriteOOZ_Async, etc)
<li> <b>deprecation</b> : OodleXLZ_Decompress_ThreadPhased_Wide_Async removed
</ul></p>
<p><h2> Release 2.5.5 - August 22, 2017</h2>
</p>
<p><ul>
<li> <b>fix</b> : A bug in the Kraken &amp; Mermaid encoders was introduced in Oodle 2.5.0 ; any data encoded with Kraken or
Mermaid from Oodle 2.5.0 - 2.5.4 should be checked for correct decompression and re-encoded if needed. Those
versions may have made data which will fail to decode, or might claim to succeed decoding but produce bad bytes.
The cause was that huff streams in the encoder could collide and overwrite each other without detection.
This was most likely in whole-huff chunks at 128k boundaries, on trinary-aligned data (such as RGB BMP data).
This was more likely with m_OodleLZ_BackwardsCompatible_MajorVersion &lt;= 2 but could happen in other cases.
</ul></p>
<p><h2> Release 2.5.4 - August 8, 2017</h2>
</p>
<p><ul>
<li> <b>new</b> : Windows UWP build added
</ul></p>
<p><ul>
<li> <b>change</b> : Oodle PS4 now built with SDK 4.500
</ul></p>
<p><ul>
<li> <b>fix</b> : omit-frame-pointer was set on too many builds; it is now only used in x86 (32-bit) builds
</ul></p>
<p><h2> Release 2.5.3 - June 14, 2017</h2>
</p>
<p><ul>
<li> <b>fix</b> : remove alloca use in rrHuffman that could cause crash on threads with small stack size on Linux
</ul></p>
<p><h2> Release 2.5.2 - May 25, 2017</h2>
</p>
<p><ul>
<li> <b>fix</b> : Kraken decoder had a bug that caused it to incorrectly return failure on valid compressed chunks
(due to the header corruption check not counting the scratch space needed with correct accounting of the thread phasing header)
- NOTE this change means OodleLZDecoder_MemorySizeNeeded is slightly larger now
<li> <b>fix</b> : fix handle leak in OodleXLZ_Compress_WriteOOZFile_AsyncAndWait when file open failed
</ul></p>
<p><h2> Release 2.5.1 - May 13, 2017</h2>
</p>
<p><ul>
<li> <b>enhancement</b> : Mermaid &amp; Selkie encoding improved (faster and better ratio) on buffers &lt;= 64k bytes long
</ul></p>
<p><ul>
<li> <b>change</b> : Oodle Mac OSX build now includes static libs and dynamic libs.
<li> <b>change</b> : Xbox One build is made with March 2017 XDK , still VC 2012 (but VC 2015 compatible)
</ul></p>
<p><ul>
<li> <b>deprecation</b> : LZB16 and LZBLW Optimal level encoders are gone. LZB with CompressionLevel >= Optimal1 now drops down to Normal. Use Selkie instead.
<li> <b>obsolescence</b> : libdivsufsort is no longer used
</ul></p>
<p><h2> Release 2.5.0 - April 20, 2017</h2>
</p>
<p><ul>
<li> <b>new</b> : OodleHuffman_EncodeArrayU8 and OodleHuffman_DecodeArrayU8 reintroduced as public APIs. (not compatible with old public Huffman API)
</ul></p>
<p><ul>
<li> <b>enhancement</b> : Kraken, Mermaid &amp; Selkie - the non-optimal encode levels (SuperFast - Normal) get more compression and encode faster
<li> <b>enhancement</b> : Kraken, Mermaid &amp; Selkie - faster to decode, especially on ARM (Android, iOS, Switch)
<li> <b>enhancement</b> : Hydra encoding now works in levels below Optimal
</ul></p>
<p><ul>
<li> <b>change</b> : NX now uses SDK 3.0
</ul></p>
<p><ul>
<li> <b>fix</b> : Kraken, Mermaid &amp; Selkie - SuperFast encode level had bugs causing it to get much worse compression than necessary
<li> <b>fix</b> : LZB16 encoder at the Optimal1 level could crash due to uninitialized memory
</ul></p>
<p><h2> Release 2.4.3 - February 14, 2017</h2>
</p>
<p><ul>
<li> <b>fix</b> : Mermaid &amp; Selkie encoders could cause an access violation reading past the end of the raw buffer if the
length was just over 64k mod 128k
<li> <b>fix</b> : Some compressors failed to decode files that were (128k+1)mod 256k bytes long due to bug in fuzz safety checks
<li> <b>fix</b> : Selkie encoder was incorrectly choosing offset compression in some cases, causing slower decodes
</ul></p>
<p><h2> Release 2.4.2 - January 25, 2017</h2>
</p>
<p><ul>
<li> <b>new</b> : Nintendo NX (Switch) support (SDK 0.17.13 and 1.0.0)
<li> <b>new</b> : example_lz_outputchunking : Example demonstrating cutting OodleLZ compressed output into fixed size chunks
</ul></p>
<p><ul>
<li> <b>enhancement</b> : Kraken, Mermaid &amp; Selkie now support "in-place" decoding ; OodleLZ_Compressor_CanDecodeInPlace now
returns true for all OodleLZ decoders
</ul></p>
<p><ul>
<li> <b>fix</b> : a bug could occur in Oodle Ext 32-bit builds on systems with user memory in the top 2 GB
<li> <b>fix</b> : rename OodleLog_Printf macro to OodleXLog_Printf to match OodleX lib naming convention
<li> <b>fix</b> : LZB16 decoder crashed on 32-bit ARM Android. LZB16 was also used as the fallback for tiny buffers
in Kraken/Mermaid/Selkie/Hydra.
</ul></p>
<p><h2> Release 2.4.1 - October 3, 2016</h2>
</p>
<p><ul>
<li> <b>new</b> : OodleX_ReleaseThreadTLS function to release OodleX TLS resources in the rare usage that you churn
through a huge number of thread creates and destroys
</ul></p>
<p><ul>
<li> <b>change</b> : Clean up the behavior of OodleLZ_GetCompressedStepForRawStep when it is not given the entire compressed data;
now returns -1 for error and 0 for not enough data.
</ul></p>
<p><ul>
<li> <b>fix</b> : Fix race in the OodleThinSemaphore used in the example code via OodleX_Semaphore_Post; this was
only used by example_lz_threadphased , so should not affect any production code
<li> <b>fix</b> : Out of memory default handler would just infinite busy-loop on fgetc on non-Windows platforms
<li> <b>fix</b> : Android distribution didn't contain AArch64 libs
</ul></p>
<p><h2> Release 2.4.0 - August 22, 2016</h2>
</p>
<p><ul>
<li> <b>new</b> : Hydra ; automatically selects Kraken/Mermaid/Selkie
<li> <b>new</b> : example_lz lz_test_11 demonstrates sliding window with Kraken using memcpy
<li> <b>new</b> : Mermaid+ ; slightly higher compression, slightly lower speed ; control Mermaid vs Mermaid+ using spaceSpeedTradeoffBytes
</ul></p>
<p><ul>
<li> <b>enhancement</b> : LZNA level 8 (Optimal 3) tries several min match lengths
</ul></p>
<p><ul>
<li> <b>fix</b> : Selkie &amp; Mermaid encoders could overrun the compressed buffer when data expanded
<li> <b>fix</b> : fix Mac dylib having a different name for its self-reference
<li> <b>fix</b> : fix Linux link error with gold on the Oodle static lib
<li> <b>fix</b> : fix iOS version min lowered to 7.0 (was 8.1)
<li> <b>fix</b> : fix race in some low level thread primitives caused by the threadprofiler. Showed up as ThreadPhased decodes hanging.
</ul></p>
<p><h2> Release 2.3.0 - July 14, 2016</h2>
</p>
<p><ul>
<li> <b>new</b> : Mermaid ! - Mermaid is a new super-fast-to-decode compressor with good compression ratios (comparable to ZLib)
<li> <b>new</b> : Selkie ! - Selkie is the fastest-decoding compressor, with low compression ratios (comparable to LZ4)
<li> <b>new</b> : new compressor property query OodleLZ_Compressor_CanDecodeFuzzSafe
<li> <b>new</b> : OodleConfigValues for core-only compressor config
<li> <b>new</b> : OodleConfigValues::m_OodleLZ_BackwardsCompatible_MajorVersion - set to 2 to make Kraken data that can be loaded by Oodle version 2.2.0
<li> <b>new</b> : lz_test_10 in example_lz demonstrates decoding quanta from a finite io buffer
</ul></p>
<p><ul>
<li> <b>enhancement</b> : Kraken is even faster to decode (10-20%) on all platforms
<li> <b>enhancement</b> : Kraken significantly faster to decode on ARM
</ul></p>
<p><ul>
<li> <b>change</b> : WARNING Kraken data made by 2.3.0 by default cannot be loaded by Oodle 2.2.0 ; set m_OodleLZ_BackwardsCompatible_MajorVersion if you need that.
Oodle can always load data made by previous versions, but the reverse is not necessarily true.
<li> <b>change</b> : OodleLZ Decompress functions args changed. New OodleLZ_FuzzSafe argument. Removed the allowed_compressor_mask.
<li> <b>change</b> : OodleLZ_CompressOptions dictionarySize option added to limit offsets
<li> <b>change</b> : OodleLZ_CompressOptions offsetShift option for old LZH encoder removed (now always 0)
<li> <b>change</b> : LZB16 decoder is now fuzz safe. Very slightly slower to decode.
</ul></p>
<p><ul>
<li> <b>fix</b> : LZB16 Optimal1 level could crash in encode of files > 2GB
<li> <b>fix</b> : OodleLZ_GetInPlaceDecodeBufferSize was too big on tiny buffers (it's now never bigger than complen + rawlen)
<li> <b>fix</b> : iOS is shipped as static libs with extension .a
</ul></p>
<p><h2> Release 2.2.0 - May 11, 2016</h2>
</p>
<p><ul>
<li> <b>new</b> : threaded Kraken decoder! See OodleLZ_About_ThreadPhasedDecode
<li> <b>new</b> : example_lz_threadphased contains a client-side implementation of a ThreadPhased decoder
<li> <b>new</b> : Kraken Optimal3 (Level 7) mode with higher compression ratio
</ul></p>
<p><ul>
<li> <b>enhancement</b> : Kraken optimized for ARM processors
<li> <b>enhancement</b> : Kraken optimal parse levels improved, about 1% more compression
</ul></p>
<p><ul>
<li> <b>change</b> : XBox1 now built with VS 2012, but Core lib is compatible with VS 2015 (Ext will work in VC 2012 but not in VC 2015)
<li> <b>change</b> : Windows SDK redist64 dir removed; 64-bit DLL's are just in "redist"
<li> <b>change</b> : examples now include oodle2.h with a relative path so they compile out of the box
<li> <b>change</b> : Oodle2 Core lib default plugins no longer use the CRT on Microsoft platforms. See OodleAPI_OodleCore_Plugins
<li> <b>change</b> : minor version bumped for API incompatibilities
<li> <b>change</b> : OodleLZ_Decode_ThreadPhase argument added to OodleLZ_Decompress and OodleLZ_DecodeSome for 2-threaded Kraken decode. To retain previous behavior, add OodleLZ_Decode_Unthreaded to your call (or use default argument).
<li> <b>change</b> : allowed_compressor_mask argument added to OodleLZ_Decompress and OodleLZ_DecodeSome for fuzz safety. To retain previous behavior, add OODLELZ_ALLOWED_COMPRESSOR_ALL to your call (or use default argument).
</ul></p>
<p><ul>
<li> <b>removed</b> : Oodle Huffman public APIs removed
</ul></p>
<p><h2> Release 2.1.5 - April 26, 2016</h2>
</p>
<p><ul>
<li> <b>new</b> : Kraken !! An amazing new compressor with high compression and fast decode speed!
</ul></p>
<p><ul>
<li> <b>change</b> : example_packet : remove some rarely used options
<li> <b>change</b> : PS4 library now built with SDK 3.0
<li> <b>change</b> : Xbox One library now built with March 2016 QFE1 , VS 2015
</ul></p>
<p><ul>
<li> <b>fix</b> : LZB16 and LZBLW decoders could over-read compressed data if the last quantum was memset
<li> <b>fix</b> : example_packet : better randomization of subsets and limits in TestOodleNetwork_SelectDictionaryAndTrain
</ul></p>
<p><ul>
<li> <b>removed</b> : OodleLZ_GetZipLikeCompressionSettings is gone
<li> <b>deprecation</b> : LZHLW and LZNIB and LZBLW compressors are now deprecated, use Kraken instead
</ul></p>
<p><h2> Release 2.1.4 - March 20, 2016</h2>
</p>
<p><ul>
<li> <b>new</b> : example_lz lz_test_9 demonstrating block composability rules
</ul></p>
<p><ul>
<li> <b>enhancement</b> : LZNA Normal parse compression improved
<li> <b>enhancement</b> : LZNA wasn't using SSE on Linux or Mac ; it now does, which makes those platforms much faster
</ul></p>
<p><ul>
<li> <b>change</b> : Oodle Logs at verbosity level 2 are now compiled out of release builds
<li> <b>change</b> : example_lz_chart compressor set changed
<li> <b>change</b> : OodlePlugins_SetAssertion can now be called with a NULL function pointer argument as an easy way to disable all assert handling
<li> <b>change</b> : example_lz test_8 shows how to use the WithContext calls for independent buffers
<li> <b>change</b> : OodleNetwork1UDP_State_Uncompact return bool to indicate success or failure on bad data
</ul></p>
<p><ul>
<li> <b>fix</b> : OodleLZ_CompressWithContext with NULL CompressOptions crashed
<li> <b>fix</b> : LZBLW Normal level encoder would crash when called with dictionary preload (or large buffers)
<li> <b>fix</b> : OodleNetwork1UDP fix fuzz safety for split large packets
<li> <b>fix</b> : OodleNetwork1UDP fix fuzz safety prevent reading past end of dictionary
<li> <b>fix</b> : OodleNetwork1UDP removed all used of release-asserts, now returns failure in those cases
<li> <b>fix</b> : OodleNetwork1UDP properly document OODLENETWORK1_DECOMP_BUF_OVERREAD_LEN
</ul></p>
<p><h2> Release 2.1.3 - Feb 1, 2016</h2>
</p>
<p><ul>
<li> <b>enhancement</b> : OodleNetwork1UDP_Decode faster
<li> <b>fix</b> : OodleNetwork1UDP_Decode fuzz safety
<li> <b>fix</b> : OodleNetwork1UDP - fix possible bug in large split packet handling; now properly ensures that complen &lt;= rawlen,
and complen == rawlen always means a pass-through uncompressed packet
<li> <b>deprecation</b> : OodleLZ_Compressor_CanSPUDecompress function removed
</ul></p>
<p></p>
<p><h2> Release 2.1.2 - Jan 16, 2016</h2>
</p>
<p><ul>
<li> <b>new</b> : BitKnit ! BitKnit is a new LZ compressor with high compression and good speed, between LZNA and LZHLW
<li> <b>enhancement</b> : Most LZ encoders are faster
<li> <b>enhancement</b> : LZNA Fast &amp; Normal levels get more compression
</ul></p>
<p><h2> Release 2.1.1 - Nov 25, 2015</h2>
</p>
<p><ul>
<li> <b>new</b> : example_lz_chart make a neat text chart of the Oodle compressors &amp; levels to test performance
<li> <b>new</b> : example_network_client simple Oodle Network client example
<li> <b>fix</b> : don't store OODLE_HEADER_VERSION in the example_packet data header; use OODLE2_VERSION_MAJOR instead
<li> <b>enhancement</b> : most decoders faster by around 10% !
<li> <b>enhancement</b> : LZNIB Normal &amp; Optimal1 parsers much improved, more compression and faster decodes!
<li> <b>enhancement</b> : LZNIB decodes faster
<li> <b>enhancement</b> : LZNA about 10% faster to decode
<li> <b>enhancement</b> : LZHLW decoder about 10% faster in 64-bit
<li> <b>enhancement</b> : LZB encoder must faster in 32-bit
<li> <b>enhancement</b> : LZNA on iOS now uses NEON, almost 2X faster to decode!
<li> <b>deprecation</b> : LZH and LZA compressors are now deprecated; use LZHLW and LZNA instead
<li> PS4 library now built with SDK 2.5
<li> Windows library now built with MSVC 2013
<li> Mac &amp; iOS libraries now built with XCode 7.1
</ul></p>
<p><h2> Release 2.1.0 - Oct 10, 2015</h2>
</p>
<p><ul>
<li> <b>new</b> : Oodle2 first Beta release
</ul></p>
<p><h2> Release 1.45.1 - May 13, 2015</h2>
</p>
<p><ul>
<li> <b>fix</b> : fix bug in the LZNA level 7 (Optimal3) encoder
</ul></p>
<p><h2> Release 1.45.0 - May 11, 2015</h2>
</p>
<p><ul>
<li> <b>new</b> : New LZNA compressor! More compression than LZA and fast to decode on modern CPUs.
</ul></p>
<p><h2> Release 1.44.2 - March 4, 2015</h2>
</p>
<p><ul>
<li> <b>enhancement</b> : LZA new optimal parse; faster at Optimal1 and more compression at Optimal3
<li> <b>enhancement</b> : LZNib Normal encoder faster, better optimal parse
<li> <b>enhancement</b> : LZB Fast &amp; VeryFast encoder faster
</ul></p>
<p><h2> Release 1.44.1 - December 9, 2014</h2>
</p>
<p><ul>
<li> <b>fix</b> : example_packet state header was not the same in 32-bit and 64-bit builds
<li> <b>enhancement</b> : example_packet LZ compression level option added
</ul></p>
<p><h2> Release 1.44.0 - November 16, 2014</h2>
</p>
<p><ul>
<li> <b>new</b> : Mac sdk now includes 64 bit libraries
<li> <b>new</b> : Android and IOS sdk's available, for Oodle Network only
<li> <b>new</b> : Unreal Engine integration of Oodle Network is available
<li> <b>change</b> : example_packet has better trained model IO
</ul></p>
<p><h2> Release 1.43.0 - September 8, 2014</h2>
</p>
<p><ul>
<li> <b>fix</b> : LZA packet compressor introduced in 1.42 was getting much less compression than it should due a bug; fixed!
</ul></p>
<p><h2> Release 1.42.0 - September 3, 2014</h2>
</p>
<p><ul>
<li> <b>change</b> : reduce memory use of LZNib and LZBLW compressors at Optimal level
<li> <b>new</b> : LZA compressor now has sliding window encoding and decoding
<li> <b>new</b> : OodleLZ_CompressWithContext incremental API now supports LZA
<li> <b>change</b> : example_packet LZA option added
<li> <b>change</b> : Oodle is using the new "radtypes.h" shared header
<li> <b>enhancement</b> : OodleNetwork1 UDP new implementation - faster, a little more compression.
<li> <b>fix</b> : Optimal parse compressors could hang on very large degenerate files
</ul></p>
<p><h2> Release 1.41.0 - July 10, 2014</h2>
</p>
<p><ul>
<li> <b>new</b> : OodleNetwork dictionary selection by string matching; see OodleNetwork1_SelectDictionaryFromPackets and example_packet ; usually improves compression
<li> <b>enhancement</b> : OodleNetwork1 TCP memory use reduced to 84104 bytes per channel
<li> <b>enhancement</b> : OodleNetwork1 UDP is faster to encode ; saved states are incompatible with older versions
<li> <b>enhancement</b> : LZNIB VeryFast and Normal much faster to encode; see Oodle_FAQ_LZCompareTable for speeds
<li> <b>enhancement</b> : LZB16-Fast and VeryFast much faster to encode; see Oodle_FAQ_LZCompareTable for speeds
<li> <b>change</b> : rename OodleNetwork1 TCP variant to OodleNetwork1TCP for clarity
<li> <b>change</b> : better default hash table sizes for LZB16
<li> <b>fix</b> : Fix bug in which packets that expanded in OodleNetwork1 TCP could cause a write at compbuf[-1]
</ul></p>
<p><h2> Release 1.40.0 - June 27, 2014</h2>
</p>
<p><ul>
<li> <b>change</b> : OodleStaticLZP renamed to OodleNetwork1
<li> <b>enhancement</b> : LZHLW compressor significantly faster to encode at all levels, especially Normal
<li> <b>new</b> : New compressor LZA for very high compression!
<li> <b>fix</b> : example_packet had a hard-coded limit of 64k for packet sizes; that was removed
<li> <b>fix</b> : OodleLZDecoder_Reset was in the header but not implemented
<li> <b>new</b> : OodleNetwork1 compressed buffer size is now limited by OodleNetwork1_CompressedBufferSizeNeeded
</ul></p>
<p><h2> Release 1.30.0 - April 14, 2014</h2>
</p>
<p><ul>
<li> <b>new</b> : Minimal library initialization; see OodleX_Init_GetDefaults_Minimal , OodleX_Init_NoThreads , OodleX_Shutdown_NoThreads
<li> <b>change</b> : OodleX_Init no longer accepts NULL options
<li> <b>change</b> : Windows : OodleX_Init no longer does timeBeginPeriod(1) ; it's now left up to the app to decide if they want to do that
<li> <b>change</b> : api simplified; many unused APIs removed
</ul></p>
<p><h2> Release 1.22.0 - March 31, 2014</h2>
</p>
<p><ul>
<li> <b>new</b> : redo docs for Oodle Network packet compression
</ul></p>
<p><h2> Release 1.21.2 - March 11, 2014</h2>
</p>
<p><ul>
<li> <b>fix</b> : OOP tool failed to extract large packages due to exceeding threading limits
<li> <b>fix</b> : SPU LZ match offsets fixed again
<li> <b>fix</b> : ThreadProfiler code stripped completely in final build
</ul></p>
<p><h2> Release 1.21.0 - March 1, 2014</h2>
</p>
<p><ul>
<li> <b>new</b> : OodleNetwork1UDP_StateCompacted added to persist the trained state more compactly
<li> <b>enhancement</b> : OodleLZH and LZHLW decompressors further optimized; 5-10% faster
<li> <b>enhancement</b> : OodleLZH and LZHLW no longer does an allocation to prevent overrun
<li> <b>enhancement</b> : OodleNetwork1 for UDP networking significantly faster (about 300%)
<li> <b>fix</b> : SPU LZ match offsets could be too large by 1, causing corruption in rare cases
</ul></p>
<p><h2> Release 1.20.0 - November 25, 2013</h2>
</p>
<p><ul>
<li> <b>new</b> : Oodle now shipping "final" build without debug facilities
<li> <b>new</b> : OodleLZ_GetZipLikeCompressionSettings to make it easier to select compressor settings
<li> <b>fix</b> : fix possible mismatch between structs in the public header and structs in the lib
<li> <b>fix</b> : matchTableSizeLog2 wasn't being used correctly; made LZB and LZNIB compress less than they should
</ul></p>
<p><h2> Release 1.19.0 - November 14, 2013</h2>
</p>
<p><ul>
<li> <b>new</b> : OodleNetwork1 now provides a UDP (stateless) variant for unordered packet compression (beta)
<li> <b>new</b> : OodleHuffman_MultiHuffEncode for UDP unordered packet compression (beta)
<li> <b>note</b> : version 119 numbering adjusted to match its intention better. 1.major.minor
<li> <b>fix</b> : LZNib could fail when using "in-place" decompression
<li> <b>fix</b> : LZH and LZHLW could speculatively read past the end of compbuf in rare cases, potentially causing a (benign) access violation
<li> <b>fix</b> : LZ parallel compression with long-range-matcher could fail when parallel chunks didn't align to LRM chunks
</ul></p>
<p><h2> Release 1.1.8 - November 4, 2013</h2>
</p>
<p><ul>
<li> <b>new</b> : add OodleXLZ_Decompress_MakeSeekTable_Wide_Async , a simple parallel version of OodleLZ_Decompress
<li> <b>new</b> : add matchTableSizeLog2 to OodleLZ_CompressOptions ; controls encoder memory use and speed
<li> <b>new</b> : add Oodle_FAQ_LZCompareTable to make choosing a compressor and level easier
<li> <b>enhancement</b> : LZB16 encoder faster
<li> <b>fix</b> : LZ decoders could speculatively read past the end of compressed buffers; this could cause an
access violation if the memory after the compressed buffer was not readable. Fixed.
<li> <b>fix</b> : Fix issues with the <i>WithContext family of functions when used with circular window encoding.
</i><li> <b>fix</b> : Fix issues with combining heterogenous OodleLZ data (with different seek chunk settings) causing the decoder
to make invalid parallel decodes
<li> <b>fix</b> : Fix issues with LZB when used with packed-raw-overlap decode mode
<li> <b>enhancement</b> : PS4 : OodleMalloc goes to "default" memory instead of heap memory for large allocations
</ul></p>
<p><h2> Release 1.1.7 - October 23, 2013</h2>
</p>
<p><ul>
<li> <b>new</b> : unified OodleLZ_CompressContext functions for incremental encoding, with and without sliding window
<li> <b>new</b> : LZB16 can encode &amp; decode in a circular window
<li> <b>fix</b> : fix scheduling bug in OOZ IO->Decompression loader
<li> <b>fix</b> : Linux : fix LZB16 generation page faults due to movdqa gcc bug
<li> <b>fix</b> : don't lock Oodle threads to cores except on platforms where it is necessary
</ul></p>
<p><h2> Release 1.1.6 - October 7, 2013</h2>
</p>
<p><ul>
<li> <b>new</b> : new LZB compressor - LZ-Bytewise (and LZB-LargeWindow), the fastest of all, for when even LZNib isn't fast enough
<li> <b>fix</b> : OodleLZ_FillSeekTable could incorrectly mark heterogenous streams as being entirely independent seek chunks
<li> <b>fix</b> : Linux &amp; Mac : Fix worker thread stack sizes too small, could crash OOP tool and other uses of the worker threads.
<li> <b>fix</b> : In-place decompression of incompressible data could fail if source overlapped dest.
<li> <b>fix</b> : Fix OodleLZ_Compress_Async not working (and related APIs, such as OodleLZ_Compress_WriteOOZ_Async) when
OodleAsyncSelect_None was passed for asyncSelect (now runs synchronously on the calling thread).
</ul></p>
<p><h2> Release 1.1.5 - August 8, 2013</h2>
</p>
<p><ul>
<li> <b>enhancement</b> : LZNib now has a sliding window encoder for streaming compression
<li> <b>new</b> : new OodleHuffman functions expose huffman-only coding
<li> <b>new</b> : OodleNetwork1 compressor, static dictionary ideal for MMO network compression (Beta)
</ul></p>
<p><h2> Release 1.1.4 - May 6, 2013</h2>
</p>
<p><ul>
<li> <b>enhancement</b> : large IO ops are now broken on the IO thread instead of at call time
<li> <b>enhancement</b> : large IO aps are now cancellable in progress and return correct status
<li> <b>fix</b> : OOP header could fail to read when it had a seek table
<li> <b>enhancement</b> : rev the OOZ header; add the size of the header
</ul></p>
<p><h2> Release 1.1.3 - May 1, 2013</h2>
</p>
<p><ul>
<li> <b>fix</b> : OOP header reader was truncating 64-bit file sizes to 32-bit
<li> <b>new</b> : lzadvanced_output_chunking in example_lz_advanced
<li> <b>enhancement</b>: OodleLZ_GetCompressedStepForRawStep allowed to seek quanta
</ul></p>
<p><h2> Release 1.1.2 - April 28, 2013</h2>
</p>
<p><ul>
<li> <b>fix</b> : Linux dir enumeration was including "."
<li> <b>fix</b> : Linux Open for WriteCreate was overwriting existing files too aggressively
<li> <b>fix</b> : Linux Open failure had debug perror left in
<li> <b>change</b> : better default log dirs and log names
<li> <b>change</b> : log file will open in "." if default log dir is not accessible
<li> <b>change</b> : Linux &amp; Mac do log->prev cycle like Windows
<li> <b>change</b> : disable stack trace on .map file platforms for now
<li> <b>enhancement</b>: OodlePackage_FillWithFiles only decompresses chunks it needs (not all)
<li> <b>enhancement</b>: OodlePackage_SortFiles now uses extention file groups
</ul></p>
<p><h2> Release 1.1.1 - April 24, 2013</h2>
</p>
<p><ul>
<li> <b>fix</b> : Oodle_GetExtensionKey was not doing tolower as it should
<li> <b>fix</b> : OodlePackage_FillWithFiles could crash if files failed to load
<li> <b>fix</b> : fix memory overrun crash in DirListing
<li> <b>fix</b> : fix null deref in arg parse in OOP tool
<li> <b>change</b>: rename IOQ_DeleteFile_ to IOQ_Delete_ and make it work on dirs as well
<li> <b>new</b>: add OodleDirListing_DeleteDirContents
</ul></p>
<p><h2> Release 1.1.0 - April 11, 2013</h2>
</p>
<p><ul>
<li> <b>new</b>: LZNIB super fast to decode LZ variant added
<li> <b>new</b>: LosslessFilters for some common data transformations that improve compression
<li> <b>change</b>: Low level IO now allows aligned and unaligned IO modes
<li> <b>enhancement</b>: Compression seek chunk size now variable, set by client
<li> <b>enhancement</b>: All compressors can run encode and decode in parallel
<li> <b>enhancement</b>: Long Range Matcher for LZ on big buffers
<li> <b>enhancement</b>: (PS3) SPU waits now without thread switches
<li> <b>enhancement</b>: (PS3) SPU after_decompress replaceable function
</ul></p>
<p><h2> Release 1.0.0 - August 24, 2012</h2>
</p>
<p><ul>
<li> Initial Release.</ul><br>&nbsp;<br> <table class=bar> <tr>
<td width=33%>&nbsp;</td><td width=33%>&nbsp;</td><td width=33%>&nbsp;</td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="OodleXLogCallbackRet.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>OodleXLogCallbackRet</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "OodleXLogCallbackRet.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="OodleXLogCallbackRet.html_backmenu">
<table class=dropmenu>
<tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<div class=prototype><div class=prototype_header>// Function typedef:</div><pre><span class=prototype_type><a href="javascript:show('OodleXLogCallbackRetRet.html')" class="blue">OodleXLogCallbackRetRet</a></span>( OODLE_CALLBACK <span class=prototype_type><a href="javascript:show('OodleXLogCallbackRet.html')" class="blue">OodleXLogCallbackRet</a></span> )( const char * buffer );</pre></div><div class=discussion_heading>Discussion</div>Function pointer for <a href="javascript:show('OodleXLog_SetCallback.html')" class="paragraph">OodleXLog_SetCallback</a><div class=discussion_heading>Parameters</div> <table> <tr> <td style='vertical-align: top;' class=paramname><a id="OodleXLogCallbackRet.html_buffer" class=nohover>buffer</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> the log message
</td></tr></table><div class=discussion_heading>Return Value</div> <table> <tr> <td style='vertical-align: top;' class=paramname><a id="OodleXLogCallbackRet.html_return" class=nohover>return</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> whether to supress the message or not
</td></tr></table><div class=discussion_heading>Discussion</div></p>
<p> OodleXLogCallbackRet is provided by the client to take log messages.
It is called before other log outputs so that it has the chance to return <a href="javascript:show('OodleXLogCallbackRetRet.html','OodleXLogCallbackRetRet.html_OodleXLogCallbackRetRet_Terminate')" class="paragraph">OodleXLogCallbackRetRet_Terminate</a>
and supress other output.
<br>&nbsp;<br> <table class=bar> <tr>
<td width=33% align=left><span class='arrowleft'></span><a href="javascript:show('OodleXLog_PrintfError.html')" class="paragraph">OodleXLog_PrintfError</a></td><td width=33% align=center><span class='arrowup'></span><a href="javascript:show('OodleXAPI_Debug.html')" class="paragraph">OodleX Debug aids</a></td><td width=33% align=right><span class='arrowright'></span><a href="javascript:show('OodleXAPI_Util.html')" class="paragraph">OodleX Utils</a></td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="OodleX_Shutdown_LogLeaks.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>OodleX_Shutdown_LogLeaks</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "OodleX_Shutdown_LogLeaks.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="OodleX_Shutdown_LogLeaks.html_backmenu">
<table class=dropmenu>
<tr><td><span class='arrowleft'></span>&nbsp;<a href="javascript:show('OodleX_Init_GetDefaults_Threads.html')" class="paragraph">OodleX_Init_GetDefaults_Threads</a></td></tr><tr><td><span class='arrowright'></span>&nbsp;<a href="javascript:show('OodleX_Shutdown_DebugBreakOnLeaks.html')" class="paragraph">OodleX_Shutdown_DebugBreakOnLeaks</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<div class=prototype><div class=prototype_header>// Enumerant:</div><pre><span class=prototype_type>enum</span> <a href="javascript:show('OodleX_Shutdown_LogLeaks.html')">OodleX_Shutdown_LogLeaks</a>
{
&nbsp;&nbsp;&nbsp;&nbsp;OodleX_Shutdown_LogLeaks_No = 0,
&nbsp;&nbsp;&nbsp;&nbsp;OodleX_Shutdown_LogLeaks_Yes = 1,
&nbsp;&nbsp;&nbsp;&nbsp;OodleX_Shutdown_LogLeaks_Force32 = 0x40000000
};
</pre></div><div class=discussion_heading>Discussion</div> bool enum
<br>&nbsp;<br> <table class=bar> <tr>
<td width=33% align=left><span class='arrowleft'></span><a href="javascript:show('OodleX_Init_GetDefaults_Threads.html')" class="paragraph">OodleX_Init_GetDefaults_Threads</a></td><td width=33% align=center><span class='arrowup'></span><a href="javascript:show('OodleXAPI_Init.html')" class="paragraph">OodleX Startup and Shutdown</a></td><td width=33% align=right><span class='arrowright'></span><a href="javascript:show('OodleX_Shutdown_DebugBreakOnLeaks.html')" class="paragraph">OodleX_Shutdown_DebugBreakOnLeaks</a></td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="t_fp_OodleNet_Plugin_DisplayAssertion.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>t_fp_OodleNet_Plugin_DisplayAssertion</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "t_fp_OodleNet_Plugin_DisplayAssertion.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="t_fp_OodleNet_Plugin_DisplayAssertion.html_backmenu">
<table class=dropmenu>
<tr><td><span class='arrowleft'></span>&nbsp;<a href="javascript:show('t_fp_OodleNet_Plugin_Printf.html')" class="paragraph">t_fp_OodleNet_Plugin_Printf</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<div class=prototype><div class=prototype_header>// Function typedef:</div><pre>OODEFFUNC OO_BOOL( OODLE_CALLBACK <span class=prototype_type><a href="javascript:show('t_fp_OodleNet_Plugin_DisplayAssertion.html')" class="blue">t_fp_OodleNet_Plugin_DisplayAssertion</a></span> )( const char * file,
const int line,
const char * function,
const char * message );</pre></div><div class=discussion_heading>Discussion</div>Function pointer to Oodle Core assert callback<div class=discussion_heading>Parameters</div> <table> <tr> <td style='vertical-align: top;' class=paramname><a id="t_fp_OodleNet_Plugin_DisplayAssertion.html_file" class=nohover>file</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> C file that triggered the assert
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="t_fp_OodleNet_Plugin_DisplayAssertion.html_line" class=nohover>line</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> C line that triggered the assert
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="t_fp_OodleNet_Plugin_DisplayAssertion.html_function" class=nohover>function</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> C function that triggered the assert (may be NULL)
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="t_fp_OodleNet_Plugin_DisplayAssertion.html_message" class=nohover>message</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> assert message
</td></tr></table><div class=discussion_heading>Return Value</div> <table> <tr> <td style='vertical-align: top;' class=paramname><a id="t_fp_OodleNet_Plugin_DisplayAssertion.html_return" class=nohover>return</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> true to break execution at the assertion site, false to continue
</td></tr></table><div class=discussion_heading>Discussion</div></p>
<p> This callback is called by Oodle Core when it detects an assertion condition.
</p>
<p> This will only happen in debug builds.
</p>
<p></p>
<p><br>&nbsp;<br> <table class=bar> <tr>
<td width=33% align=left><span class='arrowleft'></span><a href="javascript:show('t_fp_OodleNet_Plugin_Printf.html')" class="paragraph">t_fp_OodleNet_Plugin_Printf</a></td><td width=33% align=center><span class='arrowup'></span><a href="javascript:show('OodleAPI_OodleNet_Plugins.html')" class="paragraph">Network plugins</a></td><td width=33%>&nbsp;</td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="OodleXMalloc_OS_Options.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>OodleXMalloc_OS_Options</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "OodleXMalloc_OS_Options.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="OodleXMalloc_OS_Options.html_backmenu">
<table class=dropmenu>
<tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<div class=prototype><div class=prototype_header>// Enumerant:</div><pre><span class=prototype_type>enum</span> <a href="javascript:show('OodleXMalloc_OS_Options.html')">OodleXMalloc_OS_Options</a>
{
&nbsp;&nbsp;&nbsp;&nbsp;OodleXMalloc_OS_Options_None = 0,
&nbsp;&nbsp;&nbsp;&nbsp;OodleXMalloc_OS_Options_GuardBig = 1,
&nbsp;&nbsp;&nbsp;&nbsp;OodleXMalloc_OS_Options_GuardBoth = 2,
&nbsp;&nbsp;&nbsp;&nbsp;OodleXMalloc_OS_Options_GuardFrees = 3,
&nbsp;&nbsp;&nbsp;&nbsp;OodleXMalloc_OS_Options_Count = 4,
&nbsp;&nbsp;&nbsp;&nbsp;OodleXMalloc_OS_Options_Force32 = 0x40000000
};
</pre></div><div class=discussion_heading>Discussion</div> Options enum for OodleXMalloc_GetVTable_OS
<div class=discussion_heading>Enumerants</div> <table> <tr> <td style='vertical-align: top;' class=paramname><a id="OodleXMalloc_OS_Options.html_OodleXMalloc_OS_Options_None" class=nohover>OodleXMalloc_OS_Options_None</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> default</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXMalloc_OS_Options.html_OodleXMalloc_OS_Options_GuardBig" class=nohover>OodleXMalloc_OS_Options_GuardBig</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> guard page for big allocs</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXMalloc_OS_Options.html_OodleXMalloc_OS_Options_GuardBoth" class=nohover>OodleXMalloc_OS_Options_GuardBoth</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> guard page for big and small allocs</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXMalloc_OS_Options.html_OodleXMalloc_OS_Options_GuardFrees" class=nohover>OodleXMalloc_OS_Options_GuardFrees</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> GuardBoth + leak frees and make them NOACCESS</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXMalloc_OS_Options.html_OodleXMalloc_OS_Options_Count" class=nohover>OodleXMalloc_OS_Options_Count</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc></td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXMalloc_OS_Options.html_OodleXMalloc_OS_Options_Force32" class=nohover>OodleXMalloc_OS_Options_Force32</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc></td></tr></table><br>&nbsp;<br> <table class=bar> <tr>
<td width=33% align=left><span class='arrowleft'></span><a href="javascript:show('OodleXMalloc_About.html')" class="paragraph">About OodleXMalloc</a></td><td width=33% align=center><span class='arrowup'></span><a href="javascript:show('OodleXAPI_Malloc.html')" class="paragraph">OodleX Memory Allocators</a></td><td width=33% align=right><span class='arrowright'></span><a href="javascript:show('OodleXMallocVTable.html')" class="paragraph">OodleXMallocVTable</a></td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="OodleXHandleEvent_SetError.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>OodleXHandleEvent_SetError</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "OodleXHandleEvent_SetError.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="OodleXHandleEvent_SetError.html_backmenu">
<table class=dropmenu>
<tr><td><span class='arrowleft'></span>&nbsp;<a href="javascript:show('OodleXHandleEvent_SetDone.html')" class="paragraph">OodleXHandleEvent_SetDone</a></td></tr><tr><td><span class='arrowright'></span>&nbsp;<a href="javascript:show('OodleXHandleCountdown_Alloc.html')" class="paragraph">OodleXHandleCountdown_Alloc</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<div class=prototype><div class=prototype_header>// Function prototype:</div><pre>void <span class=prototype_type><a href="javascript:show('OodleXHandleEvent_SetError.html')" class="blue">OodleXHandleEvent_SetError</a></span>( <span class=prototype_type><a href="javascript:show('OodleXHandle.html')" class="blue">OodleXHandle</a></span> h );</pre></div><div class=discussion_heading>Discussion</div>Set an OodleXHandleEvent to <a href="javascript:show('OodleXStatus.html','OodleXStatus.html_OodleXStatus_Error')" class="paragraph">OodleXStatus_Error</a><div class=discussion_heading>Parameters</div> <table> <tr> <td style='vertical-align: top;' class=paramname><a id="OodleXHandleEvent_SetError.html_h" class=nohover>h</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> handle created by <a href="javascript:show('OodleXHandleEvent_Alloc.html')" class="paragraph">OodleXHandleEvent_Alloc</a>
</td></tr></table><div class=discussion_heading>Discussion</div></p>
<p> The state transition from Pending->Error is one way. If the handle is OodleXHandleAutoDelete_Yes, it
goes away now.
<br>&nbsp;<br> <table class=bar> <tr>
<td width=33% align=left><span class='arrowleft'></span><a href="javascript:show('OodleXHandleEvent_SetDone.html')" class="paragraph">OodleXHandleEvent_SetDone</a></td><td width=33% align=center><span class='arrowup'></span><a href="javascript:show('OodleXAPI_Handle.html')" class="paragraph">OodleX async handle operations</a></td><td width=33% align=right><span class='arrowright'></span><a href="javascript:show('OodleXHandleCountdown_Alloc.html')" class="paragraph">OodleXHandleCountdown_Alloc</a></td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="Oodle_About_XboxOne.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>About Oodle on Xbox One</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "Oodle_About_XboxOne.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="Oodle_About_XboxOne.html_backmenu">
<table class=dropmenu>
<tr><td><span class='arrowleft'></span>&nbsp;<a href="javascript:show('Oodle_About_Mac.html')" class="paragraph">About Oodle on Mac</a></td></tr><tr><td><span class='arrowup'></span>&nbsp;<a href="javascript:show('Oodle_About_Platforms.html')" class="paragraph">About Oodle on Platforms</a></td></tr><tr><td><span class='arrowright'></span>&nbsp;<a href="javascript:show('Oodle_About_Linux.html')" class="paragraph">About Oodle on Linux</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<P>
Oodle for XBox One is provided as a lib.
</p>
<p><div class=prototype>
<PRE>
lib/oo2core_xboxone.lib
lib/oo2ext_xboxone.lib
</PRE>
</div>
</p>
<p>The debug build of the Oodle lib is also provided. Generally the release build of Oodle should be linked with all versions of your game (do not link the debug build of Oodle with the
debug build of your game typically). The debug build of Oodle is provided to help you track down problems.
</p>
<p><hr>
</p>
<p>since Oodle 2.8.5 :
</p>
<p>Oodle for XBox One is built using MSVC 2017, and can be used with MSVC 2015-2019.
</p>
<p>Oodle is provided for both XDK and GDK.
</p>
<p>Oodle Core for XBox One does not use any stdio. The default log plugin outputs only to OutputDebugString.
</p>
<p><hr>
</p>
<p>Do not decompress directly into uncached graphics memory.
See <a href="javascript:show('Oodle_FAQ_DecompressingToGraphicsMemoryIsSlow.html')" class="paragraph">FAQ: How do I decompress to graphics memory quickly?</a>.
</p>
<p>Oodle now automatically detects this and warns about it.<br>&nbsp;<br> <table class=bar> <tr>
<td width=33% align=left><span class='arrowleft'></span><a href="javascript:show('Oodle_About_Mac.html')" class="paragraph">About Oodle on Mac</a></td><td width=33% align=center><span class='arrowup'></span><a href="javascript:show('Oodle_About_Platforms.html')" class="paragraph">About Oodle on Platforms</a></td><td width=33% align=right><span class='arrowright'></span><a href="javascript:show('Oodle_About_Linux.html')" class="paragraph">About Oodle on Linux</a></td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="OODLE_HEADER_VERSION.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>OODLE_HEADER_VERSION</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "OODLE_HEADER_VERSION.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="OODLE_HEADER_VERSION.html_backmenu">
<table class=dropmenu>
<tr><td><span class='arrowleft'></span>&nbsp;<a href="javascript:show('t_fp_Oodle_Job.html')" class="paragraph">t_fp_Oodle_Job</a></td></tr><tr><td><span class='arrowright'></span>&nbsp;<a href="javascript:show('OodleNetworkVersion.html')" class="paragraph">OodleNetworkVersion</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<div class=prototype><div class=prototype_header>// Preprocessor definition:</div><pre><span class=prototype_type>#define</span> <a href="javascript:show('OODLE_HEADER_VERSION.html')">OODLE_HEADER_VERSION</a> ((46&lt;&lt;24)|(OODLE2_VERSION_MAJOR&lt;&lt;16)|(OODLE2_VERSION_MINOR&lt;&lt;8)|(OO_U32)sizeof(<span class=prototype_type><a href="javascript:show('OodleLZ_SeekTable.html')" class="blue">OodleLZ_SeekTable</a></span>))</pre></div><div class=discussion_heading>Discussion</div> OODLE_HEADER_VERSION is used to ensure the Oodle header matches the lib. Don't copy the value of this macro, it will change when
the header is rev'ed.<div class=discussion_heading>Discussion</div> This is what you pass to <a href="javascript:show('OodleX_Init.html')" class="paragraph">OodleX_Init</a> or <a href="javascript:show('Oodle_CheckVersion.html')" class="paragraph">Oodle_CheckVersion</a>
<br>&nbsp;<br> <table class=bar> <tr>
<td width=33% align=left><span class='arrowleft'></span><a href="javascript:show('t_fp_Oodle_Job.html')" class="paragraph">t_fp_Oodle_Job</a></td><td width=33% align=center><span class='arrowup'></span><a href="javascript:show('OodleAPI_Base.html')" class="paragraph">Core Base</a></td><td width=33% align=right><span class='arrowright'></span><a href="javascript:show('OodleNetworkVersion.html')" class="paragraph">OodleNetworkVersion</a></td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="OodleX_Semaphore_Wait.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>OodleX_Semaphore_Wait</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "OodleX_Semaphore_Wait.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="OodleX_Semaphore_Wait.html_backmenu">
<table class=dropmenu>
<tr><td><span class='arrowleft'></span>&nbsp;<a href="javascript:show('OodleX_Semaphore_Post.html')" class="paragraph">OodleX_Semaphore_Post</a></td></tr><tr><td><span class='arrowright'></span>&nbsp;<a href="javascript:show('OodleX_CreateThread.html')" class="paragraph">OodleX_CreateThread</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<div class=prototype><div class=prototype_header>// Function prototype:</div><pre>void <span class=prototype_type><a href="javascript:show('OodleX_Semaphore_Wait.html')" class="blue">OodleX_Semaphore_Wait</a></span>( <span class=prototype_type><a href="javascript:show('OodleX_Semaphore.html')" class="blue">OodleX_Semaphore</a></span> * sem );</pre></div><div class=discussion_heading>Discussion</div>OodleX_Semaphore_Wait<div class=discussion_heading>Discussion</div>NOTE : it is not intended that you use these in production. They are for use in the Oodle
examples. Replace with your own thread functions for shipping.
<br>&nbsp;<br> <table class=bar> <tr>
<td width=33% align=left><span class='arrowleft'></span><a href="javascript:show('OodleX_Semaphore_Post.html')" class="paragraph">OodleX_Semaphore_Post</a></td><td width=33% align=center><span class='arrowup'></span><a href="javascript:show('OodleXAPI_Threading.html')" class="paragraph">OodleX threading util</a></td><td width=33% align=right><span class='arrowright'></span><a href="javascript:show('OodleX_CreateThread.html')" class="paragraph">OodleX_CreateThread</a></td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="OodleXIOQ_NameIsDir_AsyncAndWait.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>OodleXIOQ_NameIsDir_AsyncAndWait</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "OodleXIOQ_NameIsDir_AsyncAndWait.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="OodleXIOQ_NameIsDir_AsyncAndWait.html_backmenu">
<table class=dropmenu>
<tr><td><span class='arrowleft'></span>&nbsp;<a href="javascript:show('OodleXIOQ_GetFileSize_AsyncAndWait.html')" class="paragraph">OodleXIOQ_GetFileSize_AsyncAndWait</a></td></tr><tr><td><span class='arrowright'></span>&nbsp;<a href="javascript:show('OodleX_GetOSFileOps.html')" class="paragraph">OodleX_GetOSFileOps</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<div class=prototype><div class=prototype_header>// Function prototype:</div><pre>OO_BOOL <span class=prototype_type><a href="javascript:show('OodleXIOQ_NameIsDir_AsyncAndWait.html')" class="blue">OodleXIOQ_NameIsDir_AsyncAndWait</a></span>( const char * vfsName,
<span class=prototype_type><a href="javascript:show('OodleFileNotFoundIsAnError.html')" class="blue">OodleFileNotFoundIsAnError</a></span> fnfiae );</pre></div><div class=discussion_heading>Discussion</div>Convenience version of <a href="javascript:show('OodleXIOQ_GetInfoByName_AsyncAndWait.html')" class="paragraph">OodleXIOQ_GetInfoByName_AsyncAndWait</a>
<br>&nbsp;<br> <table class=bar> <tr>
<td width=33% align=left><span class='arrowleft'></span><a href="javascript:show('OodleXIOQ_GetFileSize_AsyncAndWait.html')" class="paragraph">OodleXIOQ_GetFileSize_AsyncAndWait</a></td><td width=33% align=center><span class='arrowup'></span><a href="javascript:show('OodleXAPI_IOQ.html')" class="paragraph">OodleX low level async io</a></td><td width=33% align=right><span class='arrowright'></span><a href="javascript:show('OodleX_GetOSFileOps.html')" class="paragraph">OodleX_GetOSFileOps</a></td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="OodleXIOQ_Fence_Async.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>OodleXIOQ_Fence_Async</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "OodleXIOQ_Fence_Async.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="OodleXIOQ_Fence_Async.html_backmenu">
<table class=dropmenu>
<tr><td><span class='arrowleft'></span>&nbsp;<a href="javascript:show('OodleXIOQ_SetVTable.html')" class="paragraph">OodleXIOQ_SetVTable</a></td></tr><tr><td><span class='arrowright'></span>&nbsp;<a href="javascript:show('OodleXIOQ_OpenForRead_Async.html')" class="paragraph">OodleXIOQ_OpenForRead_Async</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<div class=prototype><div class=prototype_header>// Function prototype:</div><pre><span class=prototype_type><a href="javascript:show('OodleXHandle.html')" class="blue">OodleXHandle</a></span> <span class=prototype_type><a href="javascript:show('OodleXIOQ_Fence_Async.html')" class="blue">OodleXIOQ_Fence_Async</a></span>( <span class=prototype_type><a href="javascript:show('OodleXIOQFile.html')" class="blue">OodleXIOQFile</a></span> fileRef OODEFAULT( 0 ),
<span class=prototype_type><a href="javascript:show('OodleXHandleAutoDelete.html')" class="blue">OodleXHandleAutoDelete</a></span> autoDelete OODEFAULT( OodleXHandleAutoDelete_No ),
<span class=prototype_type><a href="javascript:show('OodleXPriority.html')" class="blue">OodleXPriority</a></span> priority OODEFAULT( OodleXPriority_Normal ),
const <span class=prototype_type><a href="javascript:show('OodleXHandle.html')" class="blue">OodleXHandle</a></span> * dependencies OODEFAULT( NULL ),
OO_S32 numDependencies OODEFAULT( 0 ) );</pre></div><div class=discussion_heading>Discussion</div>Add a "fence" to the operation queue<div class=discussion_heading>Parameters</div> <table> <tr> <td style='vertical-align: top;' class=paramname><a id="OodleXIOQ_Fence_Async.html_fileRef" class=nohover>fileRef</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> (optional) the file to associate the request with
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXIOQ_Fence_Async.html_autoDelete" class=nohover>autoDelete</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> (optional) lifetime of the operation handle ; see <a href="javascript:show('OodleXHandleAutoDelete.html')" class="paragraph">OodleXHandleAutoDelete</a>
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXIOQ_Fence_Async.html_priority" class=nohover>priority</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> (optional) priority of the operation ; see <a href="javascript:show('OodleXPriority.html')" class="paragraph">OodleXPriority</a>
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXIOQ_Fence_Async.html_dependencies" class=nohover>dependencies</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> (optional) dependencies; the async op won't start until these are all complete; note : these are not freed, they must be autodelete or you must free them some other way.
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleXIOQ_Fence_Async.html_numDependencies" class=nohover>numDependencies</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> (optional) number of handles in <i>deps</i> array
</td></tr></table><div class=discussion_heading>Return Value</div> <table> <tr> <td style='vertical-align: top;' class=paramname><a id="OodleXIOQ_Fence_Async.html_return" class=nohover>return</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> handle to the operation, or 0 if it could not be started (usually due to invalid args)
</td></tr></table><div class=discussion_heading>Discussion</div></p>
<p> A fence is a NOP which can be used to schedule against other operations.
eg. if you have an OodleXIOQFile and want to block on any (unknown) operations on that file completing,
you can add a Fence op to the file and block on it; earlier requests will flush first, so when the fence is
done you know all previous requests are done.
<br>&nbsp;<br> <table class=bar> <tr>
<td width=33% align=left><span class='arrowleft'></span><a href="javascript:show('OodleXIOQ_SetVTable.html')" class="paragraph">OodleXIOQ_SetVTable</a></td><td width=33% align=center><span class='arrowup'></span><a href="javascript:show('OodleXAPI_IOQ.html')" class="paragraph">OodleX low level async io</a></td><td width=33% align=right><span class='arrowright'></span><a href="javascript:show('OodleXIOQ_OpenForRead_Async.html')" class="paragraph">OodleXIOQ_OpenForRead_Async</a></td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="OodleNetwork1TCP_State.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>OodleNetwork1TCP_State</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "OodleNetwork1TCP_State.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="OodleNetwork1TCP_State.html_backmenu">
<table class=dropmenu>
<tr><td><span class='arrowleft'></span>&nbsp;<a href="javascript:show('OodleNetwork1_Shared.html')" class="paragraph">OodleNetwork1_Shared</a></td></tr><tr><td><span class='arrowright'></span>&nbsp;<a href="javascript:show('OodleNetwork1UDP_State.html')" class="paragraph">OodleNetwork1UDP_State</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<div class=prototype><div class=prototype_header>// Structure definition:</div><pre><span class=prototype_type>struct</span> <a href="javascript:show('OodleNetwork1TCP_State.html')">OodleNetwork1TCP_State</a>;
</pre></div><div class=discussion_heading>Discussion</div> Opaque data type for OodleNetwork1TCP_State<div class=discussion_heading>Discussion</div> This data is per-channel and adapts to the channel. There must be one for each
encoder and one for each decoder.
</p>
<p> This data is initialized either with <a href="javascript:show('OodleNetwork1TCP_State_InitAsCopy.html')" class="paragraph">OodleNetwork1TCP_State_InitAsCopy</a> or <a href="javascript:show('OodleNetwork1TCP_State_Reset.html')" class="paragraph">OodleNetwork1TCP_State_Reset</a>.
</p>
<p> You can allocate and free it yourself. It must be of size <a href="javascript:show('OodleNetwork1TCP_State_Size.html')" class="paragraph">OodleNetwork1TCP_State_Size</a>.
</p>
<p> For compression only of server->client data, your server must have one of these objects for each transmission channel (client). The client must have a matching one to receive from the server. They must be kept in sync - each one must get the same calls to Encode or Decode in the same order. If they ever get out of sync (eg. due to lost connection), then they must both be reset in the same way. (either <a href="javascript:show('OodleNetwork1TCP_State_InitAsCopy.html')" class="paragraph">OodleNetwork1TCP_State_InitAsCopy</a> or <a href="javascript:show('OodleNetwork1TCP_State_Reset.html')" class="paragraph">OodleNetwork1TCP_State_Reset</a>)
</p>
<p><br>&nbsp;<br> <table class=bar> <tr>
<td width=33% align=left><span class='arrowleft'></span><a href="javascript:show('OodleNetwork1_Shared.html')" class="paragraph">OodleNetwork1_Shared</a></td><td width=33% align=center><span class='arrowup'></span><a href="javascript:show('OodleAPI_OodleNetwork1.html')" class="paragraph">OodleAPI_OodleNetwork1</a></td><td width=33% align=right><span class='arrowright'></span><a href="javascript:show('OodleNetwork1UDP_State.html')" class="paragraph">OodleNetwork1UDP_State</a></td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<article id="OodleLZ_GetInPlaceDecodeBufferSize.html" style="display:none;">
<table class=bar><tr><td rowspan=2><span class='smallproduct'></span></td><td width=100% class=title>OodleLZ_GetInPlaceDecodeBufferSize</td></tr>
<tr><td width=100% class=biline>
</td></tr>
</table>
<table class=bar>
<tr>
<td width=100% align=right>
<span onClick='HandleClick(event, "OodleLZ_GetInPlaceDecodeBufferSize.html_backmenu"); return false'>
<b><a href="" class="paragraph">Navigation</a></b>
</span>
</td>
</tr>
</table>
<div class=rightmenuouter>
<div class=rightmenu id="OodleLZ_GetInPlaceDecodeBufferSize.html_backmenu">
<table class=dropmenu>
<tr><td><span class='arrowleft'></span>&nbsp;<a href="javascript:show('OodleLZ_GetDecodeBufferSize.html')" class="paragraph">OodleLZ_GetDecodeBufferSize</a></td></tr><tr><td><span class='arrowright'></span>&nbsp;<a href="javascript:show('OodleLZ_GetCompressedStepForRawStep.html')" class="paragraph">OodleLZ_GetCompressedStepForRawStep</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('index.html')" class="paragraph">Welcome to Oodle</a></td></tr><tr><td><span class='reference'></span>&nbsp;<a href="javascript:show('changelog.html')" class="paragraph">Change Log</a></td></tr>
</table></div></div>
<div class=prototype><div class=prototype_header>// Function prototype:</div><pre>OO_SINTa <span class=prototype_type><a href="javascript:show('OodleLZ_GetInPlaceDecodeBufferSize.html')" class="blue">OodleLZ_GetInPlaceDecodeBufferSize</a></span>( <span class=prototype_type><a href="javascript:show('OodleLZ_Compressor.html')" class="blue">OodleLZ_Compressor</a></span> compressor,
OO_SINTa compLen,
OO_SINTa rawLen );</pre></div><div class=discussion_heading>Discussion</div>Get the size of buffer needed for "in place" decode<div class=discussion_heading>Parameters</div> <table> <tr> <td style='vertical-align: top;' class=paramname><a id="OodleLZ_GetInPlaceDecodeBufferSize.html_compressor" class=nohover>compressor</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> compressor used; OodleLZ_Compressor_Invalid to make it enough for any compressor
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleLZ_GetInPlaceDecodeBufferSize.html_compLen" class=nohover>compLen</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> compressed data length
</td></tr><tr> <td style='vertical-align: top;' class=paramname><a id="OodleLZ_GetInPlaceDecodeBufferSize.html_rawLen" class=nohover>rawLen</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> decompressed data length
</td></tr></table><div class=discussion_heading>Return Value</div> <table> <tr> <td style='vertical-align: top;' class=paramname><a id="OodleLZ_GetInPlaceDecodeBufferSize.html_return" class=nohover>return</a>&nbsp;</td><td style='vertical-align: top;' class=paramdesc> size of buffer needed for "in place" decode ; slighly larger than rawLen
</td></tr></table><div class=discussion_heading>Discussion</div></p>
<p> To do an "in place" decode, allocate a buffer of this size (or larger). Read the compressed data into the end of
the buffer, and decompress to the front of the buffer. The size returned here guarantees that the writes to the
front of the buffer don't conflict with the reads from the end.
</p>
<p> If <i>compressor</i> is one of the new codecs (Kraken,Mermaid,Selkie,Leviathan), the padding for in place decodes can be
very small indeed. It is assumed you will be passing FuzzSafe_Yes to the decompress call.
</p>
<p> If <i>compLen</i> is unknown, you want an in place buffer size that can accomodate any compressed data, then
pass compLen = 0.
</p>
<p> See <a href="javascript:show('OodleLZ_Decompress.html')" class="paragraph">OodleLZ_Decompress</a> for more.
<br>&nbsp;<br> <table class=bar> <tr>
<td width=33% align=left><span class='arrowleft'></span><a href="javascript:show('OodleLZ_GetDecodeBufferSize.html')" class="paragraph">OodleLZ_GetDecodeBufferSize</a></td><td width=33% align=center><span class='arrowup'></span><a href="javascript:show('OodleAPI_LZ_Compressors.html')" class="paragraph">OodleAPI_LZ_Compressors</a></td><td width=33% align=right><span class='arrowright'></span><a href="javascript:show('OodleLZ_GetCompressedStepForRawStep.html')" class="paragraph">OodleLZ_GetCompressedStepForRawStep</a></td></tr></table>
<br><table cellpadding=8 width=100%><tr align=left >
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com/oodle.htm"><span class='product'></span></a></td>
<td style='vertical-align: bottom;' width=100%>
<a href="javascript:show('changelog.html')">Oodle 2.9.14</a>
<br>
<a href="mailto:oodle@radgametools.com">E-mail oodle@radgametools.com for technical support.</a>
<br>
<a href="https://www.radgametools.com/oodle.htm">Copyright &#169; 2008-2025, Epic Games Tools LLC</a>
<br>
All Rights Reserved.
</td>
<td style='vertical-align: bottom;'><a href="https://www.radgametools.com"><span class='company'></span></a></td>
</tr></table></article>
<script>
var word_dictionary = {
'about':1,
'oodle':2,
'on':3,
'nintendo':4,
'switch':5,
'navigation':6,
'nbsp':7,
'ps4':8,
'platforms':9,
'mac':10,
'welcome':11,
'to':12,
'change':13,
'log':14,
'for':15,
'is':16,
'provided':17,
'as':18,
'a':19,
'lib':20,
'liboo2coreswitch':21,
'liboo2extswitch':22,
'the':23,
'debug':24,
'build':25,
'of':26,
'also':27,
'generally':28,
'release':29,
'should':30,
'be':31,
'linked':32,
'with':33,
'all':34,
'versions':35,
'your':36,
'game':37,
'do':38,
'not':39,
'link':40,
'typically':41,
'help':42,
'you':43,
'track':44,
'down':45,
'problems':46,
'oodlex':47,
'file':48,
'io':49,
'uses':50,
'stdio':51,
'malloc':52,
'stdlib':53,
'note':54,
'run':55,
'examples':56,
'must':57,
'mount':58,
'some':59,
'directory':60,
'them':61,
'work':62,
'and':63,
'paths':64,
'used':65,
'relative':66,
'that':67,
'could':68,
'add':69,
'nn':70,
'fs':71,
'mounthostroot':72,
'then':73,
'example_lz_chart':74,
'c':75,
'test_file':76,
'in':77,
'example_lz':78,
'example':79,
'demonstrating':80,
'lz':81,
'compression':82,
'decompression':83,
'these':84,
'would':85,
'need':86,
'changed':87,
'point':88,
'an':89,
'absolute':90,
'path':91,
'static':92,
'const':93,
'char':94,
'in_name':95,
'oodle_example_input_file':96,
'out_name':97,
'oodle_example_output_file':98,
'2':99,
'9':100,
'14':101,
'e':102,
'mail':103,
'radgametools':104,
'com':105,
'technical':106,
'support':107,
'copyright':108,
'169':109,
'2008':110,
'2025':111,
'epic':112,
'games':113,
'tools':114,
'llc':115,
'rights':116,
'reserved':117,
'oodlex_init_nothreads':118,
'oodlex_shutdown':119,
'oodlex_shutdown_nothreads':120,
'function':121,
'prototype':122,
'oo_bool':123,
'oo_u32':124,
'oodle_header_version':125,
'oodlexinitoptions':126,
'poptions':127,
'discussion':128,
'initialize':129,
'no':130,
'threads':131,
'minimal':132,
'systems':133,
'parameters':134,
'pass':135,
'here':136,
'options':137,
'init':138,
'null':139,
'use':140,
'oodlex_init_getdefaults_minimal':141,
'fill':142,
'out':143,
'return':144,
'value':145,
'false':146,
'if':147,
'compatible':148,
'this':149,
'call':150,
'oodlex_init':151,
'or':152,
'before':153,
'any':154,
'other':155,
'expect':156,
'pair':157,
'does':158,
'enable':159,
'ioq':160,
'workmgr':161,
'async':162,
'jobs':163,
'will':164,
'memory':165,
'>memory':166,
'compressors':167,
'startup':168,
'shutdown':169,
'oodlexfree_ioaligned':170,
'oodlexmalloc_ioaligned':171,
'oodlexmalloc_getvtable_clib':172,
'void':173,
'ptr':174,
'free':175,
'pointer':176,
'allocated':177,
'allocators':178,
'oodlexmallocbigalignment':179,
'oodlexfreesized':180,
'oodlexmallocbig':181,
'oo_s32':182,
'returns':183,
'alignment':184,
'pointers':185,
'>':186,
'oodlex_io_max_alignment':187,
'oodlex_createthread':188,
'oodlex_semaphore_wait':189,
'oodlex_waitanddestroythread':190,
'oodlex_thread':191,
'oodlex_threadfunc':192,
'func':193,
'userdata':194,
'start':195,
'thread':196,
'running':197,
'threadfunc':198,
'it':199,
'intended':200,
'production':201,
'they':202,
'are':203,
'replace':204,
'own':205,
'functions':206,
'shipping':207,
'threading':208,
'util':209,
'oodlexhandledeleteifdone':210,
'oodlexhandlekickdelayed':211,
'enumerant':212,
'enum':213,
'oodlexhandledeleteifdone_no':214,
'0':215,
'oodlexhandledeleteifdone_yes':216,
'1':217,
'oodlexhandledeleteifdone_force32':218,
'0x40000000':219,
'handle':220,
'status':221,
'checks':222,
'delete':223,
's':224,
'done':225,
'main':226,
'way':227,
'oodlexhandle':228,
'enumerants':229,
'default':230,
'error':231,
'operations':232,
'oodlex_getstatus':233,
'oodlexmalloc_validatepointer':234,
'oodlexfreebig':235,
'oo_sinta':236,
'bytes':237,
'check':238,
'valid':239,
'validate':240,
'size':241,
'allocation':242,
'known':243,
'true':244,
'headers':245,
'okay':246,
'oodlexmalloc':247,
'can':248,
'unknown':249,
'but':250,
'there':251,
'less':252,
'validation':253,
'validatepointer':254,
'most':255,
'useful':256,
'thunk':257,
'layer':258,
'installed':259,
'frequently':260,
'asked':261,
'questions':262,
'faq':263,
'oodlelz_decompress':264,
'failing':265,
'how':266,
'i':267,
'diagnose':268,
'allocator':269,
'limit':270,
'encoder':271,
'much':272,
'what':273,
'deprecated':274,
'new':275,
'break':276,
'data':277,
'compatibility':278,
'oodlelz':279,
'compare':280,
'which':281,
'speeds':282,
'ratios':283,
'levels':284,
'decompress':285,
'graphics':286,
'quickly':287,
'get':288,
'logs':289,
'write':290,
'contents':291,
'garbage':292,
'ran':293,
'oodlehandle':294,
'table':295,
'slots':296,
'sinta':297,
'load':298,
'files':299,
'bigger':300,
'than':301,
'gb':302,
'my':303,
'aren':304,
't':305,
'loading':306,
'right':307,
'oodle_job_max_dependencies':308,
'oodle_malloc_minimum_alignment':309,
'oodle_job_null_handle':310,
'preprocessor':311,
'definition':312,
'define':313,
'4':314,
'maximum':315,
'number':316,
'dependencies':317,
'ever':318,
'runjob':319,
'callback':320,
'core':321,
'base':322,
't_fp_oodlecore_plugin_runjob':323,
't_fp_oodlecore_plugin_free':324,
't_fp_oodlecore_plugin_waitjob':325,
'typedef':326,
'oodeffunc':327,
'oo_u64':328,
'oodle_callback':329,
't_fp_oodle_job':330,
'fp_job':331,
'job_data':332,
'int':333,
'num_dependencies':334,
'user_ptr':335,
'type':336,
'oodlecore_plugins_setjobsystem':337,
'array':338,
'handles':339,
'pending':340,
'guaranteed':341,
'nonzero':342,
'more':343,
'passed':344,
'through':345,
'from':346,
'oodlelz_compressoptions':347,
'job':348,
'was':349,
'synchronously':350,
'may':351,
'indicating':352,
'already':353,
'returned':354,
'waitjob':355,
'unless':356,
'case':357,
'won':358,
'called':359,
'until':360,
'callable':361,
'within':362,
'spawn':363,
'their':364,
'sub':365,
'directly':366,
'however':367,
'matching':368,
'calls':369,
'only':370,
'occur':371,
'internally':372,
'threaded':373,
'api':374,
'see':375,
'plugins':376,
'oodlexlz_decompress_wide_async':377,
'oodlexlz_readanddecompress_wide_async':378,
'oodlexlz_decompress_makeseektable_wide_async':379,
'asyncselect':380,
'oodlelz_seektable':381,
'seektable':382,
'packeddataptr':383,
'packedlen':384,
'rawarray':385,
'rawarraylen':386,
'oodlelz_fuzzsafe':387,
'fuzzsafe':388,
'oodefault':389,
'oodlelz_fuzzsafe_no':390,
'oodlelz_checkcrc':391,
'checkcrc':392,
'oodlelz_checkcrc_no':393,
'oodlelz_verbosity':394,
'verbosity':395,
'oodlelz_verbosity_none':396,
'decbufbase':397,
'decbufsize':398,
'oodlelz_packedrawoverlap':399,
'packedrawoverlap':400,
'oodlelz_packedrawoverlap_no':401,
'oodlexioqfile':402,
'writetofile':403,
'oo_s64':404,
'writetofilestartpos':405,
'pwritehandlegroup':406,
'oodlexhandleautodelete':407,
'autodelete':408,
'oodlexhandleautodelete_no':409,
'numdependencies':410,
'possibly':411,
'raw':412,
'logical':413,
'oodlexasyncselect':414,
'flags':415,
'determine':416,
'seek':417,
'locations':418,
'created':419,
'by':420,
'oodlelz_createseektable':421,
'compressed':422,
'length':423,
'filled':424,
'decompressed':425,
'oodlelz_checkcrc_yes':426,
'decompressor':427,
'crc':428,
'ensure':429,
'integrity':430,
'optional':431,
'information':432,
'provides':433,
'preceding':434,
'prime':435,
'dictionary':436,
'contiguous':437,
'rawbuf':438,
'between':439,
'dictionarybase':440,
'preconditioning':441,
'exact':442,
'same':443,
'precondition':444,
'decoder':445,
'circular':446,
'buffer':447,
'starting':448,
'at':449,
'oodlelz_packedrawoverlap_yes':450,
'output':451,
'position':452,
'where':453,
'aligned':454,
'given':455,
'oodleasyncgroup':456,
'containing':457,
'op':458,
'complete':459,
'freed':460,
'deps':461,
'operation':462,
'oodlexhandle_null':463,
'invalid':464,
'arguments':465,
'except':466,
'doesn':467,
'include':468,
'option':469,
'read':470,
'packed':471,
'fully':472,
'loaded':473,
'oodlexapi_lz_async':474,
'oodlenetwork1tcp_state_reset':475,
'oodlenetwork1_shared_setwindow':476,
'oodlenetwork1tcp_state_initascopy':477,
'oodlenetwork1tcp_state':478,
'state':479,
'resets':480,
'better':481,
'make':482,
'trained':483,
'initial':484,
'oodlenetwork1tcp_train':485,
'oodleapi_oodlenetwork1':486,
'getting':487,
'started':488,
'network':489,
'compresses':490,
'packets':491,
'bandwidth':492,
'reduction':493,
'improved':494,
'player':495,
'experience':496,
'networked':497,
'works':498,
'both':499,
'tcp':500,
'udp':501,
'compress':502,
'packages':503,
'downloadable':504,
'content':505,
'using':506,
'unreal':507,
'engine':508,
'ask':509,
'us':510,
'our':511,
'integration':512,
'its':513,
'offline':514,
'training':515,
'phase':516,
'capture':517,
'large':518,
'sample':519,
'model':520,
'learns':521,
'saved':522,
'disk':523,
'shipped':524,
'runtime':525,
'component':526,
'loads':527,
'fly':528,
'makes':529,
'even':530,
'very':531,
'small':532,
'zero':533,
'latency':534,
'extra':535,
'buffering':536,
'introduced':537,
'mode':538,
'independently':539,
'previous':540,
'sent':541,
'over':542,
'each':543,
'connection':544,
'example_network_client':545,
'simple':546,
'client':547,
'previously':548,
'evalute':549,
'packet':550,
'first':551,
'typical':552,
'stream':553,
'test':554,
'try':555,
'realistic':556,
'perhaps':557,
'qa':558,
'department':559,
'playing':560,
'captured':561,
'without':562,
'encryption':563,
'algorithms':564,
'applied':565,
'continue':566,
'bit':567,
'packing':568,
'delta':569,
'scheme':570,
'100':571,
'mb':572,
'varied':573,
'reflect':574,
'real':575,
'world':576,
'performance':577,
'protocol':578,
'format':579,
'example_packet':580,
'bin':581,
'u32':582,
'le':583,
'numbers':584,
'channels':585,
'num_channels':586,
'repeatedly':587,
'channel':588,
'index':589,
'num_bytes':590,
'u8':591,
'payload':592,
'set':593,
'indices':594,
'once':595,
'have':596,
'send':597,
'we':598,
'll':599,
'tests':600,
'contact':601,
'details':602,
'existing':603,
'disabled':604,
'contain':605,
'ip':606,
'usually':607,
'best':608,
'code':609,
'don':610,
'external':611,
'logger':612,
'possible':613,
'splitting':614,
'into':615,
'mtu':616,
'units':617,
'goal':618,
'payloads':619,
'capturing':620,
'oodlenetwork':621,
'splits':622,
'testing':623,
'trains':624,
'testoodlenetwork_selectdictionaryandtrain':625,
'saves':626,
'oodlenetwork1_compressor_writetofile':627,
'oodlenetwork1_compressor_loadfromfiledata':628,
'holdout':629,
'testoodlenetwork1udppacketcoder_transmission':630,
'apis':631,
'actual':632,
'oodlenetwork1udp_encode':633,
'oodlenetwork1udp_decode':634,
'similar':635,
'variants':636,
'toggle':637,
'trainer':638,
'either':639,
'incorporating':640,
'variant':641,
'oodlenetwork1':642,
'forming':643,
'guide':644,
'library':645,
'platform':646,
'vs':647,
'ext':648,
'libs':649,
'oodle2':650,
'oodlenetwork1udp_state_size':651,
'oodlenetwork1udp_train':652,
'required':653,
'oodlenetwork1udp_state':654,
'object':655,
'shared':656,
'oodledecompresscallbackret':657,
'oodlelz_profile':658,
'oodlelz_compressionlevel':659,
'oodledecompresscallbackret_continue':660,
'oodledecompresscallbackret_cancel':661,
'oodledecompresscallbackret_invalid':662,
'oodledecompresscallbackret_force32':663,
'oodledecompresscallback':664,
'abort':665,
'progress':666,
'oodleapi_lz_compressors':667,
'oodlelz_quantum_len':668,
'oodlelz_block_max_complen':669,
'oodlelz_failed':670,
'lt':671,
'minimum':672,
'quantum':673,
'old':674,
'legacy':675,
'codecs':676,
'sea':677,
'monster':678,
'family':679,
'whole':680,
'block':681,
'oodlelz_block_len':682,
'oodlelz_compressor_useswholeblockquantum':683,
'oodlex_getconfigvalues':684,
'threadprofilelogname':685,
'oodlex_shutdown_logleaks':686,
'logleaks':687,
'oodlex_shutdown_logleaks_yes':688,
'allocstartcounter':689,
'oodlex_shutdown_debugbreakonleaks':690,
'debugbreakonleaks':691,
'oodlex_shutdown_debugbreakonleaks_no':692,
'shut':693,
'app':694,
'exit':695,
'time':696,
'threadprofiler':697,
'enabled':698,
'writes':699,
'name':700,
'leaktracker':701,
'leaks':702,
'counter':703,
'leaktrack':704,
'after':705,
'again':706,
'per':707,
'oodlexmalloc_getvtable_os':708,
'oodlexmallocvtable':709,
'oodlexmalloc_os_options':710,
'oodlemalloc':711,
'vtable':712,
'contains':713,
'based':714,
'std':715,
'clib':716,
'oodlex_prefixoscwd':717,
'oodlex_getoscwd':718,
'addto':719,
'addtosize':720,
'prefixing':721,
'current':722,
'dir':723,
'string':724,
'modified':725,
'total':726,
'strlen':727,
'os':728,
'cwd':729,
'retrieved':730,
'prefixed':731,
'front':732,
'utils':733,
'documentation':734,
'defines':735,
'oodlenetwork1_max_dictionary_size':736,
'oodlenetwork1_hash_bits_default':737,
'oodlenetwork1_decomp_buf_overread_len':738,
'structures':739,
'oodlenetwork1_shared':740,
'oodlenetwork1udp_statecompacted':741,
'oodlenetwork1_shared_size':742,
'oodlenetwork1tcp_state_size':743,
'oodlenetwork1_compressedbuffersizeneeded':744,
'oodlenetwork1tcp_encode':745,
'oodlenetwork1tcp_decode':746,
'oodlenetwork1udp_statecompacted_maxsize':747,
'oodlenetwork1udp_state_compact_forversion':748,
'oodlenetwork1udp_state_compact':749,
'oodlenetwork1udp_state_uncompact_forversion':750,
'oodlenetwork1udp_state_uncompact':751,
'oodlenetwork1_selectdictionarysupported':752,
'oodlenetwork1_selectdictionaryfrompackets':753,
'oodlenetwork1_selectdictionaryfrompackets_trials':754,
'oodlenet_plugins_setallocators':755,
'oodlenet_plugins_setjobsystem':756,
'oodlenet_plugins_setjobsystemandcount':757,
'oodlenet_plugins_setprintf':758,
'oodlenet_plugins_setassertion':759,
'typedefs':760,
't_fp_oodlenet_plugin_mallocaligned':761,
't_fp_oodlenet_plugin_free':762,
't_fp_oodlenet_plugin_runjob':763,
't_fp_oodlenet_plugin_waitjob':764,
't_fp_oodlenet_plugin_printf':765,
't_fp_oodlenet_plugin_displayassertion':766,
'oodlexioq_rename_async':767,
'oodlexioq_delete_async':768,
'oodlexioq_makedir_async':769,
'fm':770,
'overwrite':771,
'oodlexpriority':772,
'priority':773,
'oodlexpriority_normal':774,
'renamefile':775,
'request':776,
'rename':777,
'vfs':778,
'utf':779,
'8':780,
'overwrriten':781,
'due':782,
'args':783,
'asynchronously':784,
'oodlexioq_forcewriteable_async':785,
'force':786,
'ovewriting':787,
'access':788,
'conditions':789,
'low':790,
'level':791,
'windows':792,
'liboo2coreps4':793,
'liboo2extps4':794,
'goes':795,
'scekernel':796,
'routines':797,
'fios':798,
'scekernelallocatedirectmemory':799,
'allocations':800,
'ones':801,
'worrying':802,
'ifdef':803,
'_radps4':804,
'_':805,
'unsigned':806,
'scelibcheapextendedalloc':807,
'dynamic':808,
'size_t':809,
'scelibcheapsize':810,
'sce_libc_heap_size_extended_alloc_no_limit':811,
'upper':812,
'heap':813,
'area':814,
'endif':815,
'uncached':816,
'now':817,
'automatically':818,
'detects':819,
'warns':820,
'uwp':821,
'utilities':822,
'oodlex_semaphore_post':823,
'oodlex_releasethreadtls':824,
'oodlex_coreplugin_runjob':825,
'oodlex_coreplugin_waitjob':826,
'oodlex_getnumworkerthreads':827,
'oodlex_semaphore':828,
'oodlexhandlecountdown_decrement':829,
'oodlecore_plugins_setprintf':830,
'oodlecore_plugins_setjobsystemandcount':831,
'oodlecore_plugins_setassertion':832,
't_fp_oodlecore_plugin_printf':833,
'fp_rrrawprintf':834,
'install':835,
'logging':836,
'disable':837,
'printf':838,
'implementation':839,
'builds':840,
'nothing':841,
'microsoft':842,
'outputdebugstring':843,
'warning':844,
'safe':845,
'place':846,
'caller':847,
'guarantee':848,
'safety':849,
'oodlecore_plugin_printf_verbose':850,
'verbose':851,
'oodlexioq_rename_asyncandwait':852,
'oodlexioq_delete_asyncandwait':853,
'oodlexioq_getfilesize_asyncandwait':854,
'result':855,
'allocate':856,
'up':857,
'oodleioq':858,
'places':859,
'require':860,
'just':861,
'oodlex_getavailableasyncselect':862,
'oodlex_sethandleautodelete':863,
'oodlexhandleevent_alloc':864,
'currently':865,
'available':866,
'bitwise':867,
'oodlexasyncselect_wide':868,
'one':869,
'runner':870,
'oodlexioq_getlastpendingoponfile':871,
'oodlexioq_wait_getinfo':872,
'oodlexioq_getname':873,
'ioqfile':874,
'query':875,
'found':876,
'none':877,
'longer':878,
'nor':879,
'last':880,
'oodlex_s64_to_sinta_check':881,
'oodlex_ioaligndownsinta':882,
'oodlex_getseconds':883,
'x':884,
'convert':885,
'64':886,
'sizes':887,
'buffers':888,
'converts':889,
'fits':890,
'32':891,
'ensures':892,
'lose':893,
'bits':894,
'cast':895,
'accidentally':896,
'decompressors':897,
'back':898,
'decompressing':899,
'combined':900,
'such':901,
'bad':902,
'several':903,
'supported':904,
'targets':905,
'offer':906,
'efficient':907,
'types':908,
'underlying':909,
'virtual':910,
'addresses':911,
'instead':912,
'performs':913,
'quick':914,
'fast':915,
'repeated':916,
'byte':917,
'reads':918,
'location':919,
'destination':920,
'when':921,
'slow':922,
'means':923,
'few':924,
'ways':925,
'decode':926,
'depending':927,
'usage':928,
'simplest':929,
'temporary':930,
'normal':931,
'cached':932,
'memcpy':933,
'unbounded':934,
'window':935,
'equal':936,
'target':937,
'copy':938,
'final':939,
'decoding':940,
'incrementally':941,
'decodesome':942,
'bounded':943,
'setting':944,
'dictionarysize':945,
'compressoption':946,
'sliding':947,
'cpu':948,
'chunks':949,
'lz_test_11':950,
'demonstration':951,
'style':952,
'fastest':953,
'flush':954,
'cache':955,
'gpu':956,
'ideally':957,
'd':958,
'lots':959,
'decodes':960,
'every':961,
'resource':962,
'decoded':963,
'wb_onion':964,
'wb_garlic':965,
'scekernelmtypeprotect':966,
'scekernelbatchmap':967,
'xbox':968,
'reserve':969,
'range':970,
'virtualalloc':971,
'commit':972,
'readwrite':973,
'decommit':974,
'address':975,
'gpu_readonly':976,
'workaround':977,
'allows':978,
'because':979,
'virtualprotect':980,
'allow':981,
'wish':982,
'explore':983,
'advanced':984,
'manipulations':985,
'oodle_setusagewarnings':986,
'oodlelzseektable_flags':987,
'oodlelz_compressscratchmemboundtype':988,
'oodlelzseektable_flags_none':989,
'oodlelzseektable_flags_makerawcrcs':990,
'oodlelzseektable_flags_force32':991,
'rawcrcs':992,
'member':993,
'19':994,
'good':995,
'hash':996,
'log2':997,
'oodlex_async_handle_done':998,
'oodlex_async_handle_pending':999,
'oodlex_async_handle_error':1000,
'0x0000000100000001ull':1001,
'special':1002,
'always':1003,
'amp':1004,
'oodlexstatus_done':1005,
'deleted':1006,
'oodlex_wait':1007,
'deleteifdone':1008,
'oodlexioq_freebufferioaligned_async':1009,
'oodlecore_plugins_setallocators':1010,
't_fp_oodlecore_plugin_mallocaligned':1011,
't_fp_oodlecore_plugin_displayassertion':1012,
'oodle_logheader':1013,
'oodlexioq_getinfobyname_async':1014,
'scheduled':1015,
'runs':1016,
'sequential':1017,
'list':1018,
'ops':1019,
'mainly':1020,
'oodlexioq_write_async':1021,
'freebuffer':1022,
'oodlexlog_setverboselevel':1023,
'oodlexlog_getverboselevel':1024,
'oodlexlog_flush':1025,
'v':1026,
'global':1027,
'oodlexlog_verboselevel':1028,
'n':1029,
'oodlexlog_printf':1030,
'm':1031,
'skipped':1032,
'eg':1033,
'development':1034,
'oodlexlog_verbose_some':1035,
'oodlexlog_printf_v2':1036,
'aids':1037,
'stateless':1038,
'asychronous':1039,
'oodlex_buffer_size_default':1040,
'oodlex_fileinfo_flag_invalid':1041,
'oodlex_fileinfo_modtime_invalid':1042,
'oodlex_file_size_invalid':1043,
'oodlex_file_open_no_reserve_size':1044,
'oodlex_file_close_no_truncate_size':1045,
'oodlexcopyfileflags':1046,
'oodlefilenotfoundisanerror':1047,
'oodlex_fileinfo_flags':1048,
'oodlexerror':1049,
'oodlexfilemode':1050,
'oodlexfileopenflags':1051,
'oodlexfileopsvtable':1052,
'oodlexfileinfo':1053,
'oodlexioq_waitdoneallpending':1054,
'oodlexioq_kickanydelayed':1055,
'oodlexioq_getstatus':1056,
'oodlexioq_geterrordetails':1057,
'oodlexioq_geterrorenum':1058,
'oodlexioq_logerror':1059,
'oodlexioq_wait':1060,
'oodlexioq_getinfo':1061,
'oodlexioq_getlasterror':1062,
'oodlexioq_clearerror':1063,
'oodlexioq_loglasterror':1064,
'oodlexioq_getoshandle':1065,
'oodlexioq_setvtable':1066,
'oodlexioq_fence_async':1067,
'oodlexioq_openforread_async':1068,
'oodlexioq_openandread_async':1069,
'oodlexioq_openforwritecreate_async':1070,
'oodlexioq_openforwritetempname_async':1071,
'oodlexioq_closefile_async':1072,
'oodlexioq_closefilerename_async':1073,
'oodlexioq_read_async':1074,
'oodlexioq_setfilesize_async':1075,
'oodlexioq_reservefilesizeforwrite_async':1076,
'oodlexioq_getinfobyname_getresult':1077,
'oodlexioq_setinfobyname_async':1078,
'oodlexioq_readmallocwholefile_async':1079,
'oodlexioq_readmallocwholefile_getresult':1080,
'oodlexioq_openandreadmallocwholefile_async':1081,
'oodlexioq_openandreadmallocwholefileandclose_async':1082,
'oodlexioq_openwritewholefileclose_async':1083,
'oodlexioq_openwritewholefileclosetempname_async':1084,
'oodlexioq_readunalignedadjustpointer_async':1085,
'oodlexioq_makealldirs_async':1086,
'oodlexioq_copyfile_async':1087,
'oodlexioq_readmallocwholefile_asyncandwait':1088,
'oodlexioq_writewholefile_asyncandwait':1089,
'oodlexioq_copyfile_asyncandwait':1090,
'oodlexioq_getinfobyname_asyncandwait':1091,
'oodlexioq_setinfobyname_asyncandwait':1092,
'oodlexioq_makealldirs_asyncandwait':1093,
'oodlexioq_nameisdir_asyncandwait':1094,
'oodlex_getosfileops':1095,
'oodlex_getdefaultfileops':1096,
'oodlex_setdefaultfileops':1097,
'oodlexosfile':1098,
'oodlexosfilelisting':1099,
'specialized':1100,
'compressor':1101,
'designed':1102,
'transmission':1103,
'reduce':1104,
'improve':1105,
'intro':1106,
'features':1107,
'encodes':1108,
'encode':1109,
'>buffer':1110,
'usual':1111,
'extremely':1112,
'server':1113,
'complexity':1114,
'process':1115,
'heavy':1116,
'so':1117,
'quite':1118,
'provide':1119,
'around':1120,
'100k':1121,
'linear':1122,
'speed':1123,
'zlib':1124,
'5':1125,
'lz4':1126,
'hc':1127,
'while':1128,
'achieving':1129,
'able':1130,
'been':1131,
'never':1132,
'expand':1133,
'choosing':1134,
'larger':1135,
'dictionaries':1136,
'give':1137,
'choose':1138,
'tradeoff':1139,
'suits':1140,
'needs':1141,
'desktop':1142,
're':1143,
'entrant':1144,
'mutexes':1145,
'blocking':1146,
'initialization':1147,
'networking':1148,
'dropped':1149,
'arrive':1150,
'different':1151,
'orders':1152,
'consistent':1153,
'history':1154,
'cannot':1155,
'oodlenetwork1udp':1156,
'distribute':1157,
'sometimes':1158,
'advantageous':1159,
'separate':1160,
'models':1161,
'upstream':1162,
'downstream':1163,
'traffic':1164,
'direction':1165,
'easily':1166,
'lost':1167,
'order':1168,
'still':1169,
'correctly':1170,
'595654217':1171,
'123101634':1172,
'839':1173,
'1605378':1174,
'371':1175,
'76':1176,
'7':1177,
'average':1178,
'150022411':1179,
'3':1180,
'970':1181,
'93':1182,
'reliable':1183,
'below':1184,
'plus':1185,
'demonstrated':1186,
'distribution':1187,
'downloads':1188,
'join':1189,
'delay':1190,
'produces':1191,
'immediately':1192,
'processed':1193,
'user':1194,
'adaptive':1195,
'arithmetic':1196,
'coder':1197,
'match':1198,
'literal':1199,
'statistics':1200,
'adapt':1201,
'big':1202,
'win':1203,
'kind':1204,
'has':1205,
'104k':1206,
'400k':1207,
'problem':1208,
'16gb':1209,
'servers':1210,
'10':1211,
'000':1212,
'connections':1213,
'really':1214,
'care':1215,
'64mb':1216,
'comes':1217,
'side':1218,
'suspect':1219,
'something':1220,
'8mb':1221,
'16mb':1222,
'reasonable':1223,
'course':1224,
'like':1225,
'off':1226,
'btw':1227,
'necessarily':1228,
'open':1229,
'tend':1230,
'go':1231,
'idle':1232,
'drop':1233,
'starts':1234,
'grab':1235,
'fresh':1236,
'reset':1237,
'message':1238,
'wipes':1239,
'thousand':1240,
'states':1241,
'cycle':1242,
'lru':1243,
'actually':1244,
'higher':1245,
'simultaneous':1246,
'active':1247,
'recycling':1248,
'standard':1249,
'causes':1250,
'nasty':1251,
'thrashing':1252,
'ymmv':1253,
'etc':1254,
'results':1255,
'18':1256,
'131935361':1257,
'515':1258,
'82':1259,
'16':1260,
'20':1261,
'110427772':1262,
'394':1263,
'68':1264,
'21':1265,
'93276137':1266,
'6':1267,
'386':1268,
'58':1269,
'oodlex_init_getdefaults_debugsystems':1270,
'oodlex_init_getdefaults_threads':1271,
'oodlex_init_getdefaults_debugsystems_no':1272,
'oodlex_init_getdefaults_debugsystems_yes':1273,
'oodlex_init_getdefaults_debugsystems_force32':1274,
'getdefaults':1275,
'debugging':1276,
'oodle_workers_count_all_hyper_cores':1277,
'oodlelz_compressor':1278,
'oodlelz_compressor_invalid':1279,
'oodlelz_compressor_none':1280,
'oodlelz_compressor_kraken':1281,
'oodlelz_compressor_leviathan':1282,
'13':1283,
'oodlelz_compressor_mermaid':1284,
'oodlelz_compressor_selkie':1285,
'11':1286,
'oodlelz_compressor_hydra':1287,
'12':1288,
'oodlelz_compressor_bitknit':1289,
'oodlelz_compressor_lzb16':1290,
'oodlelz_compressor_lzna':1291,
'oodlelz_compressor_lzh':1292,
'oodlelz_compressor_lzhlw':1293,
'oodlelz_compressor_lznib':1294,
'oodlelz_compressor_lzblw':1295,
'oodlelz_compressor_lza':1296,
'oodlelz_compressor_count':1297,
'oodlelz_compressor_force32':1298,
'selection':1299,
'algorithm':1300,
'uncompressed':1301,
'high':1302,
'amazing':1303,
'leviathan':1304,
'kraken':1305,
'brother':1306,
'slightly':1307,
'slower':1308,
'mermaid':1309,
'selkie':1310,
'crazy':1311,
'decent':1312,
'super':1313,
'hydra':1314,
'many':1315,
'headed':1316,
'beast':1317,
'balance':1318,
'ratio':1319,
'users':1320,
'oodle_allow_deprecated_compressors':1321,
'monsters':1322,
'fuzz':1323,
'16k':1324,
'including':1325,
'h':1326,
'oodlelz_decodesome_out':1327,
'structure':1328,
'struct':1329,
'unused_was_verbosity':1330,
'minmatchlen':1331,
'seekchunkreset':1332,
'seekchunklen':1333,
'profile':1334,
'spacespeedtradeoffbytes':1335,
'unused_was_maxhuffmansperchunk':1336,
'sendquantumcrcs':1337,
'maxlocaldictionarysize':1338,
'makelongrangematcher':1339,
'matchtablesizelog2':1340,
'oodlelz_jobify':1341,
'jobify':1342,
'jobifyuserptr':1343,
'farmatchminlen':1344,
'farmatchoffsetlog2':1345,
'members':1346,
'unused':1347,
'mml':1348,
'space':1349,
'whether':1350,
'independent':1351,
'seeking':1352,
'parallelism':1353,
'power':1354,
'oodlelz_makeseekchunklen':1355,
'sets':1356,
'offset':1357,
'matches':1358,
'lower':1359,
'supports':1360,
'infinite':1361,
'often':1362,
'gain':1363,
'least':1364,
'accept':1365,
'decreasing':1366,
'decision':1367,
'maxhuffmansperchunk':1368,
'necessary':1369,
'want':1370,
'optimals':1371,
'local':1372,
'needing':1373,
'long':1374,
'matcher':1375,
'taken':1376,
'oodlelz_localdictionarysize_max':1377,
'find':1378,
'beyond':1379,
'lrm':1380,
'non':1381,
'variable':1382,
'finder':1383,
'controls':1384,
'internal':1385,
'callbacks':1386,
'far':1387,
'len':1388,
'meet':1389,
'adding':1390,
'calling':1391,
'oodlelz_compressoptions_getdefault':1392,
'individual':1393,
'my_options':1394,
'oodlelz_compressoptions_validate':1395,
'holder':1396,
'rarely':1397,
'let':1398,
'decide':1399,
'bumping':1400,
'little':1401,
'effect':1402,
'keep':1403,
'increase':1404,
'wide':1405,
'pieces':1406,
'keeping':1407,
'references':1408,
'tells':1409,
'alternate':1410,
'bitstream':1411,
'limits':1412,
'partial':1413,
'entire':1414,
'trade':1415,
'smaller':1416,
'save':1417,
'worth':1418,
'256':1419,
'oodlelz_spacespeedtradeoffbytes_default':1420,
'another':1421,
'huffman':1422,
'1024':1423,
'faster':1424,
'primary':1425,
'parameter':1426,
'controlling':1427,
'200':1428,
'1200':1429,
'extreme':1430,
'mean':1431,
'smallest':1432,
'values':1433,
'anyway':1434,
'diminishing':1435,
'gains':1436,
'pointless':1437,
'loss':1438,
'sort':1439,
'powers':1440,
'scale':1441,
'might':1442,
'experiment':1443,
'128':1444,
'512':1445,
'outside':1446,
'2048':1447,
'recommended':1448,
'hashes':1449,
'verify':1450,
'verification':1451,
'system':1452,
'backwards':1453,
'applies':1454,
'optimal':1455,
'parsers':1456,
'optimal2':1457,
'making':1458,
'exactly':1459,
'approximate':1460,
'boost':1461,
'encoding':1462,
'superfast':1463,
'left':1464,
'roughly':1465,
'tasks':1466,
'parallel':1467,
'tune':1468,
'encoded':1469,
'hardware':1470,
'offsets':1471,
'greater':1472,
'machine':1473,
'encoders':1474,
'blend':1475,
'well':1476,
'machines':1477,
'cuts':1478,
'certain':1479,
'distance':1480,
'appropriate':1481,
'restrictive':1482,
'raise':1483,
'min':1484,
'shorter':1485,
'fields':1486,
'initialized':1487,
'particular':1488,
'zeroed':1489,
'future':1490,
'portable':1491,
'explicitly':1492,
'oodlexstatus':1493,
'req':1494,
'anddeleteifdone':1495,
'perrorcode':1496,
'preturnvalue':1497,
'optionally':1498,
'depends':1499,
'successfully':1500,
'oodlex_async_handle_invalid':1501,
'oodlexstatus_invalid':1502,
'ios':1503,
'linux':1504,
'android':1505,
'includes':1506,
'synchronous':1507,
'mobile':1508,
'oodlelz_compressionlevel_optimal1':1509,
'oodlelz_compressionlevel_normal':1510,
'oodlexlog_getcallback':1511,
'oodlexlog_setcallback':1512,
'oodlexlogcallbackret':1513,
'simpler':1514,
'suitable':1515,
'basis':1516,
'overview':1517,
'apply':1518,
'use_oodle_lz_data_compression':1519,
'oodle2net':1520,
'defined':1521,
'__oodle2_h_included__':1522,
'oodle2x':1523,
'ifndef':1524,
'_crt_secure_no_warnings':1525,
'stl':1526,
'gives':1527,
'trouble':1528,
'diagnostic':1529,
'printing':1530,
'example_packet_do_sort':1531,
'else':1532,
'_iterator_debug_level':1533,
'_has_iterator_debugging':1534,
'display':1535,
'algorithm>':1536,
'ooex':1537,
'helpers':1538,
'h>':1539,
'assert':1540,
'building_example_caller':1541,
'_msc_ver':1542,
'pragma':1543,
'4505':1544,
'fake':1545,
'share':1546,
'select':1547,
'example_packet_test_oodlenetwork1_tcp':1548,
'example_packet_test_oodlenetwork1_udp':1549,
'example_packet_test_oodlenetwork1_dic_sizes':1550,
'variety':1551,
'tested':1552,
'multiple':1553,
'report':1554,
'repeat':1555,
'example_packet_oodlenetwork_load_existing':1556,
'trials':1557,
'example_packet_oodlenetwork_do_trials':1558,
'included':1559,
'excluded':1560,
'example_packet_include_all_packets':1561,
'vector':1562,
'stddef':1563,
'__gnuc__':1564,
'stdint':1565,
'new>':1566,
'operator':1567,
'placement':1568,
'cb_alloc':1569,
'cb_free':1570,
'cb_assert_malloc':1571,
'exp':1572,
'ooex_assert_always':1573,
'cbvector':1574,
'helper':1575,
'read_whole_file':1576,
'write_whole_file':1577,
'file_name':1578,
'fp':1579,
'fopen':1580,
'wb':1581,
'count':1582,
'fwrite':1583,
'fclose':1584,
'building_test_packet':1585,
'example_packet_default_output_path':1586,
'namespace':1587,
'oodleiobuffer':1588,
'oo_u8':1589,
'explicit':1590,
'oodlexlog_printf_v1':1591,
'oodlexlog_printf_v0':1592,
'failed':1593,
'alloc_size':1594,
'protos':1595,
'testoodlenetwork1tcppacketcoder':1596,
'iob_packet_train':1597,
'iob_packet_test':1598,
'on1_dic_mb':1599,
'on1_ht_bits':1600,
'testoodlenetwork1udppacketcoder':1601,
'for_oodle_version_major':1602,
'names':1603,
'fraction':1604,
'command':1605,
'line':1606,
'adjusted':1607,
'enough':1608,
'c_example_packet_file':1609,
'r':1610,
'c_example_packet_test_holdout_fraction_denominator':1611,
'hold':1612,
'samples':1613,
'variables':1614,
'control':1615,
'filtering':1616,
'reject':1617,
'subset':1618,
'c_packet_filter_skip_initial':1619,
'c_packet_filter_max_num':1620,
'29':1621,
'2500000':1622,
'100000':1623,
'c_packet_filter_min_size':1624,
'c_packet_filter_max_size':1625,
'exclude':1626,
'tiny':1627,
'8192':1628,
'example_packet_file':1629,
'session':1630,
'portion':1631,
'example_packet_test_holdout_fraction_denominator':1632,
'held':1633,
'remainder':1634,
'evaluating':1635,
'fair':1636,
'irandmod':1637,
'scan_packet_iobs':1638,
'iob_packet':1639,
'p_iob_packet_test':1640,
'p_iob_packet_train':1641,
'packet_bin_buf':1642,
'packet_bin_size':1643,
'dword':1644,
'packet_bin_ptr':1645,
'packet_bin_end':1646,
'packet_test_ptr':1647,
'packet_train_ptr':1648,
'>ptr':1649,
'ooex_get32_le':1650,
'sizeof':1651,
'ooex_assert':1652,
'ooex_put32_le':1653,
'tot_packet_bytes':1654,
'tot_num_packets':1655,
'train_packet_bytes':1656,
'train_num_packets':1657,
'test_packet_bytes':1658,
'test_num_packets':1659,
'num_packets_excluded':1660,
'packet_bytes_excluded':1661,
'num_packets_initial':1662,
'smallest_packet_size':1663,
'9999999':1664,
'largest_packet_size':1665,
'largest_packet_ptr':1666,
'header':1667,
'skip':1668,
'largest':1669,
'filters':1670,
'ooex_min':1671,
'end':1672,
'train':1673,
'>size':1674,
'lld':1675,
'2f':1676,
'double':1677,
'filtered':1678,
'max':1679,
'were':1680,
'filter':1681,
'consider':1682,
'largest_packet':1683,
'oodlexfileopenflags_buffered':1684,
'ooex_unused_variable':1685,
'test_packet_iobs':1686,
'example_packet_onefile':1687,
'holding':1688,
'example_packet_twofile':1689,
'packet_train_file':1690,
'packet_test_file':1691,
'iob_packet_test_parsed':1692,
'scan':1693,
'exclusions':1694,
'iob_packet_train_parsed':1695,
'on1':1696,
'17':1697,
'on1_dictionary_mb':1698,
'24':1699,
'__oodle2x_h_included__':1700,
'install_oodlex_plugins_to_oodlenet':1701,
'oodlexlog_printf_raw':1702,
'oodlex_displayassertion':1703,
'oodlexmallocaligned':1704,
'oodlexfree':1705,
'extern':1706,
'argc':1707,
'argv':1708,
'oodlex_init_default':1709,
'fprintf':1710,
'stderr':1711,
'packet_file':1712,
'test_holdout':1713,
'defaults':1714,
'oodle2net_version_major':1715,
'overrides':1716,
'atoi':1717,
'compat':1718,
'version':1719,
'oodleconfigvalues':1720,
'oodleconfig':1721,
'oodle_getconfigvalues':1722,
'm_oodlelz_backwardscompatible_majorversion':1723,
'oodle_setconfigvalues':1724,
'ret':1725,
'press':1726,
'key':1727,
'fgetc':1728,
'stdin':1729,
'oodlelog_packetcompression':1730,
'tot_rawlen':1731,
'tot_complen':1732,
'tot_numpackets':1733,
'1f':1734,
'3f':1735,
'original':1736,
'packetcompressresult':1737,
'raw_size':1738,
'compressed_size':1739,
'packetcompressresult_compare_raw_size':1740,
'bool':1741,
'lhs':1742,
'rhs':1743,
'packetcompressresult_compare_compression_ratio':1744,
'multiply':1745,
'overflow':1746,
'bump':1747,
'oodlelog_packetcompressresults':1748,
'decile':1749,
'rep':1750,
'decile_tot_raw_size':1751,
'decile_tot_compressed_size':1752,
'p':1753,
'fills':1754,
'on1_shared':1755,
'on1_initial_state':1756,
'on1_dic':1757,
'io_packet_train':1758,
'tcp_initial_state':1759,
'udp_initial_state':1760,
'udp_initial_state2':1761,
'on1_dic_size':1762,
'ooex_assert_failure_always':1763,
'embedded':1764,
'parse':1765,
'vectors':1766,
'dictionary_packet_pointers':1767,
'oo_s32>':1768,
'dictionary_packet_sizes':1769,
'4096':1770,
'dictest_packet_pointers':1771,
'dictest_packet_sizes':1772,
'training_packet_pointers':1773,
'training_packet_sizes':1774,
'training_tot_raw_len':1775,
'dictionary_tot_raw_len':1776,
'dictest_tot_raw_len':1777,
'put':1778,
'three':1779,
'semi':1780,
'random':1781,
'push_back':1782,
'64m':1783,
'dictest':1784,
'randomly':1785,
'move':1786,
'dictest_packet_pointers_size':1787,
'size32':1788,
'erase_u':1789,
'num_training_packets':1790,
'num_dictionary_packets':1791,
'num_dictest_packets':1792,
'clamping':1793,
'clamped':1794,
'num_trials':1795,
'num_generations':1796,
'randomness':1797,
'dic_file_name':1798,
'sdfp_dic':1799,
'_runtimedata':1800,
'do_make_dic':1801,
'do_load_existing':1802,
'selectdictionary':1803,
'funcs':1804,
'trying':1805,
'dic_file_size':1806,
'dic_file_buf':1807,
'got':1808,
'wrong':1809,
'isn':1810,
'needed':1811,
'stored':1812,
'runtimedata':1813,
'writing':1814,
'write_ok':1815,
'oodlenetwork1udp_state_reset':1816,
'testoodlenetwork1tcppacketcoder_transmission':1817,
'coding':1818,
'decoders':1819,
'resize':1820,
'packetcompressresult>':1821,
'65536':1822,
'oo_u8>':1823,
'compv':1824,
'decompv':1825,
'rawptr':1826,
'curlen':1827,
'compptr':1828,
'decomp':1829,
'cur_complen':1830,
'lying':1831,
'complen':1832,
'0xcd':1833,
'dec_complen':1834,
'memcmp':1835,
'ooex_clamp':1836,
'take':1837,
'requires':1838,
'reference':1839,
'built':1840,
'copied':1841,
'for_logging_total_mem_use':1842,
'scratch':1843,
'comp_needed':1844,
'sized':1845,
'comp':1846,
'ok':1847,
'shows':1848,
'mem':1849,
'measure':1850,
'net':1851,
'runtimes':1852,
'oodlenetwork1_savedmodel_header':1853,
'literally':1854,
'persist':1855,
'oodle_major_version':1856,
'checked':1857,
'forces':1858,
'regenerated':1859,
'whenever':1860,
'rev':1861,
'ed':1862,
'revs':1863,
'remove':1864,
'probably':1865,
'checksum':1866,
'checking':1867,
'prevent':1868,
'tampering':1869,
'on1_magic':1870,
'0x11235801':1871,
'magic':1872,
'ht_bits':1873,
'dic_size':1874,
'dic_complen':1875,
'statecompacted_size':1876,
'statecompacted_complen':1877,
'written':1878,
'flat':1879,
'endian':1880,
'oodlenetwork1_savedmodel_header_read':1881,
'pheader':1882,
'from_memory':1883,
'from_ptr':1884,
'>magic':1885,
'>compressor':1886,
'>ht_bits':1887,
'>dic_size':1888,
'>oodle_major_version':1889,
'>dic_complen':1890,
'>statecompacted_size':1891,
'>statecompacted_complen':1892,
'oodlenetwork1_savedmodel_header_write':1893,
'to_memory':1894,
'to_ptr':1895,
'oodlenetwork1_compressor':1896,
'loaded_header':1897,
'loader':1898,
'loaded_total_mem_use':1899,
'dic':1900,
'oodlenetwork1_compressor_free':1901,
'pcompressor':1902,
'>dic':1903,
'>shared':1904,
'>state':1905,
'filedata':1906,
'filesize':1907,
'memset':1908,
'runtimedata_file':1909,
'mismatch':1910,
'being':1911,
'conservative':1912,
'too':1913,
'newer':1914,
'sdk':1915,
'on1udpnew_ht_bits':1916,
'on1udpnew_dic_size':1917,
'on1udpnew_dic_complen':1918,
'on1udpnew_statecompacted_size':1919,
'on1udpnew_statecompacted_complen':1920,
'sanity':1921,
'protected':1922,
'forbid':1923,
'on1udpnew_dic':1924,
'on1udpnew_statecompacted':1925,
'on1udpnew_dic_comp_ptr':1926,
'on1udpnew_compacted':1927,
'on1udpnew_statecompacted_comp_ptr':1928,
'decomp_dic_size':1929,
'oodlelz_fuzzsafe_yes':1930,
'decomp_statecompacted_size':1931,
'uncompact':1932,
'compacted':1933,
'usable':1934,
'on1udpnew_state_size':1935,
'on1udpnew_shared':1936,
'shared_size':1937,
'>loaded_header':1938,
'>loaded_total_mem_use':1939,
'runtimedata_filename':1940,
'on1udpnew_state':1941,
'file_compressor':1942,
'saving':1943,
'representation':1944,
'on1udpnew_statecompacted_maxsize':1945,
'compressed_buffer_alloc_size':1946,
'oodlelz_getcompressedbuffersizeneeded':1947,
'compressed_buffer':1948,
'comp_ptr':1949,
'header_pointer':1950,
'oodlelz_compressionlevel_optimal2':1951,
'affecting':1952,
'oodlexlz_compress_asyncandwait':1953,
'oodlexasyncselect_all':1954,
'oodlelz_compress':1955,
'oodlelz_compressionlevel_fast':1956,
'total_complen':1957,
'robust':1958,
'on1udpnew_dic_mb':1959,
'cpp':1960,
'example_packet_on1udpnew_runtimedata':1961,
'on1udpnew':1962,
'made':1963,
'on1udpnew_initial_state':1964,
'remade':1965,
'oodlelz_compressor_candecodefuzzsafe':1966,
'fail':1967,
'runtimedata_filesizea':1968,
'runtimedata_filedata':1969,
'runtimedata_filesize':1970,
'compressing':1971,
'generator':1972,
'marsaglia':1973,
'kiss99':1974,
'123456789':1975,
'y':1976,
'362436000':1977,
'z':1978,
'521288629':1979,
'7654321':1980,
'seeds':1981,
'69069':1982,
'12345':1983,
'y>>17':1984,
'698769069ull':1985,
't>>32':1986,
'mul':1987,
'hi':1988,
'>>':1989,
'multi':1990,
'single':1991,
'oodlex_':1992,
'application':1993,
'coordinated':1994,
'groups':1995,
'chains':1996,
'ship':1997,
'console':1998,
'naming':1999,
'conventions':2000,
'tries':2001,
'clear':2002,
'_async':2003,
'yet':2004,
'_wait':2005,
'wait':2006,
'flag':2007,
'specific':2008,
'pairings':2009,
'those':2010,
'indicated':2011,
'prefix':2012,
'oodlexlz_compress_async':2013,
'oodlexlz_compress_wait_getresult':2014,
'_asyncandwait':2015,
'indicate':2016,
'fire':2017,
'_sync':2018,
'whereas':2019,
'fired':2020,
'blocked':2021,
'narrow':2022,
'task':2023,
'separable':2024,
'broken':2025,
'simultaneously':2026,
'correspond':2027,
'subsystem':2028,
'prefixes':2029,
'kinds':2030,
'oodlework_':2031,
'oodlehandles':2032,
'objects':2033,
'correct':2034,
'subsytem':2035,
'generic':2036,
'oodle_':2037,
'oodlex_waitall':2038,
'enums':2039,
'oodlexcopyfileflags_overwrite':2040,
'oodlexcopyfileflags_dontoverwriteexisting':2041,
'common':2042,
'describe':2043,
'boolean':2044,
'choice':2045,
'_yes':2046,
'_no':2047,
'oodlex_path_delim':2048,
'pinto':2049,
'palignmentrequired':2050,
'info':2051,
'successful':2052,
'getinfo':2053,
'untouched':2054,
'__rad64__':2055,
'description':2056,
'oodlemallocaligned':2057,
'two':2058,
'lot':2059,
'plugin':2060,
'hard':2061,
'preallocated':2062,
'scratchmem':2063,
'scratchsize':2064,
'pool':2065,
'takes':2066,
'oodlelz_getcompressscratchmembound':2067,
'bound':2068,
'oodlelz_scratch_mem_no_bound':2069,
'strict':2070,
'grows':2071,
'proportionally':2072,
'modify':2073,
'majority':2074,
'additional':2075,
'input':2076,
'inputs':2077,
'queried':2078,
'align':2079,
'fine':2080,
'example_lz_threadphased':2081,
'threadphased':2082,
'example_lz_simple':2083,
'demonstrates':2084,
'ability':2085,
'1x':2086,
'2x':2087,
'speedup':2088,
'33':2089,
'50':2090,
'implements':2091,
'example_lz_threadphased_decompress':2092,
'idea':2093,
'implement':2094,
'look':2095,
'worker':2096,
'handy':2097,
'cross':2098,
'implementations':2099,
'me':2100,
'intention':2101,
'semaphore':2102,
'important':2103,
'avoid':2104,
'going':2105,
'sleep':2106,
'nearly':2107,
'synchronized':2108,
'spin':2109,
'backoff':2110,
'loop':2111,
'awake':2112,
'together':2113,
'fastsemaphore':2114,
'wrapper':2115,
'http':2116,
'cbloomrants':2117,
'blogspot':2118,
'2011':2119,
'08':2120,
'semaphores':2121,
'html':2122,
'sure':2123,
'spin_count':2124,
'make_example_input':2125,
'comp_buf':2126,
'comp_len':2127,
'dec_buf':2128,
'dec_size':2129,
'in_size_64':2130,
'in_buffer':2131,
'in_size':2132,
'oodlelz_compressor_candecodethreadphased':2133,
'frees':2134,
'oodlexlz_decompress_threadphased_narrow_async':2135,
'pre':2136,
'decomp_handle':2137,
'decomp_status':2138,
'oodlex_waitanddelete':2139,
'oodlexstatus_error':2140,
'phased':2141,
'reps':2142,
'stress':2143,
'sync':2144,
'wipe':2145,
'0xee':2146,
'example_lz_threadphased_threadfunc':2147,
'yourself':2148,
'basic':2149,
'split':2150,
'phases':2151,
'invoked':2152,
'twice':2153,
'oodlelz_decode_threadphase1':2154,
'oodlelz_decode_threadphase2':2155,
'rule':2156,
'phase2':2157,
'phase1':2158,
'decodermem':2159,
'blocks':2160,
'oodlelz_threadphased_blockdecodermemorysizeneeded':2161,
'signalling':2162,
'sem_blocksavail':2163,
'slot':2164,
'post':2165,
'sem_phase1done':2166,
'signal':2167,
'reused':2168,
'example_lz_threadphased_threaddata':2169,
'volatile':2170,
'error_cancel':2171,
'sem_consume':2172,
'sem_produce':2173,
'num_blocks':2174,
'num_scratch_blocks':2175,
'scratch_mem':2176,
'scratch_block_size':2177,
'rawsize':2178,
'compbuf':2179,
'compsize':2180,
'oodlelz_decode_threadphase':2181,
'threadphase':2182,
'success':2183,
'thread_error':2184,
'thread_success':2185,
'thread_function_decodephase':2186,
'user_data':2187,
'>compbuf':2188,
'compend':2189,
'>compsize':2190,
'decodermemsize':2191,
'>scratch_block_size':2192,
'scratch_i':2193,
'block_pos':2194,
'>rawsize':2195,
'consume':2196,
'>sem_consume':2197,
'relaxed':2198,
'sem':2199,
'acts':2200,
'acquire':2201,
'barrier':2202,
'>error_cancel':2203,
'>num_scratch_blocks':2204,
'>scratch_mem':2205,
'chunk_ptr':2206,
'>rawbuf':2207,
'block_len':2208,
'indy':2209,
'block_complen':2210,
'oodlelz_getcompressedstepforrawstep':2211,
'store':2212,
'>sem_produce':2213,
'gotlen':2214,
'>threadphase':2215,
'>success':2216,
'circularbufferblockcount':2217,
'communicate':2218,
'synchronization':2219,
'close':2220,
'full':2221,
'oodlelz_getallchunkscompressor':2222,
'nblocks':2223,
'scratchblocksize':2224,
'scratchbufsize':2225,
'preallocate':2226,
'scratchbuf':2227,
'asynchronous':2228,
'stack':2229,
'package':2230,
'shared_error_cancel':2231,
'atomic':2232,
'td1':2233,
'waits':2234,
'posts':2235,
'reach':2236,
'phase1done':2237,
'reusable':2238,
'swap':2239,
'td2':2240,
'create':2241,
'rather':2242,
'thread1':2243,
'thread2':2244,
'cleanup':2245,
'vfsname':2246,
'fileopenflags':2247,
'oodlexfileopenflags_default':2248,
'oodlenetworkversion':2249,
'oodle_usagewarnings':2250,
'oodle_checkversion':2251,
't_oodlefpvoidvoid':2252,
't_oodlefpvoidvoidstar':2253,
'pfile':2254,
'namebase':2255,
'initialfilesize':2256,
'opening':2257,
'opened':2258,
'temp':2259,
'creates':2260,
'unique':2261,
'providing':2262,
'helpful':2263,
'lets':2264,
'copying':2265,
'renaming':2266,
'desired':2267,
'completion':2268,
'destroy':2269,
'oodlex_logsysteminfo':2270,
'prints':2271,
'thing':2272,
'reports':2273,
'rad':2274,
'linkage':2275,
'oodlexfilemode_invalid':2276,
'oodlexfilemode_read':2277,
'oodlexfilemode_writecreate':2278,
'oodlexfilemode_write':2279,
'oodlexfilemode_readwrite':2280,
'oodlexfilemode_force32':2281,
'filemode':2282,
'oodlefile':2283,
'trunc':2284,
'exclusive':2285,
'alias':2286,
'originally':2287,
'requested':2288,
'freeing':2289,
'oodlexhandlecountdown_alloc':2290,
'oodlexhandleevent_seterror':2291,
'initialcount':2292,
'coutdown':2293,
'inital':2294,
'becomes':2295,
'reaches':2296,
'countdown':2297,
'decrement':2298,
'satisfies':2299,
'negative':2300,
'oodlexhandleautodelete_yes':2301,
'psize':2302,
'm_oodlelz_lw_lrm_step':2303,
'm_oodlelz_lw_lrm_hashlength':2304,
'm_oodlelz_lw_lrm_jumpbits':2305,
'm_oodlelz_decoder_max_stack_size':2306,
'm_oodlelz_small_buffer_lz_fallback_size_unused':2307,
'm_oodle_header_version':2308,
'lzhlw':2309,
'entries':2310,
'hashed':2311,
'jump':2312,
'streams':2313,
'older':2314,
'major':2315,
'settable':2316,
'config':2317,
'oodlexmallocfailedhandler':2318,
'fails':2319,
'retry':2320,
'prefer':2321,
'consists':2322,
'lzb16':2323,
'hidden':2324,
'earlier':2325,
'intosize':2326,
'utf8':2327,
'copies':2328,
'example_lz_noallocs':2329,
'chart':2330,
'example_lz_overlap':2331,
'overlap':2332,
'installs':2333,
'oodleplugins_setallocators':2334,
'example_noallocs_mallocaligned_logging':2335,
'mallocaligned':2336,
'easy':2337,
'oodlecore_plugin_mallocaligned_default':2338,
'example_noallocs_free_logging':2339,
'oodlecore_plugin_free_default':2340,
'cause':2341,
'failure':2342,
'testsets':2343,
'lztestset':2344,
'lzt02':2345,
'buf':2346,
'couldn':2347,
'effort':2348,
'enc_scratch_size':2349,
'ahead':2350,
'enc_scratch':2351,
'further':2352,
'decbuf':2353,
'headerless':2354,
'declength':2355,
'decoder_mem_size':2356,
'oodlelzdecoder_memorysizeneeded':2357,
'decoder_mem':2358,
'decompress_return':2359,
'oodlelz_decode_unthreaded':2360,
'decompessed':2361,
'finish':2362,
'verboselevel':2363,
'fmt':2364,
'vararg':2365,
'varargs':2366,
'omit':2367,
'messages':2368,
'oodlelz_getcompressscratchmemboundex':2369,
'oodlelz_getdecodebuffersize':2370,
'overrun':2371,
'padding':2372,
'weak':2373,
'exist':2374,
'oodlelzdecoder_reset':2375,
'oodlelzdecoder_destroy':2376,
'oodlelzdecoder_decodesome':2377,
'oodlelzdecoder':2378,
'decpos':2379,
'declen':2380,
'restart':2381,
'pos':2382,
'oodlelzdecoder_create':2383,
'chunk':2384,
'oodlelz_getchunkcompressor':2385,
'oodlexlog_printferror':2386,
'reopen':2387,
'crash':2388,
'queued':2389,
'messaged':2390,
'namely':2391,
'turn':2392,
'm_oodleinit_ioq_log':2393,
'frame':2394,
'oodlexlog_autoflush_threadlog':2395,
'affect':2396,
'oodlelog':2397,
'printfs':2398,
'rmwf':2399,
'fp_runjob':2400,
'fp_waitjob':2401,
'oodlelz_getfirstchunkcompressor':2402,
'compchunkptr':2403,
'compbufavail':2404,
'pindependent':2405,
'who':2406,
'step':2407,
'predecessors':2408,
'later':2409,
'mixed':2410,
'replaces':2411,
'corrupt':2412,
'oodlelz_getnumseekchunks':2413,
'oodlelz_getseektablememorysizeneeded':2414,
'rawlen':2415,
'compute':2416,
'sync_open':2417,
'reservesize':2418,
'sync_close':2419,
'truncatesize':2420,
'sync_get_file_info':2421,
'sync_read':2422,
'pgotsize':2423,
'sync_write':2424,
'sync_set_file_size':2425,
'get_last_error':2426,
'get_error_enum':2427,
'err':2428,
'get_error_string':2429,
'delete_file':2430,
'rename_file':2431,
'listdir_open':2432,
'listdir_close':2433,
'listdir_next':2434,
'namesize':2435,
'get_filename_info':2436,
'set_filename_info':2437,
'modtime':2438,
'force_writeable':2439,
'make_dir':2440,
'fileops_data':2441,
'lowest':2442,
'writecreate':2443,
'truncate':2444,
'happen':2445,
'closing':2446,
'atomically':2447,
'eof':2448,
'unaligned':2449,
'maps':2450,
'creator':2451,
'plug':2452,
'bottom':2453,
'realtime':2454,
'sending':2455,
'updates':2456,
'having':2457,
'isolating':2458,
'suggestions':2459,
'succeed':2460,
'compbufsize':2461,
'decompresses':2462,
'show':2463,
'corrupted':2464,
'weren':2465,
'race':2466,
'couple':2467,
'things':2468,
'checksums':2469,
'compiled':2470,
'oodleplugin_printf_default':2471,
'oodleplugin_printf_verbose':2472,
'branch':2473,
'expected':2474,
'come':2475,
'diff':2476,
'against':2477,
'logged':2478,
'detect':2479,
'races':2480,
'corruption':2481,
'seeing':2482,
'pause':2483,
'succeeds':2484,
'globals':2485,
've':2486,
'above':2487,
'steps':2488,
'reproduce':2489,
'oodlelz_profile_main':2490,
'oodlelz_profile_reduced':2491,
'oodlelz_profile_force32':2492,
'allowed':2493,
'reduced':2494,
'limited':2495,
'feature':2496,
'aspects':2497,
'openforwrite':2498,
'opens':2499,
'undefined':2500,
'stomp':2501,
'oodlexfileopenflags_writecreatedontstomp':2502,
'oodlexlog_stateflags':2503,
'oodlexlogcallbackretret':2504,
'oodlexlog_verbose_none':2505,
'oodlexlog_verbose_minimal':2506,
'oodlexlog_verbose_lots':2507,
'oodlexlog_verbose_force32':2508,
'errors':2509,
'during':2510,
'abouts':2511,
'ozip':2512,
'oodlexlz_readanddecompress_stream_async':2513,
'oodlexdecompresscallback_writefile_data_init':2514,
'rawchunklen':2515,
'pcb':2516,
'pcbdata':2517,
'readfile':2518,
'readbuf':2519,
'readstartpos':2520,
'readpending':2521,
'alreadyreadsize':2522,
'ignored':2523,
'lenght':2524,
'oodlelz_async_decompress_readstream':2525,
'coroutine':2526,
'streaming':2527,
'incremental':2528,
'whatever':2529,
'granularity':2530,
'oodlexlz_decompress_narrow_async':2531,
'somewhere':2532,
'inside':2533,
'quanta':2534,
'oodledecompresscallback_writefile':2535,
'perform':2536,
'oodlelz_findseekentry':2537,
'oodlelz_checkseektablecrcs':2538,
'oodlelz_getseekentrypackedpos':2539,
'rawpos':2540,
'entry':2541,
'functionality':2542,
'host':2543,
'devices':2544,
'consoles':2545,
'phones':2546,
'lossless':2547,
'oodlelzdecoder_makevalidcircularwindowsize':2548,
'oodlelz_fillseektable':2549,
'oodlelz_freeseektable':2550,
'oodlelz_compressionlevel_getname':2551,
'oodlelz_compressor_getname':2552,
'oodlelz_jobify_getname':2553,
'oodlelz_compressor_useslargewindow':2554,
'oodlelz_compressor_candecodeincircularwindow':2555,
'oodlelz_compressor_candecodeinplace':2556,
'oodlelz_compressor_mustdecodewithoutresets':2557,
'oodlelz_compressor_respectsdictionarysize':2558,
'oodlelz_getinplacedecodebuffersize':2559,
'oodledecompresscallback_writefile_data':2560,
'lastwriteh':2561,
'closeh':2562,
'doclosefile':2563,
'closed':2564,
'supply':2565,
'lifetime':2566,
'sufficient':2567,
'lzlevel':2568,
'benefit':2569,
'prepare':2570,
'specially':2571,
'combine':2572,
'normally':2573,
'staging':2574,
'easiest':2575,
'simply':2576,
'argument':2577,
'compbuffersize':2578,
'fpcallback':2579,
'callbackuserdata':2580,
'decodermemory':2581,
'decodermemorysize':2582,
'next':2583,
'sequentially':2584,
'passing':2585,
'block1':2586,
'block2':2587,
'module':2588,
'dll':2589,
'msvc':2590,
'2017':2591,
'oo2core_winuwp32':2592,
'oo2core_winuwp64':2593,
'redist':2594,
'oo2core_5_winuwp32':2595,
'oo2core_5_winuwp64':2596,
'redistributed':2597,
'apps':2598,
'import':2599,
'loadpackagedlibrary':2600,
'mechanism':2601,
'project':2602,
'deploy':2603,
'properties':2604,
'loadlibrary':2605,
'hmodule':2606,
'getprocaddress':2607,
'away':2608,
'importing':2609,
'tell':2610,
'vc':2611,
'oodlexmalloc_setfailedhandler':2612,
'oodlexmalloc_installvtable':2613,
'f':2614,
'largewindow':2615,
'meaning':2616,
'oodlelz_jobify_default':2617,
'oodlelz_jobify_disable':2618,
'oodlelz_jobify_normal':2619,
'oodlelz_jobify_aggressive':2620,
'oodlelz_jobify_count':2621,
'oodlelz_jobify_force32':2622,
'amount':2623,
'increased':2624,
'maximize':2625,
'doing':2626,
'amounts':2627,
'pluggable':2628,
'via':2629,
'weight':2630,
'optimal1':2631,
'substantially':2632,
'concurrently':2633,
'greatly':2634,
'requirements':2635,
'outstanding':2636,
'intensive':2637,
'otherwise':2638,
'disables':2639,
'entirely':2640,
'minimizes':2641,
'g':2642,
'avoids':2643,
'handing':2644,
'concurrent':2645,
'highly':2646,
'potentially':2647,
'significant':2648,
'act':2649,
'sector':2650,
'boundary':2651,
'resized':2652,
'unwritten':2653,
'truncatefilesize':2654,
'purpose':2655,
'setfilesize':2656,
'oodlex_waitdoneallpending':2657,
'completed':2658,
'flushallasync':2659,
'kills':2660,
'handling':2661,
'stop':2662,
'alive':2663,
'oodleioqfile':2664,
'alignedsize':2665,
'oodlealignup':2666,
'oodleioq_write_async':2667,
'tofile':2668,
'oodlefree_ioaligned':2669,
'produce':2670,
'cases':2671,
'junk':2672,
'condition':2673,
'unpredictable':2674,
'fix':2675,
'reason':2676,
'enqueue':2677,
'oodlexutil_convertutf16toutf8':2678,
'oodlexutil_convertutf8toutf16':2679,
'oodlex_combinepaths':2680,
'oo_u16':2681,
'tosize':2682,
'utf16':2683,
'characters':2684,
'availabe':2685,
'conversion':2686,
'strings':2687,
'wchar':2688,
'encodings':2689,
'page':2690,
'though':2691,
'ansi':2692,
'ascii':2693,
'oodlexlog_setecho':2694,
'oodlexlog_setstate':2695,
'oodlexlog_getecho':2696,
'echo':2697,
'oodlexlog_echo':2698,
'setecho':2699,
'echoing':2700,
'setstate':2701,
'working':2702,
'ends':2703,
'delim':2704,
'stuck':2705,
'strcat':2706,
'abstract':2707,
'oodlex_init_threadprofilerinit':2708,
'oodlex_init_getdefaults':2709,
'm_oodleinit_threadprofiler_funcptr':2710,
'oodlexconfigvalues':2711,
'filename':2712,
'closefileafterwriting':2713,
'tls':2714,
'resources':2715,
'terminates':2716,
'increasing':2717,
'bases':2718,
'fixed':2719,
'bother':2720,
'requests':2721,
'enqueued':2722,
'kick':2723,
'disabling':2724,
'auto':2725,
'short':2726,
'period':2727,
'oodlex_getextensionkey':2728,
'oodlex_makeextensionkey':2729,
'extension':2730,
'chars':2731,
'compares':2732,
'insensitive':2733,
'dot':2734,
'succeeded':2735,
'for_oodle_major_version':2736,
'maximizing':2737,
'backup':2738,
'gauranteed':2739,
'falls':2740,
'divided':2741,
'finite':2742,
'bounds':2743,
'evaluate':2744,
'fairly':2745,
'play':2746,
'simulation':2747,
'bots':2748,
'simulated':2749,
'captures':2750,
'patterns':2751,
'jpeg':2752,
'voice':2753,
'heuristic':2754,
'evalution':2755,
'broad':2756,
'sampling':2757,
'sessions':2758,
'reflective':2759,
'spectrum':2760,
'sends':2761,
'seen':2762,
'mismatches':2763,
'disaster':2764,
'part':2765,
'cleanest':2766,
'tcpdump':2767,
'strip':2768,
'players':2769,
'looks':2770,
'portions':2771,
'representative':2772,
'group':2773,
'span':2774,
'nature':2775,
'distinct':2776,
'lobby':2777,
'oodlexstatus_pending':2778,
'oodlexstatus_count':2779,
'oodlexstatus_force32':2780,
'indicates':2781,
'live':2782,
'succesfully':2783,
'increases':2784,
'numeric':2785,
'opaque':2786,
'decrease':2787,
'storage':2788,
'acknowledgements':2789,
'product':2790,
'bink':2791,
'miles':2792,
'iggy':2793,
'granny':2794,
'telemetry':2795,
'copyrighted':2796,
'trademarked':2797,
'printed':2798,
'produced':2799,
'united':2800,
'america':2801,
'licensee':2802,
'abide':2803,
'terms':2804,
'forth':2805,
'license':2806,
'agreement':2807,
'please':2808,
'refer':2809,
'software':2810,
'pertains':2811,
'think':2812,
'agreements':2813,
'reasonably':2814,
'priced':2815,
'quality':2816,
'violates':2817,
'federal':2818,
'civil':2819,
'criminal':2820,
'law':2821,
'rely':2822,
'primarily':2823,
'faith':2824,
'violate':2825,
'respect':2826,
'warranty':2827,
'expressed':2828,
'implied':2829,
'warranties':2830,
'merchantability':2831,
'fitness':2832,
'event':2833,
'liable':2834,
'damages':2835,
'general':2836,
'incidental':2837,
'consequential':2838,
'arising':2839,
'inability':2840,
'charles':2841,
'bloom':2842,
'fabian':2843,
'giesen':2844,
'idoc':2845,
'automatic':2846,
'sean':2847,
'barrett':2848,
'benefitted':2849,
'countless':2850,
'developers':2851,
'thoughts':2852,
'years':2853,
'third':2854,
'party':2855,
'notices':2856,
'strictly':2857,
'mutated':2858,
'context':2859,
'received':2860,
'learning':2861,
'creating':2862,
'detected':2863,
'consumed':2864,
'coded':2865,
'listing':2866,
'30':2867,
'pairs':2868,
'oodlex_fileinfo_flag_dir':2869,
'oodlex_fileinfo_flag_readonly':2870,
'oodlex_fileinfo_flag_hidden':2871,
'oodlex_fileinfo_flag_symlink':2872,
'oodlex_fileinfo_flag_temporary':2873,
'oodlex_fileinfo_flag_offline':2874,
'oodlex_fileinfo_flag_force32':2875,
'permission':2876,
'marked':2877,
'symlink':2878,
'reparse':2879,
'under':2880,
'attempt':2881,
'helps':2882,
'reservefilesizeforwrite':2883,
'thinks':2884,
'reservation':2885,
'specified':2886,
'mapping':2887,
'applicable':2888,
'ref':2889,
'convenience':2890,
'queue':2891,
'openforread':2892,
'others':2893,
'oodlex_ioalignups32':2894,
'oodlex_ioalignups64':2895,
'oodlex_ioalignupsinta':2896,
'oodlex_ioaligndowns32':2897,
'oodlex_ioaligndowns64':2898,
'job_handle':2899,
'seekchunksindependent':2900,
'totalrawlen':2901,
'totalcomplen':2902,
'numseekchunks':2903,
'seekchunkcomplens':2904,
'sequence':2905,
'lenth':2906,
'sum':2907,
'derived':2908,
'lengths':2909,
'transmitted':2910,
'transmit':2911,
'ooz':2912,
'stores':2913,
'oodlex_setconfigvalues':2914,
'anything':2915,
'changing':2916,
'effects':2917,
'writeable':2918,
'deletable':2919,
'permissions':2920,
'modifity':2921,
'deletefile':2922,
'errorifnotfound':2923,
'oodlefree':2924,
'oodlexhandleevent_setdone':2925,
'oodlexhandleevent':2926,
'transition':2927,
'>done':2928,
'oodlexasyncselect_none':2929,
'oodlexasyncselect_workers':2930,
'0x100':2931,
'oodlexasyncselect_noflagsmask':2932,
'0xfff':2933,
'0x1000':2934,
'oodlexasyncselect_full':2935,
'0xffff':2936,
'oodlexasyncselect_force32':2937,
'masks':2938,
'form':2939,
'selector':2940,
'workers':2941,
'mask':2942,
'runners':2943,
'synonym':2944,
'worklet':2945,
'quickest':2946,
'contention':2947,
'overlapping':2948,
'reading':2949,
'combining':2950,
'4127':2951,
'conditional':2952,
'constant':2953,
'oodlex_init_getdefaults_threads_no':2954,
'20m':2955,
'100m':2956,
'charts':2957,
'inname':2958,
'compname':2959,
'oodle_example_overlap_comp':2960,
'hurts':2961,
'chunking':2962,
'lzcompressor':2963,
'lzoptions':2964,
'practice':2965,
'finishes':2966,
'insize':2967,
'inbuf':2968,
'insize64':2969,
'scope':2970,
'bulk':2971,
'decompbuf':2972,
'cheating':2973,
'rand':2974,
'unbuffered':2975,
'benchmarking':2976,
'times':2977,
'buffered':2978,
'oodlexfileopenflags_notbuffered':2979,
'begins':2980,
'various':2981,
'stalls':2982,
'gets':2983,
'readmallocwholefile':2984,
'method':2985,
'chain':2986,
'simplicity':2987,
'didn':2988,
'know':2989,
'oodlework':2990,
'compfile':2991,
'openandreadh':2992,
'follow':2993,
'openandread':2994,
'num_deps':2995,
'decomph':2996,
'st':2997,
'arive':2998,
'initialreadsize':2999,
'readanddecomp':3000,
'closefile':3001,
'dependency':3002,
'readanddecompress_wide':3003,
'boundaries':3004,
'kept':3005,
'waiting':3006,
'stall':3007,
'clean':3008,
'oodlexmalloc_os_options_none':3009,
'm_pbasevtable':3010,
'rawdone':3011,
'compused':3012,
'desiredseekpointcount':3013,
'oodlelz_seekpointcount_default':3014,
'htbits':3015,
'convertutf':3016,
'unicode':3017,
'inc':3018,
'notice':3019,
'follows':3020,
'2001':3021,
'2004':3022,
'disclaimer':3023,
'source':3024,
'claims':3025,
'recipient':3026,
'agrees':3027,
'applicability':3028,
'purchased':3029,
'magnetic':3030,
'optical':3031,
'media':3032,
'sole':3033,
'remedy':3034,
'claim':3035,
'exchange':3036,
'defective':3037,
'90':3038,
'days':3039,
'receipt':3040,
'limitations':3041,
'redistribute':3042,
'hereby':3043,
'grants':3044,
'freely':3045,
'supplied':3046,
'creation':3047,
'products':3048,
'supporting':3049,
'remains':3050,
'attached':3051,
'cbloom':3052,
'public':3053,
'domain':3054,
'performed':3055,
'corresponds':3056,
'waitable':3057,
'light':3058,
'lock':3059,
'liveness':3060,
'polling':3061,
'timed':3062,
'sleeps':3063,
'hurt':3064,
'refers':3065,
'stays':3066,
'considers':3067,
'equivalent':3068,
'deletion':3069,
'subsystems':3070,
'oodleasyncgroup_lock':3071,
'oodlexhandles':3072,
'progression':3073,
'stay':3074,
'triggers':3075,
'lifetimes':3076,
'managed':3077,
'soon':3078,
'forget':3079,
'convenient':3080,
'safely':3081,
'oodle_copyfile_wait_getresult':3082,
'deleting':3083,
'situations':3084,
'cancel':3085,
'eventually':3086,
'oodleleaktrack':3087,
'fit':3088,
'oodleinit':3089,
'determined':3090,
'm_num_handles_log2':3091,
'since':3092,
'execution':3093,
'catastrophically':3094,
'section':3095,
'win32':3096,
'winrt':3097,
'phone':3098,
'2015':3099,
'linker':3100,
'conflicts':3101,
'caused':3102,
'possibility':3103,
'incompatible':3104,
'oo2core_win32':3105,
'oo2core_win64':3106,
'oo2ext_win32':3107,
'oo2ext_win64':3108,
'oo2core_':3109,
'_win32':3110,
'oo2ext_':3111,
'_win64':3112,
'dlls':3113,
'redistdebug':3114,
'compiler':3115,
'resolve':3116,
'unfortunately':3117,
'impossible':3118,
'static_lib':3119,
'oo2ext':3120,
'oo2core':3121,
'addition':3122,
'additionally':3123,
'linking':3124,
'benign':3125,
'consistently':3126,
'x64':3127,
'empty':3128,
'assumes':3129,
'sse2':3130,
'processor':3131,
'dynamically':3132,
'oodlelogs':3133,
'm_oodleinit_log_filename':3134,
'debugger':3135,
'reported':3136,
'reduces':3137,
'442552':3138,
'retained':3139,
'reuse':3140,
'unrelated':3141,
'story':3142,
'veryfast':3143,
'plenty':3144,
'ram':3145,
'gracefully':3146,
'0x0000000000000001ull':3147,
'oodleasyncgroup_changepending':3148,
'deadlock':3149,
'installing':3150,
'adds':3151,
'passes':3152,
'oodlexioq':3153,
'expects':3154,
'deep':3155,
'failedhandler':3156,
'clients':3157,
'interested':3158,
'replacing':3159,
'm_oodleinit_lockfreepageallocator':3160,
'puts':3161,
'top':3162,
'oodlexmalloccall':3163,
'invoke':3164,
'notes':3165,
'behave':3166,
'm_pmallocbig':3167,
'alternatively':3168,
'alloc':3169,
'pages':3170,
'heapalloc':3171,
'm_pmalloc':3172,
'layered':3173,
'allocs':3174,
'pad':3175,
'necessarilly':3176,
'comparable':3177,
'integer':3178,
'oodlelz_block_maximum_expansion':3179,
'expansion':3180,
'compavail':3181,
'startrawpos':3182,
'rawseekbytes':3183,
'pendrawpos':3184,
'advance':3185,
'corresponding':3186,
'reached':3187,
'getcompressedstepforrawstep':3188,
'multiples':3189,
'caveats':3190,
'resume':3191,
'avail':3192,
'solutions':3193,
'four':3194,
'sdks':3195,
'texture':3196,
'bcn':3197,
'textures':3198,
'dramatically':3199,
'image':3200,
'rgb':3201,
'png':3202,
'described':3203,
'wasm':3204,
'oodle_workers_count_all_physical_cores':3205,
'introducing':3206,
'tips':3207,
'separation':3208,
'oodlelz_compressscratchmemboundtype_worstcase':3209,
'oodlelz_compressscratchmemboundtype_typical':3210,
'oodlelz_compressscratchmemboundtype_force32':3211,
'worst':3212,
'estimate':3213,
'guarantees':3214,
'initialreadmemory':3215,
'initialreadpos':3216,
'particularly':3217,
'processing':3218,
'revolutionized':3219,
'insane':3220,
'4x':3221,
'excellent':3222,
'3x':3223,
'compete':3224,
'beat':3225,
'lzma':3226,
'7zip':3227,
'loved':3228,
'lzna':3229,
'10x':3230,
'seven':3231,
'testset':3232,
'ooleviathan7':3233,
'23':3234,
'enc':3235,
'642':3236,
'dec':3237,
'lzmadef9':3238,
'53':3239,
'ookraken7':3240,
'09':3241,
'948':3242,
'oomermaid7':3243,
'85':3244,
'1704':3245,
'zlib9':3246,
'309':3247,
'extensive':3248,
'optimization':3249,
'answer':3250,
'great':3251,
'dive':3252,
'bug':3253,
'possibilities':3254,
'leaking':3255,
'oodle_wait':3256,
'pinfo':3257,
'fnfiae':3258,
'oodlefilenotfoundisanerror_no':3259,
'compressselect':3260,
'asyncflags':3261,
'selected':3262,
'associated':3263,
'leaked':3264,
'exe':3265,
'compile':3266,
'example_lz_chart_num_levels':3267,
'lz_chart':3268,
'testsetslztestsetlzt99':3269,
'24700820':3270,
'slowest':3271,
'cell':3272,
'repetitions':3273,
'accurate':3274,
'timing':3275,
'hyperfast4':3276,
'hyperfast3':3277,
'hyperfast2':3278,
'hyperfast1':3279,
'41':3280,
'675':3281,
'3895':3282,
'45':3283,
'622':3284,
'3888':3285,
'465':3286,
'3696':3287,
'369':3288,
'3785':3289,
'70':3290,
'342':3291,
'3759':3292,
'66':3293,
'436':3294,
'2189':3295,
'2188':3296,
'79':3297,
'352':3298,
'2090':3299,
'01':3300,
'276':3301,
'2055':3302,
'04':3303,
'261':3304,
'55':3305,
'588':3306,
'1839':3307,
'71':3308,
'419':3309,
'1136':3310,
'88':3311,
'331':3312,
'1087':3313,
'279':3314,
'1093':3315,
'27':3316,
'167':3317,
'1010':3318,
'412':3319,
'447':3320,
'526':3321,
'678':3322,
'698':3323,
'660':3324,
'793':3325,
'011':3326,
'041':3327,
'548':3328,
'711':3329,
'877':3330,
'103':3331,
'268':3332,
'674':3333,
'621':3334,
'811':3335,
'464':3336,
'555':3337,
'364':3338,
'341':3339,
'435':3340,
'650':3341,
'923':3342,
'475':3343,
'199':3344,
'260':3345,
'511':3346,
'488':3347,
'418':3348,
'921':3349,
'423':3350,
'129':3351,
'206':3352,
'3894':3353,
'644':3354,
'3887':3355,
'820':3356,
'3695':3357,
'984':3358,
'457':3359,
'3758':3360,
'594':3361,
'030':3362,
'2187':3363,
'863':3364,
'319':3365,
'2054':3366,
'897':3367,
'2024':3368,
'692':3369,
'091':3370,
'1135':3371,
'920':3372,
'1086':3373,
'922':3374,
'407':3375,
'1009':3376,
'967':3377,
'optimal3':3378,
'75':3379,
'205':3380,
'3490':3381,
'83':3382,
'105':3383,
'3687':3384,
'86':3385,
'43':3386,
'3815':3387,
'3858':3388,
'94':3389,
'3856':3390,
'173':3391,
'1991':3392,
'84':3393,
'2177':3394,
'2291':3395,
'37':3396,
'2058':3397,
'44':3398,
'1978':3399,
'112':3400,
'1104':3401,
'39':3402,
'1187':3403,
'1189':3404,
'1103':3405,
'65':3406,
'1038':3407,
'leviath':3408,
'31':3409,
'738':3410,
'57':3411,
'787':3412,
'62':3413,
'807':3414,
'776':3415,
'748':3416,
'833':3417,
'933':3418,
'943':3419,
'118':3420,
'194':3421,
'207':3422,
'367':3423,
'437':3424,
'320':3425,
'390':3426,
'434':3427,
'551':3428,
'646':3429,
'504':3430,
'572':3431,
'617':3432,
'707':3433,
'756':3434,
'204':3435,
'104':3436,
'758':3437,
'42':3438,
'102':3439,
'554':3440,
'172':3441,
'681':3442,
'227':3443,
'798':3444,
'836':3445,
'111':3446,
'858':3447,
'126':3448,
'859':3449,
'031':3450,
'697':3451,
'461':3452,
'869':3453,
'442':3454,
'3686':3455,
'689':3456,
'3814':3457,
'655':3458,
'3857':3459,
'857':3460,
'226':3461,
'2176':3462,
'725':3463,
'498':3464,
'2057':3465,
'575':3466,
'1977':3467,
'721':3468,
'1186':3469,
'638':3470,
'372':3471,
'148':3472,
'737':3473,
'934':3474,
'152':3475,
'806':3476,
'523':3477,
'161':3478,
'775':3479,
'800':3480,
'timings':3481,
'hot':3482,
'invalidation':3483,
'repeats':3484,
'time_and_len':3485,
'insufficient':3486,
's_scratch_memory':3487,
's_scratch_memory_size':3488,
'encode_and_time':3489,
'raw_buf':3490,
'raw_len':3491,
'compression_level':3492,
'compression_options':3493,
'min_repeats':3494,
'min_total_seconds':3495,
'total_seconds':3496,
'999999':3497,
'dt':3498,
'decode_and_time':3499,
'decode_buffer':3500,
'decode_len':3501,
'bar':3502,
'chart_levels':3503,
'num_levels':3504,
'5s':3505,
'10s':3506,
'7s':3507,
'l':3508,
'truncated_compressor_name':3509,
'opts':3510,
'jobified':3511,
'file>':3512,
'oodleversion':3513,
'specify':3514,
'ooex_s64_fmt':3515,
'min_encode_repeats':3516,
'min_decode_repeats':3517,
'chart_compressors':3518,
'example_lz_chart_num_compressors':3519,
'chart_levels1':3520,
'oodlelz_compressionlevel_hyperfast4':3521,
'oodlelz_compressionlevel_hyperfast3':3522,
'oodlelz_compressionlevel_hyperfast2':3523,
'oodlelz_compressionlevel_hyperfast1':3524,
'oodlelz_compressionlevel_superfast':3525,
'chart_levels2':3526,
'oodlelz_compressionlevel_veryfast':3527,
'oodlelz_compressionlevel_optimal3':3528,
'oodlelz_compressionlevel_none':3529,
'comp_lens':3530,
'decode_speeds':3531,
'encode_speeds':3532,
'comp_buf_size':3533,
'ooex_max':3534,
'num_compressors':3535,
'hyperfast':3536,
'modes':3537,
'iterate':3538,
'tl':3539,
'encode_seconds':3540,
'encode_mbps':3541,
'1000000':3542,
'3d':3543,
'decode_seconds':3544,
'decode_mbps':3545,
'4d':3546,
'oodlecopyfileflags':3547,
'dest':3548,
'oodle_copyfile_async':3549,
'servicing':3550,
'copyfile':3551,
'subsequent':3552,
'oodleioq_openforread':3553,
'transparent':3554,
'mirroring':3555,
'scheduling':3556,
'completely':3557,
'wrappers':3558,
'people':3559,
'initially':3560,
'confused':3561,
'fact':3562,
'ignore':3563,
'ordering':3564,
'implicitly':3565,
'fifo':3566,
'absense':3567,
'constraints':3568,
'transparently':3569,
'reorder':3570,
'reordering':3571,
'behavior':3572,
'opensforread':3573,
'moved':3574,
'across':3575,
'batch':3576,
'file1':3577,
'file2':3578,
'implicit':3579,
'ordered':3580,
'participate':3581,
'appear':3582,
'positions':3583,
'arbitrary':3584,
'everything':3585,
'differ':3586,
'piece':3587,
'oodleioqstream':3588,
'forward':3589,
'linearly':3590,
'interface':3591,
'surrounding':3592,
'tracking':3593,
'tracks':3594,
'bunch':3595,
'oodleioq_getlastrequest':3596,
'oodlexioq_waitlastrequest':3597,
'manually':3598,
'semantics':3599,
'inherently':3600,
'completes':3601,
'nop':3602,
'fp_rrdisplayassertion':3603,
'asserts':3604,
'assertions':3605,
'defining':3606,
'integers':3607,
'manipulate':3608,
'stands':3609,
'intptr_t':3610,
'ptrdiff_t':3611,
's64':3612,
's32':3613,
'safest':3614,
'emits':3615,
'deal':3616,
'parts':3617,
'similarly':3618,
'huge':3619,
'decodeable':3620,
'concatenate':3621,
'binary':3622,
'concatenatable':3623,
'emit':3624,
'oozi':3625,
'recommend':3626,
'significantly':3627,
'renameto':3628,
'renames':3629,
'unimportant':3630,
'causing':3631,
'utility':3632,
'gzip':3633,
'piping':3634,
'compresed':3635,
'unix':3636,
'executable':3637,
'github':3638,
'https':3639,
'jamesbloom':3640,
'k':3641,
'lzt99':3642,
'pipes':3643,
'flushes':3644,
'keeps':3645,
'moving':3646,
'programs':3647,
'tar':3648,
'cf':3649,
'archive':3650,
'subdir':3651,
'gz':3652,
'benchmark':3653,
'unlike':3654,
'matrix':3655,
'b':3656,
'755121':3657,
'161674':3658,
'671':3659,
'1808':3660,
'135523':3661,
'1547':3662,
'130035':3663,
'1291':3664,
'os512':3665,
'141414':3666,
'340':3667,
'1818':3668,
'zstd':3669,
'b22':3670,
'22':3671,
'197827':3672,
'817':3673,
'815':3674,
'packedlenpreviouslyread':3675,
'packedfile':3676,
'packeddatastartpos':3677,
'misaligned':3678,
'misalignment':3679,
'allocating':3680,
'arrays':3681,
'duration':3682,
'pnewvtable':3683,
'thereafter':3684,
'corruptionpossible':3685,
'fuzzsafe_no':3686,
'compresseddata':3687,
'following':3688,
'oodletex_encode':3689,
'cleans':3690,
'oodlexpriority_default':3691,
'oodlexpriority_nopoponwait':3692,
'oodlexpriority_force32':3693,
'prority':3694,
'pop':3695,
'actions':3696,
'micro':3697,
'oodlelz_compressionlevel_optimal':3698,
'decoderscratchmemsize':3699,
'decoderscratchmem':3700,
'dictionary_to_fill':3701,
'dictionary_size':3702,
'test_packet_pointers':3703,
'test_packet_sizes':3704,
'num_test_packets':3705,
'rating':3706,
'ratings':3707,
'slows':3708,
'testoodlenetwork1packetcoder_selectdictionaryandtrain':3709,
'advised':3710,
'pname':3711,
'detailed':3712,
'text':3713,
'occurred':3714,
'tag':3715,
'oodlexhandlekickdelayed_no':3716,
'oodlexhandlekickdelayed_yes':3717,
'oodlexhandlekickdelayed_force32':3718,
'spawning':3719,
'oodlexhandle_kickdelayed':3720,
'activate':3721,
'kicked':3722,
'invalidated':3723,
'uniform':3724,
'platorm':3725,
'pptr':3726,
'readsize':3727,
'memorysize':3728,
'aligning':3729,
'wanted':3730,
'_position':3731,
'dirs':3732,
'trailing':3733,
'decmem':3734,
'decmemsize':3735,
'writehandlegroup':3736,
'writehandlegroupindex':3737,
'work_priority':3738,
'libraries':3739,
'extends':3740,
'tool':3741,
'reentrant':3742,
'primitives':3743,
'pure':3744,
'interact':3745,
'exception':3746,
'plugs':3747,
'itself':3748,
'oodlelz_compressionlevel_optimal4':3749,
'oodlelz_compressionlevel_optimal5':3750,
'oodlelz_compressionlevel_hyperfast':3751,
'oodlelz_compressionlevel_max':3752,
'oodlelz_compressionlevel_min':3753,
'oodlelz_compressionlevel_force32':3754,
'oodlelz_compressionlevel_invalid':3755,
'daily':3756,
'medium':3757,
'baseline':3758,
'numerical':3759,
'compressionlevel':3760,
'decodable':3761,
'trades':3762,
'optimal4':3763,
'constrained':3764,
'closer':3765,
'symmetric':3766,
'synchronous_use_current_thread':3767,
'eligible':3768,
'parallelize':3769,
'points':3770,
'externally':3771,
'launch':3772,
'physical':3773,
'hyper':3774,
'ranges':3775,
'carry':3776,
'oodlelz_decode_threadphaseall':3777,
'window_size':3778,
'represent':3779,
'placed':3780,
'somehow':3781,
'setwindow':3782,
'purposes':3783,
'distributed':3784,
'separately':3785,
'art':3786,
'tradeoffs':3787,
'packaging':3788,
'formats':3789,
'setinfo':3790,
'leave':3791,
'unchanged':3792,
'mod':3793,
'uncahnged':3794,
'oodlelz_checkcrc_force32':3795,
'lzh':3796,
'prior':3797,
'fed':3798,
'confirmed':3799,
'oodlexfileopenflags_force32':3800,
'stomps':3801,
'prevents':3802,
'settings':3803,
'seekchunks':3804,
'replacement':3805,
'believe':3806,
'rules':3807,
'chop':3808,
'256kib':3809,
'262144':3810,
'decreases':3811,
'trivial':3812,
'concatenated':3813,
'256kb':3814,
'cleanly':3815,
'clamps':3816,
'meta':3817,
'selects':3818,
'scoring':3819,
'decisions':3820,
'qualifies':3821,
'dial':3822,
'1500':3823,
'hit':3824,
'considering':3825,
'beats':3826,
'offers':3827,
'compromise':3828,
'showing':3829,
'hand':3830,
'tweakable':3831,
'multimedia':3832,
'x86':3833,
'boundtype':3834,
'exists':3835,
'thanks':3836,
'measurements':3837,
'parsing':3838,
'mallocs':3839,
'understand':3840,
'issues':3841,
'fixing':3842,
'cloud':3843,
'comparison':3844,
'dominate':3845,
'hide':3846,
'differences':3847,
'round':3848,
'trip':3849,
'highest':3850,
'tricky':3851,
'woefully':3852,
'standardized':3853,
'documented':3854,
'aside':3855,
'relevant':3856,
'goals':3857,
'trading':3858,
'email':3859,
'suit':3860,
'apples':3861,
'comparisons':3862,
'7z':3863,
'lzham':3864,
'oodle_compress':3865,
'specifically':3866,
'footing':3867,
'personal':3868,
'preference':3869,
'interrupting':3870,
'switches':3871,
'clocking':3872,
'speedstep':3873,
'modern':3874,
'cores':3875,
'term':3876,
'arm':3877,
'median':3878,
'bios':3879,
'procesor':3880,
'stable':3881,
'assuming':3882,
'loops':3883,
'invalidate':3884,
'iterations':3885,
'scenario':3886,
'likely':3887,
'cold':3888,
'biggest':3889,
'consistency':3890,
'pack':3891,
'seem':3892,
'zip':3893,
'blob':3894,
'paging':3895,
'unit':3896,
'subtle':3897,
'sensitive':3898,
'practical':3899,
'jpegs':3900,
'pretty':3901,
'mistake':3902,
'corpora':3903,
'silesia':3904,
'canterbury':3905,
'spent':3906,
'poor':3907,
'reflections':3908,
'sums':3909,
'misleading':3910,
'issue':3911,
'incompressible':3912,
'compressible':3913,
'trap':3914,
'combination':3915,
'weighting':3916,
'perfectly':3917,
'simplify':3918,
'looking':3919,
'inverted':3920,
'measures':3921,
'shouldn':3922,
'summed':3923,
'meaures':3924,
'oddly':3925,
'accumulation':3926,
'accumulate':3927,
'overall':3928,
'unfair':3929,
'excluding':3930,
'almost':3931,
'images':3932,
'mp3':3933,
'audio':3934,
'maybe':3935,
'savings':3936,
'powerful':3937,
'overhead':3938,
'importantly':3939,
'eat':3940,
'grouped':3941,
'256k':3942,
'waste':3943,
'beware':3944,
'attractive':3945,
'affects':3946,
'nice':3947,
'fraught':3948,
'peril':3949,
'notoriously':3950,
'inconsistent':3951,
'measuring':3952,
'simulator':3953,
'reboots':3954,
'executables':3955,
'agree':3956,
'million':3957,
'giant':3958,
'corpus':3959,
'published':3960,
'carefully':3961,
'why':3962,
'sun':3963,
'aei':3964,
'polsl':3965,
'pl':3966,
'sdeor':3967,
'php':3968,
'compound':3969,
'diagnostics':3970,
'ships':3971,
'example_':3972,
'applications':3973,
'threadprofile':3974,
'serve':3975,
'named':3976,
'ptable':3977,
'compressoptions':3978,
'thereof':3979,
'predictable':3980,
'complicated':3981,
'mmeory':3982,
'extensively':3983,
'avoided':3984,
'32mb':3985,
'regular':3986,
'exhausted':3987,
'advantage':3988,
'letting':3989,
'consecutive':3990,
'ups':3991,
'impact':3992,
'massive':3993,
'jan':3994,
'2023':3995,
'8x':3996,
'kernel':3997,
'serializes':3998,
'newly':3999,
'accessed':4000,
'poodlelibversion':4001,
'compiling':4002,
'enought':4003,
'matter':4004,
'randomness_percent':4005,
'trial':4006,
'generation':4007,
'percent':4008,
'generations':4009,
'variation':4010,
'measured':4011,
'test_packet':4012,
'dictionary_packet':4013,
'drawn':4014,
'wrst':4015,
'degeneracies':4016,
'__file__':4017,
'__line__':4018,
'__va_args__':4019,
'arg1':4020,
'arg2':4021,
'supressed':4022,
'oodlexlog_printf_vn':4023,
'0x0000000200000001ull':4024,
'liboo2coremac':4025,
'dylib':4026,
'liboo2coremac64':4027,
'liboo2extmac':4028,
'liboo2extmac64':4029,
'var':4030,
'lack':4031,
'pmessage':4032,
'messagesize':4033,
'forbidden':4034,
'attempts':4035,
'fatal':4036,
'safer':4037,
'developer':4038,
'obeys':4039,
'_size':4040,
'renamed':4041,
'oodlefilenotfoundisanerror_yes':4042,
'oodlefilenotfoundisanerror_force32':4043,
'recorded':4044,
'dependent':4045,
'example_jobify_gcd':4046,
'mm':4047,
'example_jobify_linuxtbb':4048,
'example_jobify_win32tp':4049,
'controlled':4050,
'multithreading':4051,
'kb':4052,
'throughput':4053,
'summary':4054,
'yes':4055,
'paralellelize':4056,
'aware':4057,
'paired':4058,
'depenencies':4059,
'parallelizing':4060,
'parallellize':4061,
'spawned':4062,
'tracked':4063,
'expense':4064,
'building':4065,
'feel':4066,
'deciding':4067,
'walk':4068,
'intialization':4069,
'chosen':4070,
'dec_len':4071,
'careful':4072,
'movies':4073,
'unpack':4074,
'optimized':4075,
'meshes':4076,
'animations':4077,
'bitmap':4078,
'animation':4079,
'video':4080,
'turned':4081,
'pdf':4082,
'geometry':4083,
'mesh':4084,
'hoped':4085,
'donate':4086,
'appreciated':4087,
'refine':4088,
'archiving':4089,
'capabilities':4090,
'dig':4091,
'deeper':4092,
'examine':4093,
'visit':4094,
'changes':4095,
'favors':4096,
'debugsystems':4097,
'oodlex_init_getdefaults_threads_yes':4098,
'past':4099,
'anddelete':4100,
'oodleasync_pending':4101,
'had':4102,
'optimize':4103,
'resulting':4104,
'generate':4105,
'worse':4106,
'leads':4107,
'oodlelz_packedrawoverlap_force32':4108,
'seeki':4109,
'numseekentries':4110,
'oodlenet_plugin_printf_verbose':4111,
'cb':4112,
'oodlexlog_callback':4113,
'newlz':4114,
'heterogenous':4115,
'mix':4116,
'enables':4117,
'warnings':4118,
'noise':4119,
'oo2net_win64':4120,
'identical':4121,
'interaction':4122,
'm_oodleinit_debugallocator':4123,
'm_oodleinit_threadlog':4124,
'm_oodleinit_log':4125,
'm_oodleinit_log_header':4126,
'm_oodleinit_log_flusheachwrite':4127,
'm_oodleinit_breakonlogerror':4128,
'm_oodleinit_telemetry':4129,
'm_oodleinit_telemetry_context':4130,
'm_oodleinit_stacktrace':4131,
'm_oodleinit_leaktrack':4132,
'm_oodleinit_simpleprof':4133,
'm_oodleinit_fuzztest':4134,
'm_oodleinit_ioq':4135,
'm_oodleinit_ioq_breakonerror':4136,
'm_oodleinit_ioq_threaded':4137,
'm_oodleinit_ioq_checkalignment':4138,
'm_oodleinit_workers':4139,
'm_oodleinit_workers_count':4140,
'item':4141,
'oodlexhandletable':4142,
'threadlog':4143,
'tracing':4144,
'profiler':4145,
'oodlex_waitnodelete':4146,
'macros':4147,
'hands':4148,
'c_runtimedata_filename':4149,
'oodlenetworkruntimedata':4150,
'oodlenetwork_createfromfile':4151,
'oodlenetwork_destroy':4152,
'oodlenetwork_encode':4153,
'oodlenetwork_decode':4154,
'override':4155,
'packet_file_data':4156,
'packet_file_size':4157,
'max_packet_size':4158,
'16384':4159,
'technically':4160,
'comp_buffer':4161,
'decomp_buffer':4162,
'upon':4163,
'decode_rawlen':4164,
'encodemod':4165,
'c_packetsize_modbits':4166,
'ensuring':4167,
'c_packetsize_max':4168,
'modbits':4169,
'c_packetsize_immediate':4170,
'192':4171,
'16576':4172,
'putpacketsize':4173,
'lo':4174,
'size>>8':4175,
'getpacketsize':4176,
'packet_complen':4177,
'sense':4178,
'expands':4179,
'oodlenetwork_loadfromfiledata':4180,
'state_file':4181,
'oodle_major_version_major':4182,
'state_filedata':4183,
'target_parallelism':4184,
'flight':4185,
'fewer':4186,
'exceed':4187,
'15':4188,
'oodlecoreplugins':4189,
'bc7':4190,
'oodletexplugins':4191,
'tex':4192,
'example_jobify':4193,
'manual':4194,
'fp_oodlemallocaligned':4195,
'fp_oodlefree':4196,
'strongly':4197,
'fallback':4198,
'practices':4199,
'triggered':4200,
'assertion':4201,
'site':4202,
'decbufpos':4203,
'decbuffersize':4204,
'decbufavail':4205,
'encountered':4206,
'recoverable':4207,
'curquantum':4208,
'proceed':4209,
'intervals':4210,
'discard':4211,
'tampered':4212,
'oodlexcopyfileflags_overwriteonlyifnewer':4213,
'oodlexcopyfileflags_overwriteonlyifdifferentsize':4214,
'oodlexcopyfileflags_overwriteonlyifnewerordifferentsize':4215,
'oodlexcopyfileflags_mask':4216,
'oodlexcopyfileflags_default':4217,
'oodlexcopyfileflags_force32':4218,
'combo':4219,
'action':4220,
'pvt':4221,
'pbasevt':4222,
'de':4223,
'deccount':4224,
'took':4225,
'rare':4226,
'oodleplugins_setprintf':4227,
'crashing':4228,
'hopefully':4229,
'worklets':4230,
'oo_f64':4231,
'seconds':4232,
'backward':4233,
'property':4234,
'oodlex_shutdown_debugbreakonleaks_yes':4235,
'oodlex_shutdown_debugbreakonleaks_force32':4236,
'compressability':4237,
'experimenting':4238,
'varies':4239,
'giving':4240,
'rid':4241,
'floats':4242,
'floating':4243,
'useless':4244,
'precision':4245,
'word':4246,
'figure':4247,
'covert':4248,
'reductions':4249,
'mathematical':4250,
'matrices':4251,
'euler':4252,
'angles':4253,
'components':4254,
'normalized':4255,
'worry':4256,
'entropy':4257,
'purely':4258,
'statistical':4259,
'turning':4260,
'construction':4261,
'avoiding':4262,
'strategic':4263,
'entity':4264,
'refering':4265,
'entities':4266,
'identifier':4267,
'identify':4268,
'hint':4269,
'coming':4270,
'piped':4271,
'2012':4272,
'describing':4273,
'enabling':4274,
'imported':4275,
'oodlelz_async':4276,
'lz_test_1':4277,
'lz_test_2':4278,
'lz_test_4':4279,
'lz_test_9':4280,
'lz_test_10':4281,
'lz_test_12':4282,
'lz_test_13':4283,
'ndone':4284,
'custom':4285,
'favor':4286,
'oodlelz_async_':4287,
'seekable':4288,
'dh':4289,
'test_4':4290,
'firing':4291,
'maxnumseeks':4292,
'numhandles':4293,
'dec_pos':4294,
'comp_avail':4295,
'dec_chunk_len':4296,
'seek_step':4297,
'exceeding':4298,
'decomps':4299,
'test_9':4300,
'demonstrate':4301,
'append':4302,
'depend':4303,
'invidual':4304,
'saw':4305,
'block_size':4306,
'in1':4307,
'in2':4308,
'len1':4309,
'len2':4310,
'comp_end':4311,
'dec_comp_len1':4312,
'second':4313,
'block_comp_len':4314,
'got_pos':4315,
'comp_len1':4316,
'comp_len2':4317,
'reverse':4318,
'simulate':4319,
'outputs':4320,
'simulates':4321,
'pretend':4322,
'64k':4323,
'obviously':4324,
'512k':4325,
'io_buffer':4326,
'io_buffer_size':4327,
'io_buffer_avail':4328,
'comp_file_io_pos':4329,
'memsize':4330,
'io_buffer_pos':4331,
'dec_buf_ptr':4332,
'dec_buf_end':4333,
'room':4334,
'min_io_size':4335,
'io_size':4336,
'decodedcount':4337,
'comp_used':4338,
'compbufused':4339,
'curquantumcomplen':4340,
'near':4341,
'antyhing':4342,
'slide':4343,
'refill':4344,
'io_buffer_keep':4345,
'memmove':4346,
'wrap':4347,
'half':4348,
'memcopies':4349,
'alternative':4350,
'disadvantage':4351,
'resetting':4352,
'decode_window_size':4353,
'2m':4354,
'3m':4355,
'1m':4356,
'streamed':4357,
'dec_window':4358,
'dec_out_buf':4359,
'63':4360,
'dec_out_ptr':4361,
'dec_out_end':4362,
'dec_window_pos':4363,
'dec_avail':4364,
'lzdecoder_create':4365,
'dec_out_remain':4366,
'funny':4367,
'lie':4368,
'wrapping':4369,
'dec_window_ptr':4370,
'inplace_size':4371,
'inplace_buf':4372,
'inplace':4373,
'inplace_comp_ptr':4374,
'destroyed':4375,
'technique':4376,
'putting':4377,
'mutex':4378,
'packet1':4379,
'packet1_size':4380,
'packet2':4381,
'packet2_size':4382,
'dictionary_and_packet_buf':4383,
'packet_sizes':4384,
'setup':4385,
'head':4386,
'after_dictionary_ptr':4387,
'preload':4388,
'packet_i':4389,
'packet_ptr':4390,
'packet_size':4391,
'dec_packet_ptr':4392,
'among':4393,
'neither':4394,
'likewise':4395,
'finally':4396,
'curquantumrawlen':4397,
'neutral':4398,
'agnostic':4399,
'recognizing':4400,
'oodlexerror_filenotfound':4401,
'unusual':4402,
'codes':4403,
'oodlexerror_unknown':4404,
'removed':4405,
'encounters':4406,
'm_oodle_defaultiobuffersize':4407,
'm_oodle_defaultwritereservesize':4408,
'm_oodle_maxsingleiosize':4409,
'm_oodleioqstream_maxreadsize':4410,
'm_oodleioqstream_minreadsize':4411,
'm_oodleioqstream_offsetalignment':4412,
'm_oodle_very_long_wait_seconds':4413,
'm_deprecated_desired_parallel_branchfactor':4414,
'm_oodle_osfileopen_default_read_buffered':4415,
'm_oodle_osfileopen_default_write_buffered':4416,
'm_oodle_pathscasesensitive':4417,
'submit':4418,
'interleave':4419,
'ioqstream':4420,
'maxreadsize':4421,
'service':4422,
'sectors':4423,
'ps3':4424,
'dvd':4425,
'warn':4426,
'compared':4427,
'oodlex_platform_case_sensitive':4428,
'discouraged':4429,
'vtables':4430,
'themselves':4431,
'scenarios':4432,
'cutting':4433,
'retreiving':4434,
'oodlexlog_to_file':4435,
'oodlexlog_to_debugger':4436,
'oodlexlog_file_line':4437,
'oodlexlog_prefix_thread_time':4438,
'oodlexlog_flush_every_write':4439,
'oodlexlog_state_verbosity_none':4440,
'oodlexlog_state_verbosity0':4441,
'oodlexlog_state_verbosity1':4442,
'oodlexlog_state_verbosity2':4443,
'stdout':4444,
'id':4445,
'crashes':4446,
'oodlelz_verbosity_minimal':4447,
'oodlelz_verbosity_some':4448,
'oodlelz_verbosity_lots':4449,
'oodlelz_verbosity_force32':4450,
'print':4451,
'added':4452,
'combines':4453,
'followed':4454,
'drive':4455,
'begin':4456,
'inserted':4457,
'concatenation':4458,
'respected':4459,
'dos':4460,
'blah':4461,
'beginning':4462,
'preferred':4463,
'ubiquitous':4464,
'coordinate':4465,
'invocation':4466,
'beating':4467,
'suited':4468,
'structured':4469,
'offered':4470,
'listed':4471,
'guidance':4472,
'vary':4473,
'unaffected':4474,
'harder':4475,
'superb':4476,
'mind':4477,
'stick':4478,
'records':4479,
'choices':4480,
'concated':4481,
'sweet':4482,
'spot':4483,
'tweak':4484,
'tolerate':4485,
'scanning':4486,
'oop':4487,
'adjust':4488,
'advice':4489,
'individuals':4490,
'heuristics':4491,
'utilitize':4492,
'prediction':4493,
'residuals':4494,
'caches':4495,
'exceeded':4496,
'cost':4497,
'life':4498,
'mutate':4499,
'slash':4500,
'whichever':4501,
'liboo2corelinux':4502,
'liboo2extlinux':4503,
'liboo2corelinux64':4504,
'liboo2extlinux64':4505,
'symbolic':4506,
'loo2corelinux':4507,
'libm':4508,
'libc':4509,
'libstdc':4510,
'glibc':4511,
'lm':4512,
'lpthread':4513,
'lrt':4514,
'lstdc':4515,
'sched_other':4516,
'priorities':4517,
'administrator':4518,
'account':4519,
'oodlexhandleautodelete_force32':4520,
'self':4521,
'inspect':4522,
'deletes':4523,
'oodlexlogcallbackretret_continue':4524,
'oodlexlogcallbackretret_terminate':4525,
'oodlexlogcallbackretret_force32':4526,
'suppress':4527,
'minwindowsize':4528,
'trigger':4529,
'assumed':4530,
'proceeds':4531,
'aborted':4532,
'detection':4533,
'codec':4534,
'inset':4535,
'padded':4536,
'satisfy':4537,
'did':4538,
'm_context':4539,
'm_pmallocaligned':4540,
'm_pfree':4541,
'm_pfreesized':4542,
'm_bigalignment':4543,
'm_pfreebig':4544,
'm_pvalidatepointer':4545,
'mallocbig':4546,
'register':4547,
'commonly':4548,
'oodle_usagewarnings_enabled':4549,
'oodle_usagewarnings_disabled':4550,
'oodle_usagewarnings_force32':4551,
'allocates':4552,
'management':4553,
'leak':4554,
'queries':4555,
'shortcut':4556,
'pcomplen':4557,
'star':4558,
'dispatchers':4559,
'openfile':4560,
'oodlexerror_ok':4561,
'oodlexerror_invalidhandle':4562,
'oodlexerror_noaccess':4563,
'oodlexerror_badparameters':4564,
'oodlexerror_corrupt':4565,
'oodlexerror_alignment':4566,
'oodlexerror_malloc':4567,
'oodlexerror_compressor':4568,
'oodlexerror_unexpectedeof':4569,
'oodlexerror_previousasyncfailed':4570,
'oodlexerror_close':4571,
'oodlexerror_count':4572,
'oodlexerror_force32':4573,
'attrib':4574,
'sharing':4575,
'violation':4576,
'ejected':4577,
'damaged':4578,
'oodlex_init_getdefaults_threads_force32':4579,
'assets':4580,
'update':4581,
'forever':4582,
'outputing':4583,
'exposed':4584,
'middle':4585,
'changelog':4586,
'july':4587,
'2016':4588,
'deliver':4589,
'say':4590,
'customers':4591,
'handled':4592,
'backwardscompatible':4593,
'requiring':4594,
'recompress':4595,
'happened':4596,
'unlikely':4597,
'definitely':4598,
'advise':4599,
'originals':4600,
'menu':4601,
'early':4602,
'returning':4603,
'confusing':4604,
'intel':4605,
'13th':4606,
'14th':4607,
'gen':4608,
'cpus':4609,
'instruction':4610,
'sequences':4611,
'implicated':4612,
'rates':4613,
'w':4614,
'o':4615,
'microcode':4616,
'patches':4617,
'affected':4618,
'downs':4619,
'incorrect':4620,
'bc6':4621,
'rdo':4622,
'flt16_max':4623,
'65504':4624,
'missing':4625,
'canonicalization':4626,
'avx':4627,
'xsave':4628,
'enhancement':4629,
'interactive':4630,
'oodletex_plugins_setcancelrequested':4631,
'nov':4632,
'focuses':4633,
'beta':4634,
'overviews':4635,
'docs':4636,
'macos':4637,
'has_iterator_debugging':4638,
'incorrectly':4639,
'claiming':4640,
'bc4':4641,
'float':4642,
'potential':4643,
'oob':4644,
'tail':4645,
'avx2':4646,
'float32':4647,
'>float16':4648,
'pixel':4649,
'bookkeeping':4650,
'oodletex_encodebcn_linearsurfaces':4651,
'surfaces':4652,
'review':4653,
'hitting':4654,
'ioqueue':4655,
'workern':4656,
'oodleioqueue':4657,
'oodleworkern':4658,
'respectively':4659,
'texviz':4660,
'dpi':4661,
'setthreaddescription':4662,
'slight':4663,
'improvements':4664,
'presets':4665,
'tuned':4666,
'25':4667,
'25x':4668,
'33x':4669,
'43x':4670,
'35':4671,
'40':4672,
'54x':4673,
'67x':4674,
'unnecessary':4675,
'getenv':4676,
'ucrt':4677,
'fixes':4678,
'behavioral':4679,
'oodletex_max_surface_dimension':4680,
'2097152':4681,
'ps5':4682,
'oodletex_rmse_normalized_bcnaware':4683,
'especially':4684,
'alpha':4685,
'pixels':4686,
'255':4687,
'positive':4688,
'nan':4689,
'popqueue':4690,
'spurious':4691,
'wake':4692,
'oct':4693,
'apple':4694,
'visionos':4695,
'xdk':4696,
'gdk':4697,
'gamecore':4698,
'continues':4699,
'suppported':4700,
'march':4701,
'508':4702,
'00':4703,
'updated':4704,
'detail':4705,
'bc1':4706,
'activity':4707,
'tiling':4708,
'amd':4709,
'zen':4710,
'forms':4711,
'vpcompressd':4712,
'partition':4713,
'logic':4714,
'diffuse':4715,
'albedo':4716,
'rms':4717,
'preserve':4718,
'extremes':4719,
'extremal':4720,
'preserved':4721,
'pbit':4722,
'are_indices_permitted':4723,
'regression':4724,
'10b':4725,
'apr':4726,
'calc':4727,
'16384x16384':4728,
'bc5':4729,
'u16':4730,
'triggering':4731,
'bc6h':4732,
'width':4733,
'height':4734,
'criteria':4735,
'aspect':4736,
'visual':4737,
'fidelity':4738,
'lambda':4739,
'objectionable':4740,
'artifacts':4741,
'stricter':4742,
'erroneously':4743,
'accepted':4744,
'unsupported':4745,
'upcoming':4746,
'releases':4747,
'feb':4748,
'aarch64':4749,
'tvos':4750,
'distributions':4751,
'packaged':4752,
'xcframework':4753,
'ballpark':4754,
'reusing':4755,
'observed':4756,
'5x':4757,
'threadripper':4758,
'noted':4759,
'ctmf':4760,
'gnu':4761,
'sections':4762,
'thus':4763,
'stacks':4764,
'balancing':4765,
'wasn':4766,
'setthreadgroupaffinity':4767,
'affinity':4768,
'>srgb':4769,
'sep':4770,
'28':4771,
'2022':4772,
'encouraged':4773,
'oodletex_bcnflag_lineartosrgb':4774,
'srgb':4775,
'>linear':4776,
'oodletex_bcndecodeflag_srgbtolinear':4777,
'oodletex_decodebcn_blocks_ex':4778,
'oodletex_decodebcn_linearsurfaces_ex':4779,
'libfoo':4780,
'sim':4781,
'latter':4782,
'arm64':4783,
'device':4784,
'rate':4785,
'distortion':4786,
'bc3':4787,
'merge':4788,
'enforced':4789,
'symbol':4790,
'backtraces':4791,
'fn':4792,
'elf':4793,
'nasm':4794,
'rrpool':4795,
'attempted':4796,
'arena':4797,
'fell':4798,
'preserving':4799,
'tripping':4800,
'endpoints':4801,
'dummy':4802,
'june':4803,
'builder':4804,
'm_scratch':4805,
'uninitialized':4806,
'growable':4807,
'practically':4808,
'unlimited':4809,
'directstorage':4810,
'decreased':4811,
'preserves':4812,
'bcnflag':4813,
'oodletex_bcnflag_preserveextremes_bc3457':4814,
'oodletex_bcnflag_preserveextremes_bc345':4815,
'hosts':4816,
'm1':4817,
'macs':4818,
'native':4819,
'rosetta':4820,
'x86_64':4821,
'emulation':4822,
'effective':4823,
'rgba':4824,
'8k':4825,
'transparency':4826,
'black':4827,
'areas':4828,
'singular':4829,
'covariance':4830,
'oodlejobs':4831,
'mip':4832,
'perceptual':4833,
'equivalently':4834,
'improvement':4835,
'bc2':4836,
'october':4837,
'2021':4838,
'emitting':4839,
'circumstances':4840,
'matched':4841,
'd3d':4842,
'rationale':4843,
'13x':4844,
'september':4845,
'fh4':4846,
'26':4847,
'inadvertently':4848,
'sse4':4849,
'initializers':4850,
'cpuid':4851,
'reporting':4852,
'v5':4853,
'v6':4854,
'clang':4855,
'jcc':4856,
'erratum':4857,
'mitigation':4858,
'mbranches':4859,
'32b':4860,
'nx':4861,
'500':4862,
'bc7prep':4863,
'instructions':4864,
'oodletexrt_bc7prepdecodeflags_avoidwidevectors':4865,
'minor':4866,
'universal':4867,
'counts':4868,
'leading':4869,
'oodletex_plugins_setjobsystemandcount':4870,
'signed':4871,
'producing':4872,
'ms':4873,
'2019':4874,
'durango':4875,
'qintel':4876,
'handler':4877,
'surface':4878,
'dimensions':4879,
'metric':4880,
'oodletex_encodebcn_rdo_ex':4881,
'texure':4882,
'iteration':4883,
'tiled':4884,
'layout':4885,
'oodletex_jobs_disable':4886,
'tiles':4887,
'grained':4888,
'262145':4889,
'substring':4890,
'dylibs':4891,
'fat':4892,
'binaries':4893,
'oodle_import_lib':4894,
'oodle_import_dll':4895,
'vc2010':4896,
'oodle_platform_has_selectdictionaryandtrain':4897,
'lza':4898,
'oodlelz_compresscontext_':4899,
'oodlex_path_':4900,
'oodlex_wchar_size':4901,
'oodletex_checklicense':4902,
'deprecation':4903,
'm_oodlelz_small_buffer_lz_fallback_size':4904,
'february':4905,
'exes':4906,
'2020':4907,
'november':4908,
'processors':4909,
'crt':4910,
'mt':4911,
'md':4912,
'incompatibility':4913,
'soft':4914,
'expired':4915,
'eval':4916,
'licenses':4917,
'day':4918,
'grace':4919,
'regressions':4920,
'1k':4921,
'4k':4922,
'clang10':4923,
'gcc':4924,
'47':4925,
'rerelease':4926,
'april':4927,
'rsqrt':4928,
'reciprocal':4929,
'sqrt':4930,
'august':4931,
'oodletex_bc1_withtransparency':4932,
'oodletex_bc2':4933,
'oodletex_bc1':4934,
'oodletex_pixelformat_getname':4935,
'oodletex_bc_getname':4936,
'oodletex_encodebcn_rdo':4937,
'mips':4938,
'slices':4939,
'otexdds':4940,
'volumes':4941,
'box':4942,
'date':4943,
'inl':4944,
'ue4':4945,
'textureformatoodle':4946,
'dep':4947,
'oodletexrt_ps5gpu_bc7prep_decodemulti':4948,
'series':4949,
'oodletex_pixelformat_3_f32_rgba':4950,
'oodletex_pixelformat_3_f32_rgb':4951,
'invalidations':4952,
'oodletexrt_bc7prep_ps5gpu_init':4953,
'oodletexrt_ps5gpu_init':4954,
'oodletexrt_bc7prep_ps5gpu_mindecodescratchsize':4955,
'oodletexrt_ps5gpu_bc7prep_mindecodescratchsize':4956,
'oodletexrt_bc7prep_ps5gpu_decode':4957,
'promotion':4958,
'filling':4959,
'oodle2base':4960,
't_fp_oodlecore_plugin_job':4961,
'oodlecore_plugin_job_max_dependencies':4962,
'_salsa':4963,
'oodlelz_compressionlevel_count':4964,
'oodleplugins_setjobsystemandcount':4965,
'oodleplugins_setjobsystem':4966,
'mustard':4967,
'dead':4968,
'stripping':4969,
'cancels':4970,
'oodlex_cancelorwait_anddelete':4971,
'oodlex_waitcancelallpending':4972,
'oodlexioq_pause':4973,
'oodlexioq_waitcancelallpending':4974,
'm_oodlelz_desired_parallel_branchfactor':4975,
'scaled':4976,
'mixing':4977,
'oodleassert':4978,
'48':4979,
'stadia':4980,
'acceptable':4981,
'salsa':4982,
'extracts':4983,
'debuglink':4984,
'relocation':4985,
'critical':4986,
'suboptimal':4987,
'degeneracy':4988,
'jumpinshift':4989,
'valgrind':4990,
'detections':4991,
'bugs':4992,
'heterogeneous':4993,
'apparent':4994,
'identified':4995,
'intermittent':4996,
'vsi':4997,
'casting':4998,
'multiarrays':4999,
'indexed':5000,
'splitter':5001,
'unexpected':5002,
'deterministic':5003,
'oodle_about_job_threading_plugins':5004,
'initializing':5005,
'targeting':5006,
'taking':5007,
'chm':5008,
'hf4':5009,
'hf3':5010,
'destructive':5011,
'stomping':5012,
'accounting':5013,
'refuse':5014,
'restored':5015,
'lifo':5016,
'wakeup':5017,
'improves':5018,
'coherence':5019,
'oodlexlz_readcompresswrite_async':5020,
'december':5021,
'2018':5022,
'abi':5023,
'subdirectories':5024,
'verifies':5025,
'cs':5026,
'basync':5027,
'oo2corenet':5028,
'oo2netswitch':5029,
'asm':5030,
'kernels':5031,
'clarify':5032,
'archaic':5033,
'rle':5034,
'folder':5035,
'temporarily':5036,
'import_lib':5037,
'oodlelz_seekchunklen_max':5038,
'optimal5':5039,
'attack':5040,
'oodlehuffman':5041,
'oodleplugins_':5042,
'oodlecore_plugins_':5043,
'oodlenet_plugins_':5044,
'360':5045,
'osx':5046,
'removal':5047,
'deprecated_maxhuffmansperchunk':5048,
'bitcode':5049,
'evaluators':5050,
'pipe':5051,
'simd':5052,
'binscope':5053,
'assembly':5054,
'masm':5055,
'inefficient':5056,
'selectdictionaryfrompackets':5057,
'lznib':5058,
'lzblw':5059,
'adaptation':5060,
'tll':5061,
'costing':5062,
'achieve':5063,
'compact':5064,
'oodlelz_small_buffer_lz_fallback_size':5065,
'happens':5066,
'modifies':5067,
'eliminate':5068,
'convention':5069,
'oodlelog_verboselevel':5070,
'oodlelog_stateflags':5071,
'secret':5072,
'oodlehuffman_encodearrayu8':5073,
'fuzzsafe_yes':5074,
'anymore':5075,
'mostly':5076,
'respecting':5077,
'compressionlevel_none':5078,
'violations':5079,
'oodlehuffman_decodearrayu8':5080,
'oodlexlz_compress_writeooz':5081,
'finalization':5082,
'predate':5083,
'gradually':5084,
'forseeable':5085,
'outdated':5086,
'obsolescence':5087,
'eastl':5088,
'oodlelz_compressionlevel_rle':5089,
'oodlexlz_compress_writeooz_async':5090,
'oodlexlz_decompress_threadphased_wide_async':5091,
'huff':5092,
'collide':5093,
'128k':5094,
'trinary':5095,
'bmp':5096,
'alloca':5097,
'rrhuffman':5098,
'counting':5099,
'phasing':5100,
'oodlexlz_compress_writeoozfile_asyncandwait':5101,
'gone':5102,
'lzb':5103,
'drops':5104,
'libdivsufsort':5105,
'reintroduced':5106,
'january':5107,
'example_lz_outputchunking':5108,
'oodlelog_printf':5109,
'macro':5110,
'crashed':5111,
'churn':5112,
'destroys':5113,
'oodlethinsemaphore':5114,
'busy':5115,
'expanded':5116,
'gold':5117,
'lowered':5118,
'showed':5119,
'hanging':5120,
'allowed_compressor_mask':5121,
'offsetshift':5122,
'2gb':5123,
'oodlelz_about_threadphaseddecode':5124,
'xbox1':5125,
'redist64':5126,
'oodleapi_oodlecore_plugins':5127,
'bumped':5128,
'incompatibilities':5129,
'oodlelz_decodesome':5130,
'retain':5131,
'oodlelz_allowed_compressor_all':5132,
'qfe1':5133,
'randomization':5134,
'subsets':5135,
'oodlelz_getziplikecompressionsettings':5136,
'composability':5137,
'sse':5138,
'oodleplugins_setassertion':5139,
'test_8':5140,
'withcontext':5141,
'oodlelz_compresswithcontext':5142,
'properly':5143,
'document':5144,
'oodlelz_compressor_canspudecompress':5145,
'bitknit':5146,
'neat':5147,
'oodle2_version_major':5148,
'neon':5149,
'2013':5150,
'xcode':5151,
'2014':5152,
'radtypes':5153,
'hang':5154,
'degenerate':5155,
'84104':5156,
'oodle_faq_lzcomparetable':5157,
'oodlenetwork1tcp':5158,
'clarity':5159,
'oodlestaticlzp':5160,
'implemented':5161,
'accepts':5162,
'timebeginperiod':5163,
'simplified':5164,
'redo':5165,
'extract':5166,
'spu':5167,
'stripped':5168,
'compactly':5169,
'oodlelzh':5170,
'300':5171,
'facilities':5172,
'easier':5173,
'structs':5174,
'unordered':5175,
'oodlehuffman_multihuffencode':5176,
'119':5177,
'numbering':5178,
'speculatively':5179,
'readable':5180,
'unified':5181,
'oodlelz_compresscontext':5182,
'>decompression':5183,
'faults':5184,
'movdqa':5185,
'bytewise':5186,
'mark':5187,
'overlapped':5188,
'oodlelz_compress_async':5189,
'related':5190,
'oodlelz_compress_writeooz_async':5191,
'oodleasyncselect_none':5192,
'expose':5193,
'ideal':5194,
'mmo':5195,
'aps':5196,
'cancellable':5197,
'reader':5198,
'truncating':5199,
'lzadvanced_output_chunking':5200,
'example_lz_advanced':5201,
'enumeration':5202,
'overwriting':5203,
'aggressively':5204,
'perror':5205,
'accessible':5206,
'>prev':5207,
'trace':5208,
'map':5209,
'oodlepackage_fillwithfiles':5210,
'oodlepackage_sortfiles':5211,
'extention':5212,
'oodle_getextensionkey':5213,
'tolower':5214,
'dirlisting':5215,
'deref':5216,
'arg':5217,
'ioq_deletefile_':5218,
'ioq_delete_':5219,
'oodledirlisting_deletedircontents':5220,
'losslessfilters':5221,
'transformations':5222,
'after_decompress':5223,
'replaceable':5224,
'supress':5225,
'chance':5226,
'oodlex_shutdown_logleaks_no':5227,
'oodlex_shutdown_logleaks_force32':5228,
'oodlexmalloc_os_options_guardbig':5229,
'oodlexmalloc_os_options_guardboth':5230,
'oodlexmalloc_os_options_guardfrees':5231,
'oodlexmalloc_os_options_count':5232,
'oodlexmalloc_os_options_force32':5233,
'guard':5234,
'guardboth':5235,
'noaccess':5236,
'>error':5237,
'oo2core_xboxone':5238,
'oo2ext_xboxone':5239,
'46':5240,
'oodle2_version_minor':5241,
'fileref':5242,
'fence':5243,
'associate':5244,
'schedule':5245,
'completing':5246,
'adapts':5247,
'>client':5248,
'receive':5249,
'slighly':5250,
'conflict':5251,
'indeed':5252,
'accomodate':5253,
};
var page_list = [
'Oodle_About_Switch.html',
'OodleX_Init_NoThreads.html',
'OodleXFree_IOAligned.html',
'OodleXMallocBigAlignment.html',
'OodleX_CreateThread.html',
'OodleXHandleDeleteIfDone.html',
'OodleXMalloc_ValidatePointer.html',
'Oodle_FAQ.html',
'OODLE_JOB_MAX_DEPENDENCIES.html',
't_fp_OodleCore_Plugin_RunJob.html',
'OodleXLZ_Decompress_Wide_Async.html',
'OodleNetwork1TCP_State_Reset.html',
'start_OodleNetwork.html',
'OodleNetwork1UDP_State_Size.html',
'OodleDecompressCallbackRet.html',
'OODLELZ_QUANTUM_LEN.html',
'OodleX_Shutdown_NoThreads.html',
'OodleXMalloc_GetVTable_Clib.html',
'OodleX_PrefixOSCwd.html',
'OodleNetworkAPI.html',
'OodleXIOQ_Rename_Async.html',
'Oodle_About_PS4.html',
'OodleXAPI_Threading.html',
'OodleCore_Plugins_SetPrintf.html',
'OodleXIOQ_Rename_AsyncAndWait.html',
'OodleXMalloc_IOAligned.html',
'OodleX_GetAvailableAsyncSelect.html',
'OodleXIOQ_GetLastPendingOpOnFile.html',
'OodleX_S64_to_SINTa_check.html',
't_fp_OodleNet_Plugin_RunJob.html',
'Oodle_FAQ_DecompressingToGraphicsMemoryIsSlow.html',
'OodleLZSeekTable_Flags.html',
'OODLENETWORK1_HASH_BITS_DEFAULT.html',
'OODLEX_ASYNC_HANDLE_DONE.html',
'OodleXIOQ_MakeDir_Async.html',
'OodleAPI_OodleCore_Plugins.html',
'OodleXIOQ_FreeBufferIOAligned_Async.html',
'OodleXLog_SetVerboseLevel.html',
'OodleXAPI_IOQ.html',
'OodleNetwork1_About.html',
'OodleX_Init_GetDefaults_DebugSystems.html',
'OodleLZ_Compressor.html',
'OodleLZ_CompressOptions.html',
'OodleXIOQ_Delete_AsyncAndWait.html',
'OodleXIOQ_GetStatus.html',
'OODLEX_ASYNC_HANDLE_INVALID.html',
'Oodle_About_IOS.html',
'OodleXLog_GetCallback.html',
'example_packet.html',
'Oodle_AboutExt.html',
'OodleXIOQ_Wait_GetInfo.html',
'OODLE_MALLOC_MINIMUM_ALIGNMENT.html',
'Oodle_FAQ_limit_encoder_memory_use.html',
'OodleXIOQ_GetInfo.html',
'example_lz_threadphased.html',
'OodleXIOQ_WriteWholeFile_AsyncAndWait.html',
'OodleAPI_Base.html',
'OodleXIOQ_OpenForWriteTempName_Async.html',
'OodleX_LogSystemInfo.html',
'OodleX_Init.html',
'OodleXFileMode.html',
'OodleXFreeSized.html',
'OodleXHandleCountdown_Alloc.html',
'OodleAPI_Network.html',
'OodleXIOQ_ReadMallocWholeFile_AsyncAndWait.html',
'OodleConfigValues.html',
'OodleXMallocFailedHandler.html',
'OodleXFree.html',
'Oodle_FAQ_deprecated_compressors.html',
'OodleXIOQ_GetName.html',
'example_lz_noallocs.html',
't_fp_OodleNet_Plugin_Printf.html',
'OodleLZ_GetCompressedBufferSizeNeeded.html',
'OodleX_GetStatus.html',
'OodleX_Shutdown.html',
'OodleLZDecoder_Reset.html',
'OodleXLog_Flush.html',
'OodleXIOQ_OpenAndReadMallocWholeFileAndClose_Async.html',
'OodleCore_Plugins_SetJobSystem.html',
'OodleX_ThreadFunc.html',
'OodleLZ_GetFirstChunkCompressor.html',
'OodleLZ_GetNumSeekChunks.html',
'OodleXFileOpsVTable.html',
'OodleNetwork_About.html',
'Oodle_FAQ_OodleLZ_Decompress_Failed.html',
'OodleLZ_Profile.html',
'OodleXIOQ_OpenForWriteCreate_Async.html',
'OodleXLog_VerboseLevel.html',
'Oodle_About_Index.html',
'OodleXLZ_ReadAndDecompress_Stream_Async.html',
'OodleLZ_FindSeekEntry.html',
'OodleNetwork1_SelectDictionarySupported.html',
'OodleAPI_LZ.html',
'OodleDecompressCallback_WriteFile_Data.html',
'OodleLZ_CompressOptions_GetDefault.html',
'OodleLZ_About_ThreadPhasedDecode.html',
'Oodle_About_Windows_UWP.html',
'OodleXMalloc_SetFailedHandler.html',
'OodleLZ_Compressor_UsesLargeWindow.html',
'OodleLZ_Jobify.html',
'OodleXIOQ_SetFileSize_Async.html',
'OodleX_WaitDoneAllPending.html',
'Oodle_FAQ_BadWriteContents.html',
'OodleXUtil_ConvertUTF16ToUTF8.html',
'OodleLZ_Jobify_GetName.html',
'OodleXLog_SetEcho.html',
'OodleX_GetOSCwd.html',
'OodleXOSFile.html',
'OodleX_Init_ThreadProfilerInit.html',
'OODLEX_FILE_CLOSE_NO_TRUNCATE_SIZE.html',
'OODLEX_BUFFER_SIZE_DEFAULT.html',
'OodleXDecompressCallback_WriteFile_Data_Init.html',
'OodleX_ReleaseThreadTLS.html',
'OodleXIOQ_KickAnyDelayed.html',
'OodleX_GetExtensionKey.html',
'OodleNetwork1UDP_StateCompacted_MaxSize.html',
'OodleLZ_CheckSeekTableCRCs.html',
'OodleNetwork1UDP_State_Compact_ForVersion.html',
'OodleLZ_GetCompressScratchMemBound.html',
'OodleXIOQ_MakeAllDirs_AsyncAndWait.html',
'OodleNet_Plugins_SetJobSystem.html',
'OodleNetwork_About_CapturingTrainingData.html',
'OodleXStatus.html',
'OodleNetwork1UDP_StateCompacted.html',
'OodleXAPI_LZ.html',
'acknowledgements.html',
'OODLENETWORK1_DECOMP_BUF_OVERREAD_LEN.html',
't_fp_OodleCore_Plugin_MallocAligned.html',
'OodleNetwork1TCP_Decode.html',
'OodleXOSFileListing.html',
'OODLELZ_LOCALDICTIONARYSIZE_MAX.html',
'OodleXIOQ_OpenAndReadMallocWholeFile_Async.html',
'OodleLZDecoder_Destroy.html',
'OODLEX_FILEINFO_FLAGS.html',
'OodleNetwork1TCP_Encode.html',
'OodleXIOQ_ReserveFileSizeForWrite_Async.html',
'OODLENETWORK1_MAX_DICTIONARY_SIZE.html',
'OodleXIOQ_OpenForRead_Async.html',
'OodleLZ_Compressor_UsesWholeBlockQuantum.html',
'OodleXAPI_Util.html',
'OodleX_CorePlugin_WaitJob.html',
'OodleXMallocAligned.html',
'OodleLZ_SeekTable.html',
'OodleXMalloc.html',
'OodleX_CorePlugin_RunJob.html',
'OodleX_SetConfigValues.html',
'OodleXIOQ_ForceWriteable_Async.html',
'OodleXLog_GetVerboseLevel.html',
'OodleXIOQ_GetInfoByName_Async.html',
't_fp_OodleCore_Plugin_Free.html',
'OodleXUtil_ConvertUTF8ToUTF16.html',
'OodleXHandleEvent_SetDone.html',
'OodleXAsyncSelect.html',
'example_lz_overlap.html',
'OodleX_GetConfigValues.html',
'OodleXMalloc_GetVTable_OS.html',
'OodleDecompressCallback_WriteFile.html',
'OodleLZ_MakeSeekChunkLen.html',
'OodleNetwork1_Shared_Size.html',
'licenses.html',
'OodleXHandle_About.html',
'Oodle_About_Windows.html',
'Oodle_FAQ_MemoryUse.html',
'OODLEX_ASYNC_HANDLE_PENDING.html',
'OodleXMalloc_About.html',
'OodleXFileInfo.html',
'OODLEX_FILEINFO_FLAG_INVALID.html',
'OodleNetwork1UDP_State_Uncompact_ForVersion.html',
'OODLELZ_BLOCK_MAX_COMPLEN.html',
'OodleX_MakeExtensionKey.html',
'OodleLZ_GetCompressedStepForRawStep.html',
'index.html',
'OodleLZ_CompressScratchMemBoundType.html',
'OodleXIOQ_OpenAndRead_Async.html',
'start_newLeviathan.html',
'Oodle_GetConfigValues.html',
'Oodle_FAQ_OutOfHandles.html',
'OodleXIOQ_GetInfoByName_AsyncAndWait.html',
'OodleXLZ_Compress_Async.html',
'example_lz_chart.html',
'OodleXIOQ_CopyFile_Async.html',
'OodleXIOQ_About.html',
'OODLE_JOB_NULL_HANDLE.html',
'OodleNet_Plugins_SetAssertion.html',
'OODLE_ALLOW_DEPRECATED_COMPRESSORS.html',
'examples.html',
'Oodle_FAQ_S64_And_SINTa.html',
'OodleXIOQ_CloseFileRename_Async.html',
'Oodle_About_ozip.html',
'OodleXLZ_ReadAndDecompress_Wide_Async.html',
'OodleX_SetDefaultFileOps.html',
'OodleLZ_GetDecodeBufferSize.html',
'OodleX_IOAlignDownS32.html',
't_fp_OodleCore_Plugin_WaitJob.html',
'OodleXPriority.html',
'OodleAPI_OodleNetwork1.html',
'OodleDecompressCallback.html',
'example_lz_simple.html',
'OodleX_WaitAll.html',
'OodleLZ_FuzzSafe.html',
'OodleNetwork1_SelectDictionaryFromPackets.html',
'OODLELZ_FAILED.html',
'OodleLZDecoder.html',
'OodleXIOQ_LogError.html',
'OodleNetwork1TCP_State_InitAsCopy.html',
'OodleX_IOAlignUpSINTa.html',
'OodleXHandleKickDelayed.html',
'OodleXIOQ_GetInfoByName_GetResult.html',
'Oodle_About_Platforms.html',
'OodleXIOQ_ReadUnalignedAdjustPointer_Async.html',
'OodleXIOQ_MakeAllDirs_Async.html',
'OodleAPI_LZ_Compressors.html',
'Oodle_SetConfigValues.html',
'OodleXLZ_Decompress_Narrow_Async.html',
'start_CoreVsExt.html',
'OodleCore_Plugins_SetAssertion.html',
'OodleX_IOAlignDownS64.html',
'OodleLZ_CompressionLevel.html',
'OodleXLZ_Decompress_ThreadPhased_Narrow_Async.html',
'OODLE_WORKERS_COUNT_ALL_PHYSICAL_CORES.html',
'OodleLZ_Compressor_MustDecodeWithoutResets.html',
'OodleNetwork1UDP_State.html',
'OodleX_WaitAndDestroyThread.html',
'OodleLZ_Decode_ThreadPhase.html',
'OodleNetwork1_Shared_SetWindow.html',
'OodleLZ_Compressor_CanDecodeFuzzSafe.html',
'Oodle_About_Android.html',
'Oodle_About.html',
'OodleX_GetOSFileOps.html',
'OodleXIOQ_SetInfoByName_Async.html',
't_OodleFPVoidVoid.html',
'OodleLZ_CheckCRC.html',
'OodleXFileOpenFlags.html',
'OodleXLZ_Compress_AsyncAndWait.html',
'OodleXLZ_Decompress_MakeSeekTable_Wide_Async.html',
'OodleLZ_Compress.html',
'OodleNetwork1TCP_State_Size.html',
'OodleX_IOAlignDownSINTa.html',
'OodleXIOQ_CopyFile_AsyncAndWait.html',
'OodleLZ_CompressOptions_Validate.html',
'OodleAPI_OodleNet_Plugins.html',
'OodleXAPI_Malloc.html',
'OodleLZ_About_Hydra.html',
'Oodle_FAQ_vs_other_compressors.html',
'OodleLZ_GetCompressScratchMemBoundEx.html',
'OodleXAPI_Init.html',
'start_Benchmarking.html',
'OodleXIOQ_OpenWriteWholeFileClose_Async.html',
'OodleXAPI_Debug.html',
'Oodle_About_Examples.html',
'OodleLZ_FillSeekTable.html',
'Oodle_About_Compression_Scratch_Mem.html',
'Oodle_CheckVersion.html',
'OodleLZDecoder_Create.html',
'OodleCoreAPI.html',
'OODLEX_FILEINFO_MODTIME_INVALID.html',
'OODLELZ_SCRATCH_MEM_NO_BOUND.html',
'OodleNetwork1_SelectDictionaryFromPackets_Trials.html',
'OodleXLog_Printf.html',
'OODLEX_ASYNC_HANDLE_ERROR.html',
'OodleXIOQ_ReadMallocWholeFile_GetResult.html',
'Oodle_About_Mac.html',
'OODLE_WORKERS_COUNT_ALL_HYPER_CORES.html',
'OodleXIOQ_GetErrorDetails.html',
't_fp_Oodle_Job.html',
'OodleXHandle.html',
'Oodle_FAQ_UseOodleWithNoAllocator.html',
'Oodle_LogHeader.html',
'OodleLZ_Compressor_RespectsDictionarySize.html',
'OodleXIOQ_Read_Async.html',
'OodleXIOQ_OpenWriteWholeFileCloseTempName_Async.html',
'OodleX_IOAlignUpS64.html',
'OodleFileNotFoundIsAnError.html',
'OodleXIOQ_ClearError.html',
'Oodle_About_Job_Threading_Plugins.html',
'OodleXLog_GetEcho.html',
'OodleXIOQ_GetLastError.html',
'start_OodleData.html',
'OODLELZ_SPACESPEEDTRADEOFFBYTES_DEFAULT.html',
'OodleX_Semaphore.html',
'OodleX_Init_GetDefaults.html',
'OodleNetworkVersion.html',
'OodleXIOQ_GetFileSize_AsyncAndWait.html',
'OodleXIOQ_CloseFile_Async.html',
'OodleXIOQ_Write_Async.html',
'OodleXIOQ_Delete_Async.html',
'OodleXIOQ_WaitDoneAllPending.html',
'OodleXIOQ_Wait.html',
'OodleXLog_SetState.html',
'OodleNetwork1TCP_Train.html',
'Oodle_FAQ_LZCompareTable.html',
'OodleLZ_PackedRawOverlap.html',
'OodleLZ_GetSeekEntryPackedPos.html',
'OodleNet_Plugins_SetPrintf.html',
'OodleXLog_SetCallback.html',
'OodleLZ_Compressor_CanDecodeInCircularWindow.html',
'OodleLZ_GetAllChunksCompressor.html',
't_fp_OodleNet_Plugin_Free.html',
't_fp_OodleNet_Plugin_MallocAligned.html',
'OodleX_IOAlignUpS32.html',
'OodleXMallocBig.html',
'Oodle_SetUsageWarnings.html',
'OodleNetwork1UDP_Encode.html',
'start_NetworkSplit.html',
'OodleXInitOptions.html',
'OodleX_Wait.html',
'example_network_client.html',
'OodleCore_Plugins_SetJobSystemAndCount.html',
'OodleCore_Plugins_SetAllocators.html',
'OodleLZ_GetChunkCompressor.html',
'OodleLZ_FreeSeekTable.html',
't_fp_OodleCore_Plugin_DisplayAssertion.html',
'OODLEX_IO_MAX_ALIGNMENT.html',
'OodleLZDecoder_DecodeSome.html',
'OodleNetwork1UDP_State_Uncompact.html',
'OodleNetwork1UDP_Train.html',
'OodleXCopyFileFlags.html',
'OodleXMalloc_InstallVTable.html',
'OodleX_Semaphore_Post.html',
'OodleXHandleCountdown_Decrement.html',
'OodleLZDecoder_MemorySizeNeeded.html',
'Oodle_FAQ_HowDoIGetOodleLogs.html',
'OodleNetwork1UDP_Decode.html',
'OodleXIOQFile.html',
'OodleLZ_ThreadPhased_BlockDecoderMemorySizeNeeded.html',
'OodleXIOQ_SetInfoByName_AsyncAndWait.html',
'OodleX_GetNumWorkerThreads.html',
'OodleLZ_Compressor_GetName.html',
'OodleX_GetSeconds.html',
'OodleLZ_Compressor_CanDecodeInPlace.html',
'OodleX_Shutdown_DebugBreakOnLeaks.html',
'OodleNetwork_About_FormingPacketsForMaximumCompression.html',
'OodleXIOQ_ReadMallocWholeFile_Async.html',
'OodleXLog_PrintfError.html',
'OodleX_Init_GetDefaults_Minimal.html',
'example_lz.html',
'Oodle_About_WASM.html',
'OodleLZ_DecodeSome_Out.html',
'OodleXIOQ_GetErrorEnum.html',
'Oodle_FAQ_FindingIOProblems.html',
'OodleNet_Plugins_SetAllocators.html',
'OodleNet_Plugins_SetJobSystemAndCount.html',
'OodleXConfigValues.html',
'OodleXIOQ_SetVTable.html',
'Oodle_FAQ_WhichLZ.html',
'OodleNetwork1_Shared.html',
'OodleNetwork1_CompressedBufferSizeNeeded.html',
'OodleXIOQ_GetOSHandle.html',
'OODLEX_FILE_SIZE_INVALID.html',
'OodleNetwork1UDP_State_Compact.html',
'OodleXLog_StateFlags.html',
'OodleLZ_Verbosity.html',
't_fp_OodleNet_Plugin_WaitJob.html',
'OodleX_CombinePaths.html',
'OodleXAPI_Handle.html',
'OodleLZ_About.html',
'OodleX_GetDefaultFileOps.html',
'OODLEX_PATH_DELIM.html',
'Oodle_About_Linux.html',
'OodleXHandleAutoDelete.html',
'OodleXLogCallbackRetRet.html',
'OodleLZDecoder_MakeValidCircularWindowSize.html',
'OodleXHandleEvent_Alloc.html',
'OodleLZ_Decompress.html',
'OodleXIOQ_LogLastError.html',
'OodleXMallocVTable.html',
'Oodle_UsageWarnings.html',
'OodleLZ_CreateSeekTable.html',
'OodleX_SetHandleAutoDelete.html',
'OodleExtAPI.html',
'OodleXFreeBig.html',
'OodleX_Init_Default.html',
'OodleXLZ_Compress_Wait_GetResult.html',
'OodleLZ_GetSeekTableMemorySizeNeeded.html',
'OodleLZ_Compressor_CanDecodeThreadPhased.html',
't_OodleFPVoidVoidStar.html',
'OODLELZ_BLOCK_LEN.html',
'OodleXAPI_LZ_Async.html',
'OODLEX_FILE_OPEN_NO_RESERVE_SIZE.html',
'OodleXError.html',
'OodleX_Init_GetDefaults_Threads.html',
'Oodle_FAQ_data_compatibility.html',
't_fp_OodleCore_Plugin_Printf.html',
'OodleLZ_CompressionLevel_GetName.html',
'changelog.html',
'OodleXLogCallbackRet.html',
'OodleX_Shutdown_LogLeaks.html',
't_fp_OodleNet_Plugin_DisplayAssertion.html',
'OodleXMalloc_OS_Options.html',
'OodleXHandleEvent_SetError.html',
'Oodle_About_XboxOne.html',
'OODLE_HEADER_VERSION.html',
'OodleX_Semaphore_Wait.html',
'OodleXIOQ_NameIsDir_AsyncAndWait.html',
'OodleXIOQ_Fence_Async.html',
'OodleNetwork1TCP_State.html',
'OodleLZ_GetInPlaceDecodeBufferSize.html',
];
var page_name = [
'About Oodle on Nintendo Switch',
'OodleX_Init_NoThreads',
'OodleXFree_IOAligned',
'OodleXMallocBigAlignment',
'OodleX_CreateThread',
'OodleXHandleDeleteIfDone',
'OodleXMalloc_ValidatePointer',
'Frequently Asked Questions',
'OODLE_JOB_MAX_DEPENDENCIES',
't_fp_OodleCore_Plugin_RunJob',
'OodleXLZ_Decompress_Wide_Async',
'OodleNetwork1TCP_State_Reset',
'Getting Started with Oodle Network',
'OodleNetwork1UDP_State_Size',
'OodleDecompressCallbackRet',
'OODLELZ_QUANTUM_LEN',
'OodleX_Shutdown_NoThreads',
'OodleXMalloc_GetVTable_Clib',
'OodleX_PrefixOSCwd',
'Oodle2 Network API Documentation',
'OodleXIOQ_Rename_Async',
'About Oodle on PS4',
'OodleX threading util',
'OodleCore_Plugins_SetPrintf',
'OodleXIOQ_Rename_AsyncAndWait',
'OodleXMalloc_IOAligned',
'OodleX_GetAvailableAsyncSelect',
'OodleXIOQ_GetLastPendingOpOnFile',
'OodleX_S64_to_SINTa_check',
't_fp_OodleNet_Plugin_RunJob',
'FAQ: How do I decompress to graphics memory quickly?',
'OodleLZSeekTable_Flags',
'OODLENETWORK1_HASH_BITS_DEFAULT',
'OODLEX_ASYNC_HANDLE_DONE',
'OodleXIOQ_MakeDir_Async',
'Core plugins',
'OodleXIOQ_FreeBufferIOAligned_Async',
'OodleXLog_SetVerboseLevel',
'OodleX low level async io',
'About OodleNetwork1',
'OodleX_Init_GetDefaults_DebugSystems',
'OodleLZ_Compressor',
'OodleLZ_CompressOptions',
'OodleXIOQ_Delete_AsyncAndWait',
'OodleXIOQ_GetStatus',
'OODLEX_ASYNC_HANDLE_INVALID',
'About Oodle on IOS',
'OodleXLog_GetCallback',
'example_packet : Example demonstrating network packet compression',
'About Oodle Ext',
'OodleXIOQ_Wait_GetInfo',
'OODLE_MALLOC_MINIMUM_ALIGNMENT',
'FAQ: How do I limit the encoder memory use?',
'OodleXIOQ_GetInfo',
'example_lz_threadphased : Example of 2-thread ThreadPhased decoding',
'OodleXIOQ_WriteWholeFile_AsyncAndWait',
'Core Base',
'OodleXIOQ_OpenForWriteTempName_Async',
'OodleX_LogSystemInfo',
'OodleX_Init',
'OodleXFileMode',
'OodleXFreeSized',
'OodleXHandleCountdown_Alloc',
'Oodle Network compression',
'OodleXIOQ_ReadMallocWholeFile_AsyncAndWait',
'OodleConfigValues',
'OodleXMallocFailedHandler',
'OodleXFree',
'FAQ: What are the Oodle deprecated compressors ?',
'OodleXIOQ_GetName',
'example_lz_noallocs : Example demonstrating Oodle compression with no allocations',
't_fp_OodleNet_Plugin_Printf',
'OodleLZ_GetCompressedBufferSizeNeeded',
'OodleX_GetStatus',
'OodleX_Shutdown',
'OodleLZDecoder_Reset',
'OodleXLog_Flush',
'OodleXIOQ_OpenAndReadMallocWholeFileAndClose_Async',
'OodleCore_Plugins_SetJobSystem',
'OodleX_ThreadFunc',
'OodleLZ_GetFirstChunkCompressor',
'OodleLZ_GetNumSeekChunks',
'OodleXFileOpsVTable',
'About Oodle Network Compression',
'FAQ: OodleLZ_Decompress is failing how do I diagnose it?',
'OodleLZ_Profile',
'OodleXIOQ_OpenForWriteCreate_Async',
'OodleXLog_VerboseLevel',
'Index of Abouts',
'OodleXLZ_ReadAndDecompress_Stream_Async',
'OodleLZ_FindSeekEntry',
'OodleNetwork1_SelectDictionarySupported',
'Core LZ compression',
'OodleDecompressCallback_WriteFile_Data',
'OodleLZ_CompressOptions_GetDefault',
'About OodleLZ ThreadPhased Decode',
'About Oodle on Windows UWP',
'OodleXMalloc_SetFailedHandler',
'OodleLZ_Compressor_UsesLargeWindow',
'OodleLZ_Jobify',
'OodleXIOQ_SetFileSize_Async',
'OodleX_WaitDoneAllPending',
'FAQ: I write a file with IOQ but the contents are garbage?',
'OodleXUtil_ConvertUTF16ToUTF8',
'OodleLZ_Jobify_GetName',
'OodleXLog_SetEcho',
'OodleX_GetOSCwd',
'OodleXOSFile',
'OodleX_Init_ThreadProfilerInit',
'OODLEX_FILE_CLOSE_NO_TRUNCATE_SIZE',
'OODLEX_BUFFER_SIZE_DEFAULT',
'OodleXDecompressCallback_WriteFile_Data_Init',
'OodleX_ReleaseThreadTLS',
'OodleXIOQ_KickAnyDelayed',
'OodleX_GetExtensionKey',
'OodleNetwork1UDP_StateCompacted_MaxSize',
'OodleLZ_CheckSeekTableCRCs',
'OodleNetwork1UDP_State_Compact_ForVersion',
'OodleLZ_GetCompressScratchMemBound',
'OodleXIOQ_MakeAllDirs_AsyncAndWait',
'OodleNet_Plugins_SetJobSystem',
'Capturing Training data for OodleNetwork',
'OodleXStatus',
'OodleNetwork1UDP_StateCompacted',
'OodleX LZ compression',
'Acknowledgements',
'OODLENETWORK1_DECOMP_BUF_OVERREAD_LEN',
't_fp_OodleCore_Plugin_MallocAligned',
'OodleNetwork1TCP_Decode',
'OodleXOSFileListing',
'OODLELZ_LOCALDICTIONARYSIZE_MAX',
'OodleXIOQ_OpenAndReadMallocWholeFile_Async',
'OodleLZDecoder_Destroy',
'OODLEX_FILEINFO_FLAGS',
'OodleNetwork1TCP_Encode',
'OodleXIOQ_ReserveFileSizeForWrite_Async',
'OODLENETWORK1_MAX_DICTIONARY_SIZE',
'OodleXIOQ_OpenForRead_Async',
'OodleLZ_Compressor_UsesWholeBlockQuantum',
'OodleX Utils',
'OodleX_CorePlugin_WaitJob',
'OodleXMallocAligned',
'OodleLZ_SeekTable',
'OodleXMalloc',
'OodleX_CorePlugin_RunJob',
'OodleX_SetConfigValues',
'OodleXIOQ_ForceWriteable_Async',
'OodleXLog_GetVerboseLevel',
'OodleXIOQ_GetInfoByName_Async',
't_fp_OodleCore_Plugin_Free',
'OodleXUtil_ConvertUTF8ToUTF16',
'OodleXHandleEvent_SetDone',
'OodleXAsyncSelect',
'example_lz_overlap : Example demonstrating parallel overlap with OodleLZ',
'OodleX_GetConfigValues',
'OodleXMalloc_GetVTable_OS',
'OodleDecompressCallback_WriteFile',
'OodleLZ_MakeSeekChunkLen',
'OodleNetwork1_Shared_Size',
'Third Party License Notices',
'About OodleXHandle',
'About Oodle on Windows',
'FAQ: How much memory do the Oodle compressors use ?',
'OODLEX_ASYNC_HANDLE_PENDING',
'About OodleXMalloc',
'OodleXFileInfo',
'OODLEX_FILEINFO_FLAG_INVALID',
'OodleNetwork1UDP_State_Uncompact_ForVersion',
'OODLELZ_BLOCK_MAX_COMPLEN',
'OodleX_MakeExtensionKey',
'OodleLZ_GetCompressedStepForRawStep',
'Welcome to Oodle',
'OodleLZ_CompressScratchMemBoundType',
'OodleXIOQ_OpenAndRead_Async',
'Introducing the new Oodle Leviathan',
'Oodle_GetConfigValues',
'FAQ: I ran out of OodleHandle table slots; what do I do?',
'OodleXIOQ_GetInfoByName_AsyncAndWait',
'OodleXLZ_Compress_Async',
'example_lz_chart : Example that makes a chart of OodleLZ options',
'OodleXIOQ_CopyFile_Async',
'About OodleIOQ',
'OODLE_JOB_NULL_HANDLE',
'OodleNet_Plugins_SetAssertion',
'OODLE_ALLOW_DEPRECATED_COMPRESSORS',
'Examples',
'FAQ: What is SINTa? How do I load files bigger than 2 GB?',
'OodleXIOQ_CloseFileRename_Async',
'About Oodle ozip',
'OodleXLZ_ReadAndDecompress_Wide_Async',
'OodleX_SetDefaultFileOps',
'OodleLZ_GetDecodeBufferSize',
'OodleX_IOAlignDownS32',
't_fp_OodleCore_Plugin_WaitJob',
'OodleXPriority',
'OodleAPI_OodleNetwork1',
'OodleDecompressCallback',
'example_lz_simple : Example demonstrating very simple LZ memory->memory compression using only Oodle Core',
'OodleX_WaitAll',
'OodleLZ_FuzzSafe',
'OodleNetwork1_SelectDictionaryFromPackets',
'OODLELZ_FAILED',
'OodleLZDecoder',
'OodleXIOQ_LogError',
'OodleNetwork1TCP_State_InitAsCopy',
'OodleX_IOAlignUpSINTa',
'OodleXHandleKickDelayed',
'OodleXIOQ_GetInfoByName_GetResult',
'About Oodle on Platforms',
'OodleXIOQ_ReadUnalignedAdjustPointer_Async',
'OodleXIOQ_MakeAllDirs_Async',
'OodleAPI_LZ_Compressors',
'Oodle_SetConfigValues',
'OodleXLZ_Decompress_Narrow_Async',
'Oodle2 Core vs Oodle2 Ext',
'OodleCore_Plugins_SetAssertion',
'OodleX_IOAlignDownS64',
'OodleLZ_CompressionLevel',
'OodleXLZ_Decompress_ThreadPhased_Narrow_Async',
'OODLE_WORKERS_COUNT_ALL_PHYSICAL_CORES',
'OodleLZ_Compressor_MustDecodeWithoutResets',
'OodleNetwork1UDP_State',
'OodleX_WaitAndDestroyThread',
'OodleLZ_Decode_ThreadPhase',
'OodleNetwork1_Shared_SetWindow',
'OodleLZ_Compressor_CanDecodeFuzzSafe',
'About Oodle on Android',
'About Oodle',
'OodleX_GetOSFileOps',
'OodleXIOQ_SetInfoByName_Async',
't_OodleFPVoidVoid',
'OodleLZ_CheckCRC',
'OodleXFileOpenFlags',
'OodleXLZ_Compress_AsyncAndWait',
'OodleXLZ_Decompress_MakeSeekTable_Wide_Async',
'OodleLZ_Compress',
'OodleNetwork1TCP_State_Size',
'OodleX_IOAlignDownSINTa',
'OodleXIOQ_CopyFile_AsyncAndWait',
'OodleLZ_CompressOptions_Validate',
'Network plugins',
'OodleX Memory Allocators',
'About OodleLZ Hydra',
'FAQ: How does OodleLZ compare with other compressors ?',
'OodleLZ_GetCompressScratchMemBoundEx',
'OodleX Startup and Shutdown',
'Tips for benchmarking a compressor',
'OodleXIOQ_OpenWriteWholeFileClose_Async',
'OodleX Debug aids',
'How to build and use the Oodle examples',
'OodleLZ_FillSeekTable',
'About Compression Scratch Memory',
'Oodle_CheckVersion',
'OodleLZDecoder_Create',
'Oodle2 Core API Documentation',
'OODLEX_FILEINFO_MODTIME_INVALID',
'OODLELZ_SCRATCH_MEM_NO_BOUND',
'OodleNetwork1_SelectDictionaryFromPackets_Trials',
'OodleXLog_Printf',
'OODLEX_ASYNC_HANDLE_ERROR',
'OodleXIOQ_ReadMallocWholeFile_GetResult',
'About Oodle on Mac',
'OODLE_WORKERS_COUNT_ALL_HYPER_CORES',
'OodleXIOQ_GetErrorDetails',
't_fp_Oodle_Job',
'OodleXHandle',
'FAQ: How do I use Oodle with no allocator?',
'Oodle_LogHeader',
'OodleLZ_Compressor_RespectsDictionarySize',
'OodleXIOQ_Read_Async',
'OodleXIOQ_OpenWriteWholeFileCloseTempName_Async',
'OodleX_IOAlignUpS64',
'OodleFileNotFoundIsAnError',
'OodleXIOQ_ClearError',
'About Oodle Job Threading Plugins',
'OodleXLog_GetEcho',
'OodleXIOQ_GetLastError',
'Getting Started with Oodle LZ Data Compression',
'OODLELZ_SPACESPEEDTRADEOFFBYTES_DEFAULT',
'OodleX_Semaphore',
'OodleX_Init_GetDefaults',
'OodleNetworkVersion',
'OodleXIOQ_GetFileSize_AsyncAndWait',
'OodleXIOQ_CloseFile_Async',
'OodleXIOQ_Write_Async',
'OodleXIOQ_Delete_Async',
'OodleXIOQ_WaitDoneAllPending',
'OodleXIOQ_Wait',
'OodleXLog_SetState',
'OodleNetwork1TCP_Train',
'FAQ: What are the speeds and ratios of the OodleLZ compressors and levels?',
'OodleLZ_PackedRawOverlap',
'OodleLZ_GetSeekEntryPackedPos',
'OodleNet_Plugins_SetPrintf',
'OodleXLog_SetCallback',
'OodleLZ_Compressor_CanDecodeInCircularWindow',
'OodleLZ_GetAllChunksCompressor',
't_fp_OodleNet_Plugin_Free',
't_fp_OodleNet_Plugin_MallocAligned',
'OodleX_IOAlignUpS32',
'OodleXMallocBig',
'Oodle_SetUsageWarnings',
'OodleNetwork1UDP_Encode',
'Oodle Network and Data SDK separation',
'OodleXInitOptions',
'OodleX_Wait',
'example_network_client : Example with simple network client support',
'OodleCore_Plugins_SetJobSystemAndCount',
'OodleCore_Plugins_SetAllocators',
'OodleLZ_GetChunkCompressor',
'OodleLZ_FreeSeekTable',
't_fp_OodleCore_Plugin_DisplayAssertion',
'OODLEX_IO_MAX_ALIGNMENT',
'OodleLZDecoder_DecodeSome',
'OodleNetwork1UDP_State_Uncompact',
'OodleNetwork1UDP_Train',
'OodleXCopyFileFlags',
'OodleXMalloc_InstallVTable',
'OodleX_Semaphore_Post',
'OodleXHandleCountdown_Decrement',
'OodleLZDecoder_MemorySizeNeeded',
'FAQ: How do I get the Oodle logs?',
'OodleNetwork1UDP_Decode',
'OodleXIOQFile',
'OodleLZ_ThreadPhased_BlockDecoderMemorySizeNeeded',
'OodleXIOQ_SetInfoByName_AsyncAndWait',
'OodleX_GetNumWorkerThreads',
'OodleLZ_Compressor_GetName',
'OodleX_GetSeconds',
'OodleLZ_Compressor_CanDecodeInPlace',
'OodleX_Shutdown_DebugBreakOnLeaks',
'Forming Packets for Maximum Compression',
'OodleXIOQ_ReadMallocWholeFile_Async',
'OodleXLog_PrintfError',
'OodleX_Init_GetDefaults_Minimal',
'example_lz : Example demonstrating LZ compression and decompression',
'About Oodle on WASM',
'OodleLZ_DecodeSome_Out',
'OodleXIOQ_GetErrorEnum',
'FAQ: My Files aren\'t loading right and I can\'t track it down',
'OodleNet_Plugins_SetAllocators',
'OodleNet_Plugins_SetJobSystemAndCount',
'OodleXConfigValues',
'OodleXIOQ_SetVTable',
'FAQ: Which OodleLZ should I use?',
'OodleNetwork1_Shared',
'OodleNetwork1_CompressedBufferSizeNeeded',
'OodleXIOQ_GetOSHandle',
'OODLEX_FILE_SIZE_INVALID',
'OodleNetwork1UDP_State_Compact',
'OodleXLog_StateFlags',
'OodleLZ_Verbosity',
't_fp_OodleNet_Plugin_WaitJob',
'OodleX_CombinePaths',
'OodleX async handle operations',
'About OodleLZ',
'OodleX_GetDefaultFileOps',
'OODLEX_PATH_DELIM',
'About Oodle on Linux',
'OodleXHandleAutoDelete',
'OodleXLogCallbackRetRet',
'OodleLZDecoder_MakeValidCircularWindowSize',
'OodleXHandleEvent_Alloc',
'OodleLZ_Decompress',
'OodleXIOQ_LogLastError',
'OodleXMallocVTable',
'Oodle_UsageWarnings',
'OodleLZ_CreateSeekTable',
'OodleX_SetHandleAutoDelete',
'Oodle2 Ext API Documentation',
'OodleXFreeBig',
'OodleX_Init_Default',
'OodleXLZ_Compress_Wait_GetResult',
'OodleLZ_GetSeekTableMemorySizeNeeded',
'OodleLZ_Compressor_CanDecodeThreadPhased',
't_OodleFPVoidVoidStar',
'OODLELZ_BLOCK_LEN',
'OodleXAPI_LZ_Async',
'OODLEX_FILE_OPEN_NO_RESERVE_SIZE',
'OodleXError',
'OodleX_Init_GetDefaults_Threads',
'FAQ: Do new Oodle versions break data compatibility ?',
't_fp_OodleCore_Plugin_Printf',
'OodleLZ_CompressionLevel_GetName',
'Change Log',
'OodleXLogCallbackRet',
'OodleX_Shutdown_LogLeaks',
't_fp_OodleNet_Plugin_DisplayAssertion',
'OodleXMalloc_OS_Options',
'OodleXHandleEvent_SetError',
'About Oodle on Xbox One',
'OODLE_HEADER_VERSION',
'OodleX_Semaphore_Wait',
'OodleXIOQ_NameIsDir_AsyncAndWait',
'OodleXIOQ_Fence_Async',
'OodleNetwork1TCP_State',
'OodleLZ_GetInPlaceDecodeBufferSize',
];
var word_index = [ {
},{'-1':[[0,0],],
'2':[[208,110],[88,60],[88,58],[188,360],[274,839],],
'5':[[261,223],],
'7':[[390,12],[390,7],[388,87],[369,483],[369,241],[369,152],[19,19],[19,84],[369,102],[21,6],[21,11],[21,16],[358,388],[358,17],[21,190],[358,12],[358,6],[355,8],[354,37],[38,33],[336,170],[336,11],[336,6],[331,13],[312,62],[390,173],[274,833],[274,15],[45,35],[274,12],[46,6],[46,11],[46,16],[46,80],[274,7],[390,17],[261,218],[261,17],[261,12],[261,6],[254,97],[254,92],[254,89],[251,346],[251,12],[251,6],[242,209],[242,5],[241,30],[240,46],[227,326],[0,185],[63,87],[227,320],[227,315],[227,310],[227,305],[227,300],[227,294],[227,289],[227,283],[88,5],[88,8],[227,278],[227,272],[227,267],[227,262],[227,258],[226,80],[226,16],[226,11],[226,6],[211,168],[88,56],[0,17],[0,12],[92,26],[92,29],[92,34],[211,3],[0,7],[95,6],[95,13],[208,105],[95,518],[208,100],[208,95],[96,7],[96,195],[208,90],[208,85],[121,7],[121,592],[208,79],[208,74],[208,68],[136,27],[139,13],[208,63],[208,57],[208,52],[208,13],[208,10],[161,6],[161,11],[208,6],[161,591],[195,27],[195,7],[63,22],[188,12],[188,9],[171,1159],[171,1094],[171,124],[171,131],[171,135],[171,140],[171,145],[171,151],[171,156],[171,162],[171,167],[171,173],[171,178],[171,183],[171,188],[171,193],[171,199],[171,450],[171,453],[171,458],[171,698],[171,748],[171,837],[171,1079],],
'8':[[0,189],],
'9':[[226,88],[390,181],[161,595],[161,599],[261,227],[46,88],[336,178],[358,397],[0,193],[21,199],],
'10':[[390,177],],
'14':[[181,16],[274,26],[251,21],[164,14],[355,19],[197,388],[242,22],[58,40],[227,10],[70,593],[95,23],[160,15],[84,260],[153,465],[88,18],],
'16':[[39,164],],
'26':[[384,2588],],
'27':[[344,74],[161,30],[160,38],],
'54':[[381,530],[191,202],],
'56':[[88,47],],
'63':[[290,138],],
'77':[[304,242],],
'82':[[355,1502],[195,98],[88,25],[121,596],[83,129],[95,523],],
'86':[[52,325],],
'117':[[261,0],[49,0],[21,0],[226,0],[96,0],[188,0],[227,0],[390,0],[336,0],[164,0],[274,0],[39,0],[46,0],[181,0],[355,0],[160,0],[95,0],[251,0],[358,0],[242,0],[83,0],[161,0],[208,0],],
'128':[[199,32],],
'228':[[88,31],],
'247':[[88,35],],
'262':[[125,66],],
'264':[[313,414],],
'272':[[331,221],],
'279':[[88,27],],
'295':[[52,298],],
'343':[[53,142],[246,922],],
'375':[[29,193],[9,193],[352,155],[197,296],[341,276],[339,281],[193,155],[355,751],[83,39],[53,138],[227,44],[355,356],[249,114],[12,603],[39,562],[235,452],[164,234],[83,115],[324,35],[321,353],[49,81],[363,275],[227,205],[54,55],[313,185],[171,107],[48,71],[48,63],[223,55],[186,426],[218,310],[39,780],[12,632],[307,276],[374,36],[70,446],[41,382],[384,1336],[41,196],[277,50],[277,130],[277,183],[277,568],[277,993],],
'376':[[251,351],[88,52],],
'420':[[384,5442],],
'432':[[339,225],[277,999],[339,259],[12,638],[135,172],[344,80],[321,381],[321,319],],
'445':[[384,8479],],
'470':[[384,1497],],
'486':[[257,199],],
'494':[[384,7922],],
'510':[[12,57],],
'602':[[277,573],],
'621':[[331,538],],
'642':[[88,29],],
'648':[[88,21],],
'682':[[363,593],],
'733':[[18,81],],
'734':[[241,80],[38,201],[92,185],[354,97],],
'792':[[96,203],[96,199],],
'802':[[21,134],],
'820':[[21,187],[390,170],],
'821':[[21,195],],
'844':[[30,482],[384,246],],
'858':[[88,33],],
'869':[[358,393],],
'1123':[[384,855],],
'1143':[[246,15],],
'1180':[[355,1137],],
'1215':[[246,68],[246,122],[176,239],[274,259],[217,231],[246,135],[246,143],[246,180],[42,789],[246,218],[246,656],[246,1271],[246,126],[331,147],],
'1238':[[384,34],],
'1249':[[224,191],],
'1254':[[384,5948],],
'1367':[[355,1252],],
'1424':[[384,9121],],
'1503':[[226,84],],
'1504':[[46,84],],
'1505':[[336,174],],
'1831':[[48,3428],[306,676],[48,2969],],
'1910':[[84,133],],
'1911':[[384,807],],
'2045':[[164,534],],
'2051':[[58,21],[53,28],[50,28],],
'2511':[[188,358],],
'2512':[[208,108],[246,1826],],
'2989':[[218,104],[363,142],[313,165],],
'3204':[[274,837],],
'3229':[[384,8471],],
'3820':[[242,87],],
'4094':[[277,967],],
'4118':[[384,2671],],
'4269':[[331,393],],
'4368':[[335,2937],],
'4426':[[342,254],],
},{'1':[[0,1],[0,8],[0,13],[0,18],[274,8],[274,1],[274,27],[274,834],[274,838],[261,228],[0,186],[0,190],[0,194],[261,224],[261,219],[277,184],[261,18],[261,13],[261,7],[261,1],[257,200],[277,994],[251,352],[251,347],[251,13],[251,7],[249,115],[246,1827],[240,47],[227,321],[227,316],[227,311],[227,306],[227,301],[227,295],[227,290],[227,284],[227,279],[227,273],[227,268],[227,263],[227,259],[227,45],[227,11],[227,1],[226,89],[226,85],[226,81],[226,17],[226,12],[226,7],[226,1],[304,243],[9,194],[390,182],[208,111],[208,109],[390,178],[208,106],[208,101],[390,174],[208,96],[208,91],[208,86],[208,80],[208,75],[208,69],[208,64],[208,58],[208,53],[208,14],[208,11],[12,633],[208,7],[208,1],[307,277],[195,8],[193,156],[188,361],[390,18],[188,359],[188,13],[390,13],[188,10],[188,1],[321,354],[390,8],[390,1],[171,1160],[171,1080],[171,194],[171,189],[171,184],[171,179],[18,82],[171,174],[171,168],[171,163],[171,157],[19,85],[171,152],[171,146],[171,141],[171,136],[171,132],[171,125],[21,1],[21,7],[21,12],[21,17],[171,108],[331,14],[331,539],[336,1],[161,600],[161,596],[161,592],[21,191],[21,196],[21,200],[336,7],[336,12],[161,31],[161,12],[161,7],[161,1],[336,171],[336,175],[160,39],[336,179],[339,282],[274,13],[341,277],[139,14],[352,156],[121,597],[121,593],[121,8],[358,1],[358,7],[358,13],[358,18],[358,389],[96,204],[96,200],[96,196],[358,394],[358,398],[96,8],[29,194],[96,1],[88,61],[88,59],[88,57],[88,53],[88,48],[88,36],[88,22],[88,19],[88,9],[88,6],[83,1],[369,484],[63,88],[384,1498],[49,1],[48,72],[46,89],[46,85],[46,81],[46,17],[46,12],[46,7],[46,1],],
'2':[[277,679],[227,12],[384,4651],],
'3':[[384,1178],],
'5':[[21,204],],
'7':[[171,1330],[171,1340],[19,13],[174,288],[83,8],[195,3],[384,9953],[171,1088],[196,99],[159,172],[12,654],[303,205],[214,391],[387,110],[19,132],[49,523],[240,4],[48,4991],[195,92],[246,1981],[277,1015],[251,354],[339,316],],
'8':[[96,207],],
'9':[[30,464],[188,364],[161,42],[214,206],],
'10':[[0,197],],
'12':[[258,24],[258,5],[257,7],[277,772],[256,7],[43,9],[255,9],[254,8],[44,9],[253,9],[2,9],[45,7],[252,9],[1,9],[261,25],[251,17],[34,9],[3,9],[46,23],[394,9],[278,9],[250,9],[249,22],[279,7],[33,9],[248,21],[247,9],[262,7],[47,9],[280,9],[4,9],[48,20],[281,7],[282,9],[246,9],[263,9],[245,21],[283,9],[244,9],[284,9],[264,9],[285,9],[32,9],[49,15],[243,32],[286,7],[287,9],[242,18],[241,22],[288,7],[240,15],[277,11],[239,9],[265,5],[289,9],[50,9],[238,9],[237,9],[51,7],[384,2940],[290,38],[236,9],[235,7],[52,37],[291,9],[234,9],[233,9],[292,9],[293,9],[53,9],[232,7],[231,9],[230,7],[54,35],[41,9],[229,9],[294,9],[228,9],[5,7],[393,9],[55,9],[384,221],[6,9],[56,14],[7,7],[295,9],[57,9],[384,6],[296,9],[297,9],[58,9],[298,7],[299,9],[383,9],[392,9],[59,9],[265,18],[382,33],[382,9],[227,6],[60,9],[300,9],[8,9],[61,9],[226,23],[391,9],[62,9],[9,9],[301,9],[225,9],[63,15],[224,9],[302,9],[223,9],[64,9],[303,10],[222,9],[65,5],[221,9],[220,9],[219,7],[218,7],[66,5],[217,9],[216,9],[67,9],[303,191],[215,7],[266,37],[40,7],[304,7],[68,34],[42,7],[305,9],[259,7],[381,33],[213,9],[306,28],[212,9],[380,9],[211,13],[69,9],[210,9],[379,9],[209,9],[307,9],[70,32],[10,9],[378,9],[11,9],[12,9],[377,9],[208,21],[376,9],[276,9],[375,7],[275,9],[374,9],[206,9],[373,9],[205,9],[71,9],[71,33],[307,260],[204,9],[72,9],[372,9],[13,9],[73,7],[203,9],[202,9],[74,9],[308,7],[371,9],[201,9],[370,9],[200,9],[75,9],[199,9],[198,9],[76,9],[309,7],[310,9],[77,9],[31,9],[197,35],[78,9],[369,8],[311,7],[79,7],[267,7],[196,5],[311,33],[80,9],[39,8],[195,14],[81,9],[368,9],[390,24],[82,7],[268,9],[194,7],[312,7],[269,9],[83,14],[313,9],[367,9],[193,9],[366,5],[192,9],[314,9],[365,5],[84,27],[191,9],[315,9],[190,7],[189,9],[364,9],[260,9],[14,9],[85,9],[316,7],[188,19],[86,9],[363,9],[15,9],[87,9],[16,9],[187,9],[317,7],[318,7],[88,14],[395,9],[186,49],[319,7],[185,5],[184,7],[320,9],[30,40],[183,7],[182,9],[362,9],[321,39],[89,9],[181,12],[180,9],[90,9],[361,9],[322,9],[91,9],[179,32],[178,9],[92,15],[360,7],[323,7],[93,5],[177,9],[324,9],[94,9],[359,9],[176,61],[95,19],[176,47],[325,9],[175,7],[38,22],[270,9],[96,14],[326,7],[174,9],[29,9],[327,9],[173,9],[28,9],[214,9],[172,7],[97,9],[271,9],[37,9],[98,9],[328,9],[274,94],[99,9],[329,9],[17,9],[389,9],[18,7],[100,9],[19,8],[272,9],[101,9],[36,9],[20,9],[388,5],[102,42],[171,122],[21,24],[330,7],[103,9],[331,20],[331,90],[171,7],[104,9],[171,2],[170,9],[105,9],[169,9],[168,9],[106,9],[332,9],[167,9],[107,9],[333,7],[166,9],[108,7],[358,24],[165,7],[109,7],[385,5],[334,9],[110,9],[27,9],[335,32],[111,9],[164,10],[163,9],[112,9],[162,35],[273,9],[336,18],[113,9],[357,5],[396,9],[114,7],[22,23],[161,18],[115,9],[356,9],[274,22],[116,9],[23,9],[387,33],[117,9],[387,7],[160,11],[207,9],[118,9],[159,10],[158,7],[119,9],[337,9],[157,9],[120,9],[355,15],[156,7],[26,9],[121,20],[338,9],[155,7],[154,9],[339,36],[354,21],[35,18],[386,9],[24,9],[153,36],[122,9],[340,7],[152,9],[123,7],[353,9],[151,9],[124,17],[341,9],[150,9],[125,5],[25,9],[149,9],[352,9],[148,9],[147,9],[341,260],[351,7],[146,9],[126,7],[145,7],[342,7],[127,7],[350,7],[144,9],[128,9],[143,9],[343,9],[129,7],[349,9],[142,7],[130,9],[141,9],[344,37],[131,9],[348,9],[140,9],[132,9],[139,19],[138,9],[133,9],[347,9],[345,7],[134,9],[137,9],[136,7],[135,9],[346,9],[0,24],],
'13':[[384,2787],[384,7087],[384,6947],[384,6378],[384,3065],[384,3082],[384,3740],[384,4156],[384,5649],[384,5572],[384,5451],[384,5340],[384,4169],[384,8193],[384,8769],],
'14':[[249,26],[46,27],[261,152],[49,19],[358,28],[21,28],[336,22],[277,15],[0,28],[358,312],[174,13],[7,11],[226,27],[96,18],[248,25],[214,13],[12,13],[208,25],[390,28],[186,53],[83,18],[159,14],],
'15':[[341,252],[307,252],[308,86],[341,158],[307,158],[316,66],[341,138],[188,27],[384,8681],[307,138],[215,56],[183,56],[384,9036],[219,42],[293,64],[358,362],[234,406],[384,3537],[358,102],[261,197],[164,67],[163,30],[262,42],[23,64],[125,240],[121,425],],
'17':[[246,1811],],
'18':[[46,50],[226,50],],
'20':[[303,64],],
'23':[[7,120],[79,42],[391,39],[267,19],[58,38],[226,36],[12,626],[390,48],[381,631],[355,66],[7,61],[7,53],[392,39],[384,8418],[222,47],[54,120],[159,153],[52,358],[95,121],[355,376],[355,392],[384,2236],[384,2323],[171,1213],[336,74],[336,31],[52,31],[261,181],[179,40],[171,311],[358,341],[171,252],[261,91],[171,244],[4,45],[303,110],[0,47],[218,271],[161,236],[243,226],[181,462],[303,185],[68,121],[321,6],[161,481],[1,90],[41,331],[381,14],[102,20],[30,35],[102,202],[68,4],[162,6],[162,29],[42,507],[162,40],[30,509],[162,403],[68,15],[42,1163],[318,41],[277,824],[335,3789],[277,912],[277,987],[344,108],[335,15],[252,48],[164,89],[252,26],[334,67],[384,5196],[186,140],[384,7614],[58,42],[161,138],[214,239],[249,188],[249,180],[249,161],[249,141],[358,73],[249,123],[249,111],[46,36],[185,99],[249,53],[21,47],[384,5009],[249,6],[331,471],[30,302],[358,116],[279,41],[185,16],[88,45],[331,235],[358,192],],
'26':[[358,178],[381,68],[384,8689],[381,88],[381,58],[42,902],[30,83],[68,73],[21,57],[21,74],[21,87],[41,322],[161,276],[161,263],[358,202],[243,265],[358,219],[161,246],[161,197],[381,276],[161,86],[358,232],[321,137],[390,88],[390,75],[261,101],[261,118],[261,131],[49,137],[41,278],[277,115],[41,267],[125,43],[23,129],[0,87],[277,72],[65,134],[303,16],[293,129],[41,256],[390,58],[381,349],[41,245],[381,595],[41,234],[41,223],[41,206],[363,739],[84,277],[199,82],[0,74],[0,57],[191,88],[274,117],[339,192],[227,25],],
'33':[[227,52],[121,263],[174,280],[227,211],[277,3],[227,233],[227,238],[188,96],[188,46],[12,44],[12,3],[306,1412],[212,65],[277,375],[171,1325],[171,1301],[384,5606],[65,153],[186,274],[251,70],[249,260],[321,117],[384,4070],[331,463],[171,97],[171,104],[321,49],[246,281],[303,199],[48,101],[145,63],],
'36':[[321,386],],
'38':[[303,181],[102,219],],
'45':[[16,37],[74,37],[186,531],],
'49':[[79,62],],
'50':[[197,78],[70,95],],
'54':[[214,37],[384,1989],[384,1143],],
'56':[[185,101],],
'63':[[384,205],[161,385],[171,87],[227,102],[384,665],[162,90],[214,367],[303,135],],
'67':[[340,75],[249,96],[266,156],[308,108],[381,253],[384,6189],[249,86],[340,119],[384,7778],[308,152],],
'77':[[321,112],[384,7371],[381,456],[384,4866],[384,4748],[304,299],[277,348],[381,568],[153,1020],[355,131],[246,1387],[384,4098],[277,678],[266,80],[125,250],[304,307],[266,116],[49,459],[49,50],[384,6085],[84,213],[384,4084],[384,6832],[84,207],[384,879],[384,4474],],
'79':[[381,207],],
'80':[[266,166],[185,40],[266,374],[153,1425],[179,1638],[153,12],[179,24],[384,4778],[171,1237],[70,3],],
'82':[[306,1628],[311,112],[227,178],[227,22],[171,24],[121,605],[257,203],[195,95],[277,24],[19,135],[369,492],],
'83':[[249,334],],
'89':[[161,459],[354,33],[384,2137],[384,6763],[29,160],[9,160],[306,41],[188,89],],
'101':[[261,75],],
'103':[[197,646],[75,150],[364,63],[198,104],[369,498],[189,648],[315,218],[199,112],[74,149],[351,74],[200,324],[370,75],[188,370],[201,35],[73,97],[307,292],[202,35],[371,136],[72,94],[203,95],[71,100],[372,61],[204,90],[70,806],[147,44],[205,54],[373,123],[146,184],[206,113],[374,50],[363,770],[207,127],[12,660],[375,41],[84,587],[125,287],[376,51],[145,92],[14,63],[83,148],[149,47],[85,69],[86,273],[386,50],[15,57],[362,83],[11,62],[377,63],[10,368],[378,49],[9,209],[195,106],[208,120],[69,106],[306,1634],[209,284],[379,235],[187,214],[210,195],[68,141],[316,134],[211,181],[380,53],[87,104],[309,44],[186,537],[212,90],[124,73],[305,98],[213,495],[317,142],[341,292],[318,65],[396,199],[352,171],[304,413],[185,107],[79,68],[390,191],[184,51],[319,78],[340,178],[303,211],[183,127],[150,137],[320,184],[214,397],[67,72],[182,61],[29,209],[368,124],[215,127],[66,43],[181,1051],[216,54],[88,69],[361,120],[217,520],[65,193],[180,240],[89,495],[218,387],[179,1649],[350,234],[80,160],[219,66],[321,448],[90,73],[220,139],[360,67],[81,72],[221,44],[64,43],[178,332],[322,237],[222,69],[63,119],[302,176],[91,56],[223,69],[177,70],[301,95],[224,244],[92,193],[62,149],[225,57],[76,113],[359,161],[8,42],[61,101],[176,311],[144,56],[323,38],[93,150],[300,64],[324,49],[60,117],[7,195],[381,651],[226,98],[391,82],[59,102],[94,64],[382,100],[367,147],[175,47],[299,54],[58,73],[358,407],[95,532],[298,80],[174,294],[297,47],[123,51],[57,323],[296,179],[194,126],[383,38],[325,41],[295,54],[151,64],[314,121],[56,74],[326,64],[173,345],[28,99],[126,47],[384,9959],[6,107],[392,61],[55,46],[5,93],[54,1547],[172,177],[4,67],[393,41],[294,59],[227,342],[327,38],[82,575],[228,58],[310,36],[293,150],[229,208],[31,62],[27,78],[230,38],[53,158],[127,80],[231,133],[97,53],[52,367],[292,70],[77,159],[232,147],[122,155],[291,47],[233,55],[328,46],[143,78],[193,171],[234,434],[389,64],[290,689],[235,510],[342,341],[51,53],[236,48],[50,125],[289,205],[237,54],[349,97],[49,529],[238,42],[98,57],[288,63],[239,40],[142,193],[16,149],[329,81],[128,235],[240,61],[129,37],[287,116],[241,88],[17,47],[99,312],[286,56],[388,99],[242,223],[285,166],[141,99],[48,4997],[284,240],[18,90],[100,218],[311,118],[283,264],[243,292],[343,118],[348,40],[244,264],[19,141],[282,45],[245,84],[101,91],[140,50],[20,195],[102,225],[281,30],[330,48],[152,237],[47,47],[280,136],[13,48],[279,63],[46,98],[246,1987],[30,517],[103,137],[247,277],[32,38],[130,38],[170,289],[248,83],[104,38],[169,82],[131,182],[312,76],[168,50],[331,550],[105,81],[3,50],[167,60],[332,202],[106,70],[166,39],[353,199],[107,37],[278,81],[78,40],[249,340],[165,95],[333,38],[250,144],[139,72],[33,66],[108,36],[164,677],[277,1021],[34,148],[2,44],[394,216],[45,48],[251,360],[109,44],[334,103],[121,611],[44,160],[252,107],[110,56],[26,61],[253,240],[43,37],[163,90],[254,253],[347,76],[148,178],[255,39],[42,1340],[24,42],[256,47],[111,98],[1,123],[366,50],[257,209],[162,412],[335,3807],[385,83],[258,92],[41,402],[161,610],[259,64],[138,53],[387,116],[260,114],[357,62],[21,210],[395,157],[196,105],[112,159],[113,83],[308,211],[356,71],[114,81],[115,48],[22,66],[344,375],[355,1512],[160,714],[132,47],[25,105],[0,203],[116,140],[159,178],[117,60],[261,238],[23,150],[137,286],[192,54],[262,61],[158,63],[133,141],[263,113],[336,189],[118,233],[264,43],[157,89],[40,51],[119,37],[265,60],[276,93],[156,146],[39,1002],[337,124],[120,40],[155,61],[313,498],[275,46],[365,242],[346,43],[266,407],[171,1346],[354,105],[274,849],[267,41],[38,209],[190,91],[268,69],[154,51],[338,105],[269,237],[37,102],[153,1450],[270,264],[136,37],[36,206],[271,54],[345,91],[96,213],[272,64],[35,61],[191,313],[273,63],[134,174],[135,236],[339,322],],
'107':[[54,1541],],
'117':[[63,0],[303,0],],
'118':[[74,143],],
'119':[[58,67],],
'120':[[1,117],],
'125':[[264,37],],
'126':[[330,42],],
'128':[[197,40],[70,37],[379,105],[306,33],[312,17],[179,37],[54,40],[48,25],[335,37],[153,41],[357,30],],
'129':[[371,29],[59,24],[1,24],],
'130':[[381,42],[321,75],[74,105],[70,98],[197,81],[16,105],],
'133':[[186,83],[358,335],[261,175],],
'136':[[171,84],],
'137':[[335,3801],],
'138':[[179,909],[48,1714],[54,311],[335,159],],
'140':[[321,177],[84,577],[355,680],[164,44],[277,696],[266,65],[84,20],[7,32],[52,16],[52,345],[277,866],[243,286],[52,361],[70,53],[39,558],[171,223],[384,2117],[48,388],[303,124],[214,308],[384,4650],[266,5],[48,127],[70,112],[266,401],[232,55],[12,594],[161,577],[164,31],[70,140],[306,113],],
'141':[[280,130],],
'147':[[358,369],[70,333],],
'149':[[179,89],],
'150':[[214,199],],
'151':[[334,97],],
'152':[[174,105],[243,101],],
'154':[[214,193],],
'155':[[384,6550],[336,60],[59,74],[186,304],[1,74],[242,200],],
'165':[[274,843],],
'167':[[381,645],[162,406],],
'169':[[16,124],[74,124],[156,140],],
'170':[[25,99],],
'171':[[6,101],],
'172':[[2,38],],
'178':[[145,86],],
'179':[[61,95],],
'180':[[67,66],],
'181':[[3,44],],
'187':[[181,1045],],
'188':[[392,55],],
'189':[[318,59],],
'190':[[4,61],],
'192':[[279,57],],
'197':[[352,137],[193,137],[321,194],],
'199':[[186,360],[7,189],[321,341],],
'203':[[301,75],],
'209':[[265,54],],
'210':[[206,107],],
'211':[[359,155],],
'215':[[303,20],],
'220':[[160,413],],
'228':[[319,72],[354,99],],
'230':[[176,124],[70,206],],
'232':[[66,37],],
'233':[[5,87],],
'234':[[370,69],],
'235':[[300,58],],
'237':[[69,52],],
'241':[[227,68],[171,62],],
'247':[[97,47],[241,82],],
'264':[[235,504],],
'266':[[246,1688],],
'269':[[84,581],[214,126],],
'275':[[243,13],[243,272],[381,3],[384,3719],[384,202],[68,26],[227,228],[68,52],[384,9147],[68,40],[171,1307],[384,4522],[174,3],[7,68],[384,4007],[171,259],[384,4515],[384,4498],[384,1470],[384,4487],[384,662],[41,299],[68,130],],
'277':[[303,30],[125,224],[153,512],[384,4019],[277,576],],
'278':[[68,135],],
'279':[[290,140],[70,800],[92,187],],
'284':[[344,369],],
'287':[[390,163],[290,683],[21,180],],
'289':[[30,511],],
'292':[[321,442],],
'301':[[174,24],],
'302':[[176,305],],
'308':[[51,47],],
'309':[[56,68],],
'310':[[8,36],],
'317':[[8,23],],
'321':[[303,193],[153,1444],],
'322':[[254,247],],
'323':[[149,41],],
'324':[[127,74],],
'325':[[9,203],],
'330':[[182,55],],
'337':[[308,205],[274,45],[99,119],],
'346':[[303,28],[384,6844],[68,99],[384,4017],[384,5582],],
'347':[[172,171],],
'357':[[340,161],[112,74],[308,194],],
'370':[[355,1477],[277,600],[277,282],[153,31],[49,116],[214,115],[249,322],[153,1442],[277,219],[54,1531],[54,20],[197,11],[185,65],[171,1262],],
'373':[[223,44],[29,189],[9,189],],
'375':[[336,132],[214,47],],
'376':[[375,35],[331,544],[336,183],[274,31],],
'377':[[189,642],],
'378':[[213,489],],
'379':[[10,362],],
'381':[[202,29],],
'387':[[223,63],],
'391':[[291,41],],
'394':[[256,41],],
'399':[[41,396],],
'402':[[190,85],],
'407':[[122,149],],
'414':[[194,120],],
'420':[[99,301],[70,59],[387,90],[341,34],[23,25],[190,41],[340,27],[293,25],[381,243],[160,31],[384,4051],[183,23],[311,90],[381,297],[384,7768],[384,7716],[164,122],[215,23],[384,6264],[384,6178],[307,34],[384,4787],[308,27],],
'421':[[250,138],],
'426':[[84,234],],
'449':[[42,1264],],
'453':[[251,116],],
'468':[[49,141],],
'474':[[124,67],],
'475':[[224,238],],
'476':[[346,37],],
'477':[[11,56],],
'478':[[345,85],],
'479':[[303,132],],
'485':[[204,84],],
'486':[[63,113],],
'489':[[227,54],],
'492':[[171,48],],
'506':[[277,317],[307,239],[186,486],[49,113],[308,74],[321,70],[381,584],[341,239],[277,890],[121,45],[384,232],[49,129],],
'507':[[384,3375],[384,3386],],
'512':[[12,61],],
'522':[[48,3592],[306,922],],
'546':[[384,8428],],
'549':[[12,201],],
'554':[[12,369],[277,158],[188,107],],
'562':[[266,288],[303,115],],
'567':[[186,389],],
'601':[[277,975],[277,793],[277,190],[355,1130],[355,171],[30,446],[121,585],[12,389],],
'615':[[70,126],],
'621':[[83,142],],
'633':[[13,42],],
'634':[[302,170],],
'642':[[195,100],],
'648':[[18,84],[227,163],[226,59],[49,72],[303,39],[46,59],[227,247],],
'649':[[214,364],],
'650':[[171,14],],
'651':[[315,212],],
'652':[[128,229],],
'654':[[395,151],],
'657':[[85,63],],
'658':[[231,127],],
'659':[[14,57],],
'664':[[309,38],],
'667':[[242,217],],
'668':[[168,44],],
'669':[[376,45],],
'670':[[15,51],],
'674':[[68,112],],
'682':[[278,75],],
'683':[[239,34],],
'684':[[16,143],],
'686':[[380,47],],
'690':[[386,44],],
'694':[[214,159],],
'696':[[308,127],[340,94],],
'700':[[384,3773],],
'705':[[331,512],[145,71],[212,73],],
'708':[[17,41],],
'709':[[388,93],],
'710':[[164,671],],
'717':[[106,64],],
'718':[[353,193],],
'722':[[261,70],],
'723':[[161,507],],
'733':[[385,77],],
'736':[[39,996],],
'737':[[136,31],],
'738':[[32,32],],
'740':[[126,41],],
'741':[[221,38],[83,134],],
'742':[[123,45],],
'743':[[158,57],],
'744':[[236,42],],
'745':[[289,199],],
'746':[[134,168],],
'747':[[322,231],],
'748':[[115,42],],
'749':[[117,54],],
'750':[[349,91],],
'751':[[167,54],],
'752':[[314,115],],
'753':[[91,50],],
'754':[[200,318],],
'755':[[240,55],],
'756':[[340,172],],
'757':[[120,34],],
'758':[[341,286],],
'759':[[293,144],],
'761':[[183,121],],
'762':[[298,74],],
'763':[[297,41],],
'764':[[29,203],],
'765':[[352,165],],
'766':[[71,94],],
'767':[[285,160],],
'768':[[146,178],],
'769':[[20,189],],
'772':[[259,58],],
'785':[[135,230],],
'791':[[164,145],],
'792':[[208,114],],
'800':[[179,1643],],
'821':[[161,604],],
'823':[[22,60],],
'824':[[222,63],],
'825':[[112,153],],
'826':[[144,50],],
'827':[[140,44],],
'828':[[326,58],],
'829':[[62,143],],
'830':[[307,286],],
'831':[[78,34],],
'832':[[23,144],],
'833':[[193,165],],
'844':[[384,6207],],
'852':[[43,31],],
'853':[[119,31],],
'854':[[24,36],],
'858':[[38,203],],
'861':[[277,399],],
'862':[[368,118],],
'863':[[101,85],],
'864':[[26,55],],
'865':[[274,136],],
'869':[[261,232],],
'871':[[50,119],],
'872':[[53,152],],
'873':[[27,72],],
'880':[[384,1997],],
'881':[[237,48],],
'882':[[216,48],],
'883':[[28,93],],
'884':[[321,77],],
'912':[[30,101],],
'921':[[304,262],[261,199],],
'926':[[355,1506],],
'931':[[83,111],],
'937':[[117,31],[167,31],],
'940':[[197,640],],
'979':[[277,774],],
'986':[[212,84],],
'987':[[199,106],],
'988':[[31,56],],
'998':[[163,84],],
'999':[[45,42],],
'1000':[[33,60],],
'1007':[[73,91],],
'1009':[[34,142],],
'1010':[[35,55],],
'1011':[[215,121],],
'1012':[[382,94],],
'1013':[[252,101],],
'1014':[[36,200],],
'1021':[[269,231],],
'1023':[[147,38],],
'1024':[[47,41],],
'1025':[[37,96],],
'1028':[[350,228],],
'1030':[[248,77],],
'1037':[[129,31],],
'1040':[[312,70],],
'1041':[[110,50],],
'1042':[[166,33],],
'1043':[[255,33],],
'1044':[[348,34],],
'1045':[[378,43],],
'1046':[[109,38],],
'1047':[[316,128],],
'1048':[[272,58],],
'1049':[[133,135],],
'1050':[[379,229],],
'1051':[[60,111],],
'1052':[[232,141],],
'1053':[[82,569],],
'1054':[[165,89],],
'1055':[[286,50],],
'1056':[[113,77],],
'1057':[[44,154],],
'1058':[[263,107],],
'1059':[[338,99],],
'1060':[[203,89],],
'1061':[[287,110],],
'1062':[[69,100],],
'1063':[[276,87],],
'1064':[[273,57],],
'1065':[[364,57],],
'1066':[[347,70],],
'1067':[[343,112],],
'1068':[[394,210],],
'1069':[[137,280],],
'1070':[[173,339],],
'1071':[[86,267],],
'1072':[[57,317],],
'1073':[[283,258],],
'1074':[[187,208],],
'1075':[[284,234],],
'1076':[[100,212],],
'1077':[[148,172],],
'1078':[[207,121],],
'1079':[[229,202],],
'1080':[[332,196],],
'1081':[[260,108],],
'1082':[[131,176],],
'1083':[[77,153],],
'1084':[[247,271],],
'1085':[[270,258],],
'1086':[[209,278],],
'1087':[[210,189],],
'1088':[[180,234],],
'1089':[[64,37],],
'1090':[[55,40],],
'1091':[[238,36],],
'1092':[[177,64],],
'1093':[[325,35],],
'1094':[[282,39],],
'1095':[[393,35],],
'1096':[[228,52],],
'1097':[[356,65],],
'1098':[[323,32],],
'1099':[[107,31],],
'1101':[[277,847],],
'1125':[[390,102],],
'1249':[[246,1972],],
'1270':[[262,55],],
'1271':[[40,45],],
'1277':[[219,60],],
'1278':[[351,68],],
'1310':[[227,36],[171,41],],
'1314':[[242,25],[95,526],],
'1319':[[335,3381],],
'1321':[[211,175],],
'1327':[[42,1334],],
'1341':[[217,514],],
'1350':[[366,32],],
'1355':[[361,114],],
'1369':[[334,30],],
'1370':[[355,495],[153,1229],],
'1377':[[184,45],],
'1381':[[357,46],],
'1385':[[384,6306],],
'1392':[[104,32],],
'1395':[[94,58],],
'1398':[[197,141],[70,260],],
'1420':[[130,32],],
'1424':[[384,2829],],
'1425':[[344,43],],
'1452':[[277,897],],
'1493':[[152,231],],
'1501':[[160,708],],
'1503':[[358,401],],
'1504':[[390,185],],
'1505':[[46,92],[214,215],],
'1511':[[294,53],],
'1512':[[275,40],],
'1513':[[333,32],],
'1591':[[179,962],],
'1603':[[125,13],],
'1635':[[277,609],[277,606],[83,45],],
'1682':[[335,3453],],
'1704':[[143,72],],
'1705':[[141,93],],
'1709':[[59,96],],
'1711':[[335,173],[197,170],[179,923],[70,289],],
'1720':[[366,44],],
'1722':[[65,187],],
'1724':[[175,41],],
'1843':[[52,221],],
'1860':[[48,3650],],
'1914':[[381,325],],
'1947':[[244,258],],
'1953':[[372,55],],
'1955':[[142,187],],
'1966':[[220,133],],
'2013':[[234,428],],
'2014':[[178,326],],
'2038':[[305,92],],
'2048':[[139,66],],
'2067':[[268,63],],
'2069':[[201,29],],
'2133':[[295,48],],
'2135':[[93,144],],
'2149':[[355,105],],
'2152':[[352,132],[193,132],],
'2161':[[320,178],],
'2181':[[99,306],],
'2211':[[396,193],],
'2222':[[170,283],],
'2249':[[391,76],],
'2250':[[281,24],],
'2251':[[301,89],],
'2252':[[267,35],],
'2253':[[230,32],],
'2264':[[232,95],[57,234],],
'2270':[[371,130],],
'2290':[[389,58],],
'2291':[[151,58],],
'2314':[[355,361],],
'2318':[[155,55],],
'2327':[[150,65],],
'2341':[[339,167],],
'2357':[[253,234],],
'2369':[[118,227],],
'2370':[[72,88],],
'2375':[[132,41],],
'2376':[[324,43],],
'2377':[[75,144],],
'2378':[[337,118],],
'2383':[[363,764],],
'2385':[[80,154],],
'2386':[[76,107],],
'2402':[[296,173],],
'2413':[[157,83],],
'2414':[[81,66],],
'2495':[[96,154],],
'2503':[[258,86],],
'2504':[[87,98],],
'2511':[[227,336],],
'2512':[[88,63],[188,78],],
'2513':[[233,49],],
'2514':[[89,489],],
'2531':[[218,381],],
'2535':[[111,92],],
'2537':[[116,134],],
'2538':[[310,30],],
'2539':[[90,67],],
'2548':[[313,492],],
'2549':[[373,117],],
'2550':[[367,141],],
'2551':[[292,64],],
'2552':[[383,32],],
'2553':[[327,32],],
'2554':[[138,47],],
'2555':[[98,51],],
'2556':[[374,44],],
'2557':[[329,75],],
'2558':[[225,51],],
'2559':[[191,307],],
'2560':[[377,57],],
'2585':[[321,278],],
'2589':[[96,35],],
'2610':[[307,96],[341,96],],
'2612':[[317,136],],
'2613':[[365,236],],
'2639':[[301,23],],
'2657':[[198,98],],
'2675':[[384,6016],[384,5228],[384,3788],[384,2478],],
'2678':[[150,131],],
'2679':[[328,40],],
'2680':[[103,131],],
'2683':[[103,65],],
'2694':[[288,57],],
'2695':[[360,61],],
'2696':[[105,75],],
'2708':[[342,335],],
'2709':[[108,30],],
'2711':[[304,407],],
'2715':[[193,67],[352,67],],
'2728':[[357,56],],
'2729':[[114,75],],
'2744':[[121,26],[246,18],],
'2811':[[125,84],],
'2836':[[160,132],[243,38],],
'2856':[[125,281],],
'2894':[[169,76],],
'2895':[[299,48],],
'2896':[[271,48],],
'2897':[[205,48],],
'2898':[[192,48],],
'2914':[[154,45],],
'2925':[[362,77],],
'2949':[[381,110],],
'2976':[[277,58],],
'2981':[[355,803],[277,168],],
'3059':[[384,9474],],
'3092':[[176,64],[160,669],[390,98],],
'3093':[[160,681],],
'3099':[[161,57],],
'3195':[[171,30],[227,99],],
'3196':[[384,4009],],
'3202':[[171,77],[227,83],],
'3204':[[226,92],],
'3205':[[245,78],],
'3486':[[251,181],[179,675],],
'3593':[[304,275],],
'3785':[[227,108],],
'3787':[[277,35],[227,190],],
'3955':[[246,1813],],
'3960':[[246,1913],],
'3962':[[246,1932],],
'4192':[[384,3036],],
'4394':[[336,120],],
'4396':[[336,143],],
'4405':[[384,8057],[384,3157],],
'4515':[[358,275],],
'4597':[[384,648],],
'4629':[[384,2896],[384,2859],[384,3730],],
'4682':[[384,4114],],
'4697':[[390,127],],
'4874':[[390,119],],
'4903':[[384,6696],],
},{'2':[[0,2],[0,9],[0,14],[0,19],[390,183],[390,179],[390,175],[390,19],[0,187],[0,191],[0,195],[390,14],[390,9],[390,2],[384,1499],[358,399],[358,395],[358,390],[358,276],[358,19],[358,14],[12,634],[358,8],[358,2],[21,2],[21,8],[21,13],[21,18],[339,283],[336,176],[336,172],[21,192],[21,197],[21,201],[336,144],[336,23],[336,13],[336,8],[336,2],[321,355],[304,244],[277,995],[274,835],[274,9],[261,229],[261,225],[261,220],[261,19],[261,14],[261,8],[261,2],[249,116],[227,317],[227,312],[227,307],[227,302],[227,296],[227,291],[227,285],[227,280],[227,274],[227,269],[227,264],[226,90],[226,86],[226,82],[226,60],[226,28],[46,2],[46,8],[46,13],[46,18],[46,28],[46,60],[46,82],[46,86],[46,90],[226,18],[226,13],[226,8],[226,2],[208,112],[208,102],[208,97],[208,92],[208,87],[208,81],[208,76],[208,70],[208,65],[208,59],[208,54],[208,2],[188,362],[188,14],[171,190],[171,185],[171,180],[171,175],[171,169],[171,164],[171,158],[171,153],[171,147],[171,142],[171,137],[161,601],[161,597],[161,593],[161,58],[161,43],[161,32],[161,13],[161,8],[161,2],[96,205],[96,201],[96,197],[96,9],[96,2],[88,37],],
'16':[[42,843],[194,53],[76,34],[321,221],[246,454],[48,359],],
'17':[[384,5769],[188,71],],
'20':[[249,125],[384,2459],],
'31':[[39,715],[339,107],[274,440],],
'42':[[277,195],[42,1257],],
'47':[[358,261],],
'48':[[181,772],[181,631],],
'49':[[232,123],[164,137],[21,99],[0,99],[181,500],[153,1028],[181,510],],
'52':[[21,112],[0,105],],
'53':[[340,44],[308,44],],
'54':[[214,313],[164,529],[277,604],[30,461],[189,433],],
'55':[[246,1935],[246,1087],],
'56':[[21,130],[0,115],[249,132],],
'60':[[277,247],],
'61':[[243,233],[246,1651],],
'62':[[153,249],[287,44],[49,420],[44,50],[6,63],[54,663],[384,9853],[54,536],[0,126],[95,230],[49,411],[249,245],[49,449],],
'63':[[165,73],],
'65':[[320,136],[296,90],[277,732],],
'67':[[308,173],[340,140],],
'79':[[341,200],[307,200],[174,146],[303,46],[384,2060],[164,615],],
'81':[[384,9923],],
'82':[[384,1364],[200,285],[384,6112],],
'83':[[30,282],[355,837],[384,2818],[384,2823],],
'126':[[261,172],[358,332],],
'137':[[344,101],[355,791],],
'149':[[54,1260],],
'150':[[112,28],[218,349],[186,460],],
'152':[[246,561],],
'155':[[161,400],],
'162':[[152,81],],
'165':[[181,1001],],
'167':[[246,834],[277,628],[12,372],],
'178':[[384,217],],
'195':[[181,226],],
'197':[[301,78],],
'199':[[277,261],[208,45],[162,86],[277,104],],
'203':[[84,239],[384,6075],],
'206':[[112,120],],
'208':[[304,366],],
'215':[[48,2573],],
'222':[[160,345],[48,4005],],
'225':[[29,96],[289,83],[224,80],[39,418],[95,94],[9,96],[39,260],[315,83],[213,362],[99,210],],
'230':[[384,1877],],
'231':[[364,24],[276,24],[276,41],],
'232':[[394,167],[160,172],[304,343],],
'233':[[33,30],[259,28],[160,224],[45,26],[160,120],[163,37],],
'238':[[49,89],[365,204],],
'241':[[42,1111],[384,6998],],
'244':[[200,140],[257,102],],
'250':[[178,272],[186,236],],
'252':[[246,551],],
'256':[[48,650],[335,3482],],
'258':[[304,182],],
'263':[[41,376],],
'264':[[201,23],],
'269':[[164,469],],
'270':[[176,151],[384,2796],[39,721],],
'271':[[39,676],],
'276':[[304,356],],
'277':[[363,676],[199,69],],
'281':[[384,3090],],
'285':[[54,820],],
'299':[[186,192],],
'302':[[186,264],],
'306':[[246,842],],
'343':[[384,5448],],
'350':[[307,70],[384,9581],[54,1458],[326,39],[153,699],[341,70],],
'355':[[274,779],],
'359':[[112,135],[335,1004],[274,657],],
'369':[[186,468],[384,1696],],
'370':[[321,145],[214,249],[57,278],[161,543],],
'371':[[9,181],[29,181],],
'381':[[153,482],],
'419':[[257,167],],
'422':[[83,101],],
'426':[[42,296],],
'432':[[70,450],[197,300],],
'436':[[48,2181],],
'458':[[28,57],],
'462':[[36,143],[181,57],[27,23],],
'466':[[215,84],[384,9479],[183,84],],
'469':[[335,467],],
'470':[[164,386],[89,210],],
'481':[[344,251],],
'488':[[181,890],],
'491':[[306,92],[12,123],],
'493':[[384,1391],[384,2219],],
'498':[[287,83],[181,592],[218,289],[331,57],],
'502':[[48,4319],[235,250],],
'506':[[335,2032],],
'512':[[384,5198],],
'516':[[95,426],],
'520':[[12,510],],
'527':[[342,149],],
'530':[[384,5896],[12,135],[186,79],[355,1433],[12,140],],
'554':[[179,983],[246,1035],[12,220],[179,71],[246,880],],
'567':[[162,300],],
'584':[[246,1964],[290,71],],
'593':[[384,6961],],
'595':[[178,237],],
'600':[[246,767],],
'642':[[48,3043],],
'645':[[12,628],[277,989],],
'648':[[384,373],[161,425],[214,26],],
'649':[[161,306],],
'655':[[93,128],],
'681':[[394,163],[394,182],[101,19],],
'698':[[384,2655],],
'700':[[384,5232],],
'714':[[155,27],[48,1546],[232,101],[39,325],[335,3359],[17,29],],
'776':[[181,854],],
'784':[[54,1453],],
'785':[[20,162],],
'791':[[384,1330],],
'836':[[321,227],[293,83],[23,83],],
'839':[[340,37],[308,37],],
'840':[[384,4272],[384,7376],],
'866':[[91,36],[39,251],[214,211],[214,203],],
'881':[[186,226],],
'894':[[186,113],],
'904':[[384,3847],],
'926':[[384,8591],[95,194],[384,7751],[384,5248],],
'927':[[49,206],[341,110],[30,152],[307,110],],
'932':[[30,403],],
'955':[[246,1743],],
'960':[[95,300],[54,733],],
'963':[[30,360],],
'967':[[30,384],],
'1007':[[163,56],[181,81],[274,817],[33,48],[160,326],[102,165],[259,46],[49,273],[163,72],],
'1015':[[36,51],],
'1016':[[246,1794],[54,1477],[49,327],[218,213],],
'1019':[[343,95],[247,120],[173,146],[57,125],[131,115],[86,118],[77,100],[270,122],[137,101],[181,904],],
'1033':[[164,574],[342,241],],
'1056':[[283,152],],
'1062':[[181,870],],
'1079':[[186,168],],
'1101':[[246,1523],[246,861],[277,710],],
'1108':[[384,3211],[384,3001],],
'1117':[[249,60],[246,971],],
'1123':[[355,1401],[355,1375],],
'1125':[[384,5444],],
'1146':[[342,166],],
'1151':[[384,3501],],
'1202':[[384,7855],],
'1245':[[42,151],],
'1246':[[162,215],],
'1255':[[384,1889],[384,3348],],
'1261':[[384,7742],],
'1279':[[296,120],],
'1308':[[384,67],],
'1310':[[384,2620],[242,39],[384,3437],],
'1319':[[384,7080],],
'1332':[[384,5358],[335,541],],
'1337':[[384,4284],],
'1399':[[42,481],],
'1402':[[331,36],[42,501],[246,675],],
'1404':[[384,1309],],
'1424':[[384,3736],[284,206],[384,762],[384,4150],[181,476],[384,1965],[384,4585],],
'1462':[[384,2153],[384,1958],],
'1473':[[290,75],],
'1474':[[384,4456],],
'1476':[[42,1175],[344,259],],
'1499':[[321,349],[52,183],[355,869],[153,895],[258,45],[44,126],],
'1552':[[384,3441],],
'1593':[[153,716],],
'1604':[[48,606],],
'1606':[[350,170],],
'1673':[[121,435],],
'1705':[[370,41],],
'1728':[[384,7519],],
'1746':[[384,2042],],
'1778':[[65,107],],
'1812':[[204,74],],
'1840':[[270,209],[249,49],[209,203],[77,122],[332,146],[247,207],[131,137],[186,308],],
'1866':[[314,105],],
'1867':[[176,241],],
'1947':[[384,6618],],
'1955':[[335,956],[99,238],],
'1965':[[48,4743],],
'1967':[[384,3793],],
'2003':[[49,163],],
'2005':[[49,191],],
'2006':[[274,349],[222,21],[153,1088],[181,104],[274,572],[352,150],[260,95],[54,783],[181,244],[335,870],[49,195],[193,150],[362,65],[54,807],[49,293],[274,712],],
'2021':[[49,345],],
'2025':[[384,9636],],
'2038':[[160,236],],
'2068':[[52,208],],
'2105':[[246,1221],],
'2111':[[384,7517],],
'2139':[[156,128],],
'2151':[[54,700],[95,267],],
'2153':[[54,681],[95,248],],
'2157':[[95,280],[54,713],[54,1494],],
'2234':[[274,704],[160,410],],
'2313':[[188,39],],
'2342':[[384,8254],[384,7020],],
'2371':[[191,297],[384,5258],],
'2381':[[220,50],],
'2388':[[199,41],[363,648],[384,6992],],
'2392':[[76,57],[152,112],[335,514],],
'2420':[[82,425],],
'2438':[[165,56],[229,165],],
'2509':[[283,142],[273,23],[283,164],],
'2589':[[161,140],[161,376],[339,198],],
'2631':[[384,2424],],
'2635':[[274,497],],
'2648':[[179,659],],
'2649':[[332,61],[100,52],[284,55],[135,57],[209,79],[269,54],],
'2671':[[384,554],],
'2686':[[384,1459],],
'2702':[[188,130],],
'2705':[[106,55],],
'2715':[[112,22],],
'2721':[[137,239],[173,284],],
'2823':[[125,138],],
'2836':[[277,715],],
'2852':[[331,528],],
'2867':[[384,441],],
'2895':[[269,197],],
'2898':[[269,193],],
'2977':[[224,225],],
'3002':[[384,501],[160,158],[153,1146],[153,1368],],
'3004':[[384,6911],],
'3006':[[153,1296],],
'3029':[[159,74],],
'3041':[[159,100],],
'3071':[[160,262],],
'3133':[[339,273],[161,529],],
'3163':[[164,490],],
'3165':[[355,879],[164,510],],
'3196':[[384,234],],
'3207':[[235,456],[277,839],[188,346],],
'3217':[[384,4530],[246,712],],
'3229':[[384,8495],],
'3553':[[180,203],],
'3572':[[384,3488],],
'3586':[[181,640],],
'3637':[[277,97],],
'3695':[[194,66],],
'3714':[[203,54],[263,52],[338,48],],
'3739':[[384,266],[214,20],],
'3769':[[335,564],],
'3789':[[227,201],[277,46],],
'3847':[[246,1124],],
'3906':[[246,1062],],
'3911':[[384,2388],],
'3993':[[251,290],],
'3998':[[251,333],],
'4011':[[257,136],],
'4044':[[273,40],],
'4060':[[274,687],],
'4063':[[276,53],],
'4081':[[384,5216],],
'4228':[[384,1810],],
'4303':[[335,992],],
'4489':[[355,1134],],
'4633':[[384,194],[384,1177],],
'4667':[[384,421],],
'4672':[[384,463],],
'4683':[[384,2802],],
'4684':[[384,7192],],
'4686':[[384,619],],
'4791':[[384,1691],],
'4810':[[384,2121],],
'4910':[[384,7994],],
'5050':[[384,5762],],
'5111':[[384,7402],],
'5117':[[384,7612],],
'5138':[[384,8179],],
'5154':[[384,8794],],
'5208':[[384,9780],],
},{'3':[[0,3],[21,19],[21,202],[171,159],[208,71],[227,286],[261,9],[261,221],],
'275':[[384,7323],],
},{'3':[[384,5249],[0,100],[0,106],[0,116],[384,5233],],
'4':[[21,20],[0,4],[21,203],[171,160],[261,222],[208,72],[227,287],[261,10],],
'13':[[384,710],[384,5523],],
'15':[[384,6380],[0,30],],
'33':[[384,4616],],
'196':[[206,57],],
'217':[[21,148],],
'1503':[[384,7196],],
'2675':[[384,4637],],
'4861':[[384,7325],],
},{'2':[[171,3],[227,2],],
'5':[[0,5],],
'8':[[21,4],],
'9':[[208,4],],
'10':[[261,4],],
'14':[[384,2],],
'38':[[176,12],],
'45':[[339,14],],
'49':[[38,5],],
'56':[[249,8],[185,1],],
'82':[[63,3],[48,6],[83,4],[331,5],[277,7],[124,3],[92,3],],
'83':[[335,7],],
'107':[[306,7],],
'118':[[1,1],],
'119':[[74,1],],
'120':[[16,1],],
'125':[[391,1],],
'126':[[304,1],],
'137':[[179,9],],
'140':[[344,6],[162,9],[52,9],],
'141':[[334,1],],
'151':[[59,1],],
'165':[[251,4],],
'167':[[68,7],[243,8],],
'169':[[245,4],],
'170':[[2,1],],
'171':[[25,1],],
'172':[[17,1],],
'178':[[241,3],],
'179':[[3,1],],
'180':[[61,1],],
'181':[[300,1],],
'187':[[312,1],],
'188':[[4,1],],
'189':[[392,1],],
'190':[[222,1],],
'192':[[79,1],],
'199':[[84,9],],
'209':[[22,3],],
'210':[[5,1],],
'211':[[206,1],],
'228':[[160,2],[265,1],],
'232':[[354,4],],
'233':[[73,1],],
'234':[[6,1],],
'235':[[370,1],],
'247':[[143,1],[164,2],],
'262':[[7,3],],
'264':[[363,1],],
'269':[[266,9],],
'278':[[381,8],],
'279':[[355,2],[153,7],],
'284':[[290,13],],
'287':[[30,9],],
'289':[[321,8],],
'292':[[102,12],],
'302':[[186,13],],
'308':[[8,1],],
'309':[[51,1],],
'310':[[182,1],],
'321':[[197,13],],
'322':[[56,2],],
'323':[[9,1],],
'324':[[149,1],],
'325':[[193,1],],
'330':[[264,1],],
'337':[[78,1],],
'347':[[42,1],],
'376':[[240,2],[35,2],[274,5],],
'377':[[10,1],],
'378':[[189,1],],
'379':[[234,1],],
'381':[[142,1],],
'387':[[199,1],],
'391':[[231,1],],
'394':[[351,1],],
'399':[[291,1],],
'402':[[323,1],],
'407':[[359,1],],
'414':[[152,1],],
'421':[[367,1],],
'474':[[377,1],],
'475':[[11,1],],
'476':[[224,1],],
'477':[[204,1],],
'478':[[395,1],],
'485':[[289,1],],
'486':[[195,1],],
'489':[[12,5],],
'621':[[121,5],],
'633':[[302,1],],
'634':[[322,1],],
'642':[[39,2],],
'648':[[214,5],[49,3],],
'651':[[13,1],],
'652':[[315,1],],
'654':[[221,1],],
'657':[[14,1],],
'658':[[85,1],],
'659':[[217,1],],
'664':[[196,1],],
'667':[[211,1],],
'668':[[15,1],],
'669':[[168,1],],
'670':[[201,1],],
'682':[[376,1],],
'683':[[138,1],],
'684':[[154,1],],
'686':[[386,1],],
'690':[[330,1],],
'708':[[155,1],],
'709':[[365,1],],
'710':[[388,1],],
'717':[[18,1],],
'718':[[106,1],],
'733':[[139,2],],
'734':[[369,4],[19,4],[254,4],],
'736':[[136,1],],
'737':[[32,1],],
'738':[[126,1],],
'740':[[345,1],],
'741':[[123,1],],
'742':[[158,1],],
'743':[[236,1],],
'744':[[346,1],],
'745':[[134,1],],
'746':[[128,1],],
'747':[[115,1],],
'748':[[117,1],],
'749':[[349,1],],
'750':[[167,1],],
'751':[[314,1],],
'752':[[91,1],],
'753':[[200,1],],
'754':[[257,1],],
'755':[[340,1],],
'756':[[120,1],],
'757':[[341,1],],
'758':[[293,1],],
'759':[[183,1],],
'761':[[298,1],],
'762':[[297,1],],
'763':[[29,1],],
'764':[[352,1],],
'765':[[71,1],],
'766':[[387,1],],
'767':[[20,1],],
'768':[[285,1],],
'769':[[34,1],],
'772':[[194,1],],
'785':[[146,1],],
'792':[[161,4],],
'800':[[70,8],],
'821':[[96,5],],
'823':[[318,1],],
'824':[[112,1],],
'825':[[144,1],],
'826':[[140,1],],
'827':[[326,1],],
'828':[[279,1],],
'829':[[319,1],],
'830':[[23,1],],
'831':[[307,1],],
'832':[[215,1],],
'833':[[382,1],],
'852':[[24,1],],
'853':[[43,1],],
'854':[[282,1],],
'858':[[181,2],],
'862':[[26,1],],
'863':[[368,1],],
'864':[[362,1],],
'869':[[390,5],],
'871':[[27,1],],
'872':[[50,1],],
'873':[[69,1],],
'881':[[28,1],],
'882':[[237,1],],
'883':[[328,1],],
'926':[[95,4],],
'940':[[54,7],],
'986':[[301,1],],
'987':[[31,1],],
'988':[[172,1],],
'998':[[33,1],],
'999':[[163,1],],
'1000':[[259,1],],
'1007':[[305,1],],
'1009':[[36,1],],
'1010':[[308,1],],
'1011':[[127,1],],
'1012':[[311,1],],
'1013':[[267,1],],
'1014':[[148,1],],
'1021':[[284,1],],
'1023':[[37,1],],
'1024':[[147,1],],
'1025':[[76,1],],
'1028':[[87,1],],
'1030':[[258,1],],
'1037':[[248,3],],
'1040':[[110,1],],
'1041':[[166,1],],
'1042':[[255,1],],
'1043':[[348,1],],
'1044':[[378,1],],
'1045':[[109,1],],
'1046':[[316,1],],
'1047':[[272,1],],
'1048':[[133,1],],
'1049':[[379,1],],
'1050':[[60,1],],
'1051':[[232,1],],
'1052':[[82,1],],
'1053':[[165,1],],
'1054':[[286,1],],
'1055':[[113,1],],
'1056':[[44,1],],
'1057':[[263,1],],
'1058':[[338,1],],
'1059':[[203,1],],
'1060':[[287,1],],
'1061':[[53,1],],
'1062':[[276,1],],
'1063':[[273,1],],
'1064':[[364,1],],
'1065':[[347,1],],
'1066':[[343,1],],
'1067':[[394,1],],
'1068':[[137,1],],
'1069':[[173,1],],
'1070':[[86,1],],
'1071':[[57,1],],
'1072':[[283,1],],
'1073':[[187,1],],
'1074':[[269,1],],
'1075':[[100,1],],
'1076':[[135,1],],
'1077':[[207,1],],
'1078':[[229,1],],
'1079':[[332,1],],
'1080':[[260,1],],
'1081':[[131,1],],
'1082':[[77,1],],
'1083':[[247,1],],
'1084':[[270,1],],
'1085':[[209,1],],
'1086':[[210,1],],
'1087':[[180,1],],
'1088':[[64,1],],
'1089':[[55,1],],
'1090':[[238,1],],
'1091':[[177,1],],
'1092':[[325,1],],
'1093':[[119,1],],
'1094':[[393,1],],
'1095':[[228,1],],
'1096':[[356,1],],
'1097':[[190,1],],
'1098':[[107,1],],
'1099':[[129,1],],
'1101':[[246,5],],
'1270':[[40,1],],
'1271':[[380,1],],
'1277':[[262,1],],
'1278':[[41,1],],
'1304':[[174,5],],
'1314':[[242,3],],
'1321':[[184,1],],
'1327':[[337,1],],
'1341':[[99,1],],
'1355':[[157,1],],
'1377':[[130,1],],
'1392':[[94,1],],
'1395':[[239,1],],
'1420':[[278,1],],
'1493':[[122,1],],
'1501':[[45,1],],
'1503':[[46,4],],
'1504':[[358,4],],
'1505':[[226,4],],
'1511':[[47,1],],
'1512':[[294,1],],
'1513':[[385,1],],
'1704':[[141,1],],
'1705':[[67,1],],
'1709':[[371,1],],
'1720':[[65,1],],
'1722':[[175,1],],
'1724':[[212,1],],
'1947':[[72,1],],
'1953':[[233,1],],
'1955':[[235,1],],
'1966':[[225,1],],
'2013':[[178,1],],
'2014':[[372,1],],
'2038':[[198,1],],
'2048':[[357,1],],
'2067':[[118,1],],
'2069':[[256,1],],
'2133':[[374,1],],
'2135':[[218,1],],
'2161':[[324,1],],
'2181':[[223,1],],
'2211':[[170,1],],
'2222':[[296,1],],
'2249':[[281,1],],
'2250':[[366,1],],
'2251':[[252,1],],
'2252':[[230,1],],
'2253':[[375,1],],
'2270':[[58,1],],
'2290':[[62,1],],
'2291':[[389,1],],
'2318':[[66,1],],
'2357':[[320,1],],
'2369':[[244,1],],
'2370':[[191,1],],
'2375':[[75,1],],
'2376':[[132,1],],
'2377':[[313,1],],
'2378':[[202,1],],
'2383':[[253,1],],
'2385':[[309,1],],
'2386':[[333,1],],
'2402':[[80,1],],
'2413':[[81,1],],
'2414':[[373,1],],
'2503':[[350,1],],
'2504':[[360,1],],
'2511':[[88,3],],
'2512':[[188,3],],
'2513':[[89,1],],
'2514':[[111,1],],
'2531':[[213,1],],
'2535':[[156,1],],
'2537':[[90,1],],
'2538':[[116,1],],
'2539':[[292,1],],
'2548':[[361,1],],
'2549':[[250,1],],
'2550':[[310,1],],
'2551':[[383,1],],
'2552':[[327,1],],
'2553':[[104,1],],
'2554':[[98,1],],
'2555':[[295,1],],
'2556':[[329,1],],
'2557':[[220,1],],
'2558':[[268,1],],
'2559':[[396,1],],
'2560':[[93,1],],
'2612':[[97,1],],
'2613':[[317,1],],
'2657':[[101,1],],
'2678':[[103,1],],
'2679':[[150,1],],
'2680':[[353,1],],
'2694':[[105,1],],
'2695':[[288,1],],
'2696':[[275,1],],
'2708':[[108,1],],
'2709':[[280,1],],
'2711':[[342,1],],
'2728':[[114,1],],
'2729':[[169,1],],
'2789':[[125,1],],
'2856':[[159,4],],
'2894':[[299,1],],
'2895':[[271,1],],
'2896':[[205,1],],
'2897':[[192,1],],
'2898':[[216,1],],
'2914':[[145,1],],
'2925':[[151,1],],
'3204':[[336,4],],
'3205':[[219,1],],
'3208':[[303,6],],
},{'2':[[99,302],[273,10],[140,10],[59,10],[0,25],[187,10],[352,10],[57,10],[353,10],[1,10],[186,50],[60,10],[274,14],[233,10],[234,10],[354,22],[274,23],[2,10],[188,11],[141,10],[235,8],[232,8],[185,6],[3,10],[236,10],[184,8],[61,10],[188,20],[237,10],[4,10],[351,8],[231,10],[189,10],[5,8],[183,8],[275,10],[62,10],[276,10],[56,15],[355,16],[230,8],[277,12],[182,10],[139,20],[55,10],[278,10],[356,10],[181,13],[54,36],[142,8],[229,10],[228,10],[190,8],[6,10],[357,6],[191,10],[53,10],[63,16],[238,10],[7,8],[180,10],[192,10],[52,38],[179,33],[239,10],[51,8],[193,10],[227,7],[194,8],[358,25],[138,10],[279,8],[178,10],[226,24],[50,10],[280,10],[137,10],[240,16],[359,10],[49,16],[64,10],[8,10],[177,10],[225,10],[136,8],[281,8],[9,10],[48,21],[176,48],[224,10],[65,6],[175,8],[47,10],[396,10],[350,8],[10,10],[395,10],[241,23],[46,24],[349,10],[282,10],[394,10],[348,10],[393,10],[45,8],[135,10],[392,10],[242,19],[360,8],[391,10],[174,10],[347,10],[44,10],[346,10],[283,10],[66,6],[390,25],[43,10],[11,10],[284,10],[345,8],[243,33],[12,10],[389,10],[134,10],[67,10],[361,10],[362,10],[244,10],[285,10],[13,10],[363,10],[245,22],[286,8],[133,10],[14,10],[364,10],[287,10],[68,35],[272,10],[132,10],[344,38],[288,8],[69,10],[246,10],[70,33],[271,10],[365,6],[195,15],[247,10],[289,10],[71,10],[173,10],[343,10],[72,10],[131,10],[15,10],[73,8],[74,10],[196,6],[270,10],[16,10],[75,10],[143,10],[130,10],[171,126],[76,10],[77,10],[290,39],[171,123],[17,10],[78,10],[79,8],[171,8],[18,8],[129,8],[291,10],[80,10],[223,10],[19,9],[342,8],[144,10],[128,10],[248,22],[341,10],[145,8],[81,10],[269,10],[388,6],[340,8],[127,8],[249,23],[82,8],[126,8],[387,8],[170,10],[339,37],[146,10],[250,10],[125,6],[172,8],[169,10],[292,10],[268,10],[197,36],[251,14],[338,10],[293,10],[386,10],[337,10],[42,8],[385,6],[222,10],[267,8],[336,19],[294,10],[335,33],[295,10],[251,18],[168,10],[384,7],[251,353],[383,10],[221,10],[167,10],[382,10],[252,10],[83,15],[381,34],[198,10],[296,10],[166,10],[266,38],[147,10],[334,10],[220,10],[199,10],[20,10],[124,18],[84,28],[253,10],[85,10],[297,10],[123,8],[333,8],[86,10],[148,10],[332,10],[219,8],[298,8],[331,21],[21,25],[265,6],[87,10],[165,8],[264,10],[366,6],[22,24],[164,11],[200,10],[149,10],[218,8],[201,10],[88,7],[330,8],[380,10],[88,15],[329,10],[89,10],[150,10],[202,10],[328,10],[299,10],[122,10],[23,10],[327,10],[326,8],[263,10],[325,10],[121,21],[324,10],[24,10],[323,8],[163,10],[203,10],[254,9],[25,10],[322,10],[204,10],[90,10],[162,36],[120,10],[262,8],[26,10],[321,40],[161,19],[91,10],[41,10],[300,10],[27,10],[119,10],[205,10],[320,10],[92,16],[206,10],[151,10],[28,10],[261,26],[160,12],[319,8],[159,11],[29,10],[318,8],[317,8],[301,10],[118,10],[40,8],[158,8],[302,10],[39,9],[152,10],[30,41],[117,10],[367,10],[157,10],[368,10],[31,10],[369,9],[303,11],[116,10],[156,8],[304,8],[155,8],[115,10],[316,8],[114,8],[315,10],[113,10],[255,10],[112,10],[314,10],[111,10],[154,10],[313,10],[110,10],[312,8],[32,10],[109,8],[311,8],[310,10],[309,8],[33,10],[207,10],[308,8],[108,8],[153,37],[34,10],[107,10],[307,10],[106,10],[256,8],[93,6],[208,12],[208,22],[306,29],[105,10],[257,8],[258,6],[35,19],[104,10],[305,10],[103,10],[94,10],[95,20],[209,10],[102,43],[260,10],[96,15],[101,10],[370,10],[210,10],[259,8],[97,10],[371,10],[98,10],[100,10],[36,10],[217,10],[379,10],[372,10],[378,10],[211,14],[216,10],[373,10],[212,10],[215,8],[374,10],[213,10],[37,10],[377,10],[375,8],[214,10],[99,10],[58,10],[38,23],[376,10],],
'5':[[227,288],[21,21],[171,161],[261,11],[208,73],],
'6':[[214,6],[375,2],[213,2],[374,2],[37,2],[212,2],[216,2],[373,2],[378,2],[217,2],[379,2],[372,2],[100,2],[260,2],[98,2],[36,2],[101,2],[211,2],[371,2],[97,2],[210,2],[102,13],[96,6],[370,2],[103,2],[95,5],[209,2],[305,2],[259,2],[94,2],[104,2],[215,2],[258,2],[306,8],[105,2],[257,2],[35,3],[153,8],[307,2],[106,2],[93,2],[208,5],[107,2],[308,2],[108,2],[34,2],[309,2],[207,2],[310,2],[109,2],[311,2],[33,2],[154,2],[256,2],[312,2],[110,2],[313,2],[32,2],[111,2],[314,2],[112,2],[113,2],[155,2],[315,2],[114,2],[316,2],[115,2],[116,2],[255,2],[156,2],[304,2],[157,2],[117,2],[369,5],[303,7],[368,2],[261,5],[31,2],[39,3],[367,2],[118,2],[158,2],[40,2],[30,10],[302,2],[317,2],[301,2],[318,2],[159,5],[99,2],[152,2],[319,2],[119,2],[160,3],[320,2],[29,2],[28,2],[206,2],[41,2],[161,5],[92,4],[120,2],[321,9],[27,2],[91,2],[262,2],[162,10],[205,2],[26,2],[300,2],[322,2],[204,2],[90,2],[163,2],[121,6],[25,2],[323,2],[376,2],[324,2],[263,2],[325,2],[24,2],[218,2],[326,2],[203,2],[327,2],[122,2],[328,2],[23,2],[164,3],[264,2],[329,2],[150,2],[89,2],[330,2],[380,2],[299,2],[202,2],[201,2],[88,4],[149,2],[165,2],[200,2],[254,5],[265,2],[22,4],[219,2],[87,2],[331,6],[38,6],[298,2],[332,2],[21,5],[123,2],[220,2],[86,2],[333,2],[266,10],[366,2],[124,4],[334,2],[85,2],[297,2],[148,2],[166,2],[84,10],[381,9],[20,2],[253,2],[199,2],[382,2],[167,2],[198,2],[221,2],[83,5],[296,2],[168,2],[383,2],[252,2],[335,8],[384,3],[147,2],[267,2],[295,2],[222,2],[336,5],[294,2],[337,2],[42,2],[385,2],[172,2],[386,2],[169,2],[338,2],[293,2],[268,2],[251,5],[125,2],[292,2],[339,15],[170,2],[250,2],[126,2],[223,2],[387,2],[127,2],[269,2],[82,2],[340,2],[249,9],[388,2],[341,2],[146,2],[128,2],[342,2],[81,2],[145,2],[171,4],[144,2],[19,5],[129,2],[80,2],[270,2],[18,2],[79,2],[130,2],[78,2],[291,2],[17,2],[77,2],[197,14],[76,2],[173,2],[248,4],[131,2],[75,2],[16,2],[74,2],[151,2],[143,2],[73,2],[196,2],[72,2],[343,2],[15,2],[290,14],[289,2],[271,2],[344,7],[71,2],[247,2],[365,2],[272,2],[70,9],[195,2],[246,6],[132,2],[288,2],[69,2],[133,2],[287,2],[364,2],[14,2],[245,5],[286,2],[363,2],[389,2],[13,2],[362,2],[68,8],[285,2],[361,2],[345,2],[244,2],[134,2],[12,6],[390,6],[43,2],[67,2],[346,2],[284,2],[11,2],[44,2],[66,2],[135,2],[391,2],[347,2],[174,6],[243,9],[392,2],[283,2],[360,2],[45,2],[348,2],[393,2],[394,2],[46,5],[242,4],[349,2],[175,2],[282,2],[395,2],[47,2],[350,2],[396,2],[10,2],[136,2],[65,2],[48,7],[224,2],[176,13],[177,2],[225,2],[9,2],[49,4],[137,2],[64,2],[178,2],[226,5],[241,4],[50,2],[8,2],[281,2],[280,2],[141,2],[359,2],[138,2],[227,3],[279,2],[51,2],[194,2],[193,2],[240,3],[52,10],[179,10],[377,2],[239,2],[180,2],[7,4],[53,2],[192,2],[358,5],[139,3],[63,4],[238,2],[191,2],[228,2],[190,2],[54,8],[229,2],[6,2],[230,2],[181,3],[357,2],[55,2],[182,2],[356,2],[278,2],[277,8],[56,3],[142,2],[231,2],[183,2],[276,2],[355,3],[5,2],[351,2],[189,2],[62,2],[184,2],[237,2],[4,2],[185,2],[61,2],[236,2],[232,2],[275,2],[3,2],[235,2],[273,2],[2,2],[234,2],[354,5],[186,14],[57,2],[140,2],[188,4],[187,2],[353,2],[233,2],[1,2],[352,2],[60,2],[274,6],[59,2],[0,6],[58,2],],
'7':[[232,29],[185,92],[351,39],[351,35],[232,33],[232,28],[351,34],[351,40],[232,34],[351,33],[351,41],[232,35],[232,39],[232,40],[232,41],[185,91],[232,27],[351,29],[232,23],[351,28],[60,17],[60,18],[60,19],[232,22],[60,23],[60,24],[60,25],[232,21],[60,29],[60,30],[60,31],[232,17],[60,35],[60,36],[60,37],[232,16],[60,41],[60,42],[60,43],[351,27],[60,48],[60,49],[60,50],[232,15],[351,23],[351,22],[351,21],[231,31],[351,17],[60,103],[231,30],[351,16],[231,29],[231,25],[231,24],[231,23],[351,15],[231,19],[231,18],[231,17],[5,15],[350,222],[350,127],[227,332],[350,126],[272,31],[350,125],[350,117],[5,16],[5,17],[350,116],[350,115],[350,107],[350,106],[350,105],[350,97],[350,96],[350,95],[350,87],[350,86],[350,85],[227,331],[350,77],[350,76],[350,75],[350,67],[350,66],[350,65],[5,21],[350,57],[350,56],[350,55],[350,47],[350,46],[350,45],[5,22],[350,37],[350,36],[350,35],[5,23],[277,1012],[350,26],[350,25],[272,30],[277,1013],[359,17],[359,18],[350,17],[350,16],[359,19],[350,15],[359,23],[223,37],[359,24],[65,14],[65,15],[65,16],[359,25],[65,20],[65,21],[65,22],[223,36],[65,26],[65,27],[65,28],[277,1014],[65,32],[65,33],[65,34],[359,29],[65,38],[65,39],[65,40],[5,27],[65,44],[65,45],[65,46],[359,30],[65,50],[65,51],[65,52],[359,31],[223,35],[223,31],[360,15],[5,28],[360,16],[360,17],[223,30],[360,21],[360,22],[360,23],[223,29],[360,27],[223,25],[360,28],[360,29],[360,55],[223,24],[223,23],[223,19],[223,18],[5,29],[5,80],[42,114],[194,15],[42,113],[42,112],[194,16],[223,17],[42,108],[246,1978],[272,29],[42,107],[194,17],[246,1979],[246,1980],[42,106],[42,102],[42,101],[42,100],[42,96],[42,95],[142,16],[142,17],[42,94],[365,14],[342,84],[42,90],[342,83],[342,82],[42,89],[342,78],[342,77],[342,76],[42,88],[342,72],[365,15],[342,71],[342,70],[194,21],[42,84],[42,83],[342,66],[142,18],[42,82],[342,65],[342,64],[342,60],[342,59],[142,22],[365,16],[342,58],[342,54],[42,78],[342,53],[342,52],[342,48],[42,77],[42,76],[365,20],[342,47],[342,46],[42,72],[342,42],[42,71],[342,41],[342,40],[42,70],[342,36],[342,35],[342,34],[365,21],[342,30],[42,66],[342,29],[342,28],[42,65],[342,24],[42,64],[342,23],[365,22],[42,60],[42,59],[342,22],[342,18],[42,58],[342,17],[342,16],[42,54],[42,53],[42,52],[365,31],[42,48],[42,47],[42,46],[365,32],[42,42],[42,41],[42,40],[365,33],[42,36],[42,35],[42,34],[82,16],[82,17],[82,18],[42,30],[82,37],[82,38],[82,39],[42,29],[82,54],[82,55],[82,56],[42,28],[82,68],[82,69],[82,70],[365,44],[82,88],[82,89],[82,90],[42,24],[82,107],[82,108],[82,109],[42,23],[82,121],[82,122],[82,123],[42,22],[82,133],[82,134],[82,135],[365,45],[82,145],[82,146],[82,147],[142,23],[82,161],[82,162],[82,163],[42,18],[82,174],[82,175],[82,176],[42,17],[82,192],[82,193],[82,194],[337,38],[82,205],[82,206],[82,207],[42,16],[82,217],[82,218],[82,219],[337,37],[82,238],[82,239],[82,240],[337,36],[82,253],[82,254],[82,255],[337,32],[82,270],[82,271],[82,272],[337,31],[82,283],[82,284],[82,285],[337,30],[82,296],[82,297],[82,298],[337,26],[337,25],[337,24],[337,20],[337,19],[337,18],[365,46],[365,55],[365,56],[142,24],[365,57],[365,68],[365,69],[365,70],[365,74],[365,75],[365,76],[365,85],[365,86],[365,87],[365,96],[365,97],[365,98],[41,115],[41,114],[41,113],[41,109],[41,108],[272,25],[41,107],[142,28],[41,103],[165,36],[41,102],[41,101],[41,97],[85,17],[85,18],[85,19],[165,35],[85,23],[85,24],[85,25],[165,34],[85,29],[85,30],[85,31],[41,96],[165,30],[165,29],[85,59],[41,95],[165,28],[7,178],[41,91],[41,90],[41,89],[41,85],[165,24],[41,84],[165,23],[330,29],[165,22],[330,28],[165,18],[330,27],[41,83],[165,17],[330,23],[41,79],[330,22],[87,17],[87,18],[87,19],[165,16],[87,23],[87,24],[87,25],[41,78],[87,29],[87,30],[87,31],[41,77],[87,35],[87,36],[87,37],[41,73],[87,41],[87,42],[87,43],[330,21],[41,72],[330,17],[330,16],[330,15],[87,92],[41,71],[41,67],[41,66],[41,65],[366,13],[41,61],[41,60],[41,59],[366,14],[142,29],[41,55],[41,54],[41,53],[366,15],[41,49],[41,48],[41,47],[41,43],[41,42],[41,41],[217,133],[7,179],[41,37],[41,36],[41,35],[366,19],[194,22],[41,31],[41,30],[41,29],[366,20],[41,25],[41,24],[41,23],[217,132],[41,19],[41,18],[142,30],[194,23],[41,17],[366,21],[217,131],[366,25],[217,127],[40,29],[194,27],[40,28],[40,27],[217,126],[40,23],[40,22],[40,21],[217,125],[40,17],[40,16],[40,15],[366,26],[366,27],[316,60],[217,121],[316,59],[316,58],[217,120],[316,54],[316,53],[316,52],[316,48],[316,47],[316,46],[350,27],[316,41],[316,40],[316,39],[254,243],[316,35],[316,34],[316,33],[217,119],[254,244],[217,115],[316,29],[316,28],[316,27],[217,114],[316,23],[316,22],[316,21],[217,113],[316,17],[316,16],[316,15],[217,109],[217,108],[217,107],[217,103],[217,102],[217,101],[194,28],[217,97],[217,96],[272,24],[217,95],[217,91],[217,90],[217,89],[217,85],[217,84],[217,83],[142,34],[217,79],[217,78],[217,77],[217,73],[217,72],[217,71],[217,67],[217,66],[217,65],[217,61],[217,60],[217,59],[217,55],[217,54],[93,14],[93,15],[93,16],[142,35],[93,20],[93,21],[93,22],[217,53],[93,26],[93,27],[93,28],[217,49],[93,32],[93,33],[93,34],[217,48],[93,38],[93,39],[93,40],[142,36],[217,47],[217,43],[217,42],[217,41],[217,37],[217,36],[217,35],[217,31],[217,30],[304,152],[304,151],[304,150],[369,487],[152,55],[152,54],[304,146],[369,488],[304,145],[217,29],[304,144],[217,25],[152,53],[217,24],[304,140],[217,23],[217,19],[304,139],[152,49],[217,18],[304,138],[304,134],[217,17],[304,133],[214,390],[304,132],[304,128],[214,389],[304,127],[99,17],[99,18],[99,19],[152,48],[99,23],[99,24],[99,25],[152,47],[99,29],[99,30],[99,31],[152,43],[99,35],[99,36],[99,37],[304,126],[99,41],[99,42],[99,43],[152,42],[99,47],[99,48],[99,49],[304,122],[304,121],[304,120],[304,116],[304,115],[304,114],[214,388],[194,29],[304,110],[304,109],[379,17],[174,287],[152,41],[304,108],[304,104],[379,18],[304,103],[152,37],[304,102],[379,19],[304,98],[304,97],[272,23],[152,36],[379,23],[152,35],[379,24],[174,286],[379,25],[304,96],[379,29],[304,92],[304,91],[379,30],[304,90],[142,40],[304,86],[304,85],[174,285],[304,84],[304,80],[194,33],[152,31],[379,31],[304,79],[304,78],[142,41],[304,74],[304,73],[379,35],[304,72],[304,68],[379,36],[304,67],[304,66],[304,62],[379,37],[304,61],[304,60],[379,41],[152,30],[379,42],[304,55],[379,43],[304,54],[379,47],[304,53],[379,48],[304,49],[379,49],[152,29],[304,48],[379,53],[304,47],[31,52],[304,43],[304,42],[379,54],[304,41],[304,37],[304,36],[304,35],[304,31],[379,55],[152,25],[304,30],[379,59],[152,24],[31,31],[304,29],[304,25],[31,30],[304,24],[31,29],[304,23],[206,100],[304,18],[152,23],[304,17],[31,25],[304,16],[152,19],[31,24],[152,18],[31,23],[206,31],[31,19],[31,18],[303,204],[303,203],[303,202],[152,17],[31,17],[379,60],[379,61],[379,65],[379,66],[206,30],[206,29],[206,25],[379,67],[206,24],[206,23],[206,19],[206,18],[142,42],[379,71],[379,72],[206,17],[379,73],[142,46],[379,77],[379,78],[379,79],[379,83],[379,84],[379,85],[12,651],[379,89],[379,90],[379,91],[379,94],[379,95],[142,47],[12,652],[379,96],[379,99],[122,17],[122,18],[122,19],[379,100],[122,23],[122,24],[122,25],[379,101],[122,29],[122,30],[122,31],[379,221],[122,35],[122,36],[122,37],[380,17],[122,41],[122,42],[122,43],[380,18],[122,47],[122,48],[122,49],[380,19],[199,25],[199,24],[199,23],[133,127],[380,23],[380,24],[199,19],[380,25],[199,18],[199,17],[380,29],[380,30],[142,48],[380,31],[19,131],[19,130],[272,19],[142,52],[171,1337],[12,653],[171,1338],[384,9950],[171,1339],[384,9951],[384,9952],[386,17],[386,18],[386,19],[386,23],[386,24],[386,25],[386,29],[386,30],[386,31],[125,275],[125,276],[172,15],[291,31],[172,16],[291,30],[388,86],[172,17],[172,21],[388,13],[388,14],[142,53],[388,15],[172,22],[291,29],[388,19],[388,20],[291,25],[291,24],[291,23],[172,23],[291,19],[291,18],[142,54],[291,17],[388,21],[172,27],[388,25],[388,26],[172,28],[388,27],[172,29],[388,31],[388,32],[388,33],[388,37],[388,38],[388,39],[14,37],[14,36],[14,35],[14,31],[14,30],[14,29],[14,25],[14,24],[14,23],[194,35],[14,19],[14,18],[14,17],[388,43],[388,44],[272,17],[133,17],[133,18],[133,19],[142,60],[133,26],[133,27],[133,28],[142,59],[133,35],[133,36],[133,37],[142,58],[133,44],[133,45],[133,46],[388,45],[133,53],[133,54],[133,55],[272,18],[133,62],[133,63],[133,64],[194,34],[133,71],[133,72],[133,73],],
'8':[[171,155],[0,11],[161,15],[227,282],[208,67],],
'9':[[336,15],[171,139],[21,15],[188,16],[274,11],[0,16],[161,10],[227,266],[390,16],[358,16],[261,16],[226,15],[165,81],[46,15],],
'10':[[208,78],[171,166],[0,21],[390,11],[227,293],],
'12':[[103,38],[150,38],[349,31],[314,31],[180,62],[20,58],],
'14':[[245,25],[139,23],[63,19],[56,18],[185,9],[254,12],[240,19],[35,22],[369,12],[171,1297],[19,12],],
'20':[[68,114],],
'29':[[384,9949],],
'38':[[328,35],[7,148],[160,698],[102,39],[186,27],[171,339],],
'43':[[365,230],],
'45':[[7,177],[171,368],[186,46],],
'47':[[351,64],],
'48':[[311,39],[71,49],[364,29],[347,30],[93,19],[93,52],[323,24],[100,47],[209,74],[50,43],[69,32],[343,34],[173,331],[276,29],[283,48],[27,30],[53,33],[203,47],[284,50],[263,45],[187,52],[57,309],[332,56],[382,49],[135,52],[36,46],[273,28],[387,39],[269,49],[338,41],],
'49':[[82,561],[369,240],[38,32],[171,836],[22,20],[181,9],[248,10],],
'55':[[74,136],[16,136],],
'56':[[306,18],[54,24],[48,17],[197,24],[153,19],[249,11],[171,1215],[179,20],[171,1206],[48,4990],[335,19],[335,17],[185,18],[70,21],],
'60':[[261,217],[358,387],],
'61':[[242,208],],
'69':[[353,48],],
'75':[[306,1613],],
'82':[[121,17],[171,1175],[245,9],[121,11],[369,16],[185,90],[377,6],[331,17],[171,449],[174,284],[83,11],[39,992],[92,25],[171,612],[195,6],[171,1091],[35,15],[195,11],[195,26],[242,13],[95,12],[171,1287],[211,27],[63,103],[124,27],[211,10],[240,7],[171,1329],[306,25],[19,100],[254,88],[19,88],[171,1163],[355,7],[63,91],[19,16],],
'83':[[14,53],[185,26],[249,19],[171,1223],[179,18],[196,95],],
'88':[[220,129],[75,140],],
'98':[[0,184],],
'99':[[217,34],[223,28],[388,30],[350,44],[194,20],[122,34],[41,94],[232,32],[87,40],[351,32],[60,34],[278,71],[99,34],[217,88],[133,43],[14,34],[60,40],[379,34],[316,32],],
'100':[[217,76],[379,76],[41,46],],
'101':[[41,112],],
'107':[[48,15],[185,83],[171,1280],[54,32],],
'117':[[42,427],],
'118':[[16,4],[369,91],[74,6],[245,65],[171,687],[59,89],],
'119':[[58,6],[369,89],[245,63],[1,4],[171,685],],
'120':[[154,4],[369,93],[171,689],[1,110],[1,6],[245,67],],
'121':[[311,55],[112,147],[387,55],],
'125':[[280,36],[252,38],[281,4],[59,27],[56,30],[171,388],[371,35],[254,27],[1,33],[264,6],[334,34],],
'126':[[339,298],[342,4],[245,45],[369,71],[304,15],[171,667],],
'127':[[280,41],[178,114],[334,39],[59,32],[1,38],[118,78],[235,113],[244,87],],
'128':[[297,36],[97,41],[292,60],[281,19],[149,36],[372,51],],
'131':[[380,40],[280,58],[371,51],],
'133':[[40,38],],
'136':[[208,51],],
'137':[[155,34],[288,25],[335,29],[171,1233],[185,36],[355,1495],[70,19],],
'139':[[209,270],[347,62],],
'140':[[171,237],[7,46],[162,20],[243,29],[162,386],[7,56],[266,34],[171,280],[7,89],[290,21],[171,247],[52,34],[68,18],],
'141':[[280,6],[369,81],[280,123],[59,4],[245,55],[171,677],],
'143':[[313,66],],
'144':[[237,34],[198,66],[3,27],[183,40],[229,140],[157,44],[387,72],[270,183],[189,376],[349,40],[235,189],[314,40],[131,121],[271,34],[143,37],[311,72],[50,63],[319,47],[20,137],[287,66],[127,45],[320,76],[285,110],[347,38],[200,138],[364,37],[90,48],[180,134],[284,147],[292,48],[283,118],[234,326],[191,71],[89,280],[322,76],[293,48],[363,284],[328,26],[146,113],[362,44],[53,53],[134,84],[128,79],[6,51],[23,48],[1,54],[25,44],[86,179],[253,90],[26,27],[27,38],[296,70],[305,50],[205,34],[332,120],[147,26],[218,250],[192,34],[371,60],[372,46],[216,34],[173,207],[29,73],[10,325],[207,59],[298,45],[215,40],[34,111],[252,54],[135,122],[100,117],[148,129],[59,54],[394,120],[334,47],[69,60],[269,146],[280,67],[396,60],[260,78],[338,56],[385,31],[114,47],[250,96],[169,48],[373,57],[9,73],[116,52],[209,177],[302,81],[257,100],[62,56],[300,41],[81,50],[367,90],[210,122],[170,118],[57,186],[80,79],[178,199],[263,81],[77,106],[137,162],[276,37],[75,73],[275,26],[299,34],[247,181],[141,47],[187,131],[73,50],[47,26],[36,118],[343,42],[37,35],[313,194],[44,86],],
'149':[[184,41],[131,168],[252,96],],
'150':[[84,565],],
'151':[[6,95],[245,57],[171,679],[334,6],[176,276],[371,4],[334,90],[369,83],],
'152':[[316,120],[232,133],],
'155':[[52,339],],
'165':[[253,63],[284,57],[274,19],[82,106],[269,56],[200,314],[209,81],[257,196],[171,203],[227,330],],
'167':[[171,255],[171,273],[344,16],[7,82],[381,17],[162,32],[381,30],[7,64],],
'169':[[171,647],[369,51],[241,9],[124,14],],
'170':[[241,66],[369,138],[171,734],[17,4],[25,6],],
'171':[[241,64],[2,4],[171,732],[6,6],[369,136],],
'172':[[155,4],[171,736],[2,6],[241,68],[369,140],],
'173':[[375,29],[264,32],[230,27],],
'174':[[175,22],[154,24],[6,34],[365,54],[212,25],[67,30],[365,95],[145,23],[149,29],[2,28],[297,29],[61,32],[370,28],],
'175':[[2,32],[17,35],],
'178':[[164,663],[164,7],[369,101],[354,9],[241,29],[171,697],[245,18],],
'179':[[61,6],[171,724],[241,56],[369,128],[300,4],[300,52],],
'180':[[369,126],[171,722],[67,6],[241,54],[3,4],],
'181':[[171,726],[3,6],[241,58],[369,130],[370,4],],
'183':[[101,78],],
'184':[[298,36],[141,40],[127,36],[53,144],[365,43],],
'185':[[51,41],],
'187':[[192,43],[38,39],[205,43],[299,43],[271,43],[3,38],[171,843],[216,43],[369,247],[237,43],[110,4],],
'188':[[22,37],[222,4],[369,218],[392,6],[171,814],],
'189':[[369,216],[22,35],[171,812],[4,4],[318,4],],
'190':[[112,4],[4,6],[369,220],[171,816],[22,39],],
'192':[[369,234],[171,830],[279,4],[22,53],],
'194':[[196,39],],
'199':[[27,64],[332,188],[7,26],[21,189],[390,172],[171,217],[266,20],[321,417],],
'206':[[22,31],[369,452],[124,35],[369,114],[38,73],[92,95],[369,421],[245,49],[19,41],[171,400],[171,421],[171,1048],[139,29],[248,48],[171,1180],[254,158],[171,877],[195,49],[171,671],[357,50],[171,620],[63,44],[171,519],[354,65],[19,105],[369,75],[211,83],[369,212],[171,776],[171,808],[254,60],[240,21],[369,281],[254,39],[56,42],[171,1116],[171,710],[35,24],[241,42],[369,24],[369,180],[171,1017],[377,27],],
'207':[[318,51],[392,49],[4,55],[279,51],[79,52],[222,57],],
'209':[[369,210],[171,806],[38,10],[354,18],],
'210':[[206,6],[171,774],[5,14],[369,178],[354,63],],
'211':[[369,176],[171,772],[5,4],[354,61],[206,16],[359,6],],
'213':[[291,37],[104,28],[386,37],[330,35],],
'214':[[49,516],[5,58],],
'215':[[117,50],[217,22],[152,22],[87,28],[206,22],[350,24],[330,20],[359,22],[380,22],[31,22],[14,22],[199,22],[167,50],[295,44],[272,22],[179,1626],[99,22],[153,1421],[351,20],[133,25],[316,57],[197,624],[70,782],[291,22],[231,22],[41,82],[386,22],[360,26],[60,22],[5,20],[366,18],[316,20],[232,20],[85,22],[172,20],[388,18],[122,22],[40,20],[379,22],],
'216':[[305,85],[5,66],],
'217':[[366,24],[360,20],[41,22],[232,26],[291,28],[316,26],[5,26],[330,26],[60,28],[386,28],[172,26],[231,28],[351,26],[388,24],[41,88],[379,28],[380,28],[87,22],[133,34],[99,28],[122,28],[217,82],[14,28],[31,28],[350,34],[206,28],[194,32],[85,28],[272,28],[87,34],[223,22],[359,28],[217,28],[40,26],],
'218':[[5,79],],
'219':[[217,130],],
'220':[[82,216],[82,132],[359,148],],
'225':[[213,485],[189,638],[36,192],[394,202],[247,263],],
'228':[[171,802],[369,206],[369,154],[354,91],[171,750],[354,39],],
'229':[[354,51],[369,59],[241,34],[369,413],[211,47],[369,261],[248,40],[245,33],[171,392],[171,483],[254,122],[171,762],[171,655],[171,857],[369,106],[38,53],[171,702],[56,34],[171,1009],[254,31],[92,59],[369,166],],
'230':[[96,194],],
'231':[[282,31],[73,84],],
'232':[[265,45],[22,9],[171,747],[152,224],[160,8],[241,19],[369,151],],
'233':[[354,67],[305,4],[369,182],[171,778],],
'234':[[370,6],[241,62],[25,4],[171,730],[369,134],],
'235':[[6,4],[241,60],[171,728],[369,132],[300,6],],
'237':[[298,29],[300,29],[143,25],[127,29],[141,30],[6,39],[61,47],[365,30],[365,84],[365,67],],
'241':[[284,67],[82,120],[158,53],[236,38],[165,47],[247,91],[270,93],[13,38],[348,26],[135,59],[25,31],[165,33],[269,66],[100,54],[361,110],[115,38],],
'244':[[33,53],[163,77],[259,51],],
'247':[[171,716],[241,48],[171,700],[97,6],[369,120],[369,104],[141,4],[241,32],],
'262':[[171,207],[243,22],[266,24],[7,16],[339,315],[339,33],[290,25],[52,24],[381,21],[30,28],[186,31],[344,20],[162,24],[102,26],[176,30],[321,23],[121,591],[84,14],[68,22],],
'264':[[253,4],[92,99],[171,523],[211,87],[235,4],[254,162],],
'269':[[118,223],[7,36],[84,24],[52,20],[244,254],[171,227],],
'274':[[199,102],[363,760],],
'277':[[314,111],[224,35],],
'278':[[171,264],[7,73],[243,18],[68,31],],
'279':[[197,22],[83,117],[377,21],[185,53],[171,1250],[254,91],[171,452],[95,8],[92,28],[70,29],],
'284':[[7,103],[344,344],[30,24],[171,294],[344,34],],
'287':[[171,304],[7,113],[290,35],[321,19],],
'289':[[171,313],[102,22],[30,37],[7,122],],
'290':[[89,485],],
'291':[[171,119],],
'292':[[171,326],[176,26],[321,36],[7,135],],
'302':[[171,353],[28,88],[339,29],[7,162],[176,44],],
'305':[[268,59],],
'308':[[182,4],[254,21],[171,382],[56,24],[51,4],],
'309':[[171,380],[56,22],[298,69],[8,4],[127,69],[254,19],],
'310':[[8,6],[254,23],[264,4],[171,384],[56,26],],
'314':[[41,70],[217,100],[99,46],[217,46],[133,61],[122,46],[350,64],[379,46],[316,38],[232,38],[388,42],[316,45],],
'317':[[234,283],[135,79],[213,291],[34,68],[283,75],[284,104],[9,37],[100,74],[20,94],[173,164],[57,143],[209,134],[247,138],[137,119],[178,156],[36,75],[89,237],[10,282],[189,333],[269,103],[210,79],[148,86],[270,140],[394,77],[187,88],[180,91],[229,97],[274,832],[29,37],[285,67],[146,70],[86,136],[332,77],],
'320':[[8,31],],
'321':[[185,67],[249,324],[153,33],[54,22],[171,1264],],
'322':[[254,15],[35,6],[171,376],[353,42],],
'323':[[35,42],[149,6],[254,78],[171,439],[193,4],],
'324':[[127,4],[9,4],[254,76],[171,437],[35,40],],
'325':[[35,44],[9,6],[382,4],[254,80],[171,441],],
'330':[[254,25],[171,386],[56,28],[391,4],[182,6],],
'334':[[29,51],[9,51],],
'335':[[193,41],[9,63],[29,63],[352,41],],
'336':[[107,23],[129,21],],
'337':[[35,28],[254,64],[171,425],[307,4],[308,4],],
'339':[[198,41],],
'343':[[286,42],[253,230],[396,189],[135,222],],
'346':[[180,55],[103,33],[204,39],[314,35],[349,35],[150,33],],
'347':[[130,28],[254,150],[92,87],[171,511],[42,15],[217,510],[337,4],[211,75],],
'354':[[172,167],[269,223],],
'359':[[143,66],[141,87],],
'376':[[171,198],[92,7],[307,281],[29,198],[171,419],[251,11],[9,198],[171,1178],[254,58],[341,281],[193,160],[56,11],[387,109],[352,160],[227,325],[63,12],[19,103],[208,18],],
'377':[[124,43],[369,32],[234,4],[377,35],[189,6],[171,628],],
'378':[[369,30],[377,33],[213,6],[171,626],[124,41],[10,4],],
'379':[[124,45],[178,4],[10,6],[369,34],[377,37],[171,630],],
'380':[[213,109],[234,91],[178,61],[189,98],[10,92],[89,75],],
'381':[[171,517],[142,15],[373,113],[211,81],[202,6],[92,93],[254,156],],
'382':[[189,111],[292,41],[90,41],[10,105],[116,45],],
'383':[[189,119],[10,113],[89,97],[234,114],[213,122],],
'384':[[10,120],[234,121],[213,129],[189,126],[89,105],],
'385':[[10,125],[189,176],[234,126],],
'386':[[10,134],[189,185],[234,135],],
'387':[[211,67],[254,142],[92,79],[223,6],[31,4],[171,503],[199,16],],
'388':[[313,144],[363,116],],
'391':[[85,4],[211,55],[254,130],[231,16],[92,67],[291,6],[171,491],],
'392':[[89,127],[189,191],[313,153],[218,92],[10,140],[234,141],[363,130],[213,149],],
'394':[[92,61],[171,485],[211,49],[351,14],[254,124],[41,4],],
'395':[[313,170],[10,153],[234,154],[363,147],[189,204],[213,162],[89,140],],
'397':[[213,172],[234,164],[10,163],[189,214],[218,109],[363,156],],
'398':[[363,206],[213,215],[189,257],[234,207],[10,206],[218,159],],
'399':[[171,489],[231,4],[291,16],[92,65],[41,6],[254,128],[211,53],],
'400':[[234,217],[189,267],[10,216],],
'402':[[369,399],[107,4],[38,191],[171,995],],
'403':[[189,286],[10,235],[234,236],[213,240],],
'405':[[234,245],[189,295],[213,249],[10,244],],
'406':[[10,257],[234,258],[189,308],],
'407':[[354,59],[369,174],[122,6],[171,770],[359,16],[206,4],],
'408':[[34,54],[210,65],[362,33],[148,72],[189,328],[394,58],[270,126],[209,120],[89,232],[137,105],[135,65],[173,150],[283,61],[285,53],[229,83],[20,80],[284,90],[234,278],[247,124],[180,77],[178,151],[213,286],[86,122],[10,277],[332,63],[57,129],[62,45],[36,61],[146,56],[368,33],[100,60],[187,74],[269,89],],
'409':[[359,75],],
'410':[[209,166],[34,100],[270,172],[187,120],[100,106],[229,129],[146,102],[137,151],[189,365],[89,269],[180,123],[234,315],[148,118],[210,111],[135,111],[283,107],[394,109],[173,196],[36,107],[57,175],[10,314],[86,168],[284,136],[285,99],[247,170],[332,109],[178,188],[20,126],[213,323],[269,135],],
'412':[[128,64],[302,48],[134,51],[322,61],],
'414':[[152,16],[171,766],[369,170],[354,55],[122,4],[194,4],],
'415':[[229,59],[250,53],[367,47],[165,21],[166,25],[373,46],[165,41],],
'421':[[310,26],[171,547],[250,6],[92,123],[211,111],[310,4],[254,186],],
'438':[[218,76],[235,71],[178,84],[196,47],[116,36],[235,500],[156,53],[367,61],[363,100],[250,67],],
'440':[[235,122],[178,119],],
'445':[[75,36],[313,59],],
'447':[[247,81],[36,55],[385,24],[270,83],],
'451':[[385,70],],
'452':[[284,78],[269,77],[209,100],],
'462':[[93,140],[354,36],[181,1033],],
'470':[[44,146],],
'473':[[10,358],],
'474':[[124,29],[171,614],[369,18],],
'475':[[63,54],[395,147],[224,6],[171,1126],[19,51],[204,4],[195,59],],
'476':[[19,49],[63,52],[346,6],[11,4],[195,57],[171,1124],],
'477':[[11,52],[289,4],[195,61],[63,56],[19,53],[11,6],[289,195],[171,1128],],
'478':[[345,4],[195,43],[171,1110],[19,35],[221,4],[63,38],],
'479':[[301,28],[322,38],[128,37],[11,25],[349,87],[134,35],[315,39],[204,34],[302,36],[288,51],[289,39],],
'485':[[195,63],[19,55],[63,58],[134,4],[204,6],[171,1130],],
'486':[[83,7],[19,18],[63,21],[83,132],[39,5],[171,1093],],
'489':[[171,1303],[303,201],],
'515':[[224,234],],
'518':[[25,93],],
'533':[[273,49],],
'553':[[313,488],],
'577':[[243,268],],
'593':[[376,41],],
'602':[[320,174],],
'604':[[366,39],],
'609':[[338,33],[263,37],[203,39],],
'613':[[67,60],],
'615':[[106,28],[353,54],],
'621':[[171,1169],[83,123],[331,12],[19,94],[63,97],],
'633':[[19,65],[195,73],[63,68],[13,6],[171,1140],[322,4],],
'634':[[115,4],[19,67],[195,75],[302,6],[171,1142],[63,70],],
'642':[[195,29],[221,34],[63,24],[19,21],[136,26],[171,1096],],
'646':[[154,38],[65,182],[342,328],[175,36],],
'648':[[12,650],[139,16],[171,1082],[171,1315],[277,1011],[369,486],],
'651':[[195,71],[171,1138],[302,4],[63,66],[19,63],[315,6],],
'652':[[63,64],[195,69],[19,61],[128,6],[171,1136],[13,4],],
'653':[[182,50],],
'654':[[63,40],[171,1112],[195,45],[395,6],[19,37],[123,4],],
'656':[[315,66],[134,45],[128,47],[322,44],[302,42],[289,66],],
'657':[[217,4],[85,6],[254,134],[171,495],[211,59],[14,16],[92,71],],
'658':[[211,57],[171,493],[85,16],[231,6],[14,4],[92,69],[254,132],],
'659':[[254,136],[217,16],[171,497],[99,4],[92,73],[14,6],[211,61],],
'664':[[254,242],[211,167],[171,603],[92,179],],
'667':[[242,15],[254,102],[171,463],[92,39],[196,98],],
'668':[[201,4],[171,477],[254,116],[168,6],[92,53],[211,41],],
'669':[[211,39],[171,475],[254,114],[92,51],[376,6],[15,4],],
'670':[[256,4],[211,43],[15,6],[92,55],[171,479],[254,118],],
'682':[[98,47],[211,37],[234,424],[254,112],[92,49],[171,473],[278,6],[168,4],],
'683':[[15,47],[92,143],[98,4],[239,6],[254,206],[171,567],[211,131],],
'684':[[145,4],[16,6],[245,69],[171,691],[369,95],],
'685':[[74,44],[16,44],],
'686':[[369,65],[380,6],[171,661],[386,16],[245,39],[330,4],],
'687':[[16,63],[74,63],],
'689':[[74,80],[16,80],],
'690':[[369,67],[245,41],[330,14],[386,6],[171,663],],
'691':[[74,89],[16,89],],
'696':[[113,69],],
'700':[[146,46],[82,295],[247,70],[77,69],[69,92],[148,47],[86,74],[82,282],[131,84],[82,173],[270,72],[173,83],[210,52],[137,70],[285,44],[34,45],[229,49],],
'708':[[241,70],[17,6],[369,142],[171,738],],
'709':[[365,13],[171,708],[241,40],[369,112],],
'710':[[241,36],[369,108],[388,12],[171,704],],
'712':[[131,106],[270,113],[370,63],[317,130],[86,109],[173,137],[61,89],[77,91],[247,111],[57,116],[137,92],],
'717':[[139,59],[369,482],[106,6],[171,1078],],
'718':[[139,57],[18,4],[353,6],[171,1076],[369,480],],
'719':[[18,77],[18,32],],
'720':[[18,39],],
'723':[[82,204],[34,134],],
'733':[[369,446],[171,1042],[248,18],[49,7],],
'734':[[171,608],[354,14],[245,14],[171,373],[240,12],[63,9],[124,9],[248,15],[56,8],[241,14],[38,15],[22,14],[49,522],[139,12],[171,1087],[35,11],[92,12],[49,12],],
'735':[[38,37],[369,156],[139,25],[171,752],[171,1044],[369,245],[369,409],[171,841],[254,104],[369,448],[369,53],[92,41],[63,26],[171,1005],[171,465],[254,17],[171,649],[171,1098],[211,29],[195,31],[354,41],[245,27],[56,20],[19,23],[171,378],[248,36],],
'736':[[63,28],[195,33],[171,1100],[32,4],[19,25],],
'737':[[136,4],[126,4],[19,27],[195,35],[171,1102],[63,30],],
'738':[[32,6],[19,29],[195,37],[63,32],[171,1104],],
'739':[[241,38],[171,871],[369,20],[171,665],[369,110],[369,275],[63,34],[211,73],[195,39],[92,85],[171,509],[254,148],[124,31],[254,35],[171,1106],[56,38],[377,23],[245,43],[369,69],[171,706],[171,616],[19,31],[38,67],[171,396],],
'740':[[171,1108],[19,33],[395,4],[63,36],[195,41],],
'741':[[63,42],[123,41],[171,1114],[221,6],[195,47],[19,39],],
'742':[[236,4],[63,46],[171,1118],[19,43],[195,51],],
'743':[[171,1120],[158,4],[346,4],[63,48],[195,53],[19,45],],
'744':[[236,6],[171,1122],[224,4],[63,50],[19,47],[195,55],],
'745':[[63,60],[289,6],[19,57],[171,1132],[128,4],[195,65],[346,33],],
'746':[[315,4],[134,6],[63,62],[171,1134],[19,59],[195,67],],
'747':[[322,6],[171,1144],[195,77],[63,72],[19,69],[117,4],],
'748':[[19,71],[115,6],[195,79],[349,4],[63,74],[171,1146],],
'749':[[19,73],[171,1148],[117,6],[167,4],[63,76],[195,81],],
'750':[[349,6],[314,4],[19,75],[171,1150],[63,78],[195,83],],
'751':[[195,85],[171,1152],[63,80],[167,6],[91,4],[19,77],],
'752':[[195,87],[200,4],[63,82],[19,79],[314,6],[171,1154],],
'753':[[257,4],[195,89],[171,1156],[63,84],[19,81],[91,6],],
'754':[[19,83],[200,6],[63,86],[171,1158],[195,91],],
'755':[[120,4],[171,1182],[240,23],[19,107],],
'756':[[340,4],[341,4],[19,109],[240,25],[171,1184],],
'757':[[120,29],[19,111],[240,27],[171,1186],[120,6],[293,4],],
'758':[[341,6],[183,4],[19,113],[171,1188],[240,29],],
'759':[[171,1190],[293,6],[240,31],[19,115],],
'760':[[369,397],[240,33],[171,1192],[171,433],[171,800],[38,189],[369,441],[241,72],[171,993],[171,826],[56,54],[35,36],[369,230],[254,51],[369,144],[354,89],[248,68],[254,72],[171,740],[211,165],[22,49],[171,1037],[369,204],[92,177],[171,412],[254,240],[171,601],[19,117],],
'761':[[240,35],[19,119],[171,1194],[297,4],],
'762':[[298,4],[171,1196],[29,4],[19,121],[240,37],],
'763':[[240,39],[19,123],[352,4],[171,1198],[297,6],],
'764':[[19,125],[71,4],[29,6],[171,1200],[240,41],],
'765':[[240,43],[352,6],[387,4],[19,127],[171,1202],],
'766':[[171,1204],[240,45],[19,129],[71,6],],
'767':[[24,28],[38,133],[34,4],[171,937],[285,6],[369,341],],
'768':[[20,4],[369,339],[43,23],[38,131],[171,935],[146,6],],
'769':[[36,4],[20,6],[171,939],[369,343],[38,135],],
'770':[[20,49],],
'771':[[20,67],[82,191],],
'772':[[152,4],[194,14],[369,168],[354,53],[171,764],],
'773':[[146,61],[57,134],[209,125],[100,65],[270,131],[137,110],[285,58],[187,79],[283,66],[173,155],[148,77],[284,95],[394,68],[135,70],[180,82],[20,85],[34,59],[332,68],[36,66],[269,94],[210,70],[86,127],[247,129],[229,88],],
'774':[[194,26],[194,61],],
'775':[[146,170],],
'780':[[41,34],[379,70],[217,70],],
'785':[[285,4],[135,6],[369,337],[171,933],[38,129],],
'789':[[285,152],[20,181],],
'791':[[118,53],[244,54],[235,100],],
'792':[[171,144],[21,10],[96,11],[227,271],[208,56],],
'800':[[171,1242],[266,379],[153,17],[179,29],[185,45],],
'817':[[389,51],[151,51],],
'818':[[144,44],[140,38],],
'821':[[227,277],[171,150],[208,62],],
'822':[[22,29],],
'823':[[392,4],[369,214],[22,33],[171,810],],
'824':[[369,222],[222,6],[171,818],[144,4],[22,41],],
'825':[[22,43],[369,224],[140,4],[112,6],[171,820],],
'826':[[144,6],[369,226],[326,4],[171,822],[22,45],],
'827':[[171,824],[369,228],[140,6],[22,47],],
'828':[[79,4],[369,232],[22,51],[171,828],],
'829':[[171,798],[354,87],[369,202],[62,6],],
'830':[[267,30],[171,429],[35,32],[307,6],[215,4],[254,68],],
'831':[[254,66],[78,6],[78,29],[35,30],[23,4],[171,427],],
'832':[[23,6],[171,431],[35,34],[254,70],],
'833':[[193,6],[311,4],[254,82],[35,46],[171,443],],
'834':[[293,31],[23,31],],
'836':[[23,139],[293,139],],
'839':[[95,517],],
'840':[[311,105],[387,105],],
'849':[[183,116],[215,116],],
'852':[[38,177],[43,6],[369,385],[171,981],[282,4],],
'853':[[369,383],[171,979],[38,175],[24,4],[119,6],],
'854':[[38,179],[24,6],[369,387],[393,4],[171,983],],
'855':[[148,164],[218,377],],
'856':[[340,166],[308,199],],
'858':[[38,35],[369,243],[171,839],],
'862':[[369,192],[171,788],[354,77],[368,6],[362,4],],
'863':[[101,6],[369,190],[354,75],[171,786],[26,4],],
'864':[[369,194],[354,79],[151,4],[26,6],[171,790],],
'866':[[263,99],[26,48],[50,111],],
'868':[[152,97],],
'869':[[261,22],[171,172],[227,299],[345,81],[208,84],[358,11],],
'871':[[69,4],[369,301],[50,6],[171,897],[38,93],],
'872':[[53,6],[27,4],[369,299],[171,895],[38,91],],
'873':[[369,303],[171,899],[27,6],[276,4],[38,95],],
'881':[[139,47],[237,6],[328,4],[369,470],[171,1066],],
'882':[[369,468],[28,4],[139,45],[171,1064],[216,6],],
'883':[[369,472],[28,6],[150,4],[139,49],[171,1068],],
'884':[[192,27],[299,27],[216,27],[205,27],[271,27],[237,27],],
'888':[[225,47],],
'891':[[48,4981],],
'912':[[226,79],[336,169],[46,79],[100,204],],
'926':[[374,40],[324,39],[242,9],[355,12],[254,96],[223,59],[92,33],[171,457],],
'935':[[224,56],],
'940':[[197,32],[185,75],[306,16],[171,1272],],
'945':[[42,51],[42,210],],
'958':[[210,181],],
'970':[[239,30],],
'986':[[252,4],[30,486],[254,45],[212,6],[56,48],[171,406],],
'987':[[31,16],[172,4],[199,6],[171,505],[211,69],[254,144],[92,81],],
'988':[[31,6],[92,83],[211,71],[171,507],[254,146],[172,14],],
'989':[[31,40],],
'990':[[31,43],],
'991':[[31,51],],
'992':[[142,125],],
'997':[[32,28],],
'998':[[354,47],[171,758],[259,4],[369,162],[163,6],],
'999':[[33,4],[369,160],[171,756],[354,45],[45,4],],
'1000':[[33,6],[369,164],[354,49],[171,760],],
'1005':[[122,85],[272,50],],
'1007':[[198,4],[62,136],[171,780],[73,4],[369,184],[354,69],],
'1008':[[198,55],[73,36],[305,40],],
'1009':[[38,137],[171,941],[34,6],[148,4],[369,345],[102,195],],
'1010':[[78,4],[35,26],[171,423],[254,62],],
'1011':[[35,38],[171,435],[149,4],[254,74],],
'1012':[[171,445],[254,84],[382,6],[35,48],],
'1013':[[254,49],[252,6],[171,410],[56,52],],
'1014':[[171,943],[36,6],[38,139],[369,347],[207,4],],
'1021':[[369,331],[100,4],[269,6],[38,123],[171,927],],
'1023':[[147,6],[369,435],[248,62],[171,1031],[76,4],[147,32],],
'1024':[[47,6],[369,433],[171,1029],[248,60],[37,4],],
'1025':[[37,6],[248,64],[333,4],[171,1033],[369,437],],
'1026':[[37,27],],
'1028':[[350,4],[87,16],[248,44],[369,417],[360,4],[171,1013],],
'1030':[[369,411],[333,26],[248,38],[171,1007],],
'1035':[[87,70],],
'1036':[[37,90],],
'1037':[[139,7],[369,407],[38,19],[171,1003],],
'1040':[[312,4],[171,845],[38,41],[369,249],[166,4],],
'1041':[[38,43],[255,4],[110,6],[369,251],[171,847],],
'1042':[[348,4],[171,849],[369,253],[166,6],[38,45],],
'1043':[[369,255],[207,113],[38,47],[171,851],[255,6],[378,4],],
'1044':[[109,4],[369,257],[171,853],[348,6],[38,49],],
'1045':[[171,855],[38,51],[369,259],[378,6],],
'1046':[[171,859],[272,4],[38,55],[369,263],[316,14],],
'1047':[[171,861],[38,57],[316,4],[133,4],[272,16],[369,265],],
'1048':[[379,4],[38,59],[133,16],[171,863],[272,6],[369,267],],
'1049':[[60,4],[133,6],[171,865],[38,61],[369,269],[379,16],],
'1050':[[171,867],[379,6],[232,4],[369,271],[60,16],[38,63],],
'1051':[[171,869],[38,65],[232,14],[369,273],[60,6],],
'1052':[[38,69],[165,4],[369,277],[82,15],[171,873],],
'1053':[[38,71],[369,279],[165,15],[82,4],[171,875],],
'1054':[[38,75],[113,4],[369,283],[171,879],],
'1055':[[44,4],[369,285],[38,77],[286,4],[171,881],],
'1056':[[171,883],[263,4],[369,287],[38,79],[113,6],],
'1057':[[171,885],[338,4],[203,81],[369,289],[44,6],[276,79],[38,81],],
'1058':[[263,6],[203,4],[38,83],[369,291],[171,887],],
'1059':[[171,889],[287,4],[338,6],[38,85],[369,293],],
'1060':[[171,891],[53,4],[38,87],[203,6],[369,295],],
'1061':[[369,297],[287,6],[171,893],[50,4],[38,89],],
'1062':[[38,97],[171,901],[369,305],[273,4],[69,6],],
'1063':[[364,4],[171,903],[369,307],[38,99],[276,6],],
'1064':[[171,905],[38,101],[369,309],[364,49],[273,6],[347,4],],
'1065':[[343,4],[38,103],[369,311],[171,907],[364,6],],
'1066':[[38,105],[369,313],[171,909],[347,6],[394,4],],
'1067':[[369,315],[38,107],[343,6],[137,4],[171,911],],
'1068':[[173,4],[369,317],[394,6],[171,913],[38,109],],
'1069':[[86,4],[137,6],[369,319],[171,915],[137,272],[38,111],],
'1070':[[369,321],[57,4],[111,88],[171,917],[173,6],[38,113],],
'1071':[[38,115],[187,200],[86,6],[283,4],[171,919],[369,323],],
'1072':[[187,4],[369,325],[57,6],[38,117],[171,921],],
'1073':[[38,119],[369,327],[171,923],[269,4],[283,6],],
'1074':[[284,4],[187,6],[369,329],[171,925],[38,121],],
'1075':[[369,333],[38,125],[171,929],[135,4],[229,194],[284,6],],
'1076':[[171,931],[284,226],[369,335],[38,127],[100,6],[146,4],],
'1077':[[38,141],[229,4],[148,6],[369,349],[171,945],],
'1078':[[38,143],[369,351],[325,27],[207,6],[171,947],[332,4],],
'1079':[[64,29],[260,100],[369,353],[38,145],[229,6],[171,949],[260,4],],
'1080':[[131,4],[171,951],[332,6],[369,355],[38,147],[77,145],],
'1081':[[171,953],[38,149],[369,357],[77,4],[260,6],],
'1082':[[369,359],[131,6],[171,955],[247,4],[38,151],],
'1083':[[171,957],[38,153],[55,32],[369,361],[270,4],[77,6],],
'1084':[[38,155],[171,959],[369,363],[209,4],[247,6],],
'1085':[[270,6],[171,961],[210,4],[369,365],[38,157],],
'1086':[[209,6],[119,23],[180,4],[38,159],[369,367],[171,963],],
'1087':[[210,6],[64,4],[238,28],[38,161],[369,369],[171,965],],
'1088':[[55,4],[38,163],[180,6],[369,371],[171,967],],
'1089':[[369,373],[238,4],[38,165],[171,969],[64,6],],
'1090':[[38,167],[177,4],[55,6],[171,971],[369,375],],
'1091':[[38,169],[325,4],[393,27],[171,973],[238,6],[369,377],],
'1092':[[119,4],[177,6],[369,379],[38,171],[171,975],],
'1093':[[38,173],[171,977],[369,381],[325,6],[43,4],],
'1094':[[282,6],[38,181],[369,389],[171,985],[228,4],],
'1095':[[38,183],[393,6],[356,4],[171,987],[369,391],],
'1096':[[228,6],[369,393],[171,989],[38,185],[190,4],],
'1097':[[171,991],[38,187],[356,57],[356,6],[369,395],],
'1098':[[129,4],[369,401],[38,193],[171,997],[323,4],],
'1099':[[171,999],[369,403],[38,195],[107,6],],
'1101':[[118,44],[327,28],[235,62],[396,36],[244,45],[171,1321],[361,34],[94,36],[178,74],[41,392],[142,21],[253,31],[191,36],[142,73],[188,354],[320,46],[72,33],],
'1113':[[204,80],],
'1119':[[256,37],],
'1125':[[217,52],[133,70],[41,100],[350,74],[379,52],],
'1177':[[41,76],[316,51],[217,64],[350,94],[379,64],],
'1180':[[41,28],[122,142],[99,40],[122,40],[217,94],[133,52],[351,38],[223,34],[379,40],[217,40],[388,36],[350,54],],
'1211':[[41,64],[379,82],],
'1238':[[311,66],[387,66],],
'1254':[[91,46],],
'1255':[[301,84],[343,104],],
'1260':[[350,124],[350,114],[350,104],],
'1267':[[379,58],[41,106],[350,84],[217,58],],
'1270':[[171,657],[380,4],[40,14],[369,61],[245,35],],
'1271':[[380,16],[171,659],[40,4],[386,4],[245,37],[369,63],],
'1277':[[171,653],[219,50],[369,57],[245,31],[219,4],],
'1278':[[41,16],[351,4],[291,4],[211,51],[254,126],[92,63],[171,487],],
'1279':[[41,125],],
'1280':[[41,127],],
'1281':[[41,135],],
'1282':[[41,144],],
'1283':[[41,40],],
'1284':[[41,157],],
'1285':[[41,170],],
'1286':[[379,88],[41,52],],
'1287':[[41,184],],
'1288':[[41,58],],
'1289':[[41,200],],
'1290':[[41,211],],
'1291':[[41,217],],
'1292':[[41,228],],
'1293':[[41,239],],
'1294':[[41,250],],
'1295':[[41,261],],
'1296':[[41,272],],
'1297':[[41,283],],
'1298':[[41,285],],
'1304':[[171,1309],],
'1314':[[92,37],[171,461],[95,16],[211,6],[254,100],],
'1321':[[254,106],[171,467],[92,43],[211,31],[130,4],],
'1326':[[73,31],[151,27],[305,35],[372,31],[368,28],[389,27],[319,31],],
'1327':[[202,4],[171,513],[92,89],[211,77],[254,152],[337,17],[42,4],],
'1329':[[228,44],],
'1330':[[42,125],[42,21],],
'1331':[[42,27],[42,133],],
'1332':[[42,168],[42,33],],
'1333':[[42,39],[250,56],[81,62],[367,50],[42,179],[234,104],[142,111],[81,37],[142,51],],
'1334':[[42,201],[42,45],],
'1335':[[42,57],[42,243],],
'1336':[[42,63],[42,268],],
'1337':[[42,273],[42,69],],
'1338':[[42,299],[42,75],],
'1339':[[42,81],[42,346],],
'1340':[[42,87],[42,359],],
'1341':[[92,75],[99,16],[223,4],[254,138],[171,499],[217,6],[211,63],],
'1342':[[42,384],[42,93],],
'1343':[[42,392],[42,99],],
'1344':[[42,105],[42,403],],
'1345':[[42,111],[42,413],],
'1349':[[378,35],],
'1355':[[92,115],[211,103],[254,178],[361,6],[81,4],[171,539],],
'1370':[[161,590],],
'1377':[[92,45],[254,108],[211,33],[278,4],[184,4],[171,469],],
'1380':[[235,165],],
'1392':[[104,6],[211,127],[254,202],[171,563],[239,4],[92,139],],
'1395':[[138,4],[92,141],[94,6],[211,129],[254,204],[171,565],],
'1420':[[130,6],[92,47],[376,4],[254,110],[211,35],[171,471],],
'1424':[[186,501],],
'1433':[[312,61],],
'1476':[[128,225],[322,227],],
'1486':[[94,54],],
'1492':[[42,1330],[214,387],],
'1493':[[122,16],[171,768],[369,172],[152,6],[359,4],[354,57],],
'1494':[[44,43],[207,31],[287,37],[260,34],],
'1495':[[260,42],[44,52],[207,38],],
'1496':[[44,68],[287,53],],
'1497':[[44,77],],
'1501':[[354,43],[171,754],[369,158],[163,4],],
'1502':[[45,34],[122,64],],
'1503':[[227,309],[208,94],[358,21],[171,182],[226,10],],
'1504':[[208,89],[46,10],[227,304],[390,21],[171,177],],
'1505':[[171,187],[336,10],[46,20],[227,314],[208,99],],
'1509':[[217,185],],
'1510':[[217,178],],
'1511':[[248,58],[294,6],[147,4],[171,1027],[369,431],],
'1512':[[171,1025],[47,35],[275,6],[47,4],[369,429],[248,56],],
'1513':[[171,1039],[248,70],[369,443],],
'1582':[[198,48],],
'1606':[[311,47],[71,57],[382,57],[387,47],],
'1667':[[142,183],],
'1684':[[232,62],],
'1704':[[369,122],[241,50],[171,718],[67,4],[143,6],],
'1705':[[171,720],[141,6],[61,4],[369,124],[241,52],],
'1709':[[369,85],[59,6],[245,59],[171,681],[58,4],],
'1719':[[381,626],],
'1720':[[254,37],[171,398],[56,40],[65,13],],
'1722':[[56,44],[254,41],[212,4],[171,402],],
'1723':[[65,118],[65,49],],
'1724':[[175,4],[56,46],[171,404],[301,4],[254,43],],
'1767':[[200,84],],
'1769':[[200,93],],
'1773':[[315,86],[289,86],],
'1774':[[289,98],[315,98],],
'1790':[[289,109],[315,109],],
'1791':[[200,100],],
'1795':[[257,51],],
'1796':[[257,87],],
'1811':[[134,164],[337,114],[302,166],],
'1819':[[315,208],],
'1826':[[89,111],[213,134],],
'1828':[[313,127],[170,51],],
'1832':[[367,83],[322,55],[250,89],[396,48],[128,58],],
'1846':[[134,69],[322,50],[302,66],[128,53],],
'1847':[[54,1519],],
'1878':[[93,81],[93,37],],
'1947':[[254,226],[168,40],[171,587],[244,6],[191,4],[211,151],[92,163],],
'1951':[[217,194],[217,112],],
'1953':[[171,636],[124,51],[372,6],[377,43],[89,4],[369,40],],
'1954':[[152,116],],
'1955':[[92,97],[211,85],[254,160],[171,521],[363,4],],
'1956':[[217,171],],
'1966':[[254,218],[211,143],[220,6],[92,155],[171,579],[268,4],],
'2007':[[105,69],],
'2013':[[124,47],[171,632],[234,6],[369,36],[377,39],[372,4],],
'2014':[[233,45],[233,4],[171,634],[377,41],[369,38],[124,49],[178,6],],
'2038':[[101,4],[171,782],[369,186],[354,71],[305,6],],
'2040':[[316,71],],
'2041':[[316,76],],
'2048':[[139,27],[369,450],[353,188],[171,1046],],
'2049':[[50,49],[53,39],[69,38],],
'2050':[[82,36],[50,54],[53,44],],
'2051':[[82,252],[82,67],[82,237],],
'2063':[[235,171],],
'2064':[[235,178],],
'2067':[[268,6],[92,159],[244,4],[171,583],[211,147],[254,222],],
'2069':[[92,57],[254,120],[171,481],[201,6],[211,45],],
'2122':[[331,532],],
'2128':[[335,3782],],
'2133':[[254,212],[329,4],[211,137],[92,149],[295,6],[171,573],],
'2135':[[171,622],[377,29],[369,26],[213,4],[124,37],],
'2140':[[122,90],[198,91],],
'2161':[[171,529],[92,105],[254,168],[132,4],[320,6],[211,93],],
'2178':[[191,48],[72,45],],
'2179':[[367,79],[196,58],[218,62],[250,85],[363,78],[296,36],[156,64],[235,86],[178,98],],
'2181':[[254,140],[223,16],[171,501],[211,65],[92,77],[199,4],[99,6],],
'2182':[[313,179],[363,269],],
'2211':[[254,232],[92,169],[211,157],[296,4],[396,6],[171,593],],
'2217':[[218,169],],
'2222':[[92,171],[254,234],[211,159],[309,34],[80,4],[170,6],[171,595],],
'2227':[[218,191],],
'2247':[[173,126],[77,80],[86,98],[57,105],[86,259],[137,81],[247,100],[131,95],[270,102],],
'2248':[[232,53],],
'2249':[[391,6],[171,390],[254,29],[56,32],],
'2250':[[366,12],[56,36],[254,33],[171,394],],
'2251':[[171,408],[391,71],[301,6],[254,47],[56,50],[267,4],],
'2252':[[254,53],[375,4],[56,56],[171,414],],
'2253':[[254,55],[56,58],[230,4],[171,416],],
'2254':[[86,61],[131,71],[57,63],[173,70],[137,57],],
'2255':[[57,76],],
'2256':[[57,92],[86,85],],
'2270':[[245,61],[369,87],[371,6],[74,4],[171,683],],
'2274':[[58,60],],
'2275':[[371,123],],
'2276':[[60,68],],
'2277':[[60,74],],
'2278':[[60,79],],
'2279':[[60,47],[60,86],],
'2280':[[60,91],],
'2281':[[60,102],],
'2290':[[354,85],[389,6],[171,796],[319,4],[369,200],],
'2291':[[151,6],[171,794],[369,198],[62,4],[354,83],],
'2292':[[62,35],],
'2301':[[359,86],],
'2302':[[260,68],],
'2303':[[65,19],[65,59],],
'2304':[[65,67],[65,25],],
'2305':[[65,31],[65,77],],
'2306':[[65,88],[65,37],],
'2307':[[65,43],[65,115],],
'2308':[[65,163],[342,309],],
'2318':[[171,742],[369,146],[241,74],],
'2320':[[66,28],],
'2326':[[69,48],[106,35],[353,60],[82,160],],
'2327':[[150,126],[103,126],],
'2342':[[201,25],],
'2353':[[313,71],],
'2357':[[324,4],[92,103],[253,6],[254,166],[171,527],[211,91],],
'2363':[[71,38],[382,38],],
'2364':[[258,78],[382,65],[71,65],],
'2368':[[382,89],[71,89],],
'2369':[[171,585],[254,224],[211,149],[118,6],[72,4],[92,161],],
'2370':[[72,6],[254,228],[396,4],[92,165],[211,153],[191,303],[171,589],],
'2372':[[72,84],],
'2375':[[171,533],[132,6],[92,109],[211,97],[254,172],[313,4],],
'2376':[[211,95],[75,4],[171,531],[324,6],[92,107],[254,170],],
'2377':[[361,4],[75,6],[171,535],[254,174],[92,111],[211,99],],
'2378':[[254,154],[92,91],[337,6],[211,79],[171,515],[142,4],],
'2379':[[75,43],],
'2380':[[75,55],],
'2383':[[92,101],[363,6],[202,25],[132,37],[171,525],[254,164],[211,89],[320,4],],
'2385':[[171,599],[254,238],[80,6],[211,163],[92,175],],
'2386':[[171,1035],[76,6],[369,439],[248,66],],
'2393':[[304,125],[304,338],],
'2395':[[350,190],],
'2398':[[76,101],],
'2400':[[341,37],[307,37],],
'2401':[[307,43],[341,43],],
'2402':[[171,597],[211,161],[92,173],[254,236],[296,6],[309,4],],
'2403':[[80,32],],
'2404':[[80,52],],
'2405':[[170,98],[80,62],],
'2412':[[80,150],[296,169],],
'2413':[[373,4],[211,105],[171,541],[92,117],[254,180],[157,6],],
'2414':[[211,107],[81,6],[171,543],[92,119],[250,4],[254,182],],
'2415':[[367,74],[126,37],[253,44],[322,66],[250,80],[196,52],[134,57],[296,61],[157,28],[218,84],[363,108],[156,58],[118,66],[178,90],[320,59],[81,30],[235,77],[244,75],[396,53],[302,54],[128,69],[116,40],],
'2417':[[82,311],],
'2418':[[111,68],],
'2419':[[82,323],],
'2420':[[82,53],],
'2421':[[82,351],],
'2422':[[82,356],],
'2423':[[82,87],],
'2424':[[82,387],],
'2425':[[82,411],],
'2426':[[82,428],],
'2427':[[82,435],],
'2428':[[82,144],],
'2429':[[82,446],],
'2430':[[82,458],],
'2431':[[82,463],],
'2432':[[82,474],],
'2433':[[82,483],],
'2434':[[82,488],],
'2436':[[82,501],],
'2437':[[82,507],],
'2438':[[165,54],[255,25],[229,72],[82,269],],
'2440':[[82,525],],
'2441':[[82,530],],
'2444':[[283,250],[109,30],],
'2461':[[296,56],[363,84],],
'2490':[[85,41],],
'2491':[[85,49],],
'2492':[[85,58],],
'2502':[[232,79],],
'2503':[[171,1011],[369,415],[350,14],[87,4],[248,42],],
'2504':[[360,14],[171,1015],[87,6],[248,46],[369,419],],
'2505':[[87,56],],
'2506':[[87,60],],
'2507':[[87,76],],
'2508':[[87,91],],
'2511':[[171,130],[188,8],[227,257],],
'2512':[[88,55],[171,134],[88,11],[208,9],[227,261],],
'2513':[[171,638],[111,4],[377,45],[369,42],[124,53],[233,6],],
'2514':[[369,44],[156,4],[171,640],[377,47],[89,6],[124,55],],
'2515':[[213,143],[89,119],],
'2516':[[89,149],[213,225],],
'2517':[[111,36],[213,232],[156,45],[89,158],],
'2518':[[89,165],],
'2519':[[89,177],],
'2520':[[89,193],],
'2521':[[89,204],],
'2522':[[89,215],],
'2531':[[369,28],[124,39],[189,4],[171,624],[218,4],[377,31],],
'2535':[[171,642],[124,57],[369,46],[111,6],[377,49],],
'2537':[[254,192],[211,117],[116,6],[292,4],[92,129],[171,553],],
'2538':[[211,115],[310,6],[254,190],[90,4],[231,123],[171,551],[92,127],],
'2539':[[254,194],[211,119],[92,131],[171,555],[90,6],[383,4],],
'2540':[[90,34],[90,63],],
'2548':[[313,6],[254,176],[211,101],[171,537],[157,4],[92,113],],
'2549':[[254,184],[92,121],[211,109],[367,4],[171,545],[373,6],],
'2550':[[254,188],[367,6],[211,113],[116,4],[171,549],[92,125],],
'2551':[[292,6],[92,133],[211,121],[327,4],[171,557],[254,196],],
'2552':[[104,4],[383,6],[92,135],[171,559],[211,123],[254,198],],
'2553':[[327,6],[92,137],[94,4],[211,125],[254,200],[171,561],],
'2554':[[138,6],[254,208],[295,4],[171,569],[211,133],[92,145],],
'2555':[[98,6],[92,147],[211,135],[254,210],[171,571],[374,4],],
'2556':[[254,214],[220,4],[211,139],[92,151],[374,6],[171,575],],
'2557':[[329,6],[225,4],[211,141],[171,577],[254,216],[92,153],],
'2558':[[171,581],[254,220],[225,6],[118,4],[211,145],[92,157],],
'2559':[[254,230],[171,591],[211,155],[92,167],[191,6],[170,4],],
'2560':[[171,618],[93,13],[124,33],[369,22],[377,25],[156,133],],
'2561':[[93,60],[93,25],],
'2562':[[93,31],[93,71],],
'2563':[[93,89],],
'2568':[[94,40],],
'2578':[[156,69],[196,63],[218,68],],
'2579':[[363,221],],
'2580':[[363,231],],
'2581':[[363,239],],
'2582':[[363,251],],
'2612':[[171,714],[241,46],[369,118],[317,4],[143,4],],
'2613':[[241,44],[171,712],[97,4],[369,116],],
'2614':[[97,29],],
'2617':[[99,64],],
'2618':[[99,75],],
'2619':[[99,83],],
'2620':[[99,93],],
'2621':[[99,106],],
'2622':[[99,108],],
'2654':[[283,54],[187,67],],
'2657':[[171,784],[368,4],[354,73],[369,188],[198,6],],
'2671':[[287,102],],
'2678':[[369,476],[171,1072],[150,6],[353,4],[139,53],],
'2679':[[328,6],[139,51],[369,474],[103,4],[171,1070],],
'2680':[[139,55],[171,1074],[106,4],[369,478],[103,6],],
'2682':[[103,44],[150,44],],
'2694':[[171,1021],[288,4],[369,425],[275,4],[248,52],[275,34],],
'2695':[[294,47],[171,1019],[248,50],[105,4],[369,423],],
'2696':[[105,6],[171,1023],[248,54],[294,4],[369,427],],
'2697':[[105,27],],
'2698':[[350,149],],
'2706':[[106,59],],
'2708':[[280,4],[245,51],[369,77],[171,673],],
'2709':[[108,4],[245,53],[171,675],[334,4],[369,79],],
'2710':[[108,23],[304,325],[304,113],],
'2711':[[342,15],[304,4],[245,47],[110,42],[369,73],[171,669],],
'2712':[[114,35],[111,42],],
'2713':[[111,55],],
'2728':[[169,4],[369,454],[139,31],[171,1050],],
'2729':[[299,4],[171,1052],[114,4],[369,456],[139,33],],
'2730':[[169,37],],
'2734':[[114,70],[169,71],],
'2735':[[270,250],[116,130],],
'2778':[[319,65],[122,78],[368,111],],
'2779':[[122,97],],
'2780':[[122,99],],
'2789':[[159,7],[171,1289],[159,171],],
'2853':[[125,269],],
'2856':[[125,274],[171,1294],],
'2869':[[133,83],],
'2870':[[133,90],],
'2871':[[133,101],],
'2872':[[133,107],],
'2873':[[133,118],],
'2874':[[133,124],],
'2875':[[133,126],],
'2893':[[138,43],],
'2894':[[171,1054],[369,458],[139,35],[169,6],[271,4],],
'2895':[[299,6],[171,1056],[139,37],[369,460],[205,4],],
'2896':[[139,39],[369,462],[192,4],[171,1058],[271,6],],
'2897':[[139,41],[369,464],[205,6],[171,1060],[216,4],],
'2898':[[171,1062],[139,43],[369,466],[237,4],[192,6],],
'2899':[[193,31],[352,31],],
'2900':[[142,27],[142,79],],
'2901':[[142,93],[142,33],],
'2902':[[142,99],[142,39],],
'2903':[[142,45],[142,104],[373,37],],
'2904':[[142,116],[142,57],],
'2914':[[171,693],[154,6],[369,97],[245,71],],
'2917':[[145,77],[212,79],],
'2923':[[148,57],],
'2925':[[369,196],[389,4],[362,6],[171,792],[354,81],],
'2929':[[152,74],],
'2930':[[152,78],],
'2931':[[152,28],],
'2932':[[152,87],],
'2933':[[152,34],],
'2934':[[152,40],],
'2935':[[152,52],[152,107],],
'2936':[[152,46],],
'2937':[[152,119],],
'2979':[[232,69],],
'2999':[[173,106],],
'3009':[[388,55],],
'3010':[[304,167],[304,22],[155,49],],
'3011':[[156,75],[196,69],],
'3012':[[156,85],[196,79],],
'3013':[[157,35],],
'3014':[[157,79],],
'3015':[[224,41],[158,30],[200,70],],
'3054':[[159,168],],
'3078':[[194,113],],
'3091':[[304,34],[304,188],],
'3134':[[304,229],[304,59],],
'3167':[[365,186],],
'3172':[[365,134],],
'3175':[[165,27],],
'3181':[[313,135],[170,56],],
'3182':[[170,63],],
'3183':[[170,71],],
'3184':[[170,87],],
'3192':[[170,279],],
'3204':[[226,20],[208,104],[227,319],[171,192],],
'3205':[[245,29],[171,651],[262,4],[369,55],[304,400],[262,48],],
'3208':[[171,1336],[227,253],],
'3209':[[172,42],],
'3210':[[172,49],],
'3211':[[172,66],],
'3215':[[173,94],],
'3216':[[173,115],],
'3257':[[207,50],],
'3259':[[177,56],],
'3260':[[178,103],[383,28],],
'3264':[[178,322],],
'3480':[[290,664],],
'3521':[[217,124],[217,258],],
'3522':[[217,251],],
'3523':[[217,244],],
'3524':[[217,106],[217,237],],
'3525':[[217,153],],
'3527':[[217,161],],
'3528':[[217,204],],
'3529':[[217,144],],
'3547':[[180,69],],
'3556':[[180,226],],
'3603':[[215,29],[183,29],],
'3628':[[187,58],],
'3675':[[189,131],],
'3676':[[189,151],],
'3677':[[189,159],],
'3684':[[190,77],],
'3685':[[191,55],],
'3691':[[194,69],],
'3692':[[194,71],],
'3693':[[194,77],],
'3698':[[217,269],],
'3701':[[200,49],],
'3702':[[200,61],],
'3703':[[200,110],],
'3704':[[200,119],],
'3705':[[200,126],],
'3711':[[203,60],],
'3716':[[206,87],],
'3717':[[206,93],],
'3718':[[206,99],],
'3726':[[209,58],[260,58],],
'3727':[[209,90],],
'3728':[[209,111],[253,75],],
'3736':[[213,262],],
'3737':[[213,274],],
'3749':[[217,213],],
'3750':[[217,223],[217,118],],
'3751':[[217,263],],
'3752':[[217,275],],
'3753':[[217,280],],
'3754':[[217,285],],
'3755':[[217,287],],
'3767':[[218,208],],
'3778':[[224,67],],
'3800':[[232,91],],
'3834':[[244,67],],
'3962':[[246,1977],],
'3970':[[248,34],],
'3977':[[250,45],],
'3979':[[367,137],[250,134],],
'4000':[[251,345],],
'4001':[[252,43],],
'4005':[[257,65],],
'4032':[[263,58],],
'4033':[[263,70],],
'4097':[[280,47],[371,40],],
'4100':[[287,46],],
'4109':[[292,33],],
'4112':[[294,28],],
'4113':[[350,174],],
'4123':[[304,28],[304,175],],
'4124':[[304,203],[304,40],],
'4125':[[304,46],[304,210],],
'4126':[[304,217],[304,52],],
'4127':[[304,65],[304,247],],
'4128':[[304,257],[304,71],],
'4129':[[304,77],[304,267],],
'4130':[[304,278],[304,83],],
'4131':[[304,89],[304,293],],
'4132':[[304,95],[304,302],],
'4133':[[304,309],[304,101],],
'4134':[[304,107],[304,320],],
'4135':[[304,332],[304,119],],
'4136':[[304,347],[304,131],],
'4137':[[304,137],[304,362],],
'4138':[[304,143],[304,373],],
'4139':[[304,149],[304,382],],
'4140':[[304,390],[326,52],],
'4184':[[341,49],[307,49],],
'4203':[[313,77],],
'4204':[[313,85],],
'4205':[[313,109],],
'4213':[[316,81],],
'4214':[[316,92],],
'4215':[[316,100],],
'4216':[[316,107],],
'4217':[[316,109],],
'4218':[[316,114],],
'4221':[[317,34],],
'4222':[[317,46],],
'4224':[[319,37],],
'4234':[[329,71],],
'4337':[[337,48],[337,23],],
'4339':[[337,55],[337,29],],
'4340':[[337,89],],
'4397':[[337,62],[337,35],],
'4401':[[379,130],],
'4404':[[379,93],[379,206],[338,91],],
'4407':[[342,91],[342,21],],
'4408':[[342,102],[342,27],],
'4409':[[342,33],[342,117],],
'4410':[[342,39],[342,153],],
'4411':[[342,45],[342,185],],
'4412':[[342,214],[342,51],],
'4413':[[342,57],[342,246],],
'4414':[[342,258],[342,63],],
'4415':[[342,267],[342,69],],
'4416':[[342,75],[342,280],],
'4417':[[342,293],[342,81],],
'4435':[[350,142],],
'4436':[[350,159],],
'4437':[[350,165],],
'4438':[[350,182],],
'4439':[[350,200],],
'4440':[[350,212],],
'4441':[[350,217],],
'4442':[[350,219],],
'4443':[[350,221],],
'4520':[[359,94],],
'4524':[[360,39],],
'4525':[[360,46],],
'4526':[[360,54],],
'4528':[[361,42],],
'4529':[[362,70],],
'4539':[[365,19],[365,122],],
'4540':[[365,141],],
'4541':[[365,150],],
'4542':[[365,162],],
'4543':[[365,170],[365,73],],
'4544':[[365,194],],
'4545':[[365,202],],
'4557':[[372,37],],
'4561':[[379,118],],
'4562':[[379,122],],
'4563':[[379,135],],
'4564':[[379,141],],
'4565':[[379,151],],
'4566':[[379,159],],
'4567':[[379,163],],
'4568':[[379,167],],
'4569':[[379,174],],
'4570':[[379,181],],
'4571':[[379,191],],
'4572':[[379,218],[379,98],],
'4573':[[379,220],],
'5229':[[388,58],],
'5230':[[388,65],],
'5231':[[388,74],],
'5232':[[388,83],],
'5233':[[388,85],],
'5242':[[394,48],],
},{'2':[[384,6948],],
'3':[[21,3],[227,281],[21,100],[21,113],[21,131],[0,188],[0,10],[96,206],[161,14],[171,154],[208,66],[384,2621],],
'13':[[384,696],[384,5530],[384,2555],[384,528],[384,8090],[384,3301],],
'15':[[21,30],],
'23':[[30,362],],
'33':[[384,4628],],
'63':[[384,3854],],
'912':[[384,8518],],
'2675':[[384,3232],],
'4629':[[384,9407],],
'4724':[[384,851],[384,3322],],
},{'2':[[336,61],],
'3':[[0,192],[12,635],[21,14],[21,198],[390,15],[30,283],[384,9480],[384,2389],[358,396],[46,14],[46,87],[358,15],[48,2574],[339,284],[88,38],[336,177],[161,9],[0,15],[336,14],[321,356],[161,594],[161,598],[304,245],[277,996],[274,10],[171,138],[261,226],[261,15],[257,168],[249,117],[188,15],[227,265],[188,363],[200,286],[208,3],[226,87],[226,14],[390,180],],
'34':[[214,205],[277,48],[384,7744],[39,253],[227,203],],
'37':[[355,840],],
'48':[[384,9783],],
'59':[[342,225],[30,463],[181,493],[181,478],[284,208],[164,139],[232,125],],
'155':[[165,80],[384,3649],[161,403],],
'255':[[308,39],[214,22],[340,39],],
'792':[[384,5201],[384,7522],],
'842':[[215,86],[384,7996],[293,85],[23,85],[340,46],[183,86],[308,46],],
'886':[[384,4154],],
'1142':[[384,5771],[277,99],[384,5764],[39,262],],
'1151':[[165,58],],
'1225':[[188,42],],
'1508':[[49,134],[214,31],],
'1764':[[48,2183],],
'2010':[[181,512],[384,8189],],
'2543':[[91,38],[384,1893],],
'2590':[[384,3654],[384,3636],],
'3096':[[161,27],],
'3098':[[161,41],],
'3575':[[208,32],],
'4873':[[384,2760],],
},{'2':[[384,7088],[384,5650],],
'3':[[208,77],[227,292],[261,3],[390,10],[171,165],[0,196],[0,20],[390,176],[384,2824],],
'13':[[384,3022],],
'15':[[261,31],[261,142],[261,77],],
'17':[[384,3264],],
'152':[[384,8182],],
'275':[[384,8666],[384,3259],],
'1004':[[384,9529],[384,5913],[384,9769],],
'1504':[[384,1637],],
'2675':[[384,7595],[384,4180],],
'4783':[[384,1899],],
'4903':[[384,3278],],
'5150':[[384,8533],],
},{'7':[[0,22],[1,7],[2,7],[3,7],[4,7],[5,5],[6,7],[7,5],[8,7],[9,7],[10,7],[11,7],[12,7],[13,7],[14,7],[15,7],[16,7],[17,7],[18,5],[19,6],[20,7],[21,22],[22,21],[23,7],[24,7],[25,7],[26,7],[27,7],[28,7],[29,7],[30,38],[31,7],[32,7],[33,7],[34,7],[35,16],[36,7],[37,7],[38,20],[39,6],[40,5],[41,7],[42,5],[43,7],[44,7],[45,5],[46,21],[47,7],[48,18],[49,13],[50,7],[51,5],[52,35],[53,7],[54,33],[55,7],[56,12],[57,7],[58,7],[59,7],[60,7],[61,7],[62,7],[63,13],[64,7],[65,3],[66,3],[67,7],[68,32],[69,7],[70,30],[71,7],[72,7],[73,5],[74,7],[75,7],[76,7],[77,7],[78,7],[79,5],[80,7],[81,7],[82,5],[83,12],[84,25],[85,7],[86,7],[87,7],[88,12],[89,7],[90,7],[91,7],[92,13],[93,3],[94,7],[95,17],[96,12],[97,7],[98,7],[99,7],[100,7],[101,7],[102,40],[103,7],[104,7],[105,7],[106,7],[107,7],[108,5],[109,5],[110,7],[111,7],[112,7],[113,7],[114,5],[115,7],[116,7],[117,7],[118,7],[119,7],[120,7],[121,18],[122,7],[123,5],[124,15],[125,3],[126,5],[127,5],[128,7],[129,5],[130,7],[131,7],[132,7],[133,7],[134,7],[135,7],[136,5],[137,7],[138,7],[139,17],[140,7],[141,7],[142,5],[143,7],[144,7],[145,5],[146,7],[147,7],[148,7],[149,7],[150,7],[151,7],[152,7],[153,34],[154,7],[155,5],[156,5],[157,7],[158,5],[159,8],[160,9],[161,16],[162,33],[163,7],[164,8],[165,5],[166,7],[167,7],[168,7],[169,7],[170,7],[395,7],[171,5],[394,7],[171,120],[172,5],[173,7],[174,7],[175,5],[176,45],[177,7],[178,7],[179,30],[180,7],[181,10],[182,7],[183,5],[184,5],[185,3],[186,47],[187,7],[188,17],[189,7],[190,5],[191,7],[192,7],[193,7],[194,5],[195,12],[196,3],[197,33],[198,7],[199,7],[200,7],[201,7],[202,7],[203,7],[204,7],[205,7],[206,7],[207,7],[208,19],[209,7],[210,7],[211,11],[212,7],[213,7],[214,7],[215,5],[216,7],[217,7],[218,5],[219,5],[220,7],[221,7],[222,7],[223,7],[224,7],[225,7],[226,21],[227,4],[228,7],[229,7],[230,5],[231,7],[232,5],[233,7],[234,7],[235,5],[236,7],[237,7],[238,7],[239,7],[240,13],[241,20],[242,16],[243,30],[244,7],[245,19],[246,7],[247,7],[248,19],[249,20],[250,7],[251,15],[252,7],[253,7],[254,6],[255,7],[256,5],[257,5],[258,3],[259,5],[260,7],[261,23],[262,5],[263,7],[264,7],[265,3],[266,35],[267,5],[268,7],[269,7],[270,7],[271,7],[272,7],[273,7],[274,20],[275,7],[276,7],[277,9],[278,7],[279,5],[280,7],[281,5],[282,7],[283,7],[284,7],[285,7],[286,5],[287,7],[288,5],[289,7],[290,36],[291,7],[292,7],[293,7],[294,7],[295,7],[296,7],[297,7],[298,5],[299,7],[300,7],[301,7],[302,7],[303,8],[304,5],[305,7],[306,26],[307,7],[308,5],[309,5],[310,7],[311,5],[312,5],[313,7],[314,7],[315,7],[316,5],[317,5],[318,5],[319,5],[320,7],[321,37],[322,7],[323,5],[324,7],[325,7],[326,5],[327,7],[328,7],[329,7],[330,5],[331,18],[332,7],[333,5],[334,7],[335,30],[336,16],[337,7],[338,7],[339,34],[340,5],[341,7],[342,5],[343,7],[344,35],[345,5],[346,7],[347,7],[348,7],[349,7],[350,5],[351,5],[352,7],[353,7],[354,19],[355,13],[356,7],[357,3],[358,22],[359,7],[360,5],[361,7],[362,7],[363,7],[364,7],[365,3],[366,3],[367,7],[368,7],[369,6],[370,7],[371,7],[372,7],[373,7],[374,7],[375,5],[376,7],[377,7],[378,7],[379,7],[380,7],[381,31],[382,7],[383,7],[384,4],[385,3],[386,7],[387,5],[388,3],[389,7],[390,22],[391,7],[392,7],[393,7],[396,7],],
'14':[[171,11],],
'117':[[171,0],],
},{'1':[[246,16],],
'2':[[153,1230],[381,89],[355,496],[84,208],],
'3':[[335,468],],
'5':[[21,149],],
'11':[[277,10],[270,8],[1,8],[269,8],[268,8],[2,8],[267,6],[3,8],[4,8],[5,6],[266,36],[265,4],[264,8],[6,8],[263,8],[7,6],[262,6],[8,8],[278,8],[9,8],[279,6],[261,24],[260,8],[259,6],[10,8],[258,4],[280,8],[257,6],[256,6],[255,8],[254,7],[281,6],[282,8],[283,8],[11,8],[253,8],[252,8],[251,16],[12,8],[250,8],[284,8],[271,8],[249,21],[248,20],[286,6],[287,8],[247,8],[288,6],[289,8],[290,37],[291,8],[292,8],[293,8],[294,8],[295,8],[296,8],[297,8],[272,8],[246,8],[245,20],[298,6],[244,8],[13,8],[14,8],[299,8],[15,8],[16,8],[300,8],[17,8],[18,6],[19,7],[20,8],[301,8],[243,31],[396,8],[302,8],[242,17],[395,8],[241,21],[240,14],[21,23],[239,8],[238,8],[285,8],[237,8],[22,22],[23,8],[236,8],[303,9],[235,6],[234,8],[233,8],[24,8],[232,6],[25,8],[304,6],[231,8],[230,6],[305,8],[306,27],[229,8],[228,8],[26,8],[27,8],[227,5],[28,8],[226,22],[225,8],[29,8],[224,8],[223,8],[222,8],[221,8],[220,8],[30,39],[219,6],[218,6],[307,8],[394,8],[217,8],[393,8],[216,8],[392,8],[215,6],[308,6],[309,6],[310,8],[214,8],[311,6],[213,8],[391,8],[212,8],[31,8],[32,8],[33,8],[211,12],[312,6],[34,8],[210,8],[209,8],[208,20],[35,17],[36,8],[207,8],[206,8],[313,8],[37,8],[390,23],[205,8],[38,21],[39,7],[273,8],[388,4],[204,8],[203,8],[202,8],[201,8],[200,8],[199,8],[387,6],[198,8],[386,8],[314,8],[40,6],[41,8],[197,34],[385,4],[196,4],[42,6],[195,13],[194,6],[193,8],[192,8],[315,8],[191,8],[190,6],[189,8],[316,6],[188,18],[317,6],[187,8],[318,6],[319,6],[320,8],[186,48],[185,4],[184,6],[183,6],[182,8],[321,38],[181,11],[180,8],[322,8],[179,31],[323,6],[324,8],[178,8],[177,8],[325,8],[326,6],[327,8],[328,8],[176,46],[175,6],[329,8],[330,6],[174,8],[331,19],[173,8],[172,6],[171,121],[171,12],[171,6],[171,1],[170,8],[169,8],[43,8],[44,8],[168,8],[167,8],[45,6],[166,8],[46,22],[47,8],[48,19],[165,6],[332,8],[333,6],[164,9],[163,8],[334,8],[335,31],[162,34],[276,8],[161,17],[160,10],[336,17],[159,9],[158,6],[157,8],[156,6],[155,6],[154,8],[337,8],[275,8],[338,8],[339,35],[340,6],[341,8],[153,35],[342,6],[152,8],[151,8],[343,8],[150,8],[149,8],[344,36],[148,8],[147,8],[345,6],[146,8],[346,8],[145,6],[347,8],[144,8],[348,8],[143,8],[349,8],[142,6],[141,8],[140,8],[139,18],[138,8],[137,8],[136,6],[350,6],[135,8],[134,8],[133,8],[132,8],[49,14],[351,6],[131,8],[130,8],[129,6],[352,8],[353,8],[128,8],[127,6],[384,5],[383,8],[126,6],[354,20],[355,14],[50,8],[382,8],[51,6],[125,4],[52,36],[124,16],[123,6],[122,8],[274,21],[121,19],[120,8],[119,8],[118,8],[117,8],[389,8],[116,8],[53,8],[381,32],[115,8],[380,8],[114,6],[113,8],[54,34],[379,8],[112,8],[111,8],[378,8],[377,8],[110,8],[109,6],[376,8],[375,6],[108,6],[374,8],[107,8],[106,8],[105,8],[104,8],[356,8],[103,8],[357,4],[373,8],[372,8],[371,8],[102,41],[101,8],[370,8],[369,7],[358,23],[100,8],[99,8],[368,8],[98,8],[97,8],[55,8],[56,13],[57,8],[359,8],[96,13],[360,6],[95,18],[367,8],[94,8],[366,4],[93,4],[92,14],[58,8],[91,8],[90,8],[361,8],[59,8],[89,8],[88,13],[60,8],[61,8],[87,8],[62,8],[362,8],[86,8],[85,8],[63,14],[64,8],[65,4],[363,8],[0,23],[84,26],[365,4],[66,4],[83,13],[67,8],[82,6],[68,33],[81,8],[69,8],[364,8],[80,8],[70,31],[79,6],[78,8],[77,8],[76,8],[75,8],[74,8],[73,6],[72,8],[71,8],],
'12':[[103,56],[150,56],],
'14':[[350,161],[339,254],[350,176],[358,375],[350,144],[121,24],[261,205],[321,314],[290,42],],
'16':[[218,238],[200,227],[274,675],[83,55],[54,201],[246,461],[321,120],[131,152],[274,168],[146,160],[100,191],[181,585],[246,1033],[95,181],[77,139],[12,446],[121,334],[30,162],[42,1086],[290,55],[355,1235],[112,53],[181,725],[355,933],[355,780],[135,148],[186,223],[142,171],[102,189],],
'17':[[335,1079],[390,91],[96,70],[261,134],[21,90],[313,384],[153,1005],[0,90],[358,235],[172,92],[161,279],],
'18':[[159,44],],
'23':[[20,164],[180,205],],
'25':[[266,153],],
'29':[[384,1999],],
'33':[[161,112],],
'37':[[331,306],[12,199],],
'38':[[84,178],],
'39':[[384,2947],[246,1229],[363,600],[162,373],[235,498],[342,189],[125,143],[331,72],[246,1341],],
'40':[[384,4388],],
'42':[[84,394],],
'43':[[49,432],[321,54],[384,2506],[82,551],[128,123],[384,3672],[322,125],[381,518],[296,150],[186,67],[200,55],[307,94],[84,526],[42,1021],[30,430],[28,64],[80,116],[381,438],[160,252],[243,223],[160,556],[84,87],[341,94],],
'45':[[384,7132],[216,41],[237,23],[192,41],[216,23],[384,3178],[237,41],[192,23],],
'47':[[365,220],[214,375],[164,24],[164,268],[321,104],],
'48':[[89,168],[270,77],[135,55],[355,1108],[276,56],[210,57],[77,74],[283,145],[135,178],[209,77],[269,52],[394,52],[187,170],[20,52],[187,157],[76,30],[358,309],[187,60],[283,51],[181,873],[179,981],[54,345],[261,149],[131,89],[86,79],[284,53],[247,75],[100,50],[105,31],[173,88],[179,1002],[332,59],[137,75],[355,795],[285,47],[187,55],[349,65],[111,48],[146,49],[335,228],],
'49':[[70,74],[339,169],[197,57],[84,125],[339,126],],
'51':[[23,92],[293,92],],
'52':[[164,312],],
'53':[[197,151],[70,270],],
'54':[[21,126],[0,111],],
'59':[[48,678],],
'60':[[161,503],],
'61':[[0,124],[246,411],[249,216],[303,98],[42,1315],[331,447],],
'62':[[160,365],],
'63':[[159,131],[49,123],[48,3702],],
'64':[[353,69],],
'65':[[306,440],[71,85],[363,472],[367,66],[200,180],[355,1389],[123,27],[363,455],[188,105],[355,1413],[148,149],[296,74],[186,312],[384,3525],[250,72],[251,120],[283,177],[42,546],[155,45],[355,1339],[103,74],[362,63],[0,132],[42,1183],[391,36],[365,113],[181,238],[150,74],[382,85],[200,172],[200,131],[164,499],[89,335],[42,958],[42,140],[42,1219],[229,160],[80,83],[25,55],[42,1101],[384,4574],[394,148],[200,105],[384,1983],],
'66':[[384,5317],[0,166],[0,135],[235,495],],
'77':[[349,46],[162,227],[363,342],[189,522],[174,276],[384,5155],[384,5029],[150,50],[103,50],[188,154],],
'79':[[42,1135],],
'82':[[277,324],[48,113],[355,1283],[12,367],[227,40],[48,75],[171,45],],
'84':[[48,590],[179,1039],[179,1046],],
'86':[[329,67],[363,349],[176,183],[49,36],[83,52],[331,95],[0,160],[363,705],[306,219],[65,122],[164,86],[164,50],[181,251],[361,96],[184,19],[283,216],[335,2470],[335,2890],[89,440],[317,120],[12,208],[246,1790],[289,51],[315,192],[95,106],[315,51],[246,807],[246,620],[48,4297],[121,52],[121,32],[48,799],[246,493],[336,105],[96,98],[156,125],[214,345],[274,395],[41,354],[54,1265],[197,477],[48,2147],[52,225],[48,3485],[355,967],],
'87':[[384,6229],[0,163],[384,3751],[356,53],],
'91':[[353,34],],
'94':[[82,188],[238,22],[24,22],[180,22],[20,22],[103,21],],
'99':[[384,7707],],
'116':[[159,102],],
'117':[[274,595],[182,26],],
'121':[[23,58],[144,29],[140,23],[293,58],[384,7432],[153,1310],[183,50],[215,50],],
'127':[[239,25],],
'128':[[396,74],],
'131':[[54,1089],[384,9476],[206,81],[246,466],[304,395],[246,304],[95,171],],
'133':[[48,3621],],
'134':[[349,30],[314,30],],
'135':[[339,80],[181,555],[8,27],[181,954],[391,67],[200,81],[355,974],[110,20],],
'136':[[42,540],[253,188],],
'137':[[321,200],[181,671],[246,408],[274,399],[48,278],],
'139':[[187,188],[105,57],[23,41],[48,2559],[293,41],],
'140':[[48,3508],[62,76],[94,45],[277,618],[227,186],[317,29],],
'141':[[1,48],],
'142':[[150,55],[103,55],],
'143':[[52,79],],
'145':[[205,29],[384,6241],[192,29],[216,29],[237,29],[299,29],[384,4664],[271,29],[349,78],],
'146':[[387,82],[311,82],],
'149':[[355,1213],[188,212],[373,84],[48,636],[65,137],[306,294],[355,666],[48,165],],
'150':[[180,201],[160,324],[277,413],[317,126],[181,163],[314,75],[118,181],[274,525],[384,3480],[313,442],[244,212],],
'152':[[246,581],[288,46],[39,393],],
'156':[[313,420],[1,79],[162,347],[59,79],[75,68],],
'158':[[355,900],[217,319],],
'162':[[189,572],],
'163':[[99,245],[341,55],[307,55],],
'165':[[209,83],[355,33],[235,55],[355,117],[277,321],[274,67],[211,22],[89,115],[149,33],[54,413],[218,194],[284,59],[244,127],[297,33],[277,369],[269,58],[384,6303],[363,73],[235,203],[52,108],[30,378],[52,178],],
'171':[[332,156],[164,248],],
'175':[[355,169],[39,233],[277,188],[277,791],],
'176':[[61,35],[296,38],[263,60],[218,64],[387,32],[370,30],[341,39],[10,127],[25,46],[215,32],[363,80],[341,45],[218,78],[6,36],[97,33],[297,31],[363,102],[235,174],[307,39],[183,32],[235,88],[2,30],[213,136],[307,45],[298,47],[89,99],[367,92],[71,32],[89,113],[89,179],[189,178],[149,31],[67,33],[293,34],[10,115],[80,34],[300,43],[189,121],[313,129],[94,30],[382,32],[209,63],[250,47],[141,49],[170,43],[23,34],[173,96],[234,128],[143,39],[317,36],[234,116],[311,32],[213,124],[127,47],],
'177':[[349,69],[302,73],[134,76],[363,505],[314,79],],
'178':[[266,144],],
'184':[[312,39],],
'185':[[315,90],[384,1795],[200,112],[200,86],[266,103],[289,90],[164,412],],
'194':[[363,236],[93,107],],
'196':[[54,478],[54,1412],],
'199':[[321,98],[12,486],[109,28],[12,120],[320,154],[54,93],[246,1910],[96,182],[181,39],[48,3570],[164,483],[384,7016],[358,384],[306,89],[160,424],[161,68],[321,407],[261,214],[48,4245],[378,31],[384,7225],],
'200':[[355,827],[381,48],],
'206':[[82,557],[214,350],[384,2943],],
'213':[[379,108],],
'215':[[384,4553],[361,66],[253,185],],
'216':[[5,35],],
'220':[[86,66],[29,75],[332,122],[86,181],[229,142],[210,124],[180,136],[394,122],[209,179],[323,20],[34,113],[93,73],[9,75],[77,108],[89,282],[36,120],[93,62],[131,76],[148,131],[44,48],[131,123],[135,124],[146,115],[287,42],[270,185],[284,149],[20,139],[173,209],[89,206],[137,62],[93,56],[173,75],[160,22],[368,90],[247,183],[100,119],[283,120],[187,133],[57,68],[57,188],[285,112],[269,148],[137,164],],
'221':[[218,373],[218,259],],
'222':[[5,39],],
'223':[[285,140],],
'224':[[181,738],[342,142],[335,219],[248,28],],
'225':[[270,227],],
'227':[[344,85],[355,767],[384,8227],[5,52],[70,212],[335,458],[368,58],[30,93],[153,150],[160,571],[363,526],[57,285],[235,420],[142,167],[355,1231],[121,330],[49,87],[246,740],[42,654],[243,260],[95,176],[314,92],],
'228':[[260,37],[259,19],[62,27],[178,201],[234,328],[10,327],[163,21],[362,25],[213,334],[189,378],[33,21],[218,252],],
'230':[[99,185],],
'237':[[48,3108],[363,314],[127,33],[320,78],[363,113],[363,265],[42,709],[209,94],[134,54],[48,4672],[170,38],[284,71],[302,51],[373,28],[269,178],[269,70],[84,139],[218,73],[170,124],[218,89],[25,33],[298,33],],
'238':[[197,159],[48,3947],[30,106],[306,1278],[70,278],],
'241':[[361,105],[100,150],[111,71],[342,122],[365,165],[110,27],[361,90],[342,105],[342,95],[42,261],[229,189],],
'242':[[251,218],[384,9111],],
'244':[[387,74],[66,26],[311,74],],
'246':[[274,731],],
'256':[[321,366],[42,324],],
'259':[[303,190],],
'261':[[51,29],[384,20],],
'264':[[84,47],],
'265':[[102,57],[57,301],],
'266':[[335,3784],[12,622],[41,388],[249,1],[277,983],[335,2326],[70,51],[355,881],[335,10],[384,2115],[164,536],[355,758],[185,94],[185,11],[171,1208],[384,8237],[42,1045],[54,646],[88,40],[12,94],[12,592],[208,40],[321,63],],
'271':[[42,800],[384,5491],[42,630],[42,614],],
'272':[[319,40],],
'277':[[363,164],[89,124],[335,3076],[10,242],[335,2375],[331,89],[10,171],[189,222],[335,2229],[189,293],[235,130],[235,92],[315,121],[235,74],[303,126],[234,243],[213,180],[234,172],[315,70],[156,40],[213,247],[42,884],[224,62],[178,87],[289,70],[178,95],[178,127],[218,117],[48,2124],[331,100],[313,132],[277,812],[179,69],[249,243],[289,121],[170,259],],
'278':[[161,355],],
'280':[[384,2811],[246,1808],[39,669],],
'284':[[384,8422],],
'285':[[171,300],[321,15],[7,109],[396,100],[290,679],[321,423],[21,176],[30,5],[290,31],[390,159],],
'289':[[249,196],],
'290':[[93,58],[82,389],[111,50],[249,218],[153,276],[69,55],[258,23],[181,376],[57,218],],
'292':[[100,171],],
'295':[[250,49],],
'298':[[246,929],],
'299':[[277,268],[277,110],],
'302':[[384,5384],],
'307':[[159,112],],
'314':[[266,196],],
'320':[[294,31],],
'321':[[277,350],],
'336':[[30,316],[30,298],],
'340':[[160,404],],
'341':[[9,47],[29,47],[180,194],[29,56],[244,131],[232,111],[53,123],[9,56],[25,24],[101,45],[172,99],],
'344':[[363,194],[156,50],[235,160],[373,52],[213,419],[29,122],[335,2899],[218,147],[72,58],[10,201],[89,162],[315,136],[289,136],[84,556],[213,237],[274,510],[95,467],[365,129],[213,210],[234,202],[189,252],[313,101],[189,559],[9,122],[346,31],],
'345':[[42,397],[25,77],[251,326],[164,303],],
'347':[[344,124],],
'366':[[164,561],],
'369':[[395,113],[37,62],[214,277],[164,440],[33,28],[259,26],[163,35],[172,141],[45,24],],
'370':[[390,143],[42,555],],
'382':[[153,1206],[153,497],],
'394':[[321,252],],
'402':[[189,153],[10,238],[189,289],[213,243],[234,239],],
'404':[[28,23],],
'417':[[75,89],[246,1599],],
'419':[[349,55],],
'424':[[204,45],],
'428':[[10,148],[234,149],[213,157],[89,135],[189,199],],
'432':[[351,53],],
'436':[[48,2683],[224,175],],
'438':[[235,83],],
'440':[[235,278],],
'445':[[384,9388],[191,64],[253,192],],
'446':[[162,118],],
'447':[[247,84],[173,98],[355,561],[36,58],[337,82],[270,86],[84,361],[191,75],[335,3392],[335,1966],[30,204],[189,477],],
'448':[[253,222],],
'451':[[360,41],[105,48],[16,58],[74,58],[105,33],[76,20],],
'452':[[284,81],[173,119],[269,80],[90,37],[75,45],[209,103],],
'454':[[164,549],[164,223],[141,73],[365,191],[143,52],[342,237],[25,27],[312,25],[82,419],],
'455':[[384,6026],],
'458':[[89,66],[394,177],],
'465':[[84,348],],
'469':[[10,347],[161,338],[384,4858],[384,6490],[381,173],[384,4874],],
'478':[[204,36],[11,27],],
'479':[[11,32],[204,51],[48,3646],[48,4241],[349,60],],
'481':[[277,761],[246,570],[206,64],[11,40],[331,253],],
'488':[[249,76],],
'491':[[121,469],],
'501':[[12,34],],
'517':[[121,57],[12,84],],
'518':[[277,435],],
'520':[[306,506],[12,192],],
'522':[[12,101],[48,4643],[204,66],[48,4809],],
'532':[[335,1115],[384,6658],],
'533':[[42,1304],[42,1012],],
'541':[[58,58],[30,327],],
'543':[[42,1124],],
'547':[[181,331],[385,46],],
'550':[[335,3505],[128,74],[48,1302],[335,3693],[302,59],[335,3411],[322,71],[335,3686],[134,62],[335,3764],],
'553':[[367,40],[12,218],[250,38],],
'554':[[246,742],[48,286],],
'555':[[246,1372],[170,130],[12,224],[246,1676],[170,192],[331,352],[331,389],[12,265],[384,5890],[164,358],[331,314],[181,153],[48,192],[181,402],[358,284],[246,1885],[99,85],[320,117],[335,2988],[160,184],[12,427],[160,114],[54,191],[301,46],[84,180],[341,103],[343,62],[30,472],[307,103],[306,1159],[121,155],[30,61],[121,379],],
'566':[[384,2026],[68,108],[381,391],[121,145],[384,1952],[12,256],],
'579':[[381,142],],
'580':[[121,308],],
'586':[[12,344],],
'593':[[231,98],[260,88],[164,633],[303,122],[207,107],[95,406],[303,147],[48,2189],[384,7705],[246,869],[164,460],[363,612],[335,1362],[53,103],[42,875],[42,130],[42,207],[42,467],[160,390],[189,535],[160,307],],
'594':[[48,878],[12,351],],
'596':[[54,517],[42,240],[214,381],[277,554],[160,518],[186,278],[186,212],[153,1216],[181,932],[246,404],[153,826],[181,800],[153,563],[39,767],[164,245],[246,427],[355,979],[181,414],[359,57],[121,366],],
'597':[[12,378],],
'603':[[48,336],],
'608':[[246,1015],[246,1201],[181,784],[246,1359],[12,415],[331,166],],
'609':[[246,1846],[306,946],[82,441],[121,337],],
'612':[[161,584],[321,184],],
'613':[[214,292],[355,441],],
'635':[[243,97],[44,97],[384,5297],[287,78],],
'641':[[244,49],[118,48],[235,66],[384,8876],],
'644':[[355,513],[344,69],[12,620],[277,981],],
'646':[[249,128],[181,595],],
'648':[[161,447],[214,353],],
'649':[[96,88],[358,267],],
'653':[[53,116],],
'654':[[167,18],[314,18],],
'655':[[48,438],[224,38],],
'659':[[178,108],],
'661':[[14,47],],
'664':[[89,476],[363,224],],
'681':[[54,1375],],
'684':[[145,39],],
'694':[[384,9010],],
'696':[[229,75],[246,1279],[246,1314],[246,72],[246,1502],[121,200],[242,187],[190,66],],
'699':[[396,114],],
'700':[[153,229],[20,75],[57,216],[229,53],[148,51],],
'709':[[164,394],],
'711':[[304,171],],
'712':[[317,39],],
'723':[[34,48],],
'724':[[150,78],[150,29],[103,35],[103,29],[150,35],],
'741':[[349,18],[117,18],],
'776':[[180,49],[77,53],[153,856],[131,55],[270,58],[210,44],[332,43],[247,58],],
'777':[[187,62],[20,169],],
'778':[[173,248],[137,203],],
'780':[[358,128],[20,57],],
'782':[[146,128],[261,187],[384,5223],[247,196],[100,132],[384,5921],[384,5969],[285,125],[384,9466],[395,130],[209,192],[384,3327],[384,1486],[210,137],[384,1059],[384,873],[384,7025],[384,7242],[384,7295],[36,133],[34,126],[284,162],[86,194],[332,135],[176,169],[384,9056],[148,144],[394,135],[48,1651],[20,152],[269,161],[135,137],[229,155],[137,177],[173,222],[161,322],[283,133],[57,201],[235,359],[358,347],[235,426],[180,149],[187,146],[270,198],],
'788':[[190,50],[137,264],],
'791':[[48,813],[306,233],[217,392],[37,30],],
'792':[[289,163],[315,163],],
'795':[[161,556],[384,9410],[321,156],],
'818':[[307,259],[341,259],],
'829':[[62,85],],
'840':[[384,3361],],
'846':[[277,225],[344,136],],
'849':[[384,8043],],
'850':[[23,134],],
'857':[[42,489],[384,2350],[381,436],[384,1846],[179,1174],[384,9007],[296,148],[114,52],[313,431],[160,250],[205,41],[299,41],[80,114],[321,88],[384,3917],[169,53],[299,23],[128,121],[271,41],[384,2214],[25,39],[271,23],[84,85],[49,430],[384,64],[322,123],[205,23],],
'861':[[243,230],[246,1601],[335,2437],[344,90],[355,773],],
'866':[[80,59],],
'869':[[395,95],],
'874':[[69,35],[276,32],[347,33],[50,46],[27,33],[343,37],[273,31],[53,36],[364,32],],
'876':[[249,101],],
'885':[[103,37],[150,37],],
'887':[[277,563],[384,9699],],
'894':[[331,429],],
'898':[[118,115],[181,685],[336,163],[160,358],[384,1733],[359,46],],
'900':[[152,67],],
'907':[[246,1531],],
'912':[[235,226],[189,504],],
'915':[[384,8589],[384,7663],[290,157],[179,1201],[243,164],[179,104],[384,9871],],
'922':[[243,128],[384,725],[217,385],[174,225],],
'925':[[153,650],[30,147],[152,92],],
'926':[[54,415],[384,8019],[384,1562],[42,567],[217,499],],
'933':[[335,2472],[335,3406],],
'936':[[356,44],[274,214],[363,372],[30,193],[363,95],[313,94],[274,199],[266,256],],
'940':[[384,3869],[384,723],[384,1535],],
'948':[[30,406],],
'949':[[355,1223],[30,255],],
'953':[[30,292],[355,941],],
'954':[[331,334],],
'955':[[48,2522],],
'960':[[384,3995],],
'982':[[142,158],[48,675],[249,168],[181,563],[30,453],[373,71],[341,180],[335,3368],[54,1228],[48,108],[164,95],[52,44],[307,180],],
'1003':[[246,287],],
'1005':[[122,115],],
'1015':[[153,754],],
'1027':[[181,652],],
'1030':[[203,72],[384,7392],],
'1033':[[65,149],],
'1041':[[229,68],],
'1042':[[229,79],[82,521],],
'1052':[[173,141],[77,95],[247,115],[86,113],[137,96],[131,110],[270,117],[57,120],],
'1073':[[187,177],],
'1077':[[148,160],],
'1101':[[277,67],[41,379],[355,885],[231,84],[355,250],],
'1102':[[188,31],[355,847],[39,27],[243,42],],
'1106':[[39,38],],
'1113':[[121,340],[224,86],],
'1117':[[358,144],[89,443],],
'1119':[[313,374],],
'1125':[[117,46],[117,40],[384,5473],[167,46],[167,40],],
'1130':[[339,209],[249,138],[337,85],[250,105],[341,118],[274,367],[42,704],[42,570],[307,118],[160,648],[39,182],[365,154],[381,115],[331,198],],
'1141':[[65,92],[340,96],[384,4596],[308,129],],
'1159':[[121,576],[39,383],],
'1168':[[335,1800],[335,1651],],
'1180':[[266,172],],
'1201':[[39,643],],
'1202':[[153,247],[355,654],],
'1205':[[39,713],],
'1226':[[49,338],],
'1230':[[251,235],[251,247],[39,800],],
'1231':[[84,369],],
'1237':[[75,47],],
'1238':[[39,823],],
'1278':[[178,79],],
'1279':[[191,40],[396,40],[72,37],],
'1301':[[277,771],],
'1304':[[384,6275],],
'1305':[[54,49],],
'1308':[[384,7836],[243,108],[217,497],[48,4385],],
'1314':[[384,6278],],
'1326':[[384,6790],],
'1329':[[339,78],],
'1332':[[355,1062],],
'1334':[[85,37],[42,204],],
'1335':[[355,1320],[355,1310],],
'1340':[[42,1002],[384,9305],],
'1342':[[274,422],],
'1344':[[42,1150],],
'1345':[[42,1146],],
'1349':[[135,152],[100,195],],
'1350':[[385,33],[49,222],],
'1370':[[277,808],[363,140],[76,78],[42,529],[70,110],[308,105],[59,47],[54,1423],[54,1249],[212,51],[206,53],[344,48],[164,431],[301,55],[218,102],[381,78],[313,163],[381,353],[266,44],[102,163],[197,464],[381,361],[394,161],[336,130],[381,372],[246,947],[49,232],[355,948],[246,1556],[121,190],[52,252],[246,1594],[146,153],[186,253],[42,293],[355,678],[42,1207],[145,49],[252,81],[274,407],[320,29],[181,917],[384,9015],[340,72],[247,223],[283,248],[266,87],[181,186],[335,2416],[181,617],[131,162],[214,372],[181,538],[42,854],],
'1388':[[335,759],],
'1391':[[52,126],],
'1392':[[42,452],],
'1395':[[42,1312],],
'1408':[[335,2522],[268,36],],
'1417':[[42,686],[349,62],],
'1419':[[384,4895],],
'1424':[[384,6155],[384,6142],[384,7189],[384,7749],[384,8923],[217,475],[86,236],[384,8836],[174,121],[384,5951],[174,139],[384,2879],[384,7738],[384,8503],[384,810],[384,8852],[384,8865],[384,8474],[344,188],],
'1444':[[335,874],],
'1448':[[384,5676],[162,292],],
'1452':[[384,4744],[274,143],[144,36],[140,30],[274,93],[274,113],],
'1454':[[118,197],[244,228],[384,2198],[191,209],[161,25],[42,913],],
'1486':[[42,1302],],
'1488':[[353,126],],
'1502':[[368,78],],
'1518':[[176,60],[220,115],],
'1538':[[49,26],],
'1593':[[153,444],[384,7283],[48,1385],[48,4544],[48,517],[48,1446],[335,243],[384,9051],[54,361],[179,1018],[48,1490],[384,9825],],
'1603':[[48,582],[249,239],],
'1607':[[48,616],[384,9229],],
'1608':[[313,392],[313,325],[200,252],[186,188],[363,460],[306,786],],
'1623':[[48,705],],
'1667':[[304,222],],
'1672':[[384,739],],
'1693':[[48,1469],],
'1714':[[214,129],[342,302],],
'1719':[[321,389],],
'1722':[[212,41],],
'1723':[[381,603],[381,313],],
'1741':[[384,8249],],
'1784':[[48,2408],[48,2393],],
'1805':[[252,91],[48,2596],[246,1668],[162,327],[76,39],[384,2130],],
'1811':[[162,159],],
'1814':[[57,265],],
'1832':[[134,155],[302,157],],
'1839':[[265,17],[354,31],[160,108],[335,3377],],
'1845':[[126,22],[48,3392],],
'1849':[[118,92],[197,448],],
'1856':[[117,29],[167,29],],
'1864':[[384,3956],],
'1878':[[315,178],[161,526],[302,88],[134,91],[339,270],[306,974],[289,178],[48,3729],],
'1922':[[48,4022],],
'1941':[[48,4524],],
'1955':[[384,4770],[277,332],],
'1967':[[161,449],[261,178],[384,5998],[358,338],[340,164],[384,9663],[384,6871],[308,197],[384,5859],],
'2001':[[336,47],[342,217],[358,304],[153,1040],[49,147],[54,162],[52,151],[261,144],],
'2014':[[178,297],],
'2027':[[229,172],[49,394],[49,424],[189,479],],
'2029':[[49,403],],
'2039':[[384,6337],],
'2045':[[249,270],],
'2051':[[384,4378],[58,36],],
'2061':[[246,1004],[160,526],[339,44],[52,90],],
'2067':[[266,215],[52,204],[384,4761],],
'2068':[[172,38],],
'2072':[[52,246],],
'2079':[[384,9283],[53,131],],
'2080':[[246,681],],
'2085':[[246,205],[246,192],],
'2105':[[335,1947],[118,219],[253,175],[244,250],[335,2690],],
'2108':[[54,178],],
'2111':[[54,189],],
'2115':[[54,209],],
'2123':[[176,253],[54,233],[96,118],],
'2128':[[54,600],],
'2140':[[160,311],],
'2142':[[54,571],],
'2155':[[95,258],[54,691],],
'2158':[[95,482],],
'2160':[[54,1345],],
'2161':[[95,338],],
'2163':[[54,825],[54,785],],
'2166':[[54,809],],
'2179':[[70,649],[153,554],[197,417],],
'2220':[[54,1122],[157,59],[384,2493],[153,884],],
'2228':[[181,526],],
'2263':[[84,407],],
'2272':[[58,52],],
'2297':[[319,61],],
'2300':[[384,4909],],
'2319':[[358,371],[261,201],],
'2327':[[180,61],],
'2332':[[186,444],],
'2342':[[84,263],],
'2346':[[197,225],[70,388],],
'2360':[[384,8025],],
'2374':[[160,140],],
'2377':[[186,348],],
'2378':[[75,29],],
'2384':[[153,324],],
'2385':[[75,128],],
'2393':[[339,119],],
'2407':[[363,531],],
'2415':[[253,178],],
'2418':[[378,22],],
'2457':[[188,110],],
'2462':[[84,74],],
'2472':[[321,125],],
'2473':[[84,325],],
'2493':[[363,493],[322,204],[193,148],[352,148],[128,202],[384,9709],],
'2494':[[384,8826],],
'2495':[[125,220],[125,171],],
'2497':[[246,1783],],
'2526':[[153,1025],[153,831],],
'2535':[[89,478],],
'2549':[[373,104],],
'2550':[[367,111],],
'2560':[[111,39],],
'2566':[[176,232],],
'2577':[[384,4963],[384,1579],[384,6394],[384,6404],[384,4948],],
'2589':[[96,110],[161,217],],
'2602':[[249,73],],
'2605':[[96,134],],
'2607':[[96,143],],
'2613':[[365,210],],
'2623':[[173,108],[141,33],[300,32],[143,28],],
'2624':[[384,523],],
'2654':[[109,20],],
'2671':[[246,1216],],
'2674':[[102,143],],
'2681':[[150,21],],
'2689':[[384,3498],],
'2695':[[321,232],],
'2697':[[350,151],],
'2709':[[339,92],],
'2716':[[112,34],],
'2717':[[355,1360],],
'2739':[[118,100],[186,383],],
'2750':[[121,416],],
'2769':[[121,397],],
'2778':[[160,397],],
'2809':[[336,94],[125,58],],
'2810':[[125,80],],
'2834':[[125,193],],
'2840':[[125,212],],
'2882':[[321,265],],
'2894':[[312,58],],
'2926':[[151,23],[389,23],],
'2943':[[152,155],],
'2956':[[153,252],],
'2977':[[246,487],[188,204],[246,1101],],
'3002':[[153,1306],],
'3010':[[164,419],[164,599],],
'3027':[[159,62],],
'3035':[[384,6876],],
'3056':[[160,33],],
'3065':[[160,93],],
'3068':[[335,1690],[160,143],],
'3095':[[384,220],],
'3104':[[161,134],],
'3118':[[161,349],],
'3122':[[162,55],[161,408],],
'3126':[[161,456],],
'3174':[[164,656],],
'3177':[[242,168],[242,161],[384,7686],[344,181],[242,142],[384,7671],],
'3186':[[170,68],],
'3195':[[303,92],],
'3198':[[277,694],],
'3213':[[244,72],],
'3218':[[246,1685],],
'3262':[[178,246],],
'3585':[[181,588],[246,440],[246,447],],
'3590':[[181,764],],
'3597':[[181,899],],
'3612':[[186,216],],
'3632':[[277,156],],
'3710':[[200,299],[249,177],[257,181],],
'3715':[[203,64],],
'3736':[[213,279],],
'3765':[[217,451],],
'3770':[[235,317],],
'3771':[[218,331],],
'3787':[[277,125],],
'3797':[[231,73],[384,2472],],
'3798':[[231,81],],
'3803':[[246,599],],
'3813':[[335,941],],
'3851':[[246,311],[246,236],],
'3856':[[246,268],],
'3861':[[246,301],],
'3871':[[384,2382],],
'3875':[[341,188],[307,188],],
'3918':[[246,1231],],
'3945':[[246,1674],],
'3991':[[384,964],],
'4003':[[253,166],],
'4035':[[384,6753],[266,119],],
'4037':[[266,132],],
'4041':[[384,6343],[270,234],[384,5630],[384,6347],[384,8916],],
'4090':[[381,146],],
'4107':[[290,111],],
'4111':[[293,134],],
'4136':[[339,162],],
'4137':[[339,142],],
'4143':[[350,194],],
'4184':[[307,217],[307,229],[341,229],[341,217],],
'4227':[[321,107],],
'4232':[[342,248],],
'4238':[[331,51],],
'4242':[[331,179],],
'4265':[[331,362],],
'4350':[[335,2433],],
'4369':[[384,5972],],
'4418':[[342,124],],
'4452':[[381,552],[381,575],[384,8010],[384,8036],[384,7811],[384,9085],],
'4468':[[355,92],],
'4475':[[355,219],],
'4478':[[355,380],],
'4519':[[358,357],],
'4556':[[371,109],],
'4581':[[381,83],[384,2628],],
'4584':[[384,4223],],
'4601':[[381,613],],
'4656':[[384,359],],
'4664':[[384,568],[384,392],],
'4699':[[384,683],],
'4704':[[384,5526],[384,5533],[384,731],],
'4708':[[384,2900],],
'4773':[[384,1483],],
'4853':[[384,2527],],
'4869':[[384,2699],],
'4886':[[384,2939],],
'4932':[[384,3551],],
'4948':[[384,3825],],
'4950':[[384,3900],],
'4958':[[384,3979],],
'4976':[[384,4207],],
'4984':[[384,4386],],
'5014':[[384,5042],],
'5015':[[384,5084],],
'5074':[[396,160],],
'5110':[[384,7390],],
'5118':[[384,7623],],
'5132':[[384,8049],],
'5136':[[384,9157],],
'5157':[[384,9316],],
'5173':[[384,9161],],
'5218':[[384,9847],],
'5226':[[385,63],],
'5243':[[394,42],],
'5247':[[395,31],],
},{'7':[[0,26],[395,11],[1,11],[2,11],[3,11],[4,11],[5,9],[6,11],[7,9],[8,11],[9,11],[10,11],[11,11],[12,11],[13,11],[14,11],[15,11],[16,11],[17,11],[18,9],[19,10],[20,11],[21,26],[22,25],[23,11],[24,11],[25,11],[26,11],[27,11],[28,11],[29,11],[30,42],[394,11],[393,11],[392,11],[31,11],[32,11],[33,11],[34,11],[35,20],[36,11],[37,11],[38,24],[39,10],[40,9],[41,11],[42,9],[391,11],[390,26],[43,11],[44,11],[45,9],[46,25],[47,11],[48,22],[389,11],[388,7],[49,17],[50,11],[51,9],[52,39],[53,11],[54,37],[55,11],[56,16],[57,11],[58,11],[59,11],[60,11],[61,11],[62,11],[63,17],[64,11],[65,7],[66,7],[67,11],[68,36],[69,11],[70,34],[387,9],[71,11],[72,11],[73,9],[74,11],[75,11],[386,11],[76,11],[77,11],[78,11],[79,9],[80,11],[81,11],[82,9],[385,7],[83,16],[84,29],[85,11],[86,11],[87,11],[88,16],[89,11],[90,11],[91,11],[92,17],[93,7],[94,11],[384,8],[95,21],[96,16],[97,11],[98,11],[99,11],[100,11],[383,11],[101,11],[102,44],[103,11],[104,11],[105,11],[106,11],[107,11],[108,9],[109,9],[110,11],[111,11],[112,11],[113,11],[114,9],[115,11],[116,11],[117,11],[118,11],[119,11],[120,11],[121,22],[382,11],[381,35],[122,11],[123,9],[124,19],[125,7],[126,9],[127,9],[128,11],[129,9],[130,11],[131,11],[132,11],[133,11],[134,11],[135,11],[136,9],[137,11],[138,11],[139,21],[140,11],[141,11],[142,9],[143,11],[144,11],[145,9],[380,11],[379,11],[146,11],[147,11],[148,11],[149,11],[150,11],[151,11],[152,11],[153,38],[154,11],[155,9],[156,9],[157,11],[158,9],[159,12],[160,13],[161,20],[378,11],[162,37],[377,11],[163,11],[164,12],[376,11],[375,9],[374,11],[165,9],[166,11],[167,11],[168,11],[169,11],[170,11],[171,9],[171,1295],[172,9],[173,11],[174,11],[175,9],[176,49],[373,11],[372,11],[371,11],[177,11],[178,11],[179,34],[370,11],[180,11],[181,14],[182,11],[183,9],[184,9],[185,7],[186,51],[187,11],[188,21],[189,11],[190,9],[369,10],[191,11],[192,11],[193,11],[194,9],[195,16],[196,7],[197,37],[368,11],[198,11],[199,11],[200,11],[201,11],[202,11],[203,11],[204,11],[205,11],[206,11],[207,11],[208,23],[209,11],[210,11],[211,15],[212,11],[367,11],[366,7],[213,11],[214,11],[215,9],[216,11],[217,11],[218,9],[219,9],[220,11],[221,11],[222,11],[223,11],[224,11],[225,11],[226,25],[227,8],[228,11],[365,7],[229,11],[364,11],[230,9],[231,11],[232,9],[233,11],[234,11],[235,9],[236,11],[237,11],[238,11],[239,11],[240,17],[241,24],[242,20],[243,34],[244,11],[245,23],[246,11],[363,11],[247,11],[248,23],[249,24],[362,11],[250,11],[251,19],[252,11],[253,11],[254,10],[255,11],[256,9],[257,9],[258,7],[259,9],[260,11],[261,27],[361,11],[360,9],[262,9],[263,11],[264,11],[265,7],[266,39],[267,9],[268,11],[269,11],[270,11],[271,11],[272,11],[273,11],[274,24],[275,11],[276,11],[277,13],[278,11],[279,9],[280,11],[281,9],[282,11],[283,11],[284,11],[285,11],[286,9],[287,11],[288,9],[289,11],[290,40],[291,11],[292,11],[293,11],[294,11],[295,11],[296,11],[297,11],[298,9],[299,11],[300,11],[301,11],[302,11],[303,12],[304,9],[305,11],[306,30],[359,11],[307,11],[358,26],[308,9],[357,7],[309,9],[310,11],[311,9],[312,9],[313,11],[314,11],[315,11],[316,9],[317,9],[356,11],[318,9],[319,9],[320,11],[321,41],[322,11],[323,9],[324,11],[325,11],[326,9],[327,11],[328,11],[329,11],[330,9],[331,22],[332,11],[333,9],[334,11],[335,34],[355,17],[336,20],[337,11],[338,11],[339,38],[354,23],[340,9],[353,11],[341,11],[352,11],[342,9],[343,11],[351,9],[350,9],[344,39],[345,9],[346,11],[347,11],[348,11],[349,11],[396,11],],
'9':[[384,4155],],
'12':[[246,405],[212,52],[30,431],[70,271],[145,50],[164,87],[164,432],[176,184],[42,1313],[197,152],[229,76],],
'17':[[384,2293],[384,6332],[384,3286],],
'19':[[384,2378],],
'20':[[161,498],],
'25':[[384,4924],[384,5309],],
'30':[[48,588],],
'39':[[317,104],[384,3657],[228,41],[164,452],[82,523],],
'43':[[368,87],],
'48':[[384,3044],],
'63':[[42,1000],[0,128],],
'67':[[384,9018],],
'68':[[162,188],],
'73':[[145,44],[94,51],[212,46],[30,312],],
'77':[[384,9745],],
'82':[[384,9886],[384,7926],],
'87':[[384,8211],],
'99':[[384,1869],],
'117':[[384,0],],
'120':[[384,8987],],
'128':[[100,136],[190,19],[368,22],[343,47],],
'137':[[384,8994],[384,8089],],
'149':[[384,7046],],
'150':[[384,3613],],
'152':[[358,326],[261,166],],
'164':[[391,54],],
'165':[[384,3897],],
'199':[[384,4390],],
'215':[[384,3300],[384,8098],[384,7826],[384,6224],],
'217':[[384,4625],],
'230':[[384,4854],],
'242':[[384,6408],[384,6398],],
'244':[[384,7794],[384,6205],],
'248':[[249,228],[339,85],],
'282':[[384,8871],],
'305':[[308,67],[343,75],[121,351],[340,67],[307,89],[341,89],],
'313':[[384,3064],],
'314':[[384,6388],],
'374':[[384,6290],],
'447':[[384,5324],],
'459':[[30,375],],
'533':[[75,60],[384,4912],],
'553':[[384,2139],[384,4884],],
'639':[[176,229],],
'645':[[261,38],],
'649':[[384,7098],],
'671':[[306,292],[48,634],],
'676':[[384,4956],],
'723':[[384,4041],],
'792':[[384,9776],[384,2123],],
'837':[[384,3398],],
'840':[[384,8206],],
'866':[[384,8693],],
'888':[[384,8245],],
'937':[[384,6368],],
'940':[[384,6252],],
'944':[[384,2758],],
'1003':[[121,306],],
'1123':[[384,8082],],
'1125':[[384,5529],],
'1135':[[384,6244],],
'1180':[[384,2554],[384,717],],
'1211':[[179,930],[335,180],[384,5620],],
'1212':[[384,534],],
'1245':[[384,3097],],
'1254':[[384,3081],],
'1267':[[384,695],],
'1288':[[384,2535],],
'1309':[[384,4939],],
'1319':[[384,4824],],
'1353':[[384,3629],],
'1374':[[384,7086],],
'1424':[[384,2159],[384,5136],[384,8192],],
'1455':[[384,7206],],
'1462':[[384,1584],],
'1471':[[384,7814],],
'1538':[[384,3589],],
'1603':[[384,9753],],
'1667':[[384,4116],],
'1672':[[384,4971],[384,3021],],
'1681':[[384,4591],],
'1719':[[384,4371],[384,4300],],
'1723':[[384,6287],],
'1765':[[384,6377],],
'1930':[[384,6420],],
'1967':[[384,6440],],
'2222':[[384,4613],],
'2503':[[384,6349],],
'2545':[[384,3384],],
'2576':[[176,270],],
'2577':[[384,6446],[384,8032],],
'2591':[[384,2772],[384,4178],],
'2594':[[384,7966],],
'2661':[[384,8232],],
'2675':[[384,5379],],
'3004':[[384,2546],],
'3099':[[384,7952],],
'3143':[[384,6161],],
'3196':[[384,4056],[384,4075],],
'3198':[[384,4031],],
'3253':[[384,348],],
'3741':[[384,9844],],
'3877':[[384,5450],[384,7753],],
'3932':[[384,3739],],
'4095':[[384,520],],
'4140':[[384,3762],],
'4159':[[384,527],],
'4405':[[384,5648],[384,5339],[384,5625],],
'4452':[[384,8768],[384,6946],[384,5641],],
'4588':[[381,228],],
'4634':[[384,671],],
'4659':[[384,364],],
'4677':[[384,4168],],
'4680':[[384,2800],],
'4697':[[384,3293],],
'4700':[[384,686],],
'4702':[[384,702],],
'4703':[[384,709],],
'4783':[[384,3034],],
'4806':[[384,1836],],
'4809':[[384,1859],],
'4854':[[384,2529],],
'4877':[[384,2786],],
'4898':[[384,8763],],
'4907':[[384,3513],[384,3373],],
'4909':[[384,3353],],
'4910':[[384,3754],],
'4942':[[384,7983],],
'4951':[[384,3902],],
'4961':[[384,4091],],
'4962':[[384,4105],],
'5004':[[384,4870],],
'5008':[[384,4920],],
'5022':[[384,5522],[384,5571],],
'5024':[[384,5143],],
'5113':[[384,7453],],
'5121':[[384,7806],],
'5127':[[384,7999],],
'5129':[[384,8006],],
'5152':[[384,8734],[384,8913],],
'5159':[[384,8880],],
'5206':[[384,9766],],
},{'2':[[58,39],],
'7':[[350,160],[87,77],[87,61],[87,57],[350,175],[350,143],],
'12':[[203,65],[121,341],[12,447],[12,416],],
'13':[[395,12],[11,12],[12,12],[10,12],[394,12],[9,12],[13,12],[14,12],[15,12],[16,12],[393,12],[17,12],[18,10],[19,11],[20,12],[21,27],[22,26],[23,12],[392,12],[24,12],[25,12],[26,12],[27,12],[28,12],[29,12],[30,43],[31,12],[32,12],[33,12],[34,12],[35,21],[36,12],[37,12],[38,25],[39,11],[40,10],[41,12],[42,10],[43,12],[44,12],[45,10],[46,26],[47,12],[48,23],[391,12],[49,18],[50,12],[51,10],[52,40],[390,27],[53,12],[54,38],[55,12],[56,17],[57,12],[58,12],[389,12],[6,12],[59,12],[60,12],[61,12],[62,12],[63,18],[64,12],[65,8],[66,8],[67,12],[8,12],[69,12],[70,35],[388,8],[387,10],[386,12],[385,8],[71,12],[72,12],[73,10],[74,12],[384,9754],[75,12],[76,12],[384,9],[384,1],[383,12],[382,12],[381,36],[77,12],[78,12],[79,10],[80,12],[81,12],[82,10],[83,17],[84,30],[380,12],[379,12],[378,12],[85,12],[86,12],[87,12],[5,10],[4,12],[3,12],[88,17],[89,12],[377,12],[90,12],[91,12],[92,18],[93,8],[94,12],[95,22],[96,17],[97,12],[98,12],[99,12],[100,12],[101,12],[102,45],[103,12],[104,12],[105,12],[106,12],[107,12],[108,10],[109,10],[110,12],[111,12],[112,12],[113,12],[114,10],[115,12],[116,12],[117,12],[118,12],[119,12],[120,12],[121,23],[68,37],[122,12],[123,10],[124,20],[125,8],[126,10],[127,10],[128,12],[129,10],[130,12],[131,12],[132,12],[133,12],[134,12],[135,12],[136,10],[137,12],[138,12],[139,22],[140,12],[141,12],[142,10],[143,12],[144,12],[145,10],[146,12],[147,12],[148,12],[149,12],[150,12],[151,12],[152,12],[153,39],[376,12],[154,12],[155,10],[156,10],[157,12],[158,10],[159,13],[160,14],[2,12],[375,10],[374,12],[162,38],[163,12],[164,13],[165,10],[166,12],[167,12],[168,12],[169,12],[170,12],[171,10],[171,1296],[172,10],[173,12],[174,12],[175,10],[176,50],[177,12],[178,12],[179,35],[180,12],[181,15],[182,12],[183,10],[184,10],[185,8],[186,52],[187,12],[188,22],[189,12],[373,12],[190,10],[191,12],[192,12],[193,12],[194,10],[195,17],[196,8],[197,38],[372,12],[198,12],[199,12],[200,12],[201,12],[202,12],[203,12],[7,10],[204,12],[205,12],[206,12],[207,12],[208,24],[209,12],[210,12],[211,16],[212,12],[213,12],[371,12],[214,12],[215,10],[216,12],[217,12],[218,10],[219,10],[220,12],[221,12],[222,12],[223,12],[224,12],[225,12],[226,26],[227,9],[228,12],[229,12],[230,10],[231,12],[232,10],[233,12],[234,12],[370,12],[235,10],[236,12],[237,12],[238,12],[239,12],[240,18],[241,25],[242,21],[243,35],[244,12],[245,24],[246,12],[247,12],[248,24],[249,25],[369,11],[250,12],[251,20],[252,12],[253,12],[254,11],[255,12],[256,10],[257,10],[258,8],[368,12],[259,10],[260,12],[261,28],[367,12],[366,8],[365,8],[364,12],[363,12],[262,10],[263,12],[264,12],[265,8],[266,40],[267,10],[362,12],[361,12],[268,12],[269,12],[270,12],[271,12],[272,12],[273,12],[274,25],[275,12],[276,12],[277,14],[278,12],[279,10],[280,12],[360,10],[281,10],[282,12],[283,12],[284,12],[285,12],[286,10],[287,12],[288,10],[359,12],[358,27],[289,12],[290,41],[291,12],[292,12],[293,12],[357,8],[294,12],[295,12],[296,12],[297,12],[298,10],[299,12],[300,12],[301,12],[302,12],[303,13],[304,10],[356,12],[355,18],[354,24],[353,12],[305,12],[306,31],[307,12],[308,10],[309,10],[310,12],[311,10],[312,10],[313,12],[314,12],[315,12],[316,10],[317,10],[318,10],[319,10],[320,12],[321,42],[352,12],[351,10],[1,12],[161,21],[0,27],[350,10],[349,12],[348,12],[347,12],[346,12],[345,10],[322,12],[323,10],[324,12],[325,12],[326,10],[327,12],[328,12],[329,12],[330,10],[331,23],[332,12],[333,10],[344,40],[334,12],[335,35],[336,21],[343,12],[337,12],[338,12],[339,39],[342,10],[341,12],[340,10],[396,12],],
'19':[[288,49],[358,307],[321,203],[358,296],[261,147],],
'23':[[76,89],[84,544],[321,391],[385,26],[321,329],[321,313],[76,28],[321,238],[76,22],[339,253],[261,168],[261,204],[267,26],[358,374],[358,328],[304,251],[304,232],[304,224],[304,214],[339,266],[339,293],[350,146],],
'36':[[339,221],[321,58],[23,36],[293,36],],
'38':[[384,9771],],
'47':[[161,522],],
'63':[[384,9751],],
'67':[[70,302],],
'73':[[52,140],],
'128':[[333,18],[267,17],[58,18],[364,20],],
'155':[[385,55],[360,43],],
'160':[[76,53],[76,67],],
'164':[[234,160],[213,168],[89,145],[84,259],[10,159],[189,210],],
'205':[[321,83],],
'215':[[48,1298],],
'224':[[258,26],],
'230':[[390,139],[384,9761],[384,9748],],
'290':[[249,191],],
'321':[[321,152],[161,552],],
'359':[[70,233],[70,192],],
'613':[[12,435],],
'646':[[321,360],[339,288],],
'704':[[74,87],[16,87],[371,48],[280,55],],
'818':[[321,282],],
'954':[[350,202],],
'1027':[[288,21],],
'1211':[[153,464],],
'1414':[[321,402],],
'1425':[[350,197],],
'1529':[[336,134],],
'1832':[[197,387],[70,592],],
'1837':[[385,48],],
'2221':[[84,289],],
'4030':[[261,151],[261,185],[358,345],[358,311],],
'4227':[[384,3632],],
},{'2':[[0,29],[96,36],[96,19],[261,76],[277,318],[171,109],[358,29],[21,29],[384,6379],[390,29],[390,103],[12,202],],
'3':[[49,412],],
'7':[[194,72],],
'9':[[384,9784],[339,285],[277,997],[384,5202],[249,118],[321,357],[12,636],],
'16':[[189,613],[174,115],[174,93],[82,319],[163,29],[213,456],[176,53],],
'17':[[186,150],[390,122],[251,140],],
'18':[[121,557],],
'20':[[355,50],],
'25':[[384,4171],[384,4158],],
'28':[[49,226],],
'34':[[246,1725],[384,9505],],
'35':[[384,2058],],
'43':[[125,195],],
'45':[[246,531],[200,263],],
'47':[[261,141],[358,301],],
'48':[[57,59],[86,57],[137,53],[153,522],[173,61],],
'49':[[153,1046],],
'51':[[197,54],[70,71],],
'52':[[21,122],[197,522],[164,66],[70,690],],
'54':[[54,497],],
'55':[[179,156],[290,210],[179,1267],],
'60':[[0,122],],
'62':[[341,198],[307,198],[331,67],],
'65':[[335,2622],[28,29],[12,519],[188,189],[48,789],[200,217],[125,239],[314,65],[343,28],[306,567],[48,199],[306,209],[235,371],[48,171],[95,327],[246,1841],[343,51],[296,101],[54,751],[294,24],[384,5779],[65,84],[286,33],[224,92],[54,875],],
'73':[[335,3363],],
'77':[[181,346],],
'79':[[150,82],[103,82],[186,475],],
'81':[[306,115],[48,129],],
'82':[[39,545],[12,617],[384,161],[384,134],[12,552],],
'83':[[197,321],[30,274],[70,471],[70,87],[197,70],[355,499],],
'88':[[309,26],[12,571],],
'99':[[335,1989],],
'100':[[179,716],[179,779],],
'105':[[355,1515],[394,219],[354,108],[353,202],[352,174],[351,77],[350,237],[349,100],[348,43],[347,79],[346,46],[345,94],[344,378],[343,121],[356,74],[41,405],[342,344],[341,295],[357,65],[340,181],[42,1343],[43,40],[339,325],[20,198],[44,163],[338,108],[45,51],[46,101],[47,50],[337,127],[336,192],[335,3810],[3,53],[21,213],[40,54],[39,1005],[358,410],[359,164],[334,106],[333,41],[332,205],[331,553],[360,70],[330,51],[361,123],[329,84],[328,49],[327,41],[326,67],[325,44],[324,52],[323,41],[322,240],[321,451],[19,144],[320,187],[319,81],[318,68],[317,145],[316,137],[315,221],[314,124],[362,86],[313,501],[312,79],[311,121],[310,39],[309,47],[363,773],[308,214],[307,295],[48,5000],[364,66],[306,1637],[18,93],[17,50],[49,532],[365,245],[50,128],[51,56],[366,53],[367,150],[305,101],[304,416],[303,214],[52,370],[302,179],[53,161],[301,98],[300,67],[299,57],[298,83],[297,50],[296,182],[368,127],[369,501],[295,57],[294,62],[370,78],[371,139],[293,153],[372,64],[292,73],[291,50],[290,692],[373,126],[289,208],[288,66],[287,119],[286,59],[54,1550],[55,49],[56,77],[16,152],[374,53],[285,169],[284,243],[57,326],[58,76],[283,267],[282,48],[59,105],[281,33],[60,120],[61,104],[280,139],[62,152],[279,66],[278,84],[63,122],[64,46],[277,1024],[375,44],[65,196],[66,46],[67,75],[68,144],[69,109],[38,212],[37,105],[2,47],[277,978],[1,126],[376,54],[277,193],[15,60],[275,49],[274,852],[393,44],[273,66],[70,809],[71,103],[272,67],[72,97],[271,57],[73,100],[270,267],[74,152],[36,209],[75,153],[76,116],[268,72],[267,44],[266,410],[77,162],[78,43],[265,63],[264,46],[263,116],[79,71],[262,64],[261,241],[14,66],[80,163],[81,75],[13,51],[395,160],[260,117],[82,578],[259,67],[258,95],[257,212],[256,50],[255,42],[254,256],[253,243],[83,151],[252,110],[251,363],[84,590],[85,72],[12,663],[35,64],[250,147],[249,343],[86,276],[384,9962],[87,107],[88,72],[248,86],[247,280],[89,498],[246,1990],[90,76],[91,59],[92,196],[34,151],[385,86],[93,153],[94,67],[386,53],[245,87],[244,267],[243,295],[242,226],[241,91],[33,69],[240,64],[239,43],[238,45],[237,57],[236,51],[235,513],[95,535],[0,206],[32,41],[377,66],[96,216],[234,437],[97,56],[98,60],[233,58],[232,150],[231,136],[99,315],[230,41],[100,221],[101,94],[229,211],[228,61],[102,228],[227,345],[31,65],[103,140],[104,41],[105,84],[106,73],[107,40],[226,101],[108,39],[225,60],[109,47],[110,59],[224,247],[378,52],[223,72],[111,101],[222,72],[112,162],[221,47],[113,86],[220,142],[114,84],[219,69],[115,51],[116,143],[117,63],[218,390],[118,236],[119,40],[120,43],[217,523],[216,57],[215,130],[214,400],[213,498],[387,119],[212,93],[211,184],[210,198],[30,520],[396,202],[209,287],[121,614],[208,123],[122,158],[207,130],[206,116],[123,54],[124,76],[205,57],[204,93],[379,238],[380,56],[125,290],[126,50],[203,98],[127,83],[202,38],[201,38],[128,238],[129,40],[130,41],[200,327],[388,102],[381,654],[131,185],[199,115],[132,50],[198,107],[197,649],[133,144],[389,67],[134,177],[29,212],[135,239],[382,103],[136,40],[28,102],[4,70],[196,108],[195,109],[194,129],[137,289],[138,56],[139,75],[140,53],[141,102],[142,196],[143,81],[144,59],[145,95],[146,187],[147,47],[148,181],[12,392],[149,50],[193,174],[27,81],[150,140],[151,67],[192,57],[191,316],[152,240],[190,94],[189,651],[5,96],[188,373],[6,110],[26,64],[187,217],[390,194],[186,540],[25,108],[153,1453],[154,54],[155,64],[11,65],[156,149],[185,110],[184,54],[157,92],[183,130],[158,66],[182,64],[181,1054],[24,45],[159,181],[180,243],[179,1652],[23,153],[383,41],[269,240],[160,717],[22,69],[178,335],[177,73],[161,613],[176,314],[10,371],[175,50],[174,297],[391,85],[9,212],[162,415],[392,64],[173,348],[163,93],[8,45],[276,96],[172,180],[171,1349],[7,198],[170,292],[169,85],[168,53],[167,63],[166,42],[165,98],[164,680],],
'107':[[48,41],[320,172],[12,588],[355,1132],[384,3108],[384,3391],[30,448],[384,3381],],
'119':[[59,84],],
'128':[[324,30],],
'131':[[307,210],[246,477],[341,210],[95,65],[112,69],[307,157],[335,3440],[341,157],],
'135':[[378,20],[109,18],],
'136':[[153,609],[153,1322],],
'137':[[54,587],[31,36],[290,47],[59,34],[42,120],[188,240],[335,734],[1,40],],
'139':[[197,539],[304,236],[89,155],[97,38],],
'140':[[57,122],[173,143],[384,2887],[247,117],[77,97],[162,259],[86,115],[270,119],[218,196],[121,424],[131,112],[41,372],[224,64],[355,985],[355,510],[52,50],[384,1663],[137,98],],
'143':[[331,201],[280,92],[371,85],[48,779],[306,199],[121,449],],
'145':[[166,22],[360,35],[14,43],[255,22],[32,22],],
'146':[[322,78],[128,81],[177,47],],
'149':[[181,720],[54,240],[153,516],[355,1111],],
'150':[[384,3626],],
'154':[[48,803],[306,223],],
'158':[[54,803],[277,493],[54,779],],
'163':[[42,1049],[99,265],],
'165':[[42,586],[132,35],[384,9417],[70,513],[162,209],[39,131],[224,150],[363,244],[266,185],[373,75],[367,107],[30,181],[340,153],[246,1376],[253,67],[186,163],[308,186],],
'167':[[336,42],],
'175':[[341,195],[307,195],],
'176':[[264,22],[108,21],[246,1397],[385,20],],
'177':[[181,972],],
'178':[[164,613],],
'185':[[340,24],[95,376],[307,28],[308,24],[341,28],],
'187':[[365,183],],
'196':[[95,203],],
'199':[[95,447],[246,1468],[48,4818],[48,445],[252,75],[153,1233],],
'200':[[49,120],[384,2959],[52,98],],
'203':[[279,37],[79,38],[4,41],[318,37],[39,499],[48,866],[222,43],[392,35],],
'206':[[222,55],[318,49],[384,9431],[79,50],[392,47],[279,49],[228,35],[4,53],],
'213':[[231,37],[388,51],],
'215':[[320,83],[263,55],[203,57],[338,51],[253,202],[54,909],[253,54],[276,45],[384,7476],[42,378],[306,370],[89,174],[170,217],[48,2042],[384,6685],],
'217':[[170,225],[384,6678],[384,7472],],
'220':[[213,461],[160,373],[347,25],[218,282],],
'221':[[73,73],],
'222':[[384,3041],[384,3162],],
'225':[[247,234],[243,204],[102,170],[162,108],],
'227':[[243,221],],
'228':[[45,19],],
'230':[[99,68],[232,58],],
'231':[[266,127],[304,359],],
'237':[[48,1217],[235,341],],
'238':[[84,409],[306,1261],[48,3930],[384,842],[160,561],],
'239':[[54,388],],
'241':[[361,29],[57,98],[86,91],[306,792],[42,318],],
'242':[[164,272],[164,174],],
'244':[[250,98],[75,75],[384,7361],],
'245':[[121,371],],
'250':[[44,100],],
'252':[[384,2228],],
'256':[[355,1398],[180,211],[338,75],[121,252],[42,639],[350,208],],
'261':[[54,1175],],
'264':[[396,187],[336,101],],
'269':[[308,85],[118,119],[164,648],],
'270':[[384,2055],[48,2391],[21,158],],
'271':[[171,67],[384,9600],[227,73],[52,309],],
'272':[[274,245],],
'277':[[48,767],[331,536],[121,164],[355,1416],[331,10],[19,92],[83,140],[306,187],[249,275],[48,93],[83,121],[171,1167],[83,69],[95,364],[224,230],[12,456],[63,95],[153,486],[191,111],[121,3],[12,609],[277,390],[384,1472],[39,984],],
'279':[[277,52],[344,76],[70,448],[235,454],[186,428],[197,298],[41,384],[277,570],],
'283':[[384,5739],],
'284':[[384,1267],[355,531],[87,50],],
'285':[[218,54],],
'295':[[234,345],],
'296':[[176,129],[54,1085],],
'297':[[186,89],],
'298':[[39,771],],
'299':[[344,263],],
'313':[[384,4095],],
'320':[[79,22],[196,35],],
'321':[[293,27],[390,129],[183,25],[215,25],[23,27],],
'336':[[298,25],[352,27],[395,21],[149,25],[44,130],[123,18],[345,19],[202,20],[9,33],[297,25],[221,20],[127,25],[29,33],[193,27],[384,4080],],
'337':[[384,4740],],
'339':[[160,418],],
'343':[[335,2519],],
'344':[[384,9576],[196,44],],
'369':[[54,153],[384,8242],],
'370':[[274,811],[296,126],[335,1255],[80,92],],
'375':[[174,257],],
'376':[[274,490],[303,173],],
'382':[[189,582],],
'415':[[137,84],[316,65],[350,136],[86,101],[133,78],[270,105],[247,103],[131,98],[173,129],[57,108],[77,83],],
'431':[[363,271],[313,181],],
'436':[[200,43],[136,24],[335,2852],[335,2380],],
'443':[[174,58],[95,423],],
'445':[[335,2882],[335,2142],],
'447':[[335,1862],[218,340],[332,47],[335,2299],[77,60],[131,62],],
'463':[[178,206],[10,332],[189,383],[213,339],[234,333],],
'466':[[37,88],[384,1032],[313,477],],
'469':[[160,532],[54,1133],[384,7818],],
'479':[[384,2512],[48,2799],[39,792],],
'486':[[48,67],],
'489':[[384,667],[384,207],],
'491':[[12,614],[121,14],[19,97],[12,17],[331,2],[39,989],[171,1172],[331,509],[63,100],[48,622],[121,602],[83,126],],
'503':[[227,167],],
'509':[[363,713],],
'512':[[384,3722],[384,3536],],
'525':[[12,600],],
'529':[[235,260],],
'530':[[99,277],],
'533':[[42,623],[384,4905],],
'536':[[181,795],],
'538':[[384,1766],[384,5980],],
'544':[[304,273],],
'547':[[39,91],],
'550':[[134,111],[128,94],[12,340],],
'551':[[179,1536],[179,1481],[179,1586],[179,1334],],
'553':[[42,1106],],
'554':[[54,574],[122,117],],
'565':[[48,3698],],
'572':[[52,289],[52,337],],
'577':[[355,536],],
'579':[[121,313],],
'582':[[114,30],[169,32],],
'586':[[48,2818],],
'593':[[83,61],],
'594':[[384,4422],],
'595':[[193,73],[352,73],],
'596':[[381,449],],
'600':[[12,386],],
'604':[[243,215],],
'608':[[277,201],[39,413],[262,41],[219,41],],
'613':[[191,61],],
'621':[[39,143],[39,135],[48,313],],
'622':[[342,263],],
'634':[[12,529],],
'636':[[12,533],],
'641':[[384,9211],],
'642':[[39,520],[384,9116],[39,465],[39,441],],
'645':[[303,44],],
'649':[[358,40],],
'650':[[261,30],],
'653':[[13,25],[115,25],[158,24],[172,81],[164,134],[236,25],[346,26],[191,97],[181,627],],
'654':[[123,33],],
'667':[[355,29],],
'670':[[235,197],],
'673':[[15,25],[42,284],],
'698':[[384,5841],],
'700':[[384,7601],],
'703':[[74,84],[16,84],],
'706':[[164,375],],
'709':[[164,508],],
'712':[[304,169],[317,84],],
'716':[[214,132],],
'723':[[261,196],[243,256],[358,361],],
'734':[[336,97],[384,2243],],
'743':[[395,68],],
'773':[[194,40],],
'780':[[355,1364],],
'788':[[42,634],],
'799':[[21,116],],
'800':[[244,161],],
'821':[[161,35],],
'838':[[293,63],[293,81],[23,63],[23,81],[183,81],[215,81],],
'839':[[164,117],],
'849':[[384,8283],],
'858':[[53,140],],
'861':[[277,868],[335,3587],[48,808],[306,228],],
'866':[[384,8680],[384,2583],],
'869':[[395,43],[365,228],[395,38],],
'887':[[384,8886],],
'888':[[186,296],[48,2854],[48,3233],],
'904':[[384,6731],[384,1939],],
'912':[[335,3456],],
'926':[[54,59],[355,755],[30,149],],
'928':[[384,1914],],
'940':[[95,134],[95,511],],
'943':[[70,530],],
'949':[[304,198],],
'971':[[164,624],],
'977':[[384,4356],],
'981':[[384,4555],],
'995':[[157,75],[217,174],[113,51],[355,1370],[217,367],],
'1003':[[381,106],],
'1005':[[372,48],],
'1020':[[304,317],],
'1029':[[48,1967],],
'1033':[[83,84],[268,41],],
'1075':[[135,220],],
'1101':[[242,73],[195,20],[296,83],],
'1102':[[39,18],[344,59],[163,48],],
'1109':[[384,2906],],
'1113':[[83,104],[306,318],],
'1117':[[246,916],[384,4541],],
'1123':[[384,2617],[42,990],[277,312],[217,338],[355,1043],[290,88],],
'1125':[[381,205],[384,2517],],
'1148':[[48,869],],
'1151':[[162,165],],
'1154':[[39,513],],
'1161':[[39,387],],
'1164':[[121,582],],
'1170':[[384,6591],[160,256],],
'1192':[[39,585],],
'1226':[[304,370],[277,744],[384,4983],],
'1229':[[82,341],[384,9728],[100,143],[232,81],[137,226],[173,271],],
'1237':[[253,59],],
'1243':[[39,849],],
'1245':[[344,215],],
'1285':[[355,1056],],
'1305':[[344,206],],
'1309':[[41,179],],
'1310':[[355,353],[344,221],],
'1319':[[42,659],],
'1329':[[304,158],],
'1333':[[157,48],],
'1340':[[42,969],],
'1344':[[42,1133],],
'1349':[[48,3254],[95,167],[54,1210],[42,430],[48,4347],[335,3421],],
'1351':[[42,174],],
'1353':[[274,737],],
'1357':[[42,215],],
'1369':[[191,148],],
'1370':[[277,861],],
'1375':[[384,9921],],
'1419':[[355,1301],],
'1424':[[384,140],[384,3863],],
'1426':[[42,745],],
'1445':[[355,1315],],
'1448':[[217,405],[162,147],[42,906],],
'1452':[[331,474],[274,173],[307,251],[341,251],],
'1454':[[82,338],],
'1462':[[70,440],[197,290],[171,51],[227,57],],
'1463':[[217,439],],
'1464':[[329,51],],
'1468':[[42,1185],[42,1166],],
'1477':[[384,70],],
'1485':[[42,1255],],
'1487':[[164,37],],
'1516':[[48,54],],
'1519':[[48,4369],],
'1535':[[215,55],[183,55],],
'1538':[[227,135],[377,19],],
'1548':[[48,291],],
'1549':[[48,296],],
'1566':[[48,411],],
'1582':[[341,137],[307,137],],
'1602':[[48,4237],],
'1603':[[384,3946],],
'1608':[[102,64],[191,44],[335,1981],[54,403],[335,2713],[72,41],[396,44],[266,206],[197,347],[70,495],[48,2466],],
'1667':[[306,919],[48,3589],[48,4477],],
'1675':[[48,1221],],
'1682':[[246,1450],],
'1714':[[280,32],[334,25],],
'1720':[[384,7696],],
'1741':[[80,68],[263,83],[272,36],],
'1744':[[48,2023],],
'1809':[[384,4670],],
'1811':[[396,30],[384,4768],[396,65],[70,255],[197,136],[197,607],[70,765],[384,4112],[253,142],[324,26],[54,1241],[162,250],[373,64],],
'1830':[[48,3012],],
'1845':[[283,223],],
'1857':[[384,6854],],
'1867':[[384,120],],
'1911':[[384,1604],],
'1951':[[48,4376],],
'1956':[[277,507],],
'1960':[[341,269],[307,269],],
'2006':[[50,39],[62,78],],
'2007':[[49,220],],
'2023':[[152,184],],
'2033':[[395,83],],
'2039':[[384,6775],],
'2045':[[344,197],],
'2065':[[274,695],[274,681],],
'2067':[[384,2447],],
'2069':[[172,122],],
'2095':[[90,39],],
'2097':[[181,328],],
'2099':[[54,138],],
'2103':[[161,371],],
'2126':[[335,1333],],
'2128':[[335,3656],],
'2158':[[95,286],[54,719],],
'2160':[[218,174],],
'2168':[[70,626],],
'2182':[[223,42],],
'2222':[[80,125],],
'2234':[[54,1372],[54,1343],],
'2248':[[342,286],[342,273],],
'2258':[[342,110],],
'2286':[[60,88],],
'2300':[[282,29],],
'2311':[[65,72],],
'2313':[[384,6602],],
'2332':[[363,495],],
'2348':[[384,2892],],
'2372':[[384,4952],[396,143],],
'2374':[[384,1610],],
'2377':[[253,228],],
'2455':[[331,417],],
'2459':[[84,45],],
'2517':[[111,78],],
'2523':[[306,557],],
'2542':[[164,128],],
'2560':[[93,46],],
'2564':[[111,61],],
'2567':[[251,150],[93,136],[172,137],],
'2571':[[95,111],],
'2581':[[95,436],],
'2598':[[96,81],],
'2602':[[161,469],],
'2608':[[137,216],[173,261],],
'2638':[[251,253],],
'2661':[[384,2403],],
'2663':[[213,426],[189,566],],
'2671':[[371,89],[280,96],[384,1710],],
'2683':[[150,80],[103,80],],
'2689':[[384,2102],],
'2690':[[388,68],[388,61],],
'2704':[[353,184],],
'2712':[[111,84],],
'2755':[[121,167],],
'2815':[[125,107],],
'2832':[[125,179],[159,46],],
'2876':[[133,97],],
'2890':[[156,107],],
'2939':[[159,140],],
'2941':[[219,19],[262,19],],
'2942':[[152,89],],
'2953':[[384,1742],],
'2965':[[153,362],],
'2967':[[153,804],],
'2970':[[153,416],],
'3002':[[265,37],],
'3034':[[159,85],],
'3036':[[242,113],],
'3120':[[358,108],],
'3121':[[358,101],],
'3171':[[164,620],],
'3193':[[227,18],[171,20],],
'3207':[[277,843],[246,1],[171,1317],[277,63],[331,44],[188,350],],
'3213':[[172,74],[244,106],[244,34],],
'3222':[[355,264],],
'3227':[[174,144],],
'3265':[[179,48],],
'3267':[[179,1512],[179,1562],[179,1310],[179,1457],],
'3486':[[313,358],],
'3502':[[179,1272],],
'3507':[[179,850],],
'3566':[[384,5092],],
'3572':[[181,304],],
'3607':[[186,58],],
'3609':[[186,97],],
'3632':[[188,26],],
'3633':[[188,35],],
'3637':[[384,5760],],
'3643':[[188,162],],
'3698':[[197,338],],
'3702':[[335,3662],],
'3732':[[210,60],],
'3739':[[384,1514],[384,1189],],
'3768':[[218,301],],
'3770':[[277,932],],
'3789':[[384,1133],],
'3803':[[384,1407],],
'3805':[[234,355],],
'3807':[[234,405],[384,5194],],
'3828':[[243,84],],
'3836':[[246,20],],
'4062':[[274,786],],
'4065':[[384,256],],
'4075':[[277,682],[384,7913],],
'4118':[[384,1634],],
'4148':[[305,69],],
'4171':[[306,821],],
'4172':[[306,835],],
'4189':[[341,222],[307,222],],
'4198':[[384,7414],],
'4323':[[384,8947],],
'4334':[[335,3571],[335,3603],],
'4383':[[335,3639],],
'4463':[[357,25],],
'4472':[[355,184],],
'4483':[[355,833],],
'4590':[[381,381],],
'4602':[[384,179],],
'4636':[[384,2330],[384,9035],[384,1504],],
'4642':[[384,1537],],
'4643':[[384,6573],],
'4666':[[384,406],],
'4684':[[384,792],[384,747],],
'4686':[[384,1022],],
'4704':[[384,1864],],
'4811':[[384,1921],],
'4898':[[384,8934],],
'4946':[[384,3725],],
'5128':[[384,8003],],
'5130':[[384,8040],[384,8014],],
'5157':[[384,8869],[384,8856],],
'5158':[[384,8878],],
'5176':[[384,9218],],
'5194':[[384,9617],],
'5221':[[384,9878],],
},{'1':[[246,219],[246,181],[246,657],[42,790],[246,1272],[246,69],],
'2':[[358,179],[161,277],[390,89],[246,1933],[358,233],[340,120],[277,680],[0,88],[340,76],[261,132],[266,157],[171,15],[390,120],[227,13],[384,8770],[308,109],[308,153],[208,26],[21,88],[188,79],[188,97],[125,85],],
'5':[[0,31],[384,6381],],
'7':[[193,42],[29,64],[352,42],[9,64],],
'8':[[21,31],],
'10':[[261,32],[261,78],],
'12':[[84,75],],
'17':[[173,243],[137,198],],
'18':[[125,157],[355,97],[159,35],],
'19':[[210,172],],
'20':[[384,7936],[358,194],[384,1619],[261,93],[390,50],[0,49],[21,49],],
'25':[[384,7102],],
'38':[[96,106],[83,54],],
'45':[[121,533],],
'47':[[317,109],[384,652],],
'48':[[50,34],[321,205],[137,222],[161,524],[347,47],[181,61],[133,103],[173,267],[249,290],[53,70],[339,268],[133,120],],
'49':[[181,474],],
'60':[[249,90],],
'61':[[344,88],[368,61],[246,1505],],
'62':[[99,208],[194,100],[194,52],[194,90],],
'63':[[188,69],[52,88],[42,1292],[99,222],[96,30],[188,56],[384,548],[277,497],[381,511],],
'67':[[313,377],[39,862],[283,206],[152,175],[313,465],[176,200],[89,412],[242,99],[246,952],[170,105],[235,325],[153,904],[214,356],[95,430],[70,322],[220,67],[384,2134],[381,121],[381,422],[39,569],[220,40],[75,102],[246,902],[331,228],[160,655],[160,266],[39,504],[381,560],[48,3658],[48,3638],[356,32],[214,245],],
'69':[[353,81],],
'74':[[277,89],[384,5752],],
'79':[[54,385],],
'81':[[243,40],],
'82':[[335,3478],[306,105],[178,244],[83,76],[39,416],],
'83':[[213,360],[153,146],[218,234],],
'88':[[335,1098],],
'121':[[215,94],[200,293],[200,226],[293,102],[191,94],[321,261],[23,102],[49,335],[183,94],[257,175],[44,95],[50,79],[329,49],],
'125':[[391,34],[1,58],[280,71],[59,58],[371,64],[334,51],[252,58],],
'136':[[54,766],[290,116],[314,87],],
'140':[[188,144],[146,159],[42,1033],],
'145':[[363,546],[177,44],[207,78],[169,62],[114,61],],
'146':[[128,139],[322,141],[128,153],[128,166],[322,168],[322,155],],
'149':[[274,478],[246,1389],[335,2931],[163,46],[384,1234],[128,212],[164,103],[274,546],[42,1319],[246,1445],[384,3914],[54,425],[335,2435],[42,288],[42,245],[126,31],[361,86],[246,1696],[48,4635],[48,4611],[283,184],[164,217],[48,4250],[48,3937],[186,231],[253,82],[335,454],[270,217],[155,42],[335,3348],[355,1173],[48,168],[61,78],[163,28],[176,133],[296,124],[234,381],[391,63],[67,45],[234,265],[189,315],[301,59],[304,315],[112,52],[306,36],[189,470],[156,102],[102,134],[72,69],[219,38],[331,232],[343,58],[257,70],[306,226],[48,197],[28,53],[344,65],[355,684],[80,90],[355,643],[329,37],[306,927],[48,2704],[48,273],[306,1268],[355,490],[322,214],[5,48],[381,181],[153,105],[84,108],[384,2368],[317,54],[49,296],[176,52],[10,264],[58,48],[370,52],[371,105],[48,358],[48,806],[262,38],[335,2419],[30,424],[321,61],[36,152],],
'150':[[197,308],[70,458],[335,1067],],
'152':[[246,1174],],
'158':[[12,461],],
'162':[[54,1130],[189,108],[213,119],[10,102],[178,71],[234,101],[89,85],],
'165':[[118,192],[384,1289],[336,90],[253,96],[172,90],[251,179],[253,79],[251,342],[244,223],],
'167':[[384,6758],[243,228],[384,3113],[41,316],],
'169':[[197,605],[70,763],],
'176':[[209,249],[6,28],],
'179':[[25,90],],
'187':[[53,121],],
'193':[[89,93],],
'196':[[352,146],[54,1471],[89,329],[274,359],[193,146],],
'199':[[242,191],[18,61],[186,498],[189,420],[18,56],[191,59],[186,102],[73,45],[214,290],[125,91],[79,27],[213,385],[279,26],[12,413],[355,876],[180,209],[384,4564],[274,577],[308,139],[118,98],[180,192],[53,110],[242,125],[274,519],[53,101],[29,126],[385,51],[246,1672],[246,1701],[274,151],[247,231],[11,38],[355,1234],[368,94],[249,174],[345,36],[142,170],[49,105],[30,286],[222,32],[274,729],[321,394],[9,126],[274,56],[153,123],[392,24],[340,106],[384,9483],[95,86],[345,33],[48,4685],[384,6966],[318,26],[253,106],[48,3597],[396,153],[48,3121],[161,347],[384,7462],[48,2537],[161,52],[4,30],[160,605],[160,49],[160,565],[84,191],[48,1306],],
'213':[[199,100],],
'215':[[274,593],],
'217':[[257,92],],
'220':[[160,471],[160,479],[163,59],[160,456],[189,607],[160,575],[151,45],[62,124],[160,542],[160,339],[305,30],[359,62],[213,270],[73,41],[218,365],[122,80],[389,45],[213,455],[213,450],[122,69],[189,612],],
'221':[[260,49],[160,333],[44,59],[5,74],],
'227':[[186,222],[181,584],[160,584],[355,779],[189,443],[30,161],],
'228':[[160,42],[160,18],[354,26],[160,82],],
'230':[[42,693],[218,237],[155,38],[304,398],[384,6463],[152,172],[355,1299],],
'231':[[339,56],[102,50],],
'237':[[363,357],],
'241':[[162,69],[384,1842],[39,609],[186,247],[191,174],[235,331],[160,661],[384,8967],[284,213],[306,564],[306,752],[306,769],[306,799],[39,220],],
'242':[[162,106],],
'247':[[164,17],],
'250':[[243,104],[274,799],[347,56],[153,771],[157,63],[49,363],],
'251':[[274,709],[214,229],[176,148],[355,583],[39,626],[231,110],[160,362],[49,263],[161,94],[39,305],[381,170],[26,42],[235,416],],
'253':[[384,1116],],
'254':[[6,82],],
'258':[[6,91],],
'264':[[266,13],[84,2],[7,182],[363,597],[171,210],[7,19],[266,382],],
'272':[[337,112],],
'273':[[186,2],[339,18],[28,77],[176,33],[7,151],[176,294],[274,283],[171,342],[339,301],],
'277':[[186,422],[234,364],[76,33],[345,24],[322,138],[381,46],[118,134],[322,118],[70,663],[116,120],[220,64],[128,116],[189,274],[355,616],[128,136],[251,118],[395,26],[200,273],[345,48],[39,280],[277,783],[395,48],[363,606],[10,223],[197,431],[89,401],[277,550],[313,204],[314,45],[234,224],[244,176],],
'279':[[84,434],],
'281':[[39,883],[191,142],[162,63],[277,448],[289,43],[157,57],[54,490],[39,599],[39,323],[315,43],[304,239],],
'290':[[284,195],[36,170],[36,190],[284,181],[189,403],[102,157],],
'295':[[176,88],],
'297':[[186,176],[186,197],],
'299':[[249,251],],
'309':[[51,35],],
'310':[[182,31],],
'314':[[54,1115],],
'316':[[48,3654],[384,3962],[246,1873],],
'320':[[387,87],[294,36],[311,87],],
'321':[[161,440],[321,119],[214,217],[266,82],[214,201],[277,221],],
'328':[[29,118],[9,118],],
'338':[[198,86],],
'339':[[182,24],[176,82],[176,72],],
'340':[[160,600],],
'343':[[257,95],[218,179],],
'348':[[274,567],[29,112],[9,112],],
'354':[[131,151],[77,138],[207,72],[247,253],],
'357':[[246,1476],[49,487],[320,167],],
'374':[[48,60],],
'378':[[89,383],],
'388':[[363,486],[363,610],[363,445],[363,616],],
'390':[[363,758],],
'392':[[363,421],[363,407],[363,449],],
'397':[[363,580],[363,569],],
'403':[[234,262],[189,312],[10,261],[189,592],[213,435],],
'406':[[189,636],[189,624],],
'408':[[62,119],],
'428':[[355,722],],
'436':[[48,1648],[39,683],[335,1051],[121,249],[39,704],[48,2670],],
'438':[[363,181],[235,147],[363,558],[213,197],[10,188],[234,189],[363,475],[218,134],[189,239],[178,144],],
'440':[[235,483],[235,463],],
'443':[[180,217],],
'445':[[253,162],[384,7829],],
'447':[[251,138],[30,324],[313,310],[102,151],[189,148],[384,2490],[335,2424],[84,484],],
'451':[[258,40],],
'453':[[358,71],[161,191],],
'454':[[283,210],],
'462':[[181,1012],[50,91],[54,1138],[247,261],[213,483],[49,179],[44,135],],
'469':[[246,202],[181,724],[290,54],[54,200],[102,188],[274,674],[246,285],],
'470':[[269,201],[209,71],[269,215],[153,760],],
'479':[[54,1290],[48,3136],[128,88],[48,4700],[134,105],],
'489':[[384,5574],[214,39],[384,8691],[303,22],],
'491':[[121,333],[12,148],],
'493':[[384,922],[384,950],],
'499':[[189,466],],
'501':[[384,8834],],
'512':[[39,77],],
'515':[[315,170],[289,170],],
'517':[[12,280],[121,205],],
'520':[[48,4804],[12,99],[12,129],],
'527':[[12,305],],
'536':[[12,154],],
'538':[[54,436],],
'547':[[342,202],[342,164],],
'553':[[217,303],],
'567':[[26,38],[294,43],],
'571':[[54,246],[257,76],],
'579':[[306,249],[48,829],],
'581':[[48,2519],],
'593':[[200,244],[246,1168],],
'609':[[159,32],[188,65],[159,165],],
'615':[[353,92],],
'618':[[355,932],[12,445],],
'621':[[39,163],[39,264],[39,243],[39,180],],
'642':[[39,13],[39,536],[39,565],],
'645':[[358,133],[334,69],],
'648':[[49,118],[214,33],[214,208],],
'654':[[349,53],[39,346],],
'655':[[48,3113],[48,4677],],
'664':[[156,96],[89,455],[196,90],[213,394],],
'673':[[313,329],],
'681':[[54,1384],[220,82],[54,722],[95,289],],
'682':[[168,24],],
'694':[[96,172],[339,232],[321,292],],
'697':[[74,52],[16,52],],
'700':[[82,498],[133,86],[49,499],[210,164],[384,1944],],
'701':[[74,70],[16,70],],
'711':[[235,380],],
'712':[[137,183],[356,38],[173,228],[190,46],],
'719':[[18,50],],
'723':[[384,9763],[133,111],],
'729':[[18,66],],
'740':[[224,216],],
'741':[[314,53],],
'776':[[36,49],[53,89],[207,44],[287,32],],
'777':[[270,243],],
'780':[[42,162],],
'791':[[37,59],],
'792':[[161,60],[161,45],],
'800':[[251,210],],
'814':[[251,192],],
'821':[[96,39],],
'841':[[313,340],],
'855':[[353,56],[48,4641],[25,22],],
'858':[[181,19],],
'869':[[42,1093],[390,32],[353,122],[274,177],[390,106],],
'876':[[272,42],],
'877':[[342,114],[342,99],],
'918':[[186,306],],
'920':[[384,1627],[30,140],],
'923':[[242,81],],
'926':[[218,355],[384,3883],[30,373],],
'928':[[361,63],],
'931':[[70,423],[197,273],],
'935':[[224,196],],
'940':[[363,534],[234,398],[384,3860],[384,5069],[95,225],[95,180],[54,658],],
'954':[[30,334],],
'962':[[30,358],],
'963':[[335,3127],],
'970':[[39,745],[42,725],[384,4122],],
'1023':[[258,60],],
'1052':[[190,52],[181,32],],
'1068':[[181,145],],
'1085':[[181,714],],
'1101':[[306,434],[381,550],[225,29],[396,131],[331,238],[355,771],[138,29],[277,199],[98,29],],
'1114':[[39,97],],
'1119':[[266,225],],
'1123':[[355,212],[384,6468],],
'1139':[[355,845],],
'1147':[[197,134],[70,253],],
'1226':[[99,154],],
'1229':[[173,290],[137,245],[50,104],],
'1238':[[258,67],],
'1245':[[226,73],[46,73],[336,157],[54,1096],],
'1260':[[157,73],],
'1261':[[257,59],],
'1267':[[54,1120],],
'1278':[[162,163],],
'1281':[[355,246],],
'1304':[[174,92],[174,114],[174,262],[381,573],[174,245],[174,221],[174,118],[174,15],],
'1305':[[243,62],[384,7735],[70,396],[344,130],[197,233],],
'1309':[[384,7658],[41,159],[344,231],],
'1310':[[355,298],[384,7676],[344,169],[41,172],],
'1314':[[242,139],[355,342],[242,27],],
'1329':[[93,103],],
'1332':[[376,39],[235,479],[355,408],],
'1335':[[42,651],[42,741],[42,842],],
'1342':[[42,1085],],
'1370':[[83,36],],
'1375':[[42,949],],
'1392':[[244,93],[118,84],[235,119],],
'1405':[[384,5827],[89,89],[152,166],],
'1428':[[257,82],],
'1447':[[42,868],],
'1452':[[335,1688],[384,2956],[274,183],[274,388],],
'1457':[[217,388],[355,961],],
'1459':[[384,1936],],
'1462':[[384,3247],[384,1385],[384,2338],[162,252],],
'1503':[[46,30],[384,7868],],
'1504':[[358,31],],
'1505':[[226,30],],
'1510':[[46,76],[226,76],],
'1513':[[385,41],],
'1556':[[48,2534],],
'1557':[[48,347],],
'1582':[[326,47],],
'1630':[[121,184],],
'1667':[[391,58],],
'1719':[[261,67],[381,189],],
'1756':[[48,3129],],
'1811':[[70,63],],
'1814':[[270,225],],
'1830':[[306,666],],
'1832':[[134,96],[302,93],[396,166],],
'1843':[[384,4766],[162,193],[52,304],[235,385],[179,671],[235,396],[384,6330],],
'1849':[[384,5026],],
'1853':[[48,3727],[306,972],[48,3585],[306,915],],
'1856':[[48,3630],],
'1932':[[384,6211],],
'1936':[[48,4736],],
'1955':[[384,5157],[244,129],],
'1964':[[48,4693],],
'2006':[[182,48],],
'2023':[[49,359],],
'2048':[[357,15],],
'2050':[[53,107],],
'2051':[[82,494],[50,109],],
'2063':[[235,365],],
'2064':[[235,441],],
'2068':[[256,22],],
'2069':[[244,207],[118,176],[118,204],[244,235],[172,165],],
'2090':[[242,166],],
'2093':[[54,83],],
'2101':[[54,142],[381,165],],
'2126':[[335,1951],[335,2694],],
'2156':[[54,706],[95,273],],
'2158':[[54,1356],[95,465],],
'2159':[[335,2620],],
'2160':[[384,165],],
'2217':[[54,1078],],
'2255':[[57,229],],
'2268':[[57,281],],
'2272':[[246,695],],
'2297':[[62,68],[62,103],],
'2318':[[66,18],],
'2323':[[68,65],[191,124],],
'2348':[[244,61],[118,60],[235,107],],
'2353':[[313,250],],
'2357':[[384,7049],[162,176],],
'2364':[[258,71],],
'2372':[[191,119],[191,83],[191,146],[384,4352],],
'2384':[[80,72],[296,167],[189,417],[170,111],[80,148],[274,765],],
'2404':[[80,142],],
'2415':[[235,299],[320,125],[320,145],[363,218],],
'2418':[[82,318],],
'2420':[[82,332],],
'2438':[[316,87],],
'2461':[[296,161],],
'2481':[[363,442],[363,481],],
'2512':[[188,24],],
'2513':[[153,1001],[89,360],],
'2520':[[89,416],],
'2525':[[89,323],],
'2530':[[355,412],],
'2531':[[89,378],],
'2542':[[274,78],[91,33],],
'2566':[[93,134],],
'2577':[[384,6578],],
'2581':[[95,457],],
'2589':[[161,238],[96,67],],
'2617':[[274,167],[274,380],],
'2656':[[100,190],[135,147],],
'2659':[[101,42],],
'2723':[[113,49],],
'2738':[[335,1077],],
'2806':[[384,3662],],
'2810':[[125,104],],
'2883':[[135,162],],
'2887':[[173,237],[137,192],],
'2892':[[173,305],[137,260],],
'2899':[[352,59],[193,59],],
'2907':[[246,1148],],
'2928':[[151,39],],
'2952':[[153,168],],
'2976':[[246,1868],],
'3076':[[160,535],],
'3120':[[161,405],],
'3181':[[313,356],[170,229],],
'3196':[[384,4011],],
'3204':[[384,1474],[336,25],],
'3250':[[381,40],],
'3257':[[207,66],[207,82],],
'3275':[[246,1709],],
'3276':[[217,479],],
'3378':[[217,423],],
'3551':[[180,185],],
'3564':[[181,450],[181,325],],
'3585':[[186,173],],
'3683':[[190,27],],
'3685':[[191,178],[191,167],],
'3686':[[191,154],],
'3687':[[191,221],],
'3694':[[194,45],],
'3725':[[208,48],],
'3728':[[209,263],],
'3746':[[214,271],],
'3749':[[384,6354],],
'3823':[[242,159],],
'3838':[[246,101],],
'3844':[[246,453],],
'3869':[[246,460],],
'3902':[[246,1032],],
'3911':[[246,1112],],
'3914':[[246,1136],],
'3972':[[249,41],],
'3985':[[251,145],],
'4006':[[257,134],],
'4053':[[384,154],],
'4069':[[277,405],],
'4125':[[321,220],],
'4129':[[304,290],],
'4150':[[306,311],],
'4168':[[306,783],],
'4184':[[341,164],[341,144],[307,144],[307,164],],
'4221':[[317,49],],
'4242':[[331,123],],
'4318':[[384,7790],[381,265],[384,6201],],
'4352':[[335,2481],],
'4358':[[335,2588],],
'4359':[[335,2602],],
'4361':[[335,3116],],
'4374':[[335,3313],],
'4461':[[353,165],],
'4501':[[357,23],],
'4660':[[384,367],],
'4783':[[384,1972],],
'4816':[[384,1961],],
'4895':[[384,3048],],
'4953':[[384,3922],],
'4955':[[384,3929],],
'4957':[[384,3936],],
'4966':[[384,4212],],
'5088':[[384,6795],],
'5105':[[384,7139],],
'5136':[[384,8138],],
'5146':[[384,8372],],
'5237':[[389,39],],
'5243':[[394,141],[394,193],],
},{'7':[[365,123],],
'16':[[390,90],[0,89],[21,32],[390,33],[21,89],[385,42],[384,6331],[0,32],[363,581],[358,234],[358,32],[356,39],[96,31],[335,1078],[118,193],[274,389],[274,184],[274,178],[261,133],[261,79],[156,103],[159,33],[261,33],[253,97],[161,278],[253,80],[251,139],[390,121],[172,91],[244,224],[235,464],[235,366],[220,65],[188,70],[189,593],[190,47],[213,436],],
'23':[[198,35],[266,320],[315,117],[289,117],[246,1810],[48,2120],],
'27':[[21,51],[261,95],[0,51],[96,69],[161,240],[358,196],[390,52],],
'31':[[39,153],[95,400],],
'39':[[214,35],],
'43':[[132,32],[274,415],],
'140':[[384,1272],],
'147':[[213,391],[89,452],],
'181':[[25,79],],
'184':[[365,174],],
'203':[[274,122],[161,291],[305,65],[125,155],[186,149],[313,383],[274,453],],
'277':[[315,128],[313,317],[289,128],],
'346':[[224,31],],
'374':[[153,1004],],
'432':[[159,67],],
'562':[[162,102],],
'700':[[137,197],[173,242],],
'800':[[244,136],],
'817':[[384,3263],[384,2292],[161,310],[277,91],[261,46],[384,3276],[384,5754],],
'865':[[46,32],[336,27],[226,32],],
'878':[[384,3285],],
'1194':[[350,179],[214,283],[196,33],[79,20],[181,288],[384,4753],[251,35],],
'1433':[[355,1330],],
'2415':[[128,99],[322,101],],
'3557':[[251,133],],
'3558':[[181,92],],
'3637':[[384,5768],],
'3955':[[384,4033],],
},{'2':[[188,47],],
'14':[[303,14],],
'16':[[355,962],[208,27],[274,57],],
'17':[[305,66],[336,28],[358,33],[277,92],[384,5755],[261,47],[261,34],[226,33],[390,34],[21,33],[0,33],[161,311],[159,34],[156,104],[125,156],[96,32],[46,33],],
'31':[[355,1215],],
'39':[[266,326],],
'48':[[48,2676],[180,156],],
'49':[[312,30],],
'55':[[49,365],[206,40],],
'60':[[57,243],],
'61':[[274,830],[355,1020],],
'63':[[189,423],],
'65':[[224,171],[218,136],[235,149],[363,183],[335,2378],[322,225],[10,190],[178,146],[128,223],[189,241],[179,67],[384,4602],[384,7411],[234,350],[188,150],[234,191],[266,346],[213,199],],
'67':[[246,1363],],
'77':[[84,342],],
'82':[[214,77],[243,45],],
'83':[[355,1198],],
'88':[[75,95],],
'107':[[384,125],],
'128':[[191,86],],
'132':[[274,62],],
'140':[[12,567],[162,150],[156,109],],
'152':[[265,34],],
'165':[[320,102],[164,203],[164,211],[266,322],[30,261],],
'167':[[191,216],[46,47],[226,47],],
'170':[[36,139],],
'199':[[153,1303],[30,399],[39,359],],
'225':[[284,197],[269,217],],
'227':[[189,173],],
'231':[[203,77],],
'242':[[61,53],],
'272':[[246,317],[214,236],],
'274':[[313,264],[361,55],[295,39],],
'277':[[355,223],[277,832],[355,96],],
'287':[[246,937],[152,162],],
'295':[[142,67],],
'299':[[86,207],],
'305':[[95,82],],
'321':[[214,332],],
'338':[[234,230],[10,229],[189,280],],
'344':[[363,234],[93,105],],
'359':[[89,457],[213,396],],
'408':[[160,458],],
'418':[[189,114],[10,108],],
'436':[[335,1044],],
'443':[[363,318],[10,337],[384,4935],[86,223],[270,220],[274,550],[186,179],[57,206],[258,74],[54,1387],[367,101],[384,3704],[234,338],[69,78],[118,159],[135,165],],
'447':[[235,295],[199,80],],
'459':[[152,160],],
'478':[[204,26],],
'479':[[214,234],],
'491':[[121,325],],
'499':[[384,6562],],
'502':[[335,1194],],
'518':[[355,1217],[95,84],],
'523':[[12,496],],
'524':[[384,7870],[161,62],],
'532':[[355,225],],
'533':[[42,811],],
'534':[[153,767],],
'539':[[153,377],],
'550':[[39,63],],
'553':[[170,153],],
'567':[[200,306],[257,188],],
'593':[[306,775],],
'608':[[341,167],[307,167],],
'609':[[39,158],],
'670':[[84,498],],
'706':[[30,421],],
'712':[[365,214],],
'790':[[306,777],],
'792':[[251,296],],
'800':[[336,83],],
'857':[[384,7644],[331,151],[84,100],],
'866':[[246,1858],[188,59],],
'869':[[93,113],],
'901':[[49,257],[384,6916],[312,56],[277,633],[306,46],[306,59],[137,257],[355,161],[87,67],[156,119],[355,1124],[158,42],[355,1381],[246,1942],[121,556],[173,302],[335,3449],[331,342],[384,9570],[224,53],[160,591],[277,719],[121,114],[30,72],],
'904':[[41,265],[41,243],[41,320],[41,232],[41,221],[41,276],[41,204],[41,254],],
'905':[[384,2018],],
'926':[[191,299],[242,57],[335,1266],],
'935':[[335,1410],],
'941':[[363,227],],
'949':[[153,1035],[189,413],],
'995':[[243,47],],
'1113':[[289,188],],
'1117':[[246,1565],],
'1123':[[39,168],],
'1170':[[384,1757],],
'1187':[[159,145],],
'1217':[[171,26],[227,112],],
'1278':[[52,190],],
'1281':[[355,995],],
'1302':[[355,964],],
'1305':[[242,144],],
'1319':[[384,930],],
'1333':[[384,6560],],
'1374':[[191,218],[235,297],[170,155],[159,147],[220,59],[336,85],],
'1424':[[384,958],[384,977],],
'1448':[[68,71],],
'1467':[[153,121],],
'1476':[[52,192],[355,1200],[84,344],[84,542],[214,79],[46,49],[226,49],[384,2020],],
'1515':[[48,51],],
'1631':[[48,771],[306,191],],
'1719':[[48,1793],],
'1812':[[181,649],],
'1820':[[48,2862],[48,3241],],
'1930':[[363,737],],
'1963':[[159,43],],
'1971':[[277,786],],
'1993':[[246,787],[246,935],],
'2047':[[49,507],],
'2076':[[384,2483],],
'2093':[[186,130],],
'2114':[[54,206],],
'2160':[[220,57],],
'2200':[[54,1043],[54,934],[54,994],],
'2272':[[62,107],],
'2313':[[384,9520],],
'2336':[[70,208],],
'2475':[[384,1590],],
'2478':[[384,6761],],
'2488':[[84,540],],
'2512':[[246,1829],],
'2577':[[384,8223],],
'2602':[[96,113],],
'2721':[[320,99],],
'2745':[[246,315],],
'2801':[[125,39],],
'2983':[[174,131],],
'3078':[[160,460],[206,42],],
'3724':[[208,29],],
'3732':[[384,9855],],
'3784':[[227,96],],
'3821':[[242,122],],
'3975':[[249,272],],
'3983':[[251,96],],
'4090':[[277,951],],
'4251':[[331,205],],
'4584':[[381,183],],
'4752':[[384,1200],[384,1525],],
'4941':[[384,3621],],
'5106':[[384,7155],],
'5214':[[384,9815],],
},{'1':[[53,29],[50,29],],
'3':[[186,265],[335,565],[112,29],[370,42],[181,773],[321,146],[229,166],[9,97],[242,40],[178,273],[39,326],[341,201],[121,436],[246,1744],[307,201],[364,25],[181,905],[161,544],[29,97],[160,327],[384,1331],[160,263],[160,159],[276,25],],
'7':[[288,26],[193,32],[178,75],[379,168],[169,49],[178,104],[114,48],[90,49],[157,45],[352,32],[26,28],],
'12':[[259,20],[263,61],[350,152],[362,26],[57,266],[204,52],[207,108],[48,4644],[349,63],[384,2700],[82,390],[381,84],[249,197],[48,4246],[8,28],[163,22],[33,22],[336,164],[384,874],[268,37],[384,5224],[270,228],[62,28],[48,4525],[355,1311],[156,41],[75,90],[160,144],[11,33],[176,170],[355,1321],],
'13':[[368,88],],
'14':[[333,19],[102,46],],
'15':[[131,63],[335,2143],[30,275],[173,272],[48,42],[137,227],[335,3588],[384,5093],[42,1167],[277,979],[95,512],[125,180],[335,2883],[384,2584],[355,532],[363,714],[12,618],[42,1107],[355,511],[381,382],[181,628],[332,48],[41,373],[77,61],],
'16':[[182,32],[186,232],[42,652],[181,715],[70,424],[384,8373],[355,343],[102,135],[42,246],[42,163],[180,186],[197,274],[41,173],[384,7659],[42,1293],[210,165],[44,136],[213,386],[227,14],[58,49],[235,300],[242,28],[344,131],[174,16],[344,66],[243,105],[246,903],[171,16],[394,142],[39,14],[48,2520],[246,1149],[48,3130],[246,1175],[163,60],[246,1697],[30,425],[48,4251],[54,767],[62,69],[257,60],[162,64],[48,4694],[257,71],[257,77],[257,83],[29,119],[28,54],[272,43],[384,2369],[335,3349],[335,2932],[160,83],[160,43],[157,64],[277,222],[290,117],[384,4012],[313,251],[313,330],[317,50],[133,87],[153,772],[9,119],[6,29],[335,1099],[162,253],[133,112],],
'17':[[274,416],[251,36],[251,134],],
'18':[[156,105],[161,63],[125,40],[0,34],[358,34],[384,5756],[384,6563],[384,3622],[48,52],[180,157],[49,366],[188,151],[204,27],[390,35],[234,351],[96,33],[39,360],[39,159],[246,1364],[54,207],[384,978],[62,108],[188,48],[261,35],[21,34],[384,1758],[265,35],[153,1304],[12,568],[277,93],[331,152],[181,650],],
'20':[[358,91],],
'21':[[0,38],],
'22':[[0,41],],
'23':[[186,95],],
'24':[[76,41],],
'25':[[12,86],[200,41],],
'26':[[181,770],[95,343],[181,677],[100,140],[72,77],[335,3500],[191,273],[384,7897],[30,436],[81,41],[355,1346],[292,28],[367,54],[44,34],[250,60],[186,317],],
'27':[[384,4267],[355,585],],
'28':[[277,450],],
'31':[[367,116],[266,124],[170,80],[320,109],[42,189],[234,415],[246,1634],[384,5220],[121,455],[335,3518],[84,167],[75,113],[298,59],[42,599],[235,472],[210,151],[75,50],[365,179],[274,338],[313,229],[313,459],[127,59],[274,670],[381,50],[384,1305],[363,589],[218,155],[250,113],[243,125],[363,202],[246,78],[42,337],],
'33':[[57,66],[384,3014],[246,548],[160,156],[160,381],[384,4818],[49,236],[384,3224],[384,8218],[353,118],[181,922],[353,109],[161,362],[153,1366],[353,137],[153,1144],[274,38],[95,35],[384,7973],[86,64],[170,102],[42,1140],[80,66],[263,91],[384,2377],[209,61],[179,58],[355,1239],[173,73],[179,44],[137,60],[218,296],[123,39],[12,541],[203,33],[359,51],[131,74],],
'38':[[335,2548],[16,97],[335,1744],[335,1470],[164,543],[335,2786],[335,1609],[339,171],[353,128],[74,97],[335,2068],[277,777],],
'39':[[121,239],[121,81],[39,307],[122,71],[314,89],[49,265],],
'50':[[221,26],[39,592],[39,523],[153,1023],[186,85],[39,201],],
'55':[[54,648],[54,568],],
'63':[[243,181],[12,474],[274,692],],
'65':[[335,3375],],
'67':[[334,62],[42,682],[122,67],],
'69':[[84,323],[54,252],[394,174],[384,4926],[394,40],],
'73':[[121,567],[181,374],[160,337],],
'77':[[84,365],[384,1439],[113,64],[153,1220],[191,138],[335,2542],[277,524],[335,2696],[381,135],[262,25],[23,115],[106,46],[335,1953],[121,544],[384,9446],[266,148],[342,195],[246,604],[246,637],[75,83],[361,81],[278,54],[183,107],[246,1662],[160,651],[246,724],[246,754],[164,330],[215,107],[306,48],[219,25],[335,3395],[246,1608],[293,115],[331,282],[189,587],],
'79':[[121,559],],
'82':[[39,217],],
'86':[[89,315],[344,299],],
'88':[[373,96],],
'128':[[142,64],[93,44],[394,139],[156,33],],
'129':[[204,24],[11,21],],
'131':[[355,1228],],
'135':[[321,247],],
'140':[[321,344],[52,72],[42,1088],[335,2461],[12,188],[200,310],[52,57],[30,230],[15,40],[42,510],[232,71],[257,192],[274,677],[274,170],[30,244],],
'142':[[224,28],[181,740],[289,32],[315,32],],
'143':[[200,147],],
'144':[[228,20],],
'147':[[6,26],[141,78],[296,108],[160,454],[160,540],[274,385],[384,5274],[143,57],],
'149':[[218,225],],
'151':[[321,202],],
'152':[[314,102],[296,49],[80,45],[48,3695],[210,155],],
'153':[[180,198],[146,166],],
'175':[[2,21],[61,23],[365,196],[67,21],[370,21],],
'183':[[296,80],[48,4960],[137,211],[173,256],[172,129],[157,54],],
'195':[[100,40],[332,38],[135,40],[77,48],[283,42],[4,23],[20,44],[284,45],[180,44],[285,39],[209,48],[269,44],[210,39],[187,45],[36,40],[247,53],[270,53],[131,50],[34,39],[146,39],],
'197':[[246,1519],],
'203':[[331,41],[84,171],[246,364],[30,144],],
'215':[[62,66],],
'216':[[368,67],],
'223':[[160,186],[160,573],[285,131],],
'224':[[243,168],[243,81],[246,171],[246,772],[335,1056],],
'244':[[191,169],],
'250':[[246,1130],[344,185],],
'269':[[65,94],],
'277':[[42,156],[246,1185],],
'285':[[363,68],],
'288':[[246,1018],[52,206],[70,214],[381,91],[54,811],[313,386],[49,125],[243,262],[379,110],[48,395],[355,797],[39,867],[361,25],[277,112],[12,211],[246,545],[335,470],[121,399],],
'289':[[30,127],[30,479],],
'290':[[304,220],[358,306],[176,280],[261,146],[247,241],[321,377],[102,3],[36,160],[247,63],[270,63],[171,317],[321,433],[321,27],[176,17],[7,126],[100,173],],
'298':[[249,283],[306,326],[48,440],],
'301':[[49,299],[246,1876],],
'305':[[48,4946],],
'321':[[277,602],],
'328':[[48,4942],],
'343':[[246,1625],],
'345':[[153,793],[246,1751],[384,7445],[49,156],[277,366],[82,546],],
'346':[[306,469],[67,53],[274,647],[48,752],[82,359],[349,27],[246,702],[274,627],[370,60],[103,113],[121,68],[306,172],[274,638],[384,7729],[12,228],[89,448],[98,38],[335,1846],[121,383],[314,27],[352,139],[314,56],[61,86],[121,37],[193,139],[150,113],],
'349':[[39,650],[69,89],[381,495],],
'353':[[274,361],],
'356':[[342,162],[342,200],],
'375':[[277,584],],
'379':[[384,9296],],
'380':[[213,353],],
'420':[[49,249],[235,338],],
'429':[[358,130],],
'431':[[203,62],],
'433':[[94,28],[104,22],[41,290],[277,296],[384,9207],[49,85],[327,22],[172,70],[54,64],[384,4060],[12,556],[12,180],[383,22],],
'436':[[335,3605],[335,3573],[335,3503],],
'449':[[99,290],[220,126],[335,2515],[246,829],[355,123],[274,326],[75,134],[335,2343],[274,255],[70,638],[355,580],],
'451':[[203,74],],
'468':[[331,391],],
'470':[[269,187],[121,310],],
'482':[[82,527],[48,247],[189,508],[355,1285],[335,755],[349,57],[121,54],[170,261],[253,190],[358,138],[146,134],[48,4471],[384,8412],[18,21],[161,465],[34,132],[246,1103],[11,42],],
'490':[[153,61],],
'502':[[235,269],[355,648],],
'506':[[384,5175],[384,4751],[335,2295],[251,279],[295,33],[335,1858],[153,995],],
'510':[[277,478],],
'517':[[12,75],[48,81],[83,57],],
'519':[[277,69],],
'524':[[381,342],],
'527':[[306,82],[306,54],],
'529':[[171,1228],[246,1819],[174,269],[335,3796],[277,83],[335,24],[179,4],[355,786],[70,14],[355,1490],[243,247],[70,787],[290,61],[188,224],[344,96],[355,546],[185,31],],
'530':[[39,208],],
'533':[[62,130],],
'542':[[246,1893],[384,3218],[246,1286],[384,3008],],
'553':[[186,350],],
'588':[[39,646],],
'593':[[42,315],[358,295],],
'596':[[181,111],[331,33],[381,273],[181,265],[252,86],[331,131],[321,46],[336,66],[181,668],[277,800],[246,1211],[160,280],[12,356],[246,1044],[42,1128],[39,838],[235,320],[39,508],[335,2309],[395,92],],
'597':[[39,820],[42,278],[331,479],],
'605':[[181,213],[306,167],[48,747],],
'615':[[306,1491],[30,165],[246,932],[338,69],[335,2346],[169,30],[338,28],[263,32],[48,4149],[277,357],[335,1851],[114,28],[12,470],[30,189],[54,796],],
'620':[[121,179],],
'624':[[12,480],],
'639':[[244,98],],
'647':[[246,707],],
'681':[[49,202],],
'696':[[283,202],],
'700':[[49,323],],
'705':[[114,42],],
'713':[[90,29],[116,102],[384,7892],[116,86],[54,1160],],
'723':[[210,171],],
'771':[[57,304],],
'777':[[20,158],],
'782':[[384,8724],],
'786':[[52,254],],
'793':[[21,38],],
'794':[[21,41],],
'817':[[303,24],[384,5576],],
'835':[[341,248],[317,81],[307,248],[99,113],[336,111],[336,137],],
'856':[[131,60],[112,77],[367,33],[332,45],[189,475],[332,158],[77,58],[251,237],[396,81],],
'860':[[355,558],],
'861':[[54,427],[371,107],[42,760],[321,413],[355,450],],
'885':[[150,76],[103,26],[103,76],[150,26],],
'906':[[277,121],],
'913':[[30,103],],
'918':[[209,225],],
'921':[[113,54],[244,115],[66,21],[384,2953],[381,547],[274,180],[99,188],],
'923':[[384,8353],],
'926':[[322,34],[313,394],[313,327],[128,33],[384,22],[242,47],],
'937':[[42,1137],],
'938':[[315,194],[180,51],[180,154],],
'944':[[384,3062],],
'963':[[313,342],],
'969':[[30,391],],
'978':[[251,214],],
'1003':[[335,1069],],
'1007':[[62,101],],
'1016':[[218,264],[95,190],[188,231],],
'1101':[[48,4901],],
'1104':[[42,142],],
'1108':[[384,5805],],
'1109':[[302,32],[134,31],],
'1113':[[39,679],],
'1117':[[172,154],[384,1616],],
'1118':[[246,1803],],
'1119':[[162,364],[52,236],[49,218],[242,103],],
'1120':[[191,279],[335,2319],],
'1123':[[277,305],],
'1132':[[246,1549],],
'1133':[[39,197],],
'1134':[[355,515],[384,9319],],
'1138':[[246,949],[355,769],[355,760],[41,390],],
'1185':[[39,528],],
'1202':[[39,724],],
'1205':[[384,9596],[381,200],[161,88],[181,230],],
'1225':[[306,977],[48,3732],[277,669],[246,737],],
'1226':[[153,749],[181,862],],
'1229':[[77,55],[181,155],[131,57],[270,60],[247,60],],
'1235':[[39,815],],
'1255':[[246,1029],[246,1146],],
'1350':[[272,38],],
'1356':[[42,212],],
'1360':[[181,839],],
'1362':[[42,373],],
'1365':[[42,263],],
'1370':[[54,183],[174,85],[110,24],[231,103],],
'1373':[[42,307],],
'1379':[[42,1194],],
'1390':[[331,410],],
'1391':[[160,617],],
'1417':[[331,290],],
'1418':[[42,689],],
'1424':[[384,8784],],
'1430':[[42,780],],
'1434':[[146,156],],
'1452':[[160,476],],
'1502':[[160,349],],
'1506':[[161,433],[95,214],],
'1546':[[384,2902],],
'1547':[[48,707],[48,680],],
'1550':[[48,303],],
'1555':[[48,338],],
'1673':[[335,3355],],
'1726':[[335,273],[179,1619],[48,1825],],
'1754':[[314,24],[349,24],],
'1778':[[304,178],],
'1837':[[93,119],[200,236],[381,374],[121,192],],
'1838':[[48,3103],[48,4667],[49,57],],
'1848':[[384,3666],],
'1861':[[381,140],],
'1878':[[189,431],],
'1999':[[104,25],[327,25],[383,25],],
'2016':[[84,431],],
'2043':[[49,491],],
'2066':[[251,27],[181,430],],
'2134':[[310,21],],
'2220':[[82,325],],
'2241':[[355,700],[54,1410],[160,370],[54,1425],[288,48],[112,100],[253,27],],
'2257':[[86,55],[137,51],[57,57],[173,59],],
'2260':[[164,637],[57,212],],
'2269':[[112,65],],
'2298':[[319,23],],
'2341':[[384,5560],[384,8901],[384,5253],[70,329],[384,6642],[384,5962],],
'2362':[[260,29],],
'2407':[[170,40],],
'2416':[[157,23],],
'2457':[[384,7598],[246,22],],
'2527':[[162,126],],
'2533':[[274,823],],
'2536':[[95,340],[89,480],],
'2572':[[353,29],],
'2609':[[161,99],],
'2626':[[335,3286],],
'2675':[[384,6821],[384,1822],[384,5545],[384,7366],[384,5241],[384,2384],],
'2677':[[181,366],[247,225],[153,1141],[146,162],[153,882],[153,1363],],
'2730':[[384,7875],],
'2778':[[160,322],],
'2781':[[313,348],],
'2862':[[384,3641],[384,6571],],
'2911':[[355,1075],],
'2913':[[362,52],],
'2939':[[335,943],],
'2976':[[277,845],[277,65],[246,3],[188,352],[171,1319],],
'2983':[[384,4976],[243,90],],
'3006':[[193,94],[352,94],],
'3066':[[160,104],],
'3067':[[160,134],],
'3129':[[306,765],],
'3164':[[164,501],],
'3169':[[300,21],],
'3183':[[170,265],],
'3185':[[170,45],],
'3218':[[173,329],],
'3514':[[179,977],],
'3575':[[220,78],],
'3631':[[384,3698],[384,5905],[384,9263],[384,3807],],
'3772':[[218,345],],
'3802':[[384,4233],],
'3824':[[242,175],],
'3891':[[246,718],],
'3911':[[304,353],],
'3940':[[246,1596],],
'3942':[[335,2718],],
'4070':[[277,463],],
'4102':[[384,6634],[384,8941],[384,7011],[335,2945],[384,9668],],
'4239':[[331,302],],
'4319':[[335,2328],],
'4502':[[358,48],],
'4503':[[358,51],],
'4504':[[358,54],],
'4505':[[358,57],],
'4547':[[365,212],],
'4594':[[381,484],],
'4603':[[384,30],[384,6453],],
'4780':[[384,1595],],
'4781':[[384,1599],],
},{'2':[[249,124],[252,27],[68,113],[0,48],[390,49],[261,92],[252,49],[21,48],[358,193],],
'19':[[21,35],[161,363],[390,36],[0,39],[358,35],[358,49],[358,52],[0,35],[21,39],[358,58],[358,55],],
'20':[[161,155],[0,36],[161,158],[21,36],[161,161],[390,40],[390,37],[96,52],],
'23':[[384,5348],[384,3953],[384,9179],[277,245],[391,43],],
'24':[[384,6033],[384,2458],],
'26':[[384,3059],],
'47':[[384,7395],],
'63':[[384,5580],],
'92':[[384,3748],[358,90],[384,5477],[384,3743],[384,7616],],
'148':[[252,88],],
'149':[[371,69],[59,63],[252,63],[1,63],[280,76],[334,56],],
'321':[[214,55],[384,7935],[384,7986],[226,38],[46,38],[336,33],[355,42],[214,88],],
'346':[[161,488],],
'489':[[384,5230],[306,101],[48,103],],
'567':[[161,485],],
'648':[[355,49],[252,71],[363,541],[214,94],[235,224],],
'649':[[161,152],],
'1117':[[358,67],[358,61],[358,64],],
'1358':[[70,283],[197,164],],
'1476':[[261,49],],
'1503':[[384,5710],],
'1504':[[358,46],],
'1915':[[96,49],],
'1991':[[384,1618],],
'2592':[[96,51],],
'2593':[[96,54],],
'2599':[[384,3944],[384,3970],[161,497],],
'3105':[[161,154],],
'3106':[[303,55],[161,157],],
'3107':[[161,160],],
'3108':[[161,163],[303,57],],
'3121':[[277,242],],
'4026':[[261,53],[261,61],[261,57],],
'4120':[[303,63],],
'5238':[[390,39],],
'5239':[[390,42],],
},{'20':[[0,37],],
},{'20':[[0,40],],
},{'1':[[331,394],[335,2938],[321,320],[339,226],[339,260],[58,22],[135,173],[58,41],[39,165],[277,1000],[12,639],[246,923],[84,134],],
'2':[[49,460],[161,198],[246,282],],
'3':[[384,7613],[77,123],[49,192],[49,207],[174,147],[173,285],[49,328],[176,152],[218,214],[48,607],[84,240],[49,164],[224,226],[165,74],[384,555],[232,102],[44,127],[164,491],[9,182],[162,87],[176,242],[156,129],[52,184],[42,1112],[246,862],[89,211],[246,881],[363,677],[384,9582],[246,1125],[155,28],[153,1369],[153,1147],[153,1089],[247,208],[153,896],[153,700],[93,129],[95,95],[12,124],[249,246],[153,483],[48,1547],[95,195],[95,249],[257,137],[258,46],[260,96],[355,870],[95,427],[137,240],[65,108],[270,210],[273,24],[273,41],[39,716],[274,573],[99,211],[39,677],[274,780],[12,511],[276,42],[276,54],[54,537],[384,9637],[209,204],[283,143],[199,70],[283,153],[48,3044],[283,165],[54,682],[180,204],[17,30],[36,144],[342,242],[304,344],[306,93],[307,71],[307,111],[131,138],[30,404],[20,163],[181,82],[341,111],[30,385],[341,71],[30,361],[54,1261],[181,227],[181,871],[112,23],[321,228],[29,182],[181,1002],[321,350],[189,434],[102,166],[326,40],[152,82],[332,147],[48,4006],],
'7':[[187,53],[196,40],[27,31],[27,39],[196,48],[75,37],[196,53],[332,57],[196,59],[196,64],[203,40],[111,37],[203,48],[207,32],[209,75],[209,112],[385,25],[111,43],[3,28],[338,34],[80,80],[338,42],[320,47],[81,38],[81,51],[170,119],[170,72],[315,67],[315,40],[47,27],[229,50],[44,87],[50,44],[44,44],[313,110],[372,32],[367,51],[313,78],[156,70],[313,72],[313,60],[156,65],[156,59],[364,30],[100,55],[89,216],[156,54],[342,92],[342,118],[93,53],[20,59],[135,53],[135,60],[156,46],[34,46],[20,50],[69,33],[53,34],[36,47],[36,56],[304,279],[247,82],[247,92],[363,285],[343,35],[362,45],[300,30],[296,71],[37,36],[294,29],[250,57],[289,67],[289,40],[287,67],[287,38],[253,32],[285,45],[253,91],[284,51],[343,43],[61,33],[67,31],[148,48],[61,48],[347,31],[147,27],[283,49],[347,39],[260,35],[260,79],[100,48],[105,28],[276,38],[276,30],[275,27],[146,47],[143,26],[263,38],[263,46],[97,30],[141,41],[273,29],[141,31],[269,50],[62,57],[270,84],[270,94],],
'9':[[181,513],[340,47],[208,33],[308,47],],
'12':[[137,165],[95,483],[96,111],[351,54],[350,195],[261,206],[39,644],[350,177],[54,346],[356,45],[350,162],[277,564],[260,38],[350,145],[283,121],[283,146],[65,138],[137,63],[284,150],[148,132],[285,113],[251,327],[358,376],[58,37],[303,93],[363,96],[342,303],[93,74],[93,63],[247,184],[10,328],[363,373],[36,121],[304,223],[34,114],[246,1911],[246,1809],[153,1307],[363,506],[342,125],[135,125],[131,153],[269,149],[89,283],[20,140],[131,124],[131,77],[396,161],[100,120],[270,186],[365,130],[86,182],[30,328],[125,172],[313,95],[161,504],[30,256],[86,67],[313,432],[235,279],[164,304],[30,205],[234,329],[84,370],[164,600],[381,147],[84,349],[231,82],[164,657],[229,143],[39,824],[384,1060],[30,194],[384,2494],[48,114],[9,76],[317,37],[118,220],[172,93],[48,591],[218,253],[384,3918],[384,4224],[173,76],[118,116],[173,210],[317,127],[57,69],[77,140],[384,7026],[77,109],[76,21],[213,335],[384,9008],[321,253],[178,202],[210,125],[336,95],[209,180],[335,3412],[100,151],[209,64],[244,251],[179,1003],[321,390],[57,219],[331,101],[0,167],[29,76],[25,47],[332,123],[57,189],[335,229],[105,49],[180,137],[191,210],[394,43],[394,123],[394,178],[355,381],[181,527],[181,686],[395,32],[181,955],[189,536],[396,101],[189,523],[189,480],[186,445],[396,115],[189,379],[335,1080],[146,116],[187,134],],
'13':[[30,313],[0,129],[75,61],[30,376],[30,432],[317,105],[164,433],[145,45],[261,167],[164,88],[190,20],[176,185],[249,229],[176,230],[100,137],[358,327],[343,48],[212,47],],
'14':[[344,41],[162,39],[381,37],[331,24],[321,283],[48,1299],[12,448],[30,44],[12,417],[364,21],[267,18],[52,141],[68,38],],
'15':[[363,245],[93,137],[173,130],[213,462],[95,168],[172,75],[174,59],[357,26],[48,130],[228,36],[231,38],[355,537],[95,437],[213,457],[86,102],[235,372],[164,118],[213,427],[95,448],[373,76],[12,520],[384,3109],[242,114],[346,27],[384,4953],[160,374],[384,5195],[191,149],[244,35],[244,107],[16,85],[340,154],[384,6732],[335,2853],[42,991],[52,290],[335,2623],[246,1377],[246,1398],[246,1469],[335,2381],[247,104],[191,112],[153,1047],[249,119],[191,62],[249,276],[57,109],[251,254],[253,68],[54,154],[42,379],[181,329],[42,319],[189,614],[384,6776],[189,583],[42,121],[266,186],[189,567],[270,106],[181,973],[277,869],[74,85],[39,132],[313,478],[304,199],[121,165],[306,116],[306,568],[306,920],[54,1242],[48,3590],[125,108],[54,1086],[54,1211],[77,84],[131,99],[308,187],[137,85],],
'16':[[5,49],[54,1079],[384,7677],[135,163],[181,20],[317,55],[270,218],[261,68],[189,467],[258,72],[153,147],[42,742],[335,455],[381,190],[335,2603],[246,1137],[246,658],[335,3117],[176,134],[246,203],[89,417],[57,282],[363,547],[363,358],[217,389],[160,19],[161,192],[243,63],[217,480],[220,83],[353,93],[51,36],[354,27],[95,458],[164,18],[358,72],[62,104],[186,177],[355,247],[12,281],],
'17':[[363,582],[189,594],[213,392],[213,437],[132,33],[89,453],[244,137],[235,465],],
'18':[[363,184],[363,319],[341,168],[10,230],[189,281],[218,137],[52,193],[69,79],[220,60],[10,191],[57,244],[365,215],[12,497],[235,150],[84,543],[213,200],[246,1943],[178,147],[384,4603],[320,103],[191,219],[289,189],[224,172],[384,7412],[234,192],[234,231],[307,168],[189,242],],
'19':[[21,42],[0,42],],
'20':[[390,43],],
'25':[[21,128],],
'26':[[321,296],[396,134],[321,272],[161,288],[396,118],[161,235],[30,19],[75,64],[214,360],[0,46],[161,214],[396,104],[30,121],[77,72],[162,334],[331,161],[396,96],[217,396],[48,669],[71,41],[313,486],[324,23],[30,197],[313,435],[332,72],[332,163],[394,72],[334,66],[394,62],[313,410],[48,2108],[164,142],[335,306],[335,486],[220,43],[335,708],[335,739],[164,591],[307,192],[210,74],[390,47],[210,55],[224,44],[331,383],[49,473],[84,161],[158,33],[224,130],[209,129],[384,9680],[209,115],[224,189],[227,172],[384,9545],[335,1152],[52,196],[208,36],[335,1885],[229,92],[335,2219],[207,62],[335,2356],[30,495],[231,64],[335,2649],[335,3006],[231,106],[384,8417],[335,3066],[34,63],[335,3205],[70,453],[170,151],[200,185],[384,7981],[335,3278],[86,77],[44,90],[235,282],[86,131],[170,206],[335,3562],[198,81],[198,34],[36,70],[304,191],[384,7267],[243,136],[384,7040],[213,430],[243,184],[243,207],[244,142],[171,289],[197,303],[89,406],[339,88],[303,83],[339,214],[384,6479],[339,236],[21,46],[90,58],[91,24],[153,371],[341,192],[20,89],[173,86],[302,162],[153,45],[173,159],[384,5879],[384,5683],[246,432],[302,57],[48,3192],[191,108],[344,29],[174,232],[344,152],[292,53],[344,339],[344,364],[148,81],[290,8],[42,1026],[349,84],[12,508],[353,76],[146,65],[384,4881],[176,188],[384,4862],[384,4844],[176,246],[285,62],[284,220],[142,132],[189,570],[7,98],[142,128],[65,112],[355,60],[284,99],[246,1383],[62,51],[283,70],[384,4321],[178,279],[277,960],[246,1774],[42,881],[137,114],[355,281],[137,73],[135,207],[247,73],[96,65],[277,544],[247,133],[277,354],[180,86],[135,74],[355,473],[384,2328],[249,110],[249,122],[384,2310],[61,61],[134,160],[355,526],[134,60],[54,1104],[274,495],[131,87],[61,51],[274,290],[100,69],[181,199],[270,135],[249,280],[42,552],[187,83],[100,160],[270,75],[253,49],[42,506],[128,72],[269,98],[181,382],[186,410],[382,41],[358,191],[381,543],[125,208],[181,456],[121,527],[381,378],[381,366],[121,476],[361,47],[48,4257],[121,247],[263,95],[362,39],[121,208],[379,214],[363,255],[48,4308],[57,138],[181,976],[261,90],[186,139],[363,401],[116,105],[116,89],[57,80],[111,46],[116,79],[257,132],[42,368],[322,69],],
'28':[[161,242],[0,53],[21,53],[261,97],[358,198],[390,54],],
'29':[[306,737],[274,586],[306,339],],
'30':[[42,349],[93,91],[111,57],[42,275],[313,147],[363,119],],
'31':[[164,568],[384,1985],[296,43],[384,1995],[95,361],[224,117],[200,213],[118,157],[95,372],[95,385],[200,191],[112,131],[363,351],[80,39],[363,309],[200,76],[95,421],[253,138],[384,1149],[69,76],],
'33':[[335,1250],[103,85],[103,59],[266,189],[339,188],[103,41],[48,3052],[161,265],[153,543],[21,76],[303,152],[384,9361],[363,325],[359,108],[335,1495],[381,397],[384,6129],[69,41],[228,24],[261,120],[253,113],[358,221],[153,102],[396,124],[374,33],[53,113],[372,40],[381,623],[203,67],[95,120],[253,216],[252,47],[150,85],[150,59],[150,41],[176,96],[321,197],[384,1601],[308,95],[12,625],[217,307],[321,269],[170,91],[95,293],[355,1185],[363,464],[260,72],[161,137],[287,57],[260,62],[213,348],[277,177],[277,239],[49,470],[184,22],[335,2359],[54,726],[189,531],[220,36],[214,262],[384,4342],[390,77],[277,986],[0,76],[179,80],[355,391],[189,393],[335,2332],[246,1970],[313,407],],
'34':[[84,547],[344,107],[335,114],[12,348],[189,323],[268,46],[39,880],[234,273],[384,5280],[266,208],[244,230],[313,271],[118,199],[48,4613],[70,770],[29,142],[355,1437],[331,266],[84,346],[160,630],[10,272],[9,142],[197,612],],
'37':[[121,230],[12,240],[12,110],[161,231],],
'38':[[30,301],[171,243],[197,560],[206,83],[266,301],[249,164],[42,1080],[164,270],[7,52],[153,843],[153,840],[30,408],[52,357],[52,30],[54,519],[162,5],[335,2966],[70,717],[68,14],[68,120],],
'39':[[174,247],[253,72],[170,231],[246,575],[361,88],[246,392],[384,3968],[246,1056],[18,45],[384,8642],[41,347],[89,227],[274,548],[246,1082],[335,2728],[96,131],[39,400],],
'40':[[21,70],[390,71],[261,114],[161,259],[0,70],[249,103],[358,215],],
'41':[[21,83],[261,127],[121,524],[161,272],[0,83],[358,228],[390,84],],
'43':[[373,24],[337,65],[246,511],[162,110],],
'44':[[359,48],[181,823],[181,253],],
'45':[[335,2373],[335,2850],[335,2475],[209,233],[335,3085],[335,2238],],
'47':[[54,466],],
'50':[[215,77],[384,5020],[370,48],[289,116],[274,663],[315,116],[23,77],[308,41],[143,45],[274,139],[277,285],[141,66],[293,77],[54,484],[48,2119],[267,25],[340,41],[183,77],[67,41],[61,74],],
'51':[[390,137],],
'52':[[361,92],[72,28],[191,30],],
'54':[[121,443],[48,3628],[335,3301],[231,51],[314,83],[355,970],[363,543],],
'55':[[246,495],[249,152],[384,5892],[249,170],[162,294],[246,764],[95,264],[95,278],[249,130],[9,103],[54,711],[29,103],[54,697],[0,113],[12,384],[246,224],[277,626],],
'60':[[249,187],],
'62':[[355,897],[217,316],],
'63':[[135,176],[160,201],[48,4017],[39,248],[96,45],[353,98],[331,348],[384,2301],[160,101],[246,1713],[277,289],[84,56],[176,76],[16,50],[16,68],[49,383],[277,823],[306,1406],[48,4639],[244,210],[384,596],[102,139],[381,323],[44,56],[84,453],[121,319],[253,160],[118,179],[363,416],[74,68],[368,104],[74,50],[363,512],[207,42],[260,46],[363,719],],
'65':[[191,156],[137,194],[358,154],[173,239],],
'66':[[18,63],],
'67':[[161,549],[121,214],[263,49],[181,636],[359,60],[251,40],[257,143],[57,251],[54,1157],[355,1080],[363,379],[181,27],[135,196],[54,660],[396,112],[84,71],[39,311],[95,227],[116,127],[331,141],[54,1382],[314,60],[191,185],[331,376],[39,635],[121,203],[303,143],[338,45],[84,110],[335,3418],[168,29],[49,463],[306,1162],[335,1095],[203,51],[160,89],],
'69':[[161,480],[246,148],[353,172],[384,9677],[96,108],],
'73':[[355,1425],[320,129],[220,73],[181,548],[152,170],[218,362],[170,236],[153,846],[235,489],[381,316],],
'74':[[179,39],],
'77':[[384,9178],[235,221],[384,7488],[4,44],[384,9172],[23,125],[384,7484],[384,7438],[198,84],[84,537],[384,7382],[49,436],[243,50],[234,226],[243,140],[84,230],[335,3485],[48,2673],[384,6890],[243,253],[384,6824],[197,270],[153,691],[89,420],[337,79],[84,79],[28,70],[303,106],[246,63],[339,201],[153,226],[303,59],[303,51],[313,440],[49,353],[159,122],[343,68],[384,6314],[49,321],[384,5965],[343,99],[222,46],[335,986],[49,307],[246,324],[246,333],[49,280],[160,633],[174,127],[49,253],[331,157],[331,137],[293,125],[384,5244],[344,156],[344,310],[384,5008],[246,667],[384,4993],[246,812],[246,820],[331,116],[231,55],[384,4716],[39,84],[231,115],[355,39],[144,32],[384,4644],[246,1158],[355,46],[246,1367],[39,100],[95,441],[39,110],[246,1417],[246,1424],[140,26],[54,504],[95,452],[279,40],[42,887],[278,32],[318,40],[355,136],[313,82],[355,228],[70,420],[179,51],[246,1576],[384,3964],[355,285],[321,133],[135,210],[277,557],[321,173],[384,3952],[384,3782],[277,343],[246,1834],[355,444],[384,3771],[384,3530],[384,3207],[384,2997],[189,276],[52,61],[249,34],[329,57],[249,92],[161,222],[384,8957],[384,2322],[321,237],[84,474],[384,2241],[39,741],[249,145],[384,2235],[249,155],[99,295],[384,1826],[384,1502],[161,293],[164,349],[181,283],[188,52],[392,38],[251,112],[57,240],[54,1189],[181,445],[384,1341],[125,34],[100,163],[384,1249],[79,41],[384,226],[313,244],[381,445],[121,227],[384,8438],[253,130],[361,102],[263,75],[39,89],[381,193],[395,118],[161,573],[246,1344],[54,1349],[395,140],[112,43],[363,364],[10,225],[76,88],[384,8566],[363,538],[384,5347],[42,332],],
'79':[[186,298],[277,509],],
'82':[[121,254],[277,911],[39,95],],
'83':[[313,361],],
'84':[[197,541],],
'86':[[335,3761],[277,252],],
'88':[[335,1061],],
'99':[[266,76],],
'105':[[159,163],],
'113':[[355,102],],
'114':[[306,78],],
'128':[[371,71],[376,22],[27,47],[389,33],[93,100],[294,34],[169,59],[110,35],[71,71],[280,78],[37,41],[382,71],[152,121],[151,33],[287,70],[114,58],[122,101],[26,35],[72,55],],
'129':[[48,2131],],
'131':[[246,415],[326,29],[54,704],[95,271],[251,285],],
'135':[[118,139],[48,600],[244,181],],
'136':[[258,65],],
'137':[[355,551],[355,764],],
'138':[[303,184],],
'139':[[173,230],[137,185],],
'140':[[355,1328],[331,426],[335,14],[355,950],[96,100],[277,39],[249,5],[277,151],[320,119],[96,85],[161,357],[358,164],[134,152],[335,40],[84,204],[41,304],[161,494],[358,170],[161,335],[84,210],[118,185],[227,194],[283,240],[125,214],[84,273],[214,347],[335,464],[335,569],[266,319],[312,52],[252,68],[42,996],[42,1014],[384,8239],[185,15],[159,115],[185,98],[349,75],[384,7992],[95,183],[266,233],[48,3201],[191,105],[68,57],[52,153],[384,5475],[70,392],[186,344],[153,1239],[306,503],[68,110],[186,280],[48,2736],[88,44],[83,109],[302,154],[70,263],[171,1212],[95,434],[197,144],[244,216],[197,229],[335,3788],[181,786],[181,727],[358,88],[384,5678],],
'142':[[212,43],[224,88],[250,40],[200,174],[145,41],[48,4465],[367,42],],
'143':[[111,76],[313,403],[171,114],[335,3108],[84,335],],
'144':[[356,20],[118,30],[72,23],[287,89],],
'147':[[235,394],[235,383],[186,332],[25,88],[234,362],[6,54],[266,221],[151,43],[347,45],[37,56],[335,1027],[384,8121],[200,241],[146,140],[44,133],[186,245],[100,185],[53,93],[177,32],[164,333],[50,32],[207,75],[170,108],[313,307],[207,69],[258,53],[207,88],[384,9347],[116,55],[284,210],[209,69],[283,168],[251,176],[50,88],[342,230],[178,242],[48,156],[189,450],[6,86],[363,604],[389,43],[89,398],[84,123],[135,142],[39,701],[96,169],[128,191],[161,328],[181,189],[170,249],[270,247],[189,145],[128,182],[128,156],[322,193],[322,184],[294,40],[322,144],[128,142],[384,7271],[53,68],[89,348],[73,62],[322,158],],
'150':[[49,43],[95,219],[162,342],[214,383],],
'151':[[164,111],],
'152':[[54,119],[253,205],[342,210],[80,146],[161,398],[274,474],[125,78],[313,233],[355,939],[313,104],],
'153':[[285,138],[20,167],[160,209],[181,1010],[84,247],[339,263],[321,323],],
'156':[[181,392],],
'158':[[174,56],[152,205],],
'159':[[304,206],[304,335],[304,213],[1,89],[105,39],[179,940],[304,385],[304,328],],
'165':[[384,5409],[335,2430],],
'167':[[277,379],[243,218],[41,334],[48,282],[41,311],],
'175':[[189,630],[213,475],[266,265],[164,284],[160,520],[102,95],[49,214],],
'176':[[95,297],[54,730],],
'183':[[293,50],[13,20],[23,50],[236,20],[158,19],[115,20],[183,42],[90,55],[44,140],[326,17],[346,21],[324,20],[215,42],[3,19],],
'187':[[100,157],[164,225],],
'195':[[209,105],[179,1583],[181,919],[284,83],[153,1094],[179,1331],[179,1478],[269,82],[179,1533],],
'196':[[112,48],[326,43],],
'197':[[355,987],[246,634],[95,49],],
'199':[[153,1100],],
'203':[[30,490],[30,14],[162,28],[344,359],[344,24],[355,521],[171,284],[290,3],[162,402],[381,630],[355,375],[41,330],[231,60],[7,60],[381,13],[68,3],[171,251],[7,93],[142,81],[344,334],],
'205':[[249,52],],
'215':[[68,77],[121,327],],
'216':[[160,580],],
'217':[[118,153],],
'222':[[116,68],[189,197],[234,147],[89,133],[10,146],[116,76],[213,155],],
'223':[[187,194],[5,63],[5,68],[207,47],[29,151],[372,27],[9,151],[176,255],[287,50],[176,218],[218,279],[5,41],],
'224':[[355,1273],[290,93],[48,2545],[186,127],[42,677],],
'225':[[44,62],[315,172],[189,609],[260,52],[29,115],[213,452],[289,172],[9,115],],
'227':[[214,268],[331,437],],
'231':[[160,469],],
'237':[[384,6883],[284,179],],
'238':[[252,25],[134,157],[161,124],[302,159],[116,27],],
'241':[[162,67],[384,2194],[277,482],],
'245':[[12,298],],
'250':[[246,1500],[7,131],[270,223],[42,1075],[137,220],[164,609],[49,176],[381,263],[171,322],[53,87],[176,285],[384,7788],[178,250],[181,45],[321,438],[384,6199],[102,8],[217,419],[384,6743],[173,265],[95,78],[321,32],[247,246],[384,1947],[176,22],],
'266':[[189,106],[10,100],[178,69],[278,27],[246,1866],[246,1223],[213,117],[89,83],[234,99],[355,801],],
'270':[[171,233],[52,5],[162,16],[52,92],[266,30],[52,46],[266,397],[7,42],[384,6492],[355,1391],[162,382],[162,392],],
'273':[[331,234],],
'274':[[15,32],],
'276':[[152,139],[381,481],],
'277':[[12,272],[10,194],[213,203],[224,101],[189,245],[335,995],[218,140],[234,195],[363,187],[217,300],[235,347],[235,153],[381,473],],
'279':[[277,132],[344,82],],
'281':[[213,267],[331,192],],
'285':[[277,334],[153,1033],[153,672],[213,459],],
'288':[[171,310],[102,201],[373,86],[108,18],[84,265],[218,375],[30,34],[292,24],[321,5],[48,2250],[321,312],[246,238],[7,119],[47,19],[306,1142],[361,68],[48,2770],[148,162],[48,3290],[332,179],[160,442],[335,460],[160,198],[335,1041],[26,19],[395,110],[48,909],[30,508],[178,299],[153,837],[44,31],[361,107],[153,556],[339,252],[396,25],[147,19],[347,21],[306,530],[102,19],[181,196],[276,21],[275,19],[69,25],[191,25],[73,23],],
'290':[[48,4517],[261,203],[358,373],[102,130],[48,4756],[153,539],],
'292':[[247,250],],
'295':[[42,722],],
'297':[[186,219],],
'298':[[306,427],[48,4812],[224,179],[335,3271],[48,4653],[381,100],[48,1433],[12,463],[161,219],[48,1372],],
'299':[[217,362],],
'300':[[39,616],],
'301':[[52,295],[363,695],[170,243],[355,1355],[42,220],[72,73],[320,159],[235,356],[213,379],],
'302':[[162,314],],
'306':[[39,773],[48,3581],[153,508],],
'315':[[42,222],],
'317':[[209,137],[270,143],[394,80],[57,146],[173,167],[269,106],[178,159],[210,82],[100,77],[187,91],[283,78],[247,141],[135,82],[36,78],[10,285],[285,70],[20,97],[34,71],[234,286],[137,122],[213,294],[146,73],[86,139],[180,94],[332,80],[284,107],[148,89],[89,240],[229,100],[189,336],],
'321':[[214,327],[23,66],[293,66],],
'322':[[353,153],],
'343':[[12,283],],
'345':[[384,1798],[49,78],[95,474],[246,979],[162,129],[21,103],[331,470],],
'346':[[277,255],[274,615],[345,27],[16,115],[384,4192],[306,686],[48,4183],[352,127],[315,143],[306,1523],[153,625],[317,114],[52,166],[352,46],[339,59],[160,502],[274,352],[257,151],[355,481],[29,68],[277,233],[39,733],[30,114],[335,1869],[48,4689],[246,1739],[277,244],[395,98],[52,331],[12,165],[9,68],[74,115],[48,3125],[384,6717],[161,365],[193,46],[193,127],[289,143],[121,125],[396,127],[30,51],[246,256],],
'349':[[384,4933],[381,219],],
'352':[[9,110],[29,110],],
'356':[[181,219],[384,6236],],
'357':[[49,497],],
'359':[[29,186],[9,186],],
'360':[[352,54],[213,480],[36,168],[102,155],[30,331],[247,257],[181,994],[284,193],[50,102],[269,213],[193,54],],
'362':[[274,716],],
'367':[[9,173],[29,173],[84,445],],
'369':[[164,341],],
'370':[[353,180],[266,249],[46,35],[246,36],[226,35],[349,81],[336,30],],
'375':[[186,472],[331,441],[160,206],[153,1223],[339,211],],
'376':[[70,267],[197,148],],
'378':[[355,65],],
'380':[[189,398],],
'409':[[160,537],],
'420':[[384,4429],[95,416],[137,189],[274,522],[335,2364],[181,141],[284,200],[25,81],[48,4617],[384,1098],[160,474],[173,234],[246,1152],[39,612],[381,430],[181,453],[385,44],[269,220],[251,109],[39,155],[384,5118],[48,2541],[384,7640],[125,48],[84,463],[70,67],[306,314],[82,533],[359,83],[48,3870],[27,59],[160,430],[317,74],[52,307],],
'426':[[189,194],[231,87],[10,143],[213,152],[234,144],[89,130],],
'429':[[189,462],[266,89],[161,114],[30,322],[102,149],[93,132],[391,38],],
'431':[[57,118],[44,70],[86,111],[394,50],[44,79],[131,108],[77,93],[247,113],[173,139],[137,94],[270,115],],
'433':[[242,204],[152,210],],
'435':[[178,129],[363,166],[234,174],[218,119],[10,173],[189,224],[213,182],[235,132],],
'436':[[200,176],[39,619],[335,2477],],
'438':[[235,139],[178,136],[213,189],[363,173],[10,180],[234,181],[218,126],[189,231],],
'439':[[218,129],[10,183],[189,234],[363,176],[235,142],[178,139],[246,115],[213,192],[234,184],[331,344],[164,438],],
'445':[[218,151],[363,198],],
'447':[[332,160],[84,448],[396,106],],
'448':[[181,1031],[181,181],],
'449':[[48,2757],[181,132],[270,237],[274,758],[37,75],[274,470],[189,488],[363,518],[42,778],[353,168],[277,141],[246,1235],[224,127],[384,2191],[355,830],[384,3228],[274,226],[313,483],[384,4841],[331,325],[341,148],[160,189],[179,1295],[339,155],[197,498],[311,78],[335,2894],[307,148],[243,156],[89,403],[48,3277],[306,517],[384,7236],[170,148],[42,534],[384,3018],[387,78],[84,158],[251,58],[246,1077],[331,321],[274,750],],
'450':[[10,220],[234,221],[189,271],],
'451':[[363,316],],
'453':[[293,118],[189,163],[89,182],[215,110],[183,110],[23,118],[95,461],],
'454':[[181,581],],
'455':[[384,7465],],
'465':[[52,115],],
'468':[[336,149],[384,1196],[226,65],[10,345],[384,1521],[114,68],[46,65],[169,69],],
'470':[[10,349],[153,860],[179,999],[335,2703],[48,4823],[181,803],[189,518],[54,342],[335,225],[153,351],[153,598],[335,1960],[153,652],[153,662],[396,89],[153,742],],
'479':[[289,124],[39,344],[315,124],],
'480':[[54,747],[95,314],],
'481':[[121,219],],
'482':[[121,418],[181,262],[359,100],[153,549],[54,1251],[48,4305],[42,802],[304,350],[277,411],[153,1312],[335,107],[152,157],[31,45],[200,107],[42,1221],[304,270],[48,2127],[335,2028],],
'489':[[83,47],],
'491':[[12,144],[134,114],[128,97],[83,29],],
'499':[[289,184],[315,184],[224,158],[204,76],[224,82],],
'500':[[200,168],],
'502':[[54,421],[39,753],[48,4290],[83,93],[48,3565],[335,3370],[303,128],],
'506':[[12,52],[335,3014],[355,240],[335,1401],[335,1835],[384,5666],[181,832],[70,475],[42,1059],[339,195],[84,503],[384,8772],[181,128],[162,230],[181,531],[242,89],[76,65],[218,270],[54,461],[335,2285],[197,325],[335,446],[251,315],],
'509':[[335,2140],[335,2880],],
'516':[[95,455],],
'525':[[48,2667],[48,57],],
'527':[[12,492],[12,114],],
'528':[[12,126],],
'529':[[331,369],[234,342],[210,142],],
'532':[[217,426],],
'533':[[42,417],],
'534':[[39,49],],
'536':[[181,461],],
'541':[[382,62],[71,62],[71,54],[382,54],],
'542':[[306,655],[306,669],[57,273],[125,267],],
'547':[[395,88],],
'550':[[322,115],[128,113],],
'551':[[339,98],],
'554':[[246,809],[246,832],[290,44],[277,620],[246,859],[200,133],],
'555':[[164,372],],
'560':[[12,238],[121,78],],
'562':[[181,407],],
'577':[[277,118],[162,154],[12,290],],
'585':[[39,607],],
'593':[[280,106],[362,36],[341,64],[339,292],[307,64],[371,99],[288,19],[321,328],[37,21],[307,25],[283,179],[341,25],[105,21],[340,34],[343,25],[340,21],[48,2141],[308,21],[304,231],[343,64],[62,48],[308,34],[42,1162],[294,21],[355,410],],
'596':[[345,77],[189,495],[246,190],[355,935],],
'597':[[128,125],[322,127],[306,788],[39,71],],
'600':[[12,505],],
'609':[[188,62],[249,232],],
'613':[[358,187],[214,238],],
'615':[[190,30],[199,77],[189,459],[335,2399],[363,684],[335,2071],[335,2789],[30,178],[249,183],[396,93],[48,3139],[84,284],[48,4703],[335,2352],[335,3275],],
'617':[[12,443],],
'623':[[306,246],[48,826],[48,781],[306,201],],
'630':[[12,516],],
'639':[[191,228],],
'654':[[315,196],],
'659':[[355,195],],
'665':[[14,49],[235,437],],
'670':[[84,102],],
'681':[[305,25],[50,98],[181,67],[286,17],[287,27],[198,28],],
'682':[[235,304],],
'696':[[246,130],[246,1678],[217,457],[355,1297],[197,484],],
'699':[[74,55],[156,37],[16,55],],
'705':[[106,41],[274,565],[160,213],[384,9350],[93,96],[54,717],[30,371],[319,50],[111,64],[95,284],[102,184],],
'712':[[164,660],],
'713':[[228,30],[356,25],[96,23],[209,255],],
'721':[[18,27],],
'786':[[20,171],[285,142],],
'788':[[96,90],],
'791':[[290,51],[48,784],[306,204],[181,35],[70,536],],
'792':[[161,378],],
'800':[[162,246],],
'835':[[97,21],[365,115],[23,21],[303,90],[293,21],[317,23],[183,19],[215,19],],
'837':[[105,66],],
'839':[[336,73],],
'840':[[215,66],[261,86],[183,66],],
'856':[[197,443],[246,1374],[373,90],[373,30],[162,77],[197,530],],
'857':[[153,293],[42,458],[344,122],[54,1238],[161,452],[246,1096],[384,7456],[54,475],[209,238],],
'861':[[384,5012],[246,54],[246,1770],[39,885],[246,94],[384,383],],
'866':[[89,464],[213,403],],
'868':[[178,217],],
'875':[[300,48],],
'879':[[27,56],],
'885':[[169,22],[114,20],],
'887':[[186,94],],
'898':[[164,179],],
'899':[[355,454],[153,1052],],
'918':[[153,66],[84,480],[332,172],],
'919':[[30,117],],
'921':[[39,809],[359,127],[250,125],[189,620],[189,604],[251,338],[349,51],[153,758],[36,188],[213,447],[394,191],[384,2486],[246,516],[314,51],[54,172],[367,128],[391,56],[384,5071],[283,188],],
'923':[[30,138],[49,357],[274,604],[182,40],[42,699],[274,772],[363,563],[49,373],[213,357],],
'926':[[306,1192],[306,509],[162,219],[95,27],],
'928':[[30,158],],
'937':[[384,2305],[321,149],],
'938':[[249,160],[391,47],[249,179],],
'940':[[335,2979],[329,47],],
'944':[[266,142],[52,266],[235,458],[176,100],[30,235],[321,213],],
'949':[[296,143],[80,109],],
'953':[[217,482],],
'954':[[30,309],[350,192],[30,351],[304,250],],
'955':[[246,692],],
'972':[[30,417],],
'974':[[30,413],],
'979':[[220,100],[339,53],],
'986':[[384,6772],],
'1003':[[335,2405],[49,501],],
'1004':[[84,551],],
'1006':[[160,399],[160,567],],
'1016':[[188,200],[257,110],],
'1019':[[343,53],[343,30],],
'1022':[[36,182],],
'1033':[[363,699],[178,256],],
'1056':[[276,68],],
'1057':[[44,122],],
'1072':[[77,135],],
'1073':[[270,241],],
'1074':[[181,983],],
'1079':[[131,148],],
'1104':[[42,548],[42,1230],[251,102],],
'1109':[[41,356],[84,217],],
'1117':[[246,451],[188,137],[358,173],[176,105],[153,777],[39,115],[339,150],[277,651],[179,1166],[39,719],],
'1119':[[197,425],[70,657],[373,73],[217,414],[39,129],[320,31],],
'1120':[[246,44],],
'1134':[[200,157],],
'1136':[[257,129],],
'1137':[[277,768],],
'1138':[[39,235],[246,184],],
'1141':[[153,1204],],
'1146':[[39,276],[148,155],],
'1164':[[200,206],],
'1168':[[95,323],],
'1194':[[39,614],],
'1198':[[355,981],[322,105],[121,223],[61,70],[128,103],[322,198],[128,196],],
'1205':[[385,61],[246,672],[153,764],],
'1224':[[39,858],],
'1225':[[221,30],[335,1695],[174,98],[246,1190],],
'1226':[[153,1342],],
'1229':[[153,834],],
'1235':[[48,2296],[48,2892],[48,1013],[306,602],[321,400],[48,3327],],
'1245':[[176,85],],
'1267':[[266,313],],
'1304':[[162,171],[396,141],],
'1310':[[384,7170],],
'1314':[[42,748],[41,186],[355,359],],
'1319':[[355,822],],
'1337':[[116,99],],
'1341':[[274,160],],
'1350':[[135,181],[160,446],[54,1135],],
'1356':[[212,31],[355,1204],[277,486],[145,29],[42,365],[317,66],],
'1358':[[391,42],],
'1364':[[244,166],[118,124],],
'1370':[[42,565],[178,315],[42,798],[355,1152],],
'1378':[[266,217],[217,321],[153,1208],[90,24],[249,140],],
'1384':[[42,977],[217,312],[355,1249],[99,54],],
'1391':[[266,160],[335,3178],[335,285],],
'1398':[[42,478],[331,262],[206,55],],
'1403':[[54,193],[197,466],[246,1203],[102,59],[153,529],],
'1407':[[42,644],],
'1409':[[42,612],],
'1412':[[42,628],[42,922],],
'1446':[[42,941],[42,864],[42,962],],
'1455':[[52,68],],
'1459':[[224,164],],
'1468':[[42,1103],],
'1483':[[355,1341],],
'1488':[[42,1280],],
'1498':[[44,111],],
'1500':[[177,41],],
'1506':[[46,43],[197,395],[70,600],[226,43],[336,38],],
'1519':[[306,1403],],
'1532':[[153,784],],
'1546':[[48,256],],
'1547':[[178,81],[178,110],],
'1554':[[181,623],],
'1555':[[84,420],],
'1582':[[54,1184],],
'1606':[[48,610],],
'1608':[[235,400],[266,229],],
'1615':[[277,502],],
'1626':[[246,583],],
'1635':[[306,230],[48,810],],
'1636':[[306,236],[48,816],],
'1672':[[335,2896],],
'1673':[[121,59],[48,3550],[48,4629],],
'1688':[[162,134],],
'1693':[[218,337],],
'1723':[[381,186],],
'1757':[[48,3127],],
'1765':[[384,6660],[48,2186],],
'1778':[[57,236],[306,1103],[246,601],],
'1786':[[181,693],[181,681],[335,3408],[102,179],],
'1808':[[306,701],],
'1812':[[189,580],],
'1814':[[187,168],],
'1819':[[322,99],[302,116],],
'1837':[[246,572],[246,590],[246,501],[246,481],[363,528],[277,437],],
'1839':[[48,4674],[48,3110],],
'1846':[[134,93],[302,90],],
'1855':[[48,3623],[384,9087],],
'1858':[[48,3643],],
'1861':[[384,9673],],
'1862':[[381,213],],
'1864':[[48,3674],],
'1866':[[84,185],],
'1867':[[231,70],[116,115],],
'1910':[[384,6575],],
'1911':[[306,1264],[48,3933],],
'1913':[[246,1472],],
'1924':[[48,4691],],
'1932':[[306,1487],[48,4145],],
'1943':[[48,4239],],
'1967':[[335,2997],],
'2012':[[350,184],],
'2016':[[331,431],[110,29],],
'2034':[[84,67],],
'2035':[[49,439],],
'2073':[[52,262],],
'2084':[[54,45],],
'2092':[[54,81],],
'2094':[[54,107],[164,402],],
'2100':[[54,140],[84,529],],
'2104':[[186,286],],
'2113':[[186,416],[235,312],],
'2143':[[335,1968],],
'2145':[[246,609],],
'2148':[[54,652],],
'2150':[[152,182],[335,1088],],
'2155':[[95,410],],
'2157':[[95,469],],
'2160':[[180,175],],
'2212':[[197,434],[355,606],[70,666],[153,495],],
'2218':[[95,173],],
'2239':[[54,1392],],
'2241':[[261,180],[358,340],],
'2257':[[69,84],],
'2262':[[61,58],],
'2264':[[253,135],[99,178],[251,33],],
'2269':[[57,295],],
'2288':[[336,159],],
'2289':[[95,200],],
'2298':[[319,42],],
'2301':[[153,892],[62,121],[368,36],],
'2313':[[355,918],],
'2328':[[69,66],],
'2332':[[315,133],[289,133],[335,3308],],
'2341':[[384,5486],],
'2342':[[363,730],],
'2348':[[277,490],],
'2371':[[384,7587],],
'2374':[[160,165],[181,161],],
'2383':[[355,594],],
'2384':[[186,448],],
'2387':[[76,27],],
'2388':[[339,265],],
'2391':[[76,51],],
'2396':[[277,515],],
'2411':[[80,134],],
'2416':[[81,23],[367,68],[250,74],],
'2451':[[82,535],],
'2460':[[84,49],[181,168],],
'2477':[[358,115],[252,30],[84,382],],
'2489':[[84,562],],
'2510':[[134,146],[162,196],[102,98],[302,148],],
'2533':[[246,1436],],
'2545':[[340,143],[308,176],],
'2570':[[95,108],],
'2572':[[288,37],],
'2585':[[95,478],],
'2589':[[96,61],],
'2603':[[96,184],],
'2609':[[96,163],],
'2615':[[384,9501],],
'2626':[[153,1044],],
'2629':[[355,734],[242,130],[274,154],[384,6568],],
'2630':[[246,1308],[246,1142],],
'2632':[[99,151],],
'2638':[[153,619],],
'2641':[[99,216],],
'2662':[[308,136],[340,103],[266,239],],
'2670':[[103,96],[150,96],],
'2671':[[355,865],[102,112],[246,198],[102,124],],
'2675':[[384,5189],[384,5208],[384,6553],],
'2677':[[102,191],],
'2691':[[331,271],],
'2744':[[200,182],[243,225],],
'2746':[[121,96],],
'2761':[[121,217],],
'2762':[[224,112],],
'2768':[[121,368],],
'2774':[[121,483],],
'2781':[[122,55],[365,172],],
'2787':[[123,29],],
'2789':[[125,10],],
'2806':[[188,91],],
'2826':[[384,5864],],
'2829':[[159,59],],
'2844':[[125,233],],
'2848':[[125,246],],
'2863':[[363,636],],
'2885':[[135,204],],
'2913':[[142,178],],
'2916':[[343,87],],
'2948':[[153,99],],
'2949':[[153,109],],
'2977':[[246,506],],
'2982':[[153,679],],
'2983':[[175,28],[154,30],],
'2989':[[161,211],],
'2993':[[153,886],[234,403],],
'3018':[[159,82],],
'3044':[[159,110],],
'3049':[[159,127],],
'3051':[[159,152],],
'3081':[[160,529],],
'3085':[[187,190],],
'3089':[[160,659],],
'3102':[[339,63],],
'3116':[[161,340],],
'3117':[[246,388],],
'3132':[[161,520],],
'3137':[[384,4023],],
'3140':[[162,206],],
'3142':[[162,256],],
'3161':[[164,464],],
'3166':[[164,518],],
'3167':[[164,626],],
'3170':[[164,594],],
'3178':[[186,105],],
'3184':[[170,203],],
'3185':[[335,3139],[335,2182],],
'3195':[[303,109],],
'3204':[[336,44],],
'3206':[[171,1305],[174,1],[227,226],],
'3217':[[186,143],],
'3266':[[249,78],],
'3555':[[180,215],],
'3561':[[384,4654],],
'3563':[[181,272],],
'3568':[[181,291],],
'3594':[[181,848],[181,883],],
'3618':[[186,321],],
'3621':[[355,638],],
'3629':[[187,155],],
'3631':[[339,217],[339,136],[384,9386],],
'3677':[[189,440],],
'3678':[[189,170],],
'3680':[[384,4347],],
'3688':[[335,3400],],
'3706':[[200,153],],
'3728':[[209,246],],
'3740':[[214,67],],
'3779':[[224,108],],
'3791':[[266,135],],
'3808':[[235,231],],
'3816':[[239,21],],
'3827':[[344,175],],
'3829':[[243,171],[290,123],],
'3843':[[246,90],],
'3845':[[246,107],],
'3846':[[246,1122],[246,112],],
'3871':[[246,525],],
'3884':[[246,664],[246,622],],
'3887':[[246,649],],
'3891':[[355,221],],
'3987':[[251,194],],
'3989':[[251,204],],
'4015':[[257,156],],
'4040':[[269,199],],
'4055':[[363,618],],
'4070':[[277,444],],
'4080':[[277,724],],
'4099':[[384,9254],[384,7264],[284,217],[384,4318],[384,9335],],
'4102':[[384,3767],],
'4103':[[355,902],[315,165],[289,165],],
'4200':[[311,44],[311,60],[387,60],[311,52],[387,44],[387,52],],
'4211':[[314,70],],
'4225':[[319,59],],
'4239':[[355,200],],
'4240':[[331,87],],
'4262':[[331,297],],
'4273':[[333,22],],
'4280':[[355,695],],
'4302':[[335,961],],
'4319':[[335,3011],[335,3282],],
'4341':[[335,2216],[335,3063],],
'4377':[[335,3389],],
'4405':[[384,7804],],
'4473':[[355,193],],
'4474':[[384,1083],],
'4479':[[355,470],],
'4484':[[355,883],],
'4486':[[355,1090],],
'4522':[[359,118],],
'4552':[[367,105],],
'4554':[[368,55],],
'4576':[[384,4328],],
'4583':[[381,177],],
'4618':[[384,6031],],
'4841':[[384,2315],],
'4959':[[384,3985],],
'4964':[[384,4119],],
'4998':[[384,4661],],
'5005':[[384,4848],],
'5012':[[384,5001],],
'5025':[[384,5150],],
'5075':[[384,6461],],
'5077':[[384,6487],],
'5099':[[384,7032],],
'5225':[[385,35],],
'5244':[[394,54],],
},{'12':[[76,40],[384,4379],],
'19':[[339,172],[304,179],[304,354],[74,98],[16,98],],
'23':[[21,43],[21,71],[21,77],[21,84],[390,44],[23,126],[384,6032],[390,72],[358,229],[358,222],[390,78],[0,84],[358,216],[84,266],[84,274],[358,188],[96,62],[339,196],[339,189],[0,77],[321,134],[161,232],[161,260],[161,266],[161,273],[0,71],[0,43],[293,126],[261,128],[261,121],[261,115],[261,87],[390,85],],
'46':[[161,285],],
'47':[[248,1],[385,73],[37,93],[38,17],[369,405],[275,37],[258,83],[288,54],[47,38],[76,104],[294,50],[171,1001],[87,95],[360,58],[350,225],[147,35],[105,72],[333,29],[139,5],[129,29],[258,80],],
'77':[[23,70],[311,103],[387,103],[183,64],[58,55],[293,70],[215,70],[215,64],[183,70],[384,585],[384,2080],[384,4262],],
'128':[[6,23],],
'154':[[371,45],[280,52],],
'224':[[266,151],],
'247':[[6,88],],
'305':[[339,242],[321,302],],
'469':[[304,259],],
'562':[[384,9153],],
'837':[[384,4392],],
'1504':[[384,4183],],
'2675':[[384,2457],],
'2714':[[384,4401],],
'4102':[[384,9741],],
'4983':[[384,4376],],
},{'2':[[321,387],[384,4157],[384,4170],[58,43],],
'12':[[208,41],[12,85],[12,623],[185,95],[185,12],[249,2],[161,457],[335,11],[21,127],[161,135],[88,41],[335,3785],[277,984],[171,1209],],
'20':[[384,3744],],
'24':[[84,275],[390,45],[358,230],[23,127],[21,85],[358,223],[161,261],[161,267],[161,274],[358,217],[21,78],[21,72],[390,73],[21,44],[358,189],[0,85],[339,190],[0,78],[261,88],[0,72],[261,116],[261,122],[261,129],[266,152],[390,79],[293,127],[161,233],[0,44],[390,86],],
'29':[[261,99],[0,55],[21,55],[390,56],[358,200],[161,244],[84,286],],
'36':[[161,320],],
'56':[[303,113],],
'77':[[384,5308],],
'128':[[200,40],],
'207':[[214,301],],
'248':[[91,27],],
'305':[[48,2179],],
'507':[[384,5191],],
'567':[[384,1405],[358,176],],
'821':[[384,6944],],
'861':[[39,60],],
'869':[[384,7101],],
'939':[[384,9151],[384,9074],],
'1503':[[384,5512],[384,4254],],
'1504':[[384,3448],],
'1526':[[48,158],],
'3833':[[384,3282],],
'4625':[[384,248],],
'4750':[[384,3274],],
'4783':[[384,3261],[384,4397],],
'4821':[[384,4923],],
'4980':[[384,4302],[384,4373],],
'5046':[[384,7090],],
},{'14':[[84,545],],
'17':[[274,123],[95,401],],
'18':[[41,233],[41,244],[41,255],[41,266],[41,277],[191,87],[363,738],[361,56],[199,81],[251,297],[68,72],[41,205],[41,222],[41,321],[303,15],[313,265],[295,40],],
'25':[[293,128],[261,130],[261,123],[0,45],[261,117],[390,87],[390,80],[261,100],[261,89],[390,74],[339,191],[358,177],[358,190],[390,57],[358,201],[390,46],[358,218],[358,224],[358,231],[161,234],[21,45],[21,56],[161,245],[21,73],[21,79],[21,86],[161,262],[23,128],[161,268],[161,275],[0,86],[0,79],[0,73],[0,56],[84,276],],
'29':[[384,2372],],
'31':[[253,101],[345,62],[395,65],],
'33':[[217,395],],
'34':[[246,1170],[160,74],[160,238],[246,1182],],
'35':[[161,253],[161,287],[381,594],[381,57],[0,64],[49,136],[21,64],[381,67],[358,209],[261,108],[390,65],],
'48':[[249,267],[20,73],],
'50':[[384,9544],[331,382],],
'55':[[290,120],],
'59':[[249,279],[307,191],[341,191],[355,280],[339,87],[344,151],[353,75],[384,6478],[277,959],[344,103],[355,153],[243,135],[331,62],],
'62':[[95,463],],
'63':[[39,748],],
'65':[[384,8303],],
'66':[[41,177],],
'68':[[306,933],],
'79':[[306,11],[185,70],[12,183],[335,444],[306,1616],[335,3175],[54,2],[335,282],[95,208],[54,644],[197,27],[70,42],[197,45],[12,590],[335,678],[306,39],[95,506],[335,1833],[171,1267],[335,2283],[197,635],[335,3343],],
'82':[[12,146],[39,286],[39,337],[186,477],[384,5832],[39,490],[99,253],[99,140],[83,80],[39,20],],
'83':[[83,26],[153,321],[384,9552],],
'128':[[41,386],],
'140':[[384,3356],[42,1025],[384,8738],[384,3491],[381,540],[99,201],[363,756],[112,117],],
'143':[[102,211],[176,163],[39,429],[363,669],[199,62],[102,31],[335,2648],[125,207],[7,140],[384,4680],[384,1477],[160,690],[379,146],[171,331],[162,333],[164,326],[186,19],[42,1210],[176,4],[176,70],[21,137],[335,3005],[160,677],[186,506],[395,126],[118,109],[384,7508],[384,7980],[384,8203],],
'144':[[313,344],],
'145':[[321,285],[313,335],[42,751],[278,21],[42,1083],[201,21],[384,6414],[391,49],[384,4888],[337,44],[42,474],[130,24],[42,621],[321,271],[217,292],],
'152':[[229,64],[165,44],[213,112],[26,31],[89,78],[180,72],[189,101],[10,95],[178,64],[234,94],],
'154':[[198,80],[253,169],[181,877],[243,206],[381,542],[379,213],[277,543],],
'184':[[304,379],[127,39],[3,30],[3,21],[298,39],[189,436],],
'195':[[331,327],[292,55],[296,45],[89,101],[235,281],[89,405],[80,41],[335,1063],],
'208':[[274,116],[384,4861],[384,991],],
'215':[[182,21],],
'217':[[246,1496],],
'220':[[181,886],],
'221':[[44,33],[73,25],[122,57],[272,46],[176,245],[181,198],[44,89],],
'224':[[231,63],],
'227':[[121,501],],
'231':[[181,851],],
'237':[[48,852],[253,48],[142,131],[121,290],[224,58],[12,328],[306,272],[42,258],[89,220],[373,61],],
'238':[[48,3676],],
'241':[[42,367],[322,57],[42,302],[6,41],[322,68],[367,85],[367,76],[200,63],[207,111],[209,114],[158,32],[158,21],[213,218],[191,107],[363,254],[324,22],[72,76],[363,209],[218,162],[332,162],[224,43],[191,73],[189,260],[186,107],[224,69],[61,60],[302,161],[61,50],[302,56],[384,4025],[234,210],[136,22],[296,58],[235,181],[100,139],[235,191],[134,159],[320,69],[134,59],[236,22],[361,46],[106,37],[176,187],[128,71],[128,60],[384,9679],[246,1154],[18,42],[13,22],[123,31],[39,204],[250,82],[115,22],[116,42],[250,91],[396,62],[30,196],[48,3500],[396,27],[313,87],[313,409],[51,38],[48,4307],[10,209],[346,23],],
'242':[[86,219],],
'244':[[180,220],[214,359],],
'255':[[384,5670],[164,141],[220,42],[12,65],[42,505],],
'270':[[384,8945],],
'277':[[303,82],],
'283':[[344,338],[30,494],[30,18],[355,525],[344,28],[344,363],[7,97],[171,288],[290,7],],
'284':[[277,29],[227,183],[384,5944],[384,6039],[217,471],],
'291':[[208,35],[135,206],[100,159],],
'295':[[355,534],[171,117],],
'298':[[54,927],],
'299':[[243,177],],
'302':[[186,442],],
'313':[[48,250],],
'316':[[127,31],[48,2252],[20,129],[289,111],[341,150],[112,106],[128,144],[128,158],[48,3292],[48,911],[341,53],[103,46],[54,1081],[54,1186],[337,57],[341,171],[135,114],[100,109],[48,2772],[298,31],[235,79],[234,318],[137,154],[337,50],[48,850],[57,178],[229,132],[363,86],[285,102],[394,112],[284,139],[304,193],[146,105],[69,50],[148,121],[150,46],[284,69],[218,172],[332,112],[218,86],[218,70],[363,110],[251,104],[283,110],[306,270],[156,77],[156,87],[113,58],[157,38],[213,326],[306,532],[322,187],[322,160],[244,78],[210,114],[209,169],[93,83],[209,92],[247,173],[363,287],[322,146],[44,142],[363,312],[200,128],[200,102],[363,354],[363,360],[307,53],[8,21],[363,550],[42,679],[198,50],[161,196],[307,150],[307,171],[257,53],[373,39],[89,272],[89,218],[257,89],[376,24],[80,54],[81,25],[196,81],[196,71],[191,236],[313,112],[9,53],[10,317],[42,248],[384,25],[313,137],[384,476],[121,288],[189,368],[86,171],[170,121],[189,133],[29,53],[187,123],[118,69],[384,1436],[342,260],[355,1275],[349,42],[39,870],[313,218],[39,853],[384,2163],[81,53],[315,111],[36,110],[263,72],[12,326],[173,199],[34,103],[269,68],[180,126],[269,138],[326,19],[176,80],[270,175],[176,102],[178,191],[384,7448],[176,137],[176,154],[84,136],[128,185],[304,392],],
'336':[[253,34],[253,145],[253,154],[172,34],[172,125],[30,435],[384,3058],[49,472],[331,433],[320,49],[244,69],[95,38],],
'338':[[315,88],[315,94],[315,100],[315,105],[289,88],[142,118],[9,39],[289,105],[289,94],[29,39],[289,100],[198,43],],
'339':[[9,41],[29,41],],
'370':[[395,71],],
'395':[[351,46],[382,40],[71,40],],
'407':[[62,50],[176,210],[362,38],],
'408':[[181,267],[160,383],[181,924],],
'415':[[288,41],[49,396],],
'418':[[355,472],],
'423':[[52,195],[213,145],[75,63],[355,1345],[81,33],[81,40],[320,139],[250,59],[355,1206],[234,106],[10,136],[234,137],[157,31],[42,1131],[189,187],[302,83],[367,53],[42,591],[89,107],[42,181],[134,86],[313,434],],
'428':[[142,127],[116,70],[116,117],[231,105],[42,280],[355,702],[116,88],[116,104],[116,78],],
'436':[[220,85],],
'445':[[363,247],],
'447':[[335,1151],[335,3204],[335,707],[335,485],[396,83],[30,168],[189,510],[335,3561],[335,305],[335,1884],],
'452':[[292,52],[292,27],[342,232],],
'469':[[116,65],[160,444],],
'479':[[128,39],[134,37],[227,171],],
'505':[[249,248],],
'512':[[384,8688],],
'517':[[306,169],[12,213],[48,749],],
'519':[[355,799],[48,83],[12,78],[277,114],],
'520':[[48,3626],[12,88],],
'538':[[181,912],[181,844],],
'543':[[235,252],],
'551':[[52,54],[355,890],],
'567':[[112,79],[160,377],[355,1155],],
'572':[[200,270],[121,161],[70,548],[52,301],[12,269],],
'577':[[12,507],[384,1651],],
'584':[[306,255],[12,311],[48,835],[121,395],[121,273],],
'585':[[39,856],],
'589':[[121,322],[227,223],[88,1],[171,128],[188,356],[227,255],[227,334],[188,6],[90,57],],
'592':[[48,861],[306,281],[121,299],[12,337],],
'593':[[246,884],[121,440],[246,1288],[179,1063],[41,314],],
'608':[[242,206],],
'617':[[355,1266],],
'618':[[307,51],[341,51],],
'636':[[48,3191],[48,2107],],
'641':[[257,47],[336,166],],
'666':[[181,255],],
'673':[[313,426],],
'679':[[171,18],[384,4725],[384,6556],[68,62],[15,37],[41,309],[227,16],[384,9364],],
'681':[[39,363],],
'696':[[320,94],[84,160],],
'700':[[137,72],[384,6335],[173,85],[247,72],[249,121],[86,76],[270,74],[111,45],[131,86],[161,213],[77,71],[384,4493],[210,54],],
'712':[[356,47],],
'724':[[169,39],],
'732':[[189,538],[18,75],[396,103],[396,117],],
'773':[[180,85],[57,137],[210,73],[229,91],[270,134],[247,132],[100,68],[173,158],[86,130],[137,113],[269,97],[394,71],[209,128],[332,71],[34,62],[146,64],[135,73],[148,80],[285,61],[284,98],[187,82],[36,69],[20,88],[283,69],],
'787':[[20,173],],
'791':[[355,953],[37,79],[70,417],[321,250],[197,267],[99,70],],
'800':[[172,103],],
'836':[[360,50],],
'839':[[384,7896],],
'855':[[313,106],[292,43],[116,47],[90,43],],
'869':[[160,194],[249,109],[277,106],[277,263],[345,70],[37,48],[224,188],[246,431],[396,133],[48,2342],[161,149],[161,170],[395,80],],
'877':[[198,33],],
'887':[[289,102],[315,102],],
'888':[[118,148],[244,190],],
'894':[[65,81],],
'903':[[242,61],[30,82],],
'908':[[121,580],[153,80],[121,488],[42,154],[164,194],[42,484],[224,121],[355,1378],],
'912':[[251,202],[384,2309],[251,45],[384,5662],[153,1294],[384,5682],[65,111],[384,28],[384,4918],[384,558],[331,357],[251,313],[384,9414],[384,9641],[384,1808],[178,278],],
'917':[[30,120],],
'925':[[371,80],[280,87],],
'928':[[39,534],[384,2600],],
'931':[[95,335],[54,759],],
'935':[[30,247],],
'938':[[161,435],[204,54],[204,29],[224,167],],
'944':[[274,163],],
'949':[[335,738],[176,93],[176,114],[251,124],],
'951':[[153,44],[30,277],[95,216],],
'952':[[30,280],],
'953':[[384,9503],],
'959':[[49,455],[274,223],[30,344],[277,949],[384,1255],[251,260],],
'970':[[277,71],[121,485],[30,393],[48,709],],
'979':[[181,381],[321,295],[384,4399],[246,1764],[339,235],[384,4126],],
'993':[[178,106],[367,71],[178,77],[31,48],[250,77],],
'997':[[42,419],[304,190],],
'1016':[[48,2527],],
'1018':[[181,432],[36,149],],
'1109':[[384,7846],],
'1117':[[358,156],],
'1123':[[355,1304],[355,1258],],
'1178':[[246,577],],
'1190':[[39,578],],
'1203':[[384,2587],],
'1204':[[277,614],[246,845],[258,38],[277,388],[306,1083],[39,657],],
'1206':[[39,664],],
'1241':[[125,37],],
'1255':[[95,480],[84,531],],
'1299':[[41,120],[217,138],[70,452],[197,302],[121,458],],
'1315':[[186,138],],
'1318':[[41,293],[197,237],[70,426],[197,276],[70,400],[277,453],],
'1319':[[174,101],[243,174],],
'1320':[[161,373],],
'1329':[[342,313],[65,167],[82,304],],
'1333':[[384,5845],],
'1335':[[42,782],],
'1346':[[229,180],],
'1348':[[42,551],[42,513],],
'1351':[[384,1373],[384,1236],[80,74],[384,6471],],
'1353':[[384,5878],],
'1354':[[127,61],[42,234],[384,5372],[384,1068],[42,339],[141,62],[157,66],[365,147],[278,56],[42,601],[298,61],[42,191],[234,417],],
'1406':[[181,748],],
'1438':[[125,222],],
'1439':[[335,690],[42,845],],
'1440':[[42,847],],
'1446':[[42,901],[246,1382],],
'1449':[[42,880],],
'1462':[[384,1042],[384,971],[384,2833],[274,186],],
'1475':[[42,1169],],
'1484':[[246,503],[246,483],],
'1486':[[313,364],],
'1493':[[207,61],],
'1551':[[121,386],[246,1020],[277,123],[48,305],],
'1553':[[335,3520],[142,113],[363,591],[355,631],[75,115],[367,118],[75,52],[235,302],[235,474],[250,115],[157,69],[170,82],[384,1048],[365,181],[213,388],],
'1554':[[243,264],],
'1582':[[355,1243],],
'1613':[[200,202],],
'1615':[[371,92],[280,99],],
'1616':[[48,668],],
'1631':[[246,1773],[181,769],[321,415],[384,2201],[95,342],],
'1672':[[384,4843],[384,9337],[189,525],[384,4320],[396,95],[170,205],[284,219],[224,129],[363,520],[384,7266],[335,3277],[313,485],[384,8296],[384,9256],[384,6528],[335,2838],[335,2218],[335,3065],[170,150],],
'1676':[[48,2066],[48,1875],],
'1719':[[282,25],[123,24],[381,87],[321,136],[381,203],[384,9300],[381,275],[381,348],[393,25],[381,377],[96,64],[91,23],[65,133],],
'1757':[[48,3106],],
'1791':[[200,90],[200,97],],
'1797':[[257,67],],
'1818':[[48,3198],[48,2733],],
'1861':[[161,85],],
'1924':[[48,4670],],
'1944':[[48,4256],],
'1955':[[274,289],[118,94],],
'1995':[[194,95],],
'1996':[[49,99],[181,335],],
'2010':[[244,141],],
'2012':[[57,79],[349,83],],
'2030':[[49,407],],
'2045':[[355,187],[290,125],[161,79],[70,533],[161,324],],
'2056':[[263,94],],
'2059':[[200,312],[331,133],[257,194],[246,1805],[200,238],[112,67],[331,292],[52,74],[246,80],],
'2074':[[246,1058],[246,1046],[52,268],],
'2076':[[95,485],],
'2085':[[54,47],],
'2093':[[95,222],[54,655],],
'2160':[[99,256],[99,143],],
'2183':[[257,131],[181,170],],
'2212':[[54,1037],[54,988],],
'2219':[[54,1103],],
'2229':[[339,213],],
'2268':[[62,80],[152,213],[181,455],[181,828],],
'2322':[[355,23],[335,3499],[68,44],[227,24],],
'2328':[[159,134],],
'2330':[[277,85],[179,6],[188,226],[174,271],[290,63],[171,1230],[355,788],[355,548],[384,8416],[243,249],[243,183],[355,1492],[246,1821],[70,789],[335,26],[70,16],[335,3798],[344,98],[185,33],],
'2332':[[153,686],],
'2341':[[84,106],],
'2372':[[363,400],],
'2384':[[153,370],],
'2407':[[170,263],[296,51],[80,47],],
'2415':[[296,63],],
'2467':[[84,173],],
'2488':[[138,37],],
'2497':[[86,202],],
'2524':[[89,121],],
'2534':[[89,459],[213,398],],
'2566':[[394,61],[181,975],],
'2569':[[153,47],],
'2577':[[266,192],[246,1401],],
'2623':[[217,314],[162,156],[335,2089],[290,95],[99,297],[172,77],[99,218],[277,488],[178,92],[384,5178],[191,295],[99,56],[118,33],[244,37],],
'2627':[[99,103],],
'2655':[[100,187],[112,50],[135,144],],
'2661':[[384,610],[384,305],],
'2686':[[150,62],[103,62],],
'2714':[[112,45],],
'2727':[[113,67],],
'2731':[[114,55],[169,56],],
'2757':[[246,1180],[121,475],[121,402],[121,195],],
'2759':[[121,207],],
'2760':[[246,1079],[121,211],],
'2765':[[186,409],[334,65],[353,45],[181,676],[353,51],[331,160],[121,246],[191,272],],
'2771':[[235,292],[164,590],[121,413],],
'2772':[[246,954],],
'2773':[[121,467],],
'2775':[[121,526],],
'2802':[[125,42],],
'2804':[[355,815],[242,108],],
'2816':[[200,184],],
'2827':[[125,160],],
'2830':[[159,52],[125,175],],
'2868':[[384,1592],],
'2907':[[142,101],],
'2909':[[142,121],],
'2940':[[257,113],],
'3028':[[159,65],],
'3036':[[159,91],],
'3039':[[159,97],],
'3047':[[159,124],],
'3069':[[285,144],],
'3091':[[176,108],],
'3095':[[384,2327],],
'3103':[[161,97],],
'3144':[[162,304],],
'3162':[[304,184],[384,2496],[164,471],],
'3189':[[170,144],],
'3198':[[384,2064],],
'3249':[[174,231],],
'3567':[[181,285],],
'3572':[[384,7458],],
'3595':[[181,864],[246,720],[246,746],[321,379],],
'3617':[[277,353],[186,316],],
'3655':[[188,233],],
'3679':[[189,464],],
'3682':[[213,429],[189,569],],
'3705':[[200,116],[200,123],],
'3731':[[269,175],[284,176],],
'3775':[[220,33],],
'3783':[[224,232],],
'3814':[[235,344],],
'3831':[[243,199],],
'3844':[[246,92],],
'3896':[[355,1295],],
'3915':[[288,28],[246,1144],],
'3943':[[246,1637],],
'3944':[[246,1666],],
'3988':[[251,197],],
'3991':[[251,305],[384,1318],[251,270],],
'4008':[[257,73],],
'4010':[[257,120],],
'4031':[[261,189],[358,349],],
'4057':[[384,342],[274,494],],
'4064':[[277,143],],
'4116':[[296,111],],
'4122':[[384,1062],],
'4219':[[316,103],],
'4241':[[331,121],],
'4254':[[331,212],],
'4348':[[335,2355],],
'4351':[[335,2479],],
'4386':[[335,3654],[335,3637],],
'4462':[[353,170],],
'4466':[[355,59],],
'4533':[[363,433],],
'4535':[[363,566],],
'4554':[[384,318],],
'4581':[[381,365],],
'4595':[[381,487],],
'4600':[[381,522],],
'4711':[[384,771],],
'5006':[[384,4880],],
'5013':[[384,7039],],
'5047':[[384,5691],],
'5062':[[384,6116],],
'5134':[[384,8130],],
},{'12':[[48,109],[137,265],],
'16':[[355,584],[358,195],[390,51],[188,57],[161,239],[261,94],[21,50],[0,50],[99,223],[96,68],[84,485],[68,66],],
'30':[[283,197],[121,138],],
'43':[[277,250],[246,1646],],
'47':[[358,158],],
'57':[[96,179],[105,37],],
'63':[[342,145],],
'67':[[73,81],],
'68':[[181,753],[70,314],],
'73':[[164,629],],
'82':[[290,109],],
'121':[[48,3559],[84,352],],
'152':[[358,105],],
'164':[[335,544],],
'199':[[355,458],[277,804],[331,287],[164,125],],
'202':[[49,212],],
'203':[[246,1856],[243,161],[160,242],],
'220':[[62,133],],
'241':[[70,598],[197,393],],
'248':[[188,186],[321,224],[355,663],[76,84],[355,232],[179,74],[355,191],[335,1316],[321,245],[266,275],[312,50],[249,299],[30,228],[277,881],[42,1180],[277,149],],
'250':[[342,180],[384,4804],[274,342],],
'305':[[246,1413],],
'343':[[171,111],],
'349':[[384,7409],[384,4266],],
'351':[[355,464],[48,598],],
'357':[[308,170],[340,137],],
'375':[[247,237],[48,33],[331,517],[28,74],[290,130],[161,29],[355,1458],[160,37],[262,46],[344,73],[219,48],[344,330],[197,502],[227,218],],
'402':[[181,881],],
'436':[[39,711],],
'486':[[39,980],],
'613':[[173,311],],
'642':[[12,605],],
'792':[[384,375],],
'817':[[384,3518],[344,281],[384,1519],[384,1194],],
'1025':[[76,44],],
'1442':[[247,221],],
'2261':[[150,105],[103,105],],
'2486':[[277,461],],
'3001':[[283,138],],
},{'16':[[277,449],[89,379],],
'17':[[21,52],[261,96],[390,53],[161,241],[358,197],[0,52],],
'30':[[212,58],[286,29],[301,63],[197,246],[70,409],[224,185],[101,32],[145,56],[121,515],[190,58],],
'39':[[121,186],],
'43':[[176,179],[180,163],],
'151':[[164,426],],
'199':[[49,225],],
'203':[[49,246],],
'206':[[49,399],],
'224':[[246,1013],],
'237':[[331,402],],
'241':[[209,216],],
'343':[[153,816],],
'447':[[218,177],],
'462':[[49,170],],
'479':[[11,36],[204,57],],
'609':[[287,93],],
'696':[[277,518],],
'801':[[42,1078],],
'922':[[30,135],],
'949':[[355,1209],],
'1136':[[39,225],],
'1305':[[277,294],],
'1309':[[384,6123],],
'1434':[[42,827],],
'1462':[[162,261],],
'1493':[[122,103],],
'1680':[[384,1081],],
'2004':[[49,183],],
'4429':[[343,60],],
},{'2':[[384,1998],[161,482],],
'12':[[112,35],[384,7433],],
'14':[[384,10],],
'18':[[54,1044],[54,995],],
'19':[[384,7876],],
'23':[[261,98],[358,199],[21,54],[84,285],[390,55],[161,243],[0,54],],
'25':[[384,5513],[384,9075],],
'26':[[384,8204],[384,8304],],
'29':[[384,3711],[384,8555],],
'30':[[384,9196],],
'35':[[384,4359],],
'49':[[384,8700],],
'63':[[274,585],],
'65':[[384,7143],],
'77':[[87,88],[384,4270],],
'82':[[384,9040],[384,8402],],
'100':[[384,5498],],
'107':[[384,3193],],
'121':[[384,9940],],
'128':[[112,18],],
'149':[[384,1175],[384,192],],
'163':[[384,4245],],
'165':[[384,7245],],
'173':[[48,535],],
'196':[[384,9585],],
'215':[[384,3334],],
'217':[[384,8543],[384,8906],],
'242':[[384,1812],],
'256':[[384,2982],],
'271':[[384,6057],[384,8572],],
'277':[[384,5261],],
'284':[[384,4129],],
'299':[[384,8799],],
'316':[[384,5930],],
'370':[[384,1167],],
'481':[[384,3577],],
'484':[[384,9948],],
'641':[[384,4304],],
'649':[[384,7531],],
'738':[[384,8317],],
'744':[[384,8972],],
'800':[[384,9420],],
'840':[[384,6975],],
'859':[[384,482],],
'866':[[384,3468],],
'880':[[384,3710],[384,1151],],
'887':[[384,2659],],
'904':[[384,2029],],
'905':[[384,1462],],
'912':[[384,8153],],
'949':[[384,9286],],
'960':[[384,7315],],
'1125':[[384,5536],],
'1143':[[384,2371],[384,871],[384,512],],
'1170':[[384,5716],],
'1286':[[384,2635],],
'1314':[[384,7422],],
'1355':[[384,5390],],
'1369':[[384,9485],],
'1424':[[384,8629],[384,2360],],
'1434':[[384,5122],],
'1474':[[48,3027],],
'1504':[[384,7000],],
'1588':[[48,545],],
'1593':[[384,7063],],
'1597':[[48,1519],],
'1598':[[48,1481],],
'1639':[[48,1412],],
'1667':[[384,9682],],
'1733':[[306,736],],
'1819':[[48,3029],],
'1995':[[384,9802],],
'2534':[[384,9712],],
'2566':[[384,3816],],
'2591':[[384,2409],],
'2671':[[384,6934],[384,9139],],
'2712':[[306,338],],
'2719':[[384,3237],[384,8727],],
'2962':[[384,5868],],
'3165':[[384,2246],],
'3789':[[384,3999],],
'3792':[[384,3183],],
'4405':[[384,8362],[384,6813],[384,4731],[384,9025],[384,8062],],
'4452':[[384,8658],],
'4474':[[384,654],],
'4576':[[384,5564],],
'4581':[[384,862],],
'4586':[[381,221],],
'4609':[[384,8594],],
'4631':[[384,184],],
'4634':[[384,9622],[384,8554],],
'4697':[[384,4298],],
'4855':[[384,4406],],
'4909':[[384,3506],],
'4913':[[384,3366],],
'4967':[[384,4292],],
'4982':[[384,4369],],
'4992':[[384,4479],],
'5003':[[384,5424],],
'5048':[[384,5699],],
'5120':[[384,7648],],
'5220':[[384,9860],],
},{'2':[[0,58],[358,203],[261,102],[390,59],[161,247],[21,58],],
'7':[[342,281],[93,90],[111,56],[280,59],[280,48],[42,274],[342,268],[371,52],[320,60],[371,41],],
'12':[[349,66],[314,76],],
'14':[[339,222],],
'43':[[246,1448],[246,995],[243,66],[384,6710],[246,1465],[314,97],[121,377],[212,38],[249,65],[253,123],[121,172],[274,330],[121,142],[48,587],[274,467],[189,577],[331,332],[339,205],[48,3609],[132,25],[274,814],[224,184],[48,4373],[48,4469],[54,501],[176,250],[176,227],[176,176],[277,623],[145,36],[112,109],[287,95],[170,128],[164,445],[83,107],[153,493],[153,637],[344,306],[162,361],[12,222],[160,315],[355,1144],],
'52':[[70,229],[70,188],],
'62':[[384,4228],],
'63':[[331,503],[101,31],[355,367],],
'67':[[194,110],[84,373],],
'69':[[353,133],],
'77':[[84,458],],
'79':[[48,284],],
'84':[[70,308],[48,4012],[161,297],],
'113':[[227,143],],
'121':[[58,27],[9,148],[29,148],],
'128':[[6,61],[3,34],[286,28],[40,33],[380,35],],
'136':[[200,210],[289,130],[315,130],],
'145':[[352,97],[193,97],],
'149':[[212,57],[335,3056],[145,55],[112,129],[193,88],[335,2209],[301,62],[352,88],[234,389],],
'167':[[246,368],],
'171':[[25,52],],
'199':[[48,757],[181,487],[181,645],[307,101],[274,570],[274,533],[190,57],[70,408],[165,66],[355,1255],[197,245],[306,1170],[317,61],[315,139],[277,740],[23,107],[384,8722],[200,248],[283,196],[384,9817],[96,75],[306,177],[215,99],[293,107],[355,477],[384,5800],[152,132],[142,152],[384,6542],[289,139],[183,99],[234,413],[384,6681],[341,101],],
'202':[[384,9195],[200,195],[246,320],[246,329],[200,188],[313,298],[121,538],],
'206':[[16,107],[74,107],],
'220':[[274,514],[160,448],],
'230':[[110,31],],
'277':[[315,77],[289,77],[121,121],],
'279':[[243,26],[290,668],[290,134],[41,369],[171,277],[355,507],[290,18],[243,283],[121,137],[344,3],[7,86],],
'299':[[246,1538],[246,1613],],
'314':[[384,6851],],
'331':[[29,137],[9,137],],
'355':[[274,552],],
'383':[[89,392],],
'398':[[95,383],],
'403':[[10,250],[234,251],[213,255],[189,301],],
'431':[[313,146],[363,118],[148,59],],
'436':[[121,453],],
'445':[[231,41],],
'469':[[304,375],],
'478':[[289,175],],
'479':[[289,48],[315,48],],
'491':[[12,406],[48,1289],[48,377],[12,397],[121,99],[224,123],[48,386],[331,458],[12,243],],
'517':[[12,292],],
'520':[[48,3689],],
'547':[[181,47],[181,29],],
'593':[[42,1273],],
'654':[[315,175],],
'711':[[235,411],],
'791':[[37,44],],
'894':[[200,74],],
'928':[[335,3018],[335,2166],],
'935':[[224,71],[224,95],],
'949':[[42,171],],
'1101':[[277,729],],
'1117':[[384,7500],[358,182],],
'1304':[[344,241],[355,322],],
'1305':[[344,192],],
'1320':[[68,54],[41,301],],
'1340':[[42,1007],],
'1371':[[42,348],],
'1380':[[42,955],],
'1486':[[42,1283],],
'1504':[[384,2155],],
'1604':[[48,613],],
'1629':[[48,745],[306,165],],
'1667':[[48,4019],],
'1930':[[199,93],],
'2010':[[121,514],],
'2126':[[277,428],],
'2222':[[384,4571],[384,4502],],
'2265':[[57,259],],
'2292':[[62,61],],
'2370':[[363,469],],
'2415':[[95,370],],
'2518':[[89,186],],
'2577':[[363,733],],
'2578':[[95,359],],
'2773':[[121,481],],
'2985':[[335,2388],],
'3183':[[170,141],],
'3265':[[358,112],],
'3701':[[200,65],],
'3728':[[209,211],],
'4118':[[301,32],],
'4124':[[339,105],],
'4161':[[306,577],],
'4166':[[306,772],],
'4203':[[313,241],],
'4204':[[313,256],],
'5028':[[384,5236],],
},{'2':[[277,610],],
'12':[[0,133],[0,161],[0,164],[121,470],[160,141],[162,374],[65,150],[9,48],[9,57],[180,195],[181,415],[384,4597],[186,384],[306,234],[197,478],[384,3499],[54,1346],[200,228],[239,26],[384,2027],[384,1984],[384,1953],[384,684],[48,3647],[381,49],[246,1886],[25,25],[363,706],[250,50],[48,814],[363,350],[29,48],[29,57],[363,266],[358,268],[251,219],[89,441],[355,1214],[355,828],[315,52],[42,568],[283,217],[289,52],[339,127],[42,687],[337,83],[335,3765],[335,3694],[335,2376],[301,47],[317,121],[317,40],[39,714],[42,241],],
'27':[[283,198],[188,187],[42,1181],[121,139],],
'28':[[301,64],[145,57],[197,247],[212,59],[70,410],],
'30':[[42,172],[306,178],[315,176],[317,62],[331,504],[301,33],[339,106],[293,108],[42,956],[289,176],[344,193],[349,67],[355,323],[355,478],[277,741],[277,730],[42,1284],[358,183],[277,429],[274,515],[48,378],[48,614],[48,758],[261,103],[358,204],[363,470],[48,1290],[25,53],[23,108],[21,59],[48,4013],[306,578],[246,330],[246,321],[16,108],[234,414],[224,124],[224,96],[224,72],[215,100],[306,773],[209,212],[200,249],[12,244],[200,75],[200,66],[384,2156],[384,4229],[306,1171],[384,4503],[384,4572],[183,100],[181,488],[57,260],[58,28],[384,5237],[384,5801],[62,62],[170,142],[384,6543],[165,67],[384,6852],[161,248],[160,449],[3,35],[313,242],[48,4020],[142,153],[390,60],[121,454],[314,77],[121,122],[121,100],[74,108],[112,130],[110,32],[95,384],[95,371],[95,360],[0,59],[89,393],],
'34':[[164,524],[82,400],[82,369],],
'39':[[283,129],[259,40],[284,158],[247,192],[285,121],[86,190],[287,75],[298,52],[307,77],[307,116],[394,131],[269,157],[308,55],[229,151],[270,194],[1,44],[53,98],[332,131],[210,133],[209,188],[335,2390],[200,212],[200,190],[340,55],[235,449],[341,77],[193,115],[193,99],[341,116],[352,99],[96,77],[352,115],[187,142],[36,129],[100,128],[274,624],[384,4694],[355,369],[181,647],[34,122],[59,38],[33,42],[61,44],[180,145],[173,218],[172,159],[67,37],[57,197],[163,66],[161,299],[69,75],[363,634],[70,190],[70,231],[121,540],[368,109],[370,34],[148,140],[127,52],[146,124],[20,148],[137,173],[135,133],],
'41':[[37,46],],
'48':[[111,59],[93,93],],
'57':[[270,161],[134,74],[270,89],[135,100],[128,200],[269,124],[269,85],[137,140],[269,73],[141,36],[141,55],[141,60],[269,62],[283,96],[395,102],[395,64],[284,63],[143,31],[284,74],[253,100],[284,86],[146,91],[284,125],[250,112],[148,107],[126,20],[250,103],[48,1365],[249,136],[86,94],[368,49],[247,159],[367,115],[247,87],[365,178],[10,354],[365,152],[48,3390],[285,88],[160,646],[10,303],[86,157],[70,631],[363,588],[363,516],[363,503],[363,453],[395,36],[363,368],[42,702],[164,35],[363,308],[363,260],[72,61],[363,201],[296,42],[89,189],[168,33],[84,65],[363,192],[363,169],[300,35],[42,598],[118,156],[302,71],[173,102],[173,111],[173,122],[173,185],[246,794],[42,560],[363,91],[48,4741],[178,132],[178,177],[42,407],[42,342],[178,307],[89,200],[89,258],[235,471],[394,98],[180,112],[10,253],[75,49],[29,155],[274,365],[355,1279],[34,89],[235,158],[235,135],[75,112],[36,96],[235,94],[355,419],[181,579],[10,199],[181,959],[181,969],[181,990],[10,176],[82,417],[100,95],[313,91],[57,164],[234,304],[187,109],[234,254],[234,200],[95,420],[234,177],[345,61],[57,101],[189,168],[189,227],[189,250],[189,304],[189,354],[189,563],[170,79],[42,336],[42,188],[95,413],[95,399],[80,38],[89,432],[9,155],[229,118],[224,210],[95,331],[20,115],[224,78],[218,199],[200,51],[84,53],[335,3517],[335,3425],[384,5377],[335,2709],[95,304],[54,755],[54,737],[218,154],[218,145],[218,122],[209,155],[317,93],[335,1977],[210,100],[214,146],[320,43],[213,423],[213,185],[213,208],[213,258],[322,202],[213,312],[332,98],],
'63':[[218,244],],
'68':[[384,9129],[384,5219],[381,335],[384,4426],[186,455],[218,97],[179,657],[224,142],[204,72],[363,135],[313,158],],
'85':[[277,820],[39,876],[246,1405],[164,578],[381,491],[246,894],[306,70],[84,166],],
'115':[[125,191],],
'152':[[313,458],],
'164':[[193,122],[341,128],[57,86],[57,73],[191,243],[52,213],[36,185],[97,25],[224,116],[37,66],[352,122],[384,4713],[51,27],[181,517],[111,52],[181,343],[307,128],[235,369],[235,391],[235,408],[179,947],[198,61],[179,63],[178,320],[244,246],[178,291],[359,80],[317,43],[306,207],[306,196],[361,39],[218,205],[37,85],[246,632],[118,38],[246,817],[6,77],[246,975],[305,45],[173,80],[172,135],[170,269],[207,105],[118,215],[384,6729],[384,6746],[289,62],[363,413],[121,235],[25,36],[365,127],[12,105],[159,89],[18,36],[86,71],[396,157],[315,62],[249,205],[373,50],[381,125],[381,320],[384,1994],[48,787],[335,978],[143,64],[253,110],[143,50],[334,81],[283,233],[20,77],[260,55],[48,776],[263,66],[384,1148],[266,123],[141,85],[306,438],[277,656],[141,71],[128,44],[137,67],[135,199],[331,275],[384,1164],[384,1904],[134,42],[274,337],[131,81],[44,65],[277,472],[337,103],],
'196':[[274,650],],
'202':[[142,88],],
'248':[[394,146],[274,508],[84,405],[396,148],[89,298],[274,669],[276,64],[276,73],[44,116],[89,333],[390,113],[95,32],[384,7713],[6,70],[266,340],[266,261],[265,29],[283,175],[384,6768],[42,1099],[95,92],[95,234],[95,241],[251,288],[384,6082],[249,47],[246,1839],[384,5777],[384,5603],[95,318],[42,1054],[97,36],[384,5164],[103,72],[106,53],[295,30],[113,42],[121,360],[384,4067],[384,3757],[384,3608],[42,637],[384,3523],[42,577],[302,62],[70,624],[302,109],[134,65],[384,1304],[304,161],[246,1108],[246,568],[384,1247],[49,376],[246,309],[48,98],[142,144],[384,62],[246,234],[246,77],[381,620],[243,124],[49,386],[381,598],[150,72],[376,33],[234,348],[313,124],[374,30],[152,65],[152,147],[231,119],[160,95],[314,63],[229,183],[42,149],[224,169],[160,524],[315,201],[160,613],[220,46],[39,425],[54,114],[160,639],[213,465],[162,116],[162,224],[320,134],[25,60],[322,92],[162,270],[162,280],[329,30],[164,152],[213,376],[363,296],[39,370],[164,497],[164,567],[54,667],[334,84],[335,523],[335,939],[210,150],[335,1002],[335,1551],[54,674],[65,127],[206,62],[176,141],[335,3373],[200,161],[362,61],[361,78],[178,222],[30,290],[39,118],[54,873],[339,42],[181,236],[358,152],[356,51],[197,488],[355,1411],[355,1387],[355,1337],[181,310],[181,465],[355,731],[355,620],[345,40],[188,148],[188,103],[57,255],[187,186],[181,558],[181,1026],[186,310],[249,99],],
'290':[[342,288],],
'305':[[381,416],[246,1265],],
'351':[[232,128],[23,39],[87,80],[274,560],[191,286],[274,655],[191,291],[355,1396],[154,34],[89,467],[387,63],[382,83],[42,1199],[39,152],[181,126],[274,529],[256,27],[54,833],[253,157],[9,94],[175,32],[170,240],[39,295],[246,1748],[246,262],[29,94],[246,1734],[128,221],[293,39],[71,83],[322,223],[213,406],[321,364],[320,108],[42,446],[161,316],[70,539],[161,226],[39,381],[121,574],[311,63],],
'370':[[286,31],[39,258],[42,1217],[352,124],[193,124],[274,612],[234,391],[190,60],[84,460],[101,34],],
'470':[[342,275],],
'499':[[200,197],[395,137],],
'548':[[213,283],],
'607':[[331,460],[246,1490],[42,1009],],
'639':[[246,1540],[313,228],[246,370],],
'817':[[384,8215],[384,176],[339,207],],
'861':[[274,439],[246,1633],],
'876':[[148,63],],
'878':[[27,53],],
'926':[[313,149],],
'1003':[[199,95],[42,1275],[246,1615],[213,368],[53,125],[127,66],[127,58],[363,735],[381,113],[320,63],[365,145],[384,6712],[298,66],[298,58],[153,1042],],
'1132':[[70,310],[181,319],[302,121],[363,626],[134,119],[331,196],[355,1430],],
'1155':[[231,79],[381,589],[186,329],[266,363],[381,303],[68,89],[381,240],[381,157],[188,85],[384,6175],[384,6261],[384,7765],[42,138],[335,3434],[42,544],[197,492],[70,528],],
'1158':[[355,1368],],
'1169':[[384,5051],[384,6740],[101,72],],
'1244':[[160,388],],
'1342':[[274,492],],
'1362':[[251,130],],
'1442':[[80,129],[246,1354],[384,5056],[246,1350],[176,196],[306,1409],],
'1498':[[303,120],],
'2378':[[253,137],],
'2573':[[344,243],],
'2576':[[235,309],],
},{'31':[[21,60],[161,249],[261,104],[358,205],[358,269],[390,61],[0,60],],
},{'2':[[52,17],[0,75],[52,346],[1,25],[21,75],[214,309],[161,264],[261,119],[266,6],[7,33],[84,578],[390,76],[277,697],[84,21],[70,113],[70,141],[171,224],[358,220],],
'3':[[76,58],],
'14':[[203,66],],
'16':[[95,87],[363,535],],
'17':[[384,4034],[313,318],],
'19':[[384,1600],],
'25':[[12,624],[161,136],[384,3449],[277,985],],
'29':[[384,1152],],
'32':[[261,105],[21,61],[161,250],[390,62],[358,206],[0,61],],
'37':[[381,344],],
'38':[[125,74],],
'40':[[384,3055],[161,361],[161,206],[161,390],],
'42':[[248,30],],
'43':[[153,518],[246,522],],
'48':[[247,243],[171,319],[176,19],[100,175],[176,282],[7,128],[321,435],[321,29],[102,5],],
'49':[[153,101],[153,50],[89,338],],
'55':[[179,57],],
'61':[[54,147],[355,390],[246,349],],
'62':[[384,4242],[48,3667],[232,113],],
'63':[[54,725],[95,292],],
'65':[[384,9400],[200,163],[48,100],[329,32],[390,115],[374,32],[152,189],[384,9368],[384,3759],[57,262],[181,467],[334,86],[384,4069],[384,5605],],
'67':[[214,141],],
'73':[[95,256],[54,689],],
'79':[[12,174],[218,284],[185,78],[171,1275],[48,36],[54,1536],[188,164],[48,4984],[54,27],[306,2],[48,10],[12,583],],
'82':[[335,1394],[179,26],[384,9271],[171,1239],[179,1640],[266,376],[153,1427],[185,42],[153,14],[70,5],[355,311],[266,168],],
'83':[[384,4782],],
'88':[[0,170],],
'91':[[210,157],],
'100':[[384,5659],],
'105':[[121,588],],
'117':[[283,192],],
'128':[[125,254],],
'129':[[279,18],[54,1274],],
'131':[[384,6994],],
'133':[[54,313],[179,911],[384,7378],[335,161],[48,1716],],
'137':[[179,79],],
'140':[[153,489],[324,32],[163,50],[87,52],[93,48],[150,84],[253,194],[103,84],[350,138],[111,80],],
'143':[[207,53],[260,61],],
'148':[[384,7160],[371,67],[1,61],[161,54],[381,330],[252,61],[381,563],[384,6282],[65,152],[381,129],[280,74],[59,61],[334,54],[384,7938],],
'149':[[186,273],],
'150':[[186,438],],
'152':[[186,465],],
'157':[[1,108],[1,82],[59,82],[74,102],[82,485],[16,102],],
'165':[[141,25],[30,395],],
'175':[[253,120],],
'176':[[332,182],[164,286],],
'177':[[13,35],[253,112],[236,35],[2,24],[115,35],[158,50],],
'184':[[181,689],],
'195':[[214,97],[214,91],[49,469],[49,53],[217,394],[355,993],[353,136],],
'196':[[251,282],],
'199':[[106,57],[49,235],[259,48],[33,50],[277,238],[164,188],[163,74],[96,128],[359,107],],
'204':[[318,44],[222,50],[392,42],[79,45],[279,44],[4,48],],
'206':[[49,277],[49,189],[49,161],],
'208':[[274,334],],
'221':[[359,121],],
'225':[[352,109],[189,405],[193,109],[36,172],[198,88],[181,909],],
'227':[[246,547],],
'231':[[384,7610],],
'232':[[181,921],],
'241':[[42,836],],
'244':[[384,6670],[355,1176],],
'246':[[274,801],],
'247':[[164,381],],
'250':[[335,1494],[174,70],[234,358],[95,351],],
'256':[[36,155],[187,198],],
'269':[[308,94],[52,136],],
'272':[[277,646],],
'277':[[84,219],[39,365],[384,5554],[277,19],[384,2119],[384,9380],],
'278':[[384,2406],[65,147],],
'279':[[153,130],],
'280':[[7,79],[381,642],[243,5],[381,27],[171,270],[344,350],[344,13],],
'284':[[121,392],[188,237],[344,285],],
'285':[[189,392],[153,989],[153,1193],[189,530],[213,347],[335,2682],[335,1939],],
'290':[[111,86],],
'295':[[153,542],],
'299':[[188,216],[153,600],[181,545],],
'302':[[384,5838],],
'321':[[277,892],],
'350':[[235,58],],
'359':[[384,8217],[384,8272],],
'369':[[335,1249],],
'370':[[321,73],[274,302],],
'373':[[274,37],],
'422':[[331,462],[306,1411],[218,295],[242,52],],
'424':[[189,181],[334,41],[189,317],[69,40],[10,266],[304,163],[170,101],[10,130],[80,65],[53,47],[57,65],[175,24],[154,26],[53,41],[106,30],[50,57],[173,72],[53,112],[209,60],[50,51],[313,68],[280,43],[213,139],[170,90],[287,56],[150,40],[137,59],[252,46],[372,39],[131,73],[234,267],[260,71],[234,131],[86,63],[103,40],],
'437':[[218,124],[363,171],[235,137],[189,229],[178,134],[234,179],[10,178],[213,187],],
'445':[[266,188],],
'447':[[384,4350],[220,35],],
'448':[[249,310],[217,346],[251,69],],
'462':[[176,207],[160,155],],
'469':[[321,116],],
'470':[[65,129],],
'473':[[381,591],[381,622],],
'479':[[11,46],],
'488':[[174,279],[171,1324],[171,1300],[12,2],[12,43],[277,2],[171,103],[171,96],[227,51],[227,210],[227,237],[227,232],],
'490':[[48,3051],],
'491':[[39,290],],
'498':[[381,396],[12,29],],
'500':[[12,540],[39,443],],
'501':[[39,467],],
'502':[[121,135],[335,1444],],
'512':[[384,5212],],
'523':[[153,499],],
'524':[[12,107],[159,157],[161,228],[161,301],[121,262],],
'528':[[321,230],],
'538':[[384,7906],[217,165],],
'550':[[39,46],],
'551':[[95,253],[54,686],],
'560':[[355,1169],],
'577':[[277,176],],
'582':[[114,50],[169,51],],
'587':[[257,116],],
'593':[[42,1064],[267,28],],
'595':[[384,3832],],
'604':[[384,5166],[384,6770],],
'607':[[384,925],],
'609':[[125,264],[123,38],[203,32],],
'639':[[395,51],],
'645':[[358,119],],
'648':[[321,196],],
'649':[[384,7873],],
'681':[[300,24],[335,1359],],
'694':[[161,168],[161,146],],
'696':[[274,229],],
'700':[[114,38],],
'706':[[335,375],],
'709':[[164,410],],
'730':[[18,68],],
'776':[[209,51],[394,56],],
'780':[[335,539],],
'792':[[249,62],],
'857':[[209,221],[181,697],],
'876':[[160,641],],
'900':[[232,130],],
'926':[[179,1212],[184,36],[179,112],[277,374],[290,166],],
'935':[[335,2358],[384,7551],[335,2331],],
'940':[[344,225],],
'948':[[341,203],[307,203],],
'949':[[95,119],],
'963':[[95,34],],
'1007':[[359,71],[160,578],[368,65],],
'1010':[[266,99],],
'1023':[[321,241],],
'1030':[[321,268],],
'1033':[[200,220],[296,136],[80,102],[54,1147],[384,4512],],
'1049':[[333,24],],
'1052':[[228,23],],
'1101':[[384,7681],[384,8075],[384,8377],[384,7666],],
'1108':[[384,6049],],
'1109':[[184,21],[384,6755],],
'1117':[[384,4800],],
'1123':[[384,3255],[384,6128],[355,258],[42,498],[246,280],[355,80],],
'1124':[[174,50],],
'1144':[[39,271],],
'1153':[[384,4899],],
'1180':[[384,2376],],
'1187':[[227,169],],
'1193':[[44,118],[276,75],],
'1208':[[384,4341],[39,860],[321,48],[384,4641],],
'1210':[[39,691],],
'1217':[[179,43],[188,45],],
'1234':[[249,39],[57,223],],
'1237':[[253,215],],
'1306':[[41,150],],
'1310':[[344,270],],
'1326':[[384,7972],],
'1328':[[313,406],],
'1332':[[384,5843],],
'1353':[[99,88],],
'1355':[[355,1238],],
'1405':[[42,573],],
'1406':[[335,1556],],
'1424':[[135,201],[384,4817],],
'1426':[[242,134],],
'1443':[[42,856],],
'1447':[[176,95],],
'1462':[[384,6714],[384,9434],[384,2650],[384,5735],],
'1466':[[206,68],],
'1469':[[384,6839],[363,324],[313,210],[363,302],],
'1471':[[42,1119],],
'1473':[[42,1139],],
'1476':[[355,1184],],
'1477':[[162,302],],
'1532':[[243,119],],
'1593':[[384,1138],],
'1667':[[384,4045],],
'1672':[[353,117],],
'1693':[[54,773],],
'1811':[[384,7036],],
'1840':[[384,4615],[384,2532],[384,2549],[384,3310],[384,3303],[384,2557],[161,111],[384,8104],[384,3289],[96,41],[384,8522],[384,8094],[384,7930],[384,3296],[161,48],[384,6951],[384,8530],[384,530],[384,537],[384,3318],[384,689],[384,698],[384,705],[384,712],[384,2538],[384,8539],[384,2775],[384,4627],[384,2770],[384,6384],[384,2762],],
'1930':[[363,395],],
'1955':[[266,202],],
'1963':[[204,61],[95,100],[384,7104],[116,112],[116,96],[231,94],],
'2011':[[49,304],],
'2013':[[274,743],],
'2023':[[359,50],],
'2078':[[276,66],],
'2102':[[62,112],],
'2164':[[54,813],],
'2179':[[153,811],],
'2258':[[342,271],[342,284],],
'2332':[[171,1248],[197,20],[197,630],[153,1009],[153,5],[185,51],[355,1484],[70,27],[70,798],],
'2334':[[70,132],],
'2371':[[363,463],],
'2444':[[86,210],],
'2470':[[384,4162],[384,4175],],
'2472':[[84,299],],
'2503':[[288,43],],
'2544':[[355,1403],],
'2572':[[316,117],],
'2608':[[96,160],],
'2671':[[359,144],],
'2682':[[103,58],[150,58],],
'2720':[[335,2080],],
'2722':[[113,32],],
'2765':[[335,1291],],
'2868':[[132,21],],
'2912':[[188,122],],
'2915':[[212,64],[145,62],[358,287],],
'2947':[[152,221],],
'2977':[[315,160],[289,160],],
'2980':[[353,88],],
'3001':[[153,1143],[153,1365],],
'3072':[[160,380],],
'3101':[[161,72],],
'3104':[[161,318],[384,8842],],
'3117':[[161,343],],
'3124':[[339,187],],
'3177':[[165,69],],
'3198':[[384,1071],],
'3213':[[172,54],],
'3217':[[384,3433],],
'3224':[[174,74],],
'3253':[[384,5356],],
'3256':[[176,224],],
'3263':[[181,118],],
'3616':[[186,292],],
'3637':[[188,95],],
'3742':[[214,223],],
'3745':[[303,198],[214,261],],
'3761':[[217,306],],
'3784':[[249,259],],
'3799':[[231,121],],
'3833':[[384,258],],
'3841':[[384,9375],[384,9396],[384,9360],],
'3886':[[246,641],],
'3887':[[384,6924],],
'3948':[[246,1703],],
'3956':[[246,1969],[246,1852],],
'3971':[[249,28],],
'4002':[[252,35],],
'4032':[[263,90],],
'4122':[[303,151],],
'4227':[[321,123],],
'4388':[[335,3689],],
'4456':[[353,108],],
'4478':[[381,175],],
'4652':[[384,330],[384,1045],],
'4686':[[384,600],],
'4767':[[384,1447],],
'4779':[[384,1575],],
'4828':[[384,2104],],
'4878':[[384,3600],],
'4889':[[384,3013],[384,3223],],
'4893':[[384,3030],],
'4966':[[384,4140],],
'5103':[[384,7125],],
'5142':[[384,8259],],
'5251':[[396,123],],
},{'2':[[70,60],],
'3':[[296,91],[277,47],[101,20],[95,301],[384,1890],[384,7743],[160,237],[39,252],[152,113],[48,360],[54,734],[161,401],[164,387],[227,202],[214,204],[350,171],],
'12':[[244,229],[118,198],],
'15':[[57,123],[173,144],[243,216],[384,7362],[384,3382],[384,1268],[77,98],[247,118],[251,151],[131,113],[152,90],[86,116],[137,99],[266,207],[270,120],[191,98],],
'16':[[39,98],[48,4612],[246,1169],],
'18':[[84,345],],
'26':[[246,1181],[48,3501],[381,488],[84,546],[384,972],[384,9504],[381,523],[355,891],[246,504],[52,55],[121,323],],
'31':[[246,1887],],
'33':[[0,62],[390,63],[21,62],[261,106],[358,207],[161,251],[384,4900],],
'39':[[60,61],[384,9794],[186,201],[42,1067],],
'49':[[181,567],],
'54':[[313,270],],
'56':[[355,394],],
'57':[[164,523],[82,368],[82,399],],
'61':[[206,74],],
'62':[[1,101],],
'63':[[251,154],[12,347],[48,875],],
'67':[[186,302],[54,1292],],
'77':[[355,944],],
'83':[[268,45],],
'86':[[176,265],],
'115':[[35,75],[34,162],[383,52],[385,97],[382,114],[48,5011],[49,543],[50,139],[51,67],[33,80],[52,381],[53,172],[32,52],[47,61],[54,1561],[55,60],[56,88],[31,76],[381,665],[30,531],[57,337],[58,87],[59,116],[386,64],[60,131],[61,115],[62,163],[63,133],[64,57],[65,207],[66,57],[67,86],[68,155],[69,120],[29,223],[387,130],[70,820],[71,114],[72,108],[73,111],[74,163],[75,164],[76,127],[388,113],[77,173],[78,54],[79,82],[380,67],[80,174],[81,86],[46,112],[45,62],[82,589],[83,162],[28,113],[379,249],[27,92],[84,601],[378,63],[85,83],[26,75],[377,77],[86,287],[87,118],[88,83],[376,65],[89,509],[90,87],[91,70],[92,207],[93,164],[94,78],[25,119],[95,546],[96,227],[97,67],[98,71],[375,55],[374,64],[99,326],[373,137],[100,232],[24,56],[372,75],[101,105],[102,239],[371,150],[103,151],[104,52],[105,95],[106,84],[107,51],[108,50],[109,58],[110,70],[111,112],[112,173],[113,97],[114,95],[115,62],[116,154],[117,74],[23,164],[118,247],[119,51],[120,54],[389,78],[121,625],[122,169],[123,65],[124,87],[370,89],[125,301],[126,61],[127,94],[128,249],[129,51],[130,52],[22,80],[131,196],[132,61],[133,155],[134,188],[369,512],[135,250],[136,51],[21,224],[368,138],[137,300],[138,67],[139,86],[140,64],[141,113],[142,207],[143,92],[144,70],[145,106],[367,161],[146,198],[147,58],[366,64],[148,192],[149,61],[365,256],[150,151],[151,78],[20,209],[364,77],[390,205],[363,784],[152,251],[362,97],[361,134],[153,1464],[154,65],[155,75],[156,160],[157,103],[158,77],[44,174],[360,81],[359,175],[18,104],[358,421],[17,61],[160,728],[16,163],[15,71],[161,624],[162,426],[163,104],[357,76],[14,77],[43,51],[164,691],[165,109],[166,53],[167,74],[168,64],[169,96],[170,303],[171,1360],[172,191],[13,62],[356,85],[173,359],[174,308],[175,61],[384,9973],[176,325],[177,84],[355,1526],[178,346],[42,1354],[12,674],[179,1663],[36,220],[180,254],[354,119],[37,116],[353,213],[352,185],[181,1065],[182,75],[183,141],[184,65],[185,121],[11,76],[38,223],[186,551],[351,88],[187,228],[188,384],[350,248],[10,382],[189,662],[190,105],[391,96],[191,327],[192,68],[193,185],[194,140],[195,120],[196,119],[349,111],[197,660],[348,54],[347,90],[198,118],[346,57],[199,126],[200,338],[201,49],[202,49],[203,109],[204,104],[205,68],[39,1016],[206,127],[207,141],[208,134],[345,105],[209,298],[344,389],[343,132],[210,209],[211,195],[212,104],[342,355],[213,509],[392,75],[341,306],[214,411],[215,141],[216,68],[217,534],[218,401],[219,80],[220,153],[221,58],[340,192],[222,83],[223,83],[224,258],[225,71],[226,112],[9,223],[227,356],[228,72],[339,336],[338,119],[229,222],[230,52],[231,147],[232,161],[233,69],[337,138],[336,203],[234,448],[235,524],[236,62],[237,68],[238,56],[239,54],[240,75],[241,102],[242,237],[335,3821],[393,55],[243,306],[394,230],[244,278],[245,98],[334,117],[333,52],[8,56],[7,209],[6,121],[332,216],[395,171],[246,2001],[5,107],[331,564],[247,291],[248,97],[330,62],[249,354],[250,158],[4,81],[41,416],[251,374],[252,121],[253,254],[254,267],[255,53],[256,61],[257,223],[258,106],[259,78],[260,128],[3,64],[261,252],[262,75],[263,127],[264,57],[265,74],[329,95],[2,58],[328,60],[266,421],[267,55],[19,155],[268,83],[327,52],[269,251],[1,137],[326,78],[270,278],[271,68],[272,78],[273,77],[274,863],[275,60],[276,107],[40,65],[277,1035],[278,95],[279,77],[280,150],[281,44],[282,59],[325,55],[324,63],[283,278],[323,52],[284,254],[322,251],[285,180],[321,462],[286,70],[287,130],[320,198],[288,77],[289,219],[319,92],[290,703],[291,61],[292,84],[318,79],[317,156],[293,164],[294,73],[295,68],[316,148],[0,217],[315,232],[296,193],[297,61],[298,94],[299,68],[300,78],[301,109],[314,135],[302,190],[303,225],[304,427],[305,112],[313,512],[306,1648],[307,306],[308,225],[309,58],[310,50],[311,132],[312,90],[159,192],[396,213],],
'140':[[152,103],],
'147':[[181,902],],
'152':[[246,384],],
'158':[[384,3618],],
'159':[[339,124],],
'163':[[9,45],[29,45],],
'175':[[197,611],[222,27],[70,769],],
'203':[[285,79],[284,116],[135,91],[283,87],[270,152],[269,115],[137,131],[146,82],[148,98],[150,68],[249,56],[125,21],[363,387],[103,68],[332,89],[394,89],[57,155],[10,294],[20,106],[6,58],[41,338],[234,295],[173,176],[34,80],[100,86],[229,109],[89,249],[178,168],[36,87],[213,303],[210,91],[180,103],[86,148],[181,941],[209,146],[187,100],[189,345],[247,150],],
'215':[[199,86],],
'216':[[198,58],],
'217':[[37,82],],
'220':[[331,265],],
'224':[[179,142],[290,196],],
'225':[[84,513],],
'244':[[329,41],],
'250':[[283,221],],
'277':[[355,1436],[344,106],],
'278':[[329,54],],
'290':[[57,287],],
'360':[[286,21],[9,141],[198,72],[29,141],],
'420':[[322,95],[315,204],[48,3118],[39,373],[302,112],[48,4682],[345,43],[39,604],],
'422':[[80,107],[296,141],[296,28],],
'429':[[266,105],],
'449':[[246,1724],[384,8926],[164,168],[99,81],[42,1213],],
'457':[[234,272],[10,271],[189,322],],
'470':[[381,61],],
'482':[[210,46],[214,294],],
'491':[[48,3504],],
'502':[[306,442],],
'506':[[153,1198],],
'548':[[384,3647],],
'639':[[30,210],],
'817':[[363,753],],
'837':[[23,94],[293,43],[23,43],[293,94],[384,8229],],
'945':[[384,5279],],
'1117':[[335,113],[384,3604],],
'1119':[[266,295],],
'1123':[[243,187],],
'1192':[[160,170],],
'1226':[[42,1191],],
'1229':[[181,543],],
'1241':[[39,879],],
'1334':[[85,44],],
'1431':[[42,786],],
'1552':[[246,372],],
'1591':[[179,1251],],
'1837':[[160,629],],
'2079':[[342,219],],
'2179':[[153,1408],],
'2196':[[152,152],],
'2438':[[229,178],],
'2639':[[288,34],],
'2640':[[99,205],],
'2660':[[101,28],],
'2989':[[394,197],],
'3063':[[160,73],],
'3087':[[160,643],],
'4248':[[331,177],],
'4275':[[334,71],],
'4405':[[384,8301],],
'4492':[[355,1225],],
'4629':[[384,9908],],
},{'2':[[68,131],[7,69],[381,4],[171,260],[68,27],[243,14],[243,273],],
'9':[[49,135],],
'23':[[381,446],],
'24':[[161,286],],
'34':[[261,107],[358,208],[21,63],[0,63],[161,252],[390,64],],
'275':[[381,56],],
'540':[[384,7786],[384,6693],[381,66],[384,6284],[381,261],[384,6197],[384,2813],[384,2706],[384,1120],],
'674':[[384,2514],],
'924':[[384,5095],],
'2010':[[384,6863],],
'2314':[[384,4358],[384,8844],[381,565],],
'2325':[[381,420],[381,307],[381,467],[381,593],[381,290],[384,2057],[381,332],],
},{'1':[[321,382],],
'3':[[314,106],[83,102],[125,139],[30,153],[246,1088],[277,990],[290,76],[249,126],[12,629],[243,234],[290,72],[355,792],],
'7':[[145,24],[212,26],],
'12':[[293,35],[164,413],[23,35],[121,338],[246,269],[84,326],[164,420],[384,8050],[164,562],[215,33],[54,210],[183,33],[52,127],[48,637],[306,295],[384,8026],[52,80],],
'13':[[121,352],[161,499],],
'15':[[121,372],[331,68],[137,217],[48,55],[274,682],[173,262],[54,241],[277,202],],
'18':[[355,996],],
'25':[[39,61],],
'26':[[358,210],[164,472],[261,124],[277,264],[277,107],[358,225],[344,104],[21,80],[48,84],[21,65],[246,1183],[390,66],[200,203],[261,109],[390,81],[246,1171],[12,214],[12,89],[39,205],[0,65],[246,1059],[0,80],[161,269],[161,254],[249,268],],
'31':[[344,244],[197,248],[70,411],[344,194],[355,324],],
'33':[[161,302],[161,319],[4,49],[12,108],[161,229],[318,45],[392,43],[222,51],[279,45],[39,366],[161,207],[277,893],[79,46],[161,73],[54,148],],
'38':[[84,199],[246,683],[355,668],],
'39':[[246,49],],
'40':[[161,144],],
'61':[[246,986],],
'63':[[58,45],[321,385],[339,220],[306,940],],
'67':[[246,887],],
'77':[[82,554],[197,437],[48,3606],[322,132],[246,1460],[214,109],[214,118],[214,157],[214,299],[80,121],[246,1394],[70,669],[12,597],[12,577],[125,53],[164,57],[12,196],[296,155],[128,130],[246,342],[246,359],[246,380],[54,96],[363,335],[246,784],[274,109],],
'140':[[164,63],[164,255],[12,258],[121,147],[306,936],[42,897],],
'142':[[94,47],],
'147':[[355,930],[246,99],[306,795],[274,356],[244,174],[246,1165],[339,230],[246,1962],[96,148],[321,290],[335,2421],[118,132],[181,1005],[277,781],],
'152':[[344,323],],
'195':[[189,485],],
'204':[[181,809],],
'273':[[121,404],],
'277':[[395,75],],
'290':[[277,883],[48,3611],],
'301':[[320,113],],
'346':[[121,74],[145,33],[12,234],[212,35],[12,421],],
'367':[[181,948],],
'420':[[306,74],[125,126],[191,198],],
'449':[[164,99],[277,830],[373,99],],
'482':[[339,74],],
'506':[[48,3616],],
'554':[[246,1844],],
'573':[[12,277],],
'593':[[190,68],[249,81],[30,294],],
'596':[[277,661],],
'609':[[48,3686],],
'640':[[12,573],],
'665':[[164,354],],
'742':[[345,65],],
'835':[[303,167],[215,52],[183,52],[161,581],[23,60],[321,181],[52,133],[293,60],[164,396],],
'846':[[246,39],],
'856':[[181,601],],
'1119':[[274,487],],
'1138':[[246,866],],
'1140':[[39,240],],
'1235':[[246,744],],
'1358':[[161,118],],
'1378':[[181,708],],
'1389':[[355,887],],
'1778':[[249,301],],
'1997':[[161,166],[49,110],],
'2100':[[321,57],],
'2111':[[246,1347],],
'2123':[[246,1849],],
'2241':[[331,28],[277,856],],
'2258':[[181,661],],
'3779':[[246,872],],
'3860':[[246,297],],
'3946':[[246,1690],],
'4116':[[308,91],],
},{'12':[[331,307],],
'15':[[243,85],],
'19':[[306,49],[381,343],],
'23':[[121,215],[12,498],[331,142],[12,239],[121,79],],
'26':[[83,27],],
'36':[[39,367],[48,85],[358,211],[358,226],[48,3607],[49,111],[21,81],[21,66],[331,69],[306,75],[390,67],[12,109],[277,662],[0,81],[277,265],[161,208],[161,230],[161,255],[161,270],[161,303],[164,355],[0,66],[261,110],[261,125],[390,82],],
'43':[[277,863],],
'77':[[355,268],[335,3267],[355,835],],
'155':[[335,897],[335,585],[335,648],],
'207':[[12,198],],
'346':[[331,305],],
'543':[[331,329],],
'552':[[277,684],],
'556':[[12,230],],
'575':[[306,174],[48,793],[306,213],[121,70],[48,754],],
'722':[[355,839],],
'861':[[384,1642],],
'931':[[112,95],[331,490],],
'939':[[121,169],[121,229],],
'1104':[[39,29],],
'2455':[[83,86],],
'2544':[[91,42],],
},{'2':[[49,138],],
'10':[[384,9770],],
'12':[[118,101],[384,9016],[142,159],[358,285],[153,1006],[355,1109],[355,667],[353,127],[339,170],[335,3077],[335,2230],[277,414],[269,179],[54,518],[54,479],[266,197],[266,173],[153,1026],[153,1231],[156,126],[246,682],[30,407],[206,82],[160,115],[181,653],[160,366],[181,596],[181,40],[396,75],[164,269],[83,53],],
'27':[[246,1414],[266,276],],
'28':[[180,164],[42,1079],],
'30':[[246,1466],],
'34':[[363,754],],
'37':[[21,67],[358,212],[161,256],[390,68],[261,111],[0,67],],
'38':[[331,184],],
'39':[[96,191],[344,257],[274,243],[128,173],[313,279],[244,133],[125,73],[322,175],],
'43':[[331,93],[76,98],[317,88],[331,310],[308,122],[303,180],[336,118],[164,553],[274,392],[340,89],[274,101],[246,1457],[164,582],[246,1239],[164,47],[246,855],[170,157],[381,370],[214,342],[133,92],[42,1270],[164,241],[96,105],],
'47':[[161,418],],
'52':[[153,842],],
'54':[[280,112],[371,114],],
'63':[[303,71],[54,1483],[214,253],[173,64],[153,1270],],
'67':[[246,556],],
'68':[[39,834],],
'73':[[162,94],],
'137':[[335,583],],
'138':[[16,121],[74,121],],
'143':[[84,388],[373,108],],
'164':[[197,454],[162,243],[277,776],[181,388],],
'165':[[68,119],[162,4],[171,242],[68,13],[52,29],[52,356],[7,51],],
'199':[[335,2965],[328,34],],
'202':[[344,249],[214,258],[162,354],],
'206':[[49,154],],
'215':[[335,646],[54,559],[335,372],],
'225':[[54,817],],
'230':[[5,60],],
'241':[[153,839],],
'248':[[153,1161],[153,956],[153,1383],[335,1460],[96,141],[89,307],[335,2785],[313,284],[84,177],[153,781],[335,3383],[355,1094],[186,271],[54,533],[335,2067],[355,573],[181,350],[153,514],[277,644],[84,315],],
'263':[[381,1],[68,128],[243,270],[243,11],[171,257],[68,24],[7,66],],
'266':[[7,154],[7,106],[171,345],[30,505],[7,39],[176,36],[214,305],[7,185],[102,198],[171,297],[339,21],[171,230],[171,220],[339,304],[176,297],[171,213],[70,137],[171,307],[7,116],[321,420],[102,16],[321,12],[7,29],[321,2],[7,22],[162,389],[30,31],[162,379],[84,5],[84,17],[162,13],[290,676],[30,2],[266,2],[266,16],[266,27],[290,28],[28,80],[21,173],[390,156],[52,2],[266,385],[266,394],[52,13],[52,342],[84,574],[186,5],],
'267':[[102,218],[186,513],[160,697],[381,151],[186,26],[171,338],[7,147],[176,11],[102,38],],
'271':[[251,206],],
'273':[[176,9],[186,24],[171,336],[186,511],[160,695],[7,145],[102,216],[102,36],],
'281':[[181,733],],
'305':[[331,405],[84,306],[164,164],[42,1327],[384,6458],],
'321':[[70,128],[308,88],],
'367':[[218,327],],
'370':[[181,496],],
'598':[[335,2547],],
'607':[[246,536],],
'639':[[336,107],[84,198],],
'648':[[308,76],[341,241],[307,241],],
'649':[[384,3776],[384,3786],],
'676':[[268,49],[384,5283],],
'702':[[16,96],[74,96],],
'728':[[228,39],],
'801':[[384,5287],],
'815':[[21,162],],
'817':[[355,744],],
'840':[[214,320],],
'843':[[390,145],],
'861':[[335,1743],[335,1469],[164,542],[335,1608],[331,255],],
'887':[[48,3476],],
'897':[[336,78],],
'932':[[30,300],],
'958':[[30,342],],
'1005':[[335,895],],
'1006':[[163,68],[33,44],[259,42],],
'1021':[[283,225],],
'1117':[[358,167],[246,1421],],
'1132':[[246,1659],],
'1155':[[266,300],[220,97],[274,376],],
'1169':[[251,173],[384,6325],[266,57],],
'1211':[[70,716],[48,1392],],
'1254':[[313,277],],
'1442':[[135,190],],
'1841':[[224,199],],
'1865':[[246,1054],],
'2164':[[54,792],],
'2384':[[355,1023],],
'2481':[[384,4280],],
'2589':[[249,163],],
'2881':[[302,151],[134,149],],
'3559':[[246,840],],
'3607':[[331,183],],
'3699':[[197,559],],
'4055':[[274,382],],
},{'9':[[91,39],],
'12':[[103,51],[246,1360],[246,441],[246,412],[244,132],[48,2560],[172,142],[82,522],[150,51],],
'15':[[384,7477],],
'16':[[160,267],[174,246],[160,334],[384,7791],[180,218],[384,7463],[18,57],[384,6212],[384,6202],[152,167],[384,5828],[183,95],[188,80],[23,103],[384,9764],[188,98],[190,53],[30,325],[191,95],[384,2135],[381,561],[191,222],[381,423],[381,266],[137,223],[200,294],[371,65],[39,306],[363,482],[361,87],[209,264],[214,34],[214,209],[355,723],[42,869],[214,357],[215,95],[218,366],[224,197],[347,48],[173,268],[340,121],[340,77],[48,2538],[170,230],[234,365],[122,70],[334,52],[321,395],[235,397],[48,3598],[318,27],[48,4737],[121,250],[49,180],[49,264],[50,35],[121,185],[235,484],[160,480],[314,88],[4,31],[53,71],[308,154],[308,110],[160,543],[1,59],[246,1506],[59,59],[305,31],[247,232],[392,25],[293,103],[102,152],[247,254],[249,175],[249,252],[249,291],[252,59],[70,323],[287,33],[73,42],[284,182],[283,207],[161,441],[257,176],[280,72],[79,28],[82,333],[279,27],[125,86],[84,76],[277,784],[222,33],[266,158],[89,324],[274,547],[266,226],[269,202],],
'30':[[353,134],[9,138],[274,534],[274,553],[274,815],[277,624],[9,149],[96,76],[384,7501],[160,316],[70,230],[70,189],[12,293],[289,49],[289,131],[289,140],[12,407],[181,48],[181,646],[29,138],[29,149],[112,110],[193,98],[200,189],[315,49],[315,131],[200,211],[315,140],[235,412],[355,368],[352,98],[121,539],[335,2389],[161,298],],
'37':[[121,80],],
'38':[[341,242],[224,200],[42,1271],[0,68],[48,3477],[274,102],[49,139],[214,343],[228,40],[133,93],[134,150],[214,259],[355,1024],[358,168],[358,213],[371,115],[373,109],[214,321],[313,278],[308,89],[33,45],[384,3777],[246,1055],[308,77],[384,4281],[384,5288],[21,163],[307,242],[303,72],[21,68],[16,122],[180,165],[302,152],[70,129],[74,122],[259,43],[261,112],[274,393],[390,69],[5,61],[390,146],[164,242],[161,257],[336,79],[161,419],[280,113],[164,48],[163,69],[162,355],],
'47':[[384,1425],],
'48':[[379,132],[148,61],[272,40],[177,49],],
'49':[[246,48],],
'57':[[269,209],[213,473],[61,43],[370,33],[163,65],[341,76],[298,51],[189,628],[307,76],[284,189],[317,103],[259,39],[33,41],[308,54],[59,37],[1,43],[67,36],[127,51],[340,54],],
'61':[[384,2946],],
'63':[[70,104],[293,90],[246,251],[70,461],[39,399],[23,90],[331,467],[164,451],[197,87],[197,311],[186,200],],
'65':[[296,115],],
'68':[[36,128],[394,130],[180,144],[187,141],[173,217],[148,139],[57,196],[285,120],[229,150],[284,157],[283,128],[86,189],[20,147],[332,130],[135,132],[247,191],[209,187],[146,123],[270,193],[100,127],[269,156],[210,132],[34,121],[137,172],],
'73':[[190,74],],
'75':[[96,174],],
'85':[[384,5985],[384,4693],],
'147':[[48,365],[189,217],[42,415],[317,59],[6,47],[235,125],[10,156],[10,166],[234,167],[213,175],[16,47],[89,142],[75,58],[218,112],[74,47],[234,157],[313,173],[189,207],[213,165],[178,122],[363,159],[363,150],],
'152':[[160,452],[148,68],[54,1145],[384,5862],[135,186],[385,38],[249,222],[342,300],[98,32],[342,278],[342,291],[231,48],],
'158':[[226,63],[322,151],[321,280],[42,313],[322,164],[322,174],[322,196],[321,79],[220,113],[355,1181],[218,318],[217,494],[217,485],[217,328],[128,149],[128,162],[363,347],[303,196],[116,124],[186,391],[363,703],[181,109],[178,260],[30,442],[128,172],[176,58],[160,415],[128,194],[335,1030],[114,66],[170,255],[73,57],[191,188],[283,214],[73,69],[335,1187],[355,977],[355,599],[82,480],[277,849],[84,293],[277,513],[84,440],[169,67],[335,2306],[274,48],[335,2971],[336,64],[353,115],[336,147],[353,106],[249,210],[46,63],[390,133],[89,313],[207,91],[89,438],[260,93],[1,87],[214,162],],
'164':[[50,84],[235,403],[235,448],[341,133],[96,190],[307,133],[199,59],[352,114],[305,55],[199,39],[193,114],[363,646],[287,74],[246,354],[246,420],[384,2809],[274,242],[363,666],[363,691],[368,108],[181,442],[274,623],[52,223],],
'176':[[379,125],],
'178':[[164,603],],
'196':[[153,998],],
'199':[[162,372],],
'203':[[84,281],[150,124],[34,85],[36,92],[103,124],[283,92],[84,470],[86,153],[150,119],[284,121],[103,119],[103,103],[173,181],[285,84],[246,391],[247,155],[20,111],[384,340],[270,157],[150,103],[187,105],[189,350],[189,600],[148,103],[244,149],[191,266],[10,299],[89,254],[100,91],[306,242],[269,120],[307,62],[180,108],[343,80],[249,257],[146,87],[160,623],[209,151],[308,32],[246,153],[121,238],[57,160],[394,94],[341,62],[48,822],[137,136],[340,32],[178,173],[210,96],[48,2579],[52,96],[213,308],[213,443],[257,165],[135,96],[217,403],[332,94],[234,300],[229,114],],
'224':[[37,53],[162,145],[246,1197],[246,729],],
'231':[[122,121],],
'238':[[384,7030],],
'239':[[170,219],],
'241':[[246,1247],],
'248':[[53,97],],
'250':[[384,3967],[125,218],[125,169],[384,7948],[384,8960],[162,213],[162,200],[214,178],[68,69],[353,150],[384,300],[313,323],[210,179],[313,390],],
'271':[[384,2278],],
'274':[[42,904],],
'277':[[48,2463],],
'321':[[277,401],[307,262],[341,262],],
'322':[[384,5320],],
'337':[[42,1066],],
'341':[[363,599],],
'349':[[384,5818],[234,378],[384,3983],[384,9354],[384,5368],[243,202],[384,8641],[384,6585],[384,5006],[384,9812],[384,4333],[384,5422],],
'351':[[181,211],[344,256],[199,48],[246,1718],[307,115],[331,65],[102,105],[25,86],[125,72],[103,94],[172,158],[118,169],[341,115],[363,655],[244,200],[69,74],[340,148],[150,94],[161,563],[308,181],[321,163],[274,792],],
'440':[[235,497],],
'445':[[42,889],],
'462':[[93,78],],
'470':[[89,226],],
'489':[[331,514],],
'491':[[121,460],],
'538':[[60,71],],
'539':[[42,580],],
'552':[[384,896],],
'555':[[246,1228],[246,1340],[331,71],],
'567':[[186,490],],
'595':[[30,354],],
'596':[[384,4833],[113,23],],
'607':[[48,3660],[244,155],],
'631':[[384,7158],],
'646':[[165,77],],
'647':[[153,316],],
'655':[[253,71],],
'673':[[41,346],],
'681':[[220,53],],
'682':[[138,39],],
'696':[[246,1243],[355,911],],
'719':[[18,44],],
'797':[[21,108],],
'843':[[321,158],[161,558],],
'901':[[60,60],],
'905':[[384,1640],],
'921':[[368,41],],
'970':[[52,65],],
'1031':[[48,2967],[306,674],[48,3426],],
'1033':[[207,85],[355,566],],
'1101':[[246,46],],
'1141':[[384,9793],],
'1158':[[384,1778],],
'1168':[[335,528],],
'1255':[[246,1081],],
'1319':[[42,793],],
'1349':[[266,325],],
'1442':[[206,51],[363,633],],
'1591':[[48,2635],],
'1680':[[384,6485],],
'1682':[[246,983],],
'1865':[[246,942],],
'1913':[[384,1543],],
'2001':[[342,188],],
'2060':[[52,84],],
'2295':[[160,464],],
'2600':[[96,130],],
'2730':[[169,42],],
'2824':[[125,142],],
'3069':[[160,215],],
'3838':[[246,51],],
'3875':[[307,153],[341,153],],
'3878':[[246,574],],
'3942':[[335,2727],],
'4197':[[308,141],[340,108],],
'4533':[[384,118],],
'4538':[[384,5412],[363,746],[384,5996],[384,3656],],
'4622':[[384,1769],],
'4662':[[384,381],],
'5189':[[384,9564],],
},{'12':[[384,4387],[249,102],],
'15':[[384,2404],],
'30':[[358,113],],
'39':[[358,214],[161,258],[21,69],[303,73],[161,420],[0,69],[261,113],[390,70],],
'43':[[161,143],[161,205],],
'68':[[321,92],],
'248':[[384,3054],],
'305':[[161,389],],
'649':[[161,360],],
'723':[[277,236],],
'1504':[[384,7608],],
'2756':[[161,352],],
'4506':[[358,140],],
'4947':[[384,3814],],
},{'16':[[355,98],[384,166],],
'30':[[37,45],[121,143],],
'37':[[358,227],[21,82],[390,83],[261,126],[0,82],[161,271],],
'43':[[156,123],],
'62':[[307,142],[341,142],],
'63':[[384,144],[290,99],],
'67':[[384,783],],
'77':[[384,1227],],
'88':[[359,67],],
'128':[[42,437],],
'255':[[335,3480],],
'283':[[355,209],],
'369':[[317,77],],
'462':[[49,210],],
'940':[[95,67],],
'997':[[224,49],[158,38],],
'1241':[[121,523],],
'1399':[[99,181],],
'1462':[[384,2356],],
'1667':[[384,6663],],
'1711':[[350,157],],
'2066':[[384,1211],],
'2088':[[54,68],],
'3253':[[384,1085],],
'3877':[[384,1368],],
'4667':[[384,2590],],
},{'12':[[0,91],[21,91],[358,236],[261,135],[248,29],[96,71],[390,92],[161,280],],
'15':[[277,194],[42,1256],[30,449],],
'149':[[227,92],],
'164':[[135,184],],
'248':[[84,393],],
'305':[[335,3469],],
'351':[[339,71],],
},{'2':[[23,130],[125,44],[293,130],[249,261],[84,214],[186,275],],
'3':[[12,221],[321,222],[179,72],],
'5':[[0,117],],
'7':[[133,91],],
'8':[[30,363],],
'12':[[381,437],[322,124],[128,122],[296,149],[84,86],[80,115],[321,89],[160,251],[125,194],[49,431],],
'14':[[246,13],],
'15':[[153,1234],[153,517],[162,109],[164,175],[12,387],[274,246],[243,222],[164,273],[160,419],[174,94],[174,116],[317,85],[181,721],[181,796],[252,76],[247,235],[234,346],[111,62],[355,354],[277,862],[355,500],[355,1112],[365,229],[367,108],[39,414],],
'16':[[54,84],[176,201],[313,466],],
'18':[[277,952],[170,156],[355,965],[242,145],[30,262],[277,787],],
'24':[[339,243],[321,303],],
'28':[[287,94],[277,519],[164,427],[355,1210],],
'34':[[42,787],],
'35':[[381,447],],
'37':[[48,3608],],
'38':[[160,367],],
'42':[[390,93],[261,136],[161,281],[21,92],[0,92],[358,237],],
'43':[[321,90],],
'47':[[274,105],[358,110],],
'48':[[105,52],],
'49':[[246,1590],],
'52':[[164,92],[164,60],],
'54':[[48,4468],[180,162],[156,122],],
'56':[[249,105],],
'58':[[0,138],],
'60':[[249,148],[249,166],[339,204],],
'61':[[49,39],],
'62':[[307,213],[341,213],],
'63':[[363,391],[191,225],[181,705],[313,161],[381,76],[381,351],[160,495],[321,299],[218,100],[246,472],[339,130],[161,411],[339,239],[274,271],[363,138],[186,182],[146,151],],
'65':[[266,95],[358,135],],
'67':[[121,446],[355,956],[95,275],[121,431],[83,106],[252,84],[197,422],[344,296],[79,31],[308,144],[121,132],[176,175],[181,928],[392,28],[121,62],[48,3601],[54,104],[224,145],[54,144],[246,336],[321,275],[75,131],[54,708],[279,30],[384,7442],[49,108],[222,36],[355,708],[340,111],[70,654],[39,765],[161,204],[318,30],[59,77],[214,105],[4,34],[65,144],[1,77],[121,422],],
'73':[[176,214],[253,181],[164,260],[96,125],[220,95],[164,281],[320,149],[246,1464],[191,181],[96,177],[335,2458],[53,134],[96,139],[335,2957],],
'79':[[181,348],[186,430],[246,918],[331,476],],
'81':[[30,185],],
'82':[[52,101],[12,206],[39,622],],
'83':[[355,462],[153,492],[235,266],],
'86':[[84,525],],
'88':[[160,549],],
'93':[[39,350],],
'99':[[176,261],],
'119':[[164,444],],
'121':[[164,514],[189,576],[49,230],],
'128':[[1,65],[105,35],[184,32],[170,127],[370,37],[59,65],[132,24],],
'131':[[112,108],],
'136':[[153,1299],],
'140':[[52,259],[197,461],[224,219],[335,3269],[153,536],],
'145':[[200,79],],
'147':[[89,371],[89,386],[30,451],[93,124],[321,210],[321,191],[95,139],[321,140],[214,184],[355,674],[381,338],[86,250],[246,877],[321,67],[84,510],[42,563],[320,27],[321,336],[214,180],[30,470],[317,87],[214,370],[331,92],[105,45],[48,3513],[246,854],[109,23],[42,527],[331,309],[246,973],[118,88],[246,1238],[118,143],[246,1283],[42,291],[231,101],[321,257],[246,1326],[331,420],[215,73],[84,32],[308,121],[308,103],[308,71],[121,348],[307,236],[217,354],[335,184],[83,42],[246,824],[306,1077],[303,179],[121,506],[121,548],[303,160],[48,673],[125,62],[303,76],[381,462],[381,533],[384,6186],[335,2393],[132,31],[82,407],[82,378],[381,309],[296,139],[384,6429],[293,73],[142,156],[197,257],[41,352],[193,134],[355,1001],[246,1410],[355,1049],[153,232],[80,105],[335,3759],[30,59],[336,117],[246,1456],[153,818],[283,244],[76,62],[280,117],[153,1227],[384,6545],[336,128],[246,627],[337,91],[160,112],[160,151],[363,711],[75,79],[244,185],[160,259],[23,73],[39,864],[381,70],[277,806],[381,250],[277,659],[48,300],[355,1150],[189,493],[48,3679],[368,86],[160,674],[189,473],[277,55],[355,493],[70,108],[358,316],[161,415],[161,428],[161,492],[246,1728],[161,538],[274,740],[274,642],[274,485],[274,432],[274,405],[162,81],[274,320],[246,124],[162,123],[274,311],[162,236],[48,106],[274,265],[162,369],[164,29],[164,42],[274,248],[68,94],[355,1421],[164,70],[164,83],[42,1324],[384,7775],[65,120],[340,70],[186,251],[59,43],[164,265],[340,88],[246,375],[164,289],[274,234],[274,218],[371,119],[54,1247],[164,475],[246,352],[42,1299],[274,206],[357,42],[164,552],[164,581],[341,236],[373,69],[54,227],[274,100],[170,190],[274,83],[42,892],[42,663],[184,17],[183,73],[181,980],[266,242],[249,213],[174,80],[53,129],[174,96],[344,119],[174,237],[176,160],[52,280],[266,112],[252,66],[52,250],[52,216],[12,49],[176,235],[252,79],[352,134],[177,53],[355,175],[178,311],[246,141],[179,934],[253,127],[358,162],[381,271],[181,86],[181,151],[181,184],[266,85],[266,42],[181,247],[181,758],[52,42],[261,156],[181,435],[181,506],[181,534],[378,26],[181,561],[253,148],[253,172],[181,613],[394,155],[246,133],[358,291],],
'149':[[164,539],[54,181],[181,598],[261,161],[358,321],[102,146],[36,174],],
'152':[[176,249],[135,103],[355,1100],[394,101],[10,306],[137,143],[36,99],[34,92],[269,127],[173,188],[86,160],[270,164],[178,180],[234,307],[89,261],[100,98],[12,375],[229,121],[247,162],[289,147],[20,118],[214,137],[187,112],[180,115],[189,357],[105,61],[213,315],[181,606],[57,167],[283,99],[332,101],[210,103],[284,128],[209,158],[285,91],[148,110],[146,94],[315,147],],
'153':[[173,325],[246,29],[246,1881],],
'155':[[39,402],],
'157':[[49,268],],
'162':[[218,368],],
'163':[[274,813],],
'165':[[164,252],[164,240],[266,298],],
'167':[[344,45],[335,1994],[246,1645],[277,622],],
'169':[[214,168],[277,581],],
'176':[[181,986],],
'183':[[284,187],[269,207],],
'201':[[48,4372],[54,1418],[121,49],[54,1225],],
'206':[[164,520],],
'216':[[176,226],],
'217':[[176,194],],
'220':[[359,55],[160,227],],
'225':[[394,195],[189,626],],
'227':[[277,337],[331,26],[340,115],[308,148],[52,157],],
'230':[[246,425],[42,1308],[246,402],],
'237':[[209,257],[244,80],[118,71],],
'241':[[363,329],[191,27],[72,25],[244,169],[118,127],[72,48],[337,69],[253,209],],
'245':[[48,3482],],
'247':[[164,53],],
'249':[[396,168],],
'250':[[274,826],[186,341],[121,363],[381,369],[39,230],[246,541],[186,404],[160,487],],
'266':[[355,645],[277,499],[12,185],[48,3562],[246,780],[246,731],],
'269':[[52,130],[164,399],],
'271':[[355,230],],
'272':[[313,371],],
'273':[[181,390],[246,956],[96,104],[246,178],[246,216],[125,68],[246,119],[246,66],[246,1268],[391,65],[161,107],[84,533],[243,240],],
'277':[[277,616],[121,490],[314,96],[253,36],[320,51],[84,385],[186,450],[355,1092],[196,42],],
'281':[[39,844],[274,329],[246,1947],[62,73],[181,952],[335,3353],[12,560],[83,33],[162,51],[76,55],],
'285':[[355,1306],],
'289':[[249,226],],
'299':[[153,93],[48,593],],
'305':[[246,805],[246,630],],
'307':[[246,1788],],
'321':[[164,46],[214,341],],
'350':[[277,329],],
'354':[[118,206],[244,237],],
'356':[[344,293],[161,569],[82,382],[161,532],[339,276],[335,981],[321,169],[160,421],],
'357':[[301,53],[246,994],[359,114],[30,241],[164,184],],
'359':[[70,312],],
'367':[[321,188],[54,110],[161,588],[82,540],[277,859],],
'369':[[335,1465],],
'373':[[49,32],],
'420':[[242,128],[181,962],[200,54],],
'423':[[320,161],],
'429':[[48,618],[42,454],],
'436':[[39,727],],
'439':[[242,172],],
'447':[[52,198],[36,162],[181,751],],
'451':[[42,806],],
'453':[[335,2413],[48,275],[246,1553],[84,356],],
'454':[[312,48],],
'459':[[173,292],[137,247],],
'462':[[181,259],[181,77],[181,224],[160,439],],
'465':[[84,58],],
'475':[[395,55],],
'476':[[345,52],],
'479':[[39,832],],
'481':[[224,103],],
'491':[[48,586],],
'502':[[52,200],],
'505':[[83,90],],
'509':[[321,53],],
'515':[[315,152],[289,152],[121,171],],
'516':[[12,73],],
'517':[[12,358],[121,376],],
'523':[[224,183],],
'525':[[39,127],],
'538':[[181,666],],
'550':[[335,3366],],
'553':[[75,86],],
'561':[[48,596],],
'562':[[274,444],],
'565':[[12,253],],
'577':[[246,653],],
'580':[[48,78],[306,931],],
'587':[[246,1732],],
'595':[[12,354],[99,111],[121,42],],
'602':[[336,103],],
'613':[[274,466],],
'649':[[358,85],],
'659':[[355,972],],
'676':[[191,101],],
'681':[[170,199],[170,208],],
'682':[[42,196],[42,606],[355,424],],
'696':[[75,124],[27,61],[54,1429],],
'705':[[246,1085],],
'792':[[161,142],[277,249],[303,48],],
'800':[[70,116],[340,81],[308,114],[266,293],],
'844':[[317,101],],
'846':[[329,63],],
'869':[[249,297],[355,983],[30,388],[48,2143],[365,217],],
'888':[[30,75],],
'892':[[28,63],],
'899':[[355,715],[84,195],],
'917':[[331,412],],
'921':[[39,506],[217,441],[359,36],[242,45],[355,327],[162,98],[76,76],[308,164],[36,158],[118,161],[321,44],[42,1203],[340,131],[84,317],[76,97],[160,433],[181,658],[234,394],[217,370],[89,364],[173,319],[99,226],],
'923':[[335,951],[266,332],[57,291],],
'926':[[277,879],[95,346],],
'928':[[48,795],[306,215],[181,914],[96,156],],
'935':[[361,94],[224,132],],
'937':[[30,199],],
'942':[[30,226],],
'949':[[121,463],],
'956':[[30,319],],
'957':[[30,340],],
'978':[[186,66],[30,429],[42,1020],[384,3671],[82,550],[307,93],[160,555],[341,93],],
'979':[[246,1656],[160,514],],
'981':[[384,2505],],
'1033':[[363,572],],
'1072':[[247,219],],
'1080':[[131,158],[332,184],],
'1101':[[355,189],[361,37],[355,1348],[243,65],],
'1117':[[39,317],[191,247],[102,175],[181,857],[186,371],[321,161],[48,3671],[381,388],[89,305],[162,203],[246,945],[162,74],[42,851],[274,391],[246,1862],[358,96],[161,561],[181,893],],
'1123':[[42,796],[54,500],[153,365],],
'1125':[[266,273],],
'1128':[[173,275],[137,230],],
'1137':[[84,254],[246,510],],
'1180':[[65,157],],
'1213':[[39,874],],
'1220':[[246,1447],[153,1014],[362,67],],
'1224':[[39,750],],
'1225':[[95,149],[246,1328],],
'1227':[[39,783],],
'1232':[[39,803],],
'1254':[[384,6709],],
'1261':[[52,322],],
'1305':[[42,766],],
'1319':[[355,1160],],
'1329':[[212,37],[145,35],[42,821],],
'1352':[[344,305],],
'1362':[[102,160],],
'1369':[[306,1273],[48,3942],],
'1398':[[181,744],],
'1409':[[268,25],[374,25],[337,64],[225,25],[220,25],[329,25],[138,25],[295,25],[98,25],[373,23],[320,38],],
'1416':[[42,667],],
'1433':[[145,47],[212,49],],
'1452':[[95,126],[186,269],[218,274],],
'1462':[[341,225],[307,225],],
'1466':[[206,49],],
'1486':[[42,1269],],
'1502':[[359,137],],
'1527':[[48,160],],
'1560':[[121,141],],
'1667':[[355,603],[252,32],],
'1719':[[303,87],],
'1811':[[384,3052],],
'1818':[[314,67],],
'1843':[[162,336],],
'1849':[[256,35],],
'1852':[[48,3575],],
'1860':[[186,210],],
'1955':[[95,102],],
'1998':[[246,1746],],
'2063':[[266,223],],
'2065':[[52,168],],
'2068':[[384,2596],],
'2096':[[274,363],],
'2123':[[246,1898],[277,703],[339,184],[246,1929],],
'2148':[[373,80],],
'2180':[[153,823],],
'2228':[[54,1255],],
'2229':[[54,1263],],
'2263':[[121,188],],
'2264':[[189,543],[258,21],[277,165],[320,90],[227,192],[290,68],[277,37],],
'2268':[[160,314],],
'2272':[[84,313],[83,50],],
'2324':[[384,6782],],
'2325':[[68,105],],
'2354':[[277,552],],
'2368':[[76,82],],
'2376':[[253,122],],
'2388':[[321,325],],
'2468':[[84,175],[246,927],],
'2507':[[321,243],],
'2509':[[181,820],],
'2510':[[160,217],],
'2535':[[93,109],],
'2559':[[189,515],],
'2560':[[156,48],],
'2573':[[153,1213],[355,1143],],
'2590':[[249,64],],
'2610':[[337,109],[313,368],],
'2623':[[170,245],],
'2638':[[181,798],],
'2671':[[307,177],[355,946],[341,177],],
'2675':[[176,178],],
'2691':[[274,414],[121,303],[355,571],],
'2703':[[246,161],],
'2735':[[181,193],],
'2745':[[121,29],],
'2788':[[123,35],],
'2920':[[261,191],[358,351],],
'2965':[[153,636],],
'2977':[[277,147],[246,1715],],
'3004':[[355,626],],
'3146':[[162,360],],
'3156':[[164,351],],
'3167':[[164,531],],
'3183':[[170,164],],
'3190':[[170,177],],
'3195':[[303,164],],
'3196':[[214,379],],
'3275':[[188,208],[246,491],],
'3583':[[181,553],],
'3587':[[355,661],],
'3617':[[335,1739],[335,1604],],
'3713':[[246,1052],],
'3736':[[213,471],],
'3748':[[359,133],[266,54],],
'3770':[[220,118],[218,324],],
'3803':[[280,102],[371,95],],
'3823':[[306,801],],
'3870':[[246,521],],
'3882':[[246,612],],
'3883':[[246,618],],
'3928':[[246,1510],],
'4089':[[277,854],],
'4092':[[277,955],],
'4245':[[331,172],],
'4264':[[331,331],],
'4324':[[335,1971],],
'4350':[[359,97],],
'4399':[[357,37],],
'4530':[[396,155],],
'4599':[[381,517],],
'5246':[[394,171],],
},{'12':[[359,47],[84,181],[181,252],],
'43':[[161,282],[358,238],[21,93],[0,93],[390,94],[261,137],],
'248':[[181,822],],
'305':[[339,11],[171,365],[7,174],[186,43],[186,528],],
},{'44':[[0,94],[358,239],[261,138],[21,94],[390,95],[161,283],],
'63':[[121,532],],
'152':[[217,352],],
'199':[[7,176],[171,367],[186,45],[186,530],[339,13],[84,183],[200,262],],
'693':[[16,36],[74,36],],
'884':[[216,40],[192,40],[237,40],],
'898':[[384,4568],],
'922':[[42,715],],
'947':[[335,2337],],
'1233':[[384,3177],],
'1335':[[355,1034],],
'2079':[[216,22],[192,22],[237,22],],
'3729':[[209,232],],
'3872':[[246,530],],
'4343':[[335,2849],[335,2474],[335,2237],[335,3084],],
'4349':[[335,2372],],
'5104':[[384,7131],],
},{'45':[[21,95],[161,284],[261,139],[390,96],[358,240],[0,95],],
'49':[[339,47],],
'84':[[384,5672],],
},{'7':[[171,743],[369,98],[369,147],[369,47],[369,13],[369,207],[318,52],[139,4],[369,235],[369,404],[369,444],[369,489],[377,3],[258,79],[248,16],[22,5],[22,15],[248,5],[245,15],[245,6],[241,15],[241,5],[160,4],[219,51],[354,6],[354,15],[160,699],[38,7],[38,16],[181,1034],[181,4],[357,51],[377,50],[164,4],[164,664],[49,5],[171,1040],[171,609],[171,1000],[171,831],[171,803],[171,643],[171,694],[124,10],],
'15':[[164,38],[365,184],[358,109],[176,54],],
'23':[[144,33],[140,27],[308,96],[161,521],[179,941],[54,485],[358,165],[164,112],[365,116],[95,196],[384,5880],],
'26':[[161,374],[112,118],[358,157],],
'29':[[112,19],[384,7434],],
'33':[[274,802],[70,133],],
'34':[[164,388],],
'39':[[277,402],],
'46':[[261,140],[21,96],[0,96],],
'47':[[70,120],],
'49':[[129,28],[181,1039],],
'51':[[0,103],],
'54':[[307,255],[341,255],],
'67':[[274,805],[112,38],[317,26],],
'73':[[164,339],],
'77':[[384,633],[312,32],[321,94],[54,465],[274,81],[95,186],[164,198],],
'82':[[377,53],[277,872],],
'88':[[164,97],],
'117':[[354,0],[38,0],[124,0],[241,0],[245,0],[139,0],[22,0],[248,0],],
'118':[[16,138],],
'119':[[1,112],],
'120':[[154,40],],
'126':[[342,330],],
'130':[[46,40],[336,35],[226,40],],
'140':[[214,107],[266,63],[274,104],[274,85],[274,434],[214,186],[161,417],[70,119],[214,182],],
'141':[[59,91],],
'151':[[371,125],],
'155':[[317,98],],
'169':[[219,55],[145,83],],
'170':[[17,37],],
'171':[[2,34],],
'172':[[155,51],],
'178':[[66,33],[164,667],],
'179':[[300,54],],
'180':[[3,40],],
'181':[[370,65],],
'187':[[110,44],],
'188':[[222,59],],
'189':[[4,57],],
'190':[[112,149],],
'209':[[318,55],[79,57],],
'210':[[73,86],],
'211':[[5,82],],
'228':[[45,37],],
'232':[[265,51],[160,703],],
'233':[[305,87],],
'234':[[25,95],],
'235':[[6,97],],
'247':[[388,89],[141,89],],
'269':[[164,295],[164,309],],
'277':[[384,1838],[384,1345],],
'357':[[164,369],],
'370':[[266,68],],
'375':[[308,99],[265,41],[214,151],],
'376':[[214,144],],
'402':[[107,25],],
'407':[[206,102],],
'414':[[122,144],],
'420':[[164,23],],
'474':[[156,136],],
'499':[[161,383],],
'506':[[164,73],[351,63],[84,303],],
'509':[[164,267],],
'525':[[214,121],],
'562':[[54,117],[384,651],],
'684':[[145,79],],
'686':[[330,37],],
'690':[[304,402],],
'705':[[317,108],],
'708':[[66,30],],
'709':[[317,132],],
'710':[[365,232],],
'718':[[18,79],],
'733':[[357,53],],
'767':[[34,136],],
'768':[[20,183],],
'769':[[36,194],],
'772':[[152,226],],
'785':[[285,154],],
'798':[[21,110],],
'823':[[392,51],],
'824':[[144,46],],
'825':[[140,40],],
'826':[[326,54],],
'827':[[279,53],],
'828':[[79,54],],
'829':[[265,47],],
'835':[[214,374],],
'852':[[282,33],],
'853':[[24,30],],
'854':[[393,29],],
'858':[[312,64],],
'862':[[362,72],],
'863':[[26,50],],
'864':[[151,53],],
'871':[[69,94],],
'872':[[27,66],],
'873':[[276,81],],
'881':[[328,37],],
'882':[[28,90],],
'883':[[150,128],],
'998':[[259,53],],
'999':[[33,55],],
'1000':[[194,115],],
'1007':[[198,93],],
'1009':[[148,166],],
'1014':[[207,115],],
'1021':[[100,206],],
'1023':[[76,103],],
'1024':[[37,92],],
'1025':[[333,28],],
'1028':[[360,57],],
'1030':[[350,224],],
'1037':[[385,75],[258,82],],
'1040':[[166,27],],
'1041':[[255,27],],
'1042':[[348,28],],
'1043':[[378,37],],
'1044':[[109,32],],
'1045':[[316,122],],
'1046':[[272,52],],
'1047':[[133,129],],
'1048':[[379,223],],
'1049':[[60,105],],
'1050':[[232,135],],
'1051':[[82,563],],
'1052':[[165,83],],
'1053':[[286,44],],
'1054':[[113,71],],
'1055':[[44,148],],
'1056':[[263,101],],
'1057':[[338,93],],
'1058':[[203,83],],
'1059':[[287,104],],
'1060':[[53,146],],
'1061':[[50,113],],
'1062':[[273,51],],
'1063':[[364,51],],
'1064':[[347,64],],
'1065':[[343,106],],
'1066':[[394,204],],
'1067':[[137,274],],
'1068':[[173,333],],
'1069':[[86,261],],
'1070':[[57,311],],
'1071':[[283,252],],
'1072':[[187,202],],
'1073':[[269,225],],
'1074':[[284,228],],
'1075':[[135,224],],
'1076':[[146,172],],
'1077':[[229,196],],
'1078':[[332,190],],
'1079':[[260,102],],
'1080':[[131,170],],
'1081':[[77,147],],
'1082':[[247,265],],
'1083':[[270,252],],
'1084':[[209,272],],
'1085':[[210,183],],
'1086':[[180,228],],
'1087':[[64,31],],
'1088':[[55,34],],
'1089':[[238,30],],
'1090':[[177,58],],
'1091':[[325,29],],
'1092':[[119,25],],
'1093':[[43,25],],
'1094':[[228,46],],
'1095':[[356,59],],
'1096':[[190,79],],
'1097':[[323,26],],
'1098':[[129,23],],
'1158':[[164,170],],
'1198':[[384,6339],[384,7394],],
'1270':[[380,42],],
'1271':[[386,39],],
'1277':[[40,40],],
'1370':[[365,219],],
'1493':[[359,150],],
'1501':[[163,79],],
'1511':[[147,34],],
'1512':[[47,37],],
'1704':[[67,62],],
'1705':[[61,91],],
'1709':[[58,62],],
'1992':[[49,55],],
'2000':[[49,145],],
'2038':[[101,80],],
'2048':[[114,72],],
'2065':[[274,719],],
'2148':[[358,300],],
'2270':[[74,138],],
'2290':[[319,67],],
'2291':[[62,138],],
'2386':[[385,72],],
'2503':[[87,94],],
'2504':[[288,53],],
'2612':[[143,68],],
'2613':[[97,43],],
'2618':[[274,424],],
'2635':[[358,260],],
'2657':[[368,113],],
'2675':[[384,5080],[384,1424],],
'2678':[[353,190],],
'2679':[[103,128],],
'2680':[[106,61],],
'2694':[[275,36],],
'2695':[[105,71],],
'2696':[[294,49],],
'2708':[[280,125],],
'2709':[[334,92],],
'2711':[[108,25],],
'2728':[[169,73],],
'2729':[[299,45],],
'2894':[[271,45],],
'2895':[[205,45],],
'2896':[[192,45],],
'2897':[[216,45],],
'2898':[[237,45],],
'2925':[[389,53],],
'2983':[[321,103],],
'3205':[[262,50],],
'4903':[[384,6804],],
},{'7':[[89,194],[229,60],[269,78],[209,101],[284,79],[165,48],[379,131],[114,36],[60,69],[187,59],[133,119],[189,160],[133,108],[133,102],],
'12':[[48,4242],[180,206],[306,975],[48,3730],],
'14':[[358,308],[76,29],[384,9755],[161,523],[304,233],[358,297],[261,148],[350,203],[321,59],[321,84],[339,267],[350,147],[321,204],[321,403],[321,330],[321,392],],
'15':[[70,72],[186,59],[177,48],[197,55],],
'18':[[214,80],],
'19':[[321,434],[153,1221],[53,30],[335,1954],[335,2697],[181,112],[321,28],[179,59],[156,42],[57,58],[181,156],[306,470],[181,678],[180,155],[285,132],[153,62],[50,30],[176,281],[146,135],[48,441],[283,203],[181,906],[137,212],[48,4526],[137,52],[48,4645],[176,18],[162,127],[173,330],[349,64],[355,649],[189,588],[20,159],[77,56],[276,26],[131,58],[181,771],[364,26],[171,318],[272,39],[82,326],[82,360],[82,391],[210,152],[84,366],[180,52],[86,56],[102,4],[100,174],[270,61],[173,60],[100,141],[7,127],[314,57],[229,167],[181,774],[249,284],[247,242],[242,48],[247,61],[173,257],],
'23':[[89,421],[93,54],[93,75],[93,92],[89,407],[234,274],[260,73],[100,49],[263,47],[269,51],[100,161],[86,78],[86,68],[229,51],[84,371],[270,76],[210,56],[273,25],[209,76],[111,47],[111,58],[114,21],[273,42],[207,89],[203,49],[274,475],[77,73],[276,43],[131,78],[131,88],[189,460],[189,324],[276,55],[283,50],[283,144],[283,166],[187,169],[187,156],[283,169],[135,54],[187,54],[135,177],[135,208],[69,85],[137,64],[137,74],[186,411],[69,42],[137,195],[283,189],[137,221],[137,241],[69,26],[181,872],[394,179],[146,48],[284,52],[146,141],[148,49],[284,211],[285,46],[153,227],[306,247],[181,549],[57,70],[53,94],[53,69],[50,33],[153,835],[48,4654],[332,58],[48,827],[338,43],[48,601],[177,33],[343,31],[36,145],[343,54],[343,88],[347,46],[20,51],[169,23],[10,273],[394,51],[173,77],[173,87],[173,286],[173,266],[247,74],[173,240],],
'24':[[384,4380],],
'26':[[86,220],],
'30':[[148,60],],
'34':[[186,202],],
'36':[[48,638],[306,296],],
'47':[[21,97],[0,97],],
'51':[[350,154],[105,30],],
'63':[[186,62],[227,139],[181,570],],
'67':[[28,43],[394,169],[343,97],],
'75':[[387,41],[71,51],[311,41],[382,51],],
'84':[[190,36],],
'94':[[387,19],[382,23],[311,19],[71,23],],
'134':[[50,42],[332,55],[53,32],[273,27],[276,28],[269,48],[27,29],[343,33],[347,29],[387,38],[187,51],[100,46],[311,38],[364,28],[284,49],[135,51],[69,31],[36,45],[283,47],],
'149':[[283,230],[137,103],[74,60],[53,119],[16,60],[77,102],[153,278],[173,148],[133,99],[270,124],[131,117],[86,120],[159,136],[36,53],[249,289],[247,122],[159,120],[27,25],[159,70],[57,127],[121,266],],
'152':[[384,5782],],
'154':[[249,266],],
'160':[[89,213],[89,167],[323,23],],
'165':[[186,354],],
'177':[[86,227],],
'205':[[290,78],],
'230':[[190,33],[190,22],[249,237],[356,27],],
'241':[[48,460],],
'275':[[100,57],[20,61],[135,62],],
'277':[[355,794],[179,980],],
'322':[[228,32],],
'343':[[181,841],],
'402':[[347,18],[332,18],[69,18],[27,18],[100,18],[284,18],[273,18],[50,18],[36,18],[263,20],[276,18],[93,18],[53,18],[135,18],[364,18],[269,18],[343,19],[283,18],[209,20],[203,20],[338,20],[187,18],],
'422':[[335,2751],[153,654],[335,2023],[153,665],[246,988],[153,745],[153,1268],],
'425':[[162,139],],
'431':[[234,247],[189,297],[213,251],[173,117],[10,246],],
'449':[[284,173],[269,172],],
'451':[[57,276],[105,24],],
'455':[[181,630],],
'470':[[306,1571],],
'479':[[48,4311],],
'513':[[181,42],],
'518':[[186,319],],
'520':[[314,109],],
'523':[[181,216],],
'543':[[249,32],[246,1156],],
'550':[[121,420],[306,474],[306,496],],
'554':[[48,1455],[249,304],],
'567':[[384,9697],[28,33],],
'593':[[100,42],[135,42],[82,413],],
'603':[[20,72],],
'680':[[189,482],[131,65],[332,165],[332,174],[246,836],[246,827],[153,862],[186,294],[77,63],[332,50],[335,2981],],
'707':[[246,1027],[246,1206],[243,196],],
'728':[[129,17],[107,19],[57,111],[86,104],[173,132],[131,101],[137,87],[247,106],[347,41],[77,86],[347,23],[270,108],],
'791':[[82,307],],
'815':[[54,282],[335,93],],
'856':[[57,96],[86,89],],
'858':[[181,60],],
'869':[[274,253],[246,1903],],
'921':[[384,7060],],
'939':[[247,94],[270,96],[283,181],[57,246],],
'961':[[181,54],],
'995':[[57,308],],
'1033':[[181,1020],],
'1056':[[203,46],[263,44],[338,40],],
'1117':[[106,50],],
'1229':[[379,127],[82,313],[173,300],[137,255],],
'1346':[[93,51],],
'1414':[[186,160],],
'1416':[[277,138],],
'1591':[[179,1026],],
'1602':[[48,580],],
'1627':[[246,1605],],
'1673':[[48,1499],],
'1765':[[306,1603],],
'1778':[[350,167],],
'1813':[[306,299],[48,2675],[306,447],[48,4454],[48,4826],],
'1960':[[161,478],],
'2076':[[384,5003],[153,353],[54,344],[70,78],[335,227],[179,1001],[197,61],[70,360],[197,197],],
'2103':[[71,48],[382,48],],
'2220':[[187,47],[283,44],],
'2259':[[187,196],[57,82],[57,238],[270,230],],
'2498':[[283,59],[187,72],],
'2528':[[89,293],],
'2664':[[102,70],],
'2697':[[105,51],[275,22],[275,30],],
'2743':[[379,148],],
'2806':[[384,3681],[384,3043],],
'2912':[[153,521],[142,175],],
'2918':[[146,42],],
'2978':[[232,67],[232,75],],
'3024':[[180,57],],
'3118':[[209,73],],
'3269':[[179,98],[290,151],],
'3548':[[180,64],],
'4434':[[348,24],],
'4487':[[355,1107],],
'5209':[[384,9782],],
'5212':[[384,9800],],
},{'2':[[357,31],[339,168],],
'23':[[335,3086],[335,3067],[153,100],[335,2239],[384,9638],[84,124],[335,2220],[181,514],[153,1045],],
'26':[[342,233],[153,687],],
'31':[[89,201],[89,190],[89,433],],
'33':[[153,1194],[153,990],],
'34':[[339,125],],
'38':[[153,1007],[153,1027],],
'39':[[246,47],],
'48':[[0,98],[197,56],[214,81],[181,55],[21,98],[70,73],[234,275],[10,274],[189,325],[227,140],],
'62':[[334,77],],
'63':[[49,102],[49,24],],
'77':[[246,1589],],
'89':[[335,2082],[153,854],[36,141],[181,257],],
'128':[[276,48],],
'152':[[1,98],[49,93],[274,54],],
'155':[[342,140],],
'162':[[110,48],[113,75],[119,29],[129,27],[356,63],[131,174],[133,133],[135,228],[137,278],[146,176],[148,170],[348,32],[347,68],[64,35],[343,110],[153,381],[60,109],[109,36],[57,315],[55,38],[53,150],[107,29],[50,117],[102,100],[100,210],[69,98],[379,227],[339,51],[164,136],[338,97],[164,229],[44,152],[165,87],[166,31],[378,41],[173,337],[177,62],[43,29],[180,232],[181,8],[181,24],[393,33],[77,151],[38,4],[36,198],[79,61],[181,499],[86,265],[364,55],[332,194],[325,33],[323,30],[316,126],[312,68],[312,36],[181,1038],[181,1043],[187,206],[287,108],[34,140],[190,83],[27,70],[203,87],[207,119],[209,276],[286,48],[210,187],[24,34],[22,19],[228,50],[229,200],[285,158],[284,232],[232,139],[20,187],[238,34],[84,147],[369,239],[283,256],[282,37],[276,85],[171,835],[82,567],[247,269],[248,9],[255,31],[260,106],[263,105],[269,229],[273,55],[270,256],[272,56],[394,208],],
'205':[[48,3613],],
'217':[[153,85],],
'220':[[181,274],],
'224':[[306,944],[48,3619],],
'268':[[339,46],],
'270':[[335,2109],],
'315':[[342,120],],
'375':[[153,616],],
'454':[[232,122],[181,656],[181,541],[181,778],[181,736],[181,566],],
'518':[[384,9631],[384,9647],],
'520':[[384,8699],],
'540':[[189,141],],
'575':[[153,632],],
'696':[[246,1670],[246,1786],],
'728':[[357,48],],
'791':[[77,51],[82,560],[210,42],[332,41],[247,56],[131,53],[384,9889],[180,47],[270,56],],
'837':[[339,147],],
'860':[[164,237],],
'1039':[[38,31],],
'1115':[[246,1682],],
'1135':[[342,128],],
'1507':[[181,520],],
'1591':[[335,2812],[335,2117],],
'1705':[[164,208],],
'1991':[[342,197],],
'2272':[[335,2706],],
'2332':[[89,337],[277,941],],
'2449':[[384,9895],[181,509],[181,471],[181,473],[232,115],],
'2479':[[84,396],],
'2495':[[335,2297],[335,1860],],
'2626':[[164,130],],
'2742':[[384,7731],],
'2912':[[384,9455],],
'2948':[[153,49],],
'2950':[[153,141],],
'2965':[[246,1707],],
'2975':[[153,602],[312,29],],
'2978':[[153,641],],
'4323':[[335,1964],],
'4329':[[335,2822],[335,2127],],
'4465':[[355,54],],
},{'2':[[186,54],[159,15],[186,84],],
'5':[[0,101],[0,107],],
'8':[[21,114],],
'9':[[340,40],[308,40],],
'63':[[306,87],[384,4166],[384,4382],[12,118],[218,218],],
'79':[[306,97],],
'83':[[197,52],],
'128':[[67,40],[267,24],],
'155':[[384,9543],],
'160':[[181,37],],
'181':[[370,47],],
'199':[[135,169],[183,89],[23,87],[153,1022],[12,81],[164,618],[215,89],[293,87],],
'241':[[61,73],],
'247':[[141,65],[143,44],],
'281':[[39,672],[164,641],],
'321':[[277,284],[274,138],],
'370':[[70,94],[197,77],],
'485':[[289,115],],
'500':[[39,145],[39,522],],
'501':[[39,137],],
'547':[[70,69],],
'621':[[39,200],],
'642':[[39,591],],
'652':[[315,115],],
'817':[[384,9798],[384,8498],[384,3638],[384,7209],[384,5821],],
'839':[[340,50],[308,50],],
'841':[[215,76],[23,76],[183,76],[293,76],],
'878':[[384,5019],],
'916':[[331,381],],
'1156':[[221,25],],
'1305':[[335,2722],],
'1342':[[274,662],[274,347],],
'1424':[[384,3887],],
'1575':[[54,469],],
'1757':[[48,2118],],
'2135':[[54,483],],
'2619':[[99,243],],
'2655':[[355,159],[355,274],],
},{'19':[[350,153],],
'23':[[105,29],],
'39':[[23,91],[293,91],[321,159],[161,559],],
'50':[[197,53],[384,3639],[70,70],[0,102],],
'65':[[384,3651],],
'75':[[293,79],[23,79],],
'154':[[390,136],],
'506':[[70,362],[197,199],],
'671':[[197,101],[306,141],[54,267],[335,78],[48,214],[179,624],[70,157],[153,178],],
},{'12':[[246,1342],[361,91],[191,76],],
'19':[[164,502],[164,544],[141,79],[143,58],[66,22],],
'23':[[61,62],[153,841],[361,108],[253,114],[6,55],[164,119],],
'33':[[236,36],[13,36],[158,51],[115,36],],
'36':[[246,1348],],
'47':[[21,111],[0,104],],
'53':[[0,109],[308,190],[340,157],],
'57':[[72,27],[191,29],],
'130':[[235,389],],
'174':[[70,228],],
'184':[[70,187],],
'205':[[164,65],[164,257],[164,59],],
'220':[[162,357],],
'224':[[164,606],],
'239':[[6,31],],
'241':[[48,419],],
'259':[[164,435],[162,344],[52,82],],
'321':[[164,91],],
'454':[[70,218],],
'478':[[48,2829],[48,3159],[48,2834],],
'654':[[48,4722],[306,1500],[48,4158],],
'716':[[17,33],[21,121],],
'740':[[306,1533],[48,4714],[48,3150],[48,4193],],
'741':[[306,1394],[48,4086],[48,4265],],
'861':[[153,809],],
'944':[[384,1791],],
'1589':[[48,530],],
'1757':[[48,3145],],
'1903':[[306,1381],[48,4073],],
'1924':[[48,4709],],
'1948':[[48,4339],],
'2179':[[70,500],[197,352],],
'2351':[[70,556],],
'2353':[[197,527],[70,695],],
'2355':[[70,689],[197,521],],
'2358':[[70,709],],
'3154':[[164,311],],
'3700':[[197,557],],
'4150':[[306,1580],],
},{'50':[[0,108],],
'75':[[340,43],[308,189],[308,43],[70,269],[197,150],[340,156],],
'671':[[153,190],[306,153],[70,169],[54,263],[335,74],[48,226],[197,113],[179,636],],
},{'2':[[321,138],],
'17':[[214,36],],
'19':[[189,432],[277,603],],
'20':[[363,542],],
'26':[[48,3627],],
'27':[[340,138],[103,106],[150,106],[308,171],],
'47':[[274,803],],
'48':[[189,589],],
'52':[[0,110],],
'60':[[161,368],],
'61':[[308,69],],
'67':[[313,314],],
'91':[[384,1988],],
'105':[[42,1267],],
'128':[[361,50],[231,50],[222,30],[279,24],[144,39],[79,25],[80,88],[140,33],[126,28],[116,61],[4,28],[392,22],[320,86],[318,24],],
'139':[[266,246],],
'149':[[121,504],[112,114],],
'151':[[54,496],[371,113],],
'162':[[213,432],],
'165':[[164,27],],
'167':[[224,194],],
'196':[[84,466],],
'215':[[313,269],[384,3307],],
'217':[[384,3315],],
'231':[[296,122],],
'237':[[322,211],[314,82],[128,209],],
'269':[[214,312],],
'277':[[121,442],],
'285':[[335,3300],],
'299':[[186,481],],
'321':[[307,254],[341,254],],
'343':[[121,175],],
'423':[[363,377],],
'443':[[306,1266],[48,3935],],
'458':[[180,161],],
'459':[[135,93],[285,81],[180,105],[178,170],[284,118],[173,178],[187,102],[189,347],[137,133],[332,91],[283,89],[394,91],[36,89],[209,148],[210,93],[213,305],[57,157],[34,82],[148,100],[146,84],[86,150],[89,251],[229,111],[20,108],[234,297],[247,152],[10,296],[100,88],[270,154],[269,117],],
'491':[[39,494],],
'551':[[306,1075],],
'602':[[12,394],],
'621':[[83,71],],
'646':[[181,634],],
'696':[[266,350],[355,908],],
'747':[[349,73],],
'797':[[150,89],[103,89],],
'801':[[21,125],],
'815':[[179,644],],
'849':[[313,417],],
'869':[[164,528],],
'917':[[168,27],],
'919':[[335,3416],],
'922':[[87,82],],
'937':[[161,547],],
'985':[[30,460],],
'1002':[[381,529],],
'1202':[[72,67],],
'1225':[[48,3681],[179,936],],
'1231':[[355,969],],
'1234':[[89,426],],
'1278':[[363,305],],
'1376':[[170,271],],
'1476':[[214,334],],
'1667':[[384,7044],[48,4467],],
'1811':[[191,121],],
'1830':[[48,3474],],
'1960':[[274,462],],
'2148':[[280,111],],
'2151':[[54,1245],],
'2158':[[54,1415],],
'2217':[[54,1222],],
'2353':[[197,420],[70,652],],
'2371':[[363,628],],
'2409':[[384,1142],],
'2513':[[156,121],],
'2601':[[191,201],],
'3134':[[161,536],],
'3368':[[384,489],],
'3995':[[384,869],],
'4034':[[266,109],],
'4191':[[341,234],[307,234],],
'4510':[[384,5664],],
'4625':[[384,1413],],
'4634':[[384,9224],],
},{'7':[[152,79],[152,75],],
'12':[[344,91],[341,56],[355,781],[384,5891],[307,56],[290,56],[257,182],[249,169],[249,129],[152,93],[246,494],[243,231],[42,571],[153,325],[153,755],[49,27],[200,300],[54,1413],[162,293],[54,647],[54,94],[179,1047],[178,247],[0,112],],
'16':[[178,72],[49,364],[54,1139],[49,360],[213,120],[234,102],[152,176],[246,1934],[10,103],[89,86],[189,109],],
'30':[[152,133],],
'31':[[36,186],[42,1055],[246,331],[152,148],[246,322],[49,387],],
'36':[[161,500],],
'37':[[12,231],],
'39':[[9,139],[29,139],[277,625],],
'43':[[246,1284],[176,161],[160,675],[246,1086],],
'57':[[95,277],[54,710],],
'63':[[246,1891],[246,763],],
'67':[[384,2962],],
'73':[[0,145],[246,223],],
'74':[[179,56],],
'131':[[95,472],],
'139':[[70,644],],
'152':[[355,541],],
'164':[[153,900],],
'167':[[290,198],[179,144],[179,1253],],
'202':[[162,331],],
'203':[[179,1266],[179,155],[290,209],[206,39],],
'230':[[206,89],],
'248':[[99,132],[384,9911],[274,34],[95,263],[12,360],[54,696],],
'305':[[331,105],[379,189],[246,1649],],
'349':[[182,43],[9,84],[29,84],],
'351':[[29,102],[9,102],],
'519':[[290,119],],
'599':[[12,383],],
'639':[[54,1450],[249,151],],
'707':[[16,135],[74,135],],
'817':[[277,259],],
'818':[[137,200],[173,245],],
'861':[[54,1492],],
'955':[[246,705],[246,710],],
'1003':[[335,552],],
'1029':[[246,485],],
'1155':[[178,253],],
'1211':[[197,220],[70,383],],
'1231':[[277,102],],
'1602':[[48,1540],],
'1680':[[243,190],],
'1750':[[54,582],],
'1832':[[197,412],],
'1911':[[160,301],],
'1993':[[49,65],],
'2007':[[152,99],],
'2092':[[54,567],],
'3857':[[246,299],],
'4299':[[335,902],],
},{'2':[[392,40],[4,46],[249,189],[249,54],[279,42],[249,7],[355,393],[222,48],[335,3790],[79,43],[88,46],[185,100],[185,17],[159,154],[318,42],[335,16],[171,1214],],
'7':[[179,19],[171,1205],[48,16],[335,18],[153,18],[197,23],[306,17],[70,20],[54,23],[249,10],[249,325],],
'13':[[384,7967],],
'23':[[171,115],[249,79],[249,104],[249,131],[249,153],[249,171],[21,129],[249,233],[249,277],[249,281],[249,35],[0,114],],
'56':[[335,3791],[249,326],],
'59':[[274,120],],
'81':[[277,964],],
'83':[[179,1634],],
'107':[[48,4989],],
'117':[[185,0],],
'137':[[70,792],],
'279':[[197,632],],
'321':[[54,1533],],
'489':[[303,112],],
'609':[[384,4996],],
'800':[[153,1430],],
'903':[[249,30],],
'940':[[306,1621],],
},{'7':[[365,135],[365,151],[365,187],[200,50],],
'12':[[75,48],[235,318],[235,93],],
'43':[[363,330],[10,307],[358,352],[355,716],[20,119],[355,604],[355,425],[30,320],[337,70],[332,185],[34,93],[332,102],[36,100],[317,102],[313,372],[285,92],[284,188],[384,6783],[283,100],[274,364],[270,165],[269,208],[269,128],[261,192],[48,79],[249,106],[247,163],[1,66],[54,709],[394,102],[234,308],[229,122],[224,133],[57,168],[218,275],[59,66],[213,472],[213,316],[210,104],[209,159],[70,655],[284,129],[72,26],[197,423],[0,118],[75,87],[191,182],[191,28],[189,627],[189,358],[187,113],[181,194],[180,116],[178,181],[173,189],[164,400],[164,282],[84,215],[164,261],[164,185],[86,161],[160,550],[160,368],[148,111],[89,262],[146,95],[93,110],[95,276],[137,144],[135,104],[125,45],[105,36],[102,147],[100,99],[96,178],],
'47':[[214,145],],
'48':[[82,327],],
'63':[[95,419],],
'67':[[42,423],[246,793],[355,1278],],
'77':[[181,989],],
'83':[[335,1406],],
'84':[[341,75],[308,53],[340,53],[307,75],],
'99':[[42,341],],
'121':[[189,562],[213,422],],
'136':[[95,330],[322,103],[54,754],[128,101],[382,76],[71,76],],
'137':[[118,155],],
'138':[[59,36],[214,189],[1,42],],
'140':[[213,281],],
'149':[[224,77],[313,90],],
'152':[[142,86],],
'165':[[82,398],[82,367],],
'175':[[67,35],[370,32],],
'177':[[298,50],[127,50],],
'184':[[141,54],[141,59],],
'195':[[234,253],[213,257],[10,252],[189,303],],
'196':[[266,355],],
'199':[[320,42],[235,432],[384,5376],[395,63],[48,4740],[253,99],[363,367],[345,60],[224,209],[10,353],[317,92],],
'202':[[269,123],[187,108],[270,160],[283,95],[180,111],[249,135],[284,124],[189,353],[178,176],[173,184],[247,158],[332,97],[242,101],[100,94],[36,95],[209,154],[34,88],[210,99],[86,156],[20,114],[234,303],[89,257],[148,106],[213,311],[146,90],[10,302],[229,117],[137,139],[135,99],[394,97],[57,163],[395,101],[285,87],[395,135],],
'220':[[33,40],[163,64],[259,38],],
'237':[[170,78],[302,70],[134,73],[84,52],],
'241':[[82,416],[61,68],],
'247':[[164,34],],
'250':[[355,418],[70,630],],
'251':[[395,35],],
'267':[[42,251],],
'271':[[384,8488],[42,701],],
'277':[[80,37],[231,90],[363,515],[296,41],],
'285':[[335,1039],],
'290':[[270,88],[284,73],[247,86],[284,85],],
'319':[[29,154],[9,154],],
'346':[[284,62],],
'369':[[181,578],[181,958],[181,968],],
'397':[[218,153],[363,200],],
'409':[[368,48],],
'423':[[313,450],],
'436':[[178,131],[218,121],[213,184],[10,175],[363,168],[235,134],[189,226],[234,176],],
'438':[[363,502],[235,470],[363,587],],
'444':[[235,157],[189,249],[363,191],[10,198],[218,144],[234,199],[213,207],],
'447':[[335,2708],[126,19],[168,32],],
'454':[[82,402],],
'470':[[173,110],[173,121],[269,84],[269,72],],
'547':[[395,90],[345,75],],
'550':[[335,3424],],
'615':[[173,101],[269,61],],
'655':[[220,103],],
'673':[[138,33],],
'681':[[95,490],],
'856':[[300,34],[143,30],[141,35],],
'866':[[363,90],],
'869':[[395,108],],
'897':[[30,47],],
'1101':[[220,29],],
'1113':[[345,67],[395,77],],
'1119':[[164,522],[164,516],],
'1135':[[335,1976],],
'1231':[[89,188],],
'1234':[[189,167],[89,199],],
'1332':[[42,597],[75,105],[42,187],[42,559],],
'1333':[[367,114],[250,118],[367,121],[250,111],],
'1338':[[42,335],],
'1345':[[42,1126],],
'1358':[[42,406],],
'1367':[[42,684],],
'1604':[[48,1364],],
'1704':[[61,42],],
'1814':[[86,93],[57,100],],
'1829':[[48,3389],],
'1843':[[218,198],],
'1846':[[322,201],[128,199],],
'1955':[[72,60],],
'2014':[[178,306],],
'2127':[[335,1454],],
'2160':[[54,736],[95,303],],
'2370':[[363,452],],
'2379':[[75,111],],
'2415':[[363,307],[84,64],],
'2423':[[82,375],],
'2520':[[89,431],],
'2581':[[95,412],[363,259],],
'2582':[[95,398],],
'3072':[[160,645],],
'3702':[[335,3516],],
'3977':[[250,102],],
'4546':[[365,177],],
},{'23':[[0,168],],
'57':[[0,119],],
'67':[[0,137],],
},{'2':[[49,130],],
'3':[[246,1936],[214,27],[384,6619],[30,462],[384,6113],[164,138],[384,2656],[384,1697],[42,152],[42,482],[232,124],[181,477],[355,1376],[246,552],[344,102],[284,207],[49,346],[246,843],],
'12':[[49,339],],
'13':[[339,86],],
'14':[[58,19],[234,161],[10,160],[89,146],[213,169],[189,211],],
'15':[[384,1408],[384,9879],[102,171],[224,151],],
'16':[[355,877],],
'19':[[363,69],],
'31':[[191,292],[224,97],],
'33':[[257,117],[95,352],[246,642],[159,158],],
'38':[[384,5284],],
'50':[[135,170],],
'56':[[249,278],],
'58':[[0,120],],
'61':[[285,95],[10,310],[148,114],[20,122],[34,96],[173,192],[36,103],[332,105],[394,105],[178,184],[180,119],[146,98],[284,132],[187,116],[283,103],[270,168],[189,361],[269,131],[57,171],[209,162],[210,107],[137,147],[213,319],[135,107],[247,166],[86,164],[229,125],[89,265],[100,102],[234,311],],
'77':[[384,2468],[384,4443],[331,248],[341,175],[102,110],[102,122],[384,251],[160,608],[307,175],[306,1081],[384,7633],[384,6749],[384,7310],[274,795],],
'91':[[353,74],],
'99':[[48,663],],
'140':[[249,235],],
'143':[[339,257],[321,317],],
'147':[[39,797],],
'152':[[246,25],[84,131],],
'203':[[355,279],[243,134],[39,900],[339,67],[344,150],[246,1115],[170,175],[84,43],],
'205':[[172,106],],
'217':[[244,195],],
'289':[[363,153],[313,176],],
'295':[[176,191],],
'298':[[306,464],],
'321':[[274,119],],
'375':[[188,344],[277,837],],
'420':[[355,1292],],
'449':[[384,2623],[176,258],[359,65],[160,547],],
'482':[[48,2852],[48,3231],],
'502':[[235,51],],
'596':[[335,2086],],
'613':[[181,492],],
'621':[[306,189],[48,769],],
'856':[[141,23],[143,21],],
'926':[[313,53],],
'1109':[[384,5044],],
'1123':[[355,152],],
'1226':[[176,204],],
'1234':[[189,454],],
'1286':[[54,223],],
'1304':[[268,54],],
'1310':[[384,6477],],
'1378':[[249,241],[355,1164],],
'1617':[[48,677],],
'1864':[[384,8085],],
'1955':[[118,164],],
'1971':[[48,4881],],
'2152':[[274,632],],
'2271':[[58,34],],
'2530':[[342,224],],
'2675':[[384,4469],[384,3420],[384,5885],[384,7280],],
'3092':[[246,907],],
'3791':[[307,190],[308,159],[341,190],[340,126],],
'4086':[[277,810],],
'4093':[[277,958],],
'4102':[[384,6519],],
'4239':[[331,61],],
'4744':[[384,1123],],
},{'19':[[133,88],[249,198],],
'20':[[277,246],],
'23':[[249,165],],
'56':[[249,36],],
'59':[[0,121],],
'149':[[249,203],],
'443':[[57,242],],
'468':[[249,89],],
'581':[[188,54],[179,53],],
'722':[[358,386],[353,160],[261,216],],
'1452':[[249,186],],
'2594':[[249,157],[277,257],[161,224],[249,147],],
'2702':[[161,502],[106,25],],
'3114':[[339,203],[161,295],],
'3119':[[161,367],],
},{'13':[[197,153],[70,272],[307,90],[341,90],[340,68],[42,1314],[308,68],],
'14':[[121,342],],
'15':[[0,123],],
'26':[[160,239],[355,154],[200,91],[200,98],[253,170],[200,117],[200,124],[181,878],[160,195],[235,253],[242,207],],
'33':[[363,396],[246,1853],[184,37],],
'55':[[246,1650],[243,232],],
'140':[[331,446],[160,254],[246,340],[381,464],[49,38],[274,829],[246,356],],
'142':[[84,127],],
'175':[[187,115],[189,360],[178,183],[10,309],[173,191],[180,118],[394,104],[20,121],[148,113],[34,95],[209,161],[210,106],[213,318],[229,124],[234,310],[146,97],[137,146],[135,106],[332,104],[36,102],[100,101],[270,167],[57,170],[247,165],[86,163],[285,94],[284,131],[283,102],[89,264],[269,130],],
'197':[[246,977],[246,985],],
'204':[[54,146],],
'223':[[368,60],[181,934],],
'288':[[384,6792],],
'306':[[246,1629],],
'439':[[277,654],],
'468':[[331,114],],
'482':[[153,307],[388,80],],
'502':[[153,375],[355,1019],],
'519':[[344,87],],
'529':[[335,990],],
'555':[[355,775],[355,389],],
'593':[[308,62],[340,62],[307,84],[341,84],],
'597':[[384,5992],[246,1534],],
'614':[[12,439],],
'622':[[12,468],],
'837':[[301,57],[70,316],],
'856':[[197,548],],
'926':[[306,1415],[246,1504],],
'940':[[384,6433],],
'981':[[303,97],],
'1334':[[246,348],],
'1370':[[249,215],],
'1626':[[246,997],],
'2341':[[384,2945],],
'2392':[[339,113],],
'2610':[[246,410],],
'2723':[[206,73],],
'2761':[[302,138],[134,136],],
'3891':[[246,751],],
'4088':[[277,835],],
'4302':[[355,1015],],
},{'12':[[0,125],[1,80],[287,43],[59,80],[49,425],[153,248],[249,244],[232,112],[44,49],],
'23':[[274,605],[95,462],[335,3419],],
'26':[[49,100],[246,1806],[160,378],[217,315],],
'30':[[6,62],],
'37':[[335,649],[335,898],[335,586],],
'39':[[274,793],[331,66],],
'63':[[384,48],],
'81':[[307,141],[341,141],[307,212],[341,212],],
'82':[[219,46],[99,207],],
'155':[[95,205],[54,1485],[180,183],[307,197],[153,1385],[153,1163],[54,535],[54,481],[153,958],[341,197],],
'162':[[49,91],[194,51],],
'164':[[1,100],[1,106],[334,76],[384,7943],],
'196':[[384,4746],],
'199':[[384,9852],[12,133],],
'202':[[49,410],],
'233':[[49,448],],
'248':[[384,2708],],
'264':[[54,662],[95,229],],
'272':[[355,896],],
'305':[[384,1755],],
'343':[[160,364],],
'370':[[49,419],[186,153],],
'513':[[12,67],],
'547':[[384,4241],[384,4227],],
'773':[[194,89],[194,99],],
'948':[[153,52],[214,256],],
'1116':[[39,108],],
'1169':[[48,3666],],
'1462':[[307,162],[341,162],],
'2150':[[307,120],[341,120],],
'3196':[[262,44],],
'4385':[[335,3627],],
'4389':[[335,3670],],
},{'2':[[358,363],[339,193],[381,350],],
'3':[[0,127],],
'9':[[181,479],],
'10':[[384,4181],],
'19':[[384,1596],],
'20':[[355,43],[161,164],],
'25':[[58,44],[185,96],[208,42],[185,13],[249,3],[171,1210],[335,12],[335,3786],[88,42],],
'33':[[384,9435],],
'37':[[277,864],],
'43':[[164,176],],
'45':[[384,4569],],
'47':[[161,384],[321,95],],
'48':[[335,1955],[335,2698],[270,231],[131,66],[332,51],[321,404],[394,180],[48,442],[384,4381],[153,1269],[153,746],[153,655],[246,1904],[77,64],],
'49':[[277,942],[334,78],[355,55],[214,82],],
'52':[[162,345],],
'55':[[160,302],],
'60':[[188,55],],
'61':[[363,397],],
'62':[[153,53],[49,101],],
'65':[[99,221],[199,97],],
'75':[[96,93],],
'77':[[84,91],],
'82':[[30,272],[384,8078],[384,8380],[12,402],[313,295],[227,198],[0,155],[331,466],[384,8462],[274,70],[227,138],[384,7180],[171,1221],[355,1464],[70,469],[179,16],[70,403],[179,1632],[70,85],[277,43],[197,319],[197,240],[344,142],[344,200],[249,332],[48,382],[197,68],[185,24],[249,17],[235,264],[355,331],[355,692],[335,5],],
'83':[[384,6857],[41,138],],
'84':[[345,72],],
'86':[[331,175],],
'87':[[384,2300],],
'92':[[48,3115],[48,4679],],
'93':[[322,90],[302,107],[39,601],[306,436],[345,38],],
'99':[[42,193],[42,603],],
'105':[[277,796],],
'114':[[235,209],[49,122],],
'121':[[266,237],],
'130':[[363,447],],
'131':[[54,472],[1,28],[218,243],],
'133':[[186,117],],
'136':[[335,2962],],
'137':[[39,408],[244,111],[118,166],[277,170],[384,4538],[246,1824],[244,197],],
'138':[[49,60],[214,148],[74,131],[164,450],[16,131],],
'139':[[74,49],[16,49],],
'140':[[355,819],[384,9311],[384,3836],[42,328],[39,32],[290,137],],
'144':[[54,1482],],
'149':[[390,168],[21,185],[286,40],],
'150':[[218,228],[343,71],],
'151':[[164,442],],
'162':[[189,598],[213,441],[54,584],],
'165':[[384,3873],[373,92],[30,415],[30,477],[164,362],[384,547],[209,253],[30,251],[30,369],[186,357],[30,172],],
'167':[[191,159],[344,367],[30,498],[344,342],[290,11],[171,292],[336,76],[7,101],[188,235],[266,268],[355,529],[30,22],[344,32],],
'168':[[1,114],[262,52],[59,93],[58,64],[214,153],[304,404],[342,332],[371,127],[171,645],[108,27],[40,42],[145,81],[16,140],[280,127],[369,49],[74,140],[154,42],[245,2],[334,94],[124,12],[156,138],[241,7],[380,44],[219,53],[219,57],[386,41],[330,39],],
'177':[[197,480],],
'178':[[266,71],],
'184':[[181,459],],
'185':[[181,569],[190,72],],
'187':[[332,170],],
'188':[[54,129],],
'195':[[209,235],],
'196':[[218,217],[153,682],[112,83],],
'199':[[270,67],[153,356],[39,69],],
'203':[[30,125],],
'206':[[160,246],],
'208':[[49,23],],
'215':[[384,6219],[337,105],],
'216':[[49,514],[73,39],],
'217':[[48,874],[12,346],[384,3974],[121,318],],
'221':[[181,826],[160,58],],
'223':[[160,200],],
'224':[[48,4016],[246,1253],[266,253],],
'225':[[95,291],[352,61],[54,724],[193,61],],
'227':[[246,327],],
'230':[[42,1291],[301,44],],
'231':[[362,59],[339,219],[384,7474],[339,238],[321,298],],
'232':[[181,337],],
'233':[[359,123],],
'236':[[28,25],],
'237':[[235,247],[331,444],],
'241':[[246,1319],[246,1276],[246,1323],[384,1490],[355,609],],
'244':[[74,67],[44,55],[16,67],[260,45],[75,109],[313,400],[153,305],[207,41],],
'247':[[6,65],],
'259':[[99,195],],
'264':[[266,180],[384,8038],[384,8012],],
'269':[[70,144],],
'271':[[189,254],[235,162],[10,203],[234,204],[395,41],[218,149],[363,196],[213,212],[39,375],[39,313],],
'272':[[335,3471],],
'274':[[355,366],],
'277':[[227,85],[153,69],[171,79],[246,1890],[355,872],[355,852],[355,447],[89,71],[189,92],[84,378],[12,91],[243,237],[84,188],[225,39],[384,664],[384,143],[384,204],[84,243],],
'282':[[344,336],[7,95],[344,26],[30,492],[290,5],[355,523],[30,16],[171,286],[344,361],],
'283':[[277,174],],
'284':[[384,2855],],
'289':[[84,268],],
'290':[[36,179],],
'295':[[52,334],],
'299':[[344,254],[246,749],[249,193],[246,1022],],
'300':[[246,1132],],
'302':[[162,310],],
'307':[[186,39],[186,524],[339,7],[7,170],[171,361],],
'314':[[384,1077],],
'316':[[161,127],],
'319':[[42,399],[274,499],],
'321':[[303,134],[303,37],[227,116],[161,423],[39,247],[214,24],],
'322':[[353,97],[353,31],],
'336':[[28,40],],
'338':[[189,528],],
'346':[[384,1533],],
'347':[[52,186],],
'350':[[29,106],[9,106],[182,45],],
'354':[[244,209],[118,178],],
'357':[[84,332],[355,181],],
'368':[[277,496],],
'370':[[20,176],[285,147],[44,105],],
'381':[[231,117],],
'383':[[189,438],],
'385':[[189,554],],
'402':[[394,159],],
'412':[[277,559],],
'415':[[229,169],[229,175],[82,511],],
'422':[[48,4807],[384,5074],],
'423':[[39,638],],
'425':[[189,422],],
'432':[[153,503],],
'436':[[39,595],[48,2129],[306,1405],[48,4631],],
'438':[[363,622],[235,288],],
'440':[[218,132],[363,179],[10,186],[189,237],[235,145],[234,187],[213,195],[178,142],],
'447':[[84,452],[181,372],[247,65],[235,284],[335,2222],[335,3069],[396,98],[162,46],[54,1352],[181,742],],
'451':[[188,198],],
'452':[[269,195],],
'454':[[384,9893],],
'458':[[49,290],[181,101],],
'459':[[222,25],[181,396],],
'460':[[317,123],],
'462':[[153,1097],],
'465':[[214,252],],
'470':[[153,1191],[153,1058],[153,987],[173,63],[153,1344],[153,1251],],
'473':[[179,65],],
'476':[[289,156],[315,156],],
'479':[[39,818],[322,85],[302,102],],
'481':[[89,381],],
'482':[[355,1073],],
'485':[[11,48],[204,63],],
'489':[[214,366],[214,49],[303,2],[227,249],[171,1332],],
'491':[[12,138],[12,466],[200,155],],
'492':[[384,3892],],
'493':[[12,20],],
'500':[[12,32],],
'502':[[355,113],],
'505':[[96,115],],
'510':[[12,380],[246,290],],
'514':[[83,96],[48,4638],],
'515':[[48,4650],],
'516':[[121,565],],
'518':[[331,455],],
'520':[[306,86],[12,117],[48,3567],],
'523':[[12,103],[289,180],[315,180],],
'525':[[227,150],],
'532':[[48,368],],
'538':[[384,595],],
'539':[[186,413],],
'547':[[224,84],[224,160],[315,186],[289,186],[204,78],],
'553':[[335,683],],
'556':[[12,275],],
'563':[[314,100],[48,3693],],
'567':[[384,8647],[186,379],],
'577':[[246,471],],
'588':[[395,29],],
'589':[[331,347],],
'593':[[12,473],],
'595':[[266,344],[293,112],[183,104],[215,104],[23,112],],
'604':[[381,322],],
'609':[[54,90],],
'621':[[331,110],[12,611],[39,986],],
'623':[[48,624],[83,63],],
'625':[[12,483],],
'628':[[12,502],],
'631':[[186,284],],
'633':[[12,527],],
'642':[[48,65],[39,496],],
'646':[[30,155],[135,175],],
'648':[[214,325],[96,29],],
'649':[[384,3024],[384,7095],],
'655':[[65,97],],
'656':[[158,46],[115,31],[236,31],[13,31],],
'659':[[52,188],],
'666':[[384,9654],],
'670':[[84,36],],
'671':[[165,72],],
'676':[[251,153],],
'681':[[181,704],],
'696':[[160,100],[246,110],],
'698':[[235,481],],
'700':[[48,603],[57,269],],
'712':[[82,537],],
'718':[[18,70],],
'739':[[251,242],],
'748':[[384,2502],],
'753':[[384,8815],],
'755':[[303,176],],
'776':[[44,36],],
'780':[[384,5496],],
'791':[[274,754],[274,60],[42,999],[274,74],],
'792':[[384,2013],],
'800':[[303,157],[21,119],[251,186],],
'825':[[384,4519],],
'830':[[384,5638],],
'836':[[214,279],],
'837':[[384,3394],],
'843':[[293,89],[23,89],],
'845':[[41,341],[160,177],[363,390],[84,438],[39,268],[214,221],],
'846':[[191,254],],
'847':[[95,418],],
'855':[[372,25],[178,301],],
'856':[[345,55],[395,58],[179,1171],],
'857':[[121,531],[384,1351],[274,584],],
'858':[[25,64],],
'869':[[384,3853],],
'870':[[49,342],],
'876':[[177,36],[48,1281],],
'887':[[181,551],[186,61],[384,6139],[246,1099],[48,327],],
'888':[[153,628],[384,4533],],
'891':[[358,42],[261,82],],
'908':[[243,180],],
'915':[[162,276],[384,8861],],
'918':[[181,307],],
'922':[[217,412],],
'926':[[363,718],],
'931':[[384,2567],],
'935':[[335,3008],[335,2466],],
'940':[[355,1444],],
'945':[[355,1127],],
'949':[[274,691],[153,1030],[95,131],[153,115],],
'960':[[30,347],],
'963':[[253,159],],
'973':[[30,401],],
'975':[[186,99],],
'977':[[384,3454],],
'1006':[[160,341],],
'1010':[[52,138],],
'1021':[[247,217],],
'1027':[[39,348],],
'1029':[[70,758],[197,600],],
'1041':[[82,519],],
'1062':[[364,47],],
'1068':[[131,146],[77,131],],
'1079':[[77,133],],
'1101':[[335,378],[355,762],[246,1578],[384,9321],],
'1109':[[39,52],[384,9913],[277,887],[277,877],[277,372],],
'1111':[[39,65],],
'1113':[[39,86],],
'1122':[[384,2908],],
'1123':[[70,429],[246,1333],[197,279],[355,84],[355,149],],
'1125':[[384,2632],[384,6181],[384,1540],[384,6267],[384,910],[384,1222],],
'1126':[[355,302],],
'1136':[[121,519],],
'1141':[[39,551],],
'1147':[[227,128],],
'1157':[[39,769],],
'1160':[[246,1208],],
'1162':[[121,511],],
'1165':[[39,398],],
'1168':[[39,431],],
'1177':[[42,519],],
'1180':[[384,1550],],
'1187':[[355,270],[208,38],],
'1192':[[368,103],],
'1202':[[388,70],],
'1223':[[39,747],[54,249],],
'1225':[[353,146],],
'1226':[[122,128],[277,766],],
'1229':[[153,858],],
'1231':[[246,1883],],
'1237':[[220,122],[220,48],],
'1249':[[159,130],],
'1255':[[160,559],],
'1265':[[42,1148],],
'1276':[[248,32],],
'1281':[[277,288],],
'1283':[[384,7331],],
'1304':[[344,211],],
'1305':[[355,738],[384,4796],[384,936],],
'1309':[[171,39],[242,163],[227,34],[384,3435],],
'1310':[[344,239],[344,54],[68,49],[344,234],],
'1314':[[384,3126],],
'1319':[[277,456],[42,672],[243,74],[277,302],],
'1326':[[197,86],[70,103],],
'1342':[[274,734],],
'1344':[[42,1159],[42,1096],],
'1351':[[303,70],],
'1352':[[42,176],[335,796],],
'1353':[[99,249],[101,30],],
'1374':[[342,252],],
'1375':[[98,42],],
'1397':[[217,373],],
'1406':[[49,382],],
'1416':[[355,924],],
'1417':[[224,177],],
'1424':[[384,168],[227,79],[384,7077],[171,73],],
'1428':[[42,772],],
'1444':[[278,63],],
'1452':[[232,104],],
'1457':[[162,286],[384,953],],
'1461':[[381,97],],
'1462':[[266,281],[384,8754],[344,289],[246,166],],
'1463':[[384,6159],],
'1471':[[312,21],],
'1473':[[321,384],],
'1474':[[322,97],[315,206],[302,114],],
'1505':[[384,8675],],
'1507':[[70,460],[197,310],],
'1593':[[384,1730],[160,494],],
'1631':[[181,812],],
'1636':[[125,100],],
'1667':[[384,9175],[363,338],[306,939],],
'1669':[[48,1075],],
'1694':[[48,1472],],
'1755':[[48,2150],[48,2740],[48,3205],],
'1756':[[48,2116],],
'1764':[[214,29],],
'1811':[[164,405],],
'1813':[[48,4815],],
'1826':[[213,414],],
'1841':[[181,1024],],
'1843':[[52,87],],
'1851':[[384,4073],[384,4054],[384,4101],[384,4087],],
'1867':[[48,3701],],
'1915':[[384,5579],[214,44],],
'1924':[[48,4300],[48,4069],[306,1377],[48,4522],],
'1947':[[384,4943],],
'1955':[[355,554],[336,99],[355,109],],
'1963':[[246,1921],],
'1967':[[53,77],],
'1993':[[246,1454],],
'2006':[[218,256],[218,277],],
'2009':[[49,243],],
'2013':[[233,43],],
'2017':[[160,508],],
'2023':[[359,41],],
'2026':[[152,150],],
'2034':[[84,55],],
'2040':[[49,481],],
'2049':[[50,72],[53,62],],
'2058':[[234,419],],
'2063':[[52,112],],
'2076':[[153,373],],
'2103':[[249,254],],
'2113':[[355,1017],],
'2134':[[388,78],],
'2158':[[54,878],],
'2160':[[335,959],],
'2179':[[363,489],],
'2220':[[187,192],],
'2228':[[214,73],],
'2229':[[162,89],],
'2230':[[246,762],],
'2232':[[181,944],],
'2237':[[54,1378],],
'2248':[[232,117],],
'2260':[[384,7451],],
'2283':[[60,58],],
'2301':[[368,92],[181,269],],
'2309':[[384,8515],[384,8142],],
'2313':[[344,115],],
'2323':[[384,8112],[384,7117],],
'2325':[[153,1244],],
'2332':[[153,143],[153,1196],],
'2342':[[363,658],[199,51],],
'2348':[[290,98],],
'2350':[[153,880],[137,235],[70,543],[355,387],[173,280],],
'2370':[[361,99],],
'2374':[[207,93],],
'2388':[[384,5414],],
'2415':[[384,8348],],
'2460':[[102,128],],
'2461':[[84,62],],
'2464':[[313,160],[191,224],[363,137],[218,99],],
'2468':[[84,516],[331,502],],
'2478':[[339,129],],
'2480':[[84,398],],
'2483':[[84,417],],
'2519':[[89,429],],
'2547':[[277,384],],
'2559':[[363,511],],
'2577':[[384,6566],],
'2581':[[162,232],],
'2589':[[214,316],],
'2591':[[96,44],[390,111],[384,4165],],
'2623':[[269,190],],
'2631':[[251,232],[384,1264],[99,147],[251,75],[274,270],[384,8609],],
'2663':[[122,82],],
'2673':[[102,138],],
'2701':[[105,64],],
'2702':[[384,9566],],
'2704':[[353,112],],
'2721':[[181,866],[287,86],],
'2733':[[114,64],[169,65],],
'2794':[[125,18],],
'2796':[[125,23],],
'2798':[[125,31],],
'2810':[[125,152],],
'2816':[[384,571],[125,110],],
'2819':[[125,132],],
'2831':[[125,177],],
'2842':[[125,230],],
'2852':[[125,262],],
'2863':[[363,415],],
'2898':[[181,691],],
'2920':[[146,150],],
'2949':[[153,89],],
'2977':[[246,499],],
'2986':[[214,112],],
'3054':[[188,68],[188,83],],
'3070':[[160,234],],
'3113':[[384,5457],],
'3118':[[176,75],],
'3121':[[161,410],[161,393],],
'3127':[[384,3032],],
'3143':[[162,278],[384,8848],],
'3145':[[355,1409],],
'3172':[[164,622],],
'3174':[[164,651],],
'3182':[[170,139],],
'3196':[[227,101],[171,86],],
'3214':[[172,118],],
'3229':[[384,8385],],
'3572':[[384,4706],],
'3586':[[246,1226],],
'3590':[[335,562],],
'3601':[[359,130],],
'3612':[[186,181],],
'3613':[[186,199],],
'3646':[[188,141],],
'3720':[[206,70],],
'3732':[[384,9750],],
'3741':[[384,9541],],
'3763':[[217,400],],
'3770':[[218,343],],
'3785':[[355,635],],
'3796':[[384,8507],[384,9248],[384,6422],],
'3832':[[243,210],],
'3842':[[246,86],],
'3853':[[246,250],],
'3863':[[246,396],],
'3875':[[341,206],[307,206],],
'3879':[[246,596],],
'3881':[[331,372],],
'3900':[[246,969],],
'3921':[[246,1262],],
'3932':[[246,1483],],
'3934':[[277,722],],
'3951':[[246,1712],],
'3981':[[251,168],],
'3983':[[384,1278],],
'4078':[[277,690],],
'4087':[[277,822],],
'4097':[[371,73],[280,80],],
'4125':[[339,102],],
'4146':[[305,59],],
'4190':[[384,196],],
'4261':[[331,260],],
'4374':[[335,3304],],
'4419':[[342,144],],
'4424':[[384,5643],],
'4508':[[358,244],],
'4509':[[358,246],],
'4516':[[358,280],],
'4525':[[385,66],],
'4559':[[377,15],],
'4580':[[381,75],],
'4596':[[381,510],],
'4605':[[384,3503],[384,3350],],
'4609':[[384,47],],
'4622':[[384,400],],
'4641':[[384,3992],],
'4646':[[384,2146],],
'4655':[[384,357],],
'4657':[[384,361],],
'4688':[[384,614],],
'4696':[[390,125],],
'4706':[[384,749],],
'4734':[[384,1053],],
'4738':[[384,1091],],
'4762':[[384,1417],],
'4778':[[384,1573],],
'4784':[[384,1613],],
'4825':[[384,2686],],
'4836':[[384,2203],],
'4857':[[384,2781],],
'4885':[[384,2928],],
'4898':[[384,8587],],
'4921':[[384,3443],],
'4925':[[384,3461],],
'4932':[[384,3515],],
'4935':[[384,3586],],
'4937':[[384,3591],],
'4942':[[384,3669],],
'5037':[[384,5464],],
'5043':[[384,5632],],
'5058':[[384,8740],[384,8144],],
'5059':[[384,6044],],
'5073':[[384,7152],],
'5093':[[384,6894],],
'5103':[[384,9189],],
'5135':[[384,8132],],
'5170':[[384,9104],[384,9094],],
'5186':[[384,9498],],
'5219':[[384,9849],],
},{'23':[[0,130],],
'203':[[342,295],],
'1445':[[384,758],],
'2058':[[353,68],],
},{'9':[[384,3650],],
'16':[[10,189],[251,119],[391,35],[244,94],[235,148],[235,120],[234,190],[218,135],[213,198],[42,950],[191,155],[335,2621],[189,240],[178,145],[46,77],[173,238],[162,194],[48,198],[356,33],[358,134],[137,193],[363,182],[118,85],[89,330],[226,77],],
'27':[[384,7410],],
'31':[[57,261],[384,4573],[384,4504],[277,731],[70,540],[70,632],[71,84],[384,4068],[384,3758],[384,5604],[266,364],[384,3524],[84,461],[54,115],[89,334],[382,84],[374,31],[97,26],[363,471],[363,454],[101,35],[103,73],[110,33],[363,267],[52,214],[118,216],[121,361],[384,5778],[362,62],[358,184],[128,222],[283,199],[358,153],[54,874],[150,73],[48,788],[355,1412],[265,30],[162,375],[355,1388],[355,1338],[164,498],[48,99],[42,1218],[256,28],[181,237],[181,466],[181,489],[355,370],[345,41],[341,129],[186,311],[186,330],[188,86],[188,104],[188,149],[188,188],[42,1182],[335,3374],[42,1100],[335,2391],[42,957],[197,493],[199,96],[335,2377],[334,85],[200,162],[329,31],[322,224],[320,135],[315,202],[42,545],[394,147],[42,139],[314,64],[307,129],[224,170],[286,32],[306,439],[246,1840],[39,371],[234,349],[234,392],[390,114],[25,61],[235,370],[235,409],[306,208],[25,54],[244,247],[246,818],[283,176],],
'34':[[384,8302],],
'39':[[48,823],[384,4334],[306,243],],
'63':[[179,66],[266,345],[82,538],[315,181],[289,181],],
'64':[[0,131],],
'128':[[28,28],[229,159],[148,148],],
'165':[[99,299],[99,220],[95,326],[54,750],[164,196],],
'203':[[200,171],[190,39],[200,179],[181,574],],
'241':[[110,38],],
'269':[[164,20],],
'281':[[384,1982],],
'295':[[365,112],],
'305':[[384,5116],],
'320':[[215,21],[183,21],[23,23],[293,23],],
'349':[[296,114],[142,77],[75,120],[296,89],[84,149],],
'370':[[223,51],[384,6969],[384,7496],[48,2531],],
'423':[[322,107],[128,105],],
'447':[[367,65],[250,71],],
'491':[[200,208],[200,130],[306,238],[200,104],[48,818],],
'607':[[155,44],],
'631':[[12,518],],
'654':[[123,26],],
'655':[[224,91],],
'700':[[69,81],],
'712':[[343,27],[343,50],],
'801':[[200,216],],
'861':[[48,170],[306,566],],
'878':[[384,3170],[384,6798],[384,7142],],
'888':[[181,964],],
'921':[[384,9367],[384,9399],[191,136],[384,4601],],
'996':[[65,83],],
'1020':[[283,186],[89,362],[152,188],],
'1101':[[72,35],[191,38],[396,38],],
'1131':[[251,56],],
'1132':[[266,94],],
'1278':[[296,73],[80,82],],
'1397':[[384,8087],],
'1452':[[307,32],[125,238],[341,32],],
'1513':[[294,23],],
'1680':[[296,100],],
'1849':[[244,40],],
'1911':[[384,9185],],
'2282':[[60,55],],
'3804':[[234,108],],
'4223':[[317,72],],
'5114':[[384,7486],],
},{'16':[[18,62],],
'19':[[18,22],[384,7974],],
'26':[[331,358],],
'31':[[0,134],[0,165],],
'203':[[384,5316],[235,494],],
'436':[[335,3465],[335,3476],[335,3345],[335,3385],],
'915':[[41,176],],
'2704':[[353,140],],
},{'2':[[266,117],[188,28],],
'3':[[343,96],[274,658],[160,411],[394,168],[246,768],[54,821],[208,46],[181,632],],
'5':[[384,5250],],
'12':[[160,109],[125,59],[0,136],[162,56],[53,132],],
'15':[[83,105],[253,143],[54,720],[95,287],],
'16':[[214,272],[251,211],[54,659],[95,226],[381,166],[95,274],[54,143],[54,707],[54,1291],[84,109],[99,155],],
'17':[[220,66],],
'26':[[181,171],[189,539],[181,749],[95,217],[189,526],[235,293],[363,521],],
'33':[[193,110],[352,110],[39,861],],
'35':[[381,421],],
'38':[[340,90],[384,6459],[246,1660],[84,307],[308,123],[246,856],[384,9017],[164,554],[164,583],[170,158],[381,152],[246,1415],[220,98],],
'48':[[203,50],[382,52],[181,157],[355,650],[84,372],[242,49],[311,42],[121,421],[71,52],[321,85],[387,42],[263,48],[338,44],],
'50':[[12,82],],
'52':[[164,545],],
'54':[[363,629],[103,107],[103,90],[335,3417],[274,804],[274,463],[116,62],[322,212],[70,653],[266,247],[121,176],[89,427],[363,378],[340,139],[308,172],[161,548],[84,467],[181,635],[126,29],[128,210],[150,107],[83,72],[168,28],[266,110],[191,122],[197,421],[150,90],],
'60':[[249,37],],
'62':[[335,3628],[335,3671],],
'63':[[125,101],],
'67':[[352,144],[193,144],],
'73':[[181,439],],
'77':[[112,72],[49,495],[178,284],[359,112],],
'79':[[246,1817],[174,267],[185,29],[243,245],[70,785],[277,81],[179,2],[70,12],[355,544],[48,47],[171,1226],[355,1488],[335,22],[290,59],[355,784],[344,94],[335,3794],[188,222],],
'82':[[39,503],],
'86':[[384,7777],[384,6188],[381,252],],
'121':[[311,58],[49,315],[181,423],[387,58],[59,76],[1,76],],
'131':[[274,783],],
'135':[[84,89],],
'137':[[373,48],[246,265],],
'140':[[54,229],],
'147':[[69,87],[246,727],[296,87],[84,93],[246,776],[48,3637],],
'150':[[352,77],[339,61],[193,77],],
'163':[[99,130],],
'165':[[25,58],],
'167':[[54,390],[381,441],[335,1257],[384,6698],[227,124],],
'196':[[16,118],[193,130],[54,1439],[29,184],[352,130],[274,618],[74,118],[9,184],],
'199':[[12,97],[242,98],],
'200':[[4,33],[279,29],[222,35],[392,27],[79,30],[318,29],[48,3600],],
'204':[[214,140],],
'206':[[110,22],[93,117],[156,114],],
'217':[[54,829],],
'220':[[160,265],[274,506],[160,161],[160,136],[368,69],[160,146],],
'222':[[28,42],],
'224':[[384,5899],],
'227':[[381,506],[246,335],[246,1139],],
'228':[[181,233],],
'231':[[379,208],],
'237':[[355,1277],[42,681],],
'238':[[306,1161],[54,1156],[252,83],],
'241':[[283,205],[235,324],[84,70],[396,175],],
'244':[[164,462],],
'250':[[37,51],[70,321],[162,143],[76,92],],
'251':[[246,83],],
'258':[[181,26],],
'264':[[246,1403],],
'269':[[52,155],],
'277':[[191,284],[381,285],[277,735],[384,7711],[218,291],[384,2133],[80,127],[381,618],[224,144],[381,120],[355,1179],[381,413],[381,559],],
'283':[[174,72],],
'284':[[251,62],],
'295':[[160,654],],
'298':[[246,892],[381,471],],
'299':[[384,7286],[303,102],[186,70],],
'301':[[134,144],[313,313],[302,146],],
'316':[[65,143],[363,321],],
'321':[[214,355],],
'339':[[368,45],[101,49],[176,199],],
'349':[[384,6886],],
'355':[[274,512],],
'367':[[39,707],[266,352],],
'376':[[303,142],[70,301],],
'397':[[363,561],],
'429':[[191,184],[340,74],[193,143],[352,143],[52,160],[121,202],[308,107],[359,59],],
'445':[[220,39],],
'447':[[251,39],[235,314],[30,53],[263,64],[84,477],[84,338],[335,2402],],
'449':[[384,6511],],
'465':[[321,274],],
'466':[[57,209],],
'478':[[204,41],],
'482':[[358,365],],
'491':[[121,445],[384,8894],[121,213],[121,131],[134,129],[302,131],],
'493':[[331,227],],
'505':[[381,394],],
'525':[[48,2543],],
'530':[[246,901],],
'534':[[39,568],],
'550':[[331,484],],
'553':[[335,949],],
'572':[[39,764],],
'576':[[174,129],],
'579':[[12,302],],
'593':[[246,1161],[277,818],[246,951],],
'595':[[251,189],],
'596':[[246,1362],],
'597':[[153,1218],],
'605':[[84,375],],
'609':[[186,256],[162,184],[84,328],],
'613':[[246,939],],
'615':[[332,176],[30,305],],
'617':[[246,1620],],
'649':[[161,203],],
'655':[[160,123],],
'659':[[355,955],],
'681':[[95,429],],
'696':[[75,101],],
'700':[[321,347],[57,84],],
'712':[[317,69],[317,25],[356,31],[155,23],[17,25],],
'723':[[246,1837],],
'739':[[251,84],],
'776':[[344,126],],
'797':[[186,396],],
'801':[[186,147],],
'819':[[84,330],],
'844':[[384,5148],],
'859':[[25,67],],
'887':[[42,1172],[384,8950],],
'888':[[246,886],],
'892':[[57,250],[355,1066],[121,430],[384,8344],],
'894':[[331,140],],
'901':[[335,1094],[334,61],],
'921':[[153,903],[153,668],[181,298],],
'922':[[246,104],],
'923':[[181,149],[181,175],[160,88],[336,57],[381,579],],
'928':[[176,174],[384,7441],],
'936':[[89,411],],
'960':[[42,757],],
'979':[[73,80],],
'1074':[[186,301],],
'1101':[[174,19],[121,61],[355,346],[218,298],],
'1117':[[335,2983],[355,1079],[54,103],[164,160],[355,707],[358,149],[257,160],[273,44],[283,149],[42,697],[153,298],[204,69],[249,85],[331,375],[385,58],[181,927],[322,221],[314,59],[128,219],[50,107],[39,634],[249,95],],
'1119':[[52,218],],
'1139':[[39,237],],
'1154':[[39,310],],
'1208':[[39,891],],
'1219':[[39,738],],
'1220':[[42,712],],
'1261':[[52,284],],
'1318':[[242,177],],
'1333':[[75,118],],
'1342':[[274,697],],
'1357':[[42,422],],
'1370':[[164,479],[86,254],],
'1399':[[246,168],],
'1406':[[152,145],[42,575],],
'1431':[[121,244],],
'1433':[[49,462],],
'1448':[[214,104],[340,110],[308,143],[49,107],],
'1450':[[116,126],[340,118],[266,155],[75,130],[308,151],],
'1452':[[384,4065],],
'1466':[[99,267],],
'1480':[[42,1197],],
'1503':[[384,4274],],
'1538':[[355,52],[186,290],],
'1606':[[387,50],[71,60],[311,50],[382,60],],
'1614':[[48,665],],
'1719':[[161,102],],
'1741':[[170,104],],
'1819':[[381,400],],
'1837':[[156,116],],
'1839':[[160,86],],
'1849':[[118,36],],
'1862':[[48,3657],],
'1914':[[48,3977],[306,1308],],
'1997':[[340,113],[308,146],],
'2016':[[49,283],],
'2022':[[152,174],],
'2032':[[49,422],],
'2039':[[49,489],],
'2045':[[355,1287],],
'2103':[[54,159],],
'2123':[[257,142],],
'2135':[[95,188],],
'2160':[[335,970],],
'2212':[[296,152],[80,118],],
'2228':[[181,147],],
'2235':[[54,1381],[54,1354],],
'2241':[[358,359],[261,194],],
'2272':[[84,403],],
'2313':[[65,125],],
'2318':[[97,23],[164,343],],
'2375':[[313,446],],
'2384':[[90,60],[246,792],],
'2392':[[277,763],],
'2468':[[137,251],[336,55],[173,296],],
'2474':[[84,358],],
'2484':[[84,428],],
'2488':[[339,69],],
'2519':[[89,222],],
'2541':[[90,27],],
'2577':[[251,31],],
'2585':[[244,123],],
'2598':[[384,4648],],
'2671':[[384,2961],],
'2715':[[112,37],],
'2718':[[112,61],[112,98],],
'2751':[[121,90],],
'2781':[[122,66],],
'2884':[[135,195],],
'2938':[[152,63],],
'2945':[[152,203],],
'2989':[[344,295],],
'3129':[[161,509],],
'3198':[[227,63],[171,57],],
'3213':[[172,133],],
'3214':[[396,111],],
'3253':[[384,5483],[384,7013],[381,498],],
'3484':[[179,655],],
'3562':[[181,143],],
'3583':[[181,572],],
'3647':[[188,157],],
'3648':[[246,770],],
'3696':[[194,109],],
'3744':[[214,244],],
'3789':[[277,753],],
'3840':[[246,61],],
'3875':[[246,555],],
'3905':[[246,1042],],
'3924':[[246,1304],],
'3979':[[313,464],],
'4074':[[277,672],],
'4147':[[305,63],],
'4209':[[313,376],],
'4249':[[331,186],],
'4264':[[331,435],],
'4322':[[335,2692],[335,2975],[335,1949],[335,3496],],
'4640':[[384,278],],
'4714':[[384,782],],
'4826':[[384,2088],],
'4881':[[384,2846],],
'5032':[[384,5311],],
'5082':[[384,6639],],
'5098':[[384,6988],],
'5222':[[384,9883],],
},{'18':[[84,499],],
'25':[[384,4255],],
'43':[[30,364],[306,932],[306,802],[39,804],[321,91],[246,878],[186,431],[70,313],[181,752],[164,352],[39,833],[153,1300],[96,157],[153,1015],[153,366],[0,139],],
'67':[[384,5251],[384,5484],[384,4275],[384,6640],[384,6989],[84,429],[179,656],],
'83':[[384,5064],],
'149':[[384,6626],[384,9341],[381,334],],
'167':[[384,8792],],
'199':[[86,188],[187,140],[204,71],[209,186],[210,131],[100,126],[135,131],[229,149],[57,195],[247,190],[269,155],[270,192],[283,127],[284,156],[285,119],[36,127],[34,120],[180,143],[20,146],[332,129],[148,138],[162,187],[381,555],[146,122],[173,216],[224,141],[137,171],[394,129],],
'227':[[186,454],],
'250':[[384,4702],[384,6929],],
'251':[[84,494],[384,5218],],
'252':[[384,5851],],
'264':[[384,6675],],
'271':[[384,6892],[384,6612],],
'277':[[384,9555],[313,157],[363,134],[218,96],],
'280':[[384,3684],],
'489':[[384,6018],],
'500':[[384,8899],],
'515':[[384,3791],],
'532':[[384,9537],],
'609':[[384,5888],],
'633':[[384,4313],],
'791':[[384,7842],[384,7239],],
'1310':[[384,5558],],
'1375':[[384,9275],],
'1444':[[384,2693],],
'1471':[[384,9128],],
'1474':[[384,7585],[384,7257],],
'1667':[[384,9661],],
'1745':[[48,1931],],
'1819':[[384,9331],[384,8115],],
'1843':[[384,4425],],
'2309':[[384,9250],],
'2549':[[384,9515],],
'3253':[[384,7368],],
'4622':[[384,3344],],
'4847':[[384,5960],],
'5013':[[384,5037],],
'5058':[[384,9239],],
'5210':[[384,9820],],
},{'12':[[121,335],[381,143],],
'13':[[384,4925],],
'16':[[96,107],],
'26':[[353,171],],
'48':[[161,479],],
'50':[[384,4383],],
'68':[[0,140],],
'77':[[353,144],],
'91':[[353,47],],
'94':[[353,22],],
'128':[[394,39],],
'147':[[353,86],[353,104],[353,80],],
'164':[[112,89],],
'215':[[384,102],],
'248':[[394,173],],
'264':[[84,322],],
'267':[[381,406],],
'275':[[384,9314],[384,9294],[384,9303],[384,9858],],
'305':[[39,573],],
'346':[[353,102],],
'615':[[353,84],],
'696':[[246,147],],
'861':[[246,1094],],
'1003':[[246,475],],
'1667':[[384,9676],],
'1865':[[54,251],],
'2671':[[384,840],],
'3128':[[161,474],],
'3572':[[384,8023],[384,8047],],
'4458':[[353,132],],
'4917':[[384,3413],],
},{'69':[[0,141],],
},{'70':[[0,142],],
'2543':[[246,1755],],
},{'71':[[0,143],],
},{'2':[[74,125],[16,125],],
'13':[[212,53],[145,51],],
'43':[[189,516],],
'47':[[214,187],[274,435],],
'48':[[153,63],],
'61':[[381,465],],
'63':[[181,373],[30,348],[181,102],[36,180],[39,66],[373,93],[204,64],[164,363],[18,71],[206,71],[343,72],[12,503],[190,73],[49,291],[49,343],[52,139],[160,303],[153,1031],[54,1379],[57,270],[11,49],[235,285],[84,418],[30,173],[355,853],[246,1324],[121,566],[270,232],[274,755],[181,867],],
'67':[[340,91],[170,159],[164,584],[308,124],[164,555],[164,480],[246,857],[53,133],],
'72':[[0,144],],
'75':[[96,176],],
'77':[[197,451],],
'99':[[381,315],],
'136':[[320,148],],
'138':[[252,93],],
'139':[[164,338],],
'146':[[220,72],[191,180],],
'152':[[353,90],],
'158':[[335,2956],],
'164':[[368,75],[162,93],],
'165':[[373,101],],
'197':[[274,580],],
'199':[[12,490],[12,478],],
'206':[[164,415],],
'230':[[164,628],[320,128],[84,228],],
'241':[[246,222],],
'244':[[220,94],],
'248':[[277,521],[181,79],],
'250':[[363,500],[340,124],[164,259],[308,157],[176,213],],
'277':[[335,3362],[396,181],],
'281':[[251,330],],
'295':[[367,35],],
'317':[[181,438],],
'340':[[160,336],],
'347':[[94,50],],
'353':[[306,1086],],
'375':[[253,212],],
'393':[[363,423],],
'408':[[160,545],],
'426':[[363,409],],
'436':[[335,3402],],
'438':[[235,488],],
'447':[[170,235],[30,307],],
'451':[[335,963],],
'470':[[153,790],[153,696],[153,845],],
'515':[[39,356],[48,3049],],
'516':[[121,571],],
'544':[[395,133],],
'593':[[42,1117],],
'595':[[308,64],[307,86],[341,86],[340,64],],
'609':[[121,355],],
'682':[[191,240],[335,2457],],
'926':[[30,411],],
'935':[[313,254],],
'949':[[178,265],],
'955':[[30,311],],
'958':[[210,169],],
'1016':[[246,588],],
'1072':[[187,153],],
'1081':[[164,280],],
'1192':[[113,39],],
'1197':[[48,3553],],
'1225':[[121,409],],
'1279':[[253,151],],
'1329':[[145,43],[212,45],],
'1386':[[89,376],],
'1392':[[42,442],],
'1424':[[135,157],[100,200],],
'1462':[[384,1136],],
'1510':[[217,348],],
'1528':[[48,162],],
'1684':[[181,547],],
'1857':[[48,3640],],
'1930':[[355,1424],],
'1963':[[210,174],],
'1966':[[363,725],],
'1993':[[246,1463],],
'2013':[[49,259],],
'2045':[[197,251],],
'2154':[[54,688],[95,255],],
'2375':[[253,180],],
'2415':[[306,1101],],
'2464':[[191,288],],
'2481':[[306,1190],],
'2498':[[283,172],],
'2577':[[197,544],],
'2604':[[96,124],],
'2606':[[96,138],],
'2709':[[371,111],],
'2743':[[118,174],[244,205],],
'2886':[[152,169],],
'2895':[[181,699],],
'3656':[[210,176],],
'3767':[[218,361],],
'4052':[[331,488],],
'4057':[[274,652],],
},{'2':[[179,38],],
'7':[[70,10],[70,783],[171,1224],[335,20],[185,27],],
'13':[[384,8207],],
'15':[[179,49],],
'26':[[290,121],],
'55':[[0,146],[344,92],[355,782],[290,57],[355,542],],
'56':[[335,3792],],
'117':[[179,0],],
'137':[[277,88],],
'224':[[179,964],],
'226':[[179,642],],
'275':[[384,5751],[384,8410],],
'279':[[355,1486],],
'433':[[246,1815],],
'555':[[243,243],[277,79],],
'928':[[179,55],],
'1180':[[179,93],[290,144],],
'1805':[[174,265],],
'3654':[[188,220],],
},{'7':[[387,56],[71,50],[387,48],[387,40],[382,58],[382,50],[311,40],[311,48],[311,56],[71,58],],
'12':[[161,527],[339,271],],
'16':[[96,173],],
'23':[[308,42],[293,78],[215,78],[340,155],[197,149],[183,78],[340,42],[70,268],[23,78],[308,188],],
'26':[[161,80],],
'39':[[96,175],],
'73':[[210,177],],
'74':[[0,147],],
'75':[[48,4949],],
'144':[[306,1612],],
'147':[[306,456],],
'215':[[179,1566],[179,1516],[179,1314],[48,2822],[48,3016],[179,1461],],
'333':[[48,2820],[179,1459],[179,1514],[179,1312],[48,3014],[179,1564],],
'359':[[249,200],],
'586':[[48,3019],[48,2825],],
'633':[[306,1108],],
'634':[[306,1197],],
'1033':[[353,163],],
'1249':[[186,136],],
'1474':[[48,2827],[48,2838],[48,3022],],
'1651':[[306,1587],],
'1706':[[335,145],[70,244],[197,125],[179,901],[48,1704],[306,386],[153,202],[54,303],],
'1819':[[48,2842],[48,2832],[48,3025],],
'1905':[[306,1199],[306,1110],],
'1908':[[306,1584],],
'1978':[[48,4948],],
'1979':[[48,4917],],
'2589':[[96,92],],
'2597':[[96,79],],
'3518':[[179,1523],[179,1321],[179,1468],[179,1573],],
'3530':[[179,1376],[179,1494],],
'3531':[[179,1436],[179,1598],],
'3532':[[179,1548],[179,1372],],
'3535':[[179,1317],[179,1569],[179,1464],[179,1519],],
'3656':[[210,167],],
'4150':[[306,377],[306,1578],[306,1124],[306,1062],[306,356],[306,452],],
'4152':[[306,499],[306,741],[306,1608],],
'4153':[[306,660],],
'4154':[[306,691],],
'4180':[[306,1591],],
},{'75':[[0,148],],
},{'2':[[186,487],],
'13':[[384,2379],[261,39],],
'14':[[243,36],],
'15':[[396,144],[355,834],[396,66],[396,31],[363,496],],
'16':[[335,2425],[335,2695],[214,40],[234,225],[249,91],[384,3963],[10,224],[39,244],[384,1628],[224,217],[335,1952],[189,275],],
'17':[[161,292],[261,80],],
'18':[[306,47],[312,31],[49,508],],
'20':[[303,58],],
'23':[[14,50],],
'31':[[313,243],[384,5802],[335,3766],[239,27],[384,1248],],
'32':[[358,270],],
'33':[[329,33],],
'34':[[39,99],],
'39':[[384,5007],[384,7949],[353,151],],
'40':[[321,93],],
'47':[[214,108],],
'48':[[343,98],[162,140],[159,137],[159,121],[290,79],[57,239],[100,162],[249,33],[135,209],[249,305],[246,1157],[82,314],],
'52':[[340,158],[308,191],[246,1343],],
'54':[[54,1416],[54,1223],[48,3682],],
'55':[[42,1056],[99,133],[54,95],[243,191],[246,332],[153,326],[246,323],[335,553],],
'56':[[249,154],],
'61':[[331,115],[246,341],],
'62':[[274,794],[39,109],[384,7944],[12,68],[384,4747],],
'65':[[191,137],[234,109],[25,62],[384,4335],[181,965],[181,575],[322,108],[306,244],[164,197],[128,106],[384,6970],[246,819],[384,7487],[306,239],[48,819],[48,824],[265,31],],
'67':[[84,90],[246,62],[246,1416],[246,1661],[153,1219],],
'73':[[84,229],],
'74':[[179,50],],
'76':[[0,149],],
'77':[[384,1785],],
'78':[[335,155],],
'79':[[277,588],],
'82':[[384,7309],[235,207],[384,4980],[355,989],],
'84':[[392,31],[4,37],[222,39],[279,33],[79,34],[318,33],],
'87':[[384,5469],],
'89':[[396,77],[335,3187],[396,171],],
'91':[[246,991],],
'107':[[384,1160],[329,44],[329,61],[384,7354],],
'121':[[257,185],[200,303],],
'125':[[384,8437],],
'131':[[246,379],],
'135':[[384,6299],[361,101],[54,503],[162,238],[52,180],[153,225],[118,210],[52,170],[181,988],[52,104],[337,95],[197,450],[84,60],[277,556],[244,241],],
'137':[[243,252],[355,1116],],
'139':[[214,298],[335,3266],],
'140':[[315,72],[4,43],[244,51],[112,58],[235,68],[157,50],[318,39],[392,37],[118,50],[222,45],[279,39],[384,6986],[79,40],[289,72],],
'143':[[87,87],[153,360],],
'144':[[242,106],],
'145':[[48,4962],],
'149':[[306,1080],[342,194],],
'162':[[49,320],],
'163':[[112,71],],
'164':[[251,170],],
'165':[[384,1340],[28,48],[384,7381],[153,533],[355,658],],
'167':[[329,56],[246,811],],
'176':[[164,181],],
'177':[[176,91],],
'195':[[381,455],],
'197':[[321,172],[161,572],],
'199':[[246,1423],[335,1462],[246,1459],[363,341],[153,72],],
'203':[[277,342],[384,5462],],
'206':[[49,49],[384,4083],],
'208':[[99,59],],
'215':[[9,128],[384,6691],[29,128],],
'217':[[384,1932],[384,2467],],
'220':[[189,622],],
'224':[[116,30],[231,54],],
'225':[[183,106],[215,106],[95,320],[335,3631],[23,114],[54,739],[335,1553],[189,411],[181,345],[293,114],[95,306],],
'230':[[42,818],[54,494],],
'231':[[379,193],[102,109],[384,2097],],
'237':[[156,79],[196,83],[263,74],[235,81],[156,89],[196,73],],
'241':[[197,436],[70,668],[322,131],[373,59],[128,129],[373,26],[253,85],],
'244':[[164,366],],
'250':[[301,51],[384,4442],],
'259':[[384,6084],[6,93],],
'269':[[266,79],[266,138],],
'271':[[251,111],[384,2079],[384,4865],[384,4431],],
'277':[[121,292],[384,3213],[170,252],[246,783],[384,3003],[191,252],[12,330],[48,3518],[277,664],[246,1049],[384,322],[189,521],[153,112],[355,862],[335,3484],[48,854],[102,121],[306,274],[296,65],[189,586],],
'279':[[384,5976],],
'285':[[355,943],[277,523],],
'290':[[384,302],],
'292':[[363,437],],
'296':[[160,632],],
'299':[[181,663],[277,713],[277,677],],
'306':[[355,267],],
'307':[[246,241],],
'313':[[12,543],],
'316':[[89,229],[384,3770],[384,3781],[384,3951],],
'321':[[214,117],[227,147],],
'336':[[384,4606],],
'338':[[313,237],],
'339':[[189,370],[34,105],[10,319],[89,274],[178,193],[269,140],[270,177],[180,128],[86,173],[247,175],[234,320],[198,52],[198,83],[187,125],[148,123],[100,111],[209,171],[146,107],[283,112],[210,116],[229,134],[332,114],[284,141],[213,328],[137,156],[285,104],[394,114],[135,116],[57,180],[173,201],[49,435],[36,112],[20,131],],
'344':[[162,338],[84,457],[164,155],[162,319],[253,129],[162,226],[84,505],[70,65],[384,5028],[384,5154],[336,92],[84,341],],
'346':[[84,364],],
'349':[[384,8956],[367,125],[250,122],],
'353':[[189,137],[246,645],],
'370':[[384,6313],[266,147],[321,132],[170,185],],
'371':[[384,7370],],
'372':[[197,458],],
'373':[[246,358],],
'379':[[363,537],],
'381':[[142,180],],
'382':[[153,531],],
'395':[[350,214],],
'411':[[122,135],[331,338],],
'417':[[355,443],],
'419':[[113,63],],
'422':[[178,293],],
'424':[[349,45],],
'425':[[335,525],[142,90],],
'432':[[321,236],],
'443':[[384,8644],],
'445':[[54,79],],
'447':[[42,648],[235,272],],
'452':[[313,81],[89,419],],
'465':[[49,458],],
'468':[[58,54],],
'469':[[359,111],],
'473':[[246,796],],
'474':[[355,45],],
'479':[[289,193],],
'489':[[12,596],[121,47],],
'491':[[12,195],],
'496':[[12,24],],
'498':[[384,7202],],
'502':[[335,3394],],
'506':[[384,9243],],
'514':[[39,354],],
'515':[[306,211],[48,791],],
'522':[[355,1281],[242,111],],
'523':[[48,3572],],
'534':[[384,742],],
'537':[[384,2450],[384,1830],[384,8712],[384,1715],[384,6831],],
'541':[[306,754],],
'548':[[199,74],[363,681],],
'550':[[48,2340],],
'553':[[89,69],],
'564':[[125,249],],
'589':[[292,37],[48,843],[121,281],[213,277],[12,319],[306,263],],
'593':[[258,50],[326,49],[294,45],[355,414],],
'595':[[381,134],[214,156],],
'596':[[224,148],[303,50],],
'612':[[321,111],],
'613':[[384,642],[84,473],[174,38],[344,314],[160,607],[355,227],],
'641':[[12,576],],
'648':[[227,153],],
'649':[[384,492],],
'664':[[156,112],],
'667':[[277,347],],
'681':[[95,451],[95,54],[95,440],[335,2384],],
'682':[[54,1188],],
'696':[[328,29],[153,634],[328,21],[112,93],],
'700':[[321,332],[210,146],],
'704':[[304,306],],
'709':[[164,109],],
'712':[[343,67],],
'731':[[18,73],],
'788':[[277,935],],
'791':[[52,60],],
'792':[[339,200],],
'795':[[278,53],],
'800':[[384,1300],],
'817':[[384,5140],[384,4038],],
'818':[[274,97],],
'839':[[215,69],[293,69],[183,69],[23,69],],
'849':[[23,124],[293,124],],
'855':[[363,427],[331,281],[244,157],],
'857':[[384,1689],[54,1269],],
'861':[[384,7964],[381,526],[340,135],[308,168],],
'866':[[384,5745],[172,161],[363,363],[217,464],[353,63],[54,1348],[337,78],],
'869':[[381,192],[164,448],],
'876':[[355,100],[84,536],],
'888':[[186,376],[384,7417],[344,309],],
'890':[[384,5185],[28,46],],
'891':[[355,1325],],
'894':[[28,69],],
'897':[[344,155],[355,284],[243,139],],
'898':[[384,5346],],
'904':[[191,127],[381,444],],
'917':[[331,156],],
'919':[[358,330],[261,170],],
'926':[[335,1246],[395,117],[335,1648],[138,35],[335,2541],[335,965],[335,1601],[39,88],[384,9915],[335,1736],[384,9445],[335,1797],],
'938':[[249,264],],
'940':[[384,2321],],
'946':[[30,238],],
'949':[[296,30],],
'950':[[30,266],[313,289],],
'955':[[246,666],],
'958':[[335,2871],[335,2868],],
'963':[[361,80],[186,457],],
'969':[[342,107],],
'1007':[[287,99],],
'1033':[[262,24],[381,567],[219,24],[213,372],],
'1101':[[246,636],],
'1108':[[384,2965],],
'1109':[[384,1226],[39,83],],
'1117':[[246,1607],],
'1119':[[162,53],],
'1150':[[39,299],],
'1170':[[384,2283],[384,1773],],
'1180':[[384,3426],],
'1186':[[355,686],[39,538],],
'1211':[[384,3330],],
'1217':[[214,17],],
'1220':[[39,740],],
'1229':[[384,9758],],
'1231':[[277,814],[335,546],],
'1233':[[188,153],[234,353],],
'1237':[[395,139],],
'1242':[[39,846],],
'1255':[[384,88],[384,1087],],
'1267':[[384,2614],],
'1276':[[384,4643],],
'1304':[[242,170],],
'1310':[[384,5061],],
'1335':[[217,508],[278,23],],
'1338':[[130,26],],
'1342':[[384,4097],],
'1352':[[335,680],[344,112],[75,82],],
'1353':[[153,55],[153,690],[99,230],],
'1376':[[42,331],],
'1382':[[246,1366],],
'1403':[[341,105],[307,105],],
'1404':[[242,116],[99,294],],
'1406':[[42,584],],
'1412':[[384,8134],],
'1424':[[384,550],[384,8490],[384,8482],[384,5438],],
'1433':[[371,101],[239,23],[384,2730],[280,108],],
'1436':[[42,834],],
'1445':[[384,2234],],
'1450':[[42,886],],
'1452':[[214,264],[84,206],[54,123],[84,212],],
'1462':[[384,591],[384,2925],[274,148],],
'1464':[[384,9744],],
'1469':[[384,3610],],
'1474':[[162,297],],
'1487':[[289,54],[315,54],[42,1278],],
'1502':[[160,130],],
'1532':[[174,126],],
'1540':[[384,2075],],
'1575':[[95,185],[54,464],],
'1582':[[384,2719],],
'1644':[[48,3296],[306,536],[48,915],[48,2776],[48,2256],],
'1667':[[48,4008],],
'1716':[[48,1749],],
'1719':[[384,250],],
'1765':[[384,9841],],
'1778':[[112,42],[353,175],],
'1812':[[48,2672],[231,114],[84,78],[48,3632],],
'1814':[[84,492],],
'1840':[[277,708],],
'1854':[[48,3605],],
'1857':[[355,725],],
'1910':[[384,847],],
'1953':[[235,220],],
'1955':[[355,38],],
'1967':[[384,5066],[160,273],],
'1992':[[214,99],],
'2007':[[384,1749],],
'2012':[[49,252],],
'2015':[[49,279],],
'2018':[[49,306],],
'2022':[[49,352],],
'2045':[[49,494],],
'2051':[[80,120],[296,154],[384,4394],],
'2052':[[181,179],],
'2060':[[384,3634],],
'2077':[[235,214],],
'2079':[[331,317],],
'2111':[[246,1386],],
'2113':[[121,543],[246,723],[246,753],],
'2148':[[153,1019],[339,296],],
'2160':[[384,2266],[384,6621],[384,2743],],
'2179':[[384,9258],],
'2258':[[181,776],],
'2275':[[384,5508],],
'2313':[[313,471],[384,6889],],
'2324':[[68,81],],
'2342':[[384,8309],[384,632],],
'2348':[[70,419],[197,269],],
'2371':[[191,205],],
'2384':[[153,119],],
'2388':[[384,9832],[384,7844],[384,5964],[384,3700],[384,3809],],
'2395':[[76,87],],
'2407':[[170,75],],
'2445':[[183,63],[215,63],[387,102],[384,6931],[311,102],],
'2452':[[82,553],[384,4062],[274,108],[164,56],[144,31],[140,25],],
'2466':[[384,7483],[384,6636],[384,7632],],
'2481':[[384,9136],],
'2500':[[160,602],],
'2502':[[86,257],],
'2509':[[187,166],],
'2517':[[93,115],],
'2530':[[178,283],],
'2532':[[209,251],[363,334],],
'2585':[[213,469],[246,1393],],
'2603':[[96,121],],
'2612':[[164,348],],
'2624':[[384,4548],],
'2640':[[331,247],],
'2654':[[100,182],],
'2655':[[125,183],],
'2658':[[122,93],],
'2675':[[384,9549],[384,3708],],
'2685':[[150,49],[103,49],],
'2698':[[105,42],],
'2703':[[106,45],],
'2715':[[384,7437],],
'2738':[[335,985],],
'2743':[[384,4683],],
'2758':[[121,389],],
'2762':[[121,226],],
'2784':[[122,105],],
'2787':[[384,4821],],
'2799':[[125,33],],
'2805':[[125,52],],
'2810':[[125,120],],
'2816':[[384,396],],
'2886':[[313,439],[213,351],[189,396],],
'2915':[[243,49],[266,115],],
'2976':[[188,191],],
'2987':[[153,1324],],
'3005':[[274,80],[153,1246],[395,104],],
'3046':[[159,118],],
'3088':[[355,656],[186,206],[186,338],[160,650],],
'3095':[[384,225],[384,2240],],
'3113':[[161,221],],
'3155':[[164,329],],
'3158':[[331,49],[174,240],[164,378],],
'3174':[[384,479],],
'3198':[[384,1394],],
'3203':[[304,241],[227,90],],
'3204':[[384,1501],],
'3252':[[174,275],],
'3253':[[384,1455],[384,7297],[384,5033],[384,1825],[384,4992],[384,4404],[384,4269],[384,9453],[384,5243],[384,824],[384,4452],[384,5400],[176,172],[384,8336],[384,2257],[384,2274],[384,6823],[384,2647],[384,2725],[384,3206],[384,2996],[384,8891],[384,8565],],
'3275':[[246,685],[246,1369],],
'3557':[[384,9072],],
'3566':[[181,282],],
'3581':[[181,444],],
'3611':[[186,134],],
'3620':[[186,386],],
'3637':[[188,51],],
'3651':[[261,183],[358,343],],
'3696':[[353,143],],
'3709':[[200,278],],
'3732':[[210,144],[210,48],],
'3747':[[274,88],],
'3784':[[249,144],],
'3787':[[355,813],[355,144],],
'3820':[[278,31],],
'3824':[[384,2915],],
'3829':[[384,6249],],
'3875':[[307,174],[384,1438],[341,174],],
'3880':[[246,603],],
'3887':[[384,6904],],
'3911':[[384,878],],
'3938':[[246,1575],[246,1588],],
'3949':[[246,1705],],
'3955':[[246,1833],],
'4095':[[384,985],],
'4104':[[384,1411],],
'4121':[[303,105],],
'4144':[[304,298],],
'4201':[[384,584],],
'4203':[[313,117],],
'4209':[[355,1070],],
'4245':[[331,136],],
'4250':[[331,189],],
'4264':[[331,398],],
'4281':[[384,7723],],
'4376':[[335,3351],],
'4405':[[384,4715],[384,6748],],
'4457':[[353,124],],
'4470':[[355,130],],
'4471':[[355,135],],
'4554':[[384,7057],[384,1707],],
'4612':[[384,53],],
'4676':[[384,503],],
'4685':[[384,3529],],
'4721':[[384,836],],
'4727':[[384,994],],
'4801':[[384,1784],],
'4818':[[384,1968],],
'4910':[[384,3358],],
'4944':[[384,3812],],
'4979':[[384,4261],],
'4991':[[384,4473],],
'4997':[[384,4646],],
'5010':[[384,4937],],
'5031':[[384,5307],],
'5116':[[384,8896],],
'5174':[[384,9177],[384,9171],],
'5197':[[384,9652],],
'5200':[[384,9704],],
'5216':[[384,9838],],
},{'2':[[335,38],],
'7':[[249,12],[185,19],[179,1627],[171,1216],[179,11],],
'13':[[384,8233],[384,6245],],
'27':[[355,1459],],
'56':[[249,327],],
'77':[[30,267],[313,290],[355,687],[384,7724],[0,150],],
'117':[[335,0],],
'226':[[335,91],],
'275':[[384,7546],[384,8161],[384,5596],],
'375':[[70,464],[70,80],[197,63],[197,314],],
'928':[[335,154],],
},{'2':[[161,460],],
'10':[[384,3265],],
'15':[[186,164],[181,347],[174,145],[384,2059],[12,589],[186,297],[381,450],[42,1134],[44,131],[381,206],[186,429],[164,614],[355,1365],[188,163],[160,257],[188,241],[218,283],[246,917],[341,199],[246,1726],[49,413],[150,81],[121,558],[331,475],[331,418],[331,202],[103,81],[307,199],[306,793],[303,174],[303,45],[296,102],[296,84],[102,65],[274,738],[277,745],[181,305],[277,508],],
'23':[[384,5013],[48,283],[384,4994],[249,230],[384,7489],],
'74':[[70,11],[174,266],[290,58],[277,80],[185,28],[335,21],[246,1816],[335,3793],[344,93],[243,244],[70,784],[355,543],[179,1],[355,1487],[188,221],[171,1225],[355,783],],
'78':[[0,151],[355,1460],[171,1217],[355,688],[70,465],[30,268],[197,315],[335,1],[185,20],[249,13],[313,291],[249,328],[197,64],[179,12],[70,81],[179,1628],],
'89':[[197,323],[70,473],[161,476],[48,3587],[306,38],[277,207],[306,917],],
'149':[[54,125],[54,88],[54,73],[306,96],[54,43],[48,3634],[153,524],[335,2323],[335,2292],[335,1855],[54,384],[48,96],[153,1326],[153,59],[153,244],[335,1842],],
'275':[[384,2112],],
'370':[[48,46],],
'545':[[48,9],[12,173],[171,1274],[54,26],[185,77],[306,1],[54,1535],[48,4983],[12,582],[48,35],],
'546':[[197,44],[12,182],[70,41],],
'547':[[384,8431],],
'580':[[48,1],[200,280],[12,362],[171,1282],[39,540],[185,85],[306,63],[306,20],[121,493],[121,256],[306,1623],[12,547],[48,27],],
'950':[[335,2282],],
'1326':[[306,132],[48,210],],
'1351':[[249,44],],
'2081':[[197,634],[171,1266],[95,207],[306,10],[54,1],[95,505],[197,26],[185,69],[306,1615],],
'2083':[[277,209],[185,55],[277,272],[197,1],[171,1252],[153,1432],[54,10],[277,590],[153,21],[249,312],[54,1521],[355,1467],],
'2147':[[54,643],],
'2329':[[179,1636],[179,22],[185,38],[266,164],[384,4776],[266,372],[70,1],[153,10],[171,1235],[153,1423],],
'2331':[[171,1244],[185,47],[153,1],[70,23],[70,794],[355,1480],[197,626],[197,16],],
'2702':[[277,587],],
'2915':[[274,447],],
'3625':[[186,474],],
'4277':[[335,281],],
'4278':[[335,443],],
'4281':[[335,1832],],
'4282':[[335,3174],],
'4283':[[335,3342],],
'4290':[[335,677],],
'4810':[[384,1862],],
'4940':[[384,3615],],
'5108':[[384,7337],],
},{'79':[[0,152],[12,363],[12,548],[30,269],[39,541],[48,2],[48,28],[54,11],[54,1522],[70,2],[70,24],[70,82],[70,466],[70,795],[121,257],[121,494],[153,2],[153,11],[153,22],[153,1424],[153,1433],[171,1218],[171,1236],[171,1245],[171,1253],[171,1283],[179,13],[179,23],[179,1629],[179,1637],[185,21],[185,39],[185,48],[185,56],[185,86],[197,2],[197,17],[197,65],[197,316],[197,627],[200,281],[249,14],[249,313],[249,329],[266,165],[266,373],[277,210],[277,273],[277,591],[306,21],[306,64],[306,1624],[313,292],[335,2],[355,689],[355,1461],[355,1468],[355,1481],[384,4777],[384,7338],],
'4280':[[384,8163],],
},{'2':[[227,212],[384,5607],[355,106],[12,45],[381,43],[227,239],[306,1413],[83,112],[243,39],[306,114],[277,4],[174,281],[48,128],[48,389],[171,1326],[277,913],[355,804],[171,98],[355,67],],
'12':[[213,125],[10,116],[234,117],[189,122],],
'15':[[384,9922],[307,211],[341,211],],
'23':[[231,39],[30,409],[153,294],[89,349],[277,380],],
'26':[[351,47],[30,345],],
'38':[[266,198],[266,174],],
'47':[[377,54],[171,610],[377,51],[245,7],[124,1],[369,14],[369,490],[377,4],],
'59':[[313,54],],
'77':[[191,206],[153,56],],
'80':[[185,22],[179,1630],[171,1219],[249,330],[355,1462],[249,15],[70,83],[197,66],[197,317],[70,467],[0,153],[355,690],[30,270],[313,293],[179,14],[335,3],],
'89':[[361,31],],
'162':[[189,390],[218,52],[178,57],[10,84],[189,86],[213,345],[234,83],[213,105],],
'165':[[235,205],],
'206':[[351,49],],
'224':[[277,377],],
'239':[[335,946],],
'255':[[384,8389],],
'274':[[384,3111],],
'275':[[384,8375],[274,292],[266,251],[313,273],],
'277':[[307,140],[341,140],[219,44],],
'321':[[211,8],[355,1500],[92,1],[92,21],[211,172],[355,5],[242,214],[35,13],[171,447],[242,11],[95,10],[95,521],[355,1497],[254,86],[311,110],],
'412':[[89,357],[89,320],],
'422':[[367,38],[250,36],],
'543':[[30,219],],
'546':[[197,5],[153,1436],[153,25],[277,594],[249,316],[355,1471],[185,59],[171,1256],[277,276],[277,213],[54,14],[54,1525],],
'580':[[384,8653],],
'593':[[48,1789],],
'648':[[124,23],],
'926':[[384,9873],[191,250],],
'931':[[170,187],],
'935':[[30,184],],
'953':[[217,163],],
'984':[[277,963],],
'1101':[[384,9496],],
'1123':[[217,182],],
'1507':[[226,45],[336,40],[46,45],],
'1518':[[48,111],],
'1591':[[335,1928],[335,598],[335,783],[335,2671],[335,216],],
'2527':[[89,289],],
'2547':[[277,21],[227,175],],
'2675':[[384,9329],[384,9268],],
'2981':[[335,42],],
'5167':[[384,9125],[384,9062],],
},{'1':[[227,327],[171,200],[251,22],[274,16],[274,840],[384,1337],[251,1],],
'2':[[179,1639],[384,4779],[153,13],[179,25],[153,1426],[266,375],[266,167],[277,59],[70,4],[185,41],[171,1238],[336,121],],
'3':[[335,542],[42,502],],
'12':[[227,187],],
'15':[[395,69],[224,65],[121,253],[224,93],[48,4819],[186,476],[172,82],[290,89],[42,1050],[355,1371],[121,583],[39,19],],
'16':[[42,791],],
'19':[[52,58],],
'23':[[244,143],[246,765],[235,459],[12,145],[172,94],[70,454],[246,1771],[224,173],[178,111],[178,243],[306,231],[306,202],[302,149],[197,304],[355,988],[243,172],[134,147],[277,510],[48,782],[48,811],[277,483],[246,95],[125,247],[355,196],],
'26':[[277,454],[217,139],[384,6472],[41,121],],
'34':[[251,155],[345,44],[99,206],],
'43':[[39,415],],
'48':[[384,5783],],
'55':[[49,28],],
'59':[[172,107],[384,2624],],
'63':[[197,280],[70,430],[355,820],[355,85],],
'66':[[335,3386],[335,3466],[335,3477],[335,3346],],
'67':[[277,764],],
'77':[[244,52],[384,4822],[315,73],[384,2916],[355,145],[355,1282],[289,73],[118,51],[235,69],[234,110],],
'81':[[95,522],[95,11],[369,15],[70,84],[35,14],[235,206],[0,154],[355,1501],[30,271],[369,491],[92,2],[377,5],[355,1498],[211,173],[377,52],[211,9],[197,318],[355,1463],[124,2],[249,331],[355,691],[197,67],[377,55],[242,12],[185,23],[242,215],[70,468],[249,16],[179,1631],[153,295],[219,45],[48,112],[179,15],[311,111],[355,6],[313,294],[245,8],[335,4],[384,8654],[171,448],[171,611],[254,87],[171,1220],],
'149':[[128,41],[134,39],],
'152':[[42,1070],[384,4699],[355,1158],],
'155':[[121,106],[12,250],],
'158':[[39,336],],
'162':[[197,327],[70,477],[227,137],],
'165':[[355,35],[274,69],[70,47],[277,323],[197,50],],
'166':[[277,597],[54,1528],[54,17],[153,1439],[355,1474],[277,216],[171,1259],[277,279],[277,417],[197,8],[249,319],[185,62],[153,28],],
'227':[[39,94],],
'230':[[94,32],],
'252':[[217,249],[217,242],[384,8719],[384,4979],[344,161],[344,291],[42,737],[243,145],[217,261],[355,290],[217,256],],
'255':[[172,139],[246,243],],
'272':[[174,133],],
'277':[[227,30],[384,5584],[171,100],[227,177],[171,1328],[124,26],[277,871],[384,1180],[306,104],[227,241],[277,42],[277,23],[211,26],[277,6],[214,15],[303,32],[12,47],[39,560],[174,283],[92,24],[331,465],[227,214],[277,904],[227,21],[171,35],[171,23],[227,197],],
'288':[[243,44],],
'315':[[217,235],[217,277],[121,604],[171,1174],[121,16],[48,4378],[217,416],[83,128],[331,4],[39,991],[355,330],[355,1004],[355,1317],[19,99],[12,616],[63,102],],
'343':[[39,621],[355,305],[48,352],[197,263],[384,6098],[344,227],[344,208],[384,6111],[174,89],[39,228],[42,930],[331,54],[384,7179],[42,731],[242,153],[42,670],[384,7925],[384,8787],[243,93],[39,178],[121,232],[384,8401],[384,8461],[384,8584],[384,8611],],
'346':[[83,79],],
'357':[[384,900],],
'373':[[355,672],[214,76],],
'431':[[277,738],[178,116],],
'439':[[277,300],],
'481':[[290,108],[224,114],],
'489':[[19,15],[83,3],[121,10],[83,136],[63,90],[63,2],[257,202],[331,541],[240,49],[19,134],[331,16],[171,1090],[88,24],[121,595],[306,330],[46,52],[195,5],[19,87],[39,502],[226,52],[121,599],[240,6],[384,9620],[83,10],[171,1162],[48,74],[195,10],[227,47],[195,94],[195,97],[83,20],],
'525':[[52,100],],
'550':[[83,75],[171,44],[12,366],[306,24],[121,260],[171,1286],[185,89],[12,524],[39,544],[227,39],[12,551],[200,284],[384,9222],[121,497],[384,9039],[384,9214],[48,31],[12,205],[48,5],[306,67],[306,1627],],
'554':[[277,172],],
'562':[[48,381],],
'588':[[195,25],],
'603':[[12,401],],
'623':[[306,513],],
'635':[[243,121],],
'637':[[48,261],],
'647':[[355,237],[246,211],[277,32],[41,296],],
'656':[[322,47],[302,39],[302,45],[128,50],[322,41],[134,48],],
'681':[[335,934],],
'696':[[246,139],],
'790':[[384,7683],],
'857':[[99,139],[99,252],],
'915':[[384,133],[384,160],],
'931':[[384,150],],
'953':[[217,282],],
'995':[[290,173],[179,1221],[197,239],[39,216],[70,402],[344,199],[179,119],[384,7668],],
'1004':[[277,76],],
'1105':[[335,3379],[384,9885],],
'1110':[[335,289],[335,3182],],
'1119':[[186,394],],
'1124':[[179,1216],[277,757],[179,116],[290,170],],
'1125':[[384,1363],],
'1128':[[335,588],],
'1147':[[39,285],],
'1151':[[355,808],],
'1178':[[39,489],],
'1195':[[39,790],],
'1226':[[42,657],],
'1240':[[39,841],],
'1244':[[335,549],],
'1245':[[162,266],[384,7559],[174,22],[355,207],[217,491],[41,152],[384,6374],[384,7908],[174,61],],
'1302':[[344,141],[384,8077],[179,1231],[290,181],[277,465],[384,8379],[197,340],[217,380],[355,310],[384,8937],[355,260],[179,127],[41,140],],
'1308':[[217,295],],
'1312':[[41,168],[217,168],],
'1357':[[384,7308],],
'1359':[[217,158],[384,1093],[384,5737],[251,60],[335,2484],],
'1364':[[179,1206],[179,108],[290,162],],
'1405':[[384,5883],],
'1455':[[384,1105],],
'1457':[[384,1712],],
'1467':[[384,9270],[235,263],],
'1472':[[277,314],],
'1591':[[48,1979],[179,1449],[48,3526],[48,2002],],
'1765':[[384,8171],],
'1963':[[384,5795],],
'2352':[[70,628],],
'2454':[[83,23],],
'2510':[[313,456],],
'2527':[[384,9602],],
'2547':[[174,40],],
'2624':[[384,928],],
'2630':[[99,125],],
'2675':[[384,5831],],
'2737':[[244,65],[118,64],[235,111],],
'2765':[[335,1393],],
'2816':[[384,2884],],
'2880':[[134,132],[302,134],],
'2961':[[355,434],[153,313],[355,1193],],
'3137':[[344,327],],
'3222':[[243,72],],
'3318':[[179,227],[290,281],],
'3415':[[290,505],[179,451],],
'3536':[[384,5727],],
'3766':[[217,453],],
'3811':[[235,256],],
'3850':[[344,177],],
'3934':[[277,910],],
'3946':[[355,906],],
'4106':[[384,7229],],
'4629':[[384,9898],],
'5018':[[384,8819],],
'5027':[[384,5214],],
},{'2':[[30,303],],
'12':[[231,74],],
'15':[[196,36],],
'19':[[93,120],],
'23':[[246,131],[178,251],],
'26':[[355,1259],[30,281],],
'33':[[89,339],[153,1010],],
'37':[[355,836],],
'38':[[266,58],],
'49':[[246,1683],],
'63':[[235,265],[274,71],[70,470],[70,86],[30,273],[355,1465],[185,25],[0,156],[179,1633],[335,6],[249,333],[355,693],[197,69],[197,320],[313,296],[171,1222],[249,18],[179,17],],
'67':[[355,1067],],
'81':[[153,57],],
'82':[[70,48],[336,122],[335,935],[197,51],],
'152':[[246,278],],
'154':[[313,360],],
'162':[[89,390],],
'196':[[89,345],],
'277':[[320,142],[320,72],],
'315':[[344,217],],
'360':[[218,233],],
'443':[[84,422],],
'447':[[186,324],],
'632':[[84,249],],
'647':[[217,455],],
'666':[[14,52],],
'672':[[15,23],],
'846':[[384,5063],[384,9245],[384,9551],],
'915':[[41,137],],
'935':[[268,44],],
'978':[[153,320],],
'1004':[[384,4781],[83,25],],
'1117':[[335,1549],[335,1405],],
'1128':[[335,651],],
'1305':[[384,2817],],
'1308':[[41,155],],
'1405':[[153,145],[153,128],],
'1414':[[213,359],],
'1424':[[384,2822],],
'1467':[[153,491],[355,461],[355,1197],[344,117],[335,615],[157,77],[142,164],],
'2034':[[384,6856],],
'2381':[[220,124],],
'2384':[[335,687],],
'2510':[[156,100],[213,230],[196,94],[89,153],],
'2528':[[186,346],],
'2765':[[335,1222],],
'3769':[[355,498],],
},{'1':[[331,148],],
'3':[[355,1135],],
'13':[[48,589],],
'15':[[197,540],],
'26':[[249,249],[161,171],[345,71],[395,81],[384,1063],[161,150],[331,63],[384,5671],],
'28':[[49,171],],
'34':[[84,514],],
'54':[[285,82],[332,92],[284,119],[283,90],[270,155],[57,158],[269,118],[34,83],[36,90],[20,109],[86,151],[87,83],[247,153],[89,252],[234,298],[100,89],[229,112],[135,94],[213,306],[137,134],[210,94],[146,85],[209,149],[148,101],[10,297],[394,92],[179,645],[187,103],[178,171],[173,179],[189,348],[180,106],],
'60':[[161,296],],
'63':[[251,243],],
'83':[[0,157],],
'131':[[49,392],],
'140':[[79,33],[318,32],[4,36],[279,32],[392,30],[48,4011],[222,38],],
'147':[[341,60],[340,30],[308,30],[307,60],],
'196':[[307,74],[341,74],],
'264':[[277,340],],
'301':[[342,170],],
'359':[[70,307],],
'360':[[234,293],[100,84],[10,292],[20,104],[247,148],[210,89],[86,146],[148,96],[269,113],[229,107],[270,150],[57,153],[146,80],[180,101],[283,85],[34,78],[284,114],[209,144],[285,77],[173,174],[178,166],[137,129],[189,343],[135,89],[394,87],[213,301],[187,98],[89,247],[332,87],[36,85],],
'469':[[161,314],],
'533':[[42,435],],
'555':[[39,406],],
'828':[[54,131],],
'983':[[30,455],],
'1019':[[190,35],],
'1404':[[179,1038],],
'1682':[[246,32],],
'1838':[[358,264],],
'2787':[[179,1045],],
'3171':[[340,52],[308,52],],
'3934':[[246,1486],],
'4237':[[331,39],],
},{'43':[[153,1214],[12,186],[335,2958],[30,186],[39,875],[335,1972],[48,3563],[48,3576],[153,824],[83,91],[52,323],[65,158],[153,537],],
'67':[[246,1404],[277,819],[52,285],[246,893],],
'84':[[0,158],],
'149':[[306,69],],
'199':[[164,577],],
'232':[[181,412],],
'267':[[381,477],],
'271':[[384,8268],],
'277':[[384,5049],],
'281':[[84,165],[384,5857],[335,2995],],
'299':[[153,621],],
'505':[[381,490],],
'525':[[48,4799],[12,500],],
'533':[[42,784],],
'1170':[[384,5990],],
'1267':[[384,5984],],
'1452':[[262,33],[219,33],],
'2573':[[95,151],],
'4877':[[384,7512],],
'5001':[[384,4692],],
},{'27':[[277,251],],
'38':[[331,94],],
'39':[[274,394],[164,49],[283,215],[289,50],[363,704],[363,348],[315,50],[89,439],[52,224],[89,314],[214,344],],
'41':[[156,124],],
'43':[[54,1264],[336,104],[65,121],[65,145],[83,51],[335,3760],[184,18],[355,328],[355,966],[361,95],[381,251],[42,893],[384,7776],[41,353],[161,412],[384,6187],[246,1789],[12,207],[246,806],[173,320],[246,619],[246,492],],
'63':[[355,182],],
'67':[[246,84],],
'85':[[52,324],[0,159],],
'130':[[335,2889],[315,191],],
'164':[[121,31],[121,51],],
'202':[[162,58],],
'305':[[181,250],[49,35],[54,1200],[306,218],[95,105],[176,182],[48,798],[48,2146],[329,66],[54,1505],[197,476],[335,2469],],
'351':[[48,3484],[96,97],],
'370':[[164,85],[89,373],[357,39],],
'598':[[48,4296],],
'599':[[84,524],],
'1169':[[317,119],],
'1214':[[176,264],],
'1228':[[39,787],],
'1244':[[331,174],],
'1819':[[162,42],],
'2077':[[52,316],],
'3866':[[344,298],],
},{'31':[[0,162],[381,599],[356,52],[341,78],[307,78],[308,56],[340,56],],
'39':[[18,58],],
'145':[[384,6228],],
'479':[[384,2524],[117,35],[167,35],],
'593':[[384,8210],],
'596':[[384,2299],],
'648':[[384,350],],
'783':[[384,7799],],
'1329':[[384,4829],],
'1603':[[384,5468],],
'4642':[[384,2805],],
'4910':[[384,3750],],
},{'12':[[164,96],],
'58':[[0,169],],
'59':[[359,66],[160,548],[176,259],],
'195':[[75,139],],
'417':[[355,1241],[220,128],],
'448':[[12,570],],
'861':[[153,917],],
'1029':[[306,515],],
'1237':[[363,204],[75,94],[335,1072],[335,1060],[218,157],],
'1598':[[48,2755],],
'1822':[[48,3275],],
'2111':[[342,212],],
'2150':[[335,1097],],
'2384':[[335,1103],],
'2541':[[384,2844],[309,25],],
'2576':[[373,95],],
'2719':[[331,181],],
'2879':[[133,116],],
'4243':[[331,127],],
},{'3':[[181,58],[49,196],[160,121],[365,205],],
'7':[[338,57],],
'12':[[354,32],[160,23],[186,217],[82,442],[160,34],[323,21],],
'14':[[70,193],[70,234],[70,303],],
'15':[[115,26],[70,472],[39,850],[123,19],[13,26],[361,30],[197,322],[243,257],[45,20],[48,68],[158,25],[162,210],[236,26],[221,21],],
'16':[[186,103],[197,234],[306,916],[39,627],[306,37],[249,42],[370,53],[70,397],[54,1131],[381,171],[61,79],[153,1002],[18,51],[161,406],[384,4353],[67,46],[48,3586],],
'18':[[156,110],[70,209],[384,8224],[384,6762],[36,140],[384,1201],[384,1526],[161,312],],
'25':[[161,458],],
'26':[[306,40],[169,40],[73,26],[181,256],[186,108],[42,420],[335,1064],],
'31':[[121,471],[384,4695],[246,895],[148,64],[246,1406],],
'33':[[114,39],[381,345],[176,208],[335,2081],[189,318],[313,211],[10,267],[207,54],[234,268],[62,113],[359,145],[65,130],[0,171],[153,519],],
'38':[[153,1271],[396,76],[160,116],[173,65],],
'39':[[52,66],[160,268],[384,2136],],
'43':[[84,255],],
'61':[[355,776],],
'63':[[162,47],],
'67':[[283,150],],
'69':[[161,475],],
'77':[[12,69],[160,274],[39,847],[186,207],[277,665],],
'86':[[39,788],[162,43],[162,59],[173,321],],
'128':[[142,141],[362,48],],
'129':[[48,2796],],
'140':[[153,828],[12,429],[232,64],[181,755],[142,173],[358,354],[54,1436],[355,1103],],
'143':[[111,31],[164,408],],
'144':[[244,32],[49,186],],
'147':[[84,145],],
'152':[[191,233],],
'158':[[164,172],[187,151],[384,9109],],
'175':[[5,54],],
'183':[[274,503],[265,26],[82,430],],
'195':[[89,63],[181,75],[178,55],[234,81],[10,82],[189,388],[213,103],[189,84],[148,41],[49,167],[213,343],[218,50],[181,98],[160,153],[229,43],],
'199':[[52,146],[181,106],],
'203':[[153,908],],
'288':[[148,151],[54,787],[155,20],[96,136],[246,1006],[27,21],[359,43],[17,22],],
'289':[[203,28],[304,264],],
'290':[[181,766],],
'298':[[197,59],[70,76],[186,158],],
'345':[[164,392],],
'362':[[29,159],[9,159],],
'363':[[359,38],],
'433':[[164,115],],
'447':[[363,523],],
'470':[[153,1078],[181,673],],
'482':[[153,853],[353,36],[153,480],[353,71],],
'506':[[42,356],[102,52],[335,3186],],
'529':[[179,85],],
'562':[[188,88],],
'593':[[389,21],[151,21],],
'596':[[355,177],[394,157],[384,2792],],
'597':[[331,422],],
'615':[[54,166],],
'786':[[381,363],],
'819':[[311,95],[387,95],],
'835':[[308,83],],
'856':[[362,23],[62,25],],
'860':[[266,310],[137,253],[173,298],],
'885':[[338,23],[263,27],],
'889':[[338,63],],
'895':[[186,214],],
'906':[[30,90],],
'913':[[173,313],[86,215],],
'935':[[42,944],],
'960':[[313,215],],
'1119':[[164,293],],
'1205':[[384,2865],],
'1226':[[160,436],[49,287],],
'1234':[[284,167],[181,425],[269,166],],
'1237':[[75,27],],
'1305':[[384,8071],],
'1350':[[42,953],],
'1370':[[355,466],[396,170],],
'1409':[[152,125],],
'1554':[[384,3687],],
'2019':[[49,332],],
'2091':[[54,75],],
'2241':[[249,67],[181,206],],
'2299':[[62,99],],
'2341':[[84,496],[384,9343],[384,2695],[384,7259],],
'2362':[[207,25],],
'2444':[[283,57],[187,70],],
'2450':[[82,437],],
'2482':[[84,413],],
'2533':[[170,196],],
'2536':[[137,267],],
'2634':[[160,80],],
'2670':[[102,107],],
'2675':[[384,2039],],
'2677':[[131,164],[153,1074],],
'2939':[[152,69],],
'3150':[[164,107],],
'3615':[[186,242],],
'3631':[[384,2049],[384,4325],],
'4065':[[277,206],],
'4102':[[384,498],[384,2992],[384,3202],],
'4406':[[339,177],],
},{'16':[[353,82],],
'89':[[18,52],[353,72],[353,37],[0,172],],
'91':[[18,24],],
'140':[[331,354],],
'713':[[384,95],],
},{'19':[[210,156],[353,110],[353,119],[353,138],[106,47],],
'23':[[249,93],],
'26':[[353,46],[353,52],],
'66':[[18,23],[384,7975],[353,141],],
'90':[[353,73],[18,53],[353,38],[0,173],],
'94':[[119,19],[82,230],[43,19],],
'203':[[357,34],],
'306':[[246,990],],
'468':[[249,83],],
'609':[[48,258],],
'931':[[353,130],],
'935':[[335,2993],],
'1424':[[384,1987],],
'2221':[[353,100],],
'3733':[[210,159],],
'4452':[[353,33],],
'4463':[[353,182],],
},{'2':[[384,3774],[384,7615],],
'16':[[48,3114],[48,4678],],
'18':[[384,7871],],
'19':[[39,725],[160,652],[39,593],],
'23':[[39,702],[39,754],[358,89],[39,617],[384,5684],[161,358],[161,329],[384,5476],],
'26':[[224,59],[83,81],[39,658],],
'33':[[161,344],],
'37':[[161,304],],
'59':[[384,2469],],
'63':[[384,5458],],
'91':[[0,174],],
'96':[[0,179],[54,289],[335,100],],
'139':[[335,123],[179,683],],
'165':[[306,342],],
'174':[[306,879],],
'199':[[335,119],],
'215':[[48,880],[179,687],[48,687],[48,718],],
'217':[[261,43],[48,4966],],
'231':[[306,372],],
'241':[[48,885],[306,351],],
'244':[[48,4217],[306,1549],[48,4553],],
'266':[[384,5600],],
'277':[[48,3055],],
'372':[[179,679],],
'422':[[39,775],],
'424':[[48,2155],],
'443':[[39,709],],
'491':[[48,735],],
'506':[[384,3747],],
'515':[[48,626],],
'518':[[39,681],],
'520':[[306,332],],
'550':[[306,284],],
'580':[[306,304],],
'656':[[345,29],[39,525],[48,3880],[306,1057],],
'700':[[48,640],],
'792':[[384,3742],],
'815':[[48,1322],[48,1527],],
'1029':[[179,829],[179,868],],
'1101':[[179,879],[384,9614],],
'1125':[[48,4939],],
'1180':[[306,806],],
'1267':[[306,824],[306,811],[306,838],],
'1326':[[48,450],],
'1503':[[384,1586],],
'1506':[[384,7093],],
'1532':[[48,2092],[48,727],],
'1561':[[48,713],],
'1585':[[48,1421],],
'1595':[[48,548],],
'1600':[[48,563],],
'1602':[[48,1335],],
'1603':[[54,284],[335,95],],
'1613':[[48,654],],
'1618':[[48,682],],
'1621':[[48,695],],
'1622':[[48,700],],
'1700':[[48,1688],],
'1725':[[48,1832],[179,757],[179,824],],
'1738':[[48,1950],],
'1756':[[48,2742],[48,3207],],
'1846':[[306,1119],],
'1853':[[48,3804],],
'1880':[[306,988],[48,3743],],
'1902':[[306,1227],],
'1905':[[48,3894],],
'1974':[[48,4909],],
'1981':[[48,4920],],
'2157':[[54,880],],
'2185':[[54,1064],],
'2415':[[306,1211],],
'2675':[[384,264],],
},{'7':[[322,39],[322,45],[134,46],[128,48],[302,43],[304,19],[302,37],[304,56],],
'12':[[314,19],[117,19],[167,19],[349,19],],
'16':[[345,37],[306,435],[39,600],],
'19':[[39,361],[228,21],],
'48':[[343,20],[203,21],[387,20],[284,19],[187,19],[311,20],[153,279],],
'63':[[39,349],],
'75':[[306,1063],[306,378],[306,357],[306,1125],],
'92':[[48,641],[48,655],[306,285],[48,688],[48,696],[48,701],[48,714],[48,627],[48,728],[48,736],[306,305],[48,4940],[306,807],[306,812],[306,825],[306,880],[179,869],[335,101],[335,96],[48,719],[48,683],[54,285],[0,180],[0,175],],
'119':[[74,17],],
'120':[[16,17],],
'121':[[387,26],[311,26],],
'122':[[104,15],[356,15],[343,15],[327,15],[383,15],[17,15],[155,13],[94,15],[228,15],],
'125':[[59,19],[1,19],],
'136':[[48,2551],],
'139':[[235,31],[235,36],[178,35],[233,35],],
'174':[[48,903],[48,2196],],
'194':[[196,17],],
'199':[[153,920],],
'215':[[48,1004],],
'220':[[82,228],[82,48],],
'234':[[6,17],],
'241':[[82,103],],
'264':[[363,17],],
'276':[[48,3369],[48,2932],],
'277':[[48,3280],[306,520],[48,2760],],
'322':[[353,20],],
'346':[[238,20],[180,20],],
'380':[[10,19],[189,19],[89,19],[213,19],],
'382':[[10,22],[189,22],],
'409':[[213,88],[10,71],[178,44],[189,73],[234,70],[89,52],],
'412':[[306,1132],],
'479':[[289,19],[322,20],[128,19],[48,3216],[204,19],[302,20],[134,19],[315,19],],
'499':[[322,89],[302,106],],
'581':[[48,3299],[48,2779],[48,2259],[306,539],[48,918],],
'627':[[48,4220],],
'630':[[48,3210],],
'633':[[302,17],],
'634':[[322,17],],
'656':[[302,23],[322,23],[289,22],[315,22],[128,22],[134,22],],
'671':[[48,2219],[48,2235],[48,2203],],
'672':[[335,2000],],
'673':[[335,2732],],
'700':[[247,20],[270,20],],
'712':[[82,25],[82,201],[82,292],[82,183],[82,170],[82,279],[82,247],[82,262],],
'766':[[387,17],],
'767':[[20,17],],
'768':[[285,17],],
'769':[[34,17],],
'770':[[82,186],[24,20],[20,20],],
'774':[[283,31],[270,42],[86,43],[284,34],[57,45],[173,47],[285,28],[100,29],[180,33],[187,34],[34,28],[36,29],[269,33],[148,30],[247,42],[146,28],[137,39],[77,37],[332,27],[229,32],[135,29],[209,37],[131,39],[210,28],[20,33],[394,29],],
'783':[[197,179],[70,342],[153,258],],
'785':[[146,17],],
'791':[[235,26],],
'852':[[24,17],],
'853':[[43,17],],
'854':[[282,17],],
'881':[[28,17],],
'882':[[237,17],],
'1012':[[311,17],],
'1014':[[148,17],],
'1078':[[229,17],],
'1082':[[77,17],],
'1083':[[247,17],],
'1084':[[270,17],],
'1086':[[210,17],],
'1087':[[180,17],],
'1088':[[64,17],],
'1089':[[55,17],],
'1090':[[238,17],],
'1091':[[177,17],],
'1092':[[325,17],],
'1093':[[119,17],],
'1094':[[393,17],],
'1097':[[190,15],],
'1101':[[233,21],[235,17],[179,874],[178,21],],
'1211':[[179,987],],
'1333':[[367,21],[250,23],[234,21],],
'1417':[[48,2562],],
'1513':[[385,14],],
'1567':[[48,1902],[48,1921],],
'1577':[[48,453],],
'1588':[[48,499],],
'1596':[[48,3058],[48,551],],
'1597':[[48,555],[48,570],[48,4560],[48,3062],],
'1598':[[48,1534],[48,1329],],
'1601':[[48,4556],[48,566],],
'1606':[[387,23],[382,26],[71,26],[311,23],],
'1609':[[306,403],],
'1632':[[48,898],],
'1638':[[48,888],],
'1642':[[48,3303],[48,2263],[306,543],[48,922],[48,2783],[306,523],],
'1667':[[179,832],],
'1686':[[48,1530],[48,1325],],
'1687':[[48,1338],],
'1689':[[48,1424],],
'1690':[[48,1427],],
'1714':[[48,1738],[306,399],],
'1724':[[212,17],],
'1742':[[48,1906],[48,1925],],
'1743':[[48,1910],[48,1929],],
'1755':[[48,3213],[48,2748],],
'1756':[[48,2751],],
'1762':[[48,2170],],
'1766':[[48,2191],],
'1767':[[257,24],[200,26],],
'1773':[[289,25],[315,25],],
'1787':[[48,2418],],
'1791':[[200,31],[257,29],],
'1817':[[48,2745],],
'1828':[[306,1135],],
'1882':[[48,3748],[306,993],],
'1883':[[48,3751],[306,996],],
'1884':[[48,3754],[306,999],],
'1893':[[48,3807],],
'1902':[[306,1232],[48,3899],],
'1917':[[306,1383],[48,4075],[48,4228],],
'1926':[[306,1386],[48,4078],],
'1940':[[48,4223],],
'1960':[[48,4622],],
'2038':[[198,17],],
'2049':[[82,453],],
'2135':[[218,15],],
'2153':[[179,1280],],
'2178':[[54,856],],
'2187':[[54,890],],
'2188':[[54,896],],
'2211':[[170,17],],
'2222':[[296,17],],
'2246':[[55,20],],
'2248':[[270,29],[131,26],[247,29],[86,30],[173,34],[137,26],[57,32],[77,24],],
'2254':[[131,19],[173,19],[137,19],[57,19],[86,19],],
'2363':[[71,21],[382,21],],
'2385':[[309,15],],
'2402':[[80,17],],
'2415':[[367,26],[156,23],[244,25],[250,28],[118,23],[196,22],[116,22],],
'2417':[[82,22],],
'2419':[[82,43],],
'2421':[[82,60],],
'2422':[[82,74],],
'2424':[[82,94],],
'2425':[[82,113],],
'2426':[[82,127],],
'2427':[[82,139],],
'2429':[[82,151],],
'2430':[[82,167],],
'2431':[[82,180],],
'2432':[[82,198],],
'2433':[[82,211],],
'2434':[[82,223],],
'2436':[[82,244],],
'2437':[[82,259],],
'2438':[[82,514],],
'2439':[[82,276],],
'2440':[[82,289],],
'2517':[[111,19],[156,18],],
'2538':[[116,17],],
'2540':[[90,19],],
'2613':[[317,15],],
'2678':[[103,17],],
'2679':[[150,17],],
'2680':[[353,17],],
'2728':[[114,15],],
'2729':[[169,17],],
'2894':[[299,17],],
'2895':[[271,17],],
'2896':[[205,17],],
'2897':[[192,17],],
'2898':[[216,17],],
'2914':[[145,15],],
'3015':[[200,23],[224,21],[257,21],],
'3260':[[233,30],[178,30],],
'3489':[[179,690],],
'3703':[[257,32],[200,34],],
'4109':[[292,19],],
'4151':[[306,1552],[306,335],],
'4153':[[306,1060],[306,354],],
'4154':[[306,375],[306,1122],],
'4176':[[306,883],],
'4177':[[306,1153],],
'4205':[[313,29],],
'4221':[[317,18],],
},{'48':[[69,19],[263,21],],
'69':[[353,23],],
'91':[[82,231],],
'92':[[179,880],],
'93':[[20,21],[24,18],[24,21],[34,18],[43,18],[48,454],[48,500],[48,628],[48,1339],[48,1425],[48,1428],[387,24],[48,1739],[48,2552],[48,2563],[48,4221],[48,4623],[54,286],[387,18],[55,18],[57,20],[64,18],[20,18],[385,15],[70,343],[383,16],[382,27],[382,22],[71,22],[71,27],[387,27],[77,18],[82,26],[82,49],[16,18],[82,171],[82,184],[82,187],[82,202],[82,229],[0,181],[82,248],[82,263],[82,280],[82,293],[86,20],[353,21],[104,16],[353,18],[111,20],[114,16],[119,18],[131,20],[137,20],[146,18],[148,18],[150,18],[335,102],[153,259],[153,280],[169,18],[173,20],[177,18],[179,870],[179,875],[74,18],[335,97],[179,988],[180,18],[180,21],[187,20],[327,16],[197,180],[325,18],[311,27],[311,24],[203,22],[210,18],[229,18],[238,18],[238,21],[247,18],[0,176],[270,18],[282,18],[285,18],[304,57],[306,286],[306,306],[306,336],[311,18],[306,400],[306,404],[306,1553],[393,18],],
'144':[[335,1121],],
'264':[[335,1295],[335,1656],[335,1516],[335,1805],],
'346':[[103,20],],
'717':[[18,15],],
'718':[[106,17],],
'933':[[335,3288],],
'1211':[[70,563],[197,363],],
'1707':[[197,130],[179,906],[48,1709],[335,150],[153,207],[70,249],[54,308],[306,391],],
'1828':[[70,675],[197,365],[197,507],[70,565],],
'2131':[[335,1125],],
'2428':[[82,156],],
'4307':[[335,1123],],
'4310':[[335,1429],[335,1575],],
'4312':[[335,1661],[335,1810],[335,1300],[335,1521],],
'4314':[[335,1370],],
'4374':[[335,3290],],
'4379':[[335,3528],],
'4381':[[335,3537],],
'4387':[[335,3647],],
'4392':[[335,3734],],
},{'94':[[0,177],[54,287],[197,181],[179,989],[335,98],[70,344],],
'99':[[197,186],[335,202],[70,349],[54,330],],
'1029':[[70,380],[54,340],[335,222],[179,997],[197,217],[179,1022],[70,610],[197,407],[54,365],[335,247],],
'1088':[[335,236],[179,1011],[54,354],],
'1532':[[197,192],[70,355],],
'1576':[[197,205],[70,368],],
'2125':[[54,335],[335,207],],
},{'95':[[54,288],[335,99],[0,178],],
'2958':[[153,266],],
'3976':[[249,286],],
},{'94':[[335,103],[0,182],],
'95':[[335,223],],
'1180':[[335,212],],
},{'97':[[335,104],[0,183],],
},{'1':[[384,856],],
'2':[[1,118],[2,39],[3,45],[4,62],[5,88],[6,102],[395,152],[7,190],[8,37],[9,204],[10,363],[11,57],[12,655],[13,43],[394,211],[14,58],[15,52],[16,144],[17,42],[18,85],[19,136],[20,190],[21,205],[22,61],[23,145],[24,37],[25,100],[26,56],[27,73],[393,36],[28,94],[29,204],[30,512],[31,57],[32,33],[33,61],[34,143],[35,56],[36,201],[37,97],[38,204],[392,56],[391,77],[39,997],[40,46],[390,186],[41,207],[41,224],[41,235],[41,246],[41,257],[41,268],[41,279],[41,323],[41,397],[390,99],[389,59],[388,94],[387,111],[386,45],[385,78],[42,1335],[43,32],[44,155],[45,43],[46,93],[47,42],[384,9954],[384,7769],[384,6845],[384,6833],[384,6265],[384,6179],[384,1990],[384,1144],[0,198],[383,33],[48,4992],[49,524],[50,120],[51,48],[52,362],[53,153],[382,95],[381,646],[381,585],[381,569],[381,457],[381,244],[381,208],[380,48],[54,1542],[55,41],[56,69],[57,318],[58,68],[59,97],[379,230],[378,44],[60,112],[61,96],[62,144],[63,114],[64,38],[65,154],[65,188],[66,38],[67,67],[68,74],[68,100],[68,136],[69,101],[377,58],[70,801],[376,46],[71,95],[72,89],[73,92],[74,144],[75,145],[76,108],[77,154],[78,35],[79,63],[80,155],[81,67],[82,570],[83,143],[84,582],[85,64],[86,268],[375,36],[87,99],[88,64],[89,490],[90,68],[91,51],[92,188],[93,145],[94,59],[374,45],[373,118],[372,56],[95,527],[96,208],[97,48],[98,52],[371,131],[99,307],[100,213],[101,86],[102,220],[103,132],[104,33],[105,76],[106,65],[107,32],[108,31],[109,39],[110,51],[111,93],[112,154],[113,78],[114,76],[115,43],[116,135],[370,70],[369,493],[117,55],[118,228],[119,32],[120,35],[121,606],[368,119],[367,142],[122,150],[123,46],[124,68],[125,282],[126,42],[127,75],[128,230],[129,32],[130,33],[131,177],[132,42],[366,45],[133,136],[134,169],[135,231],[136,32],[137,281],[138,48],[139,67],[140,45],[365,237],[141,94],[142,188],[143,73],[144,51],[145,87],[146,179],[147,39],[148,173],[149,42],[150,132],[151,59],[152,232],[364,58],[363,765],[363,740],[153,1445],[154,46],[155,56],[156,141],[157,84],[158,58],[159,173],[160,670],[160,709],[161,605],[362,78],[162,407],[163,85],[164,672],[165,90],[166,34],[361,115],[360,62],[167,55],[168,45],[169,77],[170,284],[359,156],[358,402],[171,1341],[172,172],[173,340],[357,57],[356,66],[355,1507],[354,100],[174,289],[175,42],[353,194],[176,65],[352,166],[351,69],[350,229],[349,92],[348,35],[176,306],[177,65],[178,327],[179,90],[347,71],[346,38],[345,86],[344,370],[343,113],[342,336],[341,287],[340,173],[339,317],[338,100],[337,119],[336,184],[335,3802],[334,98],[333,33],[332,197],[331,545],[330,43],[329,76],[328,41],[327,33],[326,59],[325,36],[324,44],[323,33],[322,232],[321,443],[320,179],[319,73],[318,60],[317,137],[316,129],[315,213],[314,116],[313,493],[312,71],[311,113],[310,31],[309,39],[308,206],[307,287],[306,1629],[305,93],[304,408],[303,206],[303,17],[302,171],[179,1644],[180,235],[181,1046],[182,56],[183,122],[184,46],[301,90],[185,102],[300,59],[299,49],[298,75],[186,532],[187,209],[188,365],[189,643],[190,86],[191,89],[297,42],[191,308],[192,49],[193,166],[296,174],[194,121],[195,101],[196,100],[295,49],[294,54],[293,145],[197,641],[198,99],[199,83],[199,107],[200,319],[201,30],[202,30],[203,90],[204,85],[205,49],[206,108],[207,122],[208,115],[209,279],[210,190],[211,176],[212,85],[213,490],[214,392],[215,122],[216,49],[292,65],[291,42],[290,684],[217,515],[290,141],[289,200],[288,58],[218,382],[219,61],[220,134],[221,39],[222,64],[287,111],[223,64],[224,239],[225,52],[226,93],[227,337],[228,53],[229,203],[230,33],[231,128],[286,51],[232,142],[233,50],[234,429],[235,505],[236,43],[237,49],[238,37],[239,35],[240,56],[241,83],[242,218],[285,161],[243,287],[244,259],[245,79],[246,1982],[247,272],[248,78],[249,335],[250,139],[251,71],[251,355],[252,102],[253,235],[254,248],[255,34],[256,42],[257,204],[258,87],[259,59],[260,109],[284,235],[283,259],[261,233],[282,40],[262,56],[263,108],[264,38],[265,55],[281,25],[266,402],[267,36],[268,64],[269,232],[270,259],[271,49],[272,59],[273,58],[280,131],[274,844],[275,41],[276,88],[277,1016],[279,58],[278,76],[396,194],],
'3':[[54,1478],],
'12':[[384,7706],[167,47],[381,314],[117,47],],
'15':[[384,8015],[384,2518],],
'19':[[42,1141],[95,191],[218,265],],
'26':[[42,602],[42,340],[95,507],[141,63],[42,848],[278,57],[95,209],[306,1617],[306,12],[361,57],[185,71],[197,28],[384,5373],[295,41],[197,636],[42,235],[171,1268],[54,3],[384,2373],[313,266],[384,1069],[42,192],],
'29':[[384,655],[384,7649],[384,863],[384,7532],[384,7423],[384,483],[384,7316],[384,7246],[384,7144],[384,7064],[384,7001],[384,6976],[384,185],[384,1168],[384,1463],[384,1813],[384,2030],[384,6814],[384,2247],[384,2361],[384,11],[384,2410],[384,7877],[384,6058],[384,5931],[384,2636],[384,5869],[384,5717],[384,8063],[384,2660],[384,8154],[384,8318],[384,2983],[384,3184],[384,3238],[384,3335],[384,3367],[384,8363],[384,3469],[384,5700],[384,5565],[384,3507],[384,5537],[384,8403],[384,3578],[384,5514],[384,5499],[384,8544],[384,3712],[384,3817],[384,5425],[384,5391],[381,222],[384,5262],[384,5123],[384,4732],[384,6935],[384,4000],[384,4480],[384,4130],[384,4407],[384,4360],[384,4305],[384,4246],],
'33':[[54,1148],],
'50':[[54,470],],
'63':[[384,3975],],
'77':[[384,986],[384,5470],[384,1716],[384,1831],[261,40],[191,128],[384,2451],],
'88':[[176,260],],
'99':[[384,7770],[381,245],[384,7878],[384,7719],],
'100':[[384,2638],],
'101':[[384,3187],],
'124':[[350,120],],
'140':[[218,240],],
'152':[[176,117],[307,186],[341,186],],
'153':[[384,6216],[384,1853],],
'186':[[384,6131],[54,1094],[54,329],[381,278],[381,299],[384,6605],[306,415],[48,1754],[48,1367],[335,201],],
'196':[[54,801],[54,1370],],
'205':[[266,75],],
'215':[[382,44],[384,6848],[384,1868],[71,44],],
'217':[[179,425],[384,9715],[384,8365],[48,662],[174,196],[290,479],],
'225':[[153,125],],
'299':[[355,1047],],
'301':[[384,3797],[176,303],[186,11],[186,74],[171,351],[186,262],[7,160],[176,42],[339,27],[28,86],[339,310],],
'314':[[384,7318],],
'346':[[384,3423],],
'351':[[384,2034],],
'370':[[331,210],],
'420':[[384,802],[384,6169],[381,234],[384,7759],],
'433':[[176,126],],
'491':[[335,3618],],
'506':[[218,58],],
'542':[[384,4673],],
'607':[[243,58],],
'662':[[14,33],],
'671':[[133,42],[153,264],[384,6927],[197,185],[179,1278],[350,43],[179,972],[335,3668],[48,1973],[48,1358],[70,348],],
'682':[[335,2004],],
'705':[[384,6221],],
'722':[[162,173],],
'774':[[194,19],],
'780':[[384,4409],],
'791':[[384,8198],[217,198],],
'923':[[176,111],],
'1005':[[122,33],[122,138],],
'1033':[[117,43],[167,43],[381,196],],
'1125':[[384,7003],],
'1169':[[174,64],],
'1177':[[384,5501],],
'1180':[[384,6595],],
'1225':[[39,761],],
'1226':[[339,115],],
'1259':[[39,925],],
'1260':[[384,715],],
'1265':[[384,9043],],
'1267':[[384,5871],],
'1277':[[262,15],],
'1294':[[41,93],],
'1305':[[179,483],[179,405],[290,459],[290,537],],
'1309':[[290,436],[179,472],[290,526],[179,382],],
'1420':[[335,393],[278,67],[278,70],],
'1532':[[306,760],],
'1598':[[48,1624],[48,1568],],
'1611':[[48,658],],
'1708':[[48,1765],[335,214],[306,425],],
'1719':[[261,72],[384,4550],[384,7718],[358,252],],
'1796':[[48,2493],],
'1829':[[153,740],],
'1915':[[384,8524],[384,3298],],
'2065':[[274,707],],
'2132':[[335,1108],[335,3513],],
'2155':[[223,27],],
'2249':[[281,15],],
'2278':[[60,33],],
'2279':[[60,39],],
'2487':[[384,5958],],
'2507':[[87,39],],
'2557':[[335,1036],],
'2619':[[99,33],],
'2880':[[384,2052],],
'2979':[[232,31],],
'3092':[[384,4464],],
'3162':[[384,7384],],
'3196':[[384,881],],
'3198':[[384,2044],],
'3243':[[174,193],],
'3246':[[174,207],],
'3299':[[179,198],[290,252],],
'3302':[[179,202],[290,256],],
'3313':[[179,219],[290,273],],
'3315':[[179,223],[290,277],],
'3325':[[179,254],[290,308],],
'3326':[[290,310],[179,256],],
'3330':[[179,265],[290,319],],
'3331':[[179,267],[290,321],],
'3335':[[290,500],[179,446],],
'3362':[[290,585],[179,531],],
'3389':[[179,378],[290,432],],
'3392':[[179,386],[290,440],],
'3394':[[290,444],[179,390],],
'3395':[[290,448],[179,394],],
'3396':[[290,450],[179,396],],
'3397':[[290,453],[179,399],],
'3398':[[384,8597],],
'3401':[[290,463],[179,409],],
'3403':[[179,413],[290,467],],
'3404':[[290,471],[179,417],],
'3405':[[179,422],[290,476],],
'3408':[[290,548],[179,494],[290,482],[179,428],],
'3410':[[290,486],[179,432],],
'3412':[[179,436],[290,490],],
'3414':[[179,441],[290,495],],
'3420':[[290,528],[179,474],],
'3421':[[290,530],[179,476],],
'3422':[[179,478],[290,532],],
'3423':[[179,480],[290,534],],
'3425':[[179,485],[290,539],],
'3426':[[179,487],[290,541],],
'3427':[[290,543],[179,489],],
'3428':[[290,545],[179,491],],
'3430':[[179,496],[290,550],],
'3431':[[290,552],[179,498],],
'3432':[[290,554],[179,500],],
'3433':[[179,502],[290,556],],
'3439':[[290,576],[179,522],],
'3495':[[179,1057],],
'3516':[[179,1051],],
'3523':[[217,87],],
'3527':[[217,33],],
'3702':[[335,2563],],
'3942':[[384,2432],[335,1988],],
'4213':[[316,31],],
'4215':[[316,43],],
'4353':[[335,2527],],
'4384':[[335,3623],],
'4401':[[379,33],],
'4448':[[351,31],],
'4706':[[384,1923],],
'4845':[[384,2365],],
'5230':[[388,29],],
},{'63':[[384,5497],],
'99':[[1,119],[2,40],[3,46],[4,63],[5,89],[6,103],[7,191],[8,38],[9,205],[10,364],[11,58],[12,656],[13,44],[14,59],[15,53],[16,145],[17,43],[18,86],[19,137],[20,191],[21,206],[22,62],[23,146],[24,38],[25,101],[26,57],[27,74],[28,95],[29,205],[30,513],[31,58],[32,34],[33,62],[34,144],[35,57],[36,202],[37,98],[38,205],[39,998],[40,47],[395,153],[41,208],[41,225],[41,236],[41,247],[41,258],[41,269],[41,280],[41,324],[41,398],[42,1336],[43,33],[44,156],[45,44],[46,94],[47,43],[48,4993],[49,525],[50,121],[51,49],[52,363],[53,154],[54,1543],[55,42],[56,70],[57,319],[58,69],[59,98],[60,113],[61,97],[62,145],[63,115],[64,39],[65,189],[66,39],[67,68],[68,75],[68,137],[69,102],[70,802],[71,96],[72,90],[73,93],[74,145],[75,146],[76,109],[77,155],[78,36],[79,64],[80,156],[81,68],[82,571],[83,144],[84,583],[85,65],[86,269],[87,100],[88,65],[89,491],[90,69],[91,52],[92,189],[93,146],[94,60],[95,528],[96,209],[97,49],[98,53],[99,308],[100,214],[101,87],[102,221],[103,133],[104,34],[105,77],[106,66],[107,33],[108,32],[109,40],[110,52],[111,94],[112,155],[113,79],[114,77],[115,44],[116,136],[117,56],[118,229],[119,33],[120,36],[121,607],[122,151],[123,47],[124,69],[125,283],[126,43],[127,76],[128,231],[129,33],[130,34],[131,178],[132,43],[133,137],[134,170],[135,232],[136,33],[137,282],[138,49],[139,68],[140,46],[141,95],[142,189],[143,74],[144,52],[145,88],[146,180],[147,40],[148,174],[149,43],[150,133],[151,60],[152,233],[153,1446],[154,47],[155,57],[156,142],[157,85],[158,59],[159,174],[160,671],[160,710],[161,606],[162,408],[163,86],[164,673],[165,91],[166,35],[167,56],[168,46],[169,78],[170,285],[171,1342],[172,173],[173,341],[394,212],[174,290],[175,43],[176,66],[176,307],[177,66],[178,328],[393,37],[392,57],[391,78],[390,187],[389,60],[388,95],[179,1645],[180,236],[181,1047],[182,57],[183,123],[184,47],[185,103],[186,533],[187,210],[387,112],[386,46],[385,79],[384,9955],[0,199],[384,2984],[384,2661],[188,366],[189,644],[190,87],[191,90],[191,129],[191,309],[192,50],[193,167],[194,122],[195,102],[196,101],[197,642],[198,100],[199,84],[199,108],[200,320],[201,31],[202,31],[203,91],[204,86],[205,50],[206,109],[207,123],[208,116],[209,280],[210,191],[211,177],[212,86],[213,491],[214,393],[215,123],[216,50],[384,2637],[217,516],[218,383],[219,62],[220,135],[221,40],[222,65],[223,65],[224,240],[225,53],[226,94],[227,338],[228,54],[229,204],[230,34],[231,129],[232,143],[233,51],[234,430],[235,506],[236,44],[237,50],[238,38],[239,36],[240,57],[241,84],[242,219],[243,288],[244,260],[245,80],[246,1983],[247,273],[248,79],[249,336],[250,140],[251,72],[384,2452],[251,356],[252,103],[253,236],[254,249],[255,35],[256,43],[257,205],[258,88],[259,60],[260,110],[261,73],[261,234],[262,57],[263,109],[264,39],[265,56],[266,403],[267,37],[268,65],[269,233],[270,260],[271,50],[272,60],[273,59],[274,845],[275,42],[276,89],[277,1017],[278,77],[279,59],[280,132],[281,16],[281,26],[282,41],[283,260],[284,236],[285,162],[286,52],[287,112],[288,59],[289,201],[384,2411],[384,2374],[384,2362],[290,685],[291,43],[292,66],[293,146],[294,55],[295,42],[295,50],[296,175],[297,43],[298,76],[299,50],[300,60],[301,91],[302,172],[303,207],[304,409],[305,94],[306,1630],[307,288],[308,207],[309,40],[310,32],[311,114],[312,72],[313,267],[313,494],[314,117],[315,214],[316,130],[317,138],[318,61],[319,74],[320,180],[321,444],[322,233],[323,34],[324,45],[325,37],[326,60],[327,34],[328,42],[329,77],[330,44],[331,546],[332,198],[333,34],[334,99],[335,3803],[336,185],[337,120],[338,101],[339,318],[340,174],[341,288],[342,337],[343,114],[344,371],[345,87],[346,39],[347,72],[348,36],[349,93],[350,230],[351,70],[352,167],[353,195],[354,101],[355,1508],[356,67],[357,58],[358,403],[359,157],[360,63],[361,58],[361,116],[362,79],[363,741],[363,766],[364,59],[365,238],[366,46],[367,143],[368,120],[369,494],[370,71],[371,132],[372,57],[373,119],[374,46],[375,37],[376,47],[377,59],[378,45],[384,2248],[379,231],[380,49],[381,647],[382,96],[383,34],[384,12],[384,186],[384,484],[384,656],[384,2031],[384,864],[384,882],[384,987],[384,1145],[384,1169],[384,1991],[384,1464],[384,1717],[384,1814],[384,1832],[396,195],],
'100':[[384,1170],[251,73],],
'215':[[290,503],[179,449],[174,155],],
'217':[[188,275],],
'351':[[384,4134],],
'780':[[384,3714],],
'791':[[384,5404],[384,4434],],
'1211':[[384,5658],],
'1284':[[41,45],],
'1326':[[188,310],[188,288],],
'1591':[[179,1497],],
'1915':[[384,3312],],
'2345':[[188,306],[188,285],[188,264],],
'3413':[[179,438],[290,492],],
'3451':[[179,551],[290,605],],
'3497':[[179,715],[179,778],],
'3641':[[188,267],],
'3750':[[217,75],],
'4569':[[379,75],],
'4693':[[384,659],],
'4927':[[384,4736],],
'5021':[[384,8634],],
},{'100':[[0,200],[1,120],[2,41],[3,47],[4,64],[5,90],[6,104],[7,192],[8,39],[9,206],[10,365],[11,59],[12,657],[13,45],[14,60],[395,154],[15,54],[16,146],[17,44],[18,87],[19,138],[20,192],[21,207],[22,63],[23,147],[24,39],[25,102],[26,58],[27,75],[28,96],[29,206],[30,514],[31,59],[32,35],[33,63],[34,145],[35,58],[36,203],[37,99],[38,206],[39,999],[40,48],[394,213],[41,399],[42,1337],[43,34],[44,157],[45,45],[46,95],[47,44],[48,4994],[49,526],[50,122],[51,50],[52,364],[53,155],[54,1544],[55,43],[56,71],[57,320],[58,70],[59,99],[60,114],[61,98],[62,146],[63,116],[64,40],[65,190],[66,40],[67,69],[68,138],[69,103],[70,803],[71,97],[72,91],[73,94],[74,146],[75,147],[76,110],[77,156],[78,37],[79,65],[80,157],[81,69],[82,572],[83,145],[84,584],[85,66],[86,270],[87,101],[88,66],[89,492],[90,70],[91,53],[92,190],[93,147],[94,61],[95,529],[96,210],[97,50],[98,54],[99,309],[100,215],[101,88],[102,222],[103,134],[104,35],[105,78],[106,67],[107,34],[108,33],[109,41],[110,53],[111,95],[112,156],[113,80],[114,78],[115,45],[116,137],[117,57],[118,230],[119,34],[120,37],[121,608],[122,152],[123,48],[124,70],[125,284],[126,44],[127,77],[128,232],[129,34],[130,35],[131,179],[132,44],[133,138],[134,171],[135,233],[136,34],[137,283],[138,50],[139,69],[140,47],[141,96],[142,190],[143,75],[144,53],[145,89],[146,181],[147,41],[148,175],[149,44],[150,134],[151,61],[152,234],[153,1447],[154,48],[155,58],[156,143],[157,86],[158,60],[159,175],[160,711],[161,607],[162,409],[163,87],[164,674],[165,92],[166,36],[167,57],[168,47],[169,79],[170,286],[171,1343],[172,174],[173,342],[174,291],[175,44],[176,308],[177,67],[178,329],[179,1646],[180,237],[181,1048],[182,58],[183,124],[184,48],[185,104],[186,534],[187,211],[188,367],[189,645],[190,88],[191,310],[192,51],[193,168],[194,123],[195,103],[196,102],[197,643],[198,101],[199,109],[200,321],[201,32],[202,32],[203,92],[204,87],[205,51],[206,110],[207,124],[208,117],[209,281],[210,192],[211,178],[212,87],[213,492],[214,394],[215,124],[216,51],[217,517],[218,384],[219,63],[220,136],[221,41],[222,66],[223,66],[224,241],[225,54],[226,95],[227,339],[228,55],[229,205],[230,35],[231,130],[232,144],[233,52],[234,431],[235,507],[236,45],[237,51],[238,39],[239,37],[240,58],[241,85],[242,220],[243,289],[244,261],[245,81],[246,1984],[247,274],[248,80],[249,337],[250,141],[251,357],[252,104],[253,237],[254,250],[255,36],[256,44],[257,206],[258,89],[259,61],[260,111],[261,74],[261,235],[262,58],[263,110],[264,40],[265,57],[266,404],[267,38],[268,66],[269,234],[270,261],[271,51],[272,61],[273,60],[274,846],[275,43],[276,90],[277,1018],[278,78],[279,60],[280,133],[281,17],[281,27],[282,42],[283,261],[284,237],[285,163],[286,53],[287,113],[288,60],[289,202],[290,686],[291,44],[292,67],[293,147],[294,56],[295,51],[296,176],[297,44],[298,77],[299,51],[300,61],[301,92],[302,173],[303,208],[304,410],[305,95],[306,1631],[307,289],[308,208],[309,41],[310,33],[311,115],[312,73],[313,495],[314,118],[315,215],[316,131],[317,139],[318,62],[319,75],[320,181],[321,445],[322,234],[323,35],[324,46],[325,38],[326,61],[327,35],[328,43],[329,78],[330,45],[331,547],[332,199],[333,35],[334,100],[335,3804],[336,186],[337,121],[338,102],[339,319],[340,175],[341,289],[342,338],[343,115],[344,372],[345,88],[346,40],[347,73],[348,37],[349,94],[350,231],[351,71],[352,168],[353,196],[354,102],[355,1509],[356,68],[357,59],[358,404],[359,158],[360,64],[361,117],[362,80],[363,767],[364,60],[365,239],[366,47],[367,144],[368,121],[369,495],[370,72],[371,133],[372,58],[373,120],[374,47],[375,38],[376,48],[377,60],[378,46],[379,232],[380,50],[393,38],[381,648],[382,97],[383,35],[384,13],[392,58],[391,79],[390,188],[389,61],[388,96],[387,113],[386,47],[384,9956],[385,80],[396,196],],
'671':[[15,20],],
'780':[[384,3186],[384,3240],],
'1297':[[41,111],],
'4587':[[384,7653],[381,226],],
'4803':[[384,6980],],
'4905':[[384,7250],],
'4908':[[384,9201],],
'4927':[[384,8977],],
},{'101':[[0,201],[1,121],[2,42],[3,48],[4,65],[5,91],[6,105],[7,193],[8,40],[395,155],[9,207],[10,366],[11,60],[12,658],[13,46],[14,61],[15,55],[16,147],[17,45],[18,88],[19,139],[20,193],[21,208],[22,64],[23,148],[24,40],[25,103],[26,59],[27,76],[28,97],[394,214],[29,207],[30,515],[31,60],[32,36],[33,64],[34,146],[35,59],[36,204],[37,100],[38,207],[39,1000],[40,49],[41,400],[42,1338],[43,35],[44,158],[45,46],[46,96],[47,45],[48,4995],[49,527],[50,123],[51,51],[52,365],[53,156],[54,1545],[55,44],[56,72],[57,321],[58,71],[59,100],[60,115],[61,99],[62,147],[63,117],[64,41],[65,191],[66,41],[67,70],[68,139],[69,104],[70,804],[71,98],[72,92],[73,95],[74,147],[75,148],[76,111],[77,157],[78,38],[79,66],[80,158],[81,70],[82,573],[83,146],[84,585],[85,67],[86,271],[87,102],[88,67],[89,493],[90,71],[91,54],[92,191],[93,148],[94,62],[95,530],[96,211],[97,51],[98,55],[393,39],[99,310],[100,216],[101,89],[102,223],[103,135],[104,36],[105,79],[106,68],[107,35],[108,34],[109,42],[110,54],[111,96],[112,157],[113,81],[114,79],[115,46],[116,138],[117,58],[118,231],[119,35],[120,38],[121,609],[122,153],[123,49],[124,71],[125,285],[126,45],[127,78],[128,233],[129,35],[130,36],[131,180],[132,45],[133,139],[134,172],[135,234],[136,35],[137,284],[138,51],[139,70],[140,48],[141,97],[142,191],[143,76],[144,54],[145,90],[146,182],[147,42],[148,176],[149,45],[150,135],[151,62],[152,235],[153,1448],[154,49],[155,59],[156,144],[157,87],[158,61],[159,176],[160,712],[161,608],[162,410],[163,88],[164,675],[165,93],[166,37],[167,58],[168,48],[169,80],[170,287],[171,1344],[172,175],[173,343],[174,292],[175,45],[176,309],[177,68],[178,330],[179,1647],[180,238],[181,1049],[182,59],[183,125],[184,49],[185,105],[186,535],[187,212],[188,368],[189,646],[190,89],[191,311],[192,52],[193,169],[194,124],[195,104],[196,103],[197,644],[198,102],[199,110],[200,322],[201,33],[202,33],[203,93],[204,88],[205,52],[206,111],[207,125],[208,118],[209,282],[210,193],[211,179],[212,88],[213,493],[214,395],[215,125],[216,52],[217,518],[218,385],[219,64],[220,137],[221,42],[222,67],[223,67],[224,242],[225,55],[226,96],[227,340],[228,56],[229,206],[230,36],[231,131],[232,145],[233,53],[234,432],[392,59],[235,508],[236,46],[237,52],[238,40],[239,38],[240,59],[241,86],[242,221],[243,290],[244,262],[245,82],[246,1985],[247,275],[248,81],[249,338],[250,142],[251,358],[252,105],[253,238],[254,251],[255,37],[256,45],[257,207],[258,90],[259,62],[260,112],[261,236],[262,59],[263,111],[264,41],[265,58],[266,405],[267,39],[268,67],[269,235],[270,262],[271,52],[272,62],[273,61],[274,847],[275,44],[276,91],[277,1019],[278,79],[279,61],[280,134],[281,28],[282,43],[283,262],[284,238],[285,164],[286,54],[287,114],[288,61],[289,203],[290,687],[291,45],[292,68],[293,148],[294,57],[295,52],[296,177],[297,45],[298,78],[299,52],[300,62],[301,93],[302,174],[303,209],[304,411],[305,96],[306,1632],[307,290],[308,209],[309,42],[310,34],[311,116],[312,74],[313,496],[314,119],[315,216],[316,132],[317,140],[318,63],[319,76],[320,182],[321,446],[322,235],[323,36],[324,47],[325,39],[326,62],[327,36],[328,44],[329,79],[330,46],[331,548],[332,200],[333,36],[334,101],[335,3805],[336,187],[337,122],[338,103],[339,320],[340,176],[341,290],[342,339],[343,116],[344,373],[345,89],[346,41],[347,74],[348,38],[349,95],[350,232],[351,72],[352,169],[353,197],[354,103],[355,1510],[356,69],[357,60],[358,405],[359,159],[360,65],[361,118],[362,81],[363,768],[364,61],[365,240],[366,48],[367,145],[368,122],[369,496],[370,73],[371,134],[372,59],[373,121],[374,48],[375,39],[376,49],[377,61],[378,47],[379,233],[380,51],[381,649],[382,98],[383,36],[391,80],[390,189],[389,62],[384,9957],[385,81],[386,48],[387,114],[388,97],[396,197],],
'267':[[384,1102],[235,244],[29,163],[9,163],],
'925':[[99,233],],
'1434':[[384,2968],],
'3789':[[384,1127],],
},{'63':[[321,405],],
'102':[[1,122],[2,43],[3,49],[4,66],[5,92],[6,106],[7,194],[8,41],[9,208],[10,367],[11,61],[12,659],[13,47],[14,62],[15,56],[16,148],[17,46],[18,89],[19,140],[20,194],[21,209],[22,65],[23,149],[24,41],[25,104],[26,60],[27,77],[28,98],[29,208],[30,516],[31,61],[32,37],[33,65],[34,147],[35,60],[36,205],[37,101],[38,208],[39,1001],[40,50],[41,401],[42,1339],[43,36],[44,159],[45,47],[46,97],[47,46],[48,4996],[49,528],[50,124],[51,52],[52,366],[53,157],[54,1546],[55,45],[56,73],[57,322],[58,72],[59,101],[60,116],[61,100],[62,148],[63,118],[64,42],[65,192],[66,42],[67,71],[68,140],[69,105],[70,805],[71,99],[72,93],[73,96],[74,148],[75,149],[76,112],[77,158],[78,39],[79,67],[80,159],[81,71],[82,574],[83,147],[84,586],[85,68],[86,272],[87,103],[88,68],[89,494],[90,72],[91,55],[92,192],[93,149],[94,63],[95,531],[96,212],[97,52],[98,56],[99,311],[100,217],[101,90],[102,224],[103,136],[104,37],[105,80],[106,69],[107,36],[108,35],[109,43],[110,55],[111,97],[112,158],[113,82],[114,80],[115,47],[116,139],[117,59],[118,232],[119,36],[120,39],[121,610],[122,154],[123,50],[124,72],[125,286],[126,46],[127,79],[128,234],[129,36],[130,37],[131,181],[132,46],[133,140],[134,173],[135,235],[136,36],[137,285],[138,52],[139,71],[140,49],[141,98],[142,192],[143,77],[144,55],[145,91],[146,183],[147,43],[148,177],[149,46],[150,136],[151,63],[152,236],[153,1449],[154,50],[155,60],[156,145],[157,88],[158,62],[159,177],[160,713],[161,609],[162,411],[163,89],[164,676],[165,94],[166,38],[167,59],[168,49],[169,81],[170,288],[171,1345],[172,176],[173,344],[174,293],[175,46],[176,310],[177,69],[178,331],[179,1648],[180,239],[181,1050],[182,60],[183,126],[184,50],[185,106],[186,536],[187,213],[188,369],[189,647],[190,90],[191,312],[192,53],[193,170],[194,125],[195,105],[196,104],[197,645],[198,103],[199,111],[200,323],[201,34],[202,34],[203,94],[204,89],[205,53],[206,112],[207,126],[208,119],[209,283],[210,194],[211,180],[212,89],[213,494],[214,396],[215,126],[216,53],[217,519],[218,386],[219,65],[220,138],[221,43],[222,68],[223,68],[224,243],[225,56],[226,97],[227,341],[228,57],[229,207],[230,37],[231,132],[232,146],[233,54],[234,433],[235,509],[236,47],[237,53],[238,41],[239,39],[240,60],[241,87],[242,222],[243,291],[244,263],[245,83],[246,1986],[247,276],[248,82],[249,339],[250,143],[251,359],[252,106],[253,239],[254,252],[255,38],[256,46],[257,208],[258,91],[259,63],[260,113],[261,237],[262,60],[263,112],[264,42],[265,59],[266,406],[267,40],[268,68],[269,236],[270,263],[271,53],[272,63],[273,62],[274,848],[275,45],[276,92],[277,1020],[278,80],[279,62],[280,135],[281,29],[282,44],[283,263],[284,239],[285,165],[286,55],[287,115],[288,62],[289,204],[290,688],[291,46],[292,69],[293,149],[294,58],[295,53],[296,178],[297,46],[298,79],[299,53],[300,63],[301,94],[302,175],[303,210],[304,412],[305,97],[306,1633],[307,291],[308,210],[309,43],[310,35],[311,117],[312,75],[313,497],[314,120],[315,217],[316,133],[317,141],[318,64],[319,77],[320,183],[0,202],[321,447],[322,236],[323,37],[324,48],[325,40],[326,63],[327,37],[328,45],[329,80],[330,47],[331,549],[332,201],[333,37],[334,102],[335,3806],[336,188],[337,123],[338,104],[339,321],[340,177],[341,291],[342,340],[343,117],[344,374],[345,90],[346,42],[347,75],[348,39],[349,96],[350,233],[351,73],[352,170],[353,198],[354,104],[355,1511],[356,70],[357,61],[358,406],[359,160],[360,66],[361,119],[362,82],[363,769],[364,62],[365,241],[366,49],[367,146],[368,123],[369,497],[370,74],[371,135],[372,60],[373,122],[374,49],[375,40],[376,50],[377,62],[378,48],[379,234],[380,52],[381,650],[382,99],[383,37],[384,9958],[385,82],[386,49],[387,115],[388,98],[389,63],[390,190],[391,81],[392,60],[393,40],[394,215],[395,156],[396,198],],
},{'2':[[0,204],[1,124],[2,45],[3,51],[4,68],[5,94],[6,108],[7,196],[8,43],[9,210],[10,369],[11,63],[12,390],[12,661],[13,49],[14,64],[15,58],[16,150],[17,48],[18,91],[19,142],[20,196],[21,211],[22,67],[23,151],[24,43],[25,106],[26,62],[27,79],[28,100],[29,210],[30,518],[31,63],[32,39],[33,67],[34,149],[35,62],[36,207],[37,103],[38,210],[39,1003],[40,52],[41,403],[42,1265],[42,1341],[43,38],[44,161],[45,49],[46,99],[47,48],[48,4998],[49,530],[50,126],[51,54],[52,368],[53,159],[54,1548],[55,47],[56,75],[57,324],[58,74],[59,103],[60,118],[61,102],[62,150],[63,120],[64,44],[65,194],[66,44],[67,73],[68,142],[69,107],[70,807],[71,101],[72,95],[73,98],[74,150],[75,151],[76,114],[77,160],[78,41],[79,69],[80,161],[81,73],[82,576],[83,149],[84,588],[85,70],[86,274],[87,105],[88,70],[89,496],[90,74],[91,57],[92,194],[93,151],[94,65],[95,533],[96,214],[97,54],[98,58],[99,313],[100,219],[101,92],[102,226],[103,138],[104,39],[105,82],[106,71],[107,38],[108,37],[109,45],[110,57],[111,99],[112,160],[113,84],[114,82],[115,49],[116,141],[117,61],[118,234],[119,38],[120,41],[121,586],[121,612],[122,156],[123,52],[124,74],[125,288],[126,48],[127,81],[128,236],[129,38],[130,39],[131,183],[132,48],[133,142],[134,175],[135,237],[136,38],[137,287],[138,54],[139,73],[140,51],[141,100],[142,194],[143,79],[144,57],[145,93],[146,185],[147,45],[148,179],[149,48],[150,138],[151,65],[152,238],[153,1451],[154,52],[155,62],[156,147],[157,90],[158,64],[159,179],[160,715],[161,611],[162,413],[163,91],[164,678],[165,96],[166,40],[167,61],[168,51],[169,83],[170,290],[171,1347],[172,178],[173,346],[174,295],[175,48],[176,312],[177,71],[178,333],[179,1650],[180,241],[181,1052],[182,62],[183,128],[184,52],[185,108],[186,538],[187,215],[188,371],[189,649],[190,92],[191,314],[192,55],[193,172],[194,127],[195,107],[196,106],[197,647],[198,105],[199,113],[200,325],[201,36],[202,36],[203,96],[204,91],[205,55],[206,114],[207,128],[208,121],[209,285],[210,196],[211,182],[212,91],[213,496],[214,398],[215,128],[216,55],[217,521],[218,388],[219,67],[220,140],[221,45],[222,70],[223,70],[224,245],[225,58],[226,99],[227,343],[228,59],[229,209],[230,39],[231,134],[232,148],[233,56],[234,435],[235,511],[236,49],[237,55],[238,43],[239,41],[240,62],[241,89],[242,224],[243,293],[244,265],[245,85],[246,1988],[247,278],[248,84],[249,341],[250,145],[251,361],[252,108],[253,241],[254,254],[255,40],[256,48],[257,210],[258,93],[259,65],[260,115],[261,239],[262,62],[263,114],[264,44],[265,61],[266,408],[267,42],[268,70],[269,238],[270,265],[271,55],[272,65],[273,64],[274,850],[275,47],[276,94],[277,191],[277,794],[277,976],[277,1022],[278,82],[279,64],[280,137],[281,31],[282,46],[283,265],[284,241],[285,167],[286,57],[287,117],[288,64],[289,206],[290,690],[291,48],[292,71],[293,151],[294,60],[295,55],[296,180],[297,48],[298,81],[299,55],[300,65],[301,96],[302,177],[303,212],[304,414],[305,99],[306,1635],[307,293],[308,212],[309,45],[310,37],[311,119],[312,77],[313,499],[314,122],[315,219],[316,135],[317,143],[318,66],[319,79],[320,185],[321,449],[322,238],[323,39],[324,50],[325,42],[326,65],[327,39],[328,47],[329,82],[330,49],[331,551],[332,203],[333,39],[334,104],[335,3808],[336,190],[337,125],[338,106],[339,323],[340,179],[341,293],[342,342],[343,119],[344,376],[345,92],[346,44],[347,77],[348,41],[349,98],[350,235],[351,75],[352,172],[353,200],[354,106],[355,172],[355,1513],[356,72],[357,63],[358,408],[359,162],[360,68],[361,121],[362,84],[363,771],[364,64],[365,243],[366,51],[367,148],[368,125],[369,499],[370,76],[371,137],[372,62],[373,124],[374,51],[375,42],[376,52],[377,64],[378,50],[379,236],[380,54],[381,652],[382,101],[383,39],[384,9960],[385,84],[386,51],[387,117],[388,100],[389,65],[390,192],[391,83],[392,62],[393,42],[394,217],[395,158],[396,200],],
},{'104':[[0,205],[1,125],[2,46],[3,52],[4,69],[5,95],[6,109],[7,197],[8,44],[9,211],[10,370],[11,64],[12,391],[12,662],[13,50],[14,65],[15,59],[16,151],[17,49],[18,92],[19,143],[20,197],[21,212],[22,68],[23,152],[24,44],[25,107],[26,63],[27,80],[28,101],[29,211],[30,519],[31,64],[32,40],[33,68],[34,150],[35,63],[36,208],[37,104],[38,211],[39,1004],[40,53],[41,404],[42,1266],[42,1342],[43,39],[44,162],[45,50],[46,100],[47,49],[48,4999],[49,531],[50,127],[51,55],[52,369],[53,160],[395,159],[54,1549],[55,48],[56,76],[57,325],[58,75],[59,104],[60,119],[61,103],[62,151],[63,121],[64,45],[65,195],[66,45],[67,74],[68,143],[69,108],[70,808],[71,102],[72,96],[73,99],[74,151],[75,152],[76,115],[77,161],[78,42],[79,70],[80,162],[81,74],[82,577],[83,150],[84,589],[85,71],[86,275],[87,106],[88,71],[89,497],[90,75],[91,58],[92,195],[93,152],[94,66],[95,534],[96,215],[97,55],[98,59],[99,314],[100,220],[101,93],[102,227],[103,139],[104,40],[105,83],[106,72],[107,39],[108,38],[109,46],[110,58],[111,100],[112,161],[113,85],[114,83],[115,50],[116,142],[117,62],[118,235],[119,39],[120,42],[121,587],[121,613],[122,157],[123,53],[124,75],[125,289],[126,49],[127,82],[128,237],[129,39],[130,40],[131,184],[132,49],[133,143],[134,176],[135,238],[136,39],[137,288],[138,55],[139,74],[140,52],[141,101],[142,195],[143,80],[144,58],[145,94],[146,186],[147,46],[148,180],[149,49],[150,139],[151,66],[152,239],[153,1452],[154,53],[155,63],[156,148],[157,91],[158,65],[394,218],[159,180],[160,716],[161,612],[162,414],[163,92],[164,679],[165,97],[166,41],[167,62],[168,52],[169,84],[170,291],[171,1348],[172,179],[173,347],[174,296],[175,49],[176,313],[177,72],[178,334],[179,1651],[180,242],[181,1053],[182,63],[183,129],[184,53],[185,109],[186,539],[187,216],[393,43],[188,372],[189,650],[190,93],[191,315],[192,56],[193,173],[194,128],[195,108],[196,107],[197,648],[198,106],[199,114],[200,326],[201,37],[202,37],[203,97],[204,92],[205,56],[206,115],[207,129],[208,122],[209,286],[210,197],[211,183],[212,92],[213,497],[214,399],[215,129],[216,56],[217,522],[218,389],[219,68],[220,141],[221,46],[222,71],[223,71],[224,246],[225,59],[226,100],[227,344],[228,60],[229,210],[230,40],[231,135],[232,149],[233,57],[234,436],[235,512],[236,50],[237,56],[238,44],[239,42],[240,63],[241,90],[242,225],[243,294],[244,266],[245,86],[246,1989],[247,279],[248,85],[249,342],[250,146],[251,362],[252,109],[253,242],[254,255],[255,41],[256,49],[257,211],[258,94],[259,66],[260,116],[261,240],[262,63],[263,115],[264,45],[265,62],[266,409],[267,43],[268,71],[269,239],[270,266],[271,56],[272,66],[273,65],[274,851],[275,48],[276,95],[277,192],[277,795],[277,977],[277,1023],[278,83],[279,65],[280,138],[281,32],[282,47],[283,266],[284,242],[285,168],[286,58],[287,118],[288,65],[289,207],[290,691],[291,49],[292,72],[293,152],[294,61],[295,56],[296,181],[297,49],[298,82],[299,56],[300,66],[301,97],[302,178],[303,213],[304,415],[305,100],[306,1636],[307,294],[308,213],[309,46],[310,38],[311,120],[312,78],[313,500],[314,123],[315,220],[316,136],[317,144],[318,67],[319,80],[320,186],[321,450],[322,239],[323,40],[324,51],[325,43],[326,66],[327,40],[328,48],[329,83],[330,50],[392,63],[331,552],[332,204],[333,40],[334,105],[335,3809],[336,191],[337,126],[338,107],[339,324],[340,180],[341,294],[342,343],[343,120],[344,377],[345,93],[346,45],[347,78],[348,42],[349,99],[350,236],[351,76],[352,173],[353,201],[354,107],[355,173],[355,1514],[356,73],[357,64],[358,409],[359,163],[360,69],[361,122],[362,85],[363,772],[364,65],[365,244],[366,52],[367,149],[368,126],[369,500],[370,77],[371,138],[372,63],[373,125],[374,52],[375,43],[376,53],[377,65],[378,51],[379,237],[380,55],[381,653],[382,102],[383,40],[384,9961],[385,85],[386,52],[387,118],[388,101],[389,66],[390,193],[391,84],[396,201],],
'2118':[[54,217],[331,521],],
'3052':[[159,162],],
'3638':[[188,75],],
},{'15':[[0,207],[1,127],[2,48],[3,54],[4,71],[5,97],[6,111],[7,199],[8,46],[9,213],[10,372],[11,66],[12,664],[13,52],[14,67],[15,61],[16,153],[17,51],[18,94],[19,145],[20,199],[21,214],[22,70],[23,154],[24,46],[25,109],[26,65],[27,82],[28,103],[29,213],[30,521],[31,66],[32,42],[33,70],[34,152],[35,65],[36,210],[37,106],[38,213],[39,1006],[40,55],[41,406],[42,1344],[43,41],[44,164],[45,52],[46,102],[47,51],[48,5001],[49,533],[50,129],[51,57],[52,371],[53,162],[54,1551],[55,50],[56,78],[57,327],[58,77],[59,106],[60,121],[61,105],[62,153],[63,123],[64,47],[65,197],[66,47],[67,76],[68,145],[69,110],[70,810],[71,104],[72,98],[73,101],[74,153],[75,154],[76,117],[77,163],[78,44],[79,72],[80,164],[81,76],[82,579],[83,152],[84,591],[85,73],[86,277],[87,108],[88,73],[89,499],[90,77],[91,60],[92,197],[93,154],[94,68],[95,536],[96,217],[97,57],[98,61],[99,316],[100,222],[101,95],[102,229],[103,141],[104,42],[105,85],[106,74],[107,41],[108,40],[109,48],[110,60],[111,102],[112,163],[113,87],[114,85],[115,52],[116,144],[117,64],[118,237],[119,41],[120,44],[121,615],[122,159],[123,55],[124,77],[125,291],[126,51],[127,84],[128,239],[129,41],[130,42],[131,186],[132,51],[133,145],[134,178],[135,240],[136,41],[137,290],[138,57],[139,76],[140,54],[141,103],[142,197],[143,82],[144,60],[145,96],[146,188],[147,48],[148,182],[149,51],[150,141],[151,68],[152,241],[153,1454],[154,55],[155,65],[156,150],[157,93],[158,67],[159,182],[160,718],[161,614],[162,416],[163,94],[164,681],[165,99],[166,43],[167,64],[168,54],[169,86],[170,293],[171,1350],[172,181],[173,349],[174,298],[175,51],[176,315],[177,74],[178,336],[179,1653],[180,244],[181,1055],[182,65],[183,131],[184,55],[185,111],[186,541],[187,218],[188,374],[189,652],[190,95],[191,317],[192,58],[193,175],[194,130],[195,110],[196,109],[197,650],[198,108],[199,116],[200,328],[201,39],[202,39],[203,99],[204,94],[205,58],[206,117],[207,131],[208,124],[209,288],[210,199],[211,185],[212,94],[213,499],[214,401],[215,131],[216,58],[217,524],[218,391],[219,70],[220,143],[221,48],[222,73],[223,73],[224,248],[225,61],[226,102],[227,346],[228,62],[229,212],[230,42],[231,137],[232,151],[233,59],[234,438],[235,514],[236,52],[237,58],[238,46],[239,44],[240,65],[241,92],[242,227],[243,296],[244,268],[245,88],[246,1991],[247,281],[248,87],[249,344],[250,148],[251,364],[252,111],[253,244],[254,257],[255,43],[256,51],[257,213],[258,96],[259,68],[260,118],[261,242],[262,65],[263,117],[264,47],[265,64],[266,411],[267,45],[268,73],[269,241],[270,268],[271,58],[272,68],[273,67],[274,853],[275,50],[276,97],[277,1025],[278,85],[279,67],[280,140],[281,34],[282,49],[283,268],[284,244],[285,170],[286,60],[287,120],[288,67],[289,209],[290,693],[291,51],[292,74],[293,154],[294,63],[295,58],[296,183],[297,51],[298,84],[299,58],[300,68],[301,99],[302,180],[303,215],[304,417],[305,102],[306,1638],[307,296],[308,215],[309,48],[310,40],[311,122],[312,80],[313,502],[314,125],[315,222],[316,138],[317,146],[318,69],[319,82],[320,188],[321,452],[322,241],[323,42],[324,53],[325,45],[326,68],[327,42],[328,50],[329,85],[330,52],[331,554],[332,206],[333,42],[334,107],[335,3811],[336,193],[337,128],[338,109],[339,326],[340,182],[341,296],[342,345],[343,122],[344,379],[345,95],[346,47],[347,80],[348,44],[349,101],[350,238],[351,78],[352,175],[353,203],[354,109],[355,1516],[356,75],[357,66],[358,411],[359,165],[360,71],[361,124],[362,87],[363,774],[364,67],[365,246],[366,54],[367,151],[368,128],[369,502],[370,79],[371,140],[372,65],[373,127],[374,54],[375,45],[376,55],[377,67],[378,53],[379,239],[380,57],[381,655],[382,104],[383,42],[384,9963],[385,87],[386,54],[387,120],[388,103],[389,68],[390,195],[391,86],[392,65],[393,45],[394,220],[395,161],[396,203],],
},{'2':[[30,447],[355,1131],],
'5':[[384,7326],],
'12':[[384,2000],],
'27':[[384,3519],],
'39':[[363,747],],
'67':[[54,391],],
'106':[[7,200],[8,47],[9,214],[10,373],[11,67],[395,162],[394,221],[12,665],[13,53],[14,68],[15,62],[16,154],[17,52],[18,95],[19,146],[20,200],[21,215],[22,71],[23,155],[24,47],[25,110],[26,66],[27,83],[28,104],[29,214],[5,98],[30,522],[31,67],[32,43],[33,71],[34,153],[35,66],[36,211],[37,107],[38,214],[39,1007],[40,56],[41,407],[393,46],[392,66],[42,1345],[43,42],[44,165],[45,53],[46,103],[47,52],[391,87],[390,196],[389,69],[48,5002],[49,534],[50,130],[51,58],[52,372],[53,163],[388,104],[6,112],[387,121],[54,1552],[55,51],[56,79],[57,328],[58,78],[59,107],[386,55],[60,122],[61,106],[62,154],[63,124],[64,48],[65,198],[66,48],[67,77],[68,146],[69,111],[70,811],[71,105],[72,99],[73,102],[74,154],[75,155],[76,118],[77,164],[78,45],[79,73],[80,165],[81,77],[82,580],[83,153],[84,592],[85,74],[86,278],[87,109],[88,74],[89,500],[90,78],[91,61],[92,198],[93,155],[94,69],[95,537],[96,218],[97,58],[98,62],[99,317],[100,223],[101,96],[102,230],[103,142],[104,43],[105,86],[106,75],[107,42],[108,41],[109,49],[110,61],[111,103],[112,164],[113,88],[114,86],[115,53],[116,145],[117,65],[118,238],[119,42],[120,45],[121,616],[122,160],[123,56],[124,78],[125,292],[126,52],[127,85],[128,240],[129,42],[130,43],[131,187],[132,52],[133,146],[134,179],[135,241],[136,42],[137,291],[138,58],[139,77],[140,55],[141,104],[142,198],[143,83],[144,61],[145,97],[146,189],[147,49],[148,183],[149,52],[150,142],[151,69],[152,242],[153,1455],[154,56],[155,66],[156,151],[157,94],[158,68],[159,183],[160,719],[161,615],[162,417],[163,95],[164,682],[165,100],[166,44],[167,65],[168,55],[169,87],[170,294],[385,88],[171,1351],[172,182],[173,350],[4,72],[175,52],[176,316],[177,75],[178,337],[179,1654],[180,245],[181,1056],[182,66],[183,132],[184,56],[384,9964],[185,112],[186,542],[187,219],[188,375],[189,653],[190,96],[191,318],[192,59],[193,176],[194,131],[195,111],[196,110],[197,651],[198,109],[199,117],[200,329],[201,40],[202,40],[203,100],[204,95],[205,59],[206,118],[207,132],[208,125],[209,289],[210,200],[211,186],[212,95],[213,500],[214,402],[215,132],[216,59],[217,525],[218,392],[219,71],[220,144],[221,49],[222,74],[223,74],[224,249],[225,62],[226,103],[227,347],[228,63],[229,213],[230,43],[231,138],[232,152],[233,60],[234,439],[235,515],[236,53],[237,59],[238,47],[239,45],[240,66],[241,93],[242,228],[243,297],[244,269],[245,89],[246,1992],[247,282],[248,88],[249,345],[250,149],[251,365],[252,112],[253,245],[254,258],[255,44],[256,52],[257,214],[258,97],[259,69],[260,119],[261,243],[262,66],[263,118],[264,48],[265,65],[266,412],[267,46],[268,74],[269,242],[270,269],[271,59],[272,69],[273,68],[274,854],[275,51],[276,98],[277,1026],[278,86],[279,68],[280,141],[281,35],[282,50],[283,269],[284,245],[285,171],[286,61],[287,121],[288,68],[289,210],[290,694],[291,52],[292,75],[293,155],[294,64],[295,59],[296,184],[297,52],[298,85],[299,59],[300,69],[301,100],[302,181],[303,216],[304,418],[305,103],[3,55],[306,1639],[307,297],[308,216],[309,49],[310,41],[311,123],[312,81],[313,503],[314,126],[315,223],[316,139],[317,147],[318,70],[319,83],[2,49],[320,189],[321,453],[322,242],[323,43],[324,54],[325,46],[326,69],[327,43],[328,51],[1,128],[383,43],[329,86],[330,53],[331,555],[332,207],[333,43],[334,108],[335,3812],[336,194],[337,129],[338,110],[339,327],[340,183],[341,297],[342,346],[343,123],[382,105],[344,380],[345,96],[346,48],[347,81],[348,45],[349,102],[350,239],[351,79],[352,176],[353,204],[354,110],[174,299],[381,656],[355,1517],[356,76],[357,67],[358,412],[359,166],[360,72],[361,125],[362,88],[0,208],[363,775],[364,68],[365,247],[366,55],[367,152],[368,129],[369,503],[370,80],[371,141],[372,66],[373,128],[374,55],[375,46],[376,56],[377,68],[378,54],[379,240],[380,58],[396,204],],
'164':[[329,60],],
'167':[[344,110],[355,1440],[329,43],],
'305':[[384,6501],],
'321':[[384,3107],],
'481':[[384,3390],],
'547':[[12,587],[12,178],[48,4988],[54,31],[48,40],[48,14],[54,1540],[171,1279],[306,6],[185,82],],
'601':[[42,1262],[320,171],],
'791':[[42,1072],],
'817':[[384,7353],],
'869':[[384,1159],],
'908':[[60,64],],
'1205':[[384,3380],],
'1245':[[384,2148],],
'1445':[[384,2209],],
'3196':[[384,1530],],
'3876':[[384,3192],],
'4628':[[384,124],],
'4696':[[384,676],],
},{'107':[[0,209],[1,129],[2,50],[3,56],[4,73],[5,99],[6,113],[7,201],[8,48],[9,215],[10,374],[11,68],[12,666],[13,54],[14,69],[15,63],[16,155],[17,53],[18,96],[19,147],[20,201],[21,216],[22,72],[23,156],[24,48],[25,111],[26,67],[27,84],[28,105],[29,215],[30,523],[31,68],[32,44],[33,72],[34,154],[35,67],[36,212],[37,108],[38,215],[39,1008],[40,57],[41,408],[42,1346],[43,43],[44,166],[45,54],[46,104],[47,53],[48,5003],[49,535],[50,131],[51,59],[52,373],[53,164],[54,1553],[55,52],[56,80],[57,329],[58,79],[59,108],[60,123],[61,107],[62,155],[63,125],[64,49],[65,199],[66,49],[67,78],[68,147],[69,112],[70,812],[71,106],[72,100],[73,103],[74,155],[75,156],[76,119],[77,165],[78,46],[79,74],[80,166],[81,78],[82,581],[83,154],[84,593],[85,75],[86,279],[87,110],[88,75],[89,501],[90,79],[91,62],[92,199],[93,156],[94,70],[95,538],[96,219],[97,59],[98,63],[99,318],[100,224],[101,97],[102,231],[103,143],[104,44],[105,87],[106,76],[107,43],[108,42],[109,50],[110,62],[111,104],[112,165],[113,89],[114,87],[115,54],[116,146],[117,66],[118,239],[119,43],[120,46],[121,617],[122,161],[123,57],[124,79],[395,163],[125,293],[126,53],[127,86],[128,241],[129,43],[130,44],[131,188],[132,53],[133,147],[134,180],[135,242],[136,43],[137,292],[138,59],[139,78],[140,56],[141,105],[142,199],[143,84],[144,62],[145,98],[146,190],[147,50],[148,184],[149,53],[150,143],[151,70],[152,243],[153,1456],[154,57],[155,67],[156,152],[157,95],[158,69],[394,222],[159,184],[160,720],[161,616],[162,418],[163,96],[164,683],[165,101],[166,45],[167,66],[168,56],[169,88],[170,295],[171,1352],[172,183],[173,351],[174,300],[175,53],[176,317],[177,76],[178,338],[179,1655],[180,246],[181,1057],[182,67],[183,133],[184,57],[185,113],[186,543],[187,220],[188,376],[189,654],[190,97],[191,319],[192,60],[193,177],[194,132],[195,112],[196,111],[197,652],[198,110],[199,118],[200,330],[201,41],[202,41],[203,101],[204,96],[205,60],[206,119],[207,133],[208,126],[209,290],[210,201],[211,187],[212,96],[213,501],[214,403],[215,133],[216,60],[217,526],[218,393],[219,72],[220,145],[221,50],[222,75],[223,75],[224,250],[225,63],[226,104],[227,348],[228,64],[229,214],[230,44],[231,139],[232,153],[233,61],[234,440],[235,516],[236,54],[237,60],[238,48],[239,46],[240,67],[241,94],[242,229],[243,298],[244,270],[245,90],[246,1993],[247,283],[248,89],[249,346],[250,150],[251,366],[252,113],[253,246],[254,259],[255,45],[256,53],[257,215],[258,98],[259,70],[260,120],[261,244],[262,67],[263,119],[264,49],[265,66],[266,413],[393,47],[267,47],[268,75],[269,243],[270,270],[271,60],[272,70],[273,69],[274,855],[275,52],[276,99],[277,1027],[278,87],[279,69],[280,142],[281,36],[282,51],[283,270],[284,246],[285,172],[286,62],[287,122],[288,69],[289,211],[290,695],[291,53],[292,76],[293,156],[294,65],[295,60],[296,185],[297,53],[298,86],[299,60],[300,70],[301,101],[302,182],[303,217],[304,419],[305,104],[306,1640],[307,298],[308,217],[309,50],[310,42],[311,124],[312,82],[313,504],[314,127],[315,224],[316,140],[317,148],[318,71],[319,84],[320,190],[321,454],[322,243],[323,44],[324,55],[325,47],[326,70],[327,44],[328,52],[329,87],[330,54],[331,556],[332,208],[333,44],[334,109],[335,3813],[336,195],[337,130],[338,111],[339,328],[340,184],[341,298],[342,347],[343,124],[344,381],[345,97],[346,49],[347,82],[348,46],[349,103],[350,240],[351,80],[352,177],[353,205],[354,111],[355,1518],[356,77],[357,68],[358,413],[359,167],[360,73],[361,126],[362,89],[363,776],[364,69],[365,248],[366,56],[367,153],[368,130],[369,504],[370,81],[371,142],[372,67],[373,129],[374,56],[375,47],[376,57],[377,69],[378,55],[379,241],[380,59],[381,657],[382,106],[383,44],[384,9965],[385,89],[386,56],[387,122],[388,105],[389,70],[390,197],[391,88],[392,67],[396,205],],
'511':[[125,146],],
'1004':[[267,22],],
'3020':[[159,23],],
},{'108':[[0,210],[1,130],[2,51],[3,57],[4,74],[5,100],[6,114],[7,202],[8,49],[9,216],[10,375],[11,69],[12,667],[13,55],[14,70],[15,64],[16,156],[17,54],[18,97],[19,148],[20,202],[21,217],[22,73],[23,157],[24,49],[25,112],[26,68],[27,85],[28,106],[29,216],[30,524],[31,69],[32,45],[33,73],[34,155],[35,68],[36,213],[37,109],[38,216],[39,1009],[40,58],[41,409],[42,1347],[43,44],[44,167],[45,55],[46,105],[47,54],[48,5004],[49,536],[50,132],[51,60],[52,374],[53,165],[54,1554],[55,53],[56,81],[57,330],[58,80],[59,109],[60,124],[61,108],[62,156],[63,126],[64,50],[65,200],[66,50],[67,79],[68,148],[69,113],[70,813],[71,107],[72,101],[73,104],[74,156],[75,157],[76,120],[77,166],[78,47],[79,75],[80,167],[81,79],[82,582],[83,155],[84,594],[85,76],[86,280],[87,111],[88,76],[89,502],[90,80],[91,63],[92,200],[93,157],[94,71],[95,539],[96,220],[97,60],[98,64],[99,319],[100,225],[101,98],[102,232],[103,144],[104,45],[105,88],[106,77],[107,44],[108,43],[109,51],[110,63],[111,105],[112,166],[113,90],[114,88],[115,55],[116,147],[117,67],[118,240],[119,44],[120,47],[121,618],[122,162],[123,58],[124,80],[125,294],[126,54],[127,87],[128,242],[129,44],[130,45],[131,189],[132,54],[133,148],[134,181],[135,243],[136,44],[137,293],[138,60],[139,79],[140,57],[141,106],[142,200],[143,85],[144,63],[145,99],[146,191],[147,51],[148,185],[149,54],[150,144],[151,71],[152,244],[153,1457],[154,58],[155,68],[156,153],[157,96],[158,70],[159,185],[160,721],[161,617],[162,419],[163,97],[164,684],[165,102],[166,46],[167,67],[168,57],[169,89],[170,296],[171,1353],[172,184],[173,352],[174,301],[175,54],[176,318],[177,77],[178,339],[179,1656],[180,247],[181,1058],[182,68],[183,134],[184,58],[185,114],[186,544],[187,221],[188,377],[189,655],[190,98],[191,320],[192,61],[193,178],[194,133],[195,113],[196,112],[197,653],[198,111],[199,119],[200,331],[201,42],[202,42],[203,102],[204,97],[205,61],[206,120],[207,134],[208,127],[209,291],[210,202],[211,188],[212,97],[213,502],[214,404],[215,134],[216,61],[217,527],[218,394],[219,73],[220,146],[221,51],[222,76],[223,76],[224,251],[225,64],[226,105],[227,349],[228,65],[229,215],[230,45],[231,140],[232,154],[233,62],[234,441],[235,517],[236,55],[237,61],[238,49],[239,47],[240,68],[241,95],[242,230],[243,299],[244,271],[245,91],[246,1994],[247,284],[248,90],[249,347],[250,151],[251,367],[252,114],[253,247],[254,260],[255,46],[256,54],[257,216],[258,99],[259,71],[260,121],[261,245],[262,68],[263,120],[264,50],[265,67],[266,414],[267,48],[268,76],[269,244],[270,271],[271,61],[272,71],[273,70],[274,856],[275,53],[276,100],[277,1028],[278,88],[279,70],[280,143],[281,37],[282,52],[283,271],[284,247],[285,173],[286,63],[287,123],[288,70],[289,212],[290,696],[291,54],[292,77],[293,157],[294,66],[295,61],[296,186],[297,54],[298,87],[299,61],[300,71],[301,102],[302,183],[303,218],[304,420],[305,105],[306,1641],[307,299],[308,218],[309,51],[310,43],[311,125],[312,83],[313,505],[314,128],[315,225],[316,141],[317,149],[318,72],[319,85],[320,191],[321,455],[322,244],[323,45],[324,56],[325,48],[326,71],[327,45],[328,53],[329,88],[330,55],[331,557],[332,209],[333,45],[334,110],[335,3814],[336,196],[337,131],[338,112],[339,329],[340,185],[341,299],[342,348],[343,125],[344,382],[345,98],[346,50],[347,83],[348,47],[349,104],[350,241],[351,81],[352,178],[353,206],[354,112],[355,1519],[356,78],[357,69],[358,414],[359,168],[360,74],[361,127],[362,90],[363,777],[364,70],[365,249],[366,57],[367,154],[368,131],[369,505],[370,82],[371,143],[372,68],[373,130],[374,57],[375,48],[376,58],[377,70],[378,56],[379,242],[380,60],[381,658],[382,107],[383,45],[384,9966],[385,90],[386,57],[387,123],[388,106],[389,71],[390,198],[391,89],[392,68],[393,48],[394,223],[395,164],[396,206],],
},{'109':[[0,211],[1,131],[2,52],[3,58],[4,75],[5,101],[6,115],[7,203],[8,50],[9,217],[10,376],[11,70],[12,668],[13,56],[14,71],[15,65],[16,157],[17,55],[18,98],[19,149],[20,203],[21,218],[22,74],[23,158],[24,50],[25,113],[26,69],[27,86],[28,107],[29,217],[30,525],[31,70],[32,46],[33,74],[34,156],[35,69],[36,214],[37,110],[38,217],[39,1010],[40,59],[41,410],[42,1348],[43,45],[44,168],[45,56],[46,106],[47,55],[48,5005],[49,537],[50,133],[51,61],[52,375],[53,166],[54,1555],[55,54],[56,82],[57,331],[58,81],[59,110],[60,125],[61,109],[62,157],[63,127],[64,51],[65,201],[66,51],[67,80],[68,149],[69,114],[70,814],[71,108],[72,102],[73,105],[74,157],[75,158],[76,121],[77,167],[78,48],[79,76],[80,168],[81,80],[82,583],[83,156],[84,595],[85,77],[86,281],[87,112],[88,77],[89,503],[90,81],[91,64],[92,201],[93,158],[94,72],[95,540],[96,221],[97,61],[98,65],[99,320],[100,226],[101,99],[102,233],[103,145],[104,46],[105,89],[106,78],[107,45],[108,44],[109,52],[110,64],[111,106],[112,167],[113,91],[114,89],[115,56],[116,148],[117,68],[118,241],[119,45],[120,48],[121,619],[122,163],[123,59],[124,81],[125,295],[126,55],[127,88],[128,243],[129,45],[130,46],[131,190],[132,55],[133,149],[134,182],[135,244],[136,45],[137,294],[138,61],[139,80],[140,58],[141,107],[142,201],[143,86],[144,64],[145,100],[146,192],[147,52],[148,186],[149,55],[150,145],[151,72],[152,245],[153,1458],[154,59],[155,69],[156,154],[157,97],[158,71],[159,186],[160,722],[161,618],[162,420],[163,98],[164,685],[165,103],[166,47],[167,68],[168,58],[169,90],[170,297],[171,1354],[172,185],[173,353],[174,302],[175,55],[176,319],[177,78],[178,340],[179,1657],[180,248],[181,1059],[182,69],[183,135],[184,59],[185,115],[186,545],[187,222],[188,378],[189,656],[190,99],[191,321],[192,62],[193,179],[194,134],[195,114],[196,113],[197,654],[198,112],[199,120],[200,332],[201,43],[202,43],[203,103],[204,98],[205,62],[206,121],[207,135],[208,128],[209,292],[210,203],[211,189],[212,98],[213,503],[214,405],[215,135],[216,62],[217,528],[218,395],[219,74],[220,147],[221,52],[222,77],[223,77],[224,252],[225,65],[226,106],[227,350],[228,66],[229,216],[230,46],[231,141],[232,155],[233,63],[234,442],[235,518],[236,56],[237,62],[238,50],[239,48],[240,69],[241,96],[242,231],[243,300],[244,272],[245,92],[246,1995],[247,285],[248,91],[249,348],[250,152],[251,368],[252,115],[253,248],[254,261],[255,47],[256,55],[257,217],[258,100],[259,72],[260,122],[261,246],[262,69],[263,121],[264,51],[265,68],[266,415],[267,49],[268,77],[269,245],[270,272],[271,62],[272,72],[273,71],[274,857],[275,54],[276,101],[277,1029],[278,89],[279,71],[280,144],[281,38],[282,53],[283,272],[284,248],[285,174],[286,64],[287,124],[288,71],[289,213],[290,697],[291,55],[292,78],[293,158],[294,67],[295,62],[296,187],[297,55],[298,88],[299,62],[300,72],[301,103],[302,184],[303,219],[304,421],[305,106],[306,1642],[307,300],[308,219],[309,52],[310,44],[311,126],[312,84],[313,506],[314,129],[315,226],[316,142],[317,150],[318,73],[319,86],[320,192],[321,456],[322,245],[323,46],[324,57],[325,49],[326,72],[327,46],[328,54],[329,89],[330,56],[331,558],[332,210],[333,46],[334,111],[335,3815],[336,197],[337,132],[338,113],[339,330],[340,186],[341,300],[342,349],[343,126],[344,383],[345,99],[346,51],[347,84],[348,48],[349,105],[350,242],[351,82],[352,179],[353,207],[354,113],[355,1520],[356,79],[357,70],[358,415],[359,169],[360,75],[361,128],[362,91],[363,778],[364,71],[365,250],[366,58],[367,155],[368,132],[369,506],[370,83],[371,144],[372,69],[373,131],[374,58],[375,49],[376,59],[377,71],[378,57],[379,243],[380,61],[381,659],[382,108],[383,46],[384,9967],[385,91],[386,58],[387,124],[388,107],[389,72],[390,199],[391,90],[392,69],[393,49],[394,224],[395,165],[396,207],],
},{'110':[[0,212],[1,132],[2,53],[3,59],[4,76],[5,102],[6,116],[7,204],[8,51],[9,218],[10,377],[11,71],[12,669],[13,57],[14,72],[15,66],[16,158],[17,56],[18,99],[19,150],[20,204],[21,219],[22,75],[23,159],[24,51],[25,114],[26,70],[27,87],[28,108],[29,218],[30,526],[31,71],[32,47],[33,75],[34,157],[35,70],[36,215],[37,111],[38,218],[39,1011],[40,60],[41,411],[42,1349],[43,46],[44,169],[45,57],[46,107],[47,56],[48,5006],[49,538],[50,134],[51,62],[52,376],[53,167],[54,1556],[55,55],[56,83],[57,332],[58,82],[59,111],[60,126],[61,110],[62,158],[63,128],[64,52],[65,202],[66,52],[67,81],[68,150],[69,115],[70,815],[71,109],[72,103],[73,106],[74,158],[75,159],[76,122],[77,168],[78,49],[79,77],[80,169],[81,81],[82,584],[83,157],[84,596],[85,78],[86,282],[87,113],[88,78],[89,504],[90,82],[91,65],[92,202],[93,159],[94,73],[95,541],[96,222],[97,62],[98,66],[99,321],[100,227],[101,100],[102,234],[103,146],[104,47],[105,90],[106,79],[107,46],[108,45],[109,53],[110,65],[111,107],[112,168],[113,92],[114,90],[115,57],[116,149],[117,69],[118,242],[119,46],[120,49],[121,620],[122,164],[123,60],[124,82],[125,296],[126,56],[127,89],[128,244],[129,46],[130,47],[131,191],[132,56],[133,150],[134,183],[135,245],[136,46],[137,295],[138,62],[139,81],[140,59],[141,108],[142,202],[143,87],[144,65],[145,101],[146,193],[147,53],[148,187],[149,56],[150,146],[151,73],[152,246],[153,1459],[154,60],[155,70],[156,155],[157,98],[158,72],[159,187],[160,723],[161,619],[162,421],[163,99],[164,686],[165,104],[166,48],[167,69],[168,59],[169,91],[170,298],[171,1355],[172,186],[173,354],[174,303],[175,56],[176,320],[177,79],[178,341],[395,166],[179,1658],[180,249],[181,1060],[182,70],[183,136],[184,60],[185,116],[186,546],[187,223],[188,379],[189,657],[190,100],[191,322],[192,63],[193,180],[194,135],[195,115],[196,114],[197,655],[198,113],[199,121],[200,333],[201,44],[202,44],[203,104],[204,99],[205,63],[206,122],[207,136],[208,129],[209,293],[210,204],[211,190],[212,99],[213,504],[214,406],[215,136],[216,63],[217,529],[218,396],[219,75],[220,148],[221,53],[222,78],[223,78],[224,253],[225,66],[226,107],[227,351],[228,67],[229,217],[230,47],[231,142],[232,156],[233,64],[234,443],[235,519],[236,57],[237,63],[238,51],[239,49],[240,70],[241,97],[242,232],[243,301],[244,273],[245,93],[246,1996],[247,286],[248,92],[249,349],[250,153],[251,369],[252,116],[253,249],[254,262],[255,48],[256,56],[257,218],[258,101],[259,73],[260,123],[261,247],[262,70],[263,122],[264,52],[265,69],[266,416],[267,50],[268,78],[269,246],[270,273],[271,63],[272,73],[273,72],[274,858],[275,55],[276,102],[277,1030],[278,90],[279,72],[280,145],[281,39],[282,54],[283,273],[284,249],[285,175],[286,65],[287,125],[288,72],[289,214],[394,225],[290,698],[291,56],[292,79],[293,159],[294,68],[295,63],[296,188],[297,56],[298,89],[299,63],[300,73],[301,104],[302,185],[303,220],[304,422],[305,107],[306,1643],[307,301],[308,220],[309,53],[310,45],[311,127],[312,85],[313,507],[314,130],[315,227],[316,143],[317,151],[318,74],[319,87],[320,193],[321,457],[322,246],[323,47],[324,58],[325,50],[326,73],[327,47],[328,55],[329,90],[330,57],[331,559],[332,211],[333,47],[334,112],[335,3816],[336,198],[337,133],[338,114],[339,331],[340,187],[341,301],[342,350],[343,127],[344,384],[345,100],[346,52],[347,85],[348,49],[349,106],[350,243],[351,83],[352,180],[353,208],[354,114],[355,1521],[356,80],[357,71],[358,416],[359,170],[360,76],[361,129],[362,92],[363,779],[364,72],[365,251],[366,59],[367,156],[368,133],[369,507],[370,84],[371,145],[372,70],[373,132],[374,59],[375,50],[376,60],[377,72],[378,58],[379,244],[380,62],[381,660],[382,109],[383,47],[384,9968],[385,92],[386,59],[387,125],[388,108],[389,73],[390,200],[391,91],[392,70],[393,50],[396,208],],
'3304':[[179,205],[290,259],],
},{'111':[[0,213],[1,133],[2,54],[3,60],[4,77],[5,103],[6,117],[7,205],[8,52],[9,219],[10,378],[11,72],[12,670],[13,58],[14,73],[15,67],[16,159],[17,57],[18,100],[19,151],[20,205],[21,220],[22,76],[23,160],[24,52],[25,115],[26,71],[27,88],[28,109],[29,219],[30,527],[31,72],[32,48],[33,76],[34,158],[35,71],[36,216],[37,112],[38,219],[39,1012],[40,61],[41,412],[42,1350],[43,47],[44,170],[45,58],[46,108],[47,57],[48,5007],[49,539],[50,135],[51,63],[52,377],[53,168],[54,1557],[55,56],[56,84],[57,333],[58,83],[59,112],[60,127],[61,111],[62,159],[63,129],[64,53],[65,203],[66,53],[67,82],[68,151],[69,116],[70,816],[71,110],[72,104],[73,107],[74,159],[75,160],[76,123],[77,169],[78,50],[79,78],[80,170],[81,82],[82,585],[83,158],[84,597],[85,79],[86,283],[87,114],[88,79],[89,505],[90,83],[91,66],[92,203],[93,160],[94,74],[95,542],[96,223],[97,63],[98,67],[99,322],[100,228],[101,101],[102,235],[103,147],[104,48],[105,91],[106,80],[107,47],[108,46],[109,54],[110,66],[111,108],[112,169],[113,93],[114,91],[115,58],[116,150],[117,70],[118,243],[119,47],[120,50],[121,621],[122,165],[123,61],[124,83],[395,167],[394,226],[125,297],[126,57],[127,90],[128,245],[129,47],[130,48],[131,192],[132,57],[133,151],[134,184],[135,246],[136,47],[137,296],[138,63],[139,82],[140,60],[141,109],[142,203],[143,88],[144,66],[145,102],[146,194],[147,54],[148,188],[149,57],[150,147],[151,74],[152,247],[153,1460],[154,61],[155,71],[156,156],[157,99],[158,73],[159,188],[160,724],[161,620],[162,422],[163,100],[164,687],[165,105],[166,49],[167,70],[168,60],[169,92],[170,299],[171,1356],[172,187],[173,355],[174,304],[175,57],[176,321],[177,80],[178,342],[179,1659],[180,250],[181,1061],[182,71],[183,137],[184,61],[185,117],[186,547],[187,224],[188,380],[189,658],[190,101],[191,323],[192,64],[193,181],[194,136],[195,116],[196,115],[197,656],[198,114],[199,122],[200,334],[201,45],[202,45],[203,105],[204,100],[205,64],[206,123],[207,137],[208,130],[209,294],[210,205],[211,191],[212,100],[213,505],[214,407],[215,137],[216,64],[217,530],[218,397],[219,76],[220,149],[221,54],[222,79],[223,79],[224,254],[225,67],[226,108],[227,352],[228,68],[229,218],[230,48],[231,143],[232,157],[233,65],[234,444],[235,520],[236,58],[237,64],[238,52],[239,50],[240,71],[241,98],[242,233],[243,302],[244,274],[245,94],[246,1997],[247,287],[248,93],[249,350],[250,154],[251,370],[252,117],[253,250],[254,263],[255,49],[256,57],[257,219],[258,102],[259,74],[260,124],[261,248],[262,71],[263,123],[264,53],[265,70],[266,417],[267,51],[268,79],[269,247],[270,274],[271,64],[272,74],[273,73],[274,859],[275,56],[276,103],[277,1031],[278,91],[279,73],[280,146],[281,40],[282,55],[283,274],[284,250],[285,176],[286,66],[287,126],[288,73],[289,215],[290,699],[291,57],[292,80],[293,160],[294,69],[295,64],[296,189],[297,57],[298,90],[299,64],[300,74],[301,105],[302,186],[303,221],[304,423],[305,108],[306,1644],[307,302],[308,221],[309,54],[310,46],[311,128],[312,86],[313,508],[314,131],[315,228],[316,144],[317,152],[318,75],[319,88],[320,194],[321,458],[322,247],[323,48],[324,59],[325,51],[326,74],[327,48],[328,56],[329,91],[330,58],[331,560],[332,212],[333,48],[334,113],[335,3817],[336,199],[337,134],[338,115],[339,332],[340,188],[341,302],[342,351],[343,128],[344,385],[345,101],[346,53],[347,86],[348,50],[349,107],[350,244],[351,84],[352,181],[353,209],[354,115],[355,1522],[356,81],[357,72],[358,417],[359,171],[360,77],[361,130],[362,93],[363,780],[364,73],[365,252],[366,60],[367,157],[368,134],[369,508],[370,85],[371,146],[372,71],[373,133],[374,60],[375,51],[376,61],[377,73],[378,59],[379,245],[380,63],[381,661],[382,110],[383,48],[384,9969],[385,93],[386,60],[387,126],[388,109],[389,74],[390,201],[391,92],[392,71],[393,51],[396,209],],
'164':[[125,187],],
'420':[[125,26],],
},{'77':[[355,101],],
'112':[[1,134],[2,55],[3,61],[4,78],[5,104],[6,118],[7,206],[8,53],[9,220],[10,379],[11,73],[395,168],[12,671],[13,59],[14,74],[15,68],[16,160],[17,58],[18,101],[19,152],[20,206],[21,221],[22,77],[23,161],[24,53],[25,116],[26,72],[27,89],[28,110],[29,220],[30,528],[31,73],[32,49],[33,77],[34,159],[35,72],[36,217],[37,113],[38,220],[39,1013],[40,62],[41,413],[42,1351],[43,48],[44,171],[45,59],[46,109],[47,58],[48,5008],[49,540],[50,136],[51,64],[52,378],[53,169],[54,1558],[55,57],[56,85],[57,334],[58,84],[59,113],[60,128],[61,112],[62,160],[63,130],[64,54],[65,204],[66,54],[67,83],[68,152],[69,117],[70,817],[71,111],[72,105],[73,108],[74,160],[75,161],[76,124],[77,170],[78,51],[79,79],[80,171],[81,83],[82,586],[83,159],[84,598],[85,80],[86,284],[87,115],[88,80],[89,506],[90,84],[91,67],[92,204],[93,161],[94,75],[95,543],[96,224],[97,64],[98,68],[99,323],[100,229],[101,102],[102,236],[103,148],[104,49],[105,92],[106,81],[107,48],[108,47],[109,55],[110,67],[111,109],[112,170],[113,94],[114,92],[115,59],[116,151],[117,71],[118,244],[119,48],[120,51],[121,622],[122,166],[123,62],[124,84],[125,27],[125,188],[125,298],[126,58],[127,91],[128,246],[129,48],[130,49],[131,193],[132,58],[133,152],[134,185],[135,247],[136,48],[137,297],[138,64],[139,83],[140,61],[141,110],[142,204],[143,89],[144,67],[145,103],[146,195],[147,55],[148,189],[149,58],[150,148],[151,75],[152,248],[153,1461],[154,62],[155,72],[156,157],[157,100],[158,74],[159,189],[160,725],[161,621],[162,423],[163,101],[164,688],[165,106],[166,50],[167,71],[168,61],[169,93],[170,300],[171,1357],[172,188],[173,356],[174,305],[175,58],[176,322],[177,81],[178,343],[179,1660],[180,251],[181,1062],[182,72],[183,138],[184,62],[185,118],[186,548],[187,225],[188,381],[189,659],[190,102],[191,324],[192,65],[193,182],[194,137],[195,117],[196,116],[197,657],[198,115],[199,123],[200,335],[201,46],[202,46],[203,106],[204,101],[205,65],[206,124],[207,138],[208,131],[209,295],[210,206],[211,192],[212,101],[213,506],[214,408],[215,138],[216,65],[217,531],[218,398],[219,77],[220,150],[221,55],[222,80],[223,80],[224,255],[225,68],[226,109],[394,227],[227,353],[228,69],[229,219],[230,49],[231,144],[232,158],[233,66],[234,445],[235,521],[236,59],[237,65],[238,53],[239,51],[240,72],[241,99],[242,234],[243,303],[244,275],[245,95],[246,1998],[247,288],[248,94],[249,351],[250,155],[251,371],[252,118],[253,251],[254,264],[255,50],[256,58],[257,220],[258,103],[259,75],[260,125],[261,249],[262,72],[263,124],[264,54],[265,71],[266,418],[267,52],[268,80],[269,248],[270,275],[271,65],[272,75],[273,74],[274,860],[275,57],[276,104],[277,1032],[278,92],[279,74],[280,147],[281,41],[282,56],[283,275],[284,251],[285,177],[286,67],[287,127],[288,74],[289,216],[290,700],[291,58],[292,81],[293,161],[294,70],[295,65],[296,190],[297,58],[298,91],[299,65],[300,75],[301,106],[302,187],[303,222],[304,424],[305,109],[306,1645],[307,303],[308,222],[309,55],[310,47],[311,129],[312,87],[313,509],[314,132],[315,229],[316,145],[317,153],[318,76],[319,89],[320,195],[321,459],[322,248],[323,49],[324,60],[325,52],[326,75],[327,49],[328,57],[329,92],[330,59],[393,52],[331,561],[332,213],[333,49],[334,114],[335,3818],[336,200],[337,135],[338,116],[339,333],[340,189],[341,303],[342,352],[343,129],[344,386],[345,102],[346,54],[347,87],[348,51],[349,108],[350,245],[351,85],[352,182],[353,210],[354,116],[0,214],[355,1523],[356,82],[357,73],[358,418],[359,172],[360,78],[361,131],[362,94],[363,781],[364,74],[365,253],[366,61],[367,158],[368,135],[369,509],[370,86],[371,147],[372,72],[373,134],[374,61],[375,52],[376,62],[377,74],[378,60],[379,246],[380,64],[381,662],[382,111],[383,49],[384,9970],[385,94],[386,61],[387,127],[388,110],[389,75],[390,202],[391,93],[392,72],[396,210],],
'255':[[227,142],],
'497':[[12,26],],
'1151':[[331,59],],
},{'15':[[49,121],],
'77':[[235,208],],
'113':[[2,56],[3,62],[4,79],[5,105],[6,119],[7,207],[8,54],[9,221],[10,380],[11,74],[395,169],[12,672],[13,60],[14,75],[15,69],[16,161],[17,59],[18,102],[19,153],[20,207],[21,222],[22,78],[23,162],[1,135],[25,117],[26,73],[27,90],[28,111],[29,221],[30,529],[31,74],[32,50],[33,78],[34,160],[35,73],[36,218],[37,114],[38,221],[39,1014],[40,63],[41,414],[42,1352],[43,49],[44,172],[45,60],[46,110],[47,59],[48,5009],[24,54],[49,541],[50,137],[51,65],[52,379],[53,170],[54,1559],[55,58],[56,86],[57,335],[58,85],[59,114],[60,129],[61,113],[62,161],[63,131],[64,55],[65,205],[66,55],[67,84],[68,153],[69,118],[70,818],[71,112],[72,106],[73,109],[74,161],[75,162],[76,125],[77,171],[78,52],[79,80],[80,172],[81,84],[82,587],[83,160],[84,599],[85,81],[86,285],[87,116],[88,81],[89,507],[90,85],[91,68],[92,205],[93,162],[94,76],[95,544],[96,225],[97,65],[98,69],[99,324],[100,230],[101,103],[102,237],[103,149],[104,50],[105,93],[106,82],[107,49],[108,48],[109,56],[110,68],[111,110],[112,171],[113,95],[114,93],[115,60],[116,152],[117,72],[118,245],[119,49],[120,52],[121,623],[122,167],[123,63],[124,85],[125,28],[125,189],[125,299],[126,59],[127,92],[128,247],[129,49],[130,50],[131,194],[132,59],[133,153],[134,186],[135,248],[136,49],[137,298],[138,65],[139,84],[140,62],[141,111],[142,205],[143,90],[144,68],[145,104],[146,196],[147,56],[148,190],[149,59],[150,149],[151,76],[152,249],[153,1462],[154,63],[155,73],[156,158],[157,101],[158,75],[159,190],[160,726],[161,622],[162,424],[163,102],[164,689],[165,107],[166,51],[167,72],[168,62],[169,94],[170,301],[171,1358],[172,189],[173,357],[174,306],[175,59],[176,323],[177,82],[178,344],[179,1661],[180,252],[181,1063],[182,73],[183,139],[184,63],[185,119],[186,549],[187,226],[188,382],[189,660],[190,103],[191,325],[192,66],[193,183],[194,138],[195,118],[196,117],[197,658],[198,116],[199,124],[200,336],[201,47],[202,47],[203,107],[204,102],[205,66],[206,125],[207,139],[208,132],[209,296],[210,207],[211,193],[212,102],[213,507],[214,409],[215,139],[216,66],[217,532],[218,399],[219,78],[220,151],[221,56],[222,81],[223,81],[224,256],[225,69],[226,110],[227,354],[228,70],[229,220],[230,50],[231,145],[232,159],[233,67],[234,446],[0,215],[235,522],[236,60],[237,66],[238,54],[239,52],[240,73],[241,100],[242,235],[243,304],[244,276],[245,96],[246,1999],[247,289],[248,95],[249,352],[250,156],[251,372],[252,119],[253,252],[254,265],[255,51],[256,59],[257,221],[258,104],[259,76],[260,126],[261,250],[262,73],[263,125],[264,55],[265,72],[266,419],[267,53],[268,81],[269,249],[270,276],[271,66],[272,76],[273,75],[274,861],[275,58],[276,105],[277,1033],[278,93],[279,75],[280,148],[281,42],[282,57],[283,276],[284,252],[285,178],[286,68],[287,128],[288,75],[289,217],[290,701],[291,59],[292,82],[293,162],[294,71],[295,66],[296,191],[297,59],[298,92],[299,66],[300,76],[301,107],[302,188],[303,223],[304,425],[305,110],[394,228],[306,1646],[307,304],[308,223],[309,56],[310,48],[311,130],[312,88],[313,510],[314,133],[315,230],[316,146],[317,154],[318,77],[319,90],[320,196],[321,460],[322,249],[323,50],[324,61],[325,53],[326,76],[327,50],[328,58],[329,93],[330,60],[331,562],[332,214],[333,50],[334,115],[335,3819],[336,201],[337,136],[338,117],[339,334],[340,190],[341,304],[342,353],[343,130],[344,387],[345,103],[346,55],[347,88],[348,52],[349,109],[350,246],[351,86],[352,183],[353,211],[354,117],[355,1524],[356,83],[357,74],[358,419],[359,173],[360,79],[361,132],[362,95],[363,782],[364,75],[365,254],[366,62],[367,159],[368,136],[369,510],[370,87],[371,148],[372,73],[373,135],[374,62],[375,53],[376,63],[377,75],[378,61],[379,247],[380,65],[381,663],[382,112],[383,50],[384,9971],[385,95],[386,62],[387,128],[388,111],[389,76],[390,203],[391,94],[392,73],[393,53],[396,211],],
'205':[[12,579],],
'224':[[306,77],],
},{'114':[[0,216],[1,136],[2,57],[3,63],[4,80],[5,106],[6,120],[7,208],[8,55],[9,222],[10,381],[11,75],[12,673],[13,61],[14,76],[15,70],[16,162],[17,60],[18,103],[19,154],[20,208],[21,223],[22,79],[23,163],[24,55],[25,118],[26,74],[27,91],[28,112],[29,222],[30,530],[31,75],[32,51],[33,79],[34,161],[35,74],[36,219],[37,115],[38,222],[39,1015],[40,64],[41,415],[42,1353],[43,50],[44,173],[45,61],[46,111],[47,60],[48,5010],[49,542],[50,138],[51,66],[52,380],[53,171],[54,1560],[55,59],[56,87],[57,336],[58,86],[59,115],[60,130],[61,114],[62,162],[63,132],[64,56],[65,206],[66,56],[67,85],[68,154],[69,119],[70,819],[71,113],[72,107],[73,110],[74,162],[75,163],[76,126],[77,172],[78,53],[79,81],[80,173],[81,85],[82,588],[83,161],[84,600],[85,82],[86,286],[87,117],[88,82],[89,508],[90,86],[91,69],[92,206],[93,163],[94,77],[95,545],[96,226],[97,66],[98,70],[99,325],[100,231],[101,104],[102,238],[103,150],[104,51],[105,94],[106,83],[107,50],[108,49],[109,57],[110,69],[111,111],[112,172],[113,96],[114,94],[115,61],[116,153],[117,73],[118,246],[119,50],[120,53],[121,624],[122,168],[123,64],[124,86],[125,29],[125,190],[125,300],[126,60],[127,93],[128,248],[129,50],[130,51],[131,195],[132,60],[133,154],[134,187],[135,249],[136,50],[137,299],[138,66],[139,85],[140,63],[141,112],[142,206],[143,91],[144,69],[145,105],[146,197],[147,57],[148,191],[149,60],[150,150],[151,77],[152,250],[153,1463],[154,64],[155,74],[156,159],[157,102],[158,76],[159,191],[160,727],[161,623],[162,425],[163,103],[164,690],[165,108],[166,52],[167,73],[168,63],[169,95],[170,302],[171,1359],[172,190],[173,358],[174,307],[175,60],[176,324],[177,83],[178,345],[179,1662],[180,253],[181,1064],[182,74],[183,140],[184,64],[185,120],[186,550],[187,227],[188,383],[189,661],[190,104],[191,326],[192,67],[193,184],[194,139],[195,119],[196,118],[197,659],[198,117],[199,125],[200,337],[201,48],[202,48],[203,108],[204,103],[205,67],[206,126],[207,140],[208,133],[209,297],[210,208],[211,194],[212,103],[213,508],[214,410],[215,140],[216,67],[217,533],[218,400],[219,79],[220,152],[221,57],[222,82],[223,82],[224,257],[225,70],[226,111],[227,355],[228,71],[229,221],[230,51],[231,146],[232,160],[233,68],[234,447],[235,523],[236,61],[237,67],[238,55],[239,53],[240,74],[241,101],[242,236],[243,305],[244,277],[245,97],[246,2000],[247,290],[248,96],[249,353],[250,157],[251,373],[252,120],[253,253],[254,266],[255,52],[256,60],[257,222],[258,105],[259,77],[260,127],[261,251],[262,74],[263,126],[264,56],[265,73],[266,420],[267,54],[268,82],[269,250],[270,277],[271,67],[272,77],[273,76],[274,862],[275,59],[276,106],[277,1034],[278,94],[279,76],[280,149],[281,43],[282,58],[283,277],[284,253],[285,179],[286,69],[287,129],[288,76],[289,218],[290,702],[291,60],[292,83],[293,163],[294,72],[295,67],[296,192],[297,60],[298,93],[299,67],[300,77],[301,108],[302,189],[303,224],[304,426],[305,111],[306,1647],[307,305],[308,224],[309,57],[310,49],[311,131],[312,89],[313,511],[314,134],[315,231],[316,147],[317,155],[318,78],[319,91],[320,197],[321,461],[322,250],[323,51],[324,62],[325,54],[326,77],[327,51],[328,59],[329,94],[330,61],[331,563],[332,215],[333,51],[334,116],[335,3820],[336,202],[337,137],[338,118],[339,335],[340,191],[341,305],[342,354],[343,131],[344,388],[345,104],[346,56],[347,89],[348,53],[349,110],[350,247],[351,87],[352,184],[353,212],[354,118],[355,1525],[356,84],[357,75],[358,420],[359,174],[360,80],[361,133],[362,96],[363,783],[364,76],[365,255],[366,63],[367,160],[368,137],[369,511],[370,88],[371,149],[372,74],[373,136],[374,63],[375,54],[376,64],[377,76],[378,62],[379,248],[380,66],[381,664],[382,113],[383,51],[384,9972],[385,96],[386,63],[387,129],[388,112],[389,77],[390,204],[391,95],[392,74],[393,54],[394,229],[395,170],[396,212],],
},{'3':[[159,101],],
'34':[[1,138],[2,59],[3,65],[4,82],[5,108],[6,122],[7,210],[8,57],[9,224],[10,383],[11,77],[12,675],[13,63],[14,78],[15,72],[16,164],[17,62],[18,105],[19,156],[20,210],[21,225],[22,81],[23,165],[24,57],[25,120],[26,76],[27,93],[28,114],[29,224],[30,532],[31,77],[32,53],[33,81],[34,163],[35,76],[36,221],[37,117],[38,224],[39,1017],[40,66],[41,417],[42,1355],[43,52],[44,175],[45,63],[46,113],[47,62],[48,5012],[49,544],[50,140],[51,68],[52,382],[53,173],[54,1562],[55,61],[56,89],[57,338],[58,88],[59,117],[60,132],[61,116],[62,164],[63,134],[64,58],[65,208],[66,58],[67,87],[68,156],[69,121],[70,821],[71,115],[72,109],[73,112],[74,164],[75,165],[76,128],[77,174],[78,55],[79,83],[80,175],[81,87],[82,590],[83,163],[84,602],[85,84],[86,288],[87,119],[88,84],[89,510],[90,88],[91,71],[92,208],[93,165],[94,79],[95,547],[96,228],[97,68],[98,72],[99,327],[100,233],[101,106],[102,240],[103,152],[104,53],[105,96],[106,85],[107,52],[108,51],[109,59],[110,71],[111,113],[112,174],[113,98],[114,96],[115,63],[116,155],[117,75],[118,248],[119,52],[120,55],[121,626],[122,170],[123,66],[124,88],[125,302],[126,62],[127,95],[128,250],[129,52],[130,53],[131,197],[132,62],[133,156],[134,189],[135,251],[136,52],[137,301],[138,68],[139,87],[140,65],[141,114],[142,208],[143,93],[144,71],[145,107],[146,199],[147,59],[148,193],[149,62],[150,152],[151,79],[152,252],[153,1465],[154,66],[155,76],[156,161],[157,104],[158,78],[0,218],[159,193],[160,729],[161,625],[162,427],[163,105],[164,692],[165,110],[166,54],[167,75],[168,65],[169,97],[170,304],[171,1361],[172,192],[173,360],[174,309],[175,62],[176,326],[177,85],[178,347],[179,1664],[180,255],[181,1066],[182,76],[183,142],[184,66],[185,122],[186,552],[187,229],[188,385],[189,663],[190,106],[191,328],[192,69],[193,186],[194,141],[195,121],[196,120],[197,661],[198,119],[199,127],[200,339],[201,50],[202,50],[203,110],[204,105],[205,69],[206,128],[207,142],[208,135],[209,299],[210,210],[211,196],[212,105],[213,510],[214,412],[215,142],[216,69],[217,535],[218,402],[219,81],[220,154],[221,59],[222,84],[223,84],[224,259],[225,72],[226,113],[227,357],[228,73],[229,223],[230,53],[231,148],[232,162],[233,70],[234,449],[235,525],[236,63],[237,69],[238,57],[239,55],[240,76],[241,103],[242,238],[243,307],[244,279],[245,99],[246,2002],[247,292],[248,98],[249,355],[250,159],[251,375],[252,122],[253,255],[254,268],[255,54],[256,62],[257,224],[258,107],[259,79],[260,129],[261,253],[262,76],[263,128],[264,58],[265,75],[266,422],[267,56],[268,84],[269,252],[270,279],[271,69],[272,79],[273,78],[274,864],[275,61],[276,108],[277,1036],[278,96],[279,78],[280,151],[281,45],[282,60],[283,279],[284,255],[285,181],[286,71],[287,131],[288,78],[289,220],[290,704],[291,62],[292,85],[293,165],[294,74],[295,69],[296,194],[297,62],[298,95],[299,69],[300,79],[301,110],[302,191],[303,226],[304,428],[305,113],[306,1649],[307,307],[308,226],[309,59],[310,51],[311,133],[312,91],[313,513],[314,136],[315,233],[316,149],[317,157],[318,80],[319,93],[320,199],[321,463],[322,252],[323,53],[324,64],[325,56],[326,79],[327,53],[328,61],[329,96],[330,63],[331,565],[332,217],[333,53],[334,118],[335,3822],[336,204],[337,139],[338,120],[339,337],[340,193],[341,307],[342,356],[343,133],[344,390],[345,106],[346,58],[347,91],[348,55],[349,112],[350,249],[351,89],[352,186],[353,214],[354,120],[355,1527],[356,86],[357,77],[358,422],[359,176],[360,82],[361,135],[362,98],[363,785],[364,78],[365,257],[366,65],[367,162],[368,139],[369,513],[370,90],[371,151],[372,76],[373,138],[374,65],[375,56],[376,66],[377,78],[378,64],[379,250],[380,68],[381,666],[382,115],[383,53],[384,9974],[385,98],[386,65],[387,131],[388,114],[389,79],[390,206],[391,97],[392,76],[393,56],[394,231],[395,172],[396,214],],
},{'7':[[42,428],],
'16':[[182,25],[274,594],],
'23':[[42,1281],],
'116':[[4,83],[5,109],[6,123],[7,211],[8,58],[9,225],[10,384],[11,78],[12,676],[13,64],[14,79],[15,73],[16,165],[17,63],[18,106],[19,157],[20,211],[21,226],[22,82],[23,166],[24,58],[25,121],[26,77],[27,94],[28,115],[29,225],[30,533],[31,78],[32,54],[33,82],[34,164],[35,77],[36,222],[37,118],[38,225],[39,1018],[40,67],[41,418],[395,173],[394,232],[2,60],[3,66],[42,1356],[43,53],[44,176],[45,64],[46,114],[47,63],[48,5013],[49,545],[50,141],[51,69],[52,383],[53,174],[54,1563],[55,62],[56,90],[57,339],[58,89],[59,118],[60,133],[61,117],[62,165],[63,135],[64,59],[65,209],[66,59],[67,88],[68,157],[69,122],[70,822],[71,116],[72,110],[73,113],[74,165],[75,166],[76,129],[77,175],[78,56],[79,84],[80,176],[81,88],[82,591],[83,164],[84,603],[85,85],[86,289],[87,120],[88,85],[1,139],[90,89],[91,72],[92,209],[93,166],[94,80],[95,548],[96,229],[97,69],[98,73],[99,328],[100,234],[101,107],[102,241],[103,153],[104,54],[105,97],[106,86],[107,53],[108,52],[109,60],[110,72],[111,114],[112,175],[113,99],[114,97],[115,64],[116,156],[117,76],[118,249],[119,53],[120,56],[121,627],[122,171],[123,67],[124,89],[125,303],[126,63],[127,96],[128,251],[129,53],[130,54],[131,198],[132,63],[133,157],[134,190],[135,252],[136,53],[137,302],[138,69],[139,88],[140,66],[141,115],[142,209],[143,94],[144,72],[145,108],[146,200],[147,60],[148,194],[149,63],[150,153],[151,80],[152,253],[153,1466],[154,67],[155,77],[156,162],[157,105],[158,79],[159,194],[160,730],[161,626],[162,428],[163,106],[164,693],[165,111],[166,55],[167,76],[168,66],[169,98],[170,305],[171,1362],[172,193],[173,361],[174,310],[175,63],[176,327],[177,86],[178,348],[179,1665],[180,256],[181,1067],[89,511],[182,77],[183,143],[184,67],[185,123],[186,553],[187,230],[188,386],[189,664],[190,107],[191,329],[192,70],[193,187],[194,142],[195,122],[196,121],[197,662],[198,120],[199,128],[200,340],[201,51],[202,51],[203,111],[204,106],[205,70],[206,129],[207,143],[208,136],[209,300],[210,211],[211,197],[212,106],[213,511],[214,413],[215,143],[216,70],[217,536],[218,403],[219,82],[220,155],[221,60],[222,85],[223,85],[224,260],[225,73],[226,114],[227,358],[228,74],[229,224],[230,54],[231,149],[232,163],[233,71],[234,450],[235,526],[236,64],[237,70],[238,58],[239,56],[240,77],[241,104],[242,239],[243,308],[244,280],[245,100],[246,2003],[247,293],[248,99],[249,356],[250,160],[251,376],[252,123],[253,256],[254,269],[255,55],[256,63],[257,225],[258,108],[259,80],[260,130],[261,254],[262,77],[263,129],[264,59],[265,76],[266,423],[267,57],[268,85],[269,253],[270,280],[271,70],[272,80],[273,79],[0,219],[274,865],[275,62],[276,109],[277,1037],[278,97],[279,79],[280,152],[281,46],[282,61],[393,57],[283,280],[392,77],[284,256],[285,182],[286,72],[287,132],[288,79],[289,221],[290,705],[291,63],[292,86],[293,166],[294,75],[295,70],[296,195],[297,63],[298,96],[299,70],[300,80],[301,111],[302,192],[303,227],[304,429],[305,114],[306,1650],[307,308],[308,227],[309,60],[310,52],[311,134],[312,92],[313,514],[314,137],[315,234],[316,150],[317,158],[318,81],[319,94],[320,200],[321,464],[322,253],[323,54],[324,65],[325,57],[326,80],[327,54],[328,62],[329,97],[330,64],[331,566],[332,218],[333,54],[334,119],[335,3823],[336,205],[337,140],[338,121],[339,338],[340,194],[341,308],[342,357],[343,134],[344,391],[345,107],[346,59],[347,92],[348,56],[349,113],[350,250],[351,90],[352,187],[353,215],[354,121],[355,1528],[356,87],[357,78],[358,423],[359,177],[360,83],[361,136],[362,99],[363,786],[364,79],[365,258],[366,66],[367,163],[368,140],[369,514],[370,91],[371,152],[372,77],[373,139],[374,66],[375,57],[376,67],[377,79],[378,65],[379,251],[380,69],[381,667],[382,116],[383,54],[384,9975],[385,99],[386,66],[387,132],[388,115],[389,80],[390,207],[391,98],[396,215],],
'124':[[42,116],],
'349':[[283,191],],
'551':[[284,215],],
'1344':[[42,426],],
},{'7':[[16,137],[245,64],[369,90],[16,3],[74,5],[171,686],],
'33':[[16,103],[334,87],],
'117':[[1,0],],
'123':[[1,16],],
'140':[[59,88],],
'141':[[384,8985],],
'152':[[1,70],[59,70],],
'169':[[74,142],],
},{'7':[[1,3],[1,111],[245,62],[171,684],[369,88],[58,5],],
'33':[[59,83],],
'63':[[164,443],],
'117':[[74,0],],
'119':[[179,1613],[335,267],[48,1818],],
'169':[[58,66],],
'173':[[74,16],],
'1700':[[48,1817],],
'2131':[[335,266],[54,636],[179,1612],],
'2968':[[153,1418],],
},{'7':[[1,5],[369,92],[245,66],[171,688],[154,39],[154,3],],
'33':[[1,83],[1,109],],
'117':[[16,0],],
'118':[[384,8986],],
'169':[[1,116],],
'173':[[16,16],],
},{'2':[[1,75],[59,75],],
'7':[[215,30],[183,30],[293,32],[23,32],],
'14':[[6,13],[9,13],[393,13],[392,13],[389,13],[387,11],[10,13],[11,13],[13,13],[16,13],[17,13],[18,11],[20,13],[23,13],[4,13],[23,37],[385,9],[383,13],[382,13],[24,13],[25,13],[26,13],[27,13],[28,13],[29,13],[375,11],[374,13],[373,13],[372,13],[34,13],[36,13],[37,13],[43,13],[44,13],[371,13],[47,13],[370,13],[368,13],[367,13],[364,13],[363,13],[362,13],[361,13],[356,13],[353,13],[50,13],[352,13],[53,13],[55,13],[57,13],[58,13],[349,13],[59,13],[3,13],[61,13],[62,13],[64,13],[66,9],[67,13],[69,13],[71,13],[347,13],[346,13],[72,13],[73,11],[343,13],[74,13],[75,13],[76,13],[77,13],[78,13],[79,11],[80,13],[341,13],[81,13],[340,11],[338,13],[334,13],[86,13],[89,13],[90,13],[91,13],[94,13],[333,11],[97,13],[332,13],[98,13],[100,13],[101,13],[2,13],[104,13],[105,13],[106,13],[108,11],[111,13],[112,13],[329,13],[113,13],[114,11],[115,13],[116,13],[117,13],[118,13],[119,13],[120,13],[127,11],[328,13],[128,13],[327,13],[131,13],[132,13],[134,13],[135,13],[326,11],[137,13],[138,13],[140,13],[325,13],[141,13],[143,13],[144,13],[324,13],[145,11],[146,13],[147,13],[148,13],[149,13],[322,13],[150,13],[151,13],[321,153],[154,13],[155,11],[156,11],[157,13],[158,11],[320,13],[161,553],[319,11],[318,11],[167,13],[169,13],[170,13],[173,13],[175,11],[177,13],[178,13],[180,13],[317,11],[315,13],[183,11],[394,13],[314,13],[313,13],[311,11],[310,13],[187,13],[189,13],[309,11],[308,11],[190,11],[191,13],[307,13],[192,13],[193,13],[305,13],[196,9],[198,13],[200,13],[302,13],[301,13],[396,13],[300,13],[203,13],[204,13],[205,13],[207,13],[299,13],[209,13],[210,13],[212,13],[213,13],[298,11],[215,11],[103,13],[297,13],[296,13],[295,13],[294,13],[216,13],[218,11],[293,37],[1,13],[220,13],[222,13],[224,13],[225,13],[228,13],[229,13],[230,11],[233,13],[234,13],[235,11],[236,13],[237,13],[238,13],[239,13],[244,13],[247,13],[250,13],[252,13],[253,13],[257,11],[293,13],[292,13],[289,13],[260,13],[263,13],[288,11],[287,13],[286,11],[267,11],[268,13],[269,13],[270,13],[271,13],[273,13],[285,13],[284,13],[275,13],[276,13],[280,13],[282,13],[283,13],],
'19':[[384,6564],[164,331],],
'23':[[365,131],[341,26],[9,104],[351,55],[84,548],[84,563],[329,48],[29,104],[340,22],[97,31],[384,6576],[49,254],[308,22],[307,26],],
'36':[[181,1006],],
'75':[[387,57],[311,57],],
'94':[[311,25],[387,25],],
'128':[[365,109],[9,30],[127,22],[193,24],[140,22],[297,22],[71,30],[385,18],[144,28],[149,22],[29,30],[387,30],[382,30],[298,22],[311,30],[352,24],],
'139':[[384,8220],[266,101],],
'149':[[293,57],[313,397],[293,101],[23,57],[183,49],[9,147],[183,93],[189,561],[218,315],[215,49],[322,171],[189,575],[191,93],[135,188],[128,169],[200,225],[29,147],[218,334],[200,292],[44,94],[257,108],[257,174],[48,2529],[257,184],[368,98],[215,93],[48,3558],[200,233],[73,55],[200,302],[207,98],[58,26],[1,85],[50,78],[213,421],[23,101],],
'154':[[49,314],],
'196':[[112,146],],
'203':[[49,240],],
'264':[[84,351],[96,165],],
'269':[[266,236],],
'274':[[80,136],],
'281':[[321,260],],
'319':[[341,41],[307,41],],
'348':[[274,538],[264,20],[274,629],],
'355':[[341,47],[307,47],],
'374':[[9,191],[29,191],],
'378':[[153,1309],],
'540':[[293,52],[183,44],[215,44],[23,52],],
'543':[[164,513],],
'824':[[384,7431],],
'836':[[71,73],[382,73],],
'858':[[181,422],],
'1019':[[356,29],],
'1507':[[49,301],[49,325],],
'1535':[[215,36],[183,36],],
'1540':[[387,54],[311,54],],
'2003':[[49,229],],
'2015':[[49,334],],
'3085':[[160,619],],
'5145':[[384,8360],],
'5224':[[384,9939],],
},{'121':[[1,14],[2,14],[3,14],[4,14],[6,14],[10,14],[11,14],[13,14],[16,14],[17,14],[18,12],[20,14],[23,14],[24,14],[25,14],[26,14],[27,14],[28,14],[34,14],[36,14],[37,14],[43,14],[44,14],[47,14],[50,14],[53,14],[55,14],[57,14],[58,14],[59,14],[61,14],[62,14],[64,14],[67,14],[69,14],[72,14],[73,12],[74,14],[75,14],[76,14],[77,14],[78,14],[80,14],[81,14],[86,14],[89,14],[90,14],[91,14],[94,14],[97,14],[98,14],[100,14],[101,14],[103,14],[104,14],[105,14],[106,14],[108,12],[111,14],[112,14],[113,14],[114,12],[115,14],[116,14],[117,14],[118,14],[119,14],[120,14],[128,14],[131,14],[132,14],[134,14],[135,14],[137,14],[138,14],[140,14],[141,14],[143,14],[144,14],[145,12],[146,14],[147,14],[148,14],[150,14],[151,14],[154,14],[155,12],[156,12],[157,14],[158,12],[167,14],[169,14],[170,14],[173,14],[175,12],[177,14],[178,14],[180,14],[183,12],[187,14],[189,14],[190,12],[191,14],[192,14],[198,14],[200,14],[203,14],[204,14],[205,14],[207,14],[209,14],[210,14],[212,14],[213,14],[215,12],[216,14],[218,12],[220,14],[222,14],[224,14],[225,14],[228,14],[229,14],[233,14],[234,14],[235,12],[236,14],[237,14],[238,14],[239,14],[244,14],[247,14],[250,14],[252,14],[253,14],[257,12],[260,14],[263,14],[267,12],[268,14],[269,14],[270,14],[271,14],[273,14],[275,14],[276,14],[280,14],[282,14],[283,14],[284,14],[285,14],[286,12],[287,14],[288,12],[289,14],[292,14],[293,14],[294,14],[295,14],[296,14],[299,14],[300,14],[301,14],[302,14],[305,14],[307,14],[308,12],[309,12],[310,14],[313,14],[314,14],[315,14],[317,12],[318,12],[319,12],[320,14],[322,14],[324,14],[325,14],[326,12],[327,14],[328,14],[329,14],[332,14],[333,12],[334,14],[338,14],[340,12],[341,14],[343,14],[346,14],[347,14],[349,14],[353,14],[356,14],[361,14],[362,14],[363,14],[364,14],[367,14],[368,14],[370,14],[371,14],[372,14],[373,14],[374,14],[383,14],[389,14],[392,14],[393,14],[394,14],[396,14],],
},{'7':[[342,67],[304,141],[304,135],[304,129],[304,123],[42,31],[42,67],[42,79],[304,117],[304,105],[304,99],[304,93],[365,99],[304,87],[304,75],[304,69],[304,63],[304,50],[342,79],[304,44],[304,38],[342,73],[82,40],[82,57],[82,71],[82,91],[82,110],[82,164],[82,177],[304,26],[82,220],[82,241],[82,256],[82,273],[82,286],[142,25],[93,41],[304,147],],
'12':[[20,23],[82,189],[24,23],],
'92':[[48,451],],
'122':[[128,15],[138,15],[91,15],[150,15],[167,15],[334,15],[177,15],[393,15],[200,15],[329,15],[220,15],[225,15],[238,15],[250,15],[116,15],[257,13],[263,15],[268,15],[280,15],[295,15],[98,15],[75,15],[69,15],[59,15],[55,15],[364,15],[53,15],[50,15],[371,15],[374,15],[119,15],[43,15],[252,15],[24,15],[103,15],[6,15],[1,15],[325,15],[322,15],[314,15],[313,15],],
'139':[[218,44],[170,30],],
'143':[[335,2148],],
'326':[[66,11],],
'327':[[387,14],[311,14],],
'550':[[306,1194],],
'682':[[54,967],],
'1798':[[48,2687],],
'1834':[[48,3435],],
'1940':[[48,4533],],
'2178':[[191,21],],
'2404':[[80,22],[309,20],],
'2712':[[111,22],],
'4363':[[335,2913],],
},{'7':[[165,25],[342,85],[65,53],[42,19],[42,115],[82,124],[142,55],[142,61],[165,19],],
'12':[[238,23],[180,23],],
'75':[[48,4950],],
'92':[[48,4921],[48,4910],[48,881],[54,881],[48,4967],],
'93':[[306,997],[48,3752],[48,3755],[306,1000],],
'118':[[1,17],],
'122':[[114,13],[276,15],[169,15],[26,15],],
'125':[[252,19],],
'141':[[334,17],],
'144':[[48,4975],],
'151':[[59,17],],
'215':[[54,1282],],
'217':[[306,267],[48,847],],
'299':[[306,1284],],
'312':[[279,13],],
'326':[[79,13],],
'377':[[10,17],],
'378':[[189,17],],
'379':[[234,17],],
'581':[[306,252],[48,832],],
'587':[[306,259],[48,839],],
'700':[[229,20],[82,265],[325,20],],
'712':[[82,154],[82,142],],
'780':[[391,29],],
'1041':[[166,17],],
'1057':[[263,17],],
'1058':[[338,17],],
'1059':[[203,17],],
'1101':[[48,4491],[306,959],[48,4096],[306,1464],[306,1419],[48,3714],],
'1495':[[44,21],],
'1637':[[48,883],[48,4969],],
'1651':[[48,970],[48,962],],
'1709':[[371,17],],
'1856':[[306,965],[48,3720],],
'1871':[[48,3710],[306,955],],
'1872':[[306,957],[48,3712],],
'1873':[[306,961],[48,3716],],
'1874':[[48,3718],[48,4495],[306,963],],
'1875':[[48,4502],[306,967],[48,3722],],
'1876':[[306,969],[48,4506],[48,3724],],
'1877':[[48,4510],],
'1894':[[48,3812],],
'1895':[[48,3814],],
'1953':[[233,17],],
'1978':[[48,4953],],
'2013':[[178,17],],
'2170':[[54,838],],
'2251':[[252,17],],
'2395':[[350,79],],
'2513':[[89,17],],
'2531':[[213,17],],
'2695':[[288,15],],
'2698':[[350,29],],
'2709':[[280,17],],
'2967':[[153,424],],
'4100':[[287,21],],
'4113':[[350,59],],
'4435':[[350,19],],
'4436':[[350,39],],
'4437':[[350,49],],
'4438':[[350,69],],
'4439':[[350,89],],
'4440':[[350,99],],
'4441':[[350,109],],
'4442':[[350,119],],
'4443':[[350,129],],
},{'7':[[254,26],[65,164],[264,5],[342,310],[281,3],[281,20],[56,29],[171,387],],
'117':[[391,0],],
'124':[[371,18],[280,18],[1,18],[252,18],[59,18],[334,18],],
'128':[[391,33],],
'134':[[334,33],[59,26],[1,32],[371,34],[252,37],[280,35],],
'135':[[280,38],[371,37],[334,36],[1,35],[59,29],[252,40],],
'147':[[280,70],[371,63],[252,57],[334,50],[1,57],[59,57],],
'151':[[335,188],[179,951],],
'313':[[391,16],],
'322':[[264,36],],
'1709':[[153,211],[54,318],[48,1721],[153,214],],
'2212':[[384,8436],],
'2251':[[197,167],[70,286],],
'2709':[[179,918],[335,168],],
},{'7':[[342,3],[245,44],[369,70],[342,329],[171,666],],
'13':[[176,271],],
'15':[[280,33],[334,26],],
'33':[[76,59],[384,3760],],
'63':[[339,103],],
'77':[[261,171],[371,102],[339,297],[358,331],[280,109],[326,50],[321,333],],
'93':[[59,20],[1,20],],
'117':[[304,0],],
'125':[[280,19],[334,19],],
'137':[[179,914],[335,164],],
'169':[[330,41],],
'205':[[339,76],],
'230':[[334,43],[164,456],[280,45],],
'420':[[160,664],],
'429':[[321,218],],
'593':[[339,140],[339,246],[339,117],[321,306],[164,417],[155,47],[339,160],],
'1329':[[304,14],],
'1346':[[339,100],],
},{'77':[[239,24],],
'82':[[235,112],],
'126':[[280,20],[59,21],[334,20],[1,21],],
'136':[[1,37],[334,38],[280,40],[59,31],],
'147':[[178,226],],
'347':[[239,18],[118,25],[244,27],[233,32],[178,32],[235,28],],
'487':[[280,89],[371,82],],
'791':[[178,113],],
'2738':[[118,77],[244,86],],
},{'2':[[340,28],[308,28],],
'7':[[172,67],[122,100],[232,92],[359,95],[316,115],[41,286],[194,78],[152,120],[217,288],[99,109],],
'12':[[105,34],[349,47],],
'14':[[70,36],[153,40],[306,32],[54,39],[335,36],[258,27],[179,36],[197,39],[76,23],[48,24],],
'15':[[41,385],],
'20':[[59,64],[280,77],[334,57],[1,64],[371,70],[252,64],],
'39':[[231,49],[385,39],],
'48':[[273,19],[275,31],[276,19],[27,19],[347,19],[338,21],[364,19],],
'65':[[118,86],[110,34],[244,95],],
'84':[[42,436],],
'91':[[119,20],[43,20],],
'99':[[262,16],],
'101':[[281,18],[15,21],],
'108':[[267,23],],
'125':[[65,165],[342,311],],
'127':[[1,22],[334,21],[59,22],[239,19],],
'129':[[11,29],],
'131':[[326,22],[79,24],],
'137':[[155,18],[288,17],[17,20],],
'139':[[260,27],[170,34],[287,25],[260,90],[53,25],[67,39],[44,29],[203,26],[127,54],[244,30],[50,25],[298,54],[252,23],[118,28],[370,36],[233,40],],
'140':[[294,33],],
'143':[[116,60],],
'145':[[205,37],[299,37],[147,29],[237,37],[216,37],[192,37],[271,37],],
'146':[[218,48],],
'150':[[352,51],[193,51],],
'165':[[300,46],[25,50],[143,42],[141,52],],
'173':[[324,18],[236,18],[115,18],[108,16],[375,17],[91,18],[267,16],[13,18],[230,17],],
'174':[[370,19],[2,19],[145,18],[175,17],[154,19],[297,21],[212,20],[67,19],[149,21],],
'175':[[149,35],[297,35],],
'176':[[23,54],[293,54],[183,46],[215,46],],
'179':[[3,17],],
'184':[[298,21],[141,21],[127,21],],
'185':[[3,33],],
'187':[[312,27],],
'189':[[392,21],],
'194':[[79,18],[4,21],],
'196':[[112,26],],
'198':[[4,27],],
'214':[[305,23],[73,21],[198,26],],
'215':[[378,18],[270,51],[100,38],[269,42],[10,80],[283,40],[20,42],[146,37],[284,43],[285,37],[89,61],[86,52],[45,17],[332,36],[148,39],[57,54],[361,23],[201,18],[111,28],[394,38],[77,46],[34,37],[247,51],[75,25],[229,41],[189,82],[187,43],[182,18],[36,38],[180,42],[137,48],[178,53],[235,49],[234,79],[209,46],[173,56],[210,37],[135,38],[131,48],],
'217':[[318,21],[348,19],[319,21],[110,18],[320,25],[109,16],[255,19],[219,16],[256,16],[199,28],[166,19],],
'219':[[85,34],[360,32],[41,118],[133,76],[231,34],[380,34],[232,44],[122,52],[40,32],[386,34],[206,34],[330,32],[60,53],[359,34],[31,34],[14,40],[388,48],[316,63],[379,104],[5,32],[366,30],[152,58],[194,38],[99,52],[272,34],[351,44],[291,34],[172,32],[87,46],],
'220':[[347,43],[362,47],[62,59],],
'221':[[198,69],[305,53],[287,69],[73,53],],
'228':[[265,13],],
'231':[[203,69],],
'237':[[103,53],[143,19],[150,53],[300,19],[66,16],[61,21],[6,22],[365,108],],
'238':[[28,27],],
'241':[[25,19],],
'242':[[365,207],],
'246':[[6,60],],
'274':[[199,31],],
'276':[[74,100],[16,100],],
'278':[[309,29],],
'290':[[93,99],],
'295':[[373,67],],
'305':[[222,19],],
'314':[[42,118],[8,18],],
'335':[[193,23],[352,23],[144,27],[140,21],[9,29],[29,29],],
'337':[[144,38],[140,32],],
'338':[[213,331],],
'340':[[368,43],],
'346':[[204,48],[349,22],[204,22],[314,22],[125,253],],
'350':[[29,86],[9,86],],
'370':[[15,30],],
'381':[[391,32],],
'382':[[292,22],[90,22],[116,25],],
'402':[[323,15],],
'408':[[368,21],],
'409':[[62,23],[362,21],],
'415':[[26,34],[373,21],],
'421':[[157,52],],
'425':[[363,298],],
'445':[[132,19],],
'447':[[72,54],[385,17],],
'459':[[286,27],],
'462':[[89,285],],
'465':[[234,336],[10,335],[189,386],[178,209],],
'478':[[395,23],[395,17],],
'479':[[11,19],[301,19],],
'488':[[113,27],],
'491':[[315,113],[289,113],],
'566':[[387,84],[311,84],],
'589':[[90,53],],
'593':[[47,32],],
'604':[[301,37],],
'615':[[353,65],[106,39],],
'646':[[58,24],],
'654':[[221,23],[221,17],],
'655':[[13,29],[236,29],[115,29],],
'692':[[74,34],[16,34],],
'712':[[343,46],[190,25],[343,23],],
'720':[[18,19],],
'724':[[382,70],[71,70],],
'727':[[18,47],],
'728':[[357,29],],
'736':[[224,75],],
'737':[[158,44],],
'738':[[126,27],],
'740':[[345,21],[345,15],],
'741':[[123,15],[123,21],],
'771':[[24,25],],
'774':[[213,101],],
'776':[[207,64],[44,92],],
'783':[[283,136],[137,180],[20,155],[229,158],[332,138],[284,165],[57,204],[34,129],[285,128],[209,195],[135,140],[180,152],[210,140],[36,136],[146,131],[187,149],[270,201],[173,225],[100,135],[148,147],[86,197],[394,138],[269,164],[247,199],],
'791':[[37,40],],
'823':[[318,23],],
'824':[[112,17],],
'827':[[326,15],],
'828':[[279,15],],
'834':[[23,19],[293,19],],
'855':[[218,262],],
'862':[[26,17],],
'864':[[389,32],[151,32],],
'875':[[273,33],],
'877':[[27,46],[97,40],[276,47],],
'883':[[328,17],],
'884':[[28,20],[192,20],[237,20],[271,20],[216,20],[205,20],[299,20],],
'912':[[78,26],[120,26],],
'926':[[223,46],[324,29],],
'935':[[361,49],],
'949':[[81,56],],
'969':[[111,73],],
'992':[[142,63],],
'994':[[32,18],],
'1001':[[33,19],],
'1014':[[177,27],],
'1024':[[147,17],],
'1025':[[76,17],],
'1026':[[37,19],],
'1049':[[338,61],],
'1052':[[356,23],],
'1054':[[286,15],],
'1055':[[113,17],],
'1080':[[131,129],[77,114],],
'1095':[[228,18],],
'1096':[[356,18],],
'1098':[[107,17],],
'1099':[[129,15],],
'1101':[[374,19],[327,20],[98,19],[138,19],[329,19],[268,19],[225,19],[220,19],[295,19],],
'1125':[[126,16],],
'1136':[[91,30],],
'1225':[[82,542],],
'1238':[[387,29],[311,29],],
'1256':[[376,21],],
'1260':[[350,134],],
'1321':[[184,15],],
'1326':[[151,19],[184,31],[389,19],],
'1333':[[81,21],],
'1342':[[104,20],],
'1369':[[279,23],],
'1387':[[196,88],[156,94],],
'1419':[[278,18],],
'1452':[[264,26],],
'1510':[[94,26],],
'1511':[[47,17],],
'1575':[[374,23],[138,23],[225,23],[295,23],[329,23],[98,23],[220,23],[268,23],],
'1593':[[367,99],],
'1699':[[136,19],],
'1720':[[175,26],[212,29],],
'1770':[[312,16],],
'1790':[[315,30],[289,30],],
'1796':[[257,43],],
'1811':[[191,85],],
'1832':[[367,31],[250,33],],
'1846':[[302,30],[134,29],],
'1862':[[391,61],],
'2026':[[307,58],[341,58],],
'2033':[[265,21],],
'2048':[[357,13],],
'2052':[[69,64],],
'2054':[[50,76],[53,66],],
'2099':[[228,28],],
'2178':[[72,21],],
'2183':[[372,50],[75,77],[250,100],],
'2199':[[392,19],],
'2248':[[55,29],[64,26],],
'2253':[[264,18],],
'2270':[[58,17],],
'2288':[[61,56],],
'2298':[[319,52],],
'2308':[[342,87],[65,55],],
'2326':[[353,27],[106,21],[69,23],],
'2342':[[322,80],[235,199],[263,86],[128,83],[320,85],],
'2360':[[363,66],[313,50],],
'2364':[[71,29],[382,29],],
'2378':[[202,17],[202,22],[253,93],],
'2383':[[132,23],],
'2384':[[80,87],[296,78],],
'2401':[[120,21],[78,21],],
'2405':[[80,24],[309,22],],
'2407':[[170,126],],
'2415':[[134,100],[396,73],[396,23],[128,31],[322,32],[296,24],[346,19],[302,97],],
'2428':[[333,17],],
'2438':[[325,24],],
'2441':[[82,301],],
'2478':[[364,44],],
'2503':[[288,30],],
'2523':[[94,43],],
'2541':[[292,59],],
'2563':[[93,43],],
'2614':[[97,19],],
'2638':[[257,106],[200,144],],
'2657':[[101,17],],
'2658':[[101,25],],
'2682':[[150,24],[103,24],],
'2696':[[275,17],],
'2697':[[105,19],],
'2711':[[145,27],[154,28],],
'2712':[[114,18],],
'2715':[[222,29],],
'2730':[[169,20],[114,57],[169,58],],
'2736':[[167,24],[117,24],],
'2863':[[314,47],],
'2867':[[130,21],],
'2886':[[142,140],],
'3009':[[155,40],],
'3012':[[156,32],[196,31],],
'3013':[[157,21],],
'3015':[[158,17],],
'3147':[[163,19],],
'3179':[[168,19],],
'3257':[[207,23],],
'3258':[[282,22],[393,22],[177,24],],
'3260':[[383,20],],
'3547':[[238,25],],
'3603':[[183,17],[215,17],],
'3683':[[190,18],],
'3685':[[191,23],],
'3705':[[200,39],],
'3728':[[253,25],],
'3754':[[217,136],],
'3777':[[223,40],],
'3778':[[224,26],],
'3977':[[310,19],],
'4019':[[258,18],],
'4024':[[259,17],],
'4033':[[263,25],],
'4098':[[371,27],[280,29],],
'4112':[[294,19],],
'4140':[[304,155],],
'4184':[[307,23],[341,23],],
'4196':[[340,19],[308,19],],
'4206':[[313,206],],
'4221':[[317,64],],
'4222':[[317,21],],
'4232':[[328,31],],
'4340':[[337,41],],
'4557':[[372,21],],
},{'12':[[315,122],[289,122],[11,28],[204,37],],
'63':[[48,2130],],
'128':[[59,23],[204,23],[1,23],[11,20],[371,28],],
'182':[[48,2795],],
'861':[[54,1273],],
'2102':[[279,17],],
},{'7':[[41,273],[41,251],[41,240],[41,229],[41,218],[41,201],[41,262],[379,119],],
'15':[[200,264],],
'16':[[384,7140],[214,230],[274,710],[176,149],[41,317],[39,684],[363,487],[381,41],[384,6796],[161,95],[363,446],[384,3049],[384,1620],],
'19':[[28,55],[186,233],],
'20':[[336,34],[46,39],[226,39],],
'25':[[384,3283],],
'31':[[191,244],[9,58],[29,58],],
'33':[[70,6],[266,7],[70,114],[70,142],[266,169],[39,272],[266,377],[84,22],[84,579],[214,224],[335,1557],[52,347],[135,202],[153,15],[214,310],[52,18],[153,1428],[384,6671],[384,4783],[7,34],[321,74],[185,43],[171,225],[171,1240],[179,1641],[1,26],[39,468],[179,27],],
'38':[[197,455],[162,95],[162,244],[118,102],],
'47':[[277,403],],
'63':[[182,46],[363,398],[153,629],],
'65':[[256,29],],
'77':[[125,184],],
'82':[[277,905],],
'118':[[16,104],],
'143':[[335,2888],],
'147':[[335,1074],],
'151':[[384,8997],[384,8989],[74,104],],
'155':[[285,149],[20,178],],
'158':[[39,123],],
'161':[[1,94],],
'167':[[384,3173],],
'199':[[368,82],],
'203':[[68,84],[384,2395],[191,162],[384,4220],],
'215':[[279,20],],
'224':[[335,2445],[315,190],[246,1433],[384,4339],],
'241':[[270,98],[247,96],],
'245':[[384,3068],],
'250':[[384,1107],[363,431],],
'313':[[384,4109],],
'321':[[197,80],[70,97],],
'351':[[27,51],],
'370':[[96,27],],
'376':[[384,7989],],
'470':[[209,107],[209,96],],
'482':[[172,101],],
'502':[[335,1589],[54,432],],
'529':[[188,196],],
'534':[[12,151],],
'615':[[209,86],],
'811':[[21,155],],
'857':[[70,761],[197,603],],
'860':[[227,126],],
'865':[[235,418],],
'921':[[172,148],],
'955':[[179,650],],
'1205':[[234,371],],
'1304':[[384,5017],],
'1474':[[384,3137],],
'1608':[[235,388],],
'1680':[[384,4477],[187,164],],
'1708':[[70,251],[197,132],],
'1763':[[48,4438],[48,4141],[48,4406],],
'1838':[[277,579],],
'1860':[[356,35],[190,43],],
'2178':[[191,117],],
'2309':[[384,9106],],
'2655':[[159,50],],
'2765':[[335,1538],[335,1680],],
'2983':[[153,684],],
'3018':[[159,39],],
'3053':[[384,6357],],
'3196':[[384,3038],[384,3159],],
'4073':[[277,641],],
'4305':[[335,1048],],
'4309':[[335,1643],],
'4312':[[335,1792],],
'4863':[[384,3906],],
'4904':[[384,3168],],
},{'2':[[384,9475],],
'3':[[384,6993],],
'12':[[246,305],],
'15':[[79,23],],
'26':[[112,68],[112,107],],
'33':[[246,350],],
'63':[[371,74],[280,81],],
'69':[[246,476],],
'99':[[54,471],[218,59],],
'130':[[1,27],],
'140':[[246,449],[246,422],[246,443],[246,378],],
'154':[[371,56],[380,39],[280,63],],
'155':[[301,80],[101,63],[54,1480],],
'346':[[76,49],],
'348':[[352,153],[193,153],],
'562':[[246,465],],
'903':[[49,391],],
'940':[[335,3439],],
'1160':[[95,270],[54,703],],
'1254':[[280,57],[371,50],],
'1267':[[219,36],],
'1271':[[280,26],[371,24],],
'1288':[[262,36],],
'1315':[[178,234],[99,240],[251,284],[153,138],],
'1470':[[307,209],[341,209],],
'1553':[[197,496],[274,231],[266,368],[274,204],[181,124],],
'1993':[[246,362],],
'2058':[[54,174],[54,1088],[54,1106],[95,471],[54,195],[95,170],[160,182],[95,64],],
'2075':[[54,1150],],
'2096':[[304,394],[326,28],[384,9547],[384,1428],[384,5082],[218,242],[355,1227],[206,80],[326,21],[274,782],[153,1200],[152,85],],
'2241':[[246,414],[246,399],],
'3774':[[307,156],[341,156],],
'3861':[[246,303],],
},{'15':[[59,85],],
'19':[[334,63],],
'63':[[274,61],[1,29],],
'275':[[384,8980],],
'288':[[334,23],],
'1370':[[371,121],[280,119],],
},{'2':[[334,31],[335,160],[48,1715],[179,910],[54,312],],
'3':[[384,7377],],
'24':[[371,46],[280,53],],
'49':[[48,3620],[164,230],],
'132':[[1,30],],
'162':[[26,23],],
'196':[[274,634],[274,797],[274,374],],
'255':[[261,174],[358,334],],
'348':[[274,126],],
'567':[[186,195],[186,116],[186,82],[186,229],[186,171],[186,463],[186,239],],
'1276':[[40,37],],
},{'2':[[59,25],[307,35],[341,35],],
'23':[[244,138],],
'26':[[304,380],],
'31':[[320,44],],
'33':[[252,36],],
'48':[[156,43],[273,26],[276,27],[343,32],[180,53],[53,31],[364,27],[105,25],],
'52':[[6,32],],
'60':[[106,26],],
'65':[[97,27],],
'81':[[361,32],],
'83':[[196,37],],
'126':[[280,34],],
'131':[[218,60],],
'133':[[1,31],[334,32],],
'137':[[94,34],],
'154':[[27,28],],
'165':[[143,23],[317,32],],
'171':[[2,26],],
'178':[[155,32],],
'181':[[370,26],],
'184':[[141,28],[300,27],],
'187':[[205,25],[271,25],[237,25],[299,25],[25,29],[192,25],[216,25],],
'199':[[77,67],[247,68],[332,54],[270,70],[131,69],[50,41],],
'220':[[73,29],[372,29],],
'225':[[44,41],],
'241':[[209,56],],
'277':[[10,90],[224,33],[289,37],[313,57],[189,96],[315,37],[234,89],],
'279':[[235,60],],
'285':[[89,73],[213,107],],
'289':[[294,26],],
'290':[[57,61],[86,59],],
'295':[[250,43],[367,45],],
'320':[[311,37],[387,37],],
'337':[[193,29],[9,35],],
'340':[[287,35],[305,33],[198,39],],
'350':[[363,76],],
'402':[[347,28],],
'438':[[116,34],],
'447':[[72,31],[191,34],],
'452':[[90,32],],
'470':[[137,55],[173,68],],
'478':[[11,23],],
'479':[[288,23],[204,32],],
'491':[[200,47],],
'502':[[178,59],],
'550':[[134,33],[322,36],[128,35],[302,34],],
'554':[[179,1036],],
'654':[[349,29],],
'655':[[158,28],],
'696':[[74,42],[16,42],],
'700':[[69,30],[210,50],],
'723':[[18,30],],
'741':[[314,29],],
'753':[[257,49],],
'756':[[29,35],[352,29],],
'776':[[36,44],[34,43],[20,47],[260,32],[207,29],[269,47],[229,47],[187,50],[148,45],[146,44],[100,45],[283,46],[284,48],[285,42],],
'791':[[37,25],],
'836':[[23,29],[293,29],],
'838':[[382,36],[71,36],],
'926':[[396,34],],
'949':[[81,28],],
'1005':[[151,25],],
'1123':[[135,50],],
'1170':[[353,40],],
'1238':[[203,37],[263,35],[338,31],],
'1329':[[371,33],[111,34],],
'1333':[[157,26],],
'1512':[[385,22],],
'1704':[[61,30],[67,28],],
'1720':[[175,20],[212,23],],
'1955':[[244,43],[118,42],],
'2057':[[127,27],[298,27],],
'2140':[[389,25],],
'2290':[[319,29],],
'2293':[[62,33],],
'2327':[[103,31],],
'2378':[[253,29],],
'2382':[[75,34],],
'2384':[[296,34],[80,30],],
'2541':[[292,31],],
'2549':[[373,35],],
'2623':[[170,49],],
'2683':[[150,31],],
'2711':[[154,22],[145,21],],
'2732':[[114,33],[169,35],],
'2833':[[362,31],],
'2891':[[394,46],],
'2924':[[149,27],[297,27],],
'3604':[[215,27],[183,27],],
'4118':[[301,26],],
'4553':[[368,26],],
},{'7':[[1,34],[252,39],[334,35],[371,36],[280,37],[59,28],],
'12':[[253,176],[52,179],[84,88],[339,79],[277,555],[197,449],],
'19':[[384,8354],],
'27':[[321,246],[48,599],],
'30':[[54,502],],
'43':[[118,89],[355,973],[52,169],[253,149],[391,66],[200,80],[84,59],[181,987],[181,953],[162,237],[177,54],[181,436],[181,554],],
'63':[[153,1098],[363,339],[361,100],],
'67':[[86,255],],
'68':[[153,1301],],
'73':[[396,182],],
'85':[[335,2959],],
'128':[[110,19],[5,33],[109,17],[378,19],],
'199':[[363,144],[313,167],[218,106],],
'241':[[118,151],[244,193],],
'248':[[384,6298],[384,2937],[52,103],[253,183],],
'264':[[84,232],],
'281':[[361,75],],
'305':[[337,94],],
'318':[[8,26],],
'598':[[197,537],],
'817':[[384,6506],],
'857':[[283,236],],
'861':[[25,75],],
'887':[[253,198],],
'933':[[41,130],],
'949':[[244,180],[118,138],],
'1169':[[118,209],[244,240],],
'1211':[[153,224],],
'2415':[[244,163],[118,121],],
'3655':[[384,1788],],
},{'17':[[322,102],[128,100],[315,129],[289,129],],
'43':[[153,1235],],
'62':[[153,959],],
'65':[[200,209],],
'125':[[334,37],[59,30],[1,36],[371,38],[280,39],[252,41],],
'145':[[314,86],],
'149':[[153,608],],
'195':[[48,4801],],
'199':[[84,41],],
'231':[[339,65],],
'241':[[335,2941],],
'259':[[71,75],[382,75],],
'264':[[95,329],[54,753],],
'277':[[277,440],],
'288':[[246,1950],],
'344':[[258,64],],
'354':[[396,109],],
'436':[[335,1547],],
'473':[[48,2550],],
'520':[[54,765],],
'706':[[306,1092],],
'926':[[335,1613],[335,1474],[335,1748],],
'1027':[[335,111],],
'1109':[[243,166],],
'1123':[[290,115],],
'1177':[[65,161],],
'1186':[[335,50],[153,83],],
'1254':[[39,898],],
'1331':[[42,539],],
'1878':[[353,58],],
'2415':[[253,187],],
'2886':[[320,147],[320,163],],
'2976':[[188,348],[277,841],],
'2992':[[153,1298],],
'3007':[[153,1321],],
'3203':[[208,50],[171,83],],
'3510':[[179,932],[335,182],],
'4353':[[335,2961],],
},{'2':[[277,169],],
'7':[[250,54],[1,39],[59,33],[367,48],[373,47],],
'23':[[42,459],[246,239],[321,214],[118,154],],
'26':[[243,200],],
'33':[[384,5839],],
'59':[[118,165],[244,196],],
'63':[[355,763],],
'65':[[384,8088],],
'81':[[355,805],],
'82':[[70,455],[153,296],[94,33],[197,305],[235,460],[178,117],],
'84':[[39,407],],
'124':[[288,16],],
'128':[[304,156],[42,119],[388,49],[31,35],],
'131':[[371,75],[280,82],],
'134':[[288,24],[155,33],],
'139':[[384,8993],],
'142':[[334,59],],
'154':[[274,398],],
'155':[[246,264],[384,4902],],
'203':[[355,1115],],
'230':[[188,239],[321,199],[54,315],[48,1718],[179,913],[335,163],[179,938],],
'244':[[335,534],[335,2454],[335,1700],],
'273':[[246,293],],
'279':[[355,550],[185,35],[246,1823],[70,791],[355,790],[277,87],[70,18],[243,251],[171,1232],[355,1494],[179,8],[290,65],[174,273],[335,28],[188,228],[344,100],[335,3800],],
'295':[[384,4537],],
'307':[[246,186],],
'313':[[48,277],],
'343':[[42,433],],
'347':[[335,386],[335,1181],[335,2653],[335,509],],
'364':[[246,407],],
'431':[[235,115],[118,80],[244,89],],
'502':[[384,6361],[335,733],],
'562':[[371,31],],
'593':[[335,2451],],
'696':[[179,78],],
'710':[[17,19],[155,17],],
'771':[[316,105],],
'791':[[335,390],[335,1185],[335,2657],],
'857':[[59,50],],
'924':[[181,670],],
'989':[[335,620],],
'1004':[[335,1568],[335,2669],[335,1434],[335,1421],[335,1206],[335,1719],[335,1580],[335,582],[335,407],],
'1029':[[335,1708],],
'1101':[[244,110],],
'1122':[[335,531],],
'1393':[[42,444],],
'1521':[[48,1549],],
'1547':[[54,373],],
'2008':[[188,218],],
'2144':[[54,586],],
'2487':[[335,1697],],
'2981':[[290,46],],
'3514':[[232,47],],
'4285':[[335,380],],
'4490':[[355,1171],],
},{'12':[[252,92],],
'15':[[59,35],[1,41],],
'31':[[214,147],],
'73':[[74,126],[214,188],[16,126],],
'77':[[164,449],],
'150':[[16,130],[74,130],],
'359':[[74,120],[16,120],],
'648':[[303,183],],
'1029':[[335,158],],
'1700':[[48,1713],],
'1708':[[179,908],[54,310],],
'1991':[[49,59],],
},{'3':[[384,1692],],
'7':[[379,123],],
'12':[[266,145],[48,2148],[260,89],],
'16':[[253,107],[179,672],[137,184],[173,229],],
'19':[[11,34],[384,8219],],
'31':[[97,37],[67,38],[61,45],[59,39],[127,53],[23,40],[187,187],[387,64],[370,35],[293,40],[1,45],[298,53],[311,64],],
'33':[[384,8260],[266,100],],
'39':[[189,218],[235,126],[218,113],[178,123],[10,167],[234,168],[235,485],[213,176],[74,48],[16,48],[363,160],],
'75':[[306,457],],
'83':[[89,154],],
'119':[[179,1614],[54,637],[48,1819],[335,268],],
'135':[[197,538],],
'139':[[54,1020],[197,575],[340,86],[70,587],[70,586],[179,796],[179,730],[70,319],[308,119],[70,732],],
'144':[[306,1610],[235,414],[306,1576],],
'147':[[235,117],[118,82],[218,203],[244,91],],
'165':[[209,67],],
'174':[[48,541],],
'183':[[347,61],[209,269],[164,337],],
'199':[[266,245],],
'215':[[179,795],[70,731],[197,574],],
'339':[[335,817],],
'376':[[214,297],],
'382':[[335,628],],
'389':[[100,33],[363,57],[118,27],[270,46],[34,32],[131,30],[131,43],[135,33],[137,30],[137,43],[20,37],[332,31],[146,32],[148,34],[260,26],[283,35],[252,22],[247,46],[247,33],[270,33],[170,29],[89,56],[173,38],[173,51],[284,38],[178,34],[178,39],[178,48],[36,33],[10,75],[285,32],[244,29],[287,24],[86,47],[86,34],[44,28],[77,41],[57,49],[57,36],[180,37],[187,38],[10,46],[189,48],[189,77],[77,28],[57,23],[53,24],[235,44],[269,37],[50,24],[203,25],[209,41],[74,21],[170,33],[210,32],[213,43],[213,51],[213,55],[213,59],[213,92],[363,41],[44,24],[218,31],[218,43],[363,49],[16,21],[229,36],[233,34],[233,39],[234,45],[234,74],[363,53],[235,30],[235,35],[235,40],[394,33],],
'396':[[197,572],[70,729],[179,793],],
'423':[[70,522],],
'431':[[142,135],],
'700':[[304,235],],
'755':[[340,85],],
'758':[[293,98],],
'791':[[70,585],[179,1354],],
'830':[[23,98],],
'1010':[[308,118],[70,318],],
'1333':[[153,573],],
'1648':[[48,1123],],
'1649':[[48,940],],
'1666':[[48,1007],],
'1692':[[48,1478],],
'1695':[[48,1516],],
'1755':[[48,3155],],
'1756':[[48,3167],[48,3163],],
'1798':[[48,2565],[48,2558],[48,2593],],
'1807':[[48,2611],],
'1904':[[48,4198],[306,1538],],
'1905':[[306,1505],[48,4163],],
'1927':[[48,4463],],
'1936':[[48,4729],[48,4748],[48,4718],],
'1941':[[48,4726],],
'1956':[[335,3710],],
'1969':[[48,4862],[48,4838],],
'2126':[[335,2586],[335,3219],[335,1906],[335,1166],[335,320],[335,3601],[335,500],[335,722],],
'2128':[[335,507],[335,327],[335,1173],[335,3615],[335,1914],[335,729],],
'2131':[[335,122],],
'2132':[[179,1188],[335,2045],],
'2179':[[153,712],[153,580],[197,360],[70,508],],
'2195':[[54,1019],],
'2208':[[54,977],],
'2351':[[70,643],[70,560],],
'2353':[[70,699],],
'2358':[[70,713],],
'2675':[[384,9836],],
'2699':[[105,56],],
'2735':[[367,96],],
'2859':[[304,282],],
'2959':[[153,708],],
'2968':[[153,401],],
'3487':[[179,682],],
'3493':[[179,729],],
'4156':[[306,489],],
'4183':[[306,1485],],
'4326':[[335,2012],],
'4358':[[335,2600],],
'4359':[[335,2618],],
'4372':[[335,3265],],
'4383':[[335,3583],],
'4885':[[384,3602],],
'5162':[[384,8992],],
},{'7':[[99,65],[232,63],[232,54],[365,163],[232,70],],
'12':[[384,8238],[384,6276],[181,785],[173,142],[12,257],[12,428],[384,5677],[384,5474],[12,593],[186,224],[186,279],[189,505],[189,573],[170,131],[384,2116],[37,31],[164,246],[213,280],[164,51],[289,71],[181,726],[218,195],[218,239],[365,221],[41,380],[294,32],[181,618],[42,294],[224,63],[161,356],[160,527],[160,253],[231,85],[70,111],[70,52],[355,949],[355,679],[277,695],[42,1013],[274,732],[153,827],[42,1046],[42,1087],[181,539],[214,346],[48,76],[235,67],[344,49],[244,50],[342,96],[68,109],[142,172],[335,2989],[137,97],[335,2417],[246,448],[131,111],[125,213],[121,146],[49,37],[247,116],[118,49],[303,123],[331,353],[274,676],[304,172],[321,121],[253,193],[52,152],[266,45],[320,118],[84,209],[181,564],[96,99],[315,71],[53,117],[270,118],[54,202],[95,182],[274,169],[57,121],[86,114],[77,96],],
'15':[[93,47],[318,38],[103,83],[324,31],[111,79],[150,83],[350,137],[156,108],[157,49],[222,44],[79,39],[392,36],[163,49],[4,42],[87,51],[279,38],],
'19':[[246,1550],],
'23':[[125,209],],
'27':[[76,85],[358,106],[277,150],[355,664],[30,229],[181,754],[312,51],],
'28':[[224,186],],
'30':[[314,98],[83,108],[48,4374],[227,144],[181,30],[48,387],],
'34':[[52,56],],
'37':[[335,3268],],
'38':[[363,755],],
'39':[[70,130],[390,134],[384,4282],[246,421],[134,151],[246,355],[160,317],[358,169],[373,110],[280,114],[302,153],[274,103],[246,442],[52,85],[371,116],],
'43':[[214,185],[277,617],[277,38],[252,67],[367,109],[222,37],[214,106],[164,43],[161,493],[121,423],[318,31],[161,416],[381,463],[181,507],[54,228],[381,534],[392,29],[48,3602],[79,32],[274,84],[274,266],[274,433],[303,161],[214,181],[279,31],[358,163],[227,193],[4,35],[164,30],[355,984],],
'47':[[266,64],],
'48':[[20,160],],
'54':[[349,74],],
'56':[[249,234],],
'57':[[335,1407],[358,353],],
'61':[[197,154],[70,273],],
'63':[[277,865],[171,1211],[335,3787],[269,191],[88,43],[249,4],[185,97],[335,13],[41,342],[48,4816],[321,96],[331,445],[185,14],[214,113],[208,43],],
'67':[[384,4649],],
'68':[[306,803],],
'73':[[11,50],[100,201],[135,158],[373,102],[252,94],],
'77':[[224,218],],
'78':[[335,39],],
'79':[[161,461],],
'82':[[197,264],[344,228],[355,1005],[344,209],],
'85':[[52,286],[12,187],[335,1973],],
'128':[[94,44],[258,28],[183,47],[23,55],[215,47],[349,48],[309,30],[365,208],[293,55],[314,48],],
'139':[[1,46],[59,40],],
'149':[[180,168],[320,165],[168,38],],
'152':[[384,4611],[12,566],[384,8029],[84,203],[283,239],[384,8053],],
'154':[[112,116],],
'164':[[274,202],[266,232],[99,273],[162,324],[251,183],[321,343],[246,377],[317,28],],
'165':[[42,925],[355,818],[42,327],[42,933],[42,1024],[42,1032],[52,8],[384,1662],[189,501],[52,242],[384,3835],[162,395],[162,385],[52,258],[171,236],[162,258],[52,271],[172,46],[188,143],[172,52],[162,248],[172,116],[162,121],[162,19],[384,8737],[266,400],[384,8824],[266,33],[384,9310],[112,57],[7,45],[52,49],[181,484],],
'167':[[52,360],[68,123],[162,8],[15,39],[52,33],[42,509],[68,17],[171,246],[7,55],],
'196':[[148,158],],
'200':[[251,256],],
'201':[[246,479],],
'230':[[384,4907],],
'241':[[100,179],[82,423],[229,192],[48,4971],[70,204],],
'248':[[186,343],[251,43],[75,126],[335,2460],[42,608],[335,117],[355,1102],[164,254],[188,210],[277,397],[30,243],[181,895],[257,191],[39,729],[274,828],[363,393],[170,166],[42,198],[96,84],[62,75],[200,309],],
'267':[[7,31],[243,28],[214,307],[70,139],[84,576],[290,670],[266,4],[171,222],[290,136],[84,19],[290,20],[21,140],[243,285],[52,344],[54,127],[344,5],[7,88],[52,15],[355,509],[171,279],[41,371],],
'274':[[120,23],[384,8513],[78,23],[384,3938],[384,8150],],
'281':[[251,79],],
'284':[[52,71],],
'295':[[42,376],],
'305':[[95,433],[99,78],[266,62],[335,1544],[181,999],[331,79],],
'321':[[197,143],[70,262],],
'349':[[313,454],],
'351':[[118,184],[358,87],[358,98],[244,215],],
'370':[[41,303],[320,152],[68,56],[266,318],],
'415':[[339,90],],
'431':[[48,126],[306,112],],
'458':[[131,127],[77,112],],
'462':[[77,143],[131,156],],
'470':[[137,270],],
'482':[[381,539],],
'491':[[39,557],],
'492':[[39,31],],
'501':[[39,515],],
'552':[[384,552],],
'575':[[48,4479],[48,4010],[197,460],[153,535],],
'577':[[335,463],],
'589':[[331,425],],
'602':[[84,272],],
'607':[[153,639],],
'613':[[246,594],],
'639':[[12,563],[161,576],[321,176],],
'642':[[48,289],],
'712':[[82,517],],
'723':[[285,135],],
'817':[[384,6053],[384,1271],[384,2576],],
'861':[[355,1146],[153,1238],[191,104],],
'878':[[384,7991],],
'912':[[84,309],[95,445],[160,320],],
'918':[[269,182],],
'923':[[384,4852],[218,188],[178,232],[384,4892],[42,1289],],
'926':[[320,54],[253,39],],
'928':[[251,90],],
'931':[[355,1327],[162,149],[384,7134],[42,625],],
'941':[[277,360],],
'948':[[227,185],],
'1003':[[49,271],[160,220],],
'1123':[[344,219],[344,204],[355,1054],],
'1151':[[246,196],],
'1155':[[39,319],[164,62],[164,76],[70,118],],
'1211':[[306,502],],
'1224':[[306,935],],
'1244':[[246,339],],
'1307':[[384,2886],],
'1319':[[217,506],],
'1361':[[42,229],],
'1385':[[163,32],[164,40],],
'1405':[[152,102],],
'1431':[[42,816],[42,1306],],
'1451':[[42,896],],
'1462':[[42,995],[344,266],[251,163],],
'1466':[[62,83],],
'1467':[[178,295],],
'1490':[[384,4718],],
'1598':[[48,3200],[48,2735],],
'1667':[[80,123],[384,8442],],
'1849':[[48,3530],[48,3507],],
'1864':[[384,3355],],
'1967':[[187,179],],
'1991':[[62,110],],
'2042':[[371,87],[280,94],[146,158],[217,407],],
'2045':[[70,414],],
'2179':[[197,228],[70,391],],
'2242':[[54,1435],],
'2275':[[59,87],],
'2409':[[153,488],],
'2530':[[335,568],],
'2576':[[335,3404],],
'2639':[[99,200],],
'2808':[[161,334],],
'3045':[[159,114],],
'3756':[[217,176],],
'4402':[[355,179],],
'4499':[[356,55],],
'4605':[[384,3490],],
'5097':[[384,6985],],
},{'7':[[280,5],[59,3],[59,90],[171,676],[245,54],[369,80],],
'117':[[334,0],],
'123':[[334,16],],
'140':[[1,47],],
'169':[[280,129],],
'375':[[280,122],[384,8984],],
},{'7':[[82,352],],
'12':[[339,93],[367,41],[1,49],[250,39],[84,126],[94,46],[224,87],[224,39],[111,40],[145,40],[212,42],[200,173],[181,739],[373,105],],
'63':[[164,406],[181,397],],
'128':[[224,27],[103,54],[334,58],[315,31],[150,54],[289,31],],
'139':[[48,4464],],
'241':[[102,79],],
'454':[[82,371],],
'1927':[[306,1519],[48,4179],],
},{'55':[[176,162],[160,676],[162,332],],
'61':[[121,343],],
'77':[[335,156],],
'142':[[82,372],[1,50],[306,1520],[164,407],[48,4180],[82,353],],
'150':[[52,78],],
'152':[[379,145],[39,428],],
'197':[[176,69],[21,136],],
'199':[[339,95],[373,107],[153,359],],
'238':[[171,113],[116,59],],
'288':[[395,125],],
'290':[[84,354],],
'292':[[363,439],],
'293':[[102,210],[171,330],[102,30],[176,3],[7,139],[160,689],[186,505],[186,18],],
'359':[[381,426],],
'424':[[82,496],[289,45],[371,84],[207,52],[200,59],[280,91],[263,68],[314,33],[315,45],[349,33],[260,60],],
'470':[[384,4679],[363,668],[199,61],],
'699':[[84,334],],
'817':[[384,1476],],
'898':[[181,816],],
'938':[[30,253],[335,3107],],
'954':[[339,256],[321,316],],
'963':[[335,3027],[335,2175],],
'1004':[[335,2153],[335,2918],],
'1016':[[164,325],[118,108],],
'1231':[[335,2647],[42,1209],],
'1327':[[313,20],[335,2147],[335,2887],],
'1612':[[48,660],[121,448],[48,801],[48,646],[306,221],],
'1633':[[48,1212],[306,198],[48,778],],
'1652':[[335,2189],[335,3036],],
'1688':[[48,1349],],
'1754':[[48,2113],[200,146],[111,75],[111,30],[313,402],[263,88],],
'2105':[[335,3004],],
'2145':[[54,598],[273,35],],
'2383':[[313,65],],
'2470':[[384,8202],[87,86],],
'2478':[[84,387],],
'2644':[[99,261],],
'2675':[[384,7507],],
'2839':[[125,206],],
'3266':[[384,7979],],
'4247':[[331,168],[331,200],],
'4338':[[335,3031],[335,2179],],
},{'9':[[48,2184],],
'12':[[384,4949],[385,64],[244,73],],
'19':[[313,343],],
'23':[[169,60],[314,84],[207,76],[384,4662],[363,544],[218,280],[177,42],[363,637],[349,76],[114,59],[44,123],],
'39':[[363,656],[235,413],[50,85],[199,49],[6,48],[305,56],],
'43':[[82,379],[82,408],],
'48':[[275,23],[131,118],[77,103],],
'52':[[70,219],],
'57':[[365,188],[365,136],],
'63':[[53,78],[29,107],[384,9655],[9,107],],
'68':[[384,6676],],
'73':[[164,364],],
'75':[[306,742],[306,500],[306,1609],],
'83':[[320,73],],
'93':[[48,1911],],
'95':[[54,366],[197,218],[179,1023],[335,248],[70,381],],
'119':[[153,1419],],
'121':[[183,37],[215,37],],
'126':[[334,44],],
'128':[[201,19],[213,332],[72,22],[356,19],[228,19],[14,41],[244,31],[360,33],[118,29],],
'131':[[371,57],[54,1481],[280,64],],
'133':[[26,24],],
'137':[[59,51],],
'139':[[306,1611],[70,509],[70,714],[70,700],[197,361],[70,561],],
'140':[[37,32],],
'143':[[1,51],],
'145':[[53,52],[311,71],[36,117],[313,193],[34,110],[371,59],[372,45],[305,49],[302,80],[37,34],[300,40],[299,33],[57,185],[50,62],[59,53],[298,44],[62,55],[296,69],[293,47],[69,59],[29,72],[292,47],[373,56],[367,89],[314,39],[44,83],[319,46],[287,65],[285,109],[44,85],[284,146],[73,49],[283,117],[75,72],[27,37],[77,105],[280,66],[80,78],[320,75],[81,49],[26,26],[322,75],[276,36],[275,25],[86,178],[328,25],[89,279],[271,33],[90,47],[270,182],[100,116],[269,145],[114,46],[23,47],[263,80],[116,51],[332,119],[260,77],[127,44],[257,99],[128,78],[253,89],[20,136],[131,120],[252,53],[134,83],[250,95],[135,121],[247,180],[137,161],[385,30],[141,46],[334,46],[143,36],[237,33],[146,112],[47,25],[147,25],[235,188],[148,128],[234,325],[229,139],[364,36],[10,324],[218,249],[216,33],[215,39],[338,55],[343,41],[363,283],[210,121],[157,43],[209,176],[9,72],[207,58],[205,33],[347,37],[387,71],[200,137],[169,47],[6,50],[3,26],[170,117],[198,65],[349,39],[394,119],[173,206],[1,53],[192,33],[178,198],[191,70],[189,375],[187,130],[183,39],[362,43],[180,133],[25,43],[396,59],],
'146':[[48,4551],[48,484],],
'154':[[287,63],],
'162':[[218,247],],
'164':[[33,35],[338,89],[322,181],[259,33],[45,31],[363,728],[160,128],[128,179],[207,100],[160,330],[163,42],[283,157],[172,120],],
'176':[[298,42],[127,42],],
'184':[[141,44],],
'185':[[3,24],],
'187':[[25,41],],
'199':[[160,347],],
'202':[[49,185],],
'206':[[49,173],],
'215':[[143,34],[300,38],[54,640],[48,1964],[179,898],[306,1209],],
'220':[[62,53],[362,41],],
'231':[[335,3021],[335,2169],],
'237':[[302,78],[134,81],[253,87],],
'241':[[260,75],[48,482],],
'244':[[54,1062],],
'248':[[181,1008],[170,273],[287,88],],
'249':[[338,53],],
'276':[[179,822],[179,755],],
'277':[[191,68],],
'290':[[128,76],[322,73],],
'305':[[48,4955],[193,80],[218,231],[352,80],],
'338':[[146,110],[148,126],[234,323],[247,178],[137,159],[187,128],[135,119],[57,183],[229,137],[34,108],[10,322],[189,373],[36,115],[210,119],[209,174],[178,196],[173,204],[180,131],[269,143],[332,117],[270,180],[100,114],[394,117],[285,107],[89,277],[86,176],[284,144],[20,134],[283,115],],
'347':[[9,70],[29,70],],
'351':[[52,229],],
'357':[[313,333],],
'421':[[373,54],[90,45],[116,49],[292,45],],
'423':[[197,594],[396,57],[70,752],],
'436':[[200,135],],
'447':[[263,78],],
'462':[[44,81],],
'470':[[349,37],[314,37],],
'540':[[170,115],],
'593':[[47,23],],
'653':[[53,50],[50,60],],
'664':[[14,45],],
'670':[[84,415],],
'751':[[384,8247],],
'791':[[147,23],],
'836':[[293,45],[23,45],],
'857':[[48,1938],],
'875':[[364,34],[343,39],[27,35],[276,34],[347,35],],
'926':[[75,70],],
'949':[[157,41],],
'995':[[242,105],],
'1003':[[384,6683],],
'1006':[[305,47],[73,47],[198,63],],
'1029':[[306,1311],[306,1515],[54,1181],[48,1369],[306,1298],[54,324],[48,3926],[153,447],[335,196],[153,222],[306,1255],[153,1175],[70,294],[306,461],[153,971],[335,178],[153,1338],[197,175],[48,1727],[179,928],[48,3966],[179,959],[48,3980],[179,985],[153,1396],[48,4175],],
'1053':[[207,56],],
'1228':[[164,319],],
'1238':[[387,69],[311,69],[385,28],],
'1308':[[257,97],],
'1355':[[81,47],],
'1388':[[372,43],],
'1579':[[48,467],],
'1602':[[48,1524],[48,1417],],
'1629':[[48,1390],],
'1690':[[48,1495],],
'1691':[[48,1451],],
'1719':[[252,51],],
'1729':[[48,1830],[179,1624],[335,278],],
'1828':[[306,1115],],
'1847':[[306,1207],],
'1917':[[306,1547],[48,4215],],
'1940':[[48,4549],],
'1988':[[48,4974],],
'2049':[[69,57],],
'2067':[[235,186],],
'2079':[[271,31],[192,31],[237,31],[205,31],[216,31],[299,31],],
'2179':[[296,67],[250,93],[367,87],],
'2183':[[54,1517],],
'2203':[[54,940],],
'2213':[[54,1052],[54,1003],],
'2297':[[319,44],],
'2319':[[66,24],],
'2358':[[70,780],],
'2360':[[313,191],[363,281],],
'2384':[[335,1120],],
'2408':[[80,76],],
'2712':[[306,1575],],
'2727':[[169,45],[114,44],],
'2958':[[153,410],],
'2959':[[153,462],[153,720],],
'3700':[[197,622],],
'4170':[[306,912],],
'4174':[[306,877],],
'4177':[[306,1187],],
'4232':[[328,23],],
'4639':[[384,7018],],
},{'7':[[299,28],[271,28],[237,28],[216,28],[192,28],[205,28],],
'19':[[48,4961],],
'23':[[147,28],[321,284],[321,270],[391,48],],
'67':[[352,111],[162,185],[193,111],],
'128':[[182,19],],
'144':[[36,116],[37,33],[387,70],[385,29],[384,4663],[373,55],[372,44],[44,82],[44,84],[44,124],[371,58],[47,24],[26,25],[50,61],[53,51],[57,184],[59,52],[62,54],[69,58],[73,48],[75,71],[77,104],[80,77],[81,48],[86,177],[89,278],[90,46],[100,115],[114,45],[114,60],[116,50],[27,36],[127,43],[128,77],[364,35],[131,119],[134,82],[135,120],[137,160],[141,45],[143,35],[146,111],[147,24],[25,42],[148,127],[157,42],[394,118],[363,638],[363,545],[169,46],[169,61],[170,116],[173,205],[177,43],[178,197],[180,132],[34,109],[23,46],[187,129],[189,374],[191,69],[20,135],[192,32],[363,282],[362,42],[367,88],[198,64],[360,34],[200,136],[201,20],[14,42],[205,32],[29,71],[207,57],[207,77],[209,175],[210,120],[215,38],[10,323],[216,32],[349,77],[349,38],[218,248],[229,138],[234,324],[235,187],[9,71],[237,32],[347,36],[247,179],[250,94],[252,52],[253,88],[343,40],[257,98],[338,54],[260,76],[263,79],[269,144],[270,181],[6,49],[271,32],[334,45],[332,118],[275,24],[276,35],[328,24],[280,65],[283,116],[284,145],[285,108],[287,64],[292,46],[293,46],[296,68],[298,43],[3,25],[299,32],[322,74],[300,39],[302,79],[305,48],[311,70],[313,192],[313,334],[314,38],[314,85],[319,45],[320,74],[183,38],[1,52],[396,58],],
'149':[[384,6240],],
'220':[[274,591],[352,96],[163,40],[33,33],[45,29],[259,31],[193,96],],
'230':[[384,6227],[42,750],[42,1082],[32,21],[278,20],[42,473],[42,620],],
'315':[[130,23],],
'443':[[200,78],],
'451':[[337,43],],
'454':[[192,36],[237,36],[205,36],[271,36],[216,36],[299,36],],
'464':[[255,21],[166,21],],
'646':[[342,306],],
'1147':[[42,1297],],
'1335':[[384,4887],],
'2577':[[384,6413],],
'2785':[[122,107],],
'3759':[[217,291],],
'4234':[[331,350],],
'4364':[[335,2999],],
'4685':[[384,3547],],
},{'2':[[304,276],],
'7':[[280,68],[252,55],[371,61],[314,41],[322,77],[128,80],[334,48],[59,55],[1,55],],
'12':[[164,484],[339,143],],
'16':[[191,179],],
'26':[[313,345],],
'144':[[48,4550],[54,1182],[48,3981],[48,3967],[48,3927],[48,4176],[48,468],[50,86],[306,1516],[53,79],[306,1312],[306,1256],[306,1299],[48,483],],
'183':[[200,290],[257,172],[53,60],[50,70],[220,71],],
'199':[[355,1030],],
'288':[[315,150],[289,150],],
'290':[[304,255],],
'389':[[218,47],],
'1003':[[177,46],],
'1801':[[48,2625],],
'1832':[[128,152],[322,154],],
'2183':[[200,142],[257,104],[54,1312],[313,198],],
'2415':[[322,167],[128,165],],
'2723':[[113,34],],
'2863':[[128,138],[322,140],],
'3010':[[304,186],],
'4202':[[387,81],[311,81],],
'4603':[[384,6652],],
},{'1':[[246,123],],
'2':[[193,133],[331,91],[352,133],[381,69],],
'3':[[246,972],],
'7':[[44,53],[65,119],[65,89],[73,37],[10,141],[368,34],[317,47],[89,128],[89,141],[287,47],[234,142],[42,414],[213,150],[207,39],[337,90],[198,56],[20,68],[305,41],[260,43],[189,192],],
'9':[[284,209],],
'14':[[84,31],[266,41],[52,41],],
'16':[[39,863],[335,2420],[220,68],[313,378],[48,1307],[189,444],],
'17':[[159,68],],
'20':[[70,284],[197,165],],
'27':[[277,805],],
'28':[[153,817],],
'29':[[48,536],],
'31':[[381,492],[384,6544],[48,4014],],
'35':[[381,308],],
'37':[[331,308],],
'39':[[25,87],[214,179],[160,453],],
'42':[[30,450],],
'43':[[220,26],[374,26],[295,26],[98,26],[329,26],[268,26],[174,95],[317,86],[225,26],[138,26],[274,247],],
'45':[[217,353],],
'47':[[214,183],[274,82],],
'48':[[283,167],[69,86],[27,26],[48,4646],[50,31],],
'54':[[213,433],[121,505],[54,1246],[306,1076],[161,537],[341,235],[189,590],[164,28],[307,235],[321,139],[308,70],],
'61':[[253,171],[340,69],[306,1416],],
'62':[[186,154],],
'63':[[246,1922],[246,1455],[84,92],],
'65':[[186,331],[52,215],[335,2392],[48,2532],],
'67':[[266,111],[181,150],],
'69':[[353,85],[353,103],],
'73':[[246,1325],],
'77':[[384,9759],],
'79':[[331,419],[44,132],[246,1727],[274,739],[160,258],[306,794],],
'82':[[172,83],[246,140],[355,673],[12,48],[48,4820],],
'83':[[344,118],[246,132],[320,143],],
'87':[[18,59],],
'88':[[335,1073],],
'95':[[335,208],[70,345],[197,182],],
'96':[[249,287],],
'99':[[335,1109],[355,1048],],
'105':[[355,174],],
'121':[[160,620],[164,332],],
'124':[[48,963],],
'125':[[153,212],],
'128':[[137,181],[307,59],[308,29],[340,29],[53,67],[341,59],[113,28],[118,87],[75,78],[173,226],[18,48],[373,68],[184,16],[253,94],[347,44],[252,65],[135,141],[320,26],],
'131':[[274,205],[246,351],],
'136':[[335,2942],[335,183],[179,933],],
'137':[[235,461],[48,1550],[48,1719],[244,90],[54,316],[118,81],[235,116],],
'139':[[48,2612],[209,68],[340,87],[48,4164],[48,4839],[367,97],[308,120],[70,523],[306,1506],[48,4863],],
'140':[[164,41],[162,122],],
'143':[[363,440],],
'145':[[42,1298],],
'146':[[50,87],[306,1257],[280,69],[371,62],[48,3968],[334,49],[306,1300],[252,56],[314,42],[313,199],[59,56],[1,56],],
'149':[[280,116],[371,118],[331,407],[357,41],],
'150':[[396,164],[321,256],],
'151':[[274,99],],
'152':[[274,217],[335,1026],[274,233],[335,1016],],
'160':[[181,533],],
'165':[[84,509],],
'170':[[164,288],],
'174':[[48,1186],[306,891],],
'178':[[308,102],],
'182':[[48,948],[48,2275],[48,3315],],
'185':[[96,147],],
'187':[[164,264],[164,551],],
'196':[[384,5825],[274,660],[274,355],[274,641],[54,1461],],
'199':[[304,288],[30,469],[321,66],],
'215':[[48,189],[148,136],[20,144],[82,477],[179,1059],[270,190],[269,153],[57,193],[180,141],[229,147],[48,2923],[352,82],[27,44],[86,186],[48,356],[29,81],[48,3360],[70,749],[210,129],[34,118],[137,169],[209,184],[36,125],[9,81],[335,3758],[173,214],[332,127],[100,124],[135,129],[197,591],[247,188],[394,127],[306,635],[146,120],[283,125],[187,138],[193,82],[363,293],[48,3955],[284,154],[285,117],],
'217':[[48,155],[355,1000],[6,46],[306,419],[48,1758],[6,72],],
'220':[[5,43],[5,70],[181,85],],
'221':[[260,81],],
'223':[[44,39],],
'225':[[270,246],[235,393],],
'227':[[151,42],[335,2408],[389,42],],
'230':[[160,539],[321,209],[261,155],[86,249],[358,315],],
'231':[[186,244],[70,305],[61,81],[370,55],[170,227],[67,48],[263,97],[52,148],[339,179],[313,352],],
'237':[[191,262],[48,1176],[48,1086],[48,1121],],
'238':[[6,25],[181,901],[160,491],],
'241':[[82,377],[335,882],[82,406],[48,513],[48,3512],[52,249],[244,184],[118,142],],
'242':[[6,43],],
'244':[[364,39],[42,562],[6,53],[322,183],[128,181],[170,107],[116,54],[48,2588],[177,31],[82,492],[313,196],[53,55],[50,65],[231,100],[191,57],[69,62],],
'245':[[235,363],],
'250':[[220,90],[252,78],[355,1149],],
'256':[[6,85],[146,139],[381,337],],
'269':[[164,474],[384,5022],],
'277':[[384,8120],[116,92],[116,108],[253,147],],
'290':[[342,112],],
'295':[[367,94],],
'298':[[246,876],],
'299':[[48,3953],],
'309':[[141,77],[143,56],],
'312':[[51,13],],
'317':[[181,434],],
'321':[[358,161],[164,69],],
'336':[[320,123],],
'339':[[176,159],],
'340':[[160,360],[53,92],],
'343':[[277,54],],
'344':[[321,289],],
'348':[[277,780],[274,575],],
'354':[[128,155],[322,143],[191,176],[322,157],[128,141],],
'359':[[235,382],[294,39],],
'367':[[189,449],],
'369':[[378,25],],
'370':[[48,105],[82,470],[316,84],[187,161],],
'372':[[42,1323],],
'373':[[246,374],],
'375':[[335,2782],[181,875],[335,2064],],
'376':[[164,82],],
'384':[[189,144],],
'397':[[363,215],],
'415':[[161,327],],
'419':[[249,207],],
'423':[[197,358],[70,506],[70,371],[197,208],],
'424':[[207,68],],
'431':[[213,164],[235,124],[313,155],[218,94],[213,174],[10,259],[16,91],[218,111],[10,155],[313,172],[218,210],[75,57],[74,91],[363,132],[189,206],[189,216],[189,269],[189,310],[234,156],[74,46],[10,165],[234,166],[363,149],[234,219],[253,77],[363,158],[234,260],[178,121],[16,65],[74,65],[16,46],[10,218],],
'447':[[384,7270],[363,405],],
'452':[[189,492],],
'454':[[89,451],],
'462':[[181,183],[178,241],],
'465':[[162,235],],
'469':[[246,775],],
'479':[[335,1262],],
'499':[[161,414],],
'502':[[153,231],],
'517':[[121,547],],
'518':[[186,250],],
'530':[[118,188],[253,126],[244,219],[384,6328],[89,347],[132,30],[39,186],[177,52],[363,603],[178,310],[162,368],[322,192],[384,3407],[313,306],[128,190],],
'539':[[376,36],],
'553':[[48,672],],
'554':[[246,1409],],
'566':[[48,1109],],
'588':[[48,2329],[39,796],],
'593':[[384,6428],[26,40],],
'603':[[48,2584],],
'609':[[44,74],[287,61],],
'612':[[12,433],],
'613':[[152,164],],
'615':[[30,58],],
'631':[[153,1226],],
'642':[[83,41],],
'649':[[384,5686],],
'653':[[37,55],],
'655':[[160,111],],
'681':[[213,383],],
'682':[[213,390],[235,476],[335,1008],],
'683':[[41,351],],
'696':[[200,240],],
'698':[[274,404],],
'700':[[82,330],],
'706':[[84,424],],
'716':[[266,84],],
'738':[[48,3397],],
'771':[[316,94],],
'776':[[135,45],],
'783':[[306,412],[48,1751],],
'791':[[274,761],],
'792':[[161,427],],
'800':[[251,175],[214,134],],
'815':[[48,153],],
'830':[[84,301],],
'840':[[23,72],[215,72],[293,72],[183,72],],
'841':[[274,310],[135,192],],
'844':[[384,269],[93,123],],
'845':[[218,359],],
'856':[[162,329],],
'877':[[274,598],],
'887':[[48,711],],
'894':[[186,120],],
'904':[[191,165],],
'917':[[306,757],],
'935':[[335,2840],],
'940':[[234,361],[355,1420],],
'949':[[355,405],[246,853],[42,595],[42,185],],
'953':[[89,385],],
'963':[[68,93],],
'971':[[164,580],],
'1005':[[207,74],[319,55],],
'1010':[[303,178],[336,116],],
'1029':[[48,2638],[48,1296],],
'1030':[[351,61],],
'1033':[[181,979],[394,154],[210,162],[160,150],[170,248],[53,81],[160,180],[246,98],[52,279],],
'1043':[[165,51],[53,105],],
'1072':[[109,22],[100,184],],
'1101':[[246,176],],
'1109':[[118,131],[244,173],],
'1115':[[266,241],[235,439],],
'1117':[[381,461],[53,128],[174,236],[381,270],[246,214],[274,431],[246,1282],[355,929],[181,505],],
'1123':[[42,662],],
'1125':[[339,229],],
'1148':[[48,299],],
'1168':[[395,121],],
'1170':[[384,1434],],
'1177':[[42,526],[160,673],],
'1180':[[48,2352],],
'1211':[[54,326],[335,198],[48,1961],[153,449],],
'1215':[[39,700],],
'1225':[[335,186],],
'1234':[[101,56],],
'1279':[[296,159],[80,140],[320,56],[253,41],],
'1281':[[296,86],],
'1287':[[296,95],],
'1297':[[296,107],],
'1301':[[48,3522],],
'1304':[[197,256],],
'1314':[[381,532],[296,138],[80,104],],
'1319':[[179,1398],],
'1326':[[70,107],],
'1342':[[274,484],[274,384],],
'1353':[[95,138],],
'1358':[[42,217],],
'1369':[[42,290],],
'1370':[[321,190],],
'1386':[[89,370],],
'1387':[[363,556],],
'1388':[[179,669],],
'1399':[[384,9012],],
'1405':[[178,225],[178,212],],
'1409':[[384,5273],],
'1423':[[335,2799],[48,1050],[335,2095],],
'1424':[[342,229],],
'1448':[[42,891],],
'1452':[[42,1091],],
'1469':[[384,6860],],
'1470':[[42,1115],],
'1476':[[48,2678],],
'1484':[[246,592],],
'1502':[[73,61],],
'1519':[[48,136],],
'1522':[[48,243],],
'1532':[[48,4662],[48,2364],],
'1540':[[384,6020],],
'1548':[[48,1552],],
'1549':[[48,1611],],
'1559':[[48,364],],
'1579':[[48,478],],
'1581':[[48,465],],
'1582':[[62,117],],
'1585':[[48,1773],],
'1597':[[48,2174],],
'1600':[[48,1609],],
'1625':[[48,1271],],
'1629':[[48,1380],],
'1632':[[48,1355],],
'1645':[[48,1094],],
'1656':[[48,1234],],
'1662':[[48,1055],],
'1667':[[48,3636],[128,133],[322,135],],
'1672':[[396,129],],
'1690':[[48,1485],],
'1691':[[48,1441],],
'1708':[[153,209],],
'1709':[[59,42],],
'1723':[[381,249],[384,6185],[384,7774],],
'1733':[[48,3496],],
'1739':[[48,1896],],
'1750':[[48,1975],],
'1756':[[48,2710],],
'1775':[[48,2486],],
'1788':[[48,2455],],
'1790':[[48,2720],],
'1806':[[48,2609],],
'1811':[[266,220],[197,535],[355,492],[335,1053],],
'1815':[[48,2695],],
'1827':[[48,3380],],
'1856':[[48,3678],[306,1288],],
'1906':[[48,3917],[306,1245],[306,1596],],
'1907':[[306,1564],],
'1909':[[306,455],],
'1918':[[48,4357],[48,4093],],
'1920':[[48,4413],],
'1941':[[48,4786],],
'1957':[[48,4539],],
'1967':[[363,122],[161,130],[384,9557],],
'1993':[[246,823],],
'1997':[[121,64],],
'2014':[[49,261],],
'2052':[[50,67],[53,57],],
'2080':[[246,1164],],
'2113':[[303,75],],
'2122':[[54,226],],
'2127':[[179,1384],],
'2129':[[54,1170],],
'2130':[[54,357],[179,1014],[335,239],],
'2132':[[54,610],],
'2137':[[54,545],],
'2140':[[198,78],[283,159],],
'2148':[[162,80],[181,612],],
'2160':[[170,189],],
'2178':[[191,81],],
'2184':[[54,942],],
'2194':[[54,1029],],
'2202':[[54,937],],
'2209':[[54,980],],
'2217':[[218,202],],
'2229':[[181,1004],],
'2241':[[60,96],],
'2247':[[153,710],],
'2255':[[57,225],],
'2268':[[181,246],],
'2301':[[176,234],],
'2324':[[277,658],],
'2342':[[70,332],],
'2349':[[70,558],],
'2355':[[70,697],],
'2356':[[70,711],],
'2357':[[253,104],],
'2370':[[363,710],],
'2374':[[249,212],],
'2388':[[384,9822],],
'2393':[[76,61],],
'2407':[[96,168],],
'2415':[[363,578],[306,1205],],
'2445':[[84,122],[84,144],],
'2455':[[121,347],],
'2509':[[164,322],],
'2519':[[89,397],],
'2573':[[118,105],],
'2577':[[283,243],],
'2695':[[258,52],[105,44],],
'2807':[[125,61],],
'2846':[[189,472],],
'2887':[[137,207],[173,252],],
'2907':[[246,1237],],
'2910':[[142,155],],
'2918':[[358,368],],
'2958':[[153,261],],
'2964':[[153,437],],
'2969':[[153,399],],
'2989':[[181,188],],
'2992':[[153,1331],],
'2996':[[153,964],],
'3000':[[153,1168],[153,1389],],
'3119':[[161,491],],
'3134':[[321,335],],
'3169':[[317,58],],
'3196':[[214,369],],
'3227':[[174,79],],
'3494':[[179,745],[179,812],],
'3510':[[179,916],[335,166],],
'3511':[[179,949],],
'3513':[[179,969],],
'3537':[[179,1298],],
'3557':[[384,1285],],
'3584':[[181,560],],
'3588':[[181,757],],
'3602':[[182,34],],
'3605':[[303,159],],
'3648':[[246,726],],
'3723':[[207,87],],
'3731':[[209,261],],
'3835':[[368,85],],
'3885':[[246,626],],
'3904':[[246,1961],],
'4051':[[274,175],],
'4052':[[274,319],],
'4053':[[274,264],],
'4157':[[306,487],],
'4168':[[306,849],],
'4177':[[306,1183],],
'4204':[[313,248],],
'4267':[[331,386],],
'4326':[[335,2791],[335,2073],],
'4338':[[335,2201],[335,3048],],
'4395':[[336,127],],
'4454':[[353,79],],
'4517':[[358,290],],
'4532':[[363,419],],
'4576':[[384,9346],],
},{'16':[[161,53],[384,7937],],
'19':[[358,131],[252,87],],
'31':[[65,151],],
'39':[[280,73],[334,53],[252,60],[59,60],[371,66],[1,60],[384,7159],[381,562],[384,6213],],
'277':[[384,6281],[381,329],],
'1453':[[384,6588],],
'3099':[[384,7114],],
'4233':[[381,128],[384,5978],],
},{'2':[[381,596],[246,1388],],
'3':[[112,136],[54,1495],[131,116],[137,102],[163,38],[163,57],[86,119],[173,147],[178,238],[45,27],[27,24],[57,126],[112,121],[54,1459],[247,121],[259,29],[270,123],[33,31],[77,101],[36,52],],
'7':[[42,244],],
'12':[[153,277],[16,59],[363,343],[74,59],[189,560],[335,2434],[213,420],],
'13':[[228,42],[162,189],[306,293],[48,635],],
'14':[[176,51],[161,22],],
'15':[[277,391],[153,523],[80,93],[70,531],[347,26],[133,98],[353,185],[172,123],[296,127],[232,59],[95,377],],
'17':[[356,40],[253,81],],
'18':[[159,148],],
'26':[[30,278],[396,84],[48,2528],[159,135],[48,862],[84,107],[360,51],[134,38],[246,1765],[292,56],[128,40],[12,338],[121,300],[118,95],[391,50],[306,282],[112,51],[112,46],],
'28':[[30,136],],
'33':[[1,62],[252,62],[36,173],[280,75],[172,55],[125,75],[59,62],[334,55],[371,68],[181,910],],
'35':[[381,333],],
'38':[[153,515],[355,1095],[336,108],[186,272],[355,1110],[331,406],[181,597],],
'39':[[135,187],],
'47':[[336,36],[226,41],[46,41],],
'48':[[384,5004],[321,60],],
'49':[[102,101],],
'54':[[72,68],[384,7045],[306,1267],[296,123],[48,3936],[80,89],],
'55':[[257,183],[200,301],],
'61':[[301,58],],
'63':[[199,98],[337,106],],
'67':[[322,213],[54,830],[126,30],[251,212],[128,211],],
'77':[[227,91],[384,1301],[54,124],[42,819],[48,855],[308,192],[162,239],[159,119],[306,275],[121,293],[340,159],[153,1325],[12,331],[48,3633],[296,31],],
'82':[[335,3347],[289,74],[306,68],[315,74],],
'83':[[153,58],[84,250],[156,101],],
'86':[[357,40],],
'120':[[1,84],],
'128':[[257,107],[58,25],[345,22],[50,77],[73,54],[44,93],[155,41],[91,31],[391,62],[311,85],[224,76],[395,24],[387,85],],
'131':[[219,37],[262,37],],
'133':[[186,230],],
'136':[[320,164],],
'137':[[290,66],[70,456],[355,1172],[197,306],],
'140':[[189,574],[293,56],[314,49],[371,117],[183,48],[355,665],[53,118],[215,48],[23,56],[349,49],[252,95],[335,2418],[280,115],[48,3603],[188,211],],
'143':[[315,46],[289,46],],
'146':[[257,173],[200,291],[339,144],],
'147':[[319,56],[374,27],[48,357],[268,27],[159,69],[295,27],[225,27],[329,27],[249,288],[220,27],[98,27],[220,69],[138,27],],
'150':[[341,244],[307,244],[373,83],[308,79],],
'151':[[321,374],],
'153':[[101,53],[384,4287],],
'158':[[286,39],[181,719],[335,2902],],
'159':[[355,427],],
'165':[[162,104],],
'167':[[80,132],],
'170':[[164,216],],
'196':[[99,214],[218,222],],
'199':[[49,295],[48,3557],[125,150],[160,553],],
'215':[[191,92],[181,363],[48,167],],
'220':[[163,27],],
'222':[[42,287],],
'225':[[153,762],[368,97],[5,47],[9,146],[29,146],],
'237':[[306,762],[231,67],],
'238':[[329,69],],
'241':[[283,183],],
'244':[[355,1064],[339,164],[339,121],],
'250':[[274,545],],
'266':[[301,61],],
'269':[[164,102],],
'273':[[242,79],],
'274':[[191,144],],
'277':[[116,73],[306,432],[384,6920],],
'285':[[153,104],],
'288':[[164,250],],
'299':[[246,1444],],
'301':[[65,102],[342,193],[342,131],[168,37],[342,160],],
'313':[[184,26],],
'320':[[251,52],],
'338':[[189,541],],
'339':[[176,132],],
'340':[[347,59],],
'344':[[207,97],],
'346':[[134,109],[128,92],[52,121],[258,43],],
'354':[[322,170],[128,168],],
'377':[[335,453],],
'393':[[335,2930],],
'420':[[335,3316],],
'421':[[355,489],],
'422':[[80,28],],
'424':[[84,119],],
'436':[[48,2661],],
'443':[[189,469],],
'445':[[395,46],],
'447':[[335,1854],],
'455':[[234,264],[10,263],[189,314],],
'466':[[10,340],],
'470':[[181,701],],
'476':[[200,232],],
'479':[[48,4634],[48,3134],[48,4249],[48,4698],],
'482':[[93,126],[54,1431],],
'485':[[200,224],],
'488':[[113,44],],
'502':[[54,424],],
'506':[[180,172],[339,181],],
'515':[[121,428],],
'520':[[306,926],],
'528':[[306,95],],
'529':[[218,224],],
'538':[[384,6625],],
'543':[[153,311],],
'545':[[306,35],],
'553':[[355,904],],
'567':[[39,648],],
'568':[[331,300],],
'579':[[381,180],[381,217],],
'585':[[345,46],],
'593':[[48,164],[234,380],[65,136],[229,185],[54,239],],
'596':[[306,1079],],
'603':[[232,87],],
'615':[[341,122],[72,52],[307,122],],
'621':[[48,95],],
'623':[[306,225],[48,805],],
'673':[[313,396],],
'681':[[274,770],],
'696':[[384,1233],],
'705':[[131,167],[314,73],[247,228],],
'709':[[370,51],[61,77],[67,44],],
'712':[[317,53],],
'791':[[274,477],],
'815':[[48,272],],
'819':[[390,167],[21,184],],
'823':[[384,7493],],
'836':[[321,101],],
'837':[[306,1276],[48,3945],],
'840':[[384,4264],[28,52],],
'844':[[215,92],[293,100],[183,92],[361,85],[23,100],[384,6766],],
'865':[[118,195],[244,226],],
'888':[[384,9340],],
'891':[[355,1038],],
'918':[[342,222],[121,265],],
'921':[[101,75],],
'926':[[218,314],],
'935':[[335,2322],],
'938':[[30,202],],
'940':[[329,36],],
'944':[[301,70],],
'976':[[30,423],],
'1005':[[33,38],],
'1019':[[270,216],[36,151],],
'1101':[[320,106],],
'1109':[[80,85],[296,76],],
'1117':[[277,469],[234,388],],
'1120':[[384,2710],],
'1128':[[224,214],[246,1695],],
'1137':[[153,243],],
'1152':[[39,302],],
'1168':[[181,386],],
'1170':[[102,133],],
'1198':[[84,391],],
'1225':[[179,88],[102,68],],
'1226':[[54,1142],],
'1254':[[335,1841],[335,2291],],
'1332':[[335,516],],
'1337':[[355,720],],
'1350':[[91,21],[80,70],],
'1353':[[274,790],],
'1364':[[72,65],[337,74],[42,410],[172,86],[42,255],],
'1370':[[180,167],[355,1212],[358,320],[261,160],],
'1375':[[42,311],],
'1391':[[187,183],[218,333],[112,125],[112,113],],
'1400':[[42,487],],
'1406':[[342,137],],
'1433':[[42,1318],],
'1439':[[48,196],],
'1452':[[58,47],],
'1457':[[42,920],],
'1458':[[42,982],],
'1466':[[99,282],],
'1467':[[99,135],],
'1557':[[257,69],],
'1724':[[212,56],],
'1762':[[48,2703],],
'1778':[[54,1259],],
'1837':[[54,87],],
'1855':[[306,948],],
'1917':[[48,4610],],
'1947':[[235,329],],
'1956':[[54,383],],
'2013':[[355,683],],
'2049':[[69,72],],
'2081':[[54,42],],
'2090':[[54,72],],
'2094':[[164,538],],
'2104':[[54,180],],
'2111':[[246,670],],
'2113':[[355,642],],
'2139':[[218,286],],
'2140':[[259,36],],
'2148':[[371,104],],
'2151':[[54,672],[95,57],[95,239],],
'2160':[[220,111],],
'2212':[[363,332],],
'2226':[[54,1230],],
'2257':[[343,57],],
'2327':[[103,70],[150,70],],
'2353':[[313,89],],
'2383':[[320,36],],
'2388':[[112,128],],
'2523':[[89,91],],
'2589':[[161,65],],
'2626':[[283,229],[153,607],[121,503],],
'2658':[[352,87],[193,87],],
'2673':[[387,98],[311,98],],
'2675':[[102,145],],
'2778':[[163,45],],
'2788':[[266,330],],
'2836':[[335,2386],],
'2862':[[322,112],[128,110],],
'2914':[[145,54],],
'2915':[[335,2208],[335,3055],],
'3023':[[159,29],],
'3042':[[159,104],],
'3133':[[249,202],],
'3149':[[163,62],],
'3368':[[384,191],],
'3583':[[186,64],],
'3605':[[215,59],[183,59],],
'3606':[[184,40],],
'3624':[[186,452],],
'3995':[[384,1174],],
'4145':[[304,314],],
'4187':[[341,135],[307,135],],
'4229':[[339,249],[321,309],],
'4259':[[331,231],],
'4266':[[331,367],],
'4388':[[384,5793],],
'4432':[[344,64],],
'4533':[[384,6900],],
'4654':[[384,346],],
'4678':[[384,514],],
'4783':[[384,1902],],
'4838':[[384,2367],],
'4952':[[384,3913],],
'5057':[[384,6028],],
'5067':[[384,6239],],
},{'2':[[214,194],],
'12':[[321,367],[97,34],[355,1236],[321,266],[214,382],[321,105],[361,97],[363,225],],
'14':[[321,239],[76,68],],
'19':[[160,323],],
'23':[[339,215],[244,211],[313,441],[106,42],[181,162],[118,180],[339,156],[277,412],[339,60],],
'30':[[145,37],[212,39],],
'36':[[384,8051],[384,8027],],
'39':[[307,243],[259,44],[33,46],[163,70],[308,78],[181,49],[341,243],],
'43':[[181,981],[274,741],[277,338],[266,113],[160,260],[277,330],[118,162],[162,99],],
'57':[[59,67],[1,67],],
'63':[[235,248],],
'67':[[95,218],[181,172],],
'73':[[145,52],[212,54],[253,213],],
'82':[[244,144],],
'121':[[84,564],],
'128':[[112,27],],
'149':[[101,76],[101,54],[116,74],[180,173],[70,457],[314,74],[335,3317],[197,307],[363,344],],
'164':[[9,89],[274,777],[52,77],[317,125],[352,69],[162,341],[29,89],[193,69],],
'169':[[74,112],[16,112],[49,62],],
'248':[[308,116],[105,54],[52,202],[42,1310],[340,83],],
'264':[[321,255],],
'274':[[384,3931],[384,3924],],
'285':[[396,163],[84,163],[54,1433],],
'305':[[384,6548],],
'319':[[193,76],[352,76],],
'321':[[214,198],],
'351':[[289,154],[315,154],[224,221],[373,82],[266,97],],
'370':[[74,129],[16,129],],
'449':[[384,9643],],
'707':[[186,437],],
'836':[[293,96],[23,96],],
'861':[[49,42],[287,97],[335,954],[39,81],[36,177],],
'869':[[152,216],[186,459],[235,216],[384,3612],[335,967],],
'926':[[162,198],[277,566],],
'940':[[266,176],],
'1003':[[132,27],],
'1068':[[343,70],],
'1109':[[384,3625],],
'1141':[[266,213],],
'1155':[[173,294],[370,39],[137,249],],
'1170':[[42,461],],
'1462':[[266,200],],
'1507':[[218,227],],
'1955':[[335,1066],],
'2135':[[218,348],],
'2576':[[164,559],[95,348],],
'3552':[[180,200],],
'3689':[[352,50],[193,50],],
'3866':[[246,429],],
'4058':[[274,524],],
'4405':[[384,3102],[384,3479],],
},{'7':[[369,82],[245,56],[171,678],[371,124],[371,3],[334,5],],
'12':[[339,81],[164,441],[321,201],[391,68],],
'13':[[384,8988],],
'15':[[304,159],],
'20':[[252,72],],
'30':[[371,53],[280,49],[280,60],[371,42],],
'33':[[74,103],],
'54':[[144,40],[140,34],],
'73':[[371,112],],
'77':[[274,98],[6,94],[54,495],[164,110],],
'117':[[59,0],],
'123':[[59,16],],
'147':[[179,950],[335,187],],
'149':[[308,80],[341,245],[307,245],],
'150':[[59,68],[1,68],],
'152':[[334,89],],
'153':[[212,69],[145,67],],
'169':[[334,96],],
'694':[[161,120],],
'705':[[58,31],],
'792':[[384,8996],],
'1391':[[321,373],[164,425],[176,275],],
'1398':[[365,225],[317,79],],
'1711':[[54,321],[48,1724],[153,219],[335,193],[179,956],],
},{'3':[[263,53],[338,49],[203,55],],
'12':[[266,257],],
'13':[[229,77],],
'19':[[358,92],],
'20':[[161,489],],
'33':[[353,89],[174,75],],
'37':[[164,356],],
'42':[[135,185],],
'47':[[54,118],],
'48':[[189,483],[285,133],[133,109],],
'49':[[153,688],],
'56':[[277,965],],
'60':[[249,158],],
'62':[[49,92],],
'63':[[314,101],[384,6140],[48,3694],[82,512],],
'82':[[355,1372],[313,457],[227,48],],
'83':[[355,1260],],
'99':[[278,68],[122,139],],
'118':[[334,88],],
'131':[[54,1151],[246,444],[101,64],[274,232],],
'133':[[186,464],],
'137':[[384,6362],],
'139':[[235,486],[179,673],],
'140':[[125,210],],
'143':[[381,427],],
'149':[[336,109],],
'150':[[384,8052],[384,8028],],
'151':[[59,69],[391,69],[161,121],[1,69],],
'153':[[274,563],],
'159':[[366,37],],
'160':[[1,92],],
'163':[[1,97],],
'165':[[30,67],[74,77],[16,77],],
'167':[[42,1069],],
'169':[[101,38],],
'171':[[181,605],],
'196':[[335,3429],[9,99],[54,1456],[54,1144],[29,99],],
'199':[[12,374],],
'208':[[274,53],[54,99],],
'215':[[335,1630],[335,1491],[246,759],[335,1769],],
'217':[[307,185],[341,185],],
'220':[[176,248],],
'221':[[148,67],],
'224':[[49,95],],
'225':[[160,467],[5,76],],
'233':[[181,242],],
'237':[[246,1563],],
'241':[[384,2716],[396,86],[306,368],],
'247':[[61,28],[61,40],[67,26],],
'249':[[348,21],],
'252':[[274,212],],
'262':[[277,973],],
'269':[[336,70],],
'277':[[246,1173],],
'279':[[277,969],[227,207],],
'299':[[274,689],],
'302':[[384,2046],[384,5849],],
'316':[[112,103],],
'321':[[358,104],],
'347':[[352,48],[193,48],],
'348':[[9,79],[29,79],],
'351':[[199,46],[363,653],[125,70],[102,103],],
'357':[[244,101],],
'366':[[12,565],],
'369':[[335,1025],],
'370':[[146,146],],
'408':[[10,305],[89,260],[269,126],[284,127],[178,179],[247,161],[20,117],[283,98],[234,306],[173,187],[209,157],[86,159],[187,111],[394,100],[135,102],[210,102],[189,356],[137,142],[36,98],[100,97],[57,166],[146,93],[160,451],[285,90],[229,120],[213,314],[148,109],[332,100],[270,163],[34,91],[180,114],],
'413':[[213,111],[232,132],[234,93],[189,100],[10,94],[316,119],[89,77],[229,63],[288,45],[178,63],[165,43],],
'415':[[229,163],],
'421':[[355,1099],],
'422':[[162,137],],
'426':[[191,196],],
'447':[[191,232],[95,389],[80,44],[296,48],],
'452':[[209,54],[181,115],],
'454':[[181,469],],
'462':[[285,115],[135,127],[49,216],[137,167],[213,337],[178,204],[247,186],[234,331],[209,182],[100,122],[180,139],[10,330],[173,212],[20,142],[284,152],[146,118],[34,116],[86,184],[269,151],[210,127],[187,136],[148,134],[394,125],[189,381],[332,125],[229,145],[283,123],[57,191],[36,123],[270,188],[246,1777],],
'465':[[313,202],],
'477':[[395,145],[395,53],],
'501':[[200,166],[48,315],[12,538],],
'502':[[246,56],],
'503':[[12,37],],
'515':[[266,305],],
'532':[[296,164],[80,145],],
'536':[[39,576],],
'547':[[25,83],],
'553':[[355,938],],
'563':[[12,248],[121,104],],
'568':[[121,151],[12,261],[331,224],],
'603':[[60,94],],
'652':[[200,222],],
'668':[[313,429],[170,84],],
'681':[[30,221],],
'682':[[274,216],],
'696':[[274,257],],
'698':[[301,35],],
'699':[[89,310],],
'700':[[210,154],],
'702':[[16,75],[74,75],],
'734':[[125,77],],
'780':[[355,1245],],
'788':[[142,162],],
'791':[[274,473],],
'792':[[355,164],],
'800':[[52,143],],
'830':[[351,59],],
'836':[[261,165],[358,325],],
'846':[[249,221],],
'855':[[178,317],],
'856':[[320,80],],
'857':[[217,351],],
'867':[[26,30],[180,71],],
'869':[[48,1542],[242,59],[161,397],],
'876':[[27,42],],
'884':[[321,179],[68,103],[161,579],],
'891':[[358,81],],
'905':[[384,2007],],
'915':[[246,173],[246,156],],
'926':[[384,6873],[384,5861],[253,51],],
'928':[[246,277],],
'931':[[384,814],],
'935':[[313,232],[344,303],],
'940':[[95,114],[30,215],[231,47],],
'949':[[355,577],],
'955':[[246,689],],
'960':[[197,261],],
'966':[[30,382],],
'1005':[[160,309],],
'1006':[[73,67],[368,51],],
'1007':[[265,33],[160,222],],
'1016':[[246,580],],
'1045':[[283,238],],
'1048':[[229,66],],
'1058':[[276,77],[44,120],],
'1075':[[284,224],],
'1085':[[269,184],],
'1101':[[379,170],[246,1379],],
'1109':[[355,563],[395,115],[384,6000],],
'1123':[[246,1296],[355,1157],],
'1124':[[331,81],[121,116],],
'1125':[[39,171],],
'1135':[[42,1240],],
'1145':[[39,274],],
'1146':[[342,204],],
'1147':[[214,166],],
'1148':[[48,294],],
'1149':[[39,297],],
'1162':[[39,389],],
'1164':[[39,392],],
'1167':[[39,427],],
'1188':[[39,554],],
'1225':[[162,83],],
'1238':[[385,37],],
'1252':[[160,70],],
'1260':[[42,1155],],
'1267':[[355,1362],[42,160],[42,492],],
'1288':[[42,1004],],
'1305':[[384,6841],],
'1309':[[41,193],[242,37],[355,351],[197,254],[384,5556],[344,268],],
'1332':[[344,322],],
'1351':[[142,85],],
'1361':[[253,204],],
'1385':[[159,142],],
'1405':[[49,350],],
'1424':[[197,287],[70,437],],
'1447':[[176,116],],
'1461':[[246,560],],
'1462':[[217,358],[277,944],[306,321],],
'1469':[[68,91],],
'1472':[[363,93],[363,370],[42,1122],[274,197],],
'1503':[[214,213],],
'1504':[[384,8181],],
'1509':[[46,71],[336,155],[226,71],[344,213],],
'1560':[[246,1542],],
'1593':[[84,130],],
'1759':[[48,2136],],
'1760':[[48,2138],],
'1811':[[214,136],],
'1843':[[379,153],],
'1851':[[341,264],[214,377],[307,264],],
'1878':[[235,195],],
'1956':[[344,272],],
'1960':[[274,459],[274,132],],
'1963':[[367,132],[250,129],],
'1993':[[246,383],],
'1995':[[49,97],],
'2038':[[49,446],],
'2046':[[49,505],],
'2051':[[339,290],],
'2077':[[251,159],],
'2095':[[246,24],],
'2140':[[272,48],],
'2154':[[95,408],],
'2160':[[274,315],],
'2183':[[384,8252],],
'2220':[[379,195],],
'2222':[[384,4720],],
'2229':[[199,72],[363,679],],
'2313':[[180,180],],
'2357':[[384,4610],],
'2383':[[266,178],[313,444],[313,103],],
'2388':[[225,43],[384,2702],],
'2394':[[76,73],],
'2402':[[309,32],],
'2412':[[384,5551],],
'2448':[[342,209],],
'2449':[[379,144],],
'2456':[[83,88],],
'2460':[[235,435],],
'2464':[[84,115],],
'2469':[[84,202],],
'2509':[[286,35],],
'2527':[[355,568],],
'2604':[[331,364],],
'2615':[[98,31],],
'2651':[[100,155],],
'2658':[[176,156],],
'2675':[[381,94],[381,385],],
'2692':[[103,121],[150,121],],
'2700':[[105,60],],
'2716':[[112,141],],
'2752':[[121,118],],
'2777':[[121,561],],
'2816':[[384,2186],],
'2828':[[125,165],[159,57],],
'2837':[[125,202],],
'2878':[[133,114],],
'2912':[[355,1105],],
'2922':[[146,168],],
'2978':[[232,98],[342,277],[342,290],],
'3024':[[315,146],[289,146],],
'3030':[[159,76],],
'3061':[[160,67],],
'3069':[[160,211],],
'3172':[[365,159],],
'3198':[[384,3866],],
'3200':[[277,908],],
'3202':[[277,635],],
'3223':[[384,2343],],
'3226':[[243,100],],
'3227':[[174,104],],
'3527':[[344,274],],
'3596':[[181,897],],
'3610':[[186,132],],
'3648':[[246,756],],
'3764':[[217,447],],
'3770':[[335,1015],],
'3781':[[224,139],],
'3788':[[277,852],],
'3796':[[335,2953],],
'3898':[[342,299],],
'3904':[[246,1040],],
'3908':[[246,1070],],
'3932':[[277,638],],
'3942':[[246,1623],],
'3953':[[246,1753],],
'4052':[[335,3462],[335,3446],],
'4082':[[277,749],],
'4117':[[301,21],],
'4205':[[313,354],],
'4234':[[331,396],],
'4388':[[384,8275],],
'4402':[[338,84],],
'4480':[[355,540],],
'4495':[[355,1406],],
'4500':[[357,19],],
'4574':[[379,137],],
'4576':[[384,4698],],
'4733':[[384,1051],],
'4825':[[384,2068],],
'4896':[[384,3095],],
'5051':[[384,5781],],
},{'20':[[252,89],],
'39':[[331,515],],
'65':[[244,248],[118,217],],
'67':[[277,673],],
'118':[[1,71],[59,71],],
'140':[[162,325],],
'144':[[181,1009],],
'149':[[184,27],],
'196':[[112,31],[112,138],],
'199':[[153,506],],
'220':[[160,208],],
'225':[[194,47],[145,59],[180,197],[212,61],[317,95],],
'227':[[315,57],[289,57],],
'231':[[339,262],[321,322],],
'239':[[84,193],],
'241':[[253,220],[48,1079],],
'307':[[306,652],[146,165],],
'349':[[384,1852],],
'359':[[200,230],[274,562],[385,53],],
'382':[[373,32],],
'428':[[231,45],],
'430':[[355,713],],
'436':[[42,305],],
'439':[[384,6215],],
'447':[[181,399],],
'491':[[12,437],],
'530':[[145,66],[212,68],],
'551':[[52,124],],
'700':[[20,166],],
'712':[[164,423],],
'785':[[285,137],],
'801':[[246,1880],],
'1063':[[187,181],],
'1101':[[331,85],[246,28],],
'1141':[[235,378],],
'1192':[[121,345],],
'1321':[[384,6786],[41,361],],
'1503':[[384,4286],],
'1667':[[173,324],],
'1839':[[173,288],[137,243],],
'1857':[[84,246],],
'2020':[[101,52],],
'2445':[[214,191],],
'2509':[[160,563],],
'3091':[[176,273],],
},{'3':[[304,357],[49,274],[394,164],[220,51],[320,137],[181,593],[49,450],[160,225],],
'15':[[159,47],[243,205],[313,359],[191,45],[72,42],[396,45],[159,86],[253,55],],
'26':[[381,541],[363,434],[181,852],[159,53],[181,887],[152,214],[384,343],[125,161],],
'33':[[153,500],[121,589],[363,303],],
'38':[[244,134],[164,165],],
'54':[[112,115],],
'63':[[160,342],],
'65':[[283,200],],
'69':[[39,574],],
'73':[[253,152],[340,92],[308,125],],
'77':[[249,265],[244,158],[289,55],[159,138],[95,321],[315,55],[335,526],[214,265],],
'128':[[265,22],],
'140':[[39,320],[390,135],],
'143':[[273,36],[48,802],[306,222],],
'147':[[44,75],[287,62],[181,876],[27,27],[198,79],[364,40],],
'152':[[296,165],[250,130],[331,82],[367,133],],
'153':[[214,192],[59,72],[317,96],[1,72],],
'159':[[280,51],[380,38],[371,44],],
'195':[[280,62],[371,55],],
'203':[[74,94],[283,162],[16,94],],
'215':[[384,6836],],
'220':[[253,168],],
'244':[[20,70],],
'288':[[160,499],],
'289':[[74,73],[16,73],],
'290':[[249,224],[188,112],],
'346':[[277,542],[164,504],[142,147],],
'363':[[384,2949],],
'375':[[321,165],[161,565],],
'449':[[214,175],[176,144],[160,98],],
'468':[[355,601],],
'502':[[277,386],[355,629],],
'506':[[39,655],],
'562':[[39,340],[70,55],[12,246],[384,516],[121,102],],
'565':[[121,109],],
'593':[[274,397],],
'596':[[125,64],[12,399],],
'788':[[84,442],],
'857':[[193,64],[352,64],],
'860':[[214,164],],
'861':[[49,313],],
'913':[[384,3910],],
'926':[[320,92],],
'969':[[378,33],],
'1032':[[37,68],],
'1198':[[379,212],],
'1325':[[214,196],[125,198],],
'1360':[[320,67],],
'2002':[[273,21],],
'2017':[[113,19],],
'2319':[[141,81],[143,60],],
'2328':[[283,140],],
'2371':[[225,45],],
'2396':[[384,7503],],
'2501':[[191,259],],
'2626':[[340,79],[266,290],[266,51],[308,112],],
'2655':[[224,154],],
'2675':[[381,503],],
'3075':[[160,408],],
'4065':[[277,161],],
'4401':[[338,82],],
'4497':[[355,1449],],
'5253':[[396,178],],
},{'3':[[193,151],[301,79],[246,1524],[352,151],[277,733],],
'12':[[360,42],],
'15':[[265,38],[95,204],[307,196],[384,2229],[341,196],[52,338],],
'23':[[39,401],[379,215],[160,202],[160,581],[160,530],[161,399],],
'26':[[29,42],[181,286],[9,42],[384,1374],],
'31':[[246,263],],
'33':[[7,80],[381,28],[344,351],[344,14],[171,271],[243,6],[381,643],[152,222],],
'34':[[186,303],[384,3648],[384,4901],[161,402],],
'38':[[153,957],[153,1162],[153,1384],[54,534],[335,584],[335,647],[54,1484],[335,896],[54,480],],
'59':[[34,97],[173,193],[178,185],[180,120],[36,104],[394,106],[102,172],[20,123],[187,117],[189,362],[135,108],[137,148],[209,163],[210,108],[213,320],[146,99],[10,311],[224,152],[229,126],[234,312],[332,106],[148,115],[89,266],[246,26],[86,165],[285,96],[247,167],[57,172],[269,132],[270,169],[100,103],[283,104],[284,133],],
'63':[[214,317],[285,148],[25,65],[384,9542],[355,739],[20,177],],
'77':[[384,6932],[99,231],[331,339],],
'99':[[54,1479],],
'130':[[190,44],[356,36],[384,2396],],
'150':[[384,6549],],
'152':[[331,365],[121,105],[146,147],[12,249],],
'153':[[385,54],],
'154':[[214,266],[331,83],[317,97],[59,73],[384,517],[1,73],[381,504],],
'295':[[52,293],],
'420':[[101,62],],
'543':[[181,314],[384,6897],],
'596':[[355,156],],
'647':[[165,79],],
'925':[[125,122],],
'961':[[242,199],],
'978':[[342,139],],
'2010':[[242,63],],
'2477':[[394,151],],
'2626':[[180,182],],
'3654':[[336,59],],
'4393':[[336,53],],
'5225':[[385,68],],
},{'12':[[331,448],],
'43':[[59,78],[181,391],[162,370],[1,78],],
'63':[[162,346],],
'67':[[188,158],],
'598':[[75,67],],
'942':[[313,419],],
},{'7':[[82,484],],
'12':[[49,233],],
'62':[[59,81],[1,107],[1,81],],
'128':[[74,101],[16,101],],
'2008':[[49,267],],
},{'2':[[321,279],[321,78],[277,848],[160,414],[186,390],],
'47':[[164,171],],
'48':[[207,90],],
'63':[[169,66],[114,65],[84,439],],
'67':[[355,1180],[152,204],],
'69':[[353,105],],
'99':[[54,802],],
'121':[[1,86],[73,56],],
'128':[[187,150],[233,41],],
'137':[[335,1186],],
'149':[[220,112],[42,312],],
'151':[[252,73],[144,41],[140,35],],
'152':[[73,68],],
'199':[[336,63],[174,228],[249,209],[189,550],],
'217':[[54,778],],
'237':[[322,163],[128,161],],
'250':[[191,132],[116,123],],
'266':[[171,267],[7,76],[381,639],[344,347],[344,10],[243,2],[381,24],],
'271':[[217,318],[277,492],],
'274':[[304,322],],
'277':[[48,3047],[355,598],[322,195],[178,259],[128,193],],
'281':[[181,718],[181,792],],
'321':[[274,47],[214,161],],
'322':[[353,114],],
'367':[[128,171],[322,173],],
'377':[[335,694],],
'383':[[89,437],],
'402':[[181,108],],
'445':[[191,187],[89,291],],
'447':[[363,702],],
'489':[[12,63],],
'580':[[12,460],],
'621':[[39,122],[39,105],],
'648':[[303,195],],
'723':[[82,479],],
'773':[[194,64],],
'791':[[277,512],[217,493],],
'817':[[384,6014],[384,3617],[384,8185],],
'869':[[390,132],],
'878':[[384,9108],[384,8999],],
'980':[[30,441],],
'1080':[[260,92],],
'1101':[[335,1029],[355,899],],
'1156':[[39,335],],
'1304':[[174,55],],
'1305':[[335,2305],[335,2970],],
'1342':[[274,308],],
'1392':[[355,976],],
'1508':[[46,62],[226,62],],
'1538':[[176,57],],
'2135':[[218,317],],
'2323':[[335,2955],],
'2461':[[363,346],],
'2471':[[84,292],],
'2529':[[89,312],],
'2654':[[283,213],],
'2657':[[286,38],],
'2864':[[322,150],[128,148],],
'3181':[[170,254],],
'3204':[[336,146],],
'3760':[[217,484],[217,327],],
'4365':[[335,2901],],
},{'12':[[321,99],[384,1580],],
'25':[[84,287],],
'27':[[105,38],],
'39':[[1,88],],
'57':[[355,426],],
'137':[[179,939],],
'151':[[280,50],[371,43],],
'164':[[339,123],],
'203':[[366,36],],
'215':[[48,333],],
'277':[[384,1625],],
'469':[[304,304],[304,364],[304,384],[304,212],[304,340],[304,327],[304,205],[304,295],[304,334],[304,311],],
'817':[[384,2144],],
'1275':[[40,35],[380,37],],
'4783':[[384,5303],],
},{'2':[[181,463],[1,91],],
'3':[[287,84],[304,367],],
'7':[[89,166],],
'12':[[181,556],],
'15':[[44,101],],
'23':[[44,45],[287,39],[76,66],[89,212],[304,336],[304,345],[304,351],[181,956],[76,52],[181,532],[287,90],[180,176],[181,292],[181,36],[181,228],],
'30':[[304,376],],
'33':[[321,30],[321,436],[176,283],[176,20],[7,129],[171,320],[102,6],[247,244],],
'77':[[181,966],],
'89':[[323,22],],
'128':[[82,543],],
'340':[[286,23],],
'615':[[181,1017],],
'791':[[77,117],[270,204],[131,132],[247,202],[332,141],[209,198],],
'1514':[[270,212],[247,210],[209,206],[77,125],[131,140],[332,149],],
'1991':[[180,188],[180,159],],
'3564':[[181,277],],
'3599':[[181,938],],
},{'47':[[384,634],],
'152':[[1,93],],
},{'2':[[49,73],[354,34],],
'3':[[49,90],],
'14':[[377,13],],
'15':[[180,212],[164,135],[194,41],[307,29],[227,136],[341,29],[176,130],],
'23':[[187,92],[189,107],[173,168],[29,77],[189,337],[34,72],[189,571],[178,160],[394,81],[20,98],[197,326],[10,286],[152,122],[10,101],[180,95],[148,90],[209,138],[49,208],[146,74],[210,83],[137,123],[9,77],[332,81],[135,83],[213,118],[36,79],[213,295],[285,71],[213,431],[284,108],[283,79],[178,70],[229,101],[270,144],[102,99],[57,147],[269,107],[100,78],[93,138],[234,100],[89,241],[89,84],[70,476],[234,287],[86,140],[247,142],[246,433],],
'39':[[218,367],],
'47':[[5,83],[73,87],[22,6],[389,54],[259,54],[66,34],[265,42],[62,139],[265,48],[384,5881],[101,81],[176,55],[26,51],[152,227],[369,148],[241,16],[33,56],[171,744],[122,145],[368,114],[305,88],[160,5],[319,68],[362,73],[359,151],[354,1],[163,80],[160,704],[160,700],[206,103],[151,54],[194,116],[45,38],[198,94],],
'55':[[152,80],[54,583],[152,177],[54,1140],[206,90],[152,100],[152,94],],
'59':[[176,205],[49,340],],
'89':[[152,70],[152,126],[49,168],[49,197],[49,288],[160,437],[160,24],[213,104],[213,344],[189,389],[284,168],[218,51],[274,504],[269,167],[102,53],[234,82],[359,39],[189,85],[89,64],[178,56],[181,426],[73,27],[10,83],[84,146],[181,99],],
'130':[[1,95],],
'147':[[54,1462],],
'203':[[213,440],[189,597],],
'215':[[54,591],],
'217':[[54,594],],
'244':[[181,498],],
'333':[[54,589],],
'472':[[218,246],],
'506':[[339,50],],
'596':[[49,319],],
'773':[[194,50],],
'791':[[165,86],[173,336],[190,82],[164,228],[166,30],[171,834],[393,32],[22,18],[24,33],[203,86],[379,226],[378,40],[148,169],[207,118],[146,175],[209,275],[137,277],[210,186],[135,227],[133,132],[131,173],[129,26],[119,28],[20,186],[113,74],[187,205],[110,47],[109,35],[228,49],[107,28],[229,199],[232,138],[100,209],[369,238],[86,264],[177,61],[82,566],[79,60],[77,150],[247,268],[248,8],[255,30],[69,97],[260,105],[263,104],[64,34],[60,108],[57,314],[55,37],[269,228],[181,1042],[270,255],[272,55],[273,54],[27,69],[276,84],[282,36],[34,139],[283,255],[364,54],[36,197],[284,231],[181,1037],[285,157],[286,47],[287,107],[180,231],[181,7],[312,35],[312,67],[316,125],[38,3],[323,29],[325,32],[53,149],[332,193],[335,63],[43,28],[356,62],[44,151],[338,96],[238,33],[50,116],[343,109],[347,67],[348,31],[181,23],[394,207],],
'866':[[26,22],],
'961':[[160,27],],
'1128':[[335,900],],
'1405':[[89,389],],
'1426':[[54,1129],],
'1591':[[54,596],],
'1741':[[54,1076],[54,301],],
'1864':[[384,4189],],
'1991':[[153,774],],
'2010':[[176,267],],
'2132':[[54,616],],
'2384':[[153,380],],
'2573':[[206,36],],
'2905':[[153,1315],],
'4045':[[379,183],],
'4287':[[335,448],],
'4291':[[335,798],],
},{'15':[[274,812],[112,70],],
'26':[[341,54],[307,54],],
'50':[[99,244],],
'102':[[29,164],[9,164],],
'107':[[42,1073],],
'140':[[99,79],],
'154':[[384,2950],],
'162':[[1,96],],
'197':[[352,119],[193,119],],
'321':[[384,4244],[194,80],],
'340':[[29,44],[9,44],],
'343':[[99,158],],
'365':[[9,170],[29,170],],
'791':[[194,75],],
'1016':[[307,68],[341,68],],
'1315':[[341,99],[307,124],[307,99],[341,124],],
'1385':[[42,1048],[99,203],],
'1416':[[99,129],],
'1466':[[42,1052],],
'2637':[[99,175],],
'2645':[[99,275],[99,264],],
'3002':[[274,557],],
'4888':[[384,2978],],
},{'2':[[160,682],[179,676],[381,111],[8,24],[193,68],[251,182],[358,336],[352,68],[321,342],[261,176],[277,775],[52,222],],
'12':[[111,51],[20,76],],
'43':[[289,148],[320,52],[253,37],[359,134],[246,1657],[39,623],[246,974],[246,957],[315,148],[246,376],[246,353],[246,337],[244,186],[244,170],[244,81],[118,128],[361,38],[181,706],[246,631],[170,200],[118,72],[118,144],[121,30],[396,156],[131,159],[72,49],[121,364],[121,133],[121,50],[102,161],],
'47':[[164,370],[317,27],[164,296],],
'48':[[384,9756],],
'49':[[1,99],],
'52':[[235,390],],
'60':[[249,204],],
'61':[[160,196],[277,655],],
'63':[[317,124],[251,169],[12,104],[161,128],[172,119],[306,437],],
'67':[[57,85],[246,105],[172,134],[97,24],[317,70],[263,65],[118,37],[373,49],[246,1305],[42,713],],
'82':[[224,115],[335,543],],
'121':[[368,99],[207,99],],
'128':[[305,54],],
'137':[[246,294],],
'139':[[218,204],],
'145':[[45,30],[163,41],[33,34],[259,32],],
'149':[[181,387],[387,99],[384,1903],[339,145],[321,310],[321,375],[84,251],[311,99],[339,122],[337,107],[339,165],[339,250],[215,60],[181,364],[183,60],],
'151':[[307,246],[341,246],[308,81],],
'155':[[160,203],],
'165':[[52,212],[178,319],[52,76],],
'167':[[384,6323],[277,826],[99,183],[1,105],[334,75],],
'171':[[164,586],[164,557],],
'176':[[141,70],[365,126],[143,49],],
'184':[[127,64],[127,56],[298,64],[298,56],[365,143],],
'196':[[181,516],],
'199':[[153,899],[315,61],[266,122],[261,210],[363,727],[181,522],[381,282],[274,622],[274,747],[322,180],[253,109],[352,121],[70,327],[160,127],[193,121],[128,178],[289,61],[178,267],[160,271],[308,134],[84,97],[161,444],[341,132],[340,101],[50,96],[391,53],[96,189],[358,380],[242,55],[235,368],[307,132],],
'202':[[181,342],[162,323],[162,340],[384,6437],[381,410],[160,626],[249,294],[246,816],[368,53],],
'208':[[334,80],],
'220':[[305,44],[44,64],[160,329],[260,54],[198,60],[359,88],],
'221':[[368,107],],
'225':[[368,74],],
'231':[[339,152],],
'250':[[244,153],[84,258],[50,83],],
'251':[[6,76],[191,242],[121,234],],
'259':[[317,42],],
'264':[[162,242],[197,546],[197,453],[277,538],],
'267':[[304,285],],
'271':[[266,231],[52,117],],
'277':[[213,366],[363,412],[384,6738],],
'281':[[244,245],[86,70],[112,88],[118,214],[179,62],[57,72],[131,80],[137,66],[381,606],[384,6869],[18,35],[173,79],],
'289':[[37,84],],
'290':[[102,114],],
'319':[[29,88],[9,88],],
'354':[[287,73],],
'355':[[193,113],[352,113],[274,610],],
'369':[[246,419],[29,177],[335,977],[9,177],],
'370':[[186,492],],
'396':[[189,209],[10,158],[89,144],[213,167],[234,159],],
'447':[[355,1428],],
'462':[[181,441],],
'470':[[181,394],],
'502':[[235,402],],
'550':[[331,274],],
'554':[[12,285],],
'588':[[134,41],[128,43],],
'598':[[335,2509],[197,441],[48,4293],[153,561],],
'609':[[381,124],],
'621':[[39,194],],
'648':[[384,7942],],
'699':[[135,198],],
'711':[[235,407],],
'712':[[317,117],],
'776':[[283,156],],
'800':[[235,447],],
'841':[[337,99],],
'856':[[25,35],],
'887':[[283,232],],
'888':[[178,290],],
'897':[[384,6728],],
'918':[[181,317],],
'926':[[384,2574],],
'940':[[162,92],],
'960':[[363,665],[363,645],[363,690],[199,58],[199,38],],
'969':[[135,183],],
'1022':[[36,184],],
'1031':[[37,65],],
'1061':[[181,621],],
'1068':[[181,165],[181,203],],
'1101':[[331,194],],
'1109':[[277,471],],
'1177':[[384,1993],],
'1211':[[384,1147],],
'1241':[[48,3664],],
'1314':[[242,150],],
'1327':[[313,366],],
'1342':[[274,241],[274,276],[274,437],[274,336],],
'1353':[[274,776],],
'1371':[[179,1182],],
'1419':[[42,753],],
'1433':[[384,2808],],
'1462':[[384,3484],],
'1474':[[179,946],[384,6745],],
'1484':[[246,508],],
'1490':[[329,59],],
'1509':[[274,201],],
'1632':[[306,195],[48,775],],
'1634':[[306,206],[48,786],],
'1832':[[134,117],[302,119],],
'1993':[[246,890],],
'2053':[[53,75],],
'2057':[[51,26],],
'2318':[[143,63],[141,84],],
'2385':[[384,4712],],
'2407':[[170,268],],
'2415':[[363,624],],
'2443':[[86,242],],
'2566':[[359,79],],
'2620':[[99,272],],
'2721':[[336,124],[394,186],],
'2833':[[125,186],],
'3035':[[159,88],],
'3184':[[170,161],],
'3257':[[207,104],],
'3537':[[381,319],],
'4186':[[341,127],[307,127],],
'4337':[[337,102],],
'4403':[[338,88],],
'4747':[[384,1163],],
'4815':[[384,1950],],
},{'3':[[209,80],[269,55],[284,56],],
'7':[[284,58],[269,57],[209,82],],
'12':[[211,23],[10,128],[213,137],[197,226],[189,179],[234,129],[235,204],[274,68],[277,322],[277,370],[197,418],[127,48],[297,32],[298,48],[149,32],[235,56],[89,180],[89,114],[70,650],[355,34],[355,118],[70,389],[363,74],],
'17':[[266,321],[162,103],],
'19':[[251,37],[336,112],[30,437],],
'23':[[30,414],[162,257],[70,771],[30,377],[39,130],[373,74],[320,32],[162,78],[181,984],[30,314],[253,131],[373,91],[367,106],[246,1375],[384,9348],[132,34],[197,613],[162,247],],
'26':[[99,298],[200,313],[164,327],[99,104],[13,23],[373,62],[257,195],[346,24],[244,70],[115,23],[158,22],[21,138],[236,23],[112,80],[99,219],[30,394],[384,7509],[162,157],[52,75],[164,195],],
'34':[[70,61],[334,72],[1,102],],
'36':[[373,100],],
'38':[[277,415],],
'47':[[67,63],[66,31],[300,55],[61,92],[25,96],[354,7],[388,90],[164,668],[171,695],[308,100],[17,38],[365,117],[365,233],[155,52],[145,84],[143,69],[141,90],[369,99],[370,66],[317,133],[97,44],[6,98],[245,16],[241,1],[3,41],[164,5],[2,35],[164,665],],
'59':[[141,24],[143,22],],
'63':[[84,399],[188,142],],
'67':[[251,190],],
'77':[[28,47],[162,320],[48,3519],[363,682],[42,585],[186,339],[162,141],[224,149],[54,1270],[42,649],[209,252],[153,532],[153,1247],[199,75],[355,657],],
'81':[[249,317],[171,1257],[153,26],[277,595],[277,277],[54,1526],[277,214],[54,15],[185,60],[197,6],[355,1472],[153,1437],],
'140':[[181,1000],],
'144':[[365,189],],
'147':[[253,78],[253,95],],
'149':[[164,251],[54,1231],[162,240],],
'152':[[16,76],[178,318],[74,76],],
'173':[[284,21],[209,22],[82,105],[253,22],[82,84],[269,20],],
'175':[[269,211],[284,191],],
'177':[[143,41],[251,341],[300,45],[384,6302],[363,243],[164,158],[25,49],[141,51],[266,184],],
'186':[[197,49],[70,46],],
'203':[[99,269],],
'224':[[266,211],],
'230':[[52,241],[336,68],[384,9412],],
'238':[[30,95],],
'247':[[241,27],],
'252':[[54,1110],[384,546],],
'255':[[186,91],],
'260':[[384,2594],],
'270':[[42,1023],[42,326],],
'271':[[171,235],[7,44],[266,32],[52,48],[384,9309],[42,924],[52,7],[162,18],[162,394],[266,399],[162,384],],
'272':[[162,3],[7,50],[52,211],[68,118],[171,241],[52,355],[68,12],[235,430],[320,101],[52,28],],
'279':[[197,47],[70,44],],
'284':[[42,1031],],
'286':[[21,169],[390,161],[171,302],[290,33],[290,681],[21,178],[7,111],[390,152],[30,208],[30,180],[30,7],[335,3125],[335,2610],[335,2429],[321,425],[321,17],[30,260],],
'288':[[162,349],[25,57],],
'301':[[186,401],[186,353],],
'315':[[52,257],],
'343':[[218,184],[95,156],],
'345':[[186,356],],
'346':[[197,223],[284,171],[70,647],[197,415],[355,116],[70,386],[363,72],[235,54],],
'357':[[172,45],[172,115],[384,1661],],
'383':[[189,556],[213,416],],
'427':[[246,275],],
'431':[[218,193],],
'433':[[164,547],],
'443':[[162,208],[10,227],[234,228],[189,278],],
'445':[[54,749],[336,89],[84,455],[95,325],],
'447':[[253,62],[30,296],],
'449':[[209,118],],
'451':[[335,3120],],
'454':[[164,239],[365,139],[164,210],],
'460':[[384,6646],],
'470':[[209,66],],
'493':[[251,226],],
'500':[[384,8823],],
'502':[[277,326],],
'533':[[39,139],],
'546':[[214,58],[277,320],[277,368],],
'552':[[172,51],[244,146],],
'615':[[28,36],[209,244],[269,170],[186,162],[189,500],],
'621':[[306,739],],
'653':[[266,297],],
'655':[[162,222],],
'813':[[384,9416],[340,152],[308,185],],
'816':[[384,729],[30,66],[30,476],],
'856':[[54,400],[70,512],[70,492],[197,344],[340,98],[308,131],[317,31],[164,26],],
'857':[[164,361],],
'900':[[30,70],[384,3872],[384,1631],],
'910':[[384,2498],],
'932':[[30,171],],
'948':[[30,250],],
'956':[[384,3890],],
'964':[[30,368],],
'984':[[30,457],],
'1004':[[82,366],[82,397],],
'1101':[[306,341],],
'1104':[[162,120],[384,8736],],
'1119':[[253,66],],
'1123':[[355,817],],
'1141':[[70,336],],
'1194':[[384,7380],],
'1245':[[42,932],],
'1359':[[181,483],],
'1404':[[99,166],],
'1421':[[335,3768],],
'1425':[[274,66],],
'1452':[[164,220],],
'1507':[[235,202],[355,32],[227,121],[211,21],],
'1627':[[384,316],],
'1837':[[52,119],],
'1843':[[197,533],[251,311],[251,276],[251,200],[118,191],[266,360],[251,178],[384,6392],[274,842],[235,176],[52,270],[251,29],[251,24],[384,6402],[384,6293],[251,92],[227,329],[244,104],[251,3],[84,508],[172,79],[235,183],[172,89],[172,58],[244,222],[384,3896],[384,902],[384,1242],[384,1274],[384,1288],[384,1339],[384,1355],[172,36],[244,126],[172,131],[235,376],[171,202],[244,119],[274,18],[52,177],[384,3877],[52,107],],
'2066':[[52,164],],
'2075':[[172,145],],
'2104':[[186,495],[384,768],],
'2132':[[54,412],],
'2229':[[384,5180],[335,2034],],
'2267':[[335,3414],],
'2494':[[384,3834],],
'2624':[[99,90],],
'2636':[[99,173],],
'2646':[[99,279],],
'2655':[[164,202],],
'2675':[[384,9829],[384,1705],],
'2717':[[112,56],],
'3980':[[251,66],],
'4452':[[384,215],],
'4806':[[384,5408],[384,7244],],
'4811':[[384,1912],],
},{'165':[[1,103],[54,16],[54,1527],[153,27],[153,1438],[171,1258],[185,61],[197,7],[214,59],[227,122],[249,318],[277,215],[277,278],[277,327],[277,416],[277,596],[334,73],[355,1473],],
},{'2':[[42,508],[7,54],[384,8419],[344,109],[68,122],[162,7],[277,825],[384,6697],[68,16],[171,245],[336,75],[243,227],[52,359],[52,32],[344,44],[355,362],],
'15':[[54,389],[335,1256],],
'23':[[277,621],[381,544],[246,116],[277,545],[246,810],[220,44],[277,627],[355,1250],[246,833],[251,41],[277,119],[243,208],],
'26':[[179,1064],[296,112],[188,234],[41,315],[41,310],[68,63],[15,38],],
'33':[[384,6715],],
'34':[[179,143],[384,9909],[179,1252],[290,197],[42,1068],[329,55],[329,42],[243,217],[199,87],[243,188],],
'41':[[99,182],],
'59':[[384,7281],],
'81':[[226,46],[384,3112],[277,914],[277,378],[277,381],[46,46],[355,68],[83,113],[336,41],],
'155':[[344,352],[243,7],[381,29],[381,644],[344,15],[171,272],[242,64],[7,81],],
'166':[[227,123],[334,74],[1,104],],
'224':[[12,371],],
'255':[[246,188],],
'274':[[381,16],[68,6],[7,63],[381,633],[41,358],[162,31],[162,405],[171,254],[355,378],[184,24],[41,333],],
'275':[[381,408],[355,741],[355,1439],[384,5120],[363,381],],
'277':[[355,73],],
'279':[[224,193],[344,31],[171,291],[355,824],[344,341],[30,497],[344,366],[355,697],[7,100],[290,10],[30,21],[355,528],[355,396],],
'280':[[246,313],],
'281':[[48,281],],
'370':[[361,73],],
'420':[[42,390],],
'546':[[355,62],],
'674':[[384,6322],[191,158],[266,267],],
'681':[[335,1993],],
'845':[[191,215],],
'903':[[355,128],],
'1138':[[381,440],],
'1151':[[296,134],[80,100],],
'1208':[[246,367],],
'1308':[[242,91],],
'1315':[[242,194],],
'1409':[[42,1043],],
'1765':[[384,8791],],
'2010':[[242,182],],
'2314':[[68,79],[191,151],[363,744],],
'2410':[[80,131],],
'2976':[[246,1644],],
'2977':[[246,151],],
'4114':[[384,3172],],
'4898':[[384,8509],],
'4993':[[384,4510],],
'5059':[[384,8742],[384,8146],],
'5086':[[384,6757],],
},{'47':[[1,113],[16,139],[40,41],[58,63],[59,92],[74,139],[108,26],[124,11],[145,80],[154,41],[156,137],[171,644],[214,152],[219,52],[219,56],[241,6],[245,1],[262,51],[280,126],[380,43],[371,126],[304,403],[369,48],[330,38],[334,93],[342,331],[386,40],],
'449':[[301,68],[304,226],[321,370],],
},{'39':[[16,123],[74,123],],
'63':[[371,128],[380,45],[16,132],[16,141],[40,43],[49,61],[58,65],[59,94],[369,50],[342,333],[334,95],[1,115],[74,132],[74,141],[330,40],[108,28],[124,13],[145,82],[154,43],[156,139],[171,646],[304,405],[214,149],[214,154],[280,128],[219,54],[219,58],[241,8],[245,3],[262,53],[386,42],],
'130':[[70,762],[277,580],[197,604],],
'150':[[74,113],[16,113],],
'152':[[214,167],[286,36],],
'449':[[101,37],],
'705':[[16,111],[74,111],],
},{'7':[[241,65],[17,3],[17,36],[25,5],[171,733],[369,137],],
'33':[[164,287],],
'117':[[2,0],],
'171':[[164,215],],
'173':[[2,16],],
'178':[[25,98],],
'215':[[153,1406],[153,981],[153,736],[153,1185],],
'815':[[306,1482],],
'1016':[[36,138],],
'1029':[[335,264],],
'2126':[[179,1610],],
'2128':[[54,634],[335,2279],],
'2180':[[153,577],],
'2972':[[153,1416],],
},{'7':[[2,3],[241,63],[2,33],[6,5],[171,731],[369,135],],
'33':[[2,25],],
'73':[[164,585],[164,556],],
'117':[[25,0],],
'128':[[25,51],[25,20],],
'140':[[164,247],],
'173':[[25,16],],
'178':[[6,100],],
'185':[[25,72],],
'369':[[332,155],],
'420':[[312,44],[164,214],],
'447':[[102,77],],
'506':[[181,604],],
'1589':[[335,2008],],
'2179':[[153,850],[153,420],[153,1264],[153,1071],],
},{'7':[[2,5],[241,67],[171,735],[155,50],[155,3],[369,139],],
'117':[[17,0],],
'178':[[2,37],],
'709':[[17,17],],
},{'7':[[365,77],[82,299],[82,208],[82,148],[304,81],[365,17],[365,23],[365,88],[365,34],[365,47],[365,58],[42,97],],
'12':[[54,416],],
'48':[[209,21],[269,19],[36,19],],
'82':[[335,2485],],
'92':[[179,830],[306,1212],[306,989],[48,549],[48,564],[48,886],[48,1323],[48,1528],[48,1689],[48,1833],[48,1951],[48,2093],[48,2156],[48,4554],[335,120],[179,825],[48,3881],[179,680],[48,3805],[48,2743],[48,3056],[48,3744],[48,3208],[306,343],],
'93':[[48,3749],[218,16],[48,2419],[178,36],[48,2236],[48,3900],[48,4076],[48,2220],[48,4224],[48,2204],[363,18],[178,22],[322,24],[224,22],[170,18],[315,23],[233,22],[213,20],[313,30],[233,36],[309,16],[234,22],[55,21],[235,18],[235,32],[235,37],[247,21],[250,24],[306,1384],[306,1233],[10,23],[306,1126],[306,1064],[306,994],[367,22],[306,379],[306,358],[200,24],[250,29],[257,22],[257,30],[367,27],[80,18],[302,24],[82,104],[6,18],[189,23],[200,32],[89,20],[179,691],[134,23],[296,18],[270,21],[128,23],[116,18],[289,23],[284,20],],
'122':[[289,15],[106,15],[288,13],[286,13],[111,15],[112,15],[113,15],[105,15],[101,15],[120,15],[275,15],[97,15],[273,15],[294,15],[132,15],[300,15],[301,15],[140,15],[267,13],[141,15],[143,15],[78,15],[76,15],[145,13],[74,15],[67,15],[151,15],[64,15],[239,15],[307,15],[61,15],[58,15],[308,13],[310,15],[154,15],[315,15],[317,13],[318,13],[175,13],[333,13],[224,15],[340,13],[341,15],[347,15],[222,15],[353,15],[392,15],[25,15],[18,13],[16,15],[212,15],[11,15],[370,15],[204,15],[203,15],[190,13],[389,15],[2,15],],
'128':[[230,18],[375,18],],
'139':[[335,3616],[335,1167],[363,50],[213,56],[213,52],[335,723],[235,41],[363,54],[335,501],[335,321],],
'143':[[313,21],],
'165':[[54,1232],],
'170':[[2,17],],
'173':[[230,19],[375,19],],
'180':[[61,17],],
'183':[[375,28],[264,31],[230,26],],
'184':[[70,223],],
'192':[[79,16],],
'193':[[4,19],],
'215':[[48,4830],],
'217':[[197,555],[335,3526],[218,40],],
'235':[[370,17],],
'241':[[82,83],],
'264':[[335,294],],
'271':[[335,1082],],
'277':[[70,498],[197,350],[335,1873],[54,406],],
'285':[[153,848],],
'312':[[107,15],[129,13],],
'314':[[335,3535],],
'324':[[149,19],],
'326':[[375,13],[230,13],],
'327':[[193,16],[298,14],[352,16],[149,16],[71,16],[127,14],[382,16],[297,16],],
'331':[[29,21],[144,19],[9,21],],
'334':[[9,27],[144,25],[29,27],],
'372':[[335,696],],
'384':[[10,27],[213,24],[234,26],[89,24],],
'393':[[218,28],],
'396':[[363,38],[189,45],[234,42],[10,43],[213,40],],
'423':[[197,202],[70,365],],
'436':[[335,3732],],
'447':[[70,693],[197,525],],
'502':[[335,3507],],
'550':[[335,3676],],
'553':[[335,474],],
'651':[[13,17],],
'664':[[196,15],],
'700':[[173,22],],
'743':[[236,17],],
'747':[[115,17],],
'752':[[91,17],],
'753':[[200,17],],
'754':[[257,15],],
'762':[[297,19],],
'815':[[48,4337],],
'950':[[335,140],],
'970':[[335,3490],],
'1013':[[267,15],],
'1029':[[153,704],],
'1085':[[209,17],],
'1241':[[48,3143],[48,4707],],
'1326':[[70,180],],
'1423':[[70,554],],
'1426':[[102,75],],
'1495':[[260,21],],
'1578':[[48,456],],
'1594':[[48,534],],
'1595':[[335,128],],
'1600':[[48,2166],],
'1629':[[306,478],],
'1705':[[67,17],],
'1806':[[48,2603],],
'1832':[[306,1130],[306,383],[128,27],[322,28],],
'1882':[[48,3810],],
'1899':[[48,3874],],
'1919':[[306,1396],[48,4088],],
'2066':[[375,25],[264,28],[230,24],],
'2092':[[54,292],[54,1067],],
'2127':[[179,764],[54,296],[54,1071],],
'2130':[[179,1008],[54,351],],
'2132':[[335,716],[335,494],[335,3213],[335,3259],[335,1160],[335,314],],
'2147':[[54,884],],
'2161':[[324,17],],
'2179':[[153,418],],
'2180':[[218,20],],
'2252':[[230,16],],
'2253':[[375,16],],
'2339':[[70,226],],
'2355':[[70,707],],
'2415':[[302,28],[306,362],[134,27],[233,26],[253,21],[306,1068],[178,26],[235,22],],
'2461':[[363,22],],
'2516':[[89,36],],
'2518':[[89,40],],
'2535':[[156,16],],
'2559':[[335,3193],],
'2694':[[105,17],],
'2708':[[108,15],],
'2712':[[306,1555],],
'2859':[[365,63],[365,104],[365,93],[365,52],],
'2899':[[352,21],[140,19],[193,21],],
'2967':[[153,386],[153,1069],[153,1262],],
'2972':[[153,586],],
'3167':[[365,80],],
'3172':[[365,26],],
'3267':[[179,1147],],
'3491':[[179,695],],
'3499':[[179,760],],
'3533':[[179,1157],],
'3677':[[189,33],],
'3688':[[335,3576],[335,3608],],
'3702':[[335,3645],],
'4150':[[306,1051],],
'4158':[[335,3595],],
'4277':[[335,130],],
'4278':[[335,132],],
'4279':[[335,134],],
'4280':[[335,136],],
'4281':[[335,138],],
'4282':[[335,142],],
'4540':[[365,37],],
'4541':[[365,50],],
'4542':[[365,61],],
'4544':[[365,91],],
'4545':[[365,102],],
},{'134':[[154,23],[2,27],[370,27],[6,33],[67,29],[145,22],[297,28],[212,24],[175,21],[61,31],[149,28],],
'144':[[306,878],[306,913],],
'147':[[370,56],[48,537],[61,82],[67,49],[48,514],],
'173':[[2,18],[370,18],[365,53],[48,457],[48,2420],[6,19],[297,20],[365,64],[61,18],[365,94],[149,20],[67,18],[70,227],[365,105],],
'174':[[48,540],],
'175':[[48,426],[48,539],],
'551':[[306,890],],
'700':[[48,507],],
'1570':[[48,423],],
'1583':[[48,472],],
'1589':[[306,842],[306,885],[48,494],],
'1594':[[48,528],],
'1597':[[48,2195],[48,1487],],
'1598':[[48,1185],[48,3284],[48,2764],[48,1443],[48,934],],
'1639':[[48,902],[48,1382],],
'1720':[[212,19],[175,16],],
'1782':[[48,2429],],
'1988':[[306,875],],
'2340':[[70,242],],
'2711':[[145,17],[154,18],],
'4170':[[306,872],[306,853],],
'4174':[[306,904],],
},{'7':[[365,195],],
'12':[[2,31],[5,53],[160,519],[149,34],[67,34],[61,36],[164,359],[36,59],[297,34],[365,155],[49,223],[370,31],[367,112],],
'19':[[36,41],],
'23':[[102,192],],
'27':[[49,213],],
'39':[[189,629],[269,210],[224,201],[284,190],[213,474],],
'52':[[384,1792],[164,607],[17,34],],
'57':[[270,166],[283,101],[269,129],[247,164],[234,309],[284,130],[285,93],[57,169],[229,123],[34,94],[36,101],[20,120],[164,283],[332,103],[213,317],[210,105],[209,160],[332,186],[189,359],[86,162],[89,263],[100,100],[187,114],[180,117],[164,186],[160,551],[135,105],[137,145],[146,96],[148,112],[394,103],[178,182],[173,190],[10,308],],
'63':[[345,56],[222,26],[48,443],[178,302],[395,59],],
'75':[[48,3020],[48,3023],],
'128':[[61,22],[2,20],[370,20],[67,20],],
'146':[[306,1517],[48,4177],],
'165':[[197,614],[70,772],],
'174':[[48,538],],
'203':[[39,232],],
'215':[[335,436],[335,668],[335,3335],[335,3163],[335,2273],[335,924],],
'241':[[48,425],],
'242':[[266,264],],
'248':[[70,619],],
'298':[[48,4745],],
'305':[[36,165],],
'321':[[197,610],[70,768],],
'351':[[102,94],],
'376':[[253,119],],
'447':[[102,181],],
'482':[[365,167],],
'598':[[153,552],],
'696':[[70,640],],
'817':[[335,3774],],
'948':[[341,194],[307,194],],
'1029':[[48,2631],],
'1132':[[112,85],],
'1598':[[48,3183],],
'1602':[[48,4782],],
'1733':[[306,717],],
'1755':[[48,3187],],
'1757':[[48,3185],],
'1902':[[306,1216],[48,3885],],
'1903':[[48,3888],[306,1219],],
'1904':[[306,1222],[48,3891],],
'1905':[[306,1225],],
'1907':[[306,1594],],
'1924':[[48,4784],],
'1957':[[48,4460],],
'1968':[[48,4859],],
'2179':[[70,776],[197,618],],
'2346':[[70,774],[197,616],],
'2353':[[70,778],[197,620],],
'3059':[[164,645],[160,56],[164,466],],
'4066':[[277,790],[355,168],[277,187],],
},{'7':[[213,135],[2,29],[189,177],[6,35],[189,120],[10,114],[10,126],[370,29],[218,63],[25,45],[367,91],[218,77],[363,101],[234,115],[363,79],[173,95],[341,44],[341,38],[80,33],[89,98],[89,112],[89,178],[234,127],[317,35],[313,128],[307,44],[307,38],[300,42],[127,46],[141,48],[298,46],[143,38],[297,30],[296,37],[149,30],[263,59],[250,46],[235,87],[213,123],],
'19':[[67,22],[61,24],[365,197],[370,22],[2,22],[370,43],[6,27],[94,29],[209,62],],
'23':[[67,32],[164,180],[164,285],[61,34],],
'48':[[181,113],],
'121':[[215,45],[183,31],[382,31],[9,31],[183,45],[23,33],[23,53],[29,31],[365,110],[384,8221],[385,19],[264,21],[215,31],[293,33],[293,53],[149,23],[297,23],[352,25],[298,23],[193,25],[71,31],[97,32],[127,23],[311,31],[387,31],],
'139':[[379,124],[384,1693],],
'165':[[181,985],],
'173':[[264,29],[375,26],],
'193':[[230,22],[375,23],[108,20],],
'205':[[246,1396],],
'354':[[298,41],[127,41],[209,248],],
'412':[[189,533],],
'422':[[170,54],[170,42],],
'431':[[235,173],],
'447':[[332,181],],
'709':[[141,69],[143,48],],
'1194':[[42,394],],
'2159':[[54,729],[95,296],],
'2394':[[384,6958],],
'2859':[[365,125],],
},{'12':[[143,40],[141,50],[300,44],],
'16':[[253,163],],
'18':[[164,212],[164,204],],
'23':[[61,71],[25,48],],
'31':[[349,68],[266,341],[218,206],[253,111],[335,3426],[95,414],[314,78],[200,52],[197,479],[134,75],[168,34],[302,72],[72,62],[363,504],],
'165':[[127,49],[298,49],],
'175':[[61,37],],
'176':[[67,23],[370,44],[370,23],[2,23],[61,25],[365,198],],
'185':[[317,112],],
'203':[[236,34],[115,34],[13,34],[158,49],],
'220':[[319,33],],
'295':[[310,23],],
'349':[[67,51],[61,84],[370,58],],
'447':[[260,64],],
'817':[[176,90],],
'1849':[[197,469],],
'2004':[[122,123],],
'2136':[[86,226],[86,238],[54,511],[266,183],[363,242],[164,157],[384,6301],],
'3005':[[224,212],[181,992],[181,971],],
'3999':[[251,340],],
},{'23':[[266,143],],
'165':[[3,42],[6,99],[384,216],[17,39],[25,97],[61,93],[66,32],[67,64],[97,45],[141,91],[143,70],[145,85],[370,67],[369,100],[155,53],[164,6],[365,234],[354,8],[317,134],[388,91],[164,666],[164,669],[171,696],[241,2],[241,28],[245,17],[308,101],[300,56],[2,36],],
'713':[[17,27],[155,25],],
'716':[[266,91],],
'728':[[164,602],[164,662],],
'791':[[164,612],],
'1151':[[164,78],],
'1452':[[155,31],],
'1838':[[266,70],],
'4802':[[384,1806],],
},{'7':[[171,723],[300,53],[300,3],[61,5],[241,55],[369,127],],
'23':[[25,89],],
'117':[[3,0],],
'178':[[61,94],],
'182':[[3,16],],
'2629':[[300,51],],
},{'7':[[3,3],[3,39],[241,53],[171,721],[67,5],[369,125],],
'117':[[61,0],],
'173':[[61,16],],
'178':[[67,65],],
'2321':[[67,57],],
},{'7':[[3,5],[370,3],[369,129],[241,57],[370,64],[171,725],],
'12':[[25,78],],
'26':[[3,31],[3,22],],
'63':[[6,66],],
'117':[[300,0],],
'173':[[300,16],],
'178':[[3,43],],
'420':[[370,25],[370,46],],
'2126':[[179,1155],],
'3500':[[179,1159],],
},{'7':[[342,19],[304,153],[365,71],[65,47],[65,41],[65,35],[42,25],[42,37],[42,49],[42,55],[42,61],[42,73],[42,85],[42,103],[42,109],[65,29],[65,23],[142,49],[342,61],[342,55],[342,49],[342,43],[342,37],[342,31],[342,25],[142,43],[337,39],[337,33],[337,27],[337,21],[65,17],[304,32],],
'93':[[192,18],[257,33],[315,26],[257,25],[200,27],[289,26],[299,18],[200,35],],
'99':[[48,2494],],
'122':[[3,15],[320,15],[157,15],[192,15],[324,15],[326,13],[361,15],[81,15],[299,15],[90,15],],
'139':[[229,37],[213,93],[210,33],[209,42],[247,47],[269,38],[270,47],[283,36],[189,78],[187,39],[180,38],[178,49],[173,52],[284,39],[148,35],[146,33],[285,33],[57,50],[332,32],[335,818],[48,941],[44,25],[36,34],[34,33],[20,38],[137,44],[135,34],[77,42],[10,76],[131,44],[100,34],[234,75],[89,57],[86,48],[394,34],],
'165':[[335,2035],[82,85],],
'182':[[48,2307],[48,1024],[48,2903],],
'215':[[218,36],[213,80],],
'217':[[48,2508],],
'237':[[141,19],[127,19],[365,41],[298,19],],
'241':[[70,185],[48,2443],],
'267':[[48,2423],],
'277':[[335,2525],[224,19],],
'339':[[198,20],],
'346':[[117,22],[167,22],],
'380':[[234,19],],
'415':[[250,21],[367,19],],
'588':[[48,3340],[306,615],],
'615':[[353,25],[106,19],],
'655':[[335,2627],],
'719':[[18,17],],
'742':[[158,15],],
'815':[[48,3983],[306,1314],],
'935':[[224,24],],
'1101':[[361,19],],
'1180':[[48,2497],],
'1211':[[48,2491],],
'1326':[[319,17],],
'1333':[[335,1702],],
'1532':[[48,2505],],
'1558':[[48,2488],],
'1643':[[306,548],[48,2788],[48,2268],[48,3308],],
'1651':[[306,612],[48,1023],[306,554],[48,1030],[48,2794],[48,1133],[48,2902],[48,1158],[48,947],[48,1164],[48,3337],[48,2909],[48,3314],[48,2274],[48,3346],[48,2306],[48,1139],[48,2313],[306,621],],
'1667':[[48,1017],[48,2300],[306,606],[48,2896],[48,3331],],
'1737':[[48,1893],],
'1738':[[48,3005],[48,3467],],
'1739':[[48,3472],[48,3010],],
'1746':[[48,1933],],
'1757':[[48,2701],[48,2642],],
'1769':[[257,27],[200,29],],
'1774':[[315,28],[289,28],],
'1788':[[48,2447],[48,2451],],
'1847':[[335,3025],[335,2173],],
'1903':[[306,1545],[48,4205],],
'1941':[[48,4231],],
'2049':[[50,21],[53,21],[69,21],],
'2163':[[54,1301],],
'2199':[[318,17],],
'2290':[[62,17],],
'2382':[[82,81],[82,101],],
'2414':[[373,17],],
'2415':[[157,19],[81,19],],
'2418':[[82,34],],
'2539':[[292,17],],
'3701':[[257,17],[200,19],],
'3702':[[257,19],[200,21],],
'3704':[[200,37],[257,35],],
'3705':[[257,37],],
'3942':[[335,2561],[335,2531],],
'4005':[[257,41],],
'4337':[[335,2177],[335,3029],],
'4357':[[335,2554],],
},{'7':[[215,41],[293,49],[23,49],[82,475],[82,429],[183,41],],
'121':[[313,398],],
'128':[[319,53],[296,79],[81,57],[326,16],[346,20],[13,19],[90,54],[91,19],[244,96],[236,19],[115,19],[3,18],[157,53],[158,18],[324,19],],
'149':[[347,60],[220,70],],
'150':[[101,77],],
'152':[[112,142],],
'173':[[230,25],],
'176':[[375,27],[264,30],],
'199':[[181,835],[209,268],[44,139],],
'225':[[198,76],],
'247':[[164,336],],
'281':[[265,25],],
'319':[[182,36],[274,600],[274,502],],
'357':[[170,223],],
'681':[[73,59],],
'752':[[257,171],[200,289],],
'817':[[273,47],[384,8307],[384,6668],[384,7470],[384,7359],],
'949':[[296,93],],
'1021':[[284,186],],
'1074':[[269,206],],
'1091':[[177,29],[282,27],],
'1229':[[173,255],[137,210],],
'1309':[[296,105],],
'1667':[[296,157],],
'1978':[[48,4959],],
'2053':[[50,69],[53,59],],
'2385':[[80,138],],
'2434':[[82,490],],
'2557':[[220,92],],
'3184':[[170,215],],
'3210':[[172,128],],
'4114':[[296,118],],
'4153':[[306,348],],
},{'1':[[53,143],],
'7':[[365,142],],
'23':[[365,173],[53,114],[3,29],[3,20],[300,49],[189,435],[181,637],],
'33':[[50,58],[53,48],],
'128':[[127,55],[298,55],[141,53],],
'130':[[209,97],[247,97],[209,87],[209,108],[270,99],],
'182':[[141,20],[127,20],[70,186],[365,42],[298,20],],
'215':[[141,39],],
'237':[[141,58],],
'238':[[304,378],],
'241':[[70,222],],
'317':[[181,458],],
'540':[[181,688],],
'632':[[181,625],],
'653':[[127,38],[298,38],],
'856':[[298,35],[127,35],],
'860':[[312,38],],
'917':[[331,336],],
'1202':[[300,26],],
'1809':[[379,161],],
'2058':[[127,63],[298,63],],
'2267':[[141,43],],
'2886':[[141,27],],
},{'7':[[200,111],[200,85],],
'23':[[10,184],[213,193],[234,185],[235,143],[218,130],[363,177],[189,235],[178,140],],
'26':[[289,89],[315,89],],
'33':[[164,411],],
'34':[[181,568],],
'48':[[379,149],],
'121':[[266,102],[341,27],[307,27],[365,132],[340,23],[308,23],],
'147':[[186,121],],
'175':[[365,156],],
'181':[[6,67],[3,23],[3,32],],
'187':[[312,41],],
'193':[[96,146],[190,71],],
'197':[[317,111],],
'269':[[384,1794],],
'454':[[25,71],],
'855':[[260,85],],
'1301':[[95,375],],
'2058':[[51,40],],
'2079':[[181,610],],
'3645':[[224,205],],
},{'2':[[381,298],[381,277],],
'16':[[44,60],[316,88],[260,50],[363,559],],
'23':[[384,6130],],
'31':[[48,1366],[141,37],[306,1172],[143,32],[302,63],[134,66],[127,67],[298,67],[300,36],[3,36],],
'63':[[42,194],[42,604],],
'165':[[197,48],[70,45],],
'173':[[48,2205],[48,2221],[48,2237],],
'215':[[39,485],[39,957],[39,460],[39,923],[39,940],[39,974],],
'221':[[122,113],],
'224':[[153,286],],
'237':[[48,2921],[48,1099],[48,1088],[48,1042],[306,633],[48,3363],[48,3358],[48,2926],[48,1112],[48,2325],[48,2332],[306,638],],
'284':[[42,524],],
'299':[[384,7848],],
'340':[[362,56],],
'447':[[335,3222],[335,330],[335,383],[335,2638],[335,770],[335,1917],],
'478':[[48,2810],[48,2805],],
'586':[[48,955],],
'588':[[48,2912],[48,2316],[48,3349],[306,624],[48,1033],],
'608':[[188,180],],
'682':[[335,2843],],
'791':[[274,268],[42,918],],
'891':[[384,4259],],
'958':[[335,347],[335,412],[48,4058],[70,606],[306,1366],[197,404],[54,449],[335,601],[153,471],[335,786],[335,3716],[335,3243],[335,1212],[335,2674],[335,1931],[335,1727],[335,1592],[335,1447],],
'1031':[[37,71],],
'1125':[[48,4032],],
'1171':[[39,451],[39,931],[39,476],[39,914],[39,948],[39,965],],
'1319':[[179,1386],],
'1368':[[384,5697],],
'1417':[[42,706],],
'1655':[[48,1178],],
'1660':[[48,1236],],
'1665':[[48,1309],[48,1273],],
'1675':[[48,1870],],
'1676':[[306,724],],
'1707':[[48,1775],[54,328],[306,414],[335,210],[48,1753],[335,200],[306,421],[48,1760],],
'1719':[[384,6604],],
'1734':[[48,1843],[48,2062],],
'1762':[[48,2457],],
'1777':[[48,2399],],
'1856':[[48,3971],],
'1867':[[73,77],],
'1917':[[306,1336],[48,4027],],
'1918':[[48,4400],],
'1919':[[306,1340],[306,1344],[48,4036],],
'1920':[[48,4434],],
'2217':[[54,1093],[54,1113],[54,1118],],
'2407':[[170,276],],
'2415':[[306,1181],],
'3181':[[313,320],],
'3496':[[179,819],[179,752],],
'3541':[[179,1400],],
'3657':[[188,331],[188,291],[188,313],[188,270],[188,249],],
'3760':[[384,7127],],
'4182':[[306,1302],],
'4227':[[384,5636],],
'4293':[[335,884],],
'4306':[[335,1111],],
'4328':[[335,2098],[335,2802],],
'4331':[[335,3081],[335,2234],],
},{'7':[[369,246],[110,43],[110,3],[171,842],[38,38],],
'12':[[237,42],[237,24],[25,40],[312,40],[25,28],[271,24],[164,224],[312,26],[164,550],[216,42],[216,24],[205,42],[205,24],[181,589],[299,42],[299,24],[192,42],[192,24],[271,42],],
'26':[[365,182],],
'31':[[173,112],[213,259],[189,305],[86,95],[234,255],[57,102],[173,103],[173,123],[247,88],[269,63],[269,74],[269,86],[270,90],[10,254],[284,87],[284,75],[283,218],[284,64],],
'39':[[283,208],],
'48':[[53,120],],
'49':[[181,1044],],
'117':[[312,0],],
'140':[[181,619],],
'152':[[100,156],],
'186':[[3,37],],
'203':[[189,447],],
'313':[[312,14],],
'420':[[332,169],],
'429':[[164,263],],
},{'7':[[392,5],[22,36],[369,217],[222,58],[222,3],[171,813],],
'117':[[4,0],],
'140':[[54,128],],
'191':[[4,16],],
'209':[[392,54],],
'2243':[[54,1445],],
'2244':[[54,1465],],
},{'7':[[4,3],[4,56],[22,34],[369,215],[171,811],[318,3],],
'117':[[392,0],],
'128':[[392,20],],
'173':[[392,16],],
'209':[[318,58],],
'869':[[54,922],],
},{'7':[[4,5],[171,815],[22,38],[112,148],[112,3],[369,219],],
'62':[[54,1486],],
'117':[[222,0],],
'173':[[222,16],],
'209':[[4,60],],
'2240':[[54,1500],],
},{'122':[[4,15],],
'162':[[54,1463],],
'190':[[222,17],],
'419':[[54,1443],],
},{'7':[[22,52],[171,829],[369,233],[279,3],],
'117':[[79,0],],
'188':[[4,17],],
'209':[[279,56],],
'329':[[79,15],],
},{'23':[[108,19],],
'149':[[89,92],],
'192':[[4,18],],
'288':[[96,145],],
'320':[[230,21],[375,22],],
'2267':[[190,70],],
'4902':[[384,3155],],
},{'18':[[93,106],[363,235],],
'134':[[196,38],],
'173':[[196,16],[79,17],[4,20],],
},{'12':[[217,393],[181,918],[284,82],[277,226],[89,100],[209,104],[269,81],[304,396],[344,137],],
'23':[[181,682],[331,326],[80,40],[296,44],[209,234],[335,1062],[292,54],[89,404],[235,280],],
'30':[[213,256],[10,251],[234,252],[189,302],],
'39':[[274,535],[353,135],],
'43':[[160,152],[246,30],[181,225],],
'85':[[48,4800],],
'128':[[234,80],[229,42],[57,55],[135,39],[218,49],[137,49],[247,52],[146,38],[284,44],[148,40],[100,39],[332,37],[77,47],[269,43],[173,57],[213,102],[210,38],[178,54],[36,39],[270,52],[34,38],[4,22],[89,62],[180,43],[209,47],[285,38],[189,387],[86,53],[20,43],[10,81],[187,44],[131,49],[189,83],[283,41],],
'151':[[371,54],[280,61],],
'152':[[189,484],],
'248':[[160,168],[214,170],[173,327],],
'305':[[178,164],[209,142],[210,87],[285,75],[180,99],[213,299],[148,94],[146,78],[283,83],[173,172],[137,127],[284,112],[113,37],[229,105],[100,82],[89,245],[234,291],[86,144],[57,151],[332,85],[247,146],[189,341],[36,83],[269,111],[34,76],[270,148],[20,102],[10,290],[135,87],[187,96],[394,85],],
'465':[[213,342],],
'513':[[355,1086],],
'598':[[179,1477],[179,1330],[179,1582],[179,1532],],
'631':[[214,96],[214,90],],
'648':[[49,52],],
'700':[[49,166],],
'861':[[181,97],[181,74],[48,3578],],
'914':[[49,127],],
'1003':[[49,468],[355,992],],
'1192':[[153,1093],],
'1310':[[381,454],],
'2384':[[75,138],],
},{'3':[[222,22],[274,705],],
'12':[[384,4745],],
'18':[[54,1388],],
'19':[[274,386],[54,1411],[54,1426],[29,98],[112,30],[4,24],[42,1089],[274,417],[9,98],],
'23':[[384,7041],[304,329],[350,185],[9,183],[29,183],[54,1243],[206,56],],
'26':[[384,7449],],
'31':[[164,525],],
'33':[[358,288],],
'39':[[183,96],[23,104],[190,54],[215,96],[293,104],],
'47':[[179,942],],
'49':[[384,9639],[181,515],],
'59':[[274,633],[274,796],],
'63':[[181,945],],
'67':[[193,145],[274,659],[352,145],],
'99':[[95,508],[171,1269],[95,210],[306,1618],[218,266],[54,4],[185,72],[306,13],[197,29],[95,192],[197,637],],
'149':[[54,1143],[112,137],[54,1496],[54,1460],[112,47],[112,122],],
'152':[[160,68],],
'203':[[160,175],],
'205':[[4,51],[222,53],[392,45],[279,47],[79,48],[318,47],[54,562],],
'226':[[153,1159],[153,1381],[153,779],[153,702],[54,539],[153,681],[153,954],],
'227':[[274,699],],
'443':[[74,117],[16,117],[274,665],],
'472':[[39,266],[84,436],],
'511':[[54,763],],
'513':[[274,427],[112,145],],
'543':[[266,354],],
'562':[[384,9932],],
'593':[[384,377],],
'707':[[112,82],[335,3428],],
'722':[[84,465],[54,1470],[218,216],],
'791':[[384,7636],],
'848':[[293,122],[183,114],[215,114],[23,122],],
'869':[[384,5824],[70,636],[213,364],[89,328],],
'1160':[[274,679],],
'1232':[[54,1438],],
'1315':[[274,373],],
'1391':[[112,25],[198,30],[274,354],[274,358],[384,9584],[99,213],[54,477],[95,202],[305,27],[341,73],[50,100],[287,29],[148,157],[181,69],[307,73],[286,19],[49,330],[326,42],],
'1421':[[162,217],[54,1455],[84,490],[84,501],],
'1736':[[193,129],[352,129],[274,617],],
'1990':[[89,344],],
'1991':[[153,997],[251,281],],
'2006':[[54,169],],
'2058':[[54,769],],
'2075':[[54,1154],[218,221],],
'2096':[[326,45],[384,9532],[304,387],[193,141],[274,721],[352,141],[54,487],[384,4755],[384,352],[274,649],[274,640],],
'2162':[[54,776],],
'2166':[[54,800],[54,1369],],
'2167':[[54,827],],
'2224':[[54,1340],],
'2640':[[214,219],],
'3064':[[160,77],],
'3774':[[219,31],[262,22],[262,31],],
},{'1':[[21,135],],
'15':[[355,986],],
'16':[[317,110],],
'19':[[246,933],],
'31':[[181,518],[246,633],[246,976],],
'39':[[246,984],],
'67':[[99,156],],
'196':[[4,25],],
'203':[[321,171],[193,136],[352,136],[161,571],[321,193],[274,644],],
'346':[[352,118],[193,118],],
'349':[[384,5811],],
'369':[[301,77],],
'420':[[95,48],[48,4315],[246,1518],[99,236],],
'1143':[[39,688],],
'1169':[[274,579],],
'1177':[[176,68],],
'1403':[[384,3674],],
'1477':[[384,238],[251,294],],
'2720':[[179,1292],],
},{'197':[[4,26],],
},{'1':[[197,389],[313,166],[30,483],[390,171],[70,594],[218,105],[153,466],[21,188],[363,143],],
'2':[[153,1021],],
'3':[[160,346],[163,73],[181,855],[181,891],[106,56],[33,49],[49,294],[12,373],[48,4320],[259,47],[289,84],[394,183],[181,105],[315,84],],
'9':[[293,86],[23,86],[336,62],],
'10':[[384,8183],],
'12':[[384,4389],],
'13':[[343,76],[164,453],],
'14':[[339,40],],
'15':[[50,40],],
'16':[[39,570],],
'17':[[235,367],[253,98],],
'18':[[257,189],[153,122],[162,151],[95,85],[200,307],[384,9816],],
'26':[[321,416],],
'28':[[11,37],],
'30':[[231,42],],
'33':[[181,119],],
'37':[[39,368],],
'38':[[246,1422],[335,1461],[335,373],[42,1328],[246,1458],[246,1467],[317,89],[153,1232],],
'39':[[246,1198],[317,60],],
'40':[[277,237],],
'41':[[384,2591],],
'44':[[7,175],[186,44],[171,366],[186,529],[339,12],[84,182],],
'46':[[384,5673],],
'47':[[274,86],],
'48':[[321,393],],
'49':[[246,1671],[181,521],[274,55],],
'50':[[181,38],[306,88],[12,119],],
'54':[[79,26],[4,29],[318,25],[392,23],[222,31],[279,25],],
'55':[[277,260],[277,103],],
'63':[[355,1445],[191,255],[44,106],[65,98],[368,93],[160,247],],
'65':[[89,331],],
'67':[[204,70],[385,59],[181,176],[57,210],[246,169],[54,160],],
'73':[[363,726],[121,572],[178,266],[48,3641],],
'77':[[52,181],],
'82':[[174,134],[344,178],[355,261],[277,758],[302,135],[134,133],[277,739],],
'83':[[153,1011],],
'103':[[321,406],],
'113':[[12,27],],
'133':[[186,240],],
'135':[[153,1302],[153,1099],[363,340],],
'139':[[253,108],],
'140':[[48,4817],[335,118],[170,167],[321,97],[320,153],[95,446],[208,44],],
'142':[[339,94],[373,106],],
'145':[[162,186],],
'147':[[274,576],[5,71],[332,128],[180,142],[394,128],[270,191],[187,139],[191,58],[29,82],[164,323],[335,1054],[20,145],[269,154],[249,208],[57,194],[84,425],[86,187],[36,126],[18,60],[160,492],[34,119],[283,126],[229,148],[5,44],[209,185],[284,155],[210,130],[9,82],[100,125],[285,118],[173,215],[253,105],[148,137],[146,121],[116,93],[116,109],[137,170],[118,106],[363,123],[246,1923],[135,193],[135,130],[135,46],[247,189],[213,384],],
'151':[[58,32],],
'152':[[29,100],[9,100],[42,1241],[25,84],[224,140],],
'153':[[112,139],[160,564],[112,32],],
'156':[[162,371],],
'157':[[49,234],],
'158':[[252,74],],
'163':[[307,100],[341,100],[352,120],[193,120],],
'164':[[186,493],],
'165':[[266,361],[235,431],],
'175':[[36,166],[395,60],[164,187],[224,202],[332,187],[160,552],[112,86],[49,224],[48,444],[345,57],],
'195':[[277,227],[344,138],],
'201':[[266,129],],
'215':[[381,281],[62,92],[274,602],],
'217':[[384,9002],],
'220':[[160,48],],
'222':[[160,61],],
'223':[[368,101],],
'224':[[49,104],],
'225':[[274,569],],
'228':[[181,834],],
'238':[[54,621],[54,552],[335,915],[153,974],[153,1178],[335,2264],[197,579],[27,63],[335,3154],[153,729],[70,737],[153,1399],],
'241':[[65,104],[355,1263],[118,97],],
'250':[[135,168],[165,65],[307,131],[384,5420],[84,151],[125,90],[247,230],[384,5054],[181,209],[341,131],[283,195],],
'265':[[321,263],],
'268':[[7,188],[266,19],[84,8],[266,388],[7,25],[171,216],],
'273':[[328,33],[48,1305],[384,1850],],
'276':[[95,116],],
'277':[[320,97],[142,151],[10,352],[335,1865],[84,82],],
'280':[[246,1909],],
'281':[[96,188],[384,5375],[125,82],],
'282':[[243,79],],
'284':[[162,268],],
'285':[[186,359],[153,657],[306,682],],
'290':[[181,814],[358,383],[261,213],[153,358],],
'298':[[96,127],[246,733],[153,505],[84,141],],
'299':[[57,289],],
'300':[[331,278],],
'301':[[384,8721],[384,5799],[384,6541],],
'310':[[182,38],],
'317':[[274,532],],
'321':[[164,124],],
'332':[[9,92],[29,92],],
'339':[[176,165],],
'340':[[73,44],],
'346':[[162,352],[181,405],[249,173],],
'353':[[18,55],],
'356':[[29,125],[9,125],],
'360':[[274,518],],
'367':[[134,139],[302,141],],
'369':[[266,338],],
'372':[[340,100],[308,133],],
'376':[[214,289],],
'429':[[384,4965],[48,3738],[306,983],[381,615],],
'430':[[128,177],[322,179],],
'436':[[39,756],],
'443':[[296,145],[80,111],],
'445':[[335,2314],[42,321],],
'447':[[363,366],],
'449':[[153,919],[277,803],],
'453':[[152,131],[183,88],[215,88],[30,285],[384,9482],],
'455':[[53,109],],
'456':[[160,270],],
'462':[[93,67],[341,113],[307,113],],
'470':[[77,66],[44,138],[131,68],[332,53],[153,565],],
'476':[[315,138],[289,138],],
'482':[[42,665],[384,9851],[52,145],[384,5040],[39,352],[72,39],[384,4897],[224,106],[191,42],[42,1238],[49,149],[42,1253],[161,472],[355,1029],[355,1352],[396,42],[304,287],[384,9159],],
'491':[[39,580],[12,80],],
'502':[[39,68],[153,355],[12,96],],
'506':[[48,3556],],
'518':[[200,247],],
'520':[[48,3596],],
'525':[[306,52],],
'529':[[12,132],[355,439],[335,558],],
'538':[[181,780],[188,194],],
'550':[[331,286],],
'551':[[243,69],[355,253],],
'553':[[72,80],],
'555':[[277,270],],
'562':[[266,49],],
'585':[[48,4684],[48,3120],],
'593':[[164,482],[12,477],[321,340],[355,1233],],
'602':[[12,554],],
'607':[[12,412],],
'613':[[30,288],],
'615':[[125,116],],
'623':[[246,1000],],
'626':[[12,485],],
'627':[[12,489],],
'648':[[161,431],],
'649':[[161,346],],
'655':[[160,91],],
'696':[[246,513],],
'698':[[48,2536],],
'705':[[345,32],],
'777':[[270,69],],
'791':[[246,232],],
'792':[[164,617],[164,576],],
'819':[[30,468],],
'840':[[28,61],[384,6965],],
'845':[[190,56],[293,106],[215,98],[23,106],[183,98],],
'856':[[266,121],],
'866':[[189,419],],
'885':[[48,4244],],
'888':[[246,678],[384,7858],],
'894':[[186,125],],
'899':[[355,855],],
'904':[[257,178],[200,296],],
'912':[[50,95],],
'915':[[246,1352],],
'919':[[358,379],[261,209],],
'921':[[387,93],[311,93],[339,175],[384,9666],[62,89],[384,3691],[384,7461],],
'922':[[246,1356],],
'923':[[62,97],[225,34],[52,233],],
'926':[[335,2370],[384,6002],],
'933':[[335,3771],],
'935':[[224,208],[335,2349],],
'949':[[384,9791],[335,2339],],
'960':[[42,675],],
'972':[[30,398],],
'978':[[161,67],],
'979':[[368,81],[234,369],[95,163],[57,232],[70,326],[54,1099],[242,190],],
'981':[[30,444],],
'1006':[[160,126],],
'1034':[[96,74],],
'1101':[[242,202],],
'1103':[[39,24],],
'1109':[[174,227],],
'1115':[[340,105],[308,138],],
'1117':[[160,483],[39,827],[246,1011],[197,473],[181,644],[274,728],[335,3089],[181,486],[246,1527],[206,60],[335,2242],[384,6232],[54,513],[180,191],[180,208],],
'1123':[[197,244],[70,407],[217,333],],
'1137':[[70,545],],
'1157':[[39,358],],
'1158':[[39,379],],
'1202':[[320,41],],
'1245':[[162,288],],
'1305':[[243,112],],
'1314':[[381,536],[381,554],[242,54],[384,4563],],
'1319':[[290,91],],
'1332':[[274,746],],
'1350':[[355,1254],],
'1355':[[234,412],],
'1370':[[109,27],[378,30],],
'1378':[[321,65],],
'1398':[[335,2964],],
'1404':[[42,557],],
'1417':[[48,3569],],
'1418':[[242,97],[246,1508],[242,124],],
'1450':[[84,190],],
'1452':[[381,433],],
'1458':[[42,927],[384,1856],[384,4668],],
'1465':[[355,1271],],
'1482':[[42,1227],],
'1608':[[209,267],],
'1630':[[48,756],[306,176],],
'1668':[[48,1102],[48,1066],],
'1672':[[209,240],],
'1673':[[289,60],[315,60],],
'1747':[[48,1936],],
'1778':[[162,85],[306,1090],],
'1808':[[48,2618],],
'1809':[[84,96],],
'1849':[[118,112],],
'1878':[[48,4739],],
'1955':[[274,621],[274,150],],
'1963':[[266,244],[345,35],],
'1967':[[164,315],],
'2033':[[49,427],],
'2051':[[321,362],],
'2073':[[54,92],],
'2078':[[53,100],],
'2093':[[246,1700],],
'2102':[[54,156],],
'2148':[[345,59],[395,62],],
'2212':[[83,99],],
'2220':[[247,67],[270,66],],
'2230':[[54,1267],],
'2272':[[355,457],],
'2298':[[62,87],],
'2301':[[151,47],[389,47],],
'2342':[[384,6680],],
'2354':[[128,118],[355,618],[322,120],],
'2368':[[385,50],],
'2458':[[84,40],],
'2462':[[153,71],],
'2476':[[84,380],],
'2484':[[326,34],],
'2495':[[188,146],],
'2591':[[161,51],],
'2610':[[96,181],[160,423],],
'2616':[[98,34],],
'2630':[[160,53],],
'2671':[[384,4445],[331,250],],
'2781':[[186,101],],
'2826':[[125,149],],
'2836':[[214,101],[160,604],],
'2862':[[359,106],],
'2911':[[142,169],],
'2994':[[153,898],],
'2998':[[153,1038],],
'3008':[[274,582],[193,90],[352,90],],
'3041':[[186,497],],
'3084':[[160,611],],
'3102':[[384,7015],],
'3125':[[161,443],],
'3140':[[266,335],],
'3598':[[317,91],],
'3631':[[384,7224],],
'3681':[[189,549],],
'3708':[[200,261],],
'3770':[[355,476],],
'3802':[[232,89],],
'3822':[[242,147],],
'3862':[[246,307],],
'3875':[[246,566],],
'3887':[[246,1195],],
'3913':[[355,875],],
'3954':[[246,1800],],
'4050':[[335,3432],],
'4178':[[306,1169],],
'4246':[[331,163],],
'4474':[[355,214],],
'4533':[[384,6537],],
'4915':[[384,3664],],
'5110':[[391,52],],
'5252':[[396,152],],
},{'16':[[49,119],[381,47],],
'23':[[251,255],],
'39':[[79,29],[48,3599],[4,32],[279,28],[318,28],[222,34],[52,97],[392,26],],
'203':[[355,826],],
'259':[[384,2958],],
},{'15':[[266,128],[246,478],],
'77':[[54,1224],[318,34],[79,35],[121,48],[222,40],[54,1417],[279,34],[4,38],[392,32],],
'154':[[384,7504],],
'575':[[48,3684],[48,4371],],
},{'2':[[355,132],],
'16':[[242,100],[214,246],],
'18':[[153,1036],],
'28':[[49,184],],
'37':[[161,209],],
'38':[[84,389],],
'41':[[49,211],],
'47':[[164,74],],
'48':[[89,408],],
'57':[[142,87],],
'61':[[246,1854],],
'62':[[214,257],],
'63':[[246,87],[249,255],[186,380],[246,328],],
'67':[[49,284],[30,54],[164,161],[162,57],],
'73':[[160,304],[113,40],[395,134],],
'77':[[162,339],],
'83':[[313,297],],
'140':[[217,408],],
'147':[[395,122],[162,330],[335,1009],[335,1017],[186,155],[384,9013],[384,3408],[39,187],[161,131],],
'152':[[368,52],],
'167':[[381,409],[355,74],],
'199':[[162,353],[181,120],],
'201':[[4,39],[318,35],[222,41],[392,33],[279,35],[79,36],],
'206':[[172,96],],
'225':[[189,428],],
'227':[[246,815],],
'232':[[101,69],],
'250':[[344,248],[363,751],],
'277':[[363,651],[49,409],[199,44],],
'281':[[162,322],],
'285':[[189,616],],
'297':[[384,3075],],
'299':[[246,1119],],
'301':[[384,9194],],
'356':[[54,743],[95,310],],
'373':[[277,927],],
'419':[[160,291],],
'436':[[200,187],],
'460':[[187,107],[189,352],[137,138],[146,89],[148,105],[284,123],[135,98],[283,94],[209,153],[210,98],[213,310],[180,110],[10,301],[57,162],[270,159],[269,122],[178,175],[229,116],[234,302],[173,183],[100,93],[394,96],[36,94],[332,96],[89,256],[34,87],[20,113],[86,155],[247,157],[285,86],],
'462':[[49,199],],
'491':[[200,194],],
'576':[[243,142],[355,287],[344,158],],
'595':[[308,58],[307,80],[340,58],[341,80],],
'613':[[246,319],],
'698':[[84,223],],
'792':[[313,282],[249,134],],
'876':[[249,293],],
'904':[[68,87],],
'921':[[160,287],[30,130],[242,94],],
'941':[[277,920],],
'979':[[384,6270],],
'1005':[[160,392],],
'1006':[[160,625],],
'1007':[[305,71],],
'1113':[[395,100],],
'1117':[[121,537],[39,423],[384,7977],[335,521],],
'1128':[[160,596],[160,298],],
'1168':[[181,341],],
'1170':[[384,6504],],
'1208':[[39,686],],
'1213':[[39,695],],
'1301':[[384,5994],],
'1304':[[344,56],],
'1319':[[355,87],],
'1362':[[217,376],],
'1433':[[217,434],],
'2228':[[181,64],],
'2313':[[277,938],],
'2691':[[150,117],[103,117],],
'2743':[[363,671],[199,64],],
'2764':[[121,241],],
'2778':[[160,294],],
'3079':[[160,510],],
'5074':[[384,6436],],
},{'7':[[142,80],[342,294],],
'9':[[342,226],],
'43':[[76,63],[75,132],[75,80],[181,759],[84,33],[12,50],[321,211],[321,192],[246,613],[321,170],[164,71],[162,124],[321,141],[161,570],[321,68],[161,539],[321,276],[308,72],[252,33],[253,173],[339,185],[307,237],[357,43],[39,231],[274,207],[274,219],[274,235],[274,249],[341,237],[274,643],[83,43],[303,77],[352,135],[121,507],[121,43],[53,135],[193,135],[82,383],],
'48':[[181,907],],
'56':[[274,121],[159,155],[249,55],],
'63':[[189,599],[84,244],[227,129],[213,442],[353,147],[84,517],],
'64':[[384,759],],
'67':[[89,223],[368,46],[246,1621],[246,266],[99,268],[331,187],[181,573],[305,64],[303,103],[186,71],[186,148],[42,758],[381,442],],
'82':[[12,525],],
'84':[[331,40],[394,93],[332,88],[332,93],[209,150],[57,159],[57,154],[210,90],[210,95],[213,302],[86,147],[86,152],[189,349],[87,84],[54,132],[89,248],[89,253],[189,344],[187,104],[187,99],[394,88],[340,31],[100,85],[100,90],[10,293],[308,31],[10,298],[180,107],[307,61],[180,102],[213,307],[341,61],[229,108],[229,113],[178,172],[285,83],[178,167],[285,78],[284,120],[284,115],[283,91],[283,86],[135,90],[135,95],[234,294],[137,130],[137,135],[234,299],[146,81],[146,86],[148,97],[148,102],[173,180],[173,175],[20,105],[277,341],[20,110],[247,149],[247,154],[34,79],[34,84],[36,91],[36,86],[270,156],[270,151],[269,114],[269,119],[209,145],],
'99':[[384,8199],],
'131':[[246,363],[54,175],],
'136':[[84,42],[339,66],[39,899],],
'137':[[371,76],[280,83],],
'140':[[344,50],],
'149':[[342,132],],
'167':[[355,825],[384,8510],[384,8147],[355,69],[355,363],[277,382],[246,152],],
'171':[[312,45],],
'178':[[266,92],],
'185':[[186,122],[260,86],],
'202':[[160,597],[355,88],[355,133],[242,95],[172,97],[384,3076],[279,36],[30,55],[30,131],[344,57],[384,3409],[150,118],[341,81],[103,118],[305,72],[307,81],[222,42],[181,121],[217,435],[217,409],[340,59],[308,59],[160,288],[249,256],[4,40],[392,34],[246,1855],[160,292],[186,381],[95,311],[160,511],[89,409],[318,36],[160,305],[54,744],[189,429],[335,1010],[84,224],[161,132],[189,617],[160,299],[79,37],],
'206':[[357,33],[214,242],],
'222':[[231,59],],
'224':[[384,7962],[84,238],],
'228':[[160,174],],
'232':[[49,75],[131,134],[286,25],[332,143],[209,200],[247,204],[160,506],[77,119],[101,59],[181,279],[270,206],[181,940],],
'237':[[322,189],[313,382],[84,113],[128,187],],
'241':[[246,1259],],
'245':[[6,57],],
'250':[[217,383],[227,94],],
'251':[[181,89],[16,93],[164,191],[170,174],[277,947],[74,93],[49,453],[355,126],[84,170],[30,143],[153,77],[160,241],[343,93],[49,239],[326,25],[358,37],[283,161],[99,170],[246,1114],[301,74],[355,1114],[384,2394],],
'273':[[30,13],[290,2],[171,250],[344,23],[171,283],[344,333],[381,629],[355,520],[7,92],[355,374],[162,401],[162,27],[7,59],[41,329],[381,12],[68,2],[344,358],[30,489],],
'277':[[213,401],[89,462],],
'279':[[39,498],],
'281':[[246,1917],],
'284':[[52,95],[217,365],[217,460],[384,4219],[384,2876],[384,6151],],
'289':[[84,280],],
'291':[[102,10],[7,133],[171,324],[176,287],[247,248],[176,24],[321,440],[321,34],],
'296':[[54,1296],],
'299':[[232,109],],
'317':[[153,907],[29,144],[9,144],],
'339':[[198,74],[160,622],[198,37],],
'376':[[303,188],],
'414':[[152,60],],
'438':[[363,491],],
'447':[[30,124],],
'479':[[13,33],[158,48],[115,33],[236,33],],
'489':[[227,87],[171,81],[303,68],],
'491':[[48,362],[331,493],[48,372],],
'499':[[189,446],],
'515':[[48,821],[306,241],],
'585':[[48,865],],
'593':[[257,146],],
'598':[[335,2977],[246,246],[384,339],],
'649':[[161,331],[384,5461],[161,200],],
'656':[[302,104],[322,87],],
'676':[[384,6779],],
'699':[[284,204],[189,596],[86,234],[213,439],],
'734':[[125,154],],
'739':[[48,4876],],
'776':[[113,60],],
'789':[[191,265],],
'792':[[161,308],[361,53],[313,262],],
'800':[[266,107],],
'814':[[135,215],[100,168],],
'887':[[48,309],[312,23],],
'888':[[246,909],],
'904':[[199,89],],
'918':[[189,409],],
'926':[[39,54],],
'949':[[189,426],],
'1019':[[190,38],[342,235],[384,9633],],
'1107':[[161,517],],
'1125':[[217,402],],
'1204':[[159,55],],
'1241':[[384,8840],],
'1255':[[102,141],],
'1304':[[363,386],],
'1305':[[384,6701],],
'1310':[[243,133],[355,278],[344,149],],
'1321':[[68,83],],
'1322':[[41,337],],
'1338':[[42,937],],
'1342':[[194,83],],
'1371':[[70,489],],
'1392':[[355,1333],],
'1466':[[206,38],],
'1474':[[384,8391],[384,4792],[384,7122],],
'1603':[[181,1022],],
'1714':[[246,390],],
'1757':[[48,2152],],
'1767':[[200,170],],
'1804':[[48,2578],],
'1915':[[384,4036],],
'2010':[[246,1301],[49,245],[331,498],[246,1066],],
'2050':[[53,64],[50,74],],
'2099':[[274,452],],
'2139':[[305,61],],
'2313':[[355,921],],
'2323':[[384,3128],],
'2406':[[331,47],],
'2480':[[84,469],],
'2509':[[276,51],],
'2534':[[313,221],],
'2671':[[251,165],],
'2687':[[103,67],[150,67],],
'2689':[[150,102],[103,102],],
'2693':[[103,123],[150,123],],
'2721':[[394,200],],
'2743':[[244,148],],
'2763':[[121,237],],
'2795':[[125,20],],
'2813':[[125,98],],
'3004':[[235,493],[384,5315],],
'3025':[[159,41],],
'3076':[[160,427],],
'3113':[[161,290],],
'3200':[[227,105],[171,90],],
'3273':[[179,154],[290,208],[179,1265],],
'3481':[[179,647],],
'3536':[[217,473],],
'3559':[[181,137],],
'3686':[[191,161],],
'3703':[[200,178],],
'3803':[[243,160],],
'3807':[[335,997],],
'3991':[[384,640],],
'4016':[[257,164],],
'4059':[[274,542],],
'4118':[[301,40],[366,35],[384,6074],],
'4430':[[343,79],],
'4591':[[384,1481],],
'4619':[[384,79],],
'4636':[[384,4914],],
'4891':[[384,3026],],
'4906':[[384,3267],],
'5196':[[384,9649],],
},{'43':[[54,145],],
'56':[[4,47],[79,44],[318,43],[392,41],[222,49],[279,43],],
'248':[[214,139],],
'949':[[181,808],],
},{'36':[[4,50],[363,336],[12,574],[12,578],[23,61],[355,669],[42,898],[48,3612],[52,134],[54,97],[54,149],[344,324],[339,75],[322,133],[70,670],[79,47],[82,555],[84,200],[94,48],[321,182],[128,131],[161,582],[164,58],[164,64],[164,100],[164,256],[318,46],[308,92],[164,397],[164,421],[306,941],[306,937],[183,53],[191,199],[197,438],[293,61],[290,77],[215,53],[222,52],[243,235],[246,1395],[290,73],[249,302],[279,46],[277,894],[277,884],[274,488],[274,110],[392,44],],
'364':[[29,168],[164,383],[9,168],[172,105],[251,48],],
'511':[[54,561],[70,298],],
'513':[[251,208],[266,74],[214,124],[164,299],[321,82],[95,493],[266,358],[214,42],[70,123],[249,51],[274,51],[164,643],[274,90],],
},{'2':[[74,106],[16,106],[384,6551],],
'7':[[22,30],[19,40],[38,72],[248,47],[245,48],[35,23],[19,104],[241,41],[240,20],[254,59],[377,26],[369,23],[369,451],[369,420],[369,280],[56,41],[63,43],[171,399],[354,64],[369,211],[92,94],[369,74],[211,82],[195,48],[124,34],[139,28],[254,157],[369,179],[369,113],[171,1179],[171,1115],[171,1047],[171,1016],[171,420],[171,518],[171,619],[171,670],[171,709],[171,775],[171,807],[171,876],[254,38],],
'12':[[110,21],],
'23':[[164,403],[164,519],],
'26':[[384,6557],[384,9365],[384,4726],],
'36':[[164,414],[303,168],],
'47':[[112,119],],
'49':[[357,32],[357,49],],
'59':[[49,347],],
'77':[[384,4607],[93,116],[156,113],],
'81':[[351,48],[351,50],],
'82':[[172,95],],
'84':[[49,172],],
'196':[[279,48],[79,49],[318,48],[392,46],[4,52],[222,54],],
'205':[[82,556],],
'206':[[49,48],],
'242':[[365,119],],
'285':[[384,7797],],
'294':[[49,276],[49,188],],
'321':[[214,241],],
'373':[[49,47],],
'414':[[49,398],],
'513':[[49,153],],
'1019':[[228,34],],
'1052':[[181,51],],
'1342':[[384,4082],],
'1575':[[335,450],],
'2000':[[49,160],],
'2008':[[160,245],],
'2012':[[49,443],[49,416],],
'2060':[[214,349],[214,385],],
'2268':[[160,589],],
'2912':[[384,6806],],
'3196':[[384,2942],[384,2789],],
'3632':[[312,54],],
'4899':[[384,3133],],
'5041':[[384,9606],],
'5182':[[384,9430],],
},{'15':[[4,54],[318,50],[279,50],[79,51],[392,48],[222,56],],
'19':[[246,1663],],
'36':[[214,119],[12,197],[12,598],[246,1461],[214,300],[246,360],],
'817':[[384,9149],],
'939':[[121,374],[246,1452],],
},{'14':[[22,27],],
'23':[[54,108],],
'47':[[22,1],[369,208],[354,16],[38,8],[326,55],[318,56],[4,58],[318,53],[79,55],[279,54],[265,52],[112,150],[140,41],[144,47],[222,60],[171,804],[392,52],],
'49':[[339,148],],
'63':[[334,79],],
'159':[[304,365],],
'205':[[54,150],[54,98],[277,895],[274,52],],
'271':[[274,333],],
'288':[[274,115],],
'348':[[274,29],[193,158],[274,3],[9,196],[88,50],[251,349],[307,279],[251,9],[227,323],[29,196],[171,196],[336,181],[208,16],[341,279],[352,158],],
'433':[[49,22],],
'604':[[384,990],],
'1342':[[384,4802],],
'1385':[[99,58],],
'1615':[[384,4860],],
'3598':[[181,936],],
'4298':[[384,9058],],
'4622':[[384,983],],
},{'208':[[4,59],[22,2],[38,9],[79,56],[112,151],[140,42],[144,48],[171,805],[222,61],[265,53],[279,55],[318,54],[318,57],[326,56],[354,17],[369,209],[392,53],],
},{'7':[[206,5],[354,62],[369,177],[171,773],[73,85],],
'77':[[49,509],],
'117':[[5,0],],
'213':[[5,13],],
'232':[[206,106],],
'1326':[[305,19],[73,17],],
'1494':[[287,19],[44,19],[207,19],[260,19],],
'1582':[[198,22],],
},{'7':[[5,3],[5,81],[171,771],[359,5],[369,175],[354,60],],
'117':[[206,0],],
'213':[[206,15],],
'232':[[359,154],],
},{'14':[[5,11],[14,13],[31,13],[40,11],[41,13],[60,13],[85,13],[87,13],[99,13],[122,13],[133,13],[152,13],[172,11],[194,11],[199,13],[206,13],[217,13],[223,13],[231,13],[232,11],[272,13],[291,13],[316,11],[330,11],[350,11],[351,11],[359,13],[360,11],[366,9],[379,13],[380,13],[386,13],[388,9],],
},{'23':[[49,502],[49,474],],
'26':[[49,456],],
'137':[[388,50],],
'149':[[199,99],],
'212':[[388,10],[41,14],[40,12],[31,14],[60,14],[386,14],[14,14],[87,14],[99,14],[380,14],[122,14],[133,14],[152,14],[172,12],[194,12],[199,14],[85,14],[206,14],[217,14],[223,14],[231,14],[379,14],[232,12],[272,14],[291,14],[366,10],[316,12],[330,12],[360,12],[359,14],[350,12],[351,12],[5,12],],
'231':[[338,73],[379,107],],
'326':[[48,264],],
'1049':[[82,444],],
'1278':[[355,138],],
'1341':[[104,27],],
'1741':[[386,36],[330,34],[231,36],[291,36],],
},{'7':[[5,18],],
'63':[[49,515],],
'229':[[5,57],],
'389':[[198,25],[305,22],[73,20],],
'1326':[[305,78],],
},{'12':[[384,6230],[12,352],[319,62],[48,166],[384,1796],[48,879],],
'16':[[9,127],[29,127],],
'18':[[121,326],],
'26':[[42,475],[384,5846],],
'31':[[337,104],],
'33':[[384,1448],[279,19],[54,1275],[186,439],],
'48':[[276,44],],
'63':[[384,7475],],
'75':[[48,2821],[179,1565],[179,1515],[48,3015],[306,1585],[179,1313],[179,1460],],
'77':[[292,38],[12,320],[306,264],[48,4963],[48,844],[121,282],],
'99':[[384,7720],[179,1058],[384,7771],[381,246],[384,7879],[384,3299],],
'100':[[41,270],[41,281],[41,325],[41,259],[41,248],[41,237],[41,226],[41,209],[384,2985],[191,91],[191,130],[313,268],[68,76],[199,85],[295,43],[363,742],[361,59],],
'124':[[350,100],],
'135':[[253,184],],
'139':[[335,2046],[48,1479],[70,730],[48,1517],[197,573],[179,794],],
'140':[[42,377],],
'144':[[153,1420],[335,279],[306,1208],[306,1188],[29,108],[384,6684],[9,108],[306,743],[179,1625],[54,641],[197,623],[352,81],[193,81],[70,781],[48,1418],[48,1525],],
'145':[[182,20],[274,592],],
'147':[[48,3497],[48,3954],[306,1258],[363,216],[48,1297],],
'152':[[306,369],[283,124],[209,183],[100,123],[338,50],[180,140],[57,192],[210,128],[86,185],[247,187],[9,80],[284,153],[263,54],[20,143],[27,43],[285,116],[36,124],[135,128],[34,117],[332,126],[229,146],[173,213],[137,168],[269,152],[203,56],[146,119],[270,189],[29,80],[187,137],[394,126],[148,135],],
'162':[[54,590],],
'183':[[82,476],[274,601],[170,216],],
'186':[[48,3359],[141,38],[48,2913],[48,3350],[143,33],[134,67],[48,2922],[48,4037],[48,4401],[48,4435],[306,1345],[48,1237],[48,2317],[306,634],[306,625],[313,321],[302,64],[48,2326],[300,37],[48,1310],[48,1043],[335,3082],[335,2235],[48,1034],[48,956],],
'203':[[326,26],],
'214':[[5,19],],
'215':[[153,948],[384,9943],[335,645],[48,2514],[384,7334],[153,944],[153,947],[153,949],[335,642],[153,943],[153,940],[153,941],[153,942],[153,1134],],
'217':[[384,7333],[384,9942],[384,8546],[174,154],[384,1867],[384,9863],],
'228':[[45,16],],
'237':[[48,2992],[306,709],[48,3454],],
'241':[[48,543],[48,523],],
'301':[[62,65],],
'310':[[182,17],],
'314':[[384,6607],[384,7534],[384,4620],],
'346':[[89,173],],
'389':[[361,22],[131,47],[234,49],[394,20],[135,37],[16,29],[137,47],[394,37],[218,35],[189,81],[146,36],[209,45],[148,38],[189,68],[111,27],[189,64],[100,37],[189,60],[189,52],[234,57],[10,79],[229,40],[89,60],[86,51],[213,96],[234,61],[210,36],[77,45],[75,24],[234,65],[363,45],[187,42],[74,29],[10,66],[213,83],[363,61],[20,41],[234,78],[235,48],[34,36],[332,35],[213,47],[173,29],[173,55],[213,79],[10,62],[247,50],[180,41],[178,52],[269,41],[270,50],[10,58],[213,63],[283,39],[10,50],[213,71],[284,42],[57,53],[285,36],[213,75],[36,37],],
'390':[[199,21],],
'393':[[231,21],],
'396':[[335,641],[351,19],[153,939],[153,1133],],
'401':[[291,21],[335,644],],
'409':[[359,21],],
'423':[[197,590],[70,748],],
'447':[[181,356],[181,362],],
'571':[[48,2081],[48,1889],[48,1864],[48,2087],],
'586':[[48,950],[48,2277],[48,3317],],
'660':[[14,21],],
'670':[[363,292],[201,17],],
'671':[[42,226],[153,440],[350,23],[384,6690],[253,201],[133,24],[179,748],[179,815],[54,983],[253,53],[218,186],],
'688':[[335,270],[48,1821],[54,639],[179,1616],],
'692':[[330,19],],
'780':[[384,3306],[384,3333],[384,4552],[384,4734],],
'958':[[48,2026],],
'963':[[335,3050],[335,2203],],
'969':[[320,82],],
'970':[[313,246],],
'975':[[384,1686],],
'989':[[31,21],],
'994':[[384,9199],],
'1003':[[384,7825],],
'1023':[[48,1614],],
'1044':[[378,17],],
'1109':[[186,433],],
'1120':[[384,81],],
'1125':[[381,198],[384,6835],[384,7146],[384,6847],],
'1132':[[352,39],[193,39],],
'1175':[[39,939],[39,922],[39,484],[39,973],[39,956],[39,459],],
'1176':[[179,448],[290,502],],
'1177':[[384,5567],[179,897],[303,19],[384,4623],[384,4634],[384,7625],],
'1180':[[384,7651],[381,224],[381,459],[381,280],[384,7761],[384,7212],[381,210],[381,301],[384,8097],[381,236],[174,169],],
'1211':[[179,1388],[179,1402],],
'1238':[[71,43],[382,43],],
'1255':[[48,3545],[48,3037],],
'1261':[[384,9142],],
'1265':[[384,9078],],
'1267':[[384,6060],[384,6171],[117,49],[381,587],[381,571],[384,6133],[384,6223],[384,6218],[167,49],],
'1272':[[40,19],],
'1292':[[41,81],],
'1428':[[48,2503],],
'1502':[[122,125],[122,21],],
'1531':[[48,181],],
'1533':[[48,185],],
'1534':[[48,188],],
'1547':[[48,2354],],
'1548':[[48,319],],
'1550':[[48,332],],
'1556':[[48,345],[48,2572],],
'1558':[[48,355],],
'1561':[[48,393],],
'1619':[[48,686],],
'1624':[[48,717],],
'1632':[[48,1126],],
'1654':[[48,973],],
'1655':[[48,976],],
'1656':[[48,979],],
'1657':[[48,982],],
'1658':[[48,985],],
'1659':[[48,988],],
'1660':[[48,991],],
'1661':[[48,994],],
'1662':[[48,997],],
'1665':[[48,1003],],
'1667':[[48,4482],],
'1731':[[48,3245],[48,2880],[306,590],],
'1732':[[306,593],[48,3248],[48,2883],],
'1733':[[48,3251],[48,2886],[306,596],],
'1749':[[48,1963],],
'1750':[[48,1970],[54,577],[48,1977],],
'1751':[[48,2038],],
'1752':[[48,2041],],
'1753':[[48,2045],],
'1775':[[48,2284],],
'1776':[[48,2287],],
'1777':[[48,2290],],
'1796':[[48,2510],],
'1797':[[48,2513],],
'1832':[[396,184],],
'1842':[[48,3222],[48,3524],],
'1902':[[48,3906],],
'1915':[[384,7328],],
'1949':[[335,1354],],
'1968':[[48,4829],],
'2040':[[316,19],],
'2127':[[335,1507],[335,1280],[335,1641],[335,1784],],
'2132':[[335,2272],[54,558],[54,627],[335,1535],[179,1428],[335,1629],[335,1490],[335,1826],[335,3162],[335,3334],[335,126],[335,371],[335,1390],[335,1768],[335,435],[335,1314],[335,1677],[335,1238],[335,923],[335,667],],
'2153':[[179,1275],],
'2163':[[54,1278],],
'2166':[[54,1281],],
'2179':[[153,1137],],
'2180':[[153,874],],
'2184':[[54,867],],
'2193':[[54,908],[54,947],],
'2194':[[54,912],[335,1336],],
'2231':[[54,1284],],
'2233':[[54,1305],],
'2247':[[153,876],],
'2248':[[232,19],],
'2276':[[60,21],],
'2296':[[62,91],[62,43],],
'2360':[[153,946],],
'2490':[[85,21],],
'2506':[[87,27],],
'2548':[[361,65],],
'2617':[[99,21],],
'2665':[[102,89],],
'2701':[[288,32],],
'2867':[[384,8975],],
'2929':[[152,21],],
'2954':[[380,21],],
'2967':[[153,1184],[153,980],[153,735],[153,1405],],
'2991':[[153,1356],],
'2999':[[153,1120],[153,1291],],
'3009':[[388,17],],
'3209':[[172,19],],
'3247':[[174,216],],
'3259':[[272,21],],
'3280':[[384,8802],],
'3283':[[384,8575],],
'3334':[[290,609],[179,555],],
'3386':[[384,8703],],
'3398':[[384,8661],],
'3414':[[188,295],],
'3438':[[384,8730],],
'3488':[[179,686],],
'3496':[[179,774],[179,709],],
'3508':[[179,1337],[179,1589],[179,1539],[179,853],[179,1484],],
'3518':[[179,1078],],
'3520':[[179,1105],],
'3526':[[179,1113],],
'3529':[[217,21],],
'3541':[[179,1407],],
'3542':[[179,1433],[179,1369],],
'3545':[[179,1443],],
'3664':[[188,300],],
'3667':[[188,317],],
'3671':[[384,9028],],
'3674':[[188,340],],
'3716':[[206,21],],
'3893':[[246,758],],
'4217':[[316,56],],
'4293':[[335,820],],
'4294':[[335,823],],
'4328':[[335,2015],[335,2743],],
'4329':[[335,2020],[335,2748],],
'4331':[[335,2255],[335,3102],[335,2764],[335,2049],],
'4363':[[335,2776],],
'4389':[[335,3665],],
'4391':[[335,3757],],
'4525':[[360,25],],
'4549':[[366,17],],
'4561':[[379,21],],
'4624':[[384,101],],
'4638':[[384,271],],
'4672':[[384,8909],],
'4812':[[384,1930],],
'5227':[[386,21],],
},{'7':[[5,24],],
'33':[[359,72],[368,66],[176,225],[160,579],],
'135':[[5,34],],
'147':[[73,38],[198,57],[305,42],],
'220':[[5,65],],
'1326':[[305,84],],
'1433':[[49,513],],
'4289':[[335,657],],
'4293':[[335,908],],
},{'1':[[384,5949],[384,7923],[52,299],],
'12':[[12,345],],
'15':[[335,1982],[335,2714],],
'16':[[320,126],[168,25],],
'29':[[384,9623],[384,9586],[384,9486],[384,9421],[384,9287],[384,9197],[384,9140],[384,9683],[384,9041],[384,9026],[384,8973],[384,8907],[384,8800],[384,8728],[384,9713],[384,9803],[384,8701],[384,8659],[384,9076],[384,9861],[384,9941],[384,8630],[384,8595],[384,8573],[384,8556],],
'31':[[6,71],[320,64],],
'39':[[82,334],],
'41':[[384,2357],],
'42':[[339,72],],
'50':[[218,219],],
'61':[[153,308],],
'63':[[52,335],[384,7332],],
'77':[[384,8713],[306,755],],
'83':[[266,59],],
'99':[[384,8404],[384,8364],[384,8545],[174,197],[384,8064],[384,8155],[384,8319],],
'100':[[384,2662],[384,2453],],
'124':[[350,50],[350,110],[350,30],[166,18],[350,90],[350,80],[350,70],[306,1465],[350,60],[350,20],[350,40],],
'135':[[244,194],[118,152],],
'136':[[153,84],],
'143':[[48,1350],[48,647],[48,661],],
'144':[[384,6677],],
'147':[[48,154],[48,4821],[179,1060],[48,4663],],
'152':[[54,1152],],
'174':[[48,473],],
'183':[[170,224],[384,7471],],
'196':[[54,828],[54,1341],[54,1389],[54,777],],
'203':[[335,998],],
'215':[[384,4624],[384,1931],[384,4635],],
'216':[[5,25],],
'217':[[174,182],[384,8405],[384,9288],[384,9862],[384,9684],[384,9805],[384,9804],[384,9422],[384,9714],[384,9487],[384,9587],[384,9624],],
'241':[[48,4965],],
'243':[[6,45],],
'301':[[274,305],[384,5836],[186,368],[384,3597],[274,768],],
'314':[[384,7425],[384,3314],[384,1079],],
'328':[[255,18],],
'346':[[384,5382],],
'351':[[384,9687],],
'389':[[218,39],[320,24],[318,20],[319,20],],
'404':[[348,18],],
'420':[[384,9133],[341,184],[307,184],],
'426':[[231,27],],
'439':[[384,1075],],
'450':[[291,27],],
'481':[[384,9234],],
'505':[[384,466],[384,424],],
'532':[[39,210],],
'542':[[384,5363],],
'557':[[246,850],],
'586':[[306,266],[48,2279],[48,952],[12,322],[48,846],[48,873],[121,284],[48,3319],[121,317],],
'661':[[14,27],],
'668':[[15,17],],
'671':[[350,33],[54,593],[306,1291],[133,33],[48,3959],],
'682':[[335,3525],[54,1196],[376,17],],
'688':[[386,27],],
'736':[[136,15],],
'780':[[384,4466],[384,4482],[384,7628],],
'791':[[384,5335],[217,189],[384,448],],
'807':[[21,147],],
'861':[[179,1118],],
'978':[[95,59],],
'990':[[31,27],],
'1035':[[87,33],[37,81],],
'1040':[[110,17],],
'1045':[[109,15],],
'1101':[[197,554],],
'1125':[[261,42],[384,7066],[290,428],[179,374],],
'1173':[[39,455],[39,935],],
'1177':[[384,8542],[384,5539],[384,5516],],
'1180':[[179,420],[290,474],],
'1181':[[39,480],],
'1256':[[174,167],],
'1258':[[39,918],],
'1261':[[153,345],],
'1263':[[39,952],],
'1267':[[384,5933],],
'1268':[[39,969],],
'1269':[[39,976],],
'1273':[[40,25],],
'1279':[[41,21],[48,267],],
'1293':[[41,87],],
'1305':[[179,207],[290,313],[290,261],[179,259],],
'1309':[[179,186],[290,240],[290,302],[179,248],],
'1310':[[179,165],[179,359],[290,413],[290,219],[179,237],[290,515],[290,291],[179,461],],
'1333':[[153,341],[81,60],[335,805],],
'1377':[[130,17],],
'1419':[[306,816],],
'1465':[[42,1035],],
'1531':[[48,177],],
'1547':[[48,2366],],
'1549':[[48,322],],
'1598':[[48,1563],[48,1618],],
'1620':[[48,691],],
'1625':[[48,722],],
'1684':[[232,25],],
'1698':[[48,1658],],
'1708':[[197,194],[335,204],[48,1757],[70,357],[54,332],[153,272],[179,991],[306,418],],
'1735':[[48,1847],],
'1795':[[48,2507],],
'1796':[[48,2499],],
'1829':[[153,660],],
'1918':[[48,4404],],
'1920':[[48,4441],],
'1930':[[199,27],],
'1943':[[246,1495],],
'2041':[[316,25],],
'2045':[[355,999],],
'2065':[[274,701],],
'2069':[[256,15],],
'2089':[[174,209],],
'2124':[[54,237],],
'2127':[[335,592],],
'2154':[[223,21],],
'2179':[[384,8905],],
'2185':[[54,870],],
'2203':[[54,999],[54,1048],],
'2277':[[60,27],],
'2301':[[359,27],],
'2491':[[85,27],],
'2505':[[87,21],],
'2618':[[99,27],],
'2675':[[384,3973],],
'2778':[[122,132],[122,27],],
'2869':[[133,21],],
'2870':[[133,30],],
'2871':[[133,39],],
'2872':[[133,48],],
'2873':[[133,57],],
'2874':[[133,66],],
'2985':[[153,769],],
'2995':[[153,927],],
'3000':[[153,1157],[153,1379],],
'3205':[[219,15],],
'3210':[[172,25],],
'3234':[[174,153],],
'3241':[[174,181],],
'3244':[[174,195],],
'3245':[[174,202],],
'3254':[[176,193],],
'3267':[[179,1127],],
'3282':[[290,223],[179,169],],
'3283':[[384,8558],],
'3285':[[290,227],[179,173],],
'3287':[[179,177],[290,231],],
'3289':[[179,181],[290,235],],
'3295':[[290,244],[179,190],],
'3296':[[179,194],[290,248],],
'3307':[[290,265],[179,211],],
'3308':[[179,443],[290,497],],
'3310':[[290,269],[179,215],],
'3319':[[179,239],[290,293],],
'3320':[[290,295],[179,241],],
'3321':[[290,297],[179,243],],
'3322':[[290,299],[179,245],],
'3324':[[179,250],[290,306],[290,304],[179,252],],
'3328':[[290,315],[179,261],],
'3329':[[179,263],[290,317],],
'3364':[[179,467],[290,521],],
'3370':[[290,598],[179,544],],
'3381':[[290,417],[179,363],],
'3384':[[290,421],[179,367],],
'3387':[[179,371],[290,425],],
'3388':[[290,430],[179,376],],
'3398':[[290,455],[384,8632],[179,401],],
'3406':[[179,424],[290,478],],
'3416':[[290,517],[179,463],],
'3417':[[179,465],[290,519],],
'3418':[[179,469],[290,523],],
'3431':[[188,274],],
'3444':[[179,533],[290,587],],
'3452':[[179,553],[290,607],],
'3519':[[179,1124],],
'3524':[[217,81],],
'3525':[[217,27],],
'3535':[[179,1304],],
'3692':[[194,31],],
'3717':[[206,27],],
'4009':[[257,91],],
'4042':[[272,27],],
'4098':[[380,27],],
'4170':[[306,829],],
'4235':[[330,25],],
'4447':[[351,25],],
'4524':[[360,19],],
'4550':[[366,23],],
'4562':[[379,27],],
'4581':[[384,5704],],
'4667':[[384,3728],],
'4668':[[384,426],],
'4669':[[384,450],],
'4673':[[384,468],],
'4701':[[384,9080],],
'4748':[[384,8322],],
'4810':[[384,1866],],
'4849':[[384,2466],],
'5094':[[384,7289],],
'5163':[[384,9001],],
'5229':[[388,23],],
},{'7':[[5,30],],
'231':[[5,78],],
},{'218':[[5,31],],
'663':[[14,39],],
'991':[[31,33],],
'1274':[[40,31],],
'1298':[[48,269],[41,117],],
'2281':[[60,52],],
'2492':[[85,33],],
'2508':[[87,45],],
'2622':[[99,51],],
'2780':[[122,51],],
'2875':[[133,75],],
'2937':[[152,57],],
'3211':[[172,31],],
'3693':[[194,37],],
'3718':[[206,33],],
'3754':[[217,129],],
'3795':[[231,33],],
'3800':[[232,43],],
'4043':[[272,33],],
'4108':[[291,33],],
'4218':[[316,62],],
'4236':[[330,31],],
'4450':[[351,43],],
'4520':[[359,33],],
'4526':[[360,31],],
'4551':[[366,29],],
'4573':[[379,103],],
'4579':[[380,33],],
'5228':[[386,33],],
'5233':[[388,47],],
},{'7':[[394,121],[389,28],[359,87],[332,121],[319,32],[9,74],[305,51],[20,138],[285,111],[284,148],[29,74],[283,119],[270,184],[269,147],[89,205],[247,182],[34,112],[36,119],[229,141],[210,123],[209,178],[198,67],[187,132],[180,135],[173,208],[89,281],[57,187],[151,28],[148,130],[146,114],[137,163],[135,123],[131,122],[122,91],[122,86],[122,79],[73,51],[100,118],[93,72],[77,107],[93,61],[86,180],],
'12':[[253,167],[5,36],],
'13':[[368,23],],
'15':[[160,533],],
'19':[[57,67],[160,574],[86,65],[160,541],[173,74],[368,89],[160,455],[368,68],[29,120],[160,338],[160,264],[160,328],[122,68],[193,95],[160,187],[160,160],[160,145],[131,75],[160,135],[9,120],[137,61],[352,95],],
'23':[[359,61],[62,58],[62,52],[151,44],[5,64],[181,995],[181,273],[5,69],[359,101],[181,263],[160,102],[359,119],[359,128],[362,40],[362,46],[160,207],[284,201],[207,33],[44,63],[73,63],[368,37],[176,256],[176,247],[160,447],[176,219],[160,470],[269,221],[160,521],[372,28],[372,33],[176,189],[176,86],[160,634],[260,97],[260,53],[213,460],[389,44],[5,42],[189,621],],
'26':[[304,194],],
'34':[[198,59],],
'39':[[162,356],],
'47':[[384,1839],],
'48':[[107,20],[93,55],[347,24],[347,42],],
'63':[[73,40],],
'67':[[274,513],[181,234],[160,412],],
'144':[[218,281],],
'149':[[259,37],[33,39],[45,28],[259,30],[163,58],[163,39],[33,32],[163,63],],
'154':[[160,226],],
'162':[[45,39],[359,152],[66,35],[73,28],[194,117],[26,52],[362,74],[198,95],[206,104],[122,146],[62,140],[305,89],[101,82],[5,84],[354,2],[151,55],[152,228],[171,745],[73,88],[160,6],[241,17],[33,57],[163,81],[274,505],[368,115],[160,705],[259,55],[160,701],[369,149],[265,43],[265,49],[389,55],[319,69],[22,7],],
'215':[[54,984],],
'216':[[305,43],],
'225':[[33,26],],
'230':[[359,77],],
'231':[[259,24],],
'248':[[186,398],[186,258],],
'275':[[160,372],],
'290':[[213,269],],
'295':[[160,636],],
'340':[[163,26],],
'348':[[274,590],[352,34],[274,588],[193,34],],
'354':[[189,611],[189,606],[218,364],[181,84],[213,449],[213,454],],
'360':[[305,29],],
'409':[[359,54],],
'456':[[213,265],],
'462':[[394,64],[44,47],[287,41],],
'464':[[45,22],],
'546':[[62,71],],
'880':[[181,885],],
'1006':[[62,132],[160,478],],
'1098':[[82,98],[82,64],[82,78],[82,131],[82,117],[82,47],],
'1099':[[82,227],[82,215],],
'1101':[[331,264],],
'1839':[[323,19],],
'1868':[[335,876],],
'1991':[[160,351],],
'2036':[[160,21],],
'2194':[[54,1033],],
'2297':[[62,123],[319,25],],
'2301':[[359,147],],
'2629':[[160,586],],
'2675':[[384,7055],],
'2994':[[153,1102],],
'3057':[[160,47],],
'4298':[[335,879],],
},{'7':[[319,48],],
'23':[[44,32],[181,197],[44,88],[73,24],[287,68],[122,56],[260,80],[287,71],],
'33':[[198,89],],
'175':[[160,57],],
'220':[[305,52],[198,68],[73,52],[359,120],[5,37],],
'224':[[5,73],],
'231':[[181,825],[148,66],],
'238':[[218,258],[181,240],[122,112],],
'354':[[44,58],[368,106],[260,48],],
'513':[[160,462],[218,372],],
'554':[[73,72],],
'921':[[160,332],],
'2034':[[384,9657],],
'2268':[[272,45],[176,244],],
},{'63':[[28,41],],
'150':[[116,75],],
'221':[[5,38],],
'253':[[6,80],],
'285':[[231,58],],
'391':[[116,67],],
'427':[[89,132],[10,145],[234,146],[189,196],[213,154],],
'430':[[42,286],],
'849':[[384,7300],],
'878':[[384,3040],[384,3161],],
'1921':[[48,4004],],
'2352':[[160,344],],
'3060':[[160,60],],
},{'7':[[5,67],[82,459],],
'12':[[285,48],[181,933],[176,254],[368,59],[5,40],[160,185],[160,572],],
'19':[[285,40],],
'23':[[285,139],[160,199],],
'39':[[29,150],[9,150],[5,62],[160,416],[274,554],],
'63':[[218,278],[372,26],[187,193],],
'164':[[368,100],],
'225':[[207,46],],
'244':[[287,49],],
'305':[[176,217],],
'784':[[285,130],],
'1498':[[44,38],],
},{'2':[[232,56],[84,235],[12,370],[30,84],[174,106],[48,3651],[243,266],[277,376],[277,116],[258,25],[355,681],[179,963],],
'3':[[153,717],],
'12':[[335,220],[48,2684],],
'37':[[48,86],[306,76],[306,50],],
'48':[[69,43],[36,146],[48,1456],[343,89],[48,1500],[306,1604],[306,448],[306,1572],[306,475],],
'49':[[342,141],[49,94],[49,103],[181,737],[342,129],],
'67':[[37,52],[246,728],[188,29],[48,2544],[355,651],[246,771],[335,3672],[335,3629],[54,1440],[246,777],[381,286],[246,1162],[48,48],[335,2403],[164,344],[162,144],[321,86],[84,94],[242,178],[160,147],[381,507],[153,669],[246,940],[218,299],[331,485],],
'81':[[266,252],],
'136':[[243,167],],
'147':[[48,4015],],
'186':[[153,287],],
'199':[[335,916],[93,68],[153,1012],[335,1055],[160,248],[84,83],[80,112],[162,289],[335,2265],[65,105],[65,99],[174,135],[335,3155],[306,984],[54,157],[49,428],[322,121],[48,3739],[296,146],[290,92],[277,759],[344,179],[331,164],[355,215],[331,251],[266,130],[355,262],[257,179],[246,1801],[355,1272],[246,1528],[246,1357],[246,1199],[246,1196],[381,434],[246,1012],[246,1001],[42,676],[384,2592],[42,322],[384,5674],[181,781],[186,126],[384,7859],[39,757],[246,679],[246,170],[39,25],[176,166],[243,113],[384,9003],[243,80],[5,72],[128,119],[5,45],[214,102],[200,297],],
'251':[[384,4338],[246,1432],[246,1546],[246,1569],[315,189],[246,1582],[335,2444],],
'271':[[42,1016],[266,210],],
'273':[[246,1219],[331,450],[339,134],],
'290':[[153,459],[48,4546],],
'298':[[48,1492],[48,2598],[153,407],[48,1448],[48,1387],],
'306':[[179,995],[48,504],[48,1347],],
'374':[[335,46],[335,48],[335,291],[335,3184],[248,27],],
'428':[[116,29],[231,53],[231,62],[116,57],[84,237],],
'470':[[335,245],[54,363],[179,1020],[48,519],],
'508':[[48,3618],[306,943],],
'554':[[335,218],],
'572':[[188,256],[174,219],[188,260],[174,214],[174,205],[290,192],[290,195],[290,326],[290,368],[290,561],[290,614],[179,272],[174,191],[179,138],[174,177],[174,172],[179,1507],[174,163],[174,158],[179,1557],[188,277],[188,281],[188,298],[188,302],[188,324],[188,338],[179,314],[188,342],[179,507],[188,320],[179,1248],[179,560],[179,1245],[246,1252],[174,200],[179,141],[174,186],],
'716':[[164,605],],
'838':[[197,401],[70,603],],
'948':[[384,5898],],
'1101':[[355,1357],[42,381],[235,374],[42,144],],
'1194':[[57,297],],
'1229':[[197,215],[70,378],],
'1305':[[41,147],],
'1314':[[381,611],],
'1398':[[277,363],],
'1591':[[153,468],[179,1470],[179,1525],[179,1575],[179,1323],],
'1813':[[48,4530],],
'1915':[[384,8678],],
'1971':[[153,285],],
'1973':[[48,4907],],
'2081':[[54,338],],
'2589':[[161,173],[384,7961],],
'2794':[[277,706],],
'4038':[[266,150],],
},{'15':[[73,74],],
'16':[[5,75],[269,216],[394,194],[247,262],[189,608],[207,45],[213,451],[198,87],[246,1869],[30,335],[352,60],[36,171],[36,191],[213,484],[39,417],[42,1320],[246,1390],[213,361],[48,2705],[48,4636],[194,46],[50,105],[189,404],[54,723],[218,235],[270,226],[54,1357],[164,104],[162,107],[315,171],[274,568],[153,905],[189,625],[189,637],[284,196],[95,290],[193,60],[153,761],[99,209],[102,158],[289,171],[153,124],[153,106],],
'31':[[145,58],[293,109],[95,319],[95,305],[190,61],[95,93],[235,392],[306,71],[160,614],[317,94],[57,256],[180,196],[181,344],[224,79],[183,101],[54,738],[335,1552],[215,101],[39,259],[29,95],[23,109],[9,95],[301,65],[212,60],],
'34':[[153,1409],],
'39':[[190,75],[269,203],[321,396],[49,181],[243,203],[247,233],[247,255],[284,183],],
'63':[[23,113],[183,105],[215,105],[293,113],],
'147':[[44,40],],
'186':[[44,61],[362,57],[260,51],],
'203':[[189,410],[394,201],[29,145],[274,543],[189,618],[9,145],[198,75],[181,908],[189,427],],
'224':[[5,46],[335,3673],[335,3630],[160,148],[153,670],],
'340':[[160,466],],
'346':[[160,356],],
'349':[[274,607],],
'353':[[9,114],[368,96],[29,114],],
'370':[[270,245],],
'476':[[289,82],[315,82],],
'800':[[70,57],[384,4785],],
'921':[[359,92],[368,73],],
'926':[[54,816],],
'1003':[[33,25],],
'1131':[[53,85],[352,108],[193,108],],
'1228':[[189,602],[213,445],],
'1244':[[84,155],],
'1911':[[102,169],],
'2295':[[62,94],[62,39],],
'2479':[[359,140],],
'2486':[[84,512],],
},{'7':[[85,42],],
'23':[[214,269],[153,778],[153,701],[54,538],[153,680],[251,195],[5,50],[83,48],],
'217':[[153,1158],[153,1380],],
'313':[[70,174],[197,118],[54,279],[335,90],[48,231],[153,198],[179,641],[306,158],],
'333':[[54,305],[197,127],[48,1706],[153,204],[179,903],[70,246],[306,388],[335,147],],
'2995':[[153,953],],
},{'16':[[174,119],],
'19':[[42,653],[246,546],[49,86],],
'23':[[246,1138],[246,334],[331,25],],
'67':[[340,114],[308,147],[331,436],[52,156],[274,698],],
'130':[[235,419],],
'149':[[384,1302],[113,45],[186,453],[229,186],],
'154':[[289,56],[315,56],],
'155':[[100,104],[89,267],[135,109],[137,149],[86,166],[146,100],[148,116],[332,107],[285,97],[284,134],[283,105],[57,173],[173,194],[381,505],[178,186],[180,121],[270,170],[269,133],[36,105],[187,118],[247,168],[189,363],[34,98],[394,107],[209,164],[210,109],[10,312],[214,267],[229,127],[20,124],[234,313],[213,321],],
'224':[[243,114],],
'226':[[5,51],],
'443':[[395,142],[246,326],[277,336],[189,172],[246,814],],
'454':[[189,457],],
'546':[[335,457],],
'608':[[243,220],[355,766],[344,84],[335,2407],],
'635':[[277,526],],
'869':[[389,41],[39,93],[121,500],[142,166],[151,41],],
'907':[[30,92],],
'929':[[30,160],[189,442],],
'931':[[368,57],],
'953':[[153,149],],
'995':[[355,1230],[246,739],],
'1249':[[160,583],],
'1448':[[57,284],],
'1958':[[314,91],],
'2042':[[160,570],],
'2337':[[355,778],[363,525],[243,259],[384,8226],[70,211],],
'2500':[[160,276],],
'2575':[[95,175],[181,583],],
'2766':[[121,329],],
'3614':[[186,221],],
},{'1':[[49,82],[88,30],[369,153],[45,36],[160,16],[160,1],[171,749],[354,98],[354,38],],
'3':[[160,173],],
'7':[[93,23],[305,36],[10,326],[73,32],[369,205],[234,327],[218,251],[93,29],[368,29],[171,801],[189,377],[354,90],[178,200],],
'12':[[160,425],],
'14':[[354,25],],
'23':[[260,36],[181,200],[247,251],[181,833],[77,136],[131,149],],
'26':[[198,44],],
'89':[[160,35],[160,81],[265,27],[359,44],[362,24],[62,26],[5,55],],
'93':[[100,30],[10,72],[131,40],[20,34],[332,28],[135,30],[285,29],[137,40],[284,35],[146,29],[283,32],[148,31],[270,43],[269,34],[153,921],[34,29],[36,30],[247,43],[234,71],[229,33],[89,53],[213,89],[210,29],[209,38],[198,18],[86,44],[189,74],[77,38],[187,35],[57,46],[180,34],[178,45],[173,48],[394,30],],
'117':[[265,0],],
'122':[[394,15],[62,15],[180,15],[77,15],[10,15],[131,15],[57,15],[187,15],[362,15],[189,15],[20,15],[86,15],[100,15],[27,15],[135,15],[178,15],[34,15],[209,15],[89,15],[210,15],[137,15],[213,15],[285,15],[146,15],[284,15],[218,13],[148,15],[229,15],[283,15],[234,15],[270,15],[269,15],[332,15],[36,15],[247,15],[173,15],],
'128':[[163,20],[45,18],[259,18],[33,20],],
'139':[[335,629],],
'144':[[213,333],],
'215':[[10,63],[213,76],[189,65],[234,62],],
'217':[[153,928],],
'228':[[160,17],],
'232':[[319,71],],
'233':[[73,15],],
'328':[[265,12],],
'339':[[335,810],],
'348':[[153,1347],],
'456':[[189,320],[234,270],[10,269],],
'648':[[160,41],],
'829':[[319,15],],
'863':[[368,17],],
'998':[[33,17],],
'999':[[163,17],],
'1000':[[259,15],],
'1007':[[305,17],],
'1029':[[54,525],],
'1056':[[44,17],],
'1060':[[287,17],],
'1077':[[207,17],],
'1080':[[260,17],],
'1101':[[335,572],],
'1333':[[335,808],],
'1423':[[153,1283],[153,1112],],
'1501':[[45,15],],
'1651':[[335,813],],
'2014':[[372,17],],
'2247':[[153,1122],],
'2291':[[389,17],],
'2520':[[89,44],],
'2925':[[151,17],],
'2991':[[153,865],],
'3186':[[181,232],],
'4294':[[335,842],],
},{'7':[[171,701],[254,121],[38,52],[254,30],[56,33],[369,412],[369,260],[369,165],[92,58],[248,39],[245,32],[241,33],[369,105],[171,391],[171,482],[171,654],[354,50],[171,761],[171,856],[171,1008],[369,58],[211,46],],
'216':[[359,73],],
'228':[[5,56],],
'232':[[316,69],],
'299':[[232,51],],
'339':[[122,62],],
'369':[[99,62],],
'415':[[133,81],],
'421':[[31,38],],
'609':[[379,116],],
'708':[[388,53],],
'937':[[85,39],],
'1023':[[87,54],],
'1114':[[217,142],],
'1300':[[41,123],],
'1466':[[206,85],],
'1513':[[360,37],],
'2280':[[60,66],],
'2416':[[172,40],],
'2695':[[350,140],],
'2773':[[194,59],],
'2940':[[152,72],],
},{'7':[[5,59],[194,62],[31,41],[388,56],[316,110],[87,71],[342,103],[359,76],[206,88],],
'12':[[384,9411],[94,31],[42,1316],],
'13':[[384,3630],],
'15':[[384,4906],[304,237],],
'19':[[336,67],[321,345],[42,511],],
'20':[[384,7987],],
'23':[[341,65],[340,48],[340,35],[355,1186],[70,264],[355,1298],[321,198],[42,1081],[356,26],[321,150],[37,76],[384,6462],[110,30],[152,171],[308,35],[160,538],[161,550],[307,65],[164,595],[164,627],[176,77],[176,106],[42,749],[293,67],[283,241],[183,67],[274,161],[190,21],[266,77],[23,67],[197,145],[197,542],[308,48],[215,67],[251,316],[390,138],],
'33':[[48,1717],[54,314],[335,162],[334,42],[179,912],[280,44],[188,238],],
'36':[[344,195],],
'54':[[179,937],],
'59':[[249,236],],
'128':[[278,19],],
'140':[[384,4853],[218,189],[384,8054],[42,1307],[384,4893],[42,1290],[42,817],[70,205],[384,8030],],
'147':[[384,9760],],
'164':[[99,184],],
'165':[[384,7510],],
'195':[[304,397],],
'217':[[320,127],],
'224':[[42,145],[42,382],[232,57],[42,1017],[355,1358],],
'225':[[218,236],],
'256':[[42,472],],
'374':[[384,6411],],
'420':[[339,109],[54,493],[232,84],[52,240],[84,227],[321,208],[355,728],[86,248],[246,424],[384,7763],[164,455],[358,314],[176,123],[301,43],[381,238],[381,292],[384,1357],[384,1876],[96,193],[246,401],[274,442],[335,1192],[384,6173],[384,6077],[261,154],],
'481':[[384,8882],[384,9747],],
'710':[[155,37],],
'926':[[363,279],[42,692],[313,189],],
'995':[[257,79],[32,20],],
'1027':[[190,32],],
'1101':[[99,67],],
'1334':[[42,619],],
'1342':[[274,378],],
'2323':[[384,3180],],
'5065':[[384,6226],],
},{'2':[[379,106],],
'3':[[296,121],],
'7':[[379,207],[379,192],],
'15':[[170,226],[306,371],[384,7473],[282,30],],
'23':[[203,68],[339,261],[203,52],[203,41],[263,96],[339,237],[263,39],[339,218],[181,824],[263,50],[339,151],[339,137],[339,64],[44,112],[338,46],[321,297],[276,69],[338,35],[321,321],],
'40':[[384,7609],],
'77':[[122,136],[122,94],],
'89':[[52,147],[148,65],[370,54],[304,265],[61,80],[339,178],[70,304],[70,235],[186,243],[70,194],[67,47],[102,108],],
'130':[[379,120],],
'152':[[5,77],[122,140],[160,468],[101,39],],
'154':[[161,566],[304,358],[321,166],[363,435],[364,41],],
'160':[[287,91],],
'220':[[54,1034],[54,985],],
'225':[[362,58],],
'238':[[335,3020],[335,2168],],
'411':[[122,120],],
'546':[[379,114],],
'632':[[339,55],],
'647':[[359,142],],
'728':[[82,439],[203,30],[82,449],[338,25],[287,59],[82,432],[44,72],[263,29],],
'838':[[306,1599],[306,1250],[306,491],[70,196],[70,237],[306,1567],],
'880':[[181,850],[276,23],[276,40],[364,23],],
'1003':[[259,23],],
'1105':[[384,2126],],
'1302':[[384,2741],],
'1506':[[73,83],],
'1591':[[48,4542],[54,549],[54,618],],
'1592':[[48,1360],[153,403],[153,455],[153,442],],
'1711':[[179,975],],
'2008':[[338,66],],
'2042':[[338,78],[102,49],],
'3712':[[203,76],],
'3918':[[276,58],],
'4036':[[266,126],],
'4207':[[313,351],],
'4399':[[338,72],],
'4604':[[384,32],],
'4717':[[384,799],],
'4811':[[384,2096],],
},{'23':[[181,920],],
'26':[[181,336],],
'34':[[160,171],],
'49':[[234,276],[10,275],[189,326],],
'155':[[394,152],[152,223],],
'160':[[209,199],[77,118],[332,142],[247,203],[181,278],[270,205],[181,939],[286,24],[131,133],],
'162':[[49,74],],
'220':[[122,147],[152,229],[160,7],[101,83],[368,116],[369,150],[160,706],[163,82],[171,746],[389,56],[362,75],[73,89],[66,36],[62,141],[151,56],[45,40],[194,118],[198,96],[206,105],[33,58],[359,153],[26,53],[241,18],[22,8],[259,56],[265,44],[265,50],[160,702],[5,85],[354,3],[305,90],[319,70],],
'249':[[394,166],],
'275':[[101,58],],
'340':[[101,68],[101,22],],
'408':[[160,505],],
'836':[[304,342],],
'1507':[[214,61],],
'2010':[[181,411],],
'3551':[[316,68],],
'3570':[[181,296],],
},{'7':[[369,181],[305,3],[305,86],[354,66],[171,777],],
'12':[[33,29],[259,27],[44,98],[45,25],[163,36],],
'33':[[359,122],],
'117':[[73,0],],
'152':[[49,447],[160,223],],
'221':[[181,241],],
'232':[[5,86],],
'1225':[[160,119],],
'1493':[[73,14],],
},{'7':[[370,5],[25,3],[25,94],[369,133],[241,61],[171,729],],
'117':[[6,0],],
'123':[[6,16],],
'178':[[370,68],],
},{'7':[[6,3],[6,96],[171,727],[369,131],[300,5],[241,59],],
'117':[[370,0],],
'173':[[370,16],],
'178':[[300,57],],
'3487':[[179,1606],],
'3500':[[179,1608],],
},{'7':[[93,35],],
'12':[[28,24],],
'15':[[335,1334],[48,2043],[54,910],],
'48':[[48,4827],],
'51':[[197,200],[70,363],],
'88':[[335,1104],],
'92':[[306,373],[335,124],[179,684],[306,1120],[306,1058],[306,352],],
'93':[[335,2733],[205,18],[237,18],[48,2197],[335,2001],[48,904],],
'122':[[396,15],[236,15],[302,15],[373,15],[363,15],[13,15],[170,15],[158,13],[346,15],[134,15],[237,15],[191,15],[235,13],[115,15],[117,15],[28,15],[72,15],[118,15],[205,15],[233,15],[244,15],[349,15],],
'124':[[48,971],],
'137':[[335,1581],[335,1569],],
'139':[[218,32],[235,45],[213,60],[234,46],[189,49],[10,47],[363,42],[363,58],[335,2013],[213,44],],
'149':[[335,2903],],
'150':[[335,3318],],
'165':[[253,23],[284,22],[269,21],[209,23],],
'171':[[25,17],],
'174':[[48,3285],[6,20],[306,886],[365,65],[61,19],[365,106],[48,495],[48,458],[306,843],[48,2765],],
'181':[[300,17],],
'199':[[48,4321],],
'215':[[48,974],[48,977],[48,980],[48,983],[48,986],[335,2047],[48,2288],[48,2285],[48,2039],[48,998],[48,995],[48,989],[48,992],[335,821],],
'237':[[48,3376],],
'241':[[54,1192],],
'247':[[143,17],],
'277':[[48,3415],[48,2955],],
'285':[[335,355],[197,562],[70,719],],
'372':[[197,550],],
'383':[[189,25],[213,22],[89,22],[10,25],[234,24],],
'384':[[189,27],],
'385':[[189,35],[10,29],[234,28],],
'412':[[306,1066],[306,360],[134,25],[322,30],[302,26],[128,29],],
'436':[[48,4185],[306,1525],],
'438':[[235,20],[54,854],[196,20],[178,24],[116,20],[156,21],[250,26],[363,24],[367,24],[233,24],],
'445':[[75,19],],
'447':[[55,23],[335,772],[54,1215],[270,23],[335,1365],[335,1919],[247,23],[335,3224],],
'452':[[209,27],],
'479':[[306,1494],[48,4259],[48,4152],],
'489':[[306,657],],
'502':[[70,577],[197,377],],
'550':[[335,3590],],
'586':[[48,2282],],
'682':[[335,1342],],
'696':[[179,667],],
'736':[[48,4581],],
'744':[[346,17],],
'761':[[298,17],],
'791':[[118,21],],
'815':[[179,1135],],
'883':[[179,783],],
'887':[[335,3565],[335,489],[335,711],[335,3208],[335,309],[335,1155],],
'958':[[48,2036],],
'960':[[335,800],],
'1011':[[127,17],],
'1016':[[335,590],],
'1029':[[335,1779],],
'1101':[[72,19],[191,19],[396,19],],
'1123':[[54,1125],],
'1211':[[70,702],[54,368],],
'1255':[[48,2097],[48,1955],],
'1279':[[320,21],],
'1326':[[372,19],[335,858],],
'1333':[[335,1710],],
'1476':[[335,1412],],
'1519':[[48,4116],],
'1532':[[306,1437],],
'1582':[[48,1957],],
'1588':[[48,526],],
'1589':[[384,3079],],
'1600':[[48,3070],],
'1602':[[48,4273],[48,4570],],
'1645':[[48,2936],[48,3373],],
'1664':[[48,1001],],
'1667':[[70,672],],
'1704':[[141,17],],
'1757':[[48,2168],],
'1762':[[48,2614],],
'1798':[[48,2601],],
'1811':[[54,438],],
'1826':[[213,26],[89,26],],
'1828':[[313,32],[170,20],],
'1832':[[396,21],],
'1833':[[48,2974],[48,3433],],
'1843':[[70,516],],
'1846':[[322,26],[306,381],[306,1128],[128,25],[306,1138],],
'1851':[[306,688],],
'1853':[[48,4355],],
'1873':[[306,1318],[48,3987],],
'1874':[[306,1322],[48,3991],],
'1875':[[48,3995],[306,1326],],
'1876':[[48,3999],[306,1330],],
'1906':[[306,1557],[48,3902],[306,1235],],
'1916':[[48,4585],],
'1917':[[306,1449],[48,4128],],
'1918':[[48,4411],],
'1920':[[48,4445],],
'1924':[[48,4226],],
'1945':[[48,4267],],
'1956':[[335,3233],[335,1894],],
'1957':[[48,4447],],
'2126':[[54,294],[179,762],[179,1149],[54,1069],[335,828],],
'2127':[[335,2795],],
'2128':[[54,1073],[54,298],],
'2130':[[179,1031],],
'2131':[[335,1436],[335,1423],[335,3510],],
'2132':[[335,1502],[335,2774],[335,1636],[335,1275],[335,835],],
'2161':[[54,1218],],
'2173':[[54,844],],
'2174':[[54,846],],
'2176':[[54,850],],
'2179':[[363,20],[218,18],[54,859],[156,26],[367,29],[250,31],[196,25],[296,20],],
'2184':[[54,1005],],
'2190':[[54,902],],
'2192':[[54,906],],
'2194':[[54,960],[335,1348],],
'2209':[[54,969],],
'2318':[[66,14],],
'2329':[[197,504],],
'2332':[[335,1559],],
'2335':[[70,183],],
'2353':[[313,23],[218,22],],
'2379':[[75,21],],
'2403':[[80,20],[309,18],],
'2415':[[306,1151],],
'2461':[[296,22],],
'2521':[[89,46],],
'2578':[[196,27],[156,28],],
'2713':[[111,24],],
'2765':[[335,1197],],
'2859':[[365,82],[365,39],[365,28],],
'2966':[[153,384],],
'2968':[[153,388],],
'2991':[[153,1105],[153,1276],],
'3011':[[156,30],[196,29],],
'3128':[[335,2018],[335,2746],],
'3181':[[170,22],],
'3182':[[170,24],],
'3183':[[170,26],],
'3215':[[173,24],],
'3490':[[179,693],],
'3495':[[179,1357],],
'3500':[[179,766],],
'3527':[[335,335],],
'3702':[[335,3737],[335,2660],[335,3531],],
'3834':[[244,23],],
'4156':[[306,480],[306,526],],
'4203':[[313,25],],
'4204':[[313,27],],
'4306':[[335,1129],[335,1132],],
'4327':[[335,2741],],
'4330':[[335,2762],],
'4334':[[335,2091],],
'4335':[[335,2804],[335,2100],],
'4344':[[335,2245],[335,3092],],
'4353':[[335,2574],],
'4363':[[335,2909],],
'4380':[[335,3540],],
'4381':[[335,3621],],
'4389':[[335,3680],],
'4391':[[335,3702],],
},{'7':[[224,57],[353,61],[320,77],[25,32],],
'23':[[209,256],],
'26':[[69,51],[384,26],[42,249],[118,70],[42,680],[121,289],[44,143],[48,851],[48,4671],[127,32],[80,55],[48,3107],[156,78],[156,88],[196,72],[196,82],[209,93],[363,361],[363,313],[355,1276],[355,1267],[93,84],[349,43],[12,327],[322,188],[128,186],[313,113],[263,73],[235,80],[306,271],[242,109],[244,79],[298,32],[89,219],[269,69],[284,70],],
'36':[[246,1060],],
'39':[[103,52],[150,52],],
'77':[[253,86],[373,27],[373,60],],
'84':[[342,171],],
'99':[[306,761],[384,2433],],
'134':[[298,28],[141,29],[300,28],[127,28],[143,24],],
'139':[[61,46],],
'147':[[48,1087],[48,1095],],
'182':[[48,3468],[48,3341],[306,616],[48,3006],[48,2308],[48,1025],[48,2904],],
'185':[[6,68],],
'236':[[365,83],[143,18],[365,66],[365,40],[141,18],[365,107],[365,29],[6,21],[300,18],[127,18],[298,18],[66,15],[61,20],],
'240':[[6,38],],
'314':[[52,275],],
'412':[[170,77],[142,130],[80,50],[231,108],[253,47],[217,151],[376,26],[296,54],],
'422':[[84,138],[84,112],[84,51],[363,356],[231,66],[218,72],[302,69],[337,59],[128,146],[170,123],[313,139],[170,58],[363,88],[134,72],[313,381],[322,148],[39,583],],
'425':[[363,289],[363,552],],
'451':[[128,160],[322,162],],
'471':[[189,135],[189,156],],
'550':[[134,53],[302,50],],
'551':[[331,401],[331,443],],
'651':[[314,81],],
'671':[[141,57],],
'682':[[355,633],],
'726':[[48,1873],],
'738':[[322,210],[128,208],],
'744':[[302,77],[134,80],],
'902':[[384,6882],],
'924':[[235,340],],
'958':[[48,4594],[48,1458],[48,1245],[48,3087],[48,4281],[48,1502],[48,3091],],
'1004':[[48,1046],],
'1260':[[384,6666],],
'1301':[[337,52],[41,133],[363,112],[313,224],[218,88],],
'1315':[[42,257],[170,37],],
'1324':[[246,1562],],
'1380':[[65,70],[65,62],],
'1419':[[42,708],],
'1428':[[331,496],],
'1624':[[48,1098],],
'1645':[[48,2925],[48,1145],[48,3362],[48,2331],[48,3456],[48,1111],[48,2385],[48,2994],[48,1068],[48,1170],[306,711],[48,1168],[48,1143],[306,637],[306,662],[48,1104],],
'1647':[[48,1147],[48,1136],],
'1648':[[48,1161],[48,1172],],
'1652':[[48,2920],[48,3357],[306,632],[48,2324],[48,1041],[306,645],],
'1654':[[48,1120],],
'1656':[[48,1175],],
'1658':[[48,1150],],
'1661':[[48,1071],[48,1107],],
'1663':[[48,1085],],
'1665':[[48,1091],],
'1675':[[48,1198],[48,1216],],
'1731':[[48,3458],[48,2996],[306,713],],
'1775':[[48,2362],],
'1776':[[48,2374],],
'1777':[[48,2383],],
'1782':[[48,2372],[48,2360],[48,2381],],
'1827':[[48,2938],[48,3375],],
'1829':[[48,2991],[48,2983],[48,3453],[48,3443],],
'1947':[[235,98],[277,433],[384,5161],],
'2357':[[363,264],],
'3138':[[162,178],],
'3688':[[191,261],],
'3702':[[200,57],],
'3810':[[235,246],],
'3942':[[384,7292],],
'4040':[[269,177],[284,178],],
'4158':[[306,581],],
'4162':[[306,708],],
'4164':[[306,697],],
'4323':[[384,7084],],
'5156':[[384,8828],],
},{'7':[[365,203],],
'12':[[84,408],[329,68],[306,1160],[30,94],[302,158],[252,82],[181,900],[160,312],[181,239],[96,119],[49,88],[134,156],],
'23':[[48,3675],],
'24':[[6,24],],
'27':[[171,112],],
'30':[[335,3019],[335,2167],],
'43':[[27,62],],
'63':[[28,26],[160,560],[218,257],],
'69':[[384,841],],
'73':[[181,868],],
'128':[[252,24],[116,26],[223,47],],
'149':[[306,1277],[48,3946],],
'160':[[304,377],],
'196':[[54,1155],],
'199':[[231,43],],
'224':[[116,58],],
'305':[[160,490],],
'339':[[335,914],],
'351':[[218,370],],
'408':[[122,111],],
'431':[[306,1260],[197,158],[70,277],[48,3929],],
'445':[[335,2263],[335,3153],],
'489':[[306,671],],
'670':[[384,6688],],
'682':[[15,45],],
'914':[[30,105],],
'926':[[218,304],],
'1005':[[335,661],],
'1029':[[54,551],[54,620],],
'1211':[[153,973],[153,1177],[153,1398],],
'1828':[[48,2964],],
'1846':[[48,3423],],
'1930':[[153,728],],
'2082':[[95,42],],
'2251':[[161,123],],
'2360':[[70,736],],
'2481':[[384,7029],],
'2806':[[384,3477],],
'3699':[[197,578],],
'4723':[[384,849],],
'4851':[[384,2474],],
},{'3':[[384,7021],],
'15':[[170,218],],
'16':[[84,192],],
'19':[[361,26],[157,24],[157,46],[160,105],[75,135],[54,1161],[181,214],[335,1100],[6,30],],
'77':[[239,28],],
'100':[[384,4435],],
'370':[[54,387],],
'949':[[384,5046],],
'1963':[[384,5417],],
'1991':[[335,945],],
},{'12':[[6,37],],
},{'3':[[100,53],[135,58],],
'7':[[322,56],[322,67],[296,57],[235,190],[224,68],[224,42],[302,55],[106,36],[396,61],[116,41],[128,59],[128,70],[200,62],[134,58],[6,40],[158,31],[250,81],[250,90],[313,86],[367,75],[373,58],[191,72],[367,84],],
'19':[[246,1626],],
'23':[[186,106],[373,25],[176,186],[191,26],[191,106],[162,68],[384,4024],[160,660],[363,507],[197,435],[158,20],[153,838],[361,89],[42,366],[134,158],[384,9678],[346,22],[209,113],[39,608],[123,30],[396,26],[115,21],[186,246],[100,138],[30,195],[246,1153],[332,161],[324,21],[236,21],[13,21],[396,107],[302,160],[72,24],[313,408],[48,4306],[70,667],[61,59],[61,49],[266,218],[51,37],],
'26':[[289,106],[95,402],[54,760],[315,106],[395,66],[345,63],[253,102],[289,95],[315,95],[189,511],[363,248],[266,193],[95,336],],
'48':[[165,49],[179,1027],[100,43],[260,74],[284,212],[48,4455],[100,58],[135,63],[135,43],[348,25],[57,97],[270,97],[247,95],[53,95],[179,99],[86,90],[82,414],[283,182],[290,152],[283,204],[28,44],],
'49':[[335,2110],[342,121],],
'52':[[236,37],[115,37],[13,37],[48,420],[158,52],[361,109],],
'57':[[82,376],],
'77':[[42,835],],
'124':[[48,884],[48,4970],],
'134':[[25,30],],
'139':[[48,542],],
'140':[[365,164],],
'147':[[306,850],],
'149':[[396,85],[235,330],[65,103],[118,96],],
'152':[[209,55],],
'153':[[48,1080],],
'154':[[320,68],],
'171':[[102,78],],
'174':[[48,424],],
'177':[[61,72],],
'182':[[82,82],[48,2424],[82,102],],
'215':[[48,4964],],
'217':[[48,474],],
'230':[[342,104],],
'236':[[25,18],[48,459],[306,844],[270,24],[70,184],[48,496],[247,24],[269,22],[284,23],[55,24],],
'241':[[82,415],],
'295':[[42,980],[32,26],[384,1841],[335,881],],
'297':[[102,73],],
'301':[[209,215],],
'315':[[136,21],[118,126],[244,168],[72,75],],
'328':[[48,4978],],
'333':[[70,203],],
'359':[[70,199],],
'364':[[246,1498],[171,61],[227,67],],
'404':[[100,20],[165,32],[135,20],[82,119],],
'412':[[84,69],[246,1256],[313,304],[355,608],[246,1318],[48,1993],[191,51],[48,2016],],
'420':[[48,1981],],
'422':[[197,392],[246,1322],[197,292],[246,1275],[384,4961],[355,611],[306,350],[70,597],[70,442],[306,1174],[42,260],],
'425':[[313,98],[322,130],[128,128],[306,367],[197,428],[70,660],],
'431':[[235,180],[111,70],[234,209],[10,208],[363,208],[363,253],[218,161],[189,259],[213,217],],
'436':[[39,203],],
'443':[[384,2193],],
'447':[[110,26],[342,94],[191,173],[110,37],[191,115],[384,8966],[253,208],[253,219],[52,248],[396,174],],
'451':[[277,481],],
'452':[[209,230],],
'454':[[269,65],[100,178],[270,92],[247,90],[284,66],],
'466':[[229,188],],
'513':[[253,84],],
'532':[[355,1262],],
'550':[[306,768],[306,1164],[306,1073],[306,1145],[48,3480],[48,1078],[306,798],[306,791],[306,746],[306,751],[306,563],],
'552':[[39,219],],
'593':[[229,191],],
'645':[[384,1489],],
'653':[[373,88],],
'672':[[335,2507],[235,323],[361,45],[253,140],],
'673':[[337,68],],
'681':[[384,2429],],
'700':[[48,522],],
'726':[[246,1515],[54,1191],[18,41],],
'809':[[48,481],],
'813':[[384,1674],],
'857':[[100,149],],
'934':[[244,192],[118,150],],
'935':[[42,317],[361,28],[335,2940],[361,71],[361,104],],
'955':[[42,1187],[42,1110],[42,1233],],
'1004':[[48,512],],
'1048':[[165,46],],
'1053':[[207,110],],
'1223':[[335,2536],],
'1255':[[48,3547],[48,3039],],
'1301':[[363,697],[72,47],],
'1371':[[42,301],],
'1432':[[246,221],],
'1532':[[306,857],],
'1569':[[48,418],],
'1589':[[306,862],[306,855],],
'1594':[[48,532],],
'1597':[[48,1507],[48,1511],[48,2200],],
'1598':[[48,3288],[48,1463],[48,1467],[48,2768],[48,1182],],
'1639':[[48,1399],[48,907],[48,1403],],
'1652':[[306,846],],
'1775':[[48,2434],],
'1777':[[48,2442],],
'1782':[[48,2432],],
'1809':[[48,2629],],
'1846':[[246,1258],],
'1848':[[48,3499],],
'1849':[[256,19],],
'1851':[[48,3511],],
'1955':[[363,328],],
'2076':[[244,113],],
'2221':[[82,405],],
'2229':[[384,6997],],
'2289':[[61,67],],
'2338':[[70,221],],
'2382':[[82,364],[82,395],],
'2384':[[118,141],[244,183],[384,9901],],
'2449':[[82,422],],
'2493':[[335,742],],
'2666':[[102,84],],
'2719':[[162,66],[295,35],[384,7345],[235,236],],
'2907':[[246,1246],],
'3024':[[316,96],],
'3200':[[384,2715],],
'3548':[[316,98],],
'4286':[[335,395],],
},{'3':[[384,1811],],
'23':[[54,520],[61,52],[164,373],[164,271],],
'26':[[6,42],],
'63':[[214,280],],
'89':[[365,206],[384,9110],[164,173],],
'149':[[162,105],],
'165':[[251,227],[365,118],],
'506':[[251,50],],
'518':[[251,217],],
'808':[[21,151],],
'921':[[384,1722],],
'1249':[[340,145],[308,178],],
'1385':[[384,6397],[384,6407],],
'1963':[[266,263],],
'2136':[[86,218],],
},{'16':[[306,770],],
'19':[[42,1108],],
'147':[[6,44],],
'511':[[153,813],],
},{'2':[[304,300],],
'7':[[313,195],[311,73],[364,38],[6,52],[257,101],[250,97],[200,139],[191,56],[116,53],[75,74],[50,64],[53,54],[69,61],[387,73],],
'12':[[355,1063],[339,163],[164,634],[339,120],[164,461],[231,99],],
'14':[[304,215],],
'16':[[191,168],[304,291],[170,106],],
'19':[[335,2310],[335,2946],],
'26':[[313,336],],
'31':[[42,561],],
'38':[[181,497],],
'39':[[191,267],[214,358],[180,219],],
'144':[[322,182],[306,1548],[82,409],[128,180],[48,4216],[48,4552],[66,25],[48,485],[82,380],[164,365],],
'147':[[44,54],[218,211],[207,40],[74,66],[16,66],[260,44],[287,48],[20,69],],
'168':[[304,227],],
'183':[[82,491],[177,30],[220,93],[313,399],[384,7360],[384,6669],],
'344':[[82,472],],
'1003':[[329,40],],
'1008':[[163,76],[259,50],[33,52],],
'1131':[[75,108],],
'1228':[[384,7793],[384,6204],[381,268],],
'1332':[[335,533],[335,2453],[153,304],[153,349],[178,229],[335,1699],[335,750],],
'1801':[[48,2568],],
'1802':[[48,2587],],
'2216':[[54,1061],],
'3217':[[355,1175],],
'4143':[[304,208],],
},{'52':[[6,56],],
'241':[[48,3481],],
'553':[[235,362],],
'578':[[121,370],[12,297],],
'606':[[12,410],],
'649':[[384,1523],[384,1198],],
'3053':[[384,3084],[384,3067],],
},{'16':[[274,800],[274,730],],
'31':[[53,126],],
'34':[[6,59],],
'77':[[52,171],],
'224':[[335,2266],[335,3156],[335,917],],
},{'1':[[388,88],[369,103],[241,81],[241,31],[88,34],[171,699],[164,15],[164,1],],
'3':[[6,64],],
'7':[[97,5],[369,119],[141,3],[241,47],[141,88],[171,715],],
'14':[[241,26],],
'23':[[317,75],[6,87],],
'89':[[155,21],],
'99':[[141,64],],
'117':[[143,0],],
'128':[[143,43],],
'140':[[164,52],],
'146':[[164,485],],
'173':[[143,16],],
'178':[[97,46],],
'228':[[335,811],],
'230':[[164,596],],
'247':[[164,16],],
'259':[[164,335],],
'420':[[61,27],[164,206],[61,39],[67,25],],
'648':[[164,33],],
'1589':[[335,2634],[335,2582],[335,1910],[335,2614],[335,2596],[335,1902],],
'2126':[[335,496],[335,3597],[335,1162],[54,408],[335,316],[335,718],[335,3215],],
'2128':[[335,1169],[335,725],[335,323],[335,3610],[54,418],[335,503],],
'2227':[[54,1234],],
'2972':[[153,588],],
'3159':[[164,380],],
'3487':[[179,1194],],
'4372':[[335,3261],],
'4383':[[335,3578],],
},{'2':[[335,3382],[384,6190],[153,513],[99,120],[381,326],[69,53],[381,59],[381,254],[384,7779],],
'3':[[186,309],],
'9':[[181,494],],
'12':[[160,94],],
'26':[[224,168],],
'35':[[384,2707],],
'43':[[36,175],[277,880],[277,148],[30,242],[274,827],[39,403],[277,956],[266,333],[39,728],[39,751],[266,274],[42,197],[30,227],[280,103],[42,607],[253,210],[384,3053],[253,182],[36,163],[384,2597],[293,131],[303,165],[249,298],[249,262],[249,227],[42,1309],[249,149],[308,115],[246,1948],[246,1899],[381,389],[49,40],[49,269],[30,200],[277,520],[246,1863],[23,131],[52,102],[52,131],[52,158],[30,389],[52,260],[371,96],[363,392],[362,68],[246,1511],[359,115],[308,149],[359,98],[358,136],[54,1256],[246,1329],[62,74],[312,49],[68,106],[394,172],[246,542],[355,1349],[75,125],[12,561],[246,473],[246,162],[84,176],[84,196],[84,314],[244,238],[320,150],[355,1307],[355,1161],[89,306],[242,173],[355,1101],[355,1093],[321,223],[355,957],[95,127],[235,267],[234,347],[355,709],[321,244],[355,662],[96,140],[52,201],[224,104],[12,376],[220,119],[218,325],[355,646],[321,300],[102,176],[321,304],[105,53],[105,62],[355,627],[214,169],[118,207],[214,138],[121,349],[355,572],[321,326],[137,231],[355,231],[191,248],[191,102],[188,209],[355,190],[12,359],[345,53],[335,952],[335,1466],[186,405],[186,372],[277,500],[186,342],[160,218],[160,228],[395,56],[160,488],[277,582],[340,116],[186,270],[340,82],[162,75],[339,244],[162,204],[335,1605],[186,183],[335,1740],[339,240],[164,253],[181,894],[164,540],[76,83],[170,165],[170,209],[181,858],[181,821],[173,276],[173,326],[335,2459],[335,2394],[179,73],[181,78],[181,607],[181,260],[181,599],[181,349],[160,496],],
'54':[[170,272],],
'63':[[345,39],[390,112],[384,1279],[355,1410],[231,118],[302,108],[287,87],[181,1025],[322,91],[162,279],[362,60],],
'67':[[84,404],[384,4066],[186,257],[384,7712],[274,507],[25,59],[381,619],[186,397],[65,126],[99,131],[42,576],[152,64],[381,414],[246,1838],[152,146],[396,176],],
'79':[[48,97],[355,1366],],
'82':[[335,550],],
'83':[[335,1550],[355,1068],],
'121':[[181,1007],],
'149':[[381,597],[54,673],[150,71],[103,71],[84,392],[99,136],[84,120],[384,6767],[95,240],[99,283],],
'150':[[97,35],],
'151':[[304,160],],
'160':[[181,557],[181,464],],
'163':[[42,1053],],
'165':[[162,223],],
'167':[[384,9910],[277,915],[355,742],[220,45],[355,698],[251,42],[355,397],],
'196':[[153,955],[153,780],[153,1160],[153,1382],],
'199':[[355,619],[246,567],[331,279],[335,3090],[206,61],[200,308],[266,339],[246,308],[335,2315],[188,147],[381,537],[30,289],[246,233],[84,142],[339,41],[42,1242],[225,35],[39,369],[42,1228],[160,612],[98,35],[335,2243],[89,332],[162,269],[257,190],],
'202':[[277,921],[186,156],[113,41],[246,88],[335,522],[39,424],[246,1120],[277,939],[313,283],[277,928],],
'206':[[49,417],],
'215':[[335,1315],],
'220':[[181,235],[160,352],],
'227':[[384,1303],],
'228':[[265,28],],
'237':[[6,69],],
'241':[[53,96],],
'250':[[335,1459],[356,50],[42,148],[42,1235],[313,123],[160,523],[42,1250],[355,730],[303,118],],
'251':[[246,76],],
'256':[[200,160],],
'267':[[379,187],[84,560],[7,172],[379,200],[48,254],[186,526],[186,41],[171,363],[339,9],],
'277':[[178,221],[235,350],],
'281':[[394,145],[176,140],[384,1246],[355,589],[251,99],[355,1119],[384,893],[249,46],],
'285':[[335,1001],],
'290':[[213,464],],
'299':[[246,1488],],
'321':[[214,274],[274,33],],
'354':[[44,115],[276,72],],
'355':[[274,668],],
'381':[[142,143],],
'419':[[320,133],],
'423':[[70,618],],
'436':[[39,213],[335,3372],],
'445':[[355,1083],],
'447':[[162,115],],
'462':[[160,167],],
'480':[[153,134],],
'491':[[331,31],],
'502':[[134,64],[302,61],],
'515':[[39,256],],
'525':[[39,117],],
'532':[[42,985],],
'547':[[384,6297],[303,145],],
'598':[[335,1957],[54,457],[277,408],[54,695],[277,396],[48,4303],[153,614],[335,2700],[335,2784],[339,84],[335,2066],[95,262],],
'600':[[335,116],],
'604':[[334,83],],
'645':[[91,26],],
'654':[[314,62],],
'655':[[315,200],],
'681':[[95,233],[54,666],],
'700':[[210,149],],
'702':[[160,638],],
'777':[[57,254],],
'780':[[42,494],],
'800':[[251,128],],
'821':[[96,83],],
'847':[[23,120],[293,120],[215,112],[183,112],],
'877':[[363,295],],
'887':[[186,204],],
'931':[[266,260],],
'940':[[95,91],],
'945':[[355,1386],[42,1179],],
'949':[[235,307],[376,32],],
'960':[[396,147],[95,317],],
'1053':[[229,182],],
'1101':[[331,439],[329,29],[295,29],[95,31],[277,643],[331,378],[374,29],],
'1136':[[384,5602],],
'1200':[[39,641],],
'1277':[[384,3756],],
'1299':[[257,123],],
'1304':[[243,123],],
'1309':[[95,73],],
'1314':[[384,6254],],
'1326':[[249,98],],
'1331':[[355,1336],],
'1344':[[42,1215],],
'1345':[[42,1098],],
'1358':[[42,636],[335,2644],],
'1374':[[384,5163],],
'1406':[[49,385],],
'1462':[[384,174],],
'1603':[[106,52],],
'1763':[[48,2177],],
'1849':[[197,487],],
'2023':[[49,375],],
'2039':[[49,465],],
'2092':[[54,113],],
'2127':[[335,1599],[335,1734],[335,1244],],
'2132':[[54,532],],
'2160':[[335,938],],
'2186':[[54,872],],
'2323':[[384,9441],],
'2351':[[70,623],],
'2353':[[313,226],],
'2383':[[164,151],],
'2509':[[276,63],],
'2512':[[188,102],[188,185],],
'2515':[[213,375],],
'2518':[[89,297],],
'2555':[[361,77],],
'2584':[[99,163],],
'2654':[[283,174],],
'2750':[[121,87],],
'2767':[[121,359],],
'2989':[[381,80],],
'3163':[[164,496],],
'3167':[[164,566],],
'3573':[[181,309],],
'3628':[[187,185],],
'3633':[[384,5776],],
'3909':[[246,1107],],
'3992':[[251,287],],
'4452':[[384,6081],],
'4507':[[358,151],],
'4617':[[384,61],],
'4629':[[384,2936],],
'4642':[[384,1564],[384,1555],],
'4932':[[384,3522],],
'4939':[[384,3607],],
'5139':[[384,8213],],
},{'15':[[338,52],[203,58],[263,56],],
'16':[[396,167],[256,23],],
'128':[[348,20],],
'147':[[320,57],[165,52],[253,42],[6,73],],
'154':[[394,165],[253,56],],
},{'35':[[381,262],[384,6198],[384,7787],],
'42':[[227,93],],
'43':[[252,77],],
'51':[[384,3652],],
'52':[[164,258],],
'55':[[89,87],],
'65':[[84,150],[307,130],[341,130],[121,362],],
'75':[[210,178],],
'82':[[355,1194],[217,296],[384,1106],[70,629],[242,154],[39,229],],
'83':[[89,340],],
'91':[[48,259],],
'99':[[42,236],[384,6928],],
'133':[[274,798],],
'139':[[70,320],],
'149':[[247,229],],
'150':[[162,199],[152,217],],
'155':[[181,315],],
'160':[[7,130],[171,321],[247,245],[176,21],[321,31],[176,284],[102,7],[321,437],],
'162':[[153,1316],[152,178],],
'163':[[42,1074],],
'165':[[162,142],[164,221],[186,340],],
'175':[[164,608],],
'208':[[384,4803],],
'215':[[313,322],[191,131],],
'217':[[153,770],],
'220':[[160,522],],
'225':[[274,544],[53,86],],
'230':[[355,729],],
'233':[[44,99],],
'237':[[162,179],],
'241':[[246,1499],[42,1188],[42,1234],],
'249':[[253,57],[6,74],],
'264':[[234,357],[95,350],],
'274':[[41,213],],
'277':[[99,258],[303,117],[363,430],[220,89],[384,5419],],
'283':[[217,382],],
'290':[[102,55],],
'298':[[246,74],],
'299':[[246,1129],],
'321':[[246,540],],
'338':[[153,910],],
'348':[[274,825],],
'369':[[335,1399],],
'377':[[234,340],],
'402':[[181,208],],
'409':[[176,212],],
'436':[[335,1253],],
'445':[[381,368],],
'447':[[335,1458],],
'454':[[283,220],[89,435],],
'458':[[186,235],],
'470':[[384,299],],
'473':[[384,6742],],
'479':[[76,91],],
'488':[[347,55],],
'505':[[381,357],],
'534':[[342,179],],
'546':[[153,677],],
'609':[[381,162],],
'635':[[303,139],],
'639':[[179,1180],],
'668':[[170,172],],
'670':[[84,257],],
'680':[[246,1192],],
'696':[[176,146],[355,914],[214,177],],
'700':[[49,309],],
'784':[[49,362],],
'836':[[321,130],],
'849':[[363,750],],
'888':[[186,403],],
'904':[[68,68],],
'922':[[48,349],[277,475],],
'926':[[54,1178],],
'940':[[363,499],[384,6879],],
'955':[[42,1249],],
'1005':[[207,102],],
'1007':[[160,486],[287,80],[359,125],],
'1019':[[181,44],],
'1028':[[37,50],],
'1061':[[50,82],],
'1076':[[283,194],],
'1083':[[270,222],],
'1095':[[356,49],],
'1109':[[384,2881],],
'1124':[[174,69],],
'1192':[[49,175],],
'1229':[[153,1091],],
'1305':[[174,83],[344,164],[355,293],[243,148],],
'1307':[[355,437],],
'1319':[[217,418],[235,258],],
'1325':[[125,217],[125,168],],
'1329':[[306,980],[48,3735],],
'1333':[[355,417],],
'1348':[[42,147],],
'1392':[[355,1148],],
'1405':[[178,249],[178,271],],
'1424':[[116,122],[218,181],],
'1467':[[335,555],],
'1667':[[313,389],[384,8959],],
'1913':[[95,77],],
'1922':[[125,89],],
'1963':[[384,4441],[384,5053],],
'2045':[[344,247],],
'2077':[[384,74],],
'2168':[[197,490],],
'2332':[[153,992],],
'2342':[[384,4701],],
'2352':[[99,288],],
'2445':[[172,63],],
'2460':[[102,116],],
'2528':[[335,1493],],
'2549':[[367,103],],
'2569':[[274,341],],
'2589':[[384,3966],],
'2652':[[100,165],[135,212],],
'2656':[[135,167],],
'2890':[[173,264],[137,219],],
'2915':[[165,64],],
'2962':[[153,318],],
'3013':[[157,62],],
'3141':[[162,212],],
'3214':[[244,152],],
'3227':[[344,184],],
'3229':[[174,108],[243,103],],
'3628':[[187,159],],
'3680':[[340,123],[308,156],],
'3707':[[200,257],],
'3894':[[246,800],],
'4119':[[301,50],],
'4203':[[313,122],],
'4272':[[384,7947],[384,7111],[384,7933],],
'4369':[[335,2968],],
'4459':[[353,149],],
'4597':[[381,513],],
'4785':[[384,2918],],
'4797':[[384,1728],],
'4814':[[384,1946],],
},{'2':[[384,4475],],
'3':[[384,5217],],
'16':[[246,1113],],
'20':[[358,36],],
'43':[[355,1113],],
'61':[[160,240],],
'73':[[191,289],[191,241],],
'77':[[84,493],],
'82':[[121,233],],
'99':[[274,708],],
'139':[[235,415],],
'147':[[74,92],[16,92],[49,262],[381,493],[26,41],[160,361],[283,160],[187,162],],
'199':[[335,3772],],
'237':[[231,109],],
'250':[[6,75],[176,147],[246,75],[170,173],],
'288':[[39,625],],
'346':[[30,176],],
'588':[[395,34],],
'613':[[381,169],],
'617':[[246,1568],],
'696':[[355,125],[355,582],],
'816':[[30,142],],
'921':[[99,169],[326,24],],
'923':[[39,304],],
'925':[[153,76],],
'940':[[277,946],],
'979':[[214,228],],
'1113':[[315,188],],
'1117':[[335,2443],[161,93],],
'1128':[[301,73],[343,92],],
'1225':[[181,88],],
'1426':[[246,260],],
'1705':[[164,190],],
'1818':[[384,4337],],
'2005':[[49,238],],
'2028':[[49,452],],
'2113':[[246,1545],],
'2123':[[246,1431],],
'2466':[[84,169],],
'2590':[[384,2393],],
'3841':[[246,82],],
'3939':[[246,1581],],
},{'31':[[6,78],[313,125],[213,377],[170,241],],
'50':[[384,3888],],
'63':[[344,290],],
'86':[[52,317],],
'152':[[384,5850],],
'272':[[384,8718],],
'277':[[362,29],[62,31],],
'470':[[342,191],],
'502':[[384,9192],],
'567':[[384,4978],[246,550],],
'596':[[251,86],],
'923':[[54,1109],],
'949':[[274,211],],
'953':[[217,260],],
'978':[[54,1101],],
'1119':[[344,160],[243,144],[355,289],],
'1211':[[384,1214],[384,1231],],
'1335':[[42,736],],
'1463':[[217,241],],
'1838':[[384,3875],],
'2857':[[126,33],[128,214],[322,216],],
'3278':[[217,255],],
'3279':[[217,248],],
'3627':[[384,3894],],
'4552':[[384,545],],
'4706':[[384,2227],],
},{'252':[[6,79],],
'579':[[384,1115],],
},{'222':[[6,81],],
},{'3':[[308,38],[358,333],[261,173],[42,1176],[214,21],[340,38],],
'9':[[164,140],],
'12':[[188,155],],
'15':[[186,90],[172,138],],
'16':[[220,41],[6,83],[335,3479],],
'23':[[200,158],[160,568],[246,1473],[84,103],[355,103],[246,199],[224,118],],
'33':[[48,3668],],
'49':[[227,141],],
'63':[[355,271],],
'77':[[384,995],[355,863],[287,100],[246,242],],
'137':[[246,187],],
'158':[[12,64],],
'215':[[361,60],],
'224':[[246,1529],],
'250':[[246,801],[246,1193],],
'349':[[384,6902],],
'955':[[246,647],],
'1319':[[42,504],],
'1333':[[234,401],],
'3802':[[384,5669],],
'4629':[[384,8446],[384,8388],],
},{'16':[[180,210],],
'19':[[257,84],],
'31':[[355,1397],[42,638],[321,365],[381,336],],
'39':[[121,251],],
'41':[[335,3481],],
'48':[[187,197],],
'213':[[338,74],],
'224':[[42,323],],
'255':[[6,84],[200,159],],
'290':[[350,207],],
'305':[[384,2981],],
'314':[[48,649],],
'523':[[76,36],],
'1020':[[36,154],],
'1397':[[42,471],],
'2919':[[146,138],],
'3217':[[173,317],],
},{'24':[[6,89],],
},{'49':[[181,25],],
'257':[[6,90],],
'269':[[304,181],],
},{'16':[[42,1094],[384,2957],[6,92],],
'23':[[266,234],[164,434],[164,334],[118,117],[141,67],[162,343],[143,46],],
'31':[[317,41],[384,6083],],
'36':[[52,81],[52,128],],
'121':[[382,74],[71,74],],
'154':[[141,82],[143,61],],
'203':[[303,189],],
'249':[[256,24],],
'269':[[340,129],[308,162],],
'1027':[[164,493],],
'1131':[[99,194],],
},{'7':[[186,28],[381,18],[30,25],[344,17],[52,21],[339,30],[68,19],[321,20],[84,11],[84,566],[290,22],[102,23],[266,21],[162,21],[243,19],[171,204],[176,27],],
'27':[[227,219],],
'38':[[186,514],],
'117':[[7,0],],
'140':[[162,396],[290,671],[68,124],],
'152':[[277,970],],
'167':[[344,353],[381,634],],
'199':[[266,389],],
'224':[[384,2593],],
'262':[[84,569],],
'263':[[7,13],],
'269':[[52,349],],
'278':[[243,277],],
'284':[[30,500],],
'287':[[321,427],],
'289':[[102,204],],
'292':[[176,289],],
'302':[[339,312],],
},{'31':[[51,28],],
'260':[[30,26],[30,501],[7,14],[7,1],[52,22],[52,350],[381,635],[68,20],[68,125],[84,12],[84,567],[84,570],[102,24],[102,205],[162,22],[162,397],[171,205],[176,28],[176,290],[186,29],[186,515],[227,220],[243,20],[243,278],[266,22],[266,390],[277,971],[290,23],[290,672],[321,21],[321,428],[339,31],[339,313],[344,18],[344,354],[381,19],],
'921':[[384,19],],
'1591':[[54,1174],],
},{'154':[[125,65],[121,590],],
'261':[[30,27],[30,502],[52,23],[52,351],[68,21],[7,15],[84,13],[84,568],[84,571],[102,25],[102,206],[68,126],[7,2],[162,23],[162,398],[171,206],[176,29],[176,291],[186,30],[186,516],[227,221],[243,21],[243,279],[266,23],[266,391],[277,972],[290,24],[290,673],[321,22],[321,429],[339,32],[339,314],[344,19],[344,355],[381,20],[381,636],],
},{'2':[[7,12],],
'7':[[7,17],[7,27],[7,37],[7,47],[7,57],[7,65],[7,74],[7,83],[7,90],[7,104],[7,114],[7,123],[7,136],[7,149],[7,163],[7,180],[381,627],[381,22],[381,10],[30,11],[30,29],[30,487],[344,345],[344,21],[344,8],[339,299],[339,16],[52,11],[52,25],[52,340],[321,418],[321,24],[68,9],[68,23],[68,115],[321,10],[290,665],[290,26],[84,15],[290,15],[266,380],[102,14],[102,27],[102,196],[266,25],[266,11],[243,269],[162,11],[162,25],[243,23],[162,387],[243,10],[171,208],[171,218],[171,228],[171,238],[171,248],[171,256],[171,265],[171,274],[171,281],[171,295],[171,305],[171,314],[171,327],[171,340],[171,354],[186,502],[176,14],[176,31],[176,277],[186,32],[186,15],],
'27':[[290,131],[28,75],[344,331],[247,238],],
'117':[[30,0],[176,0],[344,0],[162,0],[52,0],[243,0],[381,0],[266,0],[339,0],[68,0],[102,0],[321,0],[290,0],[186,0],[84,0],],
'262':[[84,572],[186,517],[290,674],[266,392],[68,127],[102,207],[52,352],[321,430],[344,356],[243,280],[381,637],[176,292],[30,503],[162,399],],
'375':[[41,327],[41,366],[160,686],[355,372],[355,504],[355,518],[214,303],[70,135],[162,377],[21,171],[390,154],],
'914':[[41,375],],
},{'7':[[254,161],[253,231],[253,3],[171,522],[92,98],[211,86],[235,3],],
'12':[[84,557],[384,8037],[384,8011],[156,51],[162,228],],
'13':[[384,6409],],
'15':[[234,356],[54,752],[84,46],[95,328],],
'23':[[84,231],[95,228],[54,661],[321,254],[84,350],[96,164],],
'26':[[384,9301],[201,22],[246,1402],],
'55':[[197,413],[70,645],],
'63':[[355,110],[355,555],[336,100],],
'67':[[116,63],[84,478],],
'73':[[197,545],[197,452],],
'117':[[363,0],],
'147':[[65,90],],
'150':[[95,349],[162,100],[277,339],],
'152':[[266,179],],
'165':[[162,241],],
'236':[[363,16],],
'263':[[266,12],[7,18],[84,1],[7,181],[171,209],[266,381],],
'322':[[335,1294],],
'346':[[84,321],],
'375':[[313,413],[396,186],],
'667':[[235,503],],
'788':[[335,1804],[335,1655],],
'849':[[363,596],],
'1029':[[335,1757],],
'1211':[[153,722],],
'1225':[[186,327],],
'1391':[[54,679],[95,246],[234,386],],
'1433':[[95,356],],
'1929':[[306,1439],[48,4118],],
'1930':[[335,1666],[335,1515],[335,1815],],
'1931':[[306,1451],[48,4130],],
'1955':[[335,3191],[335,293],],
'2132':[[335,1479],[335,1227],[335,1618],],
'2214':[[54,1007],],
'2359':[[197,564],[70,721],],
'2675':[[384,6674],],
'3491':[[277,537],],
'3501':[[179,785],],
'4071':[[335,421],[335,3739],[335,357],[277,529],[335,3320],],
'4309':[[335,1509],[335,1282],],
'4315':[[335,1367],],
},{'16':[[7,20],[7,183],[321,262],[84,3],[266,383],[171,211],[266,14],],
'250':[[102,56],],
'420':[[57,300],],
'861':[[384,3678],],
'1003':[[384,1804],],
},{'1':[[164,535],],
'2':[[307,97],[341,97],],
'3':[[164,511],[355,880],[52,209],[246,1222],[39,722],],
'7':[[171,1207],[335,9],[185,10],[185,93],[335,3783],[319,38],],
'9':[[88,39],],
'12':[[277,982],[12,621],],
'16':[[355,644],[321,62],[277,498],[301,60],],
'26':[[12,184],[41,387],[355,800],[12,591],[54,645],],
'39':[[246,730],],
'43':[[337,110],[320,39],[313,369],],
'63':[[208,39],[355,873],],
'117':[[249,0],],
'128':[[170,35],],
'143':[[331,169],],
'167':[[42,1044],],
'263':[[266,393],[84,16],[84,573],[21,172],[52,1],[102,15],[344,9],[68,10],[162,1],[162,12],[162,378],[162,388],[70,136],[381,23],[102,197],[52,12],[171,219],[171,229],[171,239],[171,266],[171,296],[171,306],[30,1],[381,638],[7,115],[68,116],[266,1],[321,419],[7,105],[7,75],[30,504],[321,11],[52,353],[321,1],[214,304],[52,341],[7,48],[243,1],[344,346],[266,26],[7,38],[7,28],[52,26],[290,675],[30,30],[290,27],[390,155],],
'265':[[171,212],[266,384],[84,4],[7,184],[266,15],[7,21],],
'297':[[339,20],[7,153],[28,79],[339,303],[176,296],[171,344],[176,35],[186,4],],
'343':[[355,757],],
'375':[[246,1687],[246,1865],],
'416':[[234,98],[189,105],[213,116],[30,108],[10,99],[178,68],[89,82],],
'521':[[12,93],],
'817':[[52,174],],
'875':[[384,4763],],
'1186':[[48,3561],],
'1214':[[246,779],],
'1384':[[118,56],[244,57],[355,894],[235,103],],
'1848':[[384,8236],[384,5599],[335,2325],[70,50],],
'2148':[[174,259],],
'3829':[[384,2114],],
'4004':[[256,31],],
'4095':[[278,26],],
},{'2':[[321,50],],
'30':[[243,284],[290,19],[7,87],[290,135],[290,669],[355,508],[344,4],[41,370],[171,278],[243,27],],
'38':[[7,186],[339,22],[321,421],[21,174],[28,81],[7,155],[30,3],[30,32],[30,506],[321,13],[7,146],[321,3],[290,677],[7,117],[7,107],[290,29],[7,40],[266,395],[266,386],[266,28],[52,3],[52,14],[52,343],[266,17],[70,138],[84,6],[84,18],[266,3],[7,30],[84,575],[339,305],[102,17],[214,306],[102,37],[102,199],[186,512],[102,217],[186,25],[186,6],[160,696],[162,14],[162,380],[162,390],[171,214],[171,221],[171,231],[7,23],[171,298],[171,308],[176,298],[176,37],[171,337],[171,346],[176,10],[390,157],],
'54':[[186,482],],
'63':[[7,171],[186,525],[186,40],[339,8],[171,362],],
'67':[[381,499],],
'79':[[54,126],],
'149':[[246,1766],],
'153':[[181,400],],
'165':[[21,139],],
'237':[[42,250],],
'238':[[306,672],[48,2965],[48,3424],],
'248':[[381,81],],
'250':[[381,514],],
'263':[[102,1],[7,137],[186,503],[7,124],[102,208],[186,16],[247,239],[321,431],[160,687],[171,315],[176,278],[171,328],[321,25],[176,1],[176,15],[102,28],],
'333':[[48,2415],],
'348':[[9,162],[29,162],],
'356':[[335,2084],],
'369':[[246,59],],
'453':[[379,177],],
'696':[[381,476],],
'869':[[153,237],],
'921':[[381,405],[381,150],],
'923':[[304,284],],
'1117':[[379,199],[84,559],[379,186],[48,253],],
'1123':[[355,1452],],
'1128':[[381,138],],
'1218':[[39,736],],
'1254':[[246,534],],
'1771':[[48,2422],],
'1772':[[48,2426],],
'1789':[[48,2440],[48,2437],],
'2100':[[84,522],],
'2816':[[217,343],],
'2912':[[188,171],],
'3809':[[235,243],],
'4739':[[384,1101],],
},{'12':[[339,45],],
'267':[[84,7],[171,215],[266,18],[266,387],[7,187],[7,24],],
},{'12':[[65,93],],
'23':[[266,161],[244,217],[52,154],[70,537],[118,186],[384,5021],[164,19],],
'24':[[304,180],],
'36':[[164,473],],
'47':[[164,113],[308,97],],
'89':[[308,84],[266,311],[164,294],],
'130':[[214,311],[171,226],[84,580],[84,23],[52,19],[70,143],[7,35],[52,348],[266,8],],
'165':[[336,113],[336,69],],
'175':[[384,1793],],
'205':[[164,101],[52,135],[164,398],[214,125],[308,93],[70,124],[70,299],],
'230':[[266,78],],
'259':[[266,235],[256,25],[118,118],[52,129],],
'716':[[266,137],],
'1194':[[384,1735],],
'1452':[[164,308],],
'2060':[[162,366],[118,222],[244,253],],
'2690':[[164,647],[164,468],],
'4198':[[308,161],[340,128],],
},{'12':[[355,1390],[384,7812],[52,45],[42,325],[42,1022],[384,6491],[52,91],],
'23':[[39,720],],
'130':[[176,150],],
'241':[[384,1675],],
'267':[[162,391],[171,232],[7,41],[266,29],[266,396],[162,381],[52,4],[162,15],],
'302':[[384,2054],],
'436':[[335,2538],],
'447':[[335,2640],],
'812':[[21,157],],
'1783':[[48,2390],],
'2143':[[335,2108],],
'2865':[[384,8944],],
'4789':[[384,2795],],
},{'12':[[10,202],[234,203],[218,148],[363,195],[213,211],[189,253],[235,161],],
'15':[[335,3640],[70,514],],
'23':[[42,629],[42,700],[42,799],[42,923],[384,4430],[42,1015],[381,379],[52,6],[52,47],[52,116],[52,308],[70,421],[42,613],[162,17],[162,383],[162,393],[42,350],[171,234],[355,229],[336,160],[42,333],[197,271],[42,276],[384,5410],[335,1081],[278,28],[277,491],[266,398],[217,317],[266,314],[384,6891],[266,230],[39,312],[7,43],[251,110],[251,205],[266,31],[266,209],],
'26':[[290,96],],
'34':[[39,374],],
'63':[[384,1491],],
'82':[[217,140],],
'89':[[384,2993],[384,3203],],
'100':[[384,5405],],
'346':[[384,1240],],
'543':[[395,40],],
'707':[[39,675],],
'791':[[384,6056],[384,8267],],
'915':[[335,2491],],
'931':[[384,8617],[384,5787],],
'935':[[384,9599],],
'1100':[[171,66],[227,72],],
'1143':[[217,443],],
'1304':[[384,5490],[384,4687],],
'1309':[[384,6583],],
'1310':[[384,6611],[384,7303],],
'1384':[[384,9308],],
'1455':[[217,192],[217,221],[42,1029],[217,202],[217,211],],
'1461':[[42,988],],
'1955':[[384,4864],],
'2323':[[384,9326],[384,7234],],
'2352':[[274,332],],
'2981':[[179,1256],[290,201],[179,147],],
'3140':[[384,1353],],
'3143':[[384,8627],],
'3196':[[384,1883],[384,1871],],
'3271':[[335,2499],],
'3378':[[384,8571],],
'3537':[[384,403],],
'3796':[[384,7821],],
'4622':[[384,2260],[384,2277],[384,2078],],
'5103':[[384,8487],],
},{'9':[[384,8190],],
'15':[[384,4984],],
'16':[[176,83],],
'18':[[214,235],[320,100],[246,316],[174,132],],
'31':[[331,276],],
'38':[[277,645],[274,244],],
'42':[[335,3470],],
'63':[[384,2929],],
'67':[[244,124],[52,219],],
'140':[[335,1974],],
'149':[[172,87],[172,56],[337,75],],
'165':[[384,1275],[251,93],],
'203':[[342,227],],
'250':[[384,2919],],
'266':[[244,58],[235,104],[68,11],[355,895],[384,4764],[337,111],[68,117],[256,32],[52,354],[118,57],[7,49],[162,2],[313,370],[319,39],[52,210],[331,170],[52,175],[52,27],[171,240],],
'272':[[243,55],],
'288':[[384,7227],],
'487':[[384,8717],],
'817':[[384,6153],],
'931':[[384,8850],],
'940':[[243,54],],
'978':[[61,64],],
'1109':[[384,3734],[384,4815],[384,915],],
'1123':[[290,105],[217,489],],
'1129':[[39,176],],
'1158':[[384,1259],],
'1456':[[384,8458],],
'1913':[[331,220],[235,429],[246,1584],[246,1571],],
'2160':[[384,138],],
'3143':[[384,8863],],
'3791':[[340,150],[308,183],],
},{'1':[[125,67],],
'16':[[331,233],[12,130],[391,64],],
'26':[[246,955],[121,403],[84,532],],
'38':[[181,389],],
'82':[[331,55],],
'128':[[328,32],],
'147':[[246,177],[246,215],],
'156':[[331,449],],
'263':[[344,332],[68,1],[28,76],[344,22],[339,300],[339,17],[381,11],[7,150],[344,357],[355,373],[162,26],[162,400],[171,249],[171,282],[41,328],[171,341],[355,519],[290,1],[176,32],[176,293],[7,91],[30,488],[186,1],[7,58],[381,628],[30,12],],
'296':[[171,335],[7,144],[102,35],[102,215],[160,694],[186,510],[186,23],[176,8],],
'375':[[243,239],[339,133],[48,1304],[246,1218],],
'509':[[246,292],],
'577':[[242,78],],
'621':[[12,458],],
'696':[[246,118],],
'1138':[[39,410],],
'1198':[[161,106],[250,120],[313,452],[367,123],],
'1225':[[335,692],],
'1459':[[242,120],],
'1672':[[246,65],],
'2002':[[49,151],],
'2016':[[49,405],],
'2601':[[96,103],],
'2977':[[384,1849],],
'2989':[[181,339],],
'3219':[[174,35],],
'3923':[[246,1267],],
'4021':[[258,36],],
'4054':[[274,282],],
'4072':[[277,612],],
},{'2':[[7,62],[381,632],[162,30],[41,332],[381,15],[42,903],[171,253],[68,5],[355,377],[162,404],],
'7':[[94,41],[65,116],[41,212],[94,37],[304,321],],
'16':[[363,759],[384,3923],[191,143],[384,4213],[199,101],[384,3937],[384,3930],],
'23':[[41,357],[184,23],[384,3110],[80,135],],
'128':[[78,22],[15,31],[309,23],[120,22],],
'203':[[313,263],[361,54],],
'387':[[199,30],],
'395':[[384,5113],],
'548':[[384,5106],],
'817':[[384,8512],[384,8149],[355,365],],
'935':[[295,38],],
'1911':[[384,2674],],
'2411':[[341,273],[307,273],],
'5084':[[384,6704],],
},{'9':[[384,5765],],
'19':[[174,17],[384,4013],[161,466],[161,89],[384,8374],[384,7660],[160,371],[381,85],[381,548],[381,375],[95,36],],
'23':[[68,58],[384,2306],[68,39],[95,28],[384,6315],[100,56],[384,5281],[135,61],[384,6718],[41,305],[384,8773],[20,60],[171,1306],[174,2],[15,33],[381,317],[214,361],[227,227],[384,4849],[396,135],[266,250],[268,47],[274,291],[313,272],[355,382],[384,5119],[355,1438],[363,380],[384,4954],],
'25':[[91,28],],
'33':[[384,259],],
'34':[[191,99],],
'38':[[7,67],[171,258],[243,12],[243,271],[68,129],[68,25],[381,2],],
'39':[[384,5289],],
'63':[[384,2782],],
'67':[[381,153],],
'69':[[381,144],[381,407],],
'82':[[384,9603],],
'87':[[384,7800],],
'147':[[101,57],[60,97],],
'155':[[355,740],],
'165':[[384,2499],],
'215':[[384,7335],[384,7721],],
'230':[[384,6078],],
'264':[[384,9302],],
'275':[[384,9604],[384,6065],[384,8580],[384,7689],[384,5724],[384,8931],[384,9493],[384,6069],],
'277':[[384,2111],],
'370':[[384,8684],],
'445':[[384,7900],],
'501':[[384,8781],],
'567':[[384,9702],],
'577':[[384,8425],],
'579':[[381,55],],
'648':[[384,5588],],
'791':[[384,8746],],
'800':[[384,4774],],
'826':[[384,4521],],
'903':[[384,2849],],
'931':[[384,8930],],
'933':[[384,7555],],
'935':[[384,9439],],
'940':[[384,8756],],
'1123':[[384,1182],[384,9313],[384,201],],
'1124':[[384,7673],],
'1126':[[384,7688],],
'1192':[[384,889],],
'1229':[[60,81],],
'1303':[[384,8073],],
'1304':[[384,6068],],
'1310':[[384,5750],[384,7545],],
'1314':[[68,51],[384,4514],],
'1319':[[41,298],],
'1347':[[384,5595],],
'1476':[[384,9857],],
'1567':[[48,413],],
'1568':[[48,415],],
'1719':[[384,4294],[384,4289],],
'1818':[[384,9611],],
'1966':[[384,7694],],
'2317':[[384,7701],],
'2385':[[384,4497],],
'2591':[[384,7322],[384,7150],[384,6941],],
'2816':[[384,3258],],
'3099':[[384,8579],[384,8550],[384,8409],],
'3165':[[384,1507],],
'3574':[[384,4835],],
'3739':[[384,8673],],
'3938':[[384,3840],],
'3995':[[384,661],],
'4190':[[384,1941],],
'4251':[[384,2109],],
'4452':[[384,9876],[384,5145],],
'4588':[[384,7655],[384,8160],[384,8369],[384,8069],[384,7883],[384,7538],[384,7429],],
'4589':[[381,355],],
'4629':[[384,2842],],
'4634':[[384,9216],[384,212],],
'4732':[[384,1546],],
'4753':[[384,1528],],
'4772':[[384,1469],],
'4777':[[384,1569],],
'4783':[[384,3271],],
'4840':[[384,2287],],
'4874':[[384,4738],[384,4366],[384,4486],],
'4898':[[384,8603],],
'4907':[[384,3823],[384,4006],[384,3718],[384,3584],[384,4136],],
'5004':[[384,4759],],
'5022':[[384,5268],[384,6064],[384,5723],],
'5124':[[384,7889],],
'5150':[[384,9427],[384,9867],[384,9492],[384,9146],[384,9293],[384,9203],],
'5152':[[384,9082],[384,9032],[384,8979],[384,8806],[384,8665],],
'5161':[[384,8962],],
'5172':[[384,9155],],
},{'12':[[311,75],[387,75],],
'24':[[339,173],[304,260],[16,99],[304,355],[74,99],],
'35':[[68,132],[68,28],[381,5],[243,274],[243,15],[171,261],[7,70],],
'152':[[95,115],],
'372':[[99,122],],
'550':[[48,2337],[48,1117],[48,3368],[48,2931],[306,643],],
'923':[[152,138],],
'1498':[[355,399],],
'1620':[[48,1180],],
'3495':[[179,754],[179,821],],
'3557':[[381,480],],
},{'1':[[384,35],],
'2':[[341,139],[307,139],[303,125],[303,116],[214,14],[303,65],[227,164],[227,109],[227,84],[384,5583],[227,26],[171,31],[219,43],[384,1179],[251,117],[384,4099],[384,4085],[384,203],[384,4071],[384,4052],[384,4018],[384,3387],[384,649],[384,663],[303,31],[39,559],[331,464],[303,29],[384,1471],[384,2118],[171,78],],
'3':[[335,3483],[218,290],[384,3212],[384,3002],],
'13':[[384,2124],[384,1860],[384,718],[384,1837],],
'15':[[80,126],[355,265],],
'17':[[224,32],],
'18':[[179,68],],
'23':[[84,218],[178,137],[277,870],[218,127],[303,52],[10,181],[363,605],[363,174],[277,769],[95,109],[75,65],[355,1091],[355,871],[186,449],[213,190],[234,182],[84,72],[48,4614],[355,222],[54,1239],[234,363],[54,1158],[196,41],[189,496],[83,94],[335,2374],[128,192],[235,140],[235,232],[189,232],[331,88],[322,194],],
'26':[[48,853],[39,364],[125,223],[121,489],[320,50],[253,155],[121,441],[121,291],[42,155],[253,146],[49,408],[42,485],[296,64],[306,273],[99,257],[277,389],[99,144],[12,329],[253,35],[355,1379],[277,615],],
'31':[[224,143],],
'34':[[381,524],[381,62],],
'36':[[277,108],[246,1184],[246,1172],[118,133],[244,175],[344,105],[277,831],[12,90],[320,114],[277,782],[355,793],],
'37':[[277,266],[277,685],[277,663],[243,86],],
'48':[[314,110],],
'59':[[363,70],[249,242],[235,52],[277,811],],
'63':[[303,3],[171,1333],[214,50],[227,250],],
'67':[[381,472],],
'77':[[89,70],],
'81':[[89,358],[191,251],[89,321],[12,46],[174,282],[89,350],[277,5],[171,1327],[171,99],[277,22],[227,176],[227,213],[227,240],[335,947],],
'86':[[42,894],],
'134':[[224,34],],
'147':[[363,133],[54,938],[218,95],[313,156],],
'149':[[395,25],[345,47],[306,949],[395,47],[345,23],],
'152':[[313,203],],
'154':[[224,155],[384,6837],],
'155':[[277,734],],
'189':[[54,923],],
'196':[[213,365],],
'205':[[243,236],],
'224':[[57,298],],
'239':[[384,5418],],
'275':[[384,2110],[384,890],],
'276':[[171,262],[68,133],[7,71],[243,275],[243,16],[381,6],[68,29],],
'279':[[70,662],[384,9379],[116,84],[197,430],[355,615],[277,575],],
'298':[[381,257],[384,7782],[384,6193],[381,284],[246,782],],
'306':[[246,1737],],
'345':[[384,6508],],
'364':[[355,401],[246,1048],],
'396':[[54,1015],],
'412':[[234,242],[320,141],[235,73],[10,233],[10,241],[234,234],[89,123],[213,400],[320,71],[189,95],[213,246],[234,88],[116,107],[178,94],[89,461],[10,89],[189,292],[178,86],[189,284],],
'422':[[189,273],[396,91],[396,50],[10,118],[10,122],[189,520],[189,585],[384,8119],[384,7468],[384,6259],[384,5855],[10,222],[384,5048],[197,349],[384,4437],[384,2488],[42,883],[381,558],[381,155],[381,132],[381,119],[213,127],[213,131],[381,45],[363,514],[363,82],[355,851],[189,128],[355,597],[48,3517],[189,124],[54,405],[335,3310],[186,421],[335,3273],[217,299],[218,66],[335,3075],[178,258],[335,2301],[178,220],[335,2228],[335,1872],[335,1864],[331,99],[331,76],[322,59],[178,101],[320,96],[396,180],[313,131],[313,56],[70,497],[80,36],[302,86],[296,40],[84,81],[84,187],[84,242],[170,251],[84,377],[84,384],[89,103],[89,109],[153,558],[153,545],[277,649],[277,631],[231,89],[153,485],[234,119],[234,123],[277,561],[277,549],[277,439],[89,171],[153,153],[89,424],[234,223],[153,111],[153,68],[142,150],[89,446],[134,89],[235,91],[95,98],[95,143],[95,363],[235,193],[116,72],[116,91],[235,349],[116,119],[128,62],[121,112],],
'425':[[189,183],[156,39],[396,55],[234,139],[355,861],[48,3237],[234,133],[10,132],[10,138],[213,147],[48,2858],[189,189],[213,141],],
'429':[[89,137],[213,159],[10,150],[189,201],[76,32],[234,151],],
'434':[[189,221],[363,163],[235,129],[178,126],[10,170],[218,116],[213,179],[335,2524],[234,171],],
'436':[[224,61],],
'441':[[234,194],[189,244],[235,152],[10,193],[363,186],[213,202],[218,139],[178,149],],
'443':[[277,41],[227,196],],
'454':[[384,6914],],
'464':[[314,44],[363,429],],
'471':[[189,452],[355,446],[189,165],[10,351],[189,91],[89,400],],
'482':[[381,412],[384,6280],[381,328],],
'483':[[48,3054],],
'507':[[384,5210],],
'515':[[331,9],[19,91],[48,92],[83,68],[12,608],[289,36],[48,2123],[12,455],[83,139],[48,2462],[39,983],[48,766],[315,36],[306,186],[63,94],[83,120],[171,1166],[121,2],[331,535],],
'518':[[83,59],],
'519':[[179,979],],
'520':[[39,279],[306,119],[306,431],[48,133],],
'525':[[48,118],[48,4874],],
'529':[[381,617],],
'540':[[335,994],[12,167],],
'546':[[362,28],[62,30],],
'550':[[315,120],[315,92],[48,3046],[48,3279],[306,519],[306,467],[48,2759],[200,272],[200,114],[200,88],[289,127],[289,92],[48,1437],[48,1376],[12,419],[12,271],[289,120],[121,163],[315,127],],
'552':[[335,3361],],
'554':[[249,274],],
'575':[[246,874],],
'576':[[246,1073],],
'580':[[384,8440],],
'642':[[322,117],[128,115],],
'650':[[306,103],],
'656':[[224,229],[315,76],[289,76],],
'671':[[54,915],],
'674':[[68,97],[384,6737],],
'740':[[289,69],[224,18],[315,69],],
'823':[[54,1001],[54,1057],[54,1050],],
'902':[[384,8256],],
'907':[[171,22],[227,20],],
'921':[[384,7591],],
'926':[[277,540],[384,2132],[320,156],],
'931':[[39,548],],
'935':[[220,63],],
'940':[[191,283],],
'960':[[363,300],[313,208],],
'963':[[335,3110],[220,88],],
'1004':[[303,81],],
'1194':[[89,160],[213,235],],
'1202':[[246,1889],[251,240],],
'1301':[[191,110],[81,35],[363,105],[157,33],[116,82],[218,81],[142,96],],
'1305':[[381,231],[384,7756],[384,7710],[381,294],],
'1309':[[384,6166],],
'1310':[[384,4559],],
'1314':[[384,4577],[384,4593],[381,581],],
'1450':[[322,177],[128,175],],
'1481':[[277,726],],
'1589':[[54,957],[54,894],],
'1608':[[170,221],[337,97],[170,258],[384,7479],],
'1671':[[54,963],],
'1767':[[48,2646],],
'1769':[[48,2648],],
'1771':[[48,2651],],
'1772':[[48,2653],],
'1773':[[48,2726],[48,2716],],
'1774':[[48,2728],[48,2718],],
'1778':[[199,68],[363,675],],
'1779':[[48,2344],],
'1811':[[379,179],],
'1824':[[48,3410],[48,2950],],
'1825':[[48,3414],[48,2954],],
'1828':[[54,900],],
'1963':[[384,6867],],
'2036':[[277,18],[355,72],],
'2042':[[384,4078],[384,9881],[224,110],],
'2076':[[235,346],],
'2159':[[54,950],],
'2169':[[54,887],],
'2191':[[54,1023],[54,904],],
'2193':[[54,944],],
'2202':[[54,997],[54,1046],],
'2207':[[54,1017],],
'2213':[[54,1059],],
'2412':[[128,135],[199,43],[322,137],[363,411],[355,1435],[363,650],[384,5260],],
'2464':[[191,191],[191,67],[363,631],[225,38],[231,77],],
'2547':[[171,34],[211,25],[92,23],[124,25],[277,903],[227,29],],
'2570':[[355,1415],],
'2672':[[102,120],],
'2675':[[384,1703],[384,1678],[384,626],[384,15],[384,241],[384,2417],[384,2441],[384,2476],[384,2455],[384,1399],[384,1422],[384,39],[384,2667],],
'2753':[[121,120],],
'2786':[[345,17],[395,19],],
'2910':[[224,100],],
'2971':[[153,511],],
'3024':[[384,1015],[257,154],],
'3054':[[246,1939],],
'3139':[[266,328],],
'3200':[[384,93],],
'3486':[[313,316],],
'3622':[[384,142],],
'3644':[[188,135],],
'3912':[[384,9554],],
'3981':[[251,82],],
'4079':[[277,700],],
'4212':[[314,95],],
'4402':[[355,1178],],
'4433':[[344,317],],
'4469':[[355,95],],
'4629':[[384,905],[384,1624],[384,933],[384,157],[384,128],[384,1359],[384,1344],[384,1204],[384,1262],[384,1217],],
'4650':[[384,321],],
'5040':[[384,5553],],
'5096':[[384,6919],],
'5248':[[395,74],],
},{'40':[[384,2405],],
'86':[[65,146],],
'277':[[7,72],[68,30],[68,134],[381,7],[171,263],[243,17],[243,276],],
'696':[[161,354],],
'1180':[[384,6597],],
'1453':[[42,908],[309,28],],
'3622':[[384,2386],],
'4233':[[329,53],],
},{'1':[[242,23],[227,206],[224,192],[223,56],[218,311],[211,169],[344,81],[344,75],[39,563],[39,781],[41,197],[211,4],[41,383],[242,1],[355,752],[54,56],[197,297],[355,1],[324,36],[242,6],[70,447],[374,37],[313,186],[355,9],[83,116],[363,276],[88,26],[92,27],[92,30],[92,35],[92,186],[95,1],[95,7],[95,14],[95,24],[95,519],[95,524],[355,1503],[290,139],[355,20],[355,357],[242,210],[277,968],[277,574],[277,569],[186,427],[171,451],[171,454],[171,459],[277,131],[277,51],[254,98],[254,93],[254,90],[235,453],],
'13':[[384,7795],],
'14':[[211,17],],
'15':[[377,20],],
'18':[[335,1045],],
'23':[[344,340],[355,595],[355,823],[335,2624],[344,30],[344,365],[290,9],[30,496],[30,45],[30,20],[7,99],[171,290],[355,527],[355,696],],
'26':[[290,64],[344,99],[197,46],[335,3799],[70,17],[335,27],[188,227],[243,250],[355,549],[70,43],[246,1822],[185,34],[179,7],[174,272],[70,790],[355,1493],[277,86],[171,1231],[355,789],],
'33':[[355,1485],[197,631],[197,21],[153,6],[70,28],[235,59],[121,136],[171,1249],[70,799],[185,52],],
'34':[[384,7363],[355,395],],
'63':[[39,497],[274,735],],
'77':[[384,3427],],
'83':[[153,129],[335,936],],
'89':[[313,212],],
'99':[[335,1037],],
'136':[[335,51],],
'150':[[335,968],],
'154':[[142,148],],
'158':[[344,11],[344,348],[7,77],[381,640],[243,3],[171,268],[381,25],],
'217':[[335,999],],
'241':[[197,429],[70,661],],
'277':[[116,83],],
'279':[[355,21],],
'281':[[290,133],[290,17],[118,46],[290,667],[244,47],[243,282],[243,25],[171,276],[235,64],[7,85],[355,506],[41,368],[344,2],],
'412':[[277,547],],
'506':[[48,1294],],
'931':[[48,4317],],
'979':[[355,614],[186,419],],
'984':[[70,90],[197,73],],
'1124':[[39,331],],
'1160':[[335,1022],],
'2466':[[84,433],],
'2675':[[384,5975],],
'4115':[[384,9378],],
'4433':[[384,7340],],
},{'12':[[246,312],[246,467],],
'39':[[384,2810],],
'62':[[246,1807],],
'279':[[243,4],[171,269],[381,641],[381,26],[344,12],[344,349],[7,78],],
'479':[[39,668],],
'1255':[[246,1908],],
'4943':[[384,3683],],
},{'3':[[41,377],],
'7':[[235,63],[118,45],[361,35],[142,74],[244,46],],
'9':[[384,5772],],
'12':[[125,81],],
'14':[[76,54],],
'26':[[160,75],],
'48':[[57,71],[142,176],[131,79],[173,78],[86,69],[137,65],],
'61':[[235,254],],
'71':[[246,1756],],
'77':[[164,182],[335,3352],[164,367],[172,162],[9,129],[30,239],[29,129],[384,8892],[246,992],],
'79':[[249,45],],
'91':[[335,2994],],
'99':[[384,5374],],
'137':[[188,229],],
'150':[[84,164],],
'158':[[384,8186],],
'165':[[162,321],],
'167':[[361,74],],
'187':[[181,590],],
'199':[[112,87],],
'205':[[164,300],],
'210':[[49,510],],
'217':[[320,65],],
'220':[[62,72],[213,266],],
'225':[[62,95],],
'228':[[49,83],],
'230':[[304,238],],
'244':[[164,635],],
'263':[[344,1],[243,281],[41,367],[355,505],[171,275],[290,132],[290,16],[243,24],[7,84],[290,666],],
'277':[[224,156],[384,6868],[384,5856],],
'284':[[251,78],],
'295':[[39,598],],
'339':[[176,139],],
'347':[[355,1118],],
'374':[[384,1752],],
'381':[[355,468],],
'445':[[355,588],],
'447':[[162,50],],
'458':[[265,24],],
'478':[[289,42],],
'525':[[96,187],],
'588':[[39,150],],
'638':[[12,559],],
'654':[[315,42],],
'655':[[162,62],],
'664':[[156,35],],
'696':[[39,882],[274,328],],
'700':[[179,61],[57,248],],
'709':[[164,640],],
'712':[[82,548],],
'724':[[18,34],],
'797':[[181,732],],
'801':[[384,2313],],
'845':[[225,32],],
'935':[[191,141],],
'945':[[268,32],],
'977':[[30,427],],
'1089':[[181,95],],
'1101':[[83,32],[242,31],[39,322],],
'1109':[[335,988],],
'1124':[[39,671],],
'1125':[[381,605],],
'1184':[[384,1245],],
'1241':[[39,843],],
'1255':[[246,1916],],
'1281':[[277,447],],
'1314':[[381,577],],
'1326':[[384,3089],],
'1333':[[157,56],],
'1357':[[355,1394],],
'1452':[[54,489],],
'1476':[[251,98],],
'1547':[[48,280],],
'1575':[[181,717],],
'1618':[[246,1187],],
'1849':[[118,213],[244,244],],
'2033':[[181,951],],
'2069':[[52,231],],
'2096':[[274,371],],
'2369':[[384,892],],
'2721':[[113,21],],
'2775':[[331,191],],
'2989':[[321,259],],
'3549':[[180,222],],
'3591':[[181,791],],
'3602':[[394,144],],
'3959':[[246,1946],],
'3997':[[251,329],],
'4067':[[277,197],],
'4822':[[384,1981],],
'4934':[[384,3543],],
},{'15':[[384,8857],[384,8870],],
'23':[[30,491],[30,15],[355,522],[344,360],[171,285],[344,335],[344,25],[7,94],[290,4],],
'63':[[99,250],],
'575':[[246,1761],],
'926':[[174,44],[243,78],],
'1101':[[277,74],],
'1305':[[42,769],],
'1309':[[42,774],],
},{'33':[[174,71],],
'63':[[30,493],[355,524],[171,287],[344,362],[30,17],[7,96],[344,337],[344,27],[290,6],],
'82':[[277,173],[277,77],[217,381],[384,7669],[355,208],[41,141],[384,5738],[384,7684],],
'3222':[[174,53],],
'4736':[[384,1073],],
},{'34':[[384,8927],],
'63':[[30,23],[355,530],[30,499],[344,368],[344,343],[344,33],[290,12],[7,102],[266,254],[244,198],[188,236],[171,293],[118,167],],
'77':[[384,7203],],
'82':[[251,61],[384,1713],[162,267],[384,5728],[172,108],[251,156],[384,2625],],
'271':[[42,1030],],
'277':[[277,686],],
'306':[[30,338],],
'395':[[87,49],],
'449':[[42,516],[162,274],[162,284],[42,523],],
'772':[[384,4218],],
'915':[[384,5943],[384,6150],[384,4811],],
'931':[[384,8398],],
'1004':[[384,8421],],
'1109':[[384,7174],[384,6483],[384,6038],],
'1125':[[384,941],],
'1151':[[277,28],[121,391],[70,433],[197,283],[227,182],],
'1245':[[99,149],[217,470],[251,77],[384,912],[384,1266],[42,536],[384,955],[384,1224],],
'1455':[[266,270],[217,364],[118,201],[384,2569],[42,966],[384,6319],[384,6311],[217,398],[42,972],[244,232],[384,5173],[52,70],[384,6107],[384,6094],[52,94],],
'1765':[[384,7920],],
'2300':[[384,4128],],
'2348':[[384,2854],[290,203],[384,2875],[179,149],[179,1258],],
'3536':[[217,459],[217,428],[344,284],],
'4832':[[384,2172],],
},{'2':[[384,2479],],
'12':[[89,116],[355,942],[277,333],[89,125],[30,62],[30,163],],
'23':[[197,561],[396,162],[153,893],[153,847],[153,692],[153,103],[116,128],[70,718],[84,162],[189,615],[213,458],],
'26':[[355,1305],],
'39':[[390,147],[21,164],],
'63':[[355,114],[355,448],[396,99],[153,656],[89,72],[189,529],[153,988],[217,374],[186,358],[153,1192],],
'73':[[153,1032],[277,522],],
'81':[[189,87],[234,84],[213,106],[189,391],[10,85],[218,53],[213,346],],
'128':[[363,67],],
'149':[[54,1432],],
'152':[[246,57],],
'225':[[153,671],],
'248':[[54,458],[153,135],],
'267':[[321,14],[321,422],[390,158],[30,4],[21,175],[171,299],[290,30],[290,678],[7,108],],
'279':[[335,1000],[384,7796],[335,1038],],
'315':[[355,1052],],
'447':[[153,752],],
'502':[[335,56],[335,44],],
'513':[[152,135],],
'599':[[153,583],],
'1128':[[54,1475],],
'1155':[[313,468],],
'1169':[[39,433],],
'1304':[[384,5615],[384,5436],],
'1362':[[355,926],],
'1833':[[306,681],],
'1920':[[48,4067],[306,1375],],
'1930':[[335,1288],],
'2022':[[213,355],[218,268],],
'2127':[[335,3299],[335,3723],[335,793],[335,419],[335,354],[335,2681],[335,1938],],
'2157':[[54,819],],
'2158':[[54,794],],
'3796':[[231,57],],
},{'12':[[7,110],[321,424],[21,177],[30,6],[321,16],[290,680],[290,32],[171,301],[390,160],],
'15':[[30,150],],
'18':[[30,73],],
'23':[[30,179],],
'816':[[390,151],[21,168],[335,3124],[335,2609],],
'932':[[335,2428],],
'937':[[30,259],],
'939':[[30,207],],
},{'18':[[152,161],[246,936],],
'165':[[30,8],[21,179],[171,303],[7,112],[290,34],[290,682],[321,18],[321,426],[390,162],],
},{'7':[[82,502],],
'12':[[274,114],[384,7226],[249,74],[23,135],[25,56],[246,1602],[277,111],[384,6791],[384,4910],[381,90],[379,109],[373,85],[246,1005],[246,930],[246,488],[246,237],[48,193],[361,106],[361,67],[243,261],[243,43],[355,796],[235,227],[49,124],[218,374],[52,205],[218,260],[54,692],[54,786],[54,810],[293,135],[70,213],[191,65],[313,385],[188,205],[84,264],[179,1040],[95,259],[178,298],[96,135],[96,144],[321,126],[335,469],[335,459],[321,185],[164,249],[121,398],[274,400],[148,150],[148,161],[162,348],[153,253],[161,585],[153,555],[160,557],[321,233],[331,52],],
'39':[[191,189],],
'43':[[42,668],[42,767],[153,94],[243,241],[84,318],],
'48':[[153,836],],
'57':[[181,195],[335,1040],[395,109],[95,491],],
'63':[[359,42],[246,1905],],
'68':[[96,158],],
'128':[[396,24],[191,24],[106,22],[108,17],[69,24],[53,26],[50,26],[347,20],[73,22],[334,22],[361,24],[47,18],[44,30],[292,23],[154,20],[328,18],[280,30],[27,20],[26,18],[175,18],[276,20],[17,21],[275,18],[155,19],[147,18],],
'164':[[339,251],[321,311],[170,201],[277,827],[315,149],[289,149],[359,135],[39,624],[160,197],],
'215':[[48,394],],
'241':[[48,3289],[48,2769],[48,908],],
'248':[[246,1949],[246,1512],],
'267':[[30,33],[30,507],[321,4],[171,309],[7,118],[102,18],[102,200],],
'284':[[384,8399],],
'305':[[379,202],[29,134],[9,134],[160,498],],
'318':[[395,124],],
'447':[[332,178],],
'551':[[306,1141],[12,210],],
'566':[[48,1073],],
'800':[[251,323],],
'817':[[384,6109],[384,6096],],
'861':[[246,1017],[363,576],],
'931':[[384,7177],],
'1211':[[197,177],],
'1244':[[39,866],],
'1362':[[160,441],],
'1770':[[48,2249],],
'1843':[[179,1163],],
'1865':[[246,544],],
'2006':[[372,23],],
'2339':[[70,340],],
'2957':[[153,256],],
'4157':[[306,529],],
},{'2':[[7,121],[321,7],[30,36],[304,263],[171,312],[30,510],[102,203],[102,21],[384,8194],],
'15':[[294,25],],
'24':[[84,267],],
'34':[[37,83],[350,172],],
'63':[[30,126],[30,478],],
'128':[[203,27],],
'154':[[249,225],],
'396':[[363,152],[313,175],],
'698':[[74,72],[16,72],],
'851':[[84,279],[84,296],],
'3974':[[249,195],],
},{'7':[[82,388],],
'12':[[384,3870],[10,239],[358,372],[358,305],[128,75],[181,765],[322,72],[284,72],[284,60],[186,254],[48,4545],[270,87],[188,111],[57,217],[57,286],[261,202],[261,145],[111,49],[181,403],[249,217],[247,85],[235,89],[100,172],[234,240],[93,57],[213,244],[189,290],],
'15':[[86,58],[57,60],[111,85],[342,111],[82,342],[342,287],],
'19':[[284,46],[384,8902],[181,375],],
'23':[[102,167],[213,463],[102,156],[213,481],[36,169],[36,189],[102,113],[284,221],[284,194],[284,180],[284,84],[102,125],[213,268],],
'27':[[84,353],[277,882],],
'30':[[48,3610],],
'39':[[249,223],[384,301],[321,80],],
'43':[[258,22],[36,159],],
'48':[[247,62],[270,62],],
'56':[[249,190],],
'57':[[82,403],],
'63':[[102,129],[153,357],[189,93],[181,813],],
'77':[[384,1629],],
'85':[[153,538],],
'150':[[36,178],],
'152':[[30,68],],
'162':[[102,54],[284,169],],
'164':[[321,376],],
'248':[[69,54],],
'267':[[176,16],[176,279],[321,26],[102,2],[247,240],[171,316],[321,432],[7,125],],
'305':[[153,458],],
'351':[[302,143],[134,141],],
'411':[[234,86],[10,87],],
'469':[[304,219],],
'470':[[84,487],[60,100],[384,2508],],
'501':[[121,315],],
'502':[[89,484],],
'543':[[304,254],],
'596':[[133,95],],
'599':[[153,275],],
'880':[[93,65],[111,66],[93,98],],
'912':[[358,382],[261,212],],
'961':[[350,206],],
'1166':[[153,1017],],
'1498':[[48,2659],],
'1519':[[48,4755],],
'1829':[[189,402],],
'1950':[[48,4516],],
'2576':[[102,118],],
'2882':[[135,48],],
},{'23':[[7,132],[321,33],[247,247],[100,158],[102,9],[135,205],[208,34],[171,323],[176,23],[176,286],[321,439],],
'26':[[171,118],],
'292':[[86,232],],
'447':[[84,554],],
},{'77':[[363,438],],
'203':[[321,441],[321,35],[102,11],[247,249],[171,325],[176,25],[176,288],[7,134],],
'231':[[363,436],],
'2500':[[86,231],[100,170],[135,217],],
'2670':[[199,53],[363,660],],
'4872':[[384,2735],],
},{'267':[[102,29],[102,209],[160,688],[171,329],[176,2],[186,17],[186,504],[7,138],],
},{'23':[[49,79],],
'26':[[7,141],[186,20],[176,5],[102,32],[102,212],[160,691],[171,332],[186,507],],
'89':[[49,187],],
'154':[[49,275],],
},{'12':[[250,48],[367,93],],
'19':[[367,34],[310,22],[355,533],],
'56':[[171,116],],
'92':[[160,653],],
'176':[[365,111],],
'220':[[384,1840],[335,880],[176,190],[160,635],[176,87],],
'294':[[102,213],[176,6],[102,33],[186,508],[160,692],[186,21],[7,142],[171,333],],
'381':[[355,1077],],
'417':[[142,66],[89,317],[153,541],[384,9670],[373,66],[373,78],[234,344],[250,42],[367,44],],
'996':[[224,47],[200,72],[42,979],[384,8884],[39,597],[42,375],[384,4536],[32,25],[158,36],],
'1198':[[52,297],[52,292],[52,333],],
'1422':[[42,721],],
'2312':[[65,86],],
'2690':[[251,335],],
'4790':[[384,1682],],
},{'23':[[160,631],],
'295':[[176,7],[102,34],[102,214],[186,22],[7,143],[160,693],[171,334],[186,509],],
'447':[[54,1084],[54,1295],],
'1699':[[176,128],],
},{'16':[[7,152],[28,78],[339,302],[339,19],[171,343],[176,34],[176,295],[186,3],],
'82':[[277,418],],
'89':[[186,208],[186,218],],
'133':[[186,196],],
'227':[[277,527],],
'359':[[186,88],],
'447':[[102,81],],
'546':[[186,175],],
'591':[[384,3074],],
'1426':[[102,72],],
},{'3':[[48,4744],],
'12':[[186,189],[246,73],[161,218],[153,151],[48,439],[381,116],[48,1386],[84,140],[48,1447],[48,1491],[70,75],[48,2597],[197,58],[384,9826],],
'16':[[12,462],],
'43':[[246,825],[246,781],[246,928],[335,3270],[96,126],[246,732],],
'56':[[249,282],],
'57':[[224,134],],
'63':[[39,770],[153,504],[224,178],],
'99':[[306,426],],
'159':[[48,334],],
'164':[[246,891],[381,283],],
'248':[[186,157],],
'267':[[186,7],[176,299],[176,38],[171,347],[28,82],[339,306],[339,23],[7,156],],
'277':[[246,875],],
'305':[[153,406],[306,494],[381,470],],
'523':[[48,4811],],
'726':[[246,1692],],
'786':[[48,2582],],
'861':[[48,4652],],
'1003':[[384,7781],[381,256],[384,6192],],
'1169':[[381,99],],
'1211':[[48,1371],[306,463],],
'1244':[[246,959],],
'1602':[[48,1432],],
'1813':[[48,4867],],
'2198':[[54,926],],
'4150':[[306,325],],
},{'3':[[274,688],],
'14':[[249,192],],
'15':[[82,339],],
'23':[[48,592],[48,1373],[48,1434],[153,620],[153,599],],
'26':[[384,7847],[246,721],[274,224],[246,1289],[246,1021],],
'30':[[342,282],[342,269],],
'34':[[57,288],[181,544],],
'36':[[181,662],],
'59':[[384,6114],[384,1409],],
'77':[[342,108],],
'84':[[249,250],[246,1487],],
'147':[[384,9823],],
'155':[[246,1525],],
'220':[[186,259],],
'277':[[277,109],[277,267],],
'298':[[339,307],[339,24],[171,348],[186,8],[7,157],[176,39],[28,83],[176,300],],
'303':[[7,165],[339,2],[171,356],[186,34],[186,519],],
'422':[[246,1479],[355,1046],[278,49],[278,43],[246,967],],
'451':[[217,361],],
'479':[[306,1283],],
'518':[[274,274],[153,92],[186,480],],
'532':[[344,262],],
'554':[[246,748],],
'603':[[86,246],[384,9733],],
'655':[[384,253],],
'656':[[303,101],],
'926':[[384,7285],],
'1135':[[344,253],],
'1315':[[274,324],],
'1351':[[246,1654],],
'1414':[[186,191],],
'1627':[[246,1559],[246,1537],[246,1612],],
'1684':[[232,108],],
'1813':[[48,3952],],
'2008':[[188,215],],
'2010':[[277,712],[277,676],],
'2257':[[232,50],],
'2499':[[86,206],],
'2806':[[384,3164],[384,3402],],
'2979':[[232,119],],
'2981':[[243,176],],
'3608':[[186,69],],
'3912':[[246,1443],[246,1118],],
'3913':[[246,1128],],
'5155':[[384,8798],],
},{'16':[[274,766],],
'19':[[246,1131],],
'23':[[39,615],],
'177':[[168,35],],
'272':[[331,277],],
'299':[[176,301],[186,9],[28,84],[176,40],[171,349],[7,158],[339,25],[339,308],],
'1132':[[384,7862],],
},{'82':[[344,162],[243,94],[243,146],[174,23],[384,7230],[355,291],[384,8720],[384,8585],],
'155':[[125,123],[52,294],],
'165':[[95,157],],
'224':[[342,130],],
'252':[[213,378],[384,9193],[322,217],[126,34],[128,215],[342,192],[170,242],],
'300':[[7,159],[176,302],[176,41],[274,767],[339,309],[339,26],[168,36],[384,7863],[28,85],[171,350],[186,10],],
'343':[[320,112],[54,1202],[274,304],[251,148],[384,3596],[363,694],[26,44],[9,60],[29,60],[235,334],[342,169],],
'481':[[246,1875],[290,168],[179,114],[179,1214],[384,2921],],
'926':[[174,141],[243,110],[174,123],],
'936':[[234,422],],
'1135':[[72,72],[95,333],[186,261],[342,159],[384,98],[384,3796],[186,73],[235,355],[384,5835],[209,214],[396,71],[191,79],[186,400],[54,757],[98,45],[274,189],[186,352],],
'1151':[[49,298],],
'1308':[[384,3563],[384,6540],[355,339],[234,383],],
'1319':[[384,1095],],
'1353':[[274,482],],
'1359':[[355,1354],[42,219],],
'1362':[[213,410],[89,471],],
'1416':[[171,75],[313,312],[65,101],[227,81],[313,474],],
'1424':[[217,239],[217,437],[243,116],[344,171],[217,253],[355,300],[174,48],[42,764],[355,857],[174,67],[384,2931],[217,246],[355,318],[384,1977],],
'1472':[[134,121],[302,123],[62,64],],
'1485':[[320,158],],
'1912':[[48,3940],[306,1271],],
'2242':[[384,3676],[274,262],[99,161],],
'2352':[[302,145],[134,143],],
'2384':[[209,228],],
'2608':[[186,367],],
'3898':[[246,913],],
'4106':[[384,5798],],
},{'99':[[7,161],[28,87],[384,4674],[384,3798],[171,352],[176,43],[176,304],[186,12],[186,75],[186,263],[384,2053],[384,2045],[384,7385],[339,28],[339,311],],
'217':[[186,369],[384,5837],[384,5364],[384,5383],],
'314':[[162,309],],
'780':[[162,313],],
'1125':[[384,5848],[186,435],[186,441],],
'4348':[[384,5386],],
},{'250':[[381,163],],
'263':[[186,33],[186,518],[171,355],[339,1],[7,164],],
'3867':[[246,457],],
},{'299':[[171,357],[186,35],[186,520],[339,3],[7,166],],
},{'124':[[48,4954],],
'191':[[222,18],],
'248':[[381,415],[379,201],[379,188],[355,1350],[339,241],[339,10],[7,173],[335,2701],[335,2645],[335,2316],[36,164],[335,1958],[321,301],[54,1257],[121,350],[186,527],[42,1236],[42,1251],[160,489],[186,42],[160,497],[48,2178],[171,364],[246,163],],
'304':[[186,36],[186,521],[339,4],[7,167],[171,358],],
'328':[[48,4945],],
'358':[[20,101],[189,340],[57,150],[57,293],[29,133],[394,84],[191,257],[381,469],[9,133],[86,143],[199,66],[89,244],[209,141],[210,86],[34,75],[36,82],[180,98],[100,81],[332,84],[218,230],[363,574],[179,1178],[363,673],[134,126],[135,86],[137,126],[146,77],[148,93],[179,1169],[302,128],[178,163],[285,74],[284,111],[283,82],[225,41],[229,104],[187,95],[234,290],[270,147],[173,171],[269,110],[247,145],[213,298],[246,1631],[10,289],],
'467':[[10,343],[164,317],[165,60],[246,1925],[384,4967],[379,210],[161,104],[274,344],[160,163],[160,138],[290,101],[42,238],[363,722],[54,515],[331,144],[335,1543],[181,159],[246,1758],[335,2986],[89,342],[358,282],[197,475],[84,305],[335,3468],[186,336],[355,1447],[54,1504],[49,317],[342,156],],
'610':[[42,1326],[48,797],[48,2145],[181,998],[181,930],[181,615],[181,536],[181,249],[217,146],[217,229],[179,1290],[178,313],[176,237],[384,283],[176,181],[39,785],[246,346],[381,359],[172,110],[246,629],[246,698],[246,716],[246,804],[246,961],[246,1092],[164,477],[246,1291],[164,429],[246,1592],[164,291],[378,28],[54,1199],[164,163],[246,1967],[162,181],[261,158],[266,61],[268,58],[161,388],[160,516],[49,34],[153,1086],[283,246],[384,5901],[384,6272],[384,6457],[153,234],[306,217],[152,180],[306,1088],[121,433],[121,92],[307,88],[308,66],[39,698],[321,338],[321,410],[329,65],[331,78],[331,104],[331,112],[113,36],[331,217],[331,404],[358,318],[109,25],[335,1259],[99,77],[39,572],[335,2078],[358,293],[335,2224],[95,432],[335,2468],[95,104],[30,88],[384,8434],[86,252],[335,3071],[384,9472],[391,45],[12,425],[59,45],[28,66],[339,111],[54,1421],[340,66],[341,88],[42,1205],[343,74],[355,1008],[355,333],[355,676],[396,121],],
'1810':[[384,2980],[335,3473],[246,519],[246,528],[95,81],[48,2663],[84,153],[384,9510],],
'2347':[[306,493],[306,1569],[306,1601],[335,2205],[335,3052],[197,213],[153,405],[381,501],[153,457],[70,376],],
'2465':[[384,833],[331,414],[84,117],],
'2988':[[176,216],[384,1754],[384,5712],[384,9281],[153,820],[246,1412],[352,79],[337,93],[193,79],[384,6500],[384,7527],[384,6547],],
'3922':[[246,1264],[246,1648],],
'4766':[[384,9183],[384,5789],[384,5115],[384,1443],[384,6009],[384,8176],[384,6533],[384,3693],],
},{'15':[[28,30],[39,772],],
'23':[[335,3283],[246,1775],],
'38':[[246,841],],
'48':[[246,989],],
'153':[[153,507],],
'277':[[355,266],[243,87],],
'305':[[171,359],[7,168],[339,5],[186,522],[186,37],],
'346':[[48,3580],],
'453':[[246,1628],],
'482':[[355,849],],
'838':[[306,472],[306,445],],
'861':[[355,859],[246,1736],],
'921':[[30,337],],
'1156':[[48,4052],[306,1360],],
'1403':[[306,1280],[48,3949],],
'1414':[[246,1680],],
'1591':[[48,503],[48,1346],],
'3268':[[179,95],[179,994],[290,148],],
},{'23':[[343,65],[246,185],[159,111],],
'49':[[246,1787],],
'137':[[246,240],],
'306':[[186,38],[186,523],[171,360],[339,6],[7,169],],
'550':[[306,651],],
'785':[[146,164],],
'2889':[[137,214],[173,259],],
},{'7':[[254,20],[182,51],[182,3],[51,3],[171,381],[56,23],],
'13':[[384,4092],],
'117':[[8,0],],
'301':[[9,61],[29,61],],
'313':[[8,16],],
'322':[[51,46],],
},{'7':[[8,32],[56,21],[254,18],[171,379],[8,3],],
'117':[[51,0],],
'144':[[365,137],],
'186':[[298,68],[127,68],],
'309':[[51,34],],
'313':[[51,21],[51,17],],
'734':[[56,67],],
'1364':[[51,33],[143,55],[141,76],],
},{'7':[[8,5],[264,3],[56,25],[171,383],[254,22],[264,33],],
'117':[[182,0],],
'183':[[182,37],],
'313':[[182,16],],
'322':[[8,35],],
'2006':[[182,30],],
},{'14':[[8,13],[15,13],[32,13],[33,13],[45,11],[51,11],[109,11],[110,13],[126,11],[130,13],[136,11],[163,13],[166,13],[168,13],[182,13],[184,11],[201,13],[219,11],[255,13],[256,11],[258,9],[259,11],[262,11],[264,13],[278,13],[281,11],[312,11],[348,13],[357,9],[376,13],[378,13],[391,13],],
},{'311':[[8,14],[15,14],[32,14],[33,14],[378,14],[45,12],[51,12],[376,14],[357,10],[348,14],[312,12],[109,12],[110,14],[281,12],[126,12],[278,14],[130,14],[136,12],[264,14],[163,14],[262,12],[166,14],[168,14],[182,14],[184,12],[201,14],[259,12],[219,12],[258,10],[255,14],[256,12],[391,14],],
'336':[[323,12],[107,14],[279,12],[265,10],[129,12],],
'1328':[[142,12],[123,12],[304,12],[165,12],[202,14],[337,14],[342,12],[345,12],[93,10],[82,12],[365,10],[65,10],[42,12],[221,14],[395,14],],
},{'19':[[12,542],[384,3063],],
'20':[[384,5478],],
'23':[[179,81],],
'43':[[48,276],],
'57':[[384,6784],],
'82':[[48,353],],
'167':[[41,359],[184,25],],
'174':[[48,427],],
'203':[[305,73],],
'214':[[305,79],],
'215':[[48,186],[54,868],[48,320],],
'217':[[179,1125],],
'241':[[48,421],],
'275':[[48,416],],
'277':[[306,120],[48,134],],
'312':[[376,15],[45,13],[312,13],[348,15],[33,15],[32,15],[281,13],[278,15],[264,15],[262,13],[259,13],[357,11],[258,11],[256,13],[109,13],[110,15],[126,13],[130,15],[136,13],[255,15],[219,13],[163,15],[166,15],[168,15],[8,15],[201,15],[15,15],[184,13],[182,15],[378,15],[391,15],],
'314':[[179,1082],],
'500':[[48,317],],
'515':[[48,343],],
'805':[[384,4108],],
'815':[[48,183],],
'878':[[384,3070],],
'887':[[306,572],],
'912':[[48,391],],
'1255':[[48,330],],
'1281':[[179,1122],],
'1282':[[179,1071],],
'1525':[[197,96],[48,150],[153,173],[179,619],[306,136],[70,152],],
'1530':[[48,175],],
'1532':[[51,20],[48,179],],
'1541':[[153,197],[179,640],[54,278],[335,89],[197,117],[70,173],[48,230],[306,157],],
'1545':[[48,249],],
'1585':[[48,488],],
'1853':[[48,3707],[306,952],],
'2042':[[384,4094],],
'2055':[[51,16],],
'2183':[[54,865],],
'3053':[[384,3150],],
'4897':[[384,3100],],
},{'12':[[384,3980],[114,53],[169,54],[42,541],[384,3996],[42,490],],
'16':[[39,221],],
'23':[[335,3486],],
'26':[[42,514],[384,1049],],
'63':[[384,1078],],
'99':[[39,762],[384,7247],[384,7533],[384,7424],[316,44],[384,7317],[384,6606],],
'100':[[384,3313],[384,2363],],
'117':[[42,117],],
'140':[[52,287],],
'186':[[54,1114],[48,1776],],
'199':[[70,546],],
'217':[[48,648],[384,8156],[384,9625],[384,1076],],
'308':[[8,17],],
'346':[[52,274],],
'507':[[384,5204],],
'572':[[52,328],[42,1037],],
'642':[[39,911],],
'671':[[350,63],[133,60],],
'780':[[384,4307],],
'791':[[217,217],],
'1125':[[384,6937],[384,6850],],
'1172':[[39,453],[39,933],],
'1177':[[384,5393],[384,4619],],
'1180':[[358,254],[384,6387],],
'1182':[[39,487],],
'1257':[[39,916],],
'1286':[[384,2552],],
'1290':[[41,69],],
'1348':[[42,532],],
'1364':[[162,308],],
'1510':[[217,45],],
'1591':[[179,1395],[179,1390],],
'1598':[[48,1573],[48,1630],],
'1611':[[48,644],],
'1679':[[114,25],[169,27],],
'1698':[[48,1588],[48,1664],],
'1829':[[153,1189],],
'1915':[[384,6953],],
'2132':[[335,3534],],
'2349':[[70,551],],
'2357':[[266,195],],
'2502':[[232,37],],
'2621':[[99,45],],
'2779':[[122,45],],
'2880':[[335,3444],],
'3236':[[174,160],],
'3519':[[179,1081],],
'3521':[[217,99],],
'3524':[[384,5730],],
'3641':[[188,246],],
'3658':[[188,251],],
'3662':[[188,279],],
'4202':[[339,158],],
'4214':[[316,37],],
'4564':[[379,45],],
'4632':[[384,189],],
'4701':[[384,8599],],
'4710':[[384,765],],
'4837':[[384,4364],],
'4908':[[384,3339],[384,9291],],
'4927':[[384,5935],],
'4931':[[384,3582],],
'5232':[[388,41],],
},{'7':[[118,67],[244,76],[217,276],],
'15':[[39,990],[41,180],[12,615],[331,3],[48,4377],[355,1316],[54,498],[63,101],[171,1173],[83,127],[344,216],[19,98],[355,1302],[121,15],[121,603],[153,363],],
'19':[[42,213],],
'23':[[342,119],[118,31],[42,221],[244,167],[176,135],[72,74],[355,1392],[217,415],[118,125],],
'33':[[189,406],],
'86':[[355,329],],
'128':[[130,22],[8,19],[168,20],[136,20],],
'230':[[176,78],],
'1123':[[217,234],],
'1359':[[52,256],],
'1370':[[355,1051],[355,1003],],
'1699':[[176,119],],
},{'7':[[337,56],[9,52],[313,136],[304,391],[298,30],[29,52],[289,110],[284,68],[269,67],[373,38],[263,71],[257,88],[257,52],[235,78],[218,85],[218,69],[209,91],[200,127],[200,101],[198,49],[196,80],[196,70],[337,49],[363,109],[69,49],[80,53],[189,132],[315,110],[156,86],[156,76],[150,45],[342,259],[127,30],[93,82],[349,41],[103,45],[363,85],],
'19':[[42,247],],
'23':[[355,1274],[48,910],[322,145],[313,111],[128,143],[128,157],[89,228],[322,159],[307,149],[48,2251],[306,531],[89,217],[326,18],[84,135],[341,149],[251,103],[81,52],[170,120],[48,2771],[48,3291],[176,101],[363,320],[176,153],[304,192],[376,23],[363,97],[81,24],[42,678],[44,141],[54,1185],[54,1080],[363,286],[363,359],],
'26':[[307,52],[341,52],],
'147':[[384,1435],],
'315':[[244,77],[176,79],[118,68],[176,136],[8,20],],
'431':[[229,131],[234,317],[218,171],[213,325],[332,111],[247,172],[210,113],[57,177],[189,367],[187,122],[180,125],[269,137],[270,174],[283,109],[36,109],[284,138],[285,101],[34,102],[20,128],[178,190],[173,198],[86,170],[148,120],[146,104],[137,153],[135,113],[89,271],[10,316],[100,108],[209,168],[394,111],],
'442':[[363,353],],
'518':[[113,57],],
'532':[[355,1323],],
'583':[[306,269],[12,325],[48,849],[121,287],],
'632':[[363,311],],
'726':[[363,549],],
'790':[[112,105],],
'934':[[39,852],],
'995':[[246,1872],],
'1104':[[384,2162],],
'1135':[[355,1313],],
'1245':[[39,869],],
'1719':[[358,123],[384,3769],[384,3780],[65,142],[161,126],[161,195],[48,3653],[384,3950],[384,3961],[384,5929],[358,77],],
'1781':[[48,4904],],
'2034':[[322,186],[128,184],],
'2221':[[341,170],[307,170],],
'2267':[[157,37],],
'2300':[[384,24],],
'2494':[[384,475],],
'2719':[[112,102],],
'3178':[[313,217],[191,235],],
'3619':[[384,7447],],
},{'18':[[274,831],],
'23':[[29,152],[181,457],[9,152],[9,143],[29,143],],
'26':[[181,433],[8,22],[9,54],[29,54],],
'134':[[29,36],[9,36],],
'135':[[181,437],],
'225':[[153,906],],
'228':[[20,35],[213,90],[229,34],[34,30],[209,39],[189,75],[36,31],[10,73],[270,44],[57,47],[187,36],[210,30],[77,39],[86,45],[285,30],[269,35],[89,54],[234,72],[180,35],[100,31],[178,46],[173,49],[131,41],[135,31],[284,36],[394,31],[137,41],[332,29],[148,32],[247,44],[146,30],[283,33],],
'328':[[9,24],[29,24],[144,22],],
'344':[[274,531],],
'407':[[189,332],[213,290],[10,281],[234,282],[89,236],[178,155],],
'420':[[181,419],],
'431':[[270,142],[180,93],[89,239],[178,158],[284,106],[86,138],[57,145],[285,69],[173,166],[187,90],[34,70],[100,76],[189,335],[332,79],[269,105],[209,136],[135,81],[20,96],[210,81],[10,284],[148,88],[213,293],[283,77],[247,140],[229,99],[137,121],[36,77],[234,285],[146,72],[394,79],],
'525':[[336,51],],
'772':[[210,78],[269,102],[209,133],[187,87],[270,139],[180,90],[173,163],[148,85],[146,69],[229,96],[137,118],[135,78],[284,103],[100,73],[86,135],[285,66],[57,142],[36,74],[332,76],[34,67],[283,74],[20,93],[394,76],[247,137],],
},{'2':[[70,334],],
'85':[[381,478],],
'164':[[244,171],[118,129],[8,25],],
'202':[[395,123],],
'370':[[9,179],[29,179],],
'562':[[162,132],],
'878':[[384,3175],],
},{'3':[[274,498],],
'12':[[307,40],[42,398],[341,40],],
'19':[[8,29],],
'128':[[29,87],[9,87],],
'147':[[182,35],[274,599],],
'317':[[29,153],[9,153],],
'346':[[193,37],[352,37],],
'355':[[274,501],[274,527],],
'961':[[193,75],[352,75],],
'1421':[[193,103],[352,103],],
},{'17':[[79,21],[350,180],[196,34],],
'23':[[23,22],[89,465],[294,30],[293,22],[183,20],[294,35],[213,404],[215,20],],
'67':[[156,117],],
'83':[[93,121],],
'149':[[311,86],[387,86],],
'173':[[230,20],],
'242':[[251,51],],
'319':[[8,30],],
'1027':[[47,29],],
'1540':[[387,36],[311,36],],
'4558':[[375,21],],
},{'2':[[215,24],[390,128],[214,160],[387,91],[23,26],[23,65],[387,34],[214,216],[214,127],[214,116],[293,26],[249,323],[384,6086],[46,37],[266,66],[384,4867],[49,114],[214,240],[384,4749],[54,21],[54,1532],[266,81],[384,4499],[293,65],[384,4488],[277,891],[382,34],[70,96],[70,127],[274,32],[70,261],[274,46],[358,103],[71,34],[274,95],[274,118],[303,133],[303,192],[355,1478],[307,253],[307,261],[274,137],[277,220],[341,261],[341,253],[153,32],[153,1443],[161,386],[336,32],[277,283],[226,37],[277,349],[321,118],[277,400],[164,45],[164,68],[321,113],[164,90],[164,123],[164,146],[321,71],[277,601],[197,142],[308,87],[171,1263],[311,91],[311,34],[176,62],[277,577],[183,24],[183,57],[185,66],[197,79],[215,57],[197,12],[214,200],],
'7':[[171,446],[171,417],[171,374],[95,9],[211,7],[355,4],[355,1496],[92,5],[242,10],[56,9],[51,42],[35,12],[254,245],[35,4],[254,85],[254,56],[308,200],[254,13],],
'9':[[214,23],],
'12':[[214,354],],
'15':[[384,7697],],
'23':[[277,1001],[161,453],[96,24],[358,171],[12,640],[214,68],],
'26':[[161,436],],
'33':[[214,142],[384,4243],],
'63':[[214,326],],
'67':[[214,273],],
'82':[[355,1499],[384,5585],],
'117':[[35,0],[92,0],[56,0],],
'125':[[281,21],],
'128':[[194,79],],
'140':[[197,155],[70,274],],
'154':[[214,197],],
'230':[[161,551],[321,151],],
'250':[[384,7934],],
'279':[[95,520],],
'308':[[182,52],],
'309':[[8,33],],
'310':[[264,34],],
'322':[[375,33],[51,44],],
'323':[[193,162],],
'324':[[9,200],],
'325':[[382,91],],
'330':[[391,73],],
'337':[[307,283],],
'375':[[214,287],[164,80],],
'376':[[311,109],[308,202],],
'420':[[253,117],],
'499':[[161,422],],
'506':[[161,541],[321,143],],
'615':[[214,340],],
'648':[[227,118],],
'650':[[56,5],[56,60],[227,146],[56,64],[227,159],[227,243],[46,55],[39,246],[214,54],[70,257],[70,767],[226,55],[92,9],[92,20],[197,609],[35,51],[197,138],[35,8],[266,47],[355,41],[171,1311],[92,182],[384,7985],[171,370],[12,646],[49,68],[214,1],[277,1007],[254,1],],
'707':[[246,539],],
'713':[[358,160],[214,331],],
'830':[[215,118],],
'831':[[23,141],],
'832':[[127,71],],
'833':[[311,107],],
'886':[[384,1333],[251,292],],
'926':[[242,213],],
'986':[[252,98],],
'1010':[[78,31],],
'1011':[[149,38],],
'1013':[[230,29],],
'1314':[[211,171],],
'1315':[[384,1311],[384,236],],
'1391':[[214,172],],
'1720':[[175,38],],
'1722':[[212,81],],
'1724':[[301,86],],
'2249':[[366,41],],
'2250':[[65,184],],
'2251':[[267,32],],
'2252':[[375,31],],
'2513':[[214,87],],
'3124':[[161,439],],
'3739':[[303,36],[227,115],],
'3773':[[262,28],[219,22],[219,28],],
'4405':[[384,3106],[384,3131],],
'4608':[[384,45],],
},{'19':[[353,30],],
'23':[[42,549],[228,25],[164,658],[228,31],],
'63':[[353,113],],
'77':[[353,152],],
'94':[[353,19],],
'134':[[353,41],],
'321':[[65,185],[51,45],[171,375],[175,39],[182,53],[51,43],[366,42],[375,32],[35,5],[230,30],[252,99],[254,14],[254,246],[264,35],[267,33],[281,22],[301,87],[56,1],[212,82],[8,34],[391,74],],
'346':[[353,96],],
'436':[[384,5319],[335,1293],],
'1737':[[48,2032],],
'1751':[[48,2051],],
'1752':[[48,2055],],
'3536':[[217,266],],
},{'7':[[193,161],[35,41],[193,3],[149,5],[171,438],[254,77],],
'117':[[9,0],],
'329':[[9,18],],
'337':[[78,17],],
'376':[[149,40],],
'831':[[307,17],],
},{'7':[[9,199],[35,39],[127,3],[254,75],[171,436],[9,3],],
'117':[[149,0],],
'329':[[149,18],],
'376':[[127,73],],
'4195':[[308,17],],
},{'7':[[9,5],[382,3],[35,43],[254,79],[171,440],[382,90],],
'117':[[193,0],],
'329':[[193,18],],
'376':[[9,202],],
'2400':[[307,19],[78,19],],
},{'121':[[9,14],[29,14],[385,10],[66,10],[71,14],[79,12],[127,12],[149,14],[193,14],[196,10],[230,12],[297,14],[298,12],[311,12],[352,14],[375,12],[382,14],[387,12],],
'1226':[[48,263],],
},{'326':[[9,15],[29,15],[71,15],[127,13],[149,15],[193,15],[196,11],[297,15],[298,13],[311,13],[352,15],[382,15],[387,13],],
},{'7':[[165,37],],
'93':[[48,4941],],
'122':[[144,15],],
'144':[[48,1939],],
'312':[[265,11],[323,13],],
'325':[[193,19],],
'327':[[29,16],[9,16],],
'332':[[9,23],[144,21],[29,23],],
'354':[[29,117],[9,117],],
'415':[[82,267],[325,22],[229,22],],
'671':[[48,1945],],
'688':[[16,26],[74,26],],
'764':[[352,19],],
'826':[[140,17],],
'1042':[[255,17],],
'1974':[[48,4977],],
'1985':[[48,4944],],
},{'123':[[82,257],[365,100],[311,15],[66,12],[82,287],[82,274],[387,15],[82,242],[82,221],[82,41],[82,58],[82,72],[82,92],[82,111],[82,178],[82,165],],
'124':[[79,14],[82,125],[54,882],],
'173':[[82,209],[365,89],[375,14],[382,17],[71,17],[70,224],[70,181],[127,15],[149,17],[365,78],[193,17],[365,59],[230,14],[297,17],[298,15],[82,149],[352,17],[365,24],[365,35],[365,48],],
'328':[[9,17],[29,17],],
'657':[[156,14],[196,13],],
'1049':[[82,137],],
'1098':[[82,20],],
'1099':[[82,196],],
'2504':[[385,12],],
},{'7':[[391,72],[391,3],[56,27],[254,24],[171,385],[182,5],],
'13':[[384,4076],],
'117':[[264,0],],
'313':[[264,16],],
'322':[[182,54],],
'323':[[9,19],],
'763':[[29,19],],
'825':[[144,17],],
},{'150':[[9,90],[29,90],],
'330':[[29,20],[144,18],[9,20],],
'359':[[29,136],[9,136],],
},{'173':[[144,20],[29,22],[9,22],],
'331':[[29,91],[9,91],],
},{'12':[[150,22],[103,22],],
'15':[[179,1563],[335,3663],[48,1968],[48,3013],[54,575],[54,588],[48,2819],[48,2024],[179,1537],[179,851],[179,1273],[179,1311],[179,1335],[179,1458],[179,1482],[179,1513],[179,1587],],
'48':[[382,24],[71,24],],
'75':[[197,126],[306,387],[335,146],[54,304],[70,245],[153,203],[48,1705],[179,902],],
'89':[[384,2040],[384,2696],],
'92':[[48,1336],[48,1422],],
'93':[[48,697],[48,702],[48,715],[48,642],[306,808],[48,684],[48,720],[306,813],[306,826],[48,729],[311,21],[48,737],[48,689],[387,21],[48,656],],
'95':[[197,408],[70,611],],
'99':[[179,1052],],
'122':[[37,15],[147,15],],
'217':[[48,1659],],
'226':[[54,306],[306,389],[48,1707],[153,205],[70,247],[335,148],[179,904],[197,128],],
'314':[[48,1665],[48,1589],],
'317':[[29,25],[144,23],[9,25],],
'423':[[197,410],[70,613],],
'515':[[48,2410],],
'593':[[54,235],],
'700':[[82,233],],
'743':[[48,3096],],
'765':[[71,19],],
'780':[[48,1671],[48,1595],],
'806':[[21,145],],
'815':[[48,1809],],
'833':[[382,19],],
'994':[[48,1674],[48,1598],[48,1668],],
'1023':[[37,17],],
'1029':[[48,4600],[335,789],[306,1369],[335,1141],[306,728],[335,1215],[335,350],[54,452],[48,4458],[335,604],[48,4285],[70,202],[48,1878],[48,3094],[48,1202],[48,1247],[48,1258],[48,1268],[335,1450],[335,1595],[48,2482],[335,1730],[48,1988],[48,2011],[335,415],[335,1790],[335,1934],[48,4061],[335,3719],[48,1224],[335,3250],[335,2874],[335,2818],[335,2677],[335,2123],],
'1256':[[48,1592],],
'1260':[[48,1677],[48,1601],],
'1424':[[179,1049],],
'1532':[[306,898],[48,1656],[48,1586],],
'1597':[[48,1538],[48,1333],],
'1598':[[48,4564],[48,3066],[48,559],[48,574],],
'1599':[[48,3068],[48,561],[48,576],],
'1600':[[48,578],],
'1609':[[48,1742],],
'1611':[[48,1745],],
'1629':[[48,1341],],
'1632':[[48,1343],],
'1641':[[48,896],],
'1652':[[179,1108],[179,1100],],
'1658':[[48,1229],],
'1660':[[48,1249],],
'1667':[[197,397],],
'1690':[[48,1505],],
'1691':[[48,1430],[48,1461],],
'1697':[[48,1662],],
'1761':[[48,2164],],
'1762':[[48,2484],],
'1781':[[48,2348],],
'1788':[[48,2414],],
'1832':[[70,615],],
'1916':[[48,4568],],
'1917':[[48,4604],],
'1918':[[306,1371],[48,4063],],
'1919':[[306,1373],[48,4287],[48,4065],],
'1935':[[48,4606],],
'1937':[[48,4608],],
'1942':[[48,4235],],
'1959':[[48,4566],],
'2049':[[82,158],],
'2127':[[335,3254],],
'2132':[[335,791],[335,606],[54,454],[335,352],[335,417],[335,1217],[335,2679],[335,1452],[335,1936],[335,1597],[179,768],[335,1732],[335,3252],],
'2401':[[341,21],[307,21],],
'2958':[[153,475],],
'2967':[[153,477],],
'2972':[[153,1259],[153,1066],[153,801],[153,594],],
'2992':[[153,925],],
'3493':[[179,703],],
'3503':[[179,835],],
'3519':[[179,1073],],
'3520':[[179,1286],],
'3543':[[179,1405],],
'3546':[[179,1441],],
'4032':[[263,23],],
'4170':[[306,902],],
'4309':[[335,1143],],
'4336':[[335,2125],[335,2820],],
'4363':[[335,2876],],
'4371':[[335,3256],],
'4391':[[335,3721],],
},{'333':[[144,24],[29,26],[9,26],],
'342':[[29,50],[9,50],],
},{'173':[[9,28],[352,22],[29,28],[193,22],[140,20],[144,26],],
'215':[[193,40],[352,40],],
'308':[[9,62],[29,62],],
},{'7':[[244,68],],
'14':[[129,11],[279,11],[323,11],[107,13],[265,9],],
'23':[[331,432],[253,33],[49,471],[320,48],],
'67':[[253,144],],
'128':[[172,33],],
'149':[[172,124],],
'154':[[253,153],],
'165':[[30,315],[30,297],[30,458],],
'176':[[149,24],[29,32],[193,26],[352,26],[127,24],[298,24],[297,24],[9,32],],
'213':[[49,503],],
'275':[[95,37],],
'277':[[345,18],[384,4079],[395,20],],
'462':[[44,129],],
'639':[[384,3057],],
'889':[[28,39],],
'955':[[30,434],],
'1101':[[320,122],],
'1278':[[384,4605],],
'2707':[[107,22],[129,20],],
'2786':[[123,17],[221,19],[202,19],],
},{'7':[[171,424],[35,27],[308,3],[307,282],[307,3],[254,63],],
'12':[[144,37],[140,31],],
'15':[[193,28],[9,34],],
'33':[[42,1065],],
'117':[[78,0],],
'158':[[140,36],[144,42],],
'173':[[78,16],],
'274':[[307,274],],
'275':[[384,4739],],
'376':[[308,204],],
'2629':[[99,118],[274,44],],
},{'7':[[9,38],[198,42],[315,99],[315,87],[29,38],[289,99],[289,87],[142,117],],
'23':[[198,85],],
'26':[[384,4681],],
'67':[[189,527],[189,540],],
'77':[[198,53],],
'89':[[153,909],],
'165':[[189,279],[10,228],[234,229],],
'277':[[315,93],[289,93],],
'461':[[180,130],[187,127],[178,195],[189,372],[135,118],[100,113],[89,276],[86,175],[57,182],[209,173],[210,118],[173,203],[229,136],[137,158],[234,322],[247,177],[269,142],[270,179],[283,114],[284,143],[285,106],[36,114],[148,125],[34,107],[146,109],[332,116],[20,133],[213,330],[10,321],[394,116],],
'491':[[289,104],[315,104],],
'2415':[[313,236],],
},{'3':[[335,871],],
'17':[[198,36],],
'23':[[198,82],],
'26':[[20,130],[29,40],[34,104],[36,111],[332,113],[285,103],[57,179],[284,140],[86,172],[89,273],[100,110],[283,111],[270,176],[135,115],[10,318],[146,106],[148,122],[269,139],[247,174],[234,319],[229,133],[160,678],[173,200],[176,71],[176,81],[213,327],[210,115],[176,138],[209,170],[176,164],[137,155],[394,113],[178,192],[180,127],[198,51],[187,124],[189,369],[9,40],],
'34':[[198,73],],
'128':[[368,44],],
'134':[[198,40],],
'147':[[160,621],],
'152':[[16,78],[74,78],],
'162':[[176,268],[176,131],],
'223':[[160,417],],
'228':[[335,809],[198,19],],
'315':[[176,120],],
'340':[[101,48],],
'348':[[274,820],],
'462':[[44,103],],
'1006':[[176,158],],
'1254':[[335,855],],
'1342':[[182,23],],
'1403':[[49,434],],
'1652':[[335,816],],
'1705':[[335,913],],
'1839':[[122,61],],
'2038':[[335,906],],
'2139':[[335,889],],
'2572':[[160,230],],
'3083':[[160,594],],
'3255':[[176,198],],
},{'12':[[160,359],],
'31':[[27,54],[101,73],],
'34':[[101,21],[286,22],],
'39':[[160,465],[287,34],[305,32],[73,43],[368,42],[160,481],[160,335],],
'63':[[122,83],],
'155':[[29,43],[9,43],],
'203':[[198,38],],
'346':[[151,37],[362,55],[160,403],[389,37],],
'603':[[101,67],],
'1003':[[163,25],],
'1169':[[50,93],[53,91],[347,58],[122,130],[160,599],],
'2662':[[101,47],],
'3074':[[160,296],],
},{'16':[[363,598],[25,23],[180,193],[244,130],[53,122],],
'31':[[384,1905],],
'34':[[9,46],[29,46],],
'203':[[232,110],[172,98],],
'317':[[9,55],[29,55],],
'370':[[101,44],],
},{'31':[[29,49],[9,49],],
},{'3':[[384,1878],],
'15':[[135,221],[12,601],[197,71],[70,88],[253,229],[171,110],[396,188],[53,141],[39,546],[277,53],[355,756],[277,571],[344,207],[344,77],],
'16':[[160,363],[306,1269],[26,43],[48,3938],],
'19':[[181,840],[246,605],[246,1520],[48,4472],],
'23':[[121,231],[39,620],[12,273],[12,282],[277,961],[246,1126],],
'28':[[218,178],],
'31':[[42,1200],],
'33':[[274,303],[344,226],],
'59':[[355,1165],],
'63':[[384,8610],[384,4539],[286,41],[246,1579],[246,1133],],
'86':[[54,1201],],
'130':[[29,59],[9,59],],
'140':[[365,222],[251,80],],
'152':[[384,2344],[48,1543],[197,262],[246,1624],],
'197':[[99,157],],
'203':[[246,910],[251,166],],
'217':[[384,7924],],
'224':[[48,49],],
'250':[[49,310],],
'272':[[251,94],[384,1276],[39,177],],
'288':[[321,234],[23,136],[246,1513],[293,136],[384,8400],[379,203],[321,127],[331,53],[42,669],[179,1041],[384,7178],[384,6097],[384,6110],],
'349':[[384,6922],],
'359':[[213,408],[89,469],],
'433':[[44,108],],
'451':[[363,693],],
'479':[[384,9090],],
'494':[[384,8460],],
'517':[[121,174],],
'530':[[384,5447],[95,136],[384,4798],],
'557':[[152,219],[84,270],],
'567':[[174,88],[243,92],],
'607':[[251,147],],
'682':[[335,2534],],
'937':[[42,1225],],
'1003':[[235,333],],
'1101':[[384,8583],],
'1119':[[384,733],],
'1123':[[278,40],],
'1135':[[42,929],],
'1137':[[242,152],[39,227],],
'1205':[[358,257],],
'1215':[[246,921],],
'1335':[[42,730],],
'1359':[[71,46],[382,46],],
'1365':[[384,3595],],
'1370':[[174,110],],
'1373':[[342,168],],
'1390':[[42,432],],
'1401':[[384,8786],],
'1441':[[335,560],],
'1527':[[48,351],],
'1838':[[95,155],],
'2059':[[320,111],],
'2066':[[218,183],[242,185],],
'2080':[[257,94],],
'2180':[[153,815],],
'2891':[[173,282],[137,237],],
'3719':[[384,2975],],
'3827':[[355,304],],
'3942':[[335,2518],],
},{'16':[[9,65],[93,104],[352,43],[29,65],[193,43],[336,91],[70,64],[384,5027],[95,466],],
'23':[[84,504],],
'31':[[213,209],[235,159],[10,200],[274,530],[218,146],[234,201],[189,251],[162,225],[373,51],[363,193],[365,128],[274,509],],
'43':[[156,49],[253,128],[162,337],[196,43],],
'147':[[82,471],],
'165':[[84,456],],
'176':[[42,395],],
'220':[[9,121],[29,121],],
'277':[[213,236],[89,161],],
'288':[[251,324],],
'291':[[84,555],],
'349':[[207,96],[84,340],[384,9575],],
'431':[[363,233],],
'447':[[346,30],[384,5153],],
'935':[[289,135],[315,135],],
'1365':[[162,318],],
'1498':[[164,154],],
'2132':[[335,2898],],
'2160':[[213,418],[189,558],],
'2179':[[72,57],],
'2363':[[258,63],],
'2415':[[313,100],],
'2577':[[321,288],],
'2687':[[181,1015],],
},{'38':[[49,155],],
'48':[[186,355],[162,128],],
'55':[[137,201],[173,246],[95,473],],
'61':[[246,978],],
'135':[[384,6507],[384,8355],[25,76],[41,131],],
'215':[[384,1797],],
'242':[[214,281],],
'344':[[42,396],[193,44],[29,66],[9,66],[251,325],[352,44],],
'369':[[164,302],],
'491':[[331,108],],
'795':[[21,102],],
'1231':[[164,391],],
'1829':[[153,792],],
'1949':[[335,1327],],
'1994':[[49,77],],
'2200':[[82,545],],
'2218':[[54,1091],],
'3073':[[160,283],],
'3152':[[164,653],],
'3275':[[246,1750],],
'4068':[[277,365],],
'4271':[[331,469],],
'5112':[[384,7444],],
},{'2':[[352,138],[193,138],],
'20':[[384,5581],[161,364],[277,243],],
'26':[[103,63],[150,63],[204,55],],
'28':[[204,58],],
'40':[[358,141],],
'52':[[164,503],],
'56':[[249,172],],
'61':[[246,998],],
'87':[[167,36],[117,36],[384,2525],],
'91':[[353,101],],
'94':[[238,19],[150,19],[180,19],],
'129':[[204,38],],
'134':[[150,32],[103,32],[180,54],],
'143':[[349,34],[314,34],],
'160':[[180,177],],
'163':[[194,81],],
'165':[[52,120],[52,165],],
'167':[[384,6716],],
'169':[[74,114],[16,114],],
'177':[[67,52],[317,113],[61,85],[370,59],],
'183':[[112,143],],
'185':[[365,157],],
'195':[[48,3579],],
'199':[[153,566],],
'220':[[372,34],],
'237':[[189,157],[48,4282],],
'264':[[70,646],[197,414],],
'277':[[235,53],[246,1738],[89,447],[363,71],[68,98],[12,420],[89,172],[277,541],[306,468],],
'285':[[355,115],],
'290':[[284,61],[181,404],[284,170],],
'339':[[160,231],[274,821],],
'345':[[9,67],[29,67],[352,45],[193,45],],
'354':[[193,36],[352,36],],
'359':[[193,126],[274,614],[274,626],[352,117],[352,126],[193,117],],
'361':[[29,157],[9,157],],
'366':[[160,395],],
'383':[[189,139],],
'415':[[180,74],],
'419':[[142,146],[355,480],],
'436':[[200,149],],
'470':[[82,358],[384,6644],[181,368],[314,55],],
'478':[[289,34],[204,21],],
'491':[[48,751],[306,171],[121,36],[12,227],[121,382],],
'517':[[121,67],],
'520':[[12,494],],
'521':[[12,164],],
'557':[[121,73],[12,233],],
'572':[[52,330],],
'584':[[246,701],],
'595':[[48,4688],[48,3124],],
'609':[[159,160],],
'639':[[161,487],],
'642':[[200,45],],
'654':[[315,34],[117,21],[349,21],[314,26],],
'670':[[84,320],],
'724':[[103,78],],
'740':[[224,30],],
'741':[[349,26],[167,21],[314,21],],
'856':[[164,588],],
'866':[[171,92],],
'869':[[48,2406],],
'898':[[162,351],[30,50],],
'918':[[30,113],[396,126],[89,184],],
'926':[[30,224],],
'933':[[30,175],],
'935':[[224,181],[224,136],],
'938':[[204,47],],
'940':[[335,1845],[266,283],],
'942':[[335,3002],],
'1033':[[367,58],[81,45],[263,42],[250,64],[338,38],[203,44],[373,43],],
'1109':[[384,1553],],
'1160':[[83,78],[384,4016],],
'1211':[[251,273],],
'1217':[[110,40],[39,732],[52,273],],
'1231':[[160,355],],
'1255':[[160,501],],
'1304':[[381,609],],
'1309':[[384,6843],],
'1319':[[246,1336],],
'1326':[[277,232],],
'1351':[[170,113],],
'1352':[[170,213],],
'1462':[[384,1532],[384,326],],
'1480':[[363,585],[235,468],],
'1560':[[121,124],],
'1603':[[150,112],[103,112],[384,354],],
'1720':[[212,34],],
'1841':[[306,929],],
'1915':[[303,27],],
'1936':[[306,1522],[48,4182],],
'1955':[[70,385],[274,646],[197,222],],
'1963':[[345,26],[335,973],],
'2006':[[274,725],[274,808],[274,637],[274,369],],
'2059':[[331,304],],
'2390':[[76,48],],
'2475':[[313,258],[84,363],[315,142],[153,624],[289,142],],
'2509':[[187,174],],
'2534':[[335,1868],[384,7728],],
'2562':[[156,131],],
'2569':[[98,37],],
'2589':[[277,254],],
'2681':[[103,19],],
'2711':[[145,32],],
'2799':[[258,42],],
'2849':[[125,252],],
'2861':[[128,91],[134,108],],
'2908':[[142,106],],
'2927':[[151,36],[389,36],[160,402],[362,54],],
'2941':[[274,351],[274,714],],
'3032':[[159,79],],
'3040':[[306,685],],
'3198':[[384,1011],],
'3578':[[181,378],],
'3730':[[209,259],],
'3855':[[246,255],],
'3991':[[384,1239],],
'3996':[[251,308],],
'4014':[[257,150],],
'4155':[[306,408],],
'4405':[[384,4202],[339,58],[384,6425],],
'4455':[[353,95],],
'4677':[[384,505],],
'4681':[[384,525],],
'4796':[[384,1725],],
'4920':[[384,3422],],
'4970':[[384,4191],],
'5038':[[384,5381],],
'5249':[[395,97],],
},{'7':[[337,115],[337,3],[92,86],[211,74],[171,510],[254,149],],
'12':[[384,9306],],
'13':[[384,7815],[384,7807],],
'16':[[75,103],],
'23':[[52,263],[52,185],[384,6569],[355,241],[352,47],[344,123],[29,69],[9,69],[274,155],[242,131],[193,47],],
'26':[[274,164],[75,116],],
'33':[[116,97],[231,95],[274,744],[84,220],],
'77':[[355,1117],[355,415],[217,509],[130,27],[278,24],],
'82':[[234,111],],
'93':[[244,26],[118,24],[233,31],[94,16],[178,31],[235,27],],
'117':[[42,0],],
'139':[[335,508],],
'147':[[355,406],[235,477],[376,37],],
'205':[[94,49],],
'241':[[335,743],],
'275':[[384,5589],],
'447':[[335,385],],
'593':[[274,420],[355,1060],[355,1026],[355,718],],
'667':[[172,170],],
'777':[[384,5695],],
'857':[[42,1260],[355,1141],],
'935':[[335,2652],],
'944':[[384,5955],],
'1033':[[234,375],],
'1225':[[42,449],],
'1281':[[153,334],],
'1329':[[42,14],],
'1395':[[239,17],],
'1956':[[335,1180],],
'3492':[[179,701],],
'3822':[[355,1032],],
'4039':[[268,30],[384,5277],],
},{'2':[[208,15],[307,278],[9,161],[9,195],[336,180],[341,278],[29,161],[29,195],[274,28],[274,2],[251,348],[88,49],[251,8],[352,157],[227,322],[193,157],[171,195],],
'15':[[384,4741],],
'19':[[352,33],[193,33],[307,249],[274,628],[274,181],[153,794],[274,171],[341,249],[384,2954],[274,824],],
'23':[[352,55],[42,1060],[193,55],[9,111],[274,587],[29,111],[274,574],[274,140],[274,566],[182,41],],
'63':[[214,83],],
'77':[[384,4063],],
'128':[[264,19],],
'152':[[54,100],],
'155':[[193,152],[352,152],],
'162':[[29,78],[341,30],[9,78],[307,30],],
'205':[[274,111],[274,91],],
'220':[[274,589],],
'481':[[277,779],],
'513':[[274,537],],
'1302':[[384,2688],],
'1381':[[274,819],],
'1385':[[99,72],[42,387],],
'1829':[[153,1346],],
'2042':[[274,125],],
'2060':[[274,449],],
'2628':[[99,190],[99,115],],
'3046':[[274,41],],
},{'2':[[125,241],[125,225],],
'5':[[384,5234],],
'18':[[75,96],],
'25':[[384,3745],],
'48':[[177,34],[283,170],[283,190],],
'49':[[84,148],],
'62':[[274,606],],
'67':[[160,124],[75,119],[69,88],[84,339],[242,50],[296,88],[384,8951],[204,42],],
'137':[[243,201],],
'149':[[384,6901],[384,6921],[384,5005],[384,4265],[39,649],[384,7494],[381,218],],
'165':[[384,5181],],
'167':[[296,113],],
'174':[[67,50],[370,57],[61,83],],
'176':[[384,6959],],
'199':[[384,5421],[384,6003],[384,6538],[181,177],[197,580],[9,83],[70,738],[384,1851],[116,110],[29,83],[116,94],[384,4446],],
'215':[[384,7626],],
'220':[[73,64],],
'231':[[364,42],],
'242':[[384,1723],],
'251':[[381,494],],
'271':[[384,7304],[384,6584],],
'273':[[250,121],[367,124],[313,453],[174,36],],
'277':[[384,4438],],
'278':[[384,6598],],
'346':[[204,59],],
'348':[[182,42],],
'423':[[384,7273],],
'447':[[367,130],[384,9353],[250,127],],
'470':[[384,4332],],
'550':[[384,6024],],
'588':[[384,3982],],
'673':[[384,8124],],
'694':[[161,109],],
'780':[[384,6451],],
'990':[[142,138],],
'1068':[[347,53],],
'1101':[[142,76],],
'1332':[[234,377],],
'1347':[[42,270],[42,127],],
'1395':[[384,5367],],
'1424':[[384,3561],],
'1474':[[384,6829],],
'1667':[[384,8640],],
'2007':[[384,5817],],
'2013':[[384,5810],],
'2051':[[177,38],],
'2211':[[384,4658],],
'2323':[[384,7408],],
'2341':[[384,6885],],
'2357':[[384,4546],],
'2375':[[384,8955],],
'2377':[[384,6649],],
'2443':[[384,9730],],
'2559':[[384,7852],],
'2899':[[352,84],[193,84],],
'3181':[[384,6655],],
'3196':[[384,3539],],
'3259':[[207,95],],
'3438':[[384,8715],],
'3796':[[384,5328],],
'3877':[[384,622],],
'4622':[[384,109],],
'5009':[[384,4932],],
'5036':[[384,5351],],
'5192':[[384,9574],],
'5198':[[384,9693],],
'5202':[[384,9723],],
'5213':[[384,9811],],
},{'48':[[153,666],],
'55':[[29,85],[182,44],[9,85],[152,76],],
'121':[[29,105],[9,105],],
'152':[[54,1457],],
'163':[[307,69],[341,69],],
'165':[[235,57],[363,75],],
'166':[[277,328],],
'225':[[274,608],],
'447':[[153,675],],
'1016':[[384,9580],],
'1829':[[153,698],],
'4230':[[326,38],],
},{'2':[[340,162],[308,195],[112,75],],
'27':[[331,288],],
'35':[[384,6864],],
'43':[[274,106],[246,1747],[164,54],[246,1733],[161,562],[289,153],[30,76],[164,93],[373,81],[315,153],[321,162],[12,254],[48,597],[48,3483],[48,3672],[266,96],[303,88],[224,220],[54,85],[54,105],[218,369],[54,1226],[358,322],[307,178],[358,97],[358,86],[355,463],[125,69],[341,178],[306,1274],[261,162],[339,131],[121,304],[184,33],[48,3943],[266,55],[314,68],],
'47':[[112,39],],
'60':[[161,225],],
'63':[[344,255],],
'67':[[322,222],[339,70],[128,220],[42,1198],[191,285],],
'84':[[161,315],[331,64],],
'99':[[384,7004],],
'121':[[23,38],[200,234],[293,38],],
'131':[[181,125],],
'137':[[42,445],],
'149':[[274,791],[112,126],[69,73],[102,102],[320,107],],
'152':[[125,71],[363,654],[199,47],[102,104],],
'160':[[181,293],],
'163':[[9,165],[29,165],],
'171':[[25,73],],
'184':[[181,638],],
'199':[[9,101],[181,210],[341,114],[9,93],[121,573],[307,114],[321,363],[302,142],[39,380],[134,140],[246,734],[29,101],[29,93],[25,85],],
'202':[[101,70],[199,45],[363,652],[49,200],],
'215':[[384,8576],[384,7880],],
'217':[[384,8559],[384,7067],],
'251':[[246,261],[191,290],],
'269':[[256,26],[70,538],],
'277':[[253,156],],
'281':[[355,1395],[39,151],],
'284':[[118,168],[244,199],],
'290':[[102,126],],
'314':[[384,9626],],
'319':[[274,528],],
'320':[[89,466],[213,405],],
'354':[[27,50],],
'355':[[274,654],[274,559],],
'415':[[232,127],],
'447':[[102,93],],
'491':[[39,294],],
'949':[[384,4507],[296,131],[80,97],],
'959':[[87,79],],
'1075':[[100,146],],
'1180':[[384,9686],],
'1267':[[384,2033],[384,4133],],
'1540':[[311,62],[387,62],],
'1720':[[175,31],],
'1724':[[65,176],],
'1850':[[246,1717],],
'1955':[[244,214],[118,183],],
'2067':[[52,228],],
'2164':[[54,832],],
'2301':[[160,385],],
'2363':[[71,82],[382,82],],
'2407':[[170,239],],
'2444':[[82,344],],
'2598':[[96,96],],
'2678':[[103,93],[150,93],],
'2711':[[154,33],],
'2914':[[342,322],],
'3213':[[172,157],],
'4199':[[340,147],[308,180],],
},{'215':[[29,109],[9,109],],
},{'3':[[277,629],],
'16':[[246,1477],[29,113],[368,95],[48,4805],[274,360],[9,113],],
'30':[[289,78],[315,78],],
'31':[[10,355],],
'33':[[277,647],],
'43':[[224,146],],
'91':[[18,54],],
'154':[[121,110],],
'203':[[274,220],[89,224],],
'224':[[54,1441],],
'237':[[189,136],],
'277':[[189,497],],
'305':[[331,415],],
'349':[[384,623],[73,65],[352,85],[193,85],],
'596':[[381,340],[39,189],],
'888':[[246,644],],
'1225':[[246,965],],
'1667':[[306,1085],],
},{'16':[[322,142],[244,208],[235,326],[274,520],[322,156],[191,175],[118,177],[118,205],[322,169],[128,140],[128,154],[128,167],[172,166],[244,236],],
'18':[[191,300],],
'23':[[134,153],[170,237],[302,91],[181,83],[302,117],[189,605],[189,610],[302,155],[134,115],[9,116],[44,57],[260,47],[209,247],[213,448],[213,453],[218,363],[29,116],[368,105],[134,94],],
'26':[[127,40],[298,40],],
'185':[[312,42],],
'220':[[352,35],[284,202],[207,34],[269,222],[193,35],],
'221':[[287,72],],
'228':[[77,137],[181,201],[247,252],[131,150],],
'241':[[396,108],],
'462':[[27,49],],
'609':[[44,114],[276,71],],
'1493':[[207,71],],
'4154':[[306,365],],
},{'12':[[9,123],[341,46],[307,46],[29,123],[274,526],[274,511],],
'18':[[274,551],],
'63':[[274,500],[42,400],],
'73':[[274,653],],
'145':[[193,112],[352,112],],
'150':[[352,70],[193,70],[274,778],],
'163':[[274,558],],
'350':[[274,609],],
'357':[[9,131],[29,131],],
'360':[[352,105],[193,105],],
'368':[[29,175],[9,175],],
'1452':[[274,667],],
},{'43':[[160,420],],
'49':[[335,2083],],
'82':[[344,292],],
'139':[[142,136],],
'149':[[342,161],],
'244':[[82,381],],
'355':[[29,124],[9,124],],
'360':[[181,218],],
'458':[[342,199],],
'682':[[335,3130],],
'792':[[339,275],[161,531],],
'1168':[[54,742],[95,309],],
'1351':[[335,980],],
'2368':[[321,168],[161,568],],
'5066':[[384,6235],],
},{'16':[[114,62],[169,63],],
'67':[[178,285],[112,73],[49,496],[84,331],[359,113],],
'77':[[301,52],[308,169],[340,136],[381,527],],
'140':[[251,257],[355,180],[246,1551],[320,166],],
'149':[[308,193],[340,160],],
'277':[[170,222],],
'281':[[246,993],[164,183],[172,163],[164,368],[29,130],[9,130],[30,240],],
'639':[[313,239],],
'869':[[335,2411],],
'2042':[[49,486],[246,1475],],
'2183':[[313,332],],
'3212':[[172,114],[384,899],[172,72],[172,44],[244,100],[244,117],[384,1660],],
'4427':[[342,297],],
},{'35':[[381,468],],
'43':[[57,292],[363,573],],
'61':[[246,1630],],
'63':[[225,40],[218,229],],
'199':[[191,256],],
'202':[[363,672],[199,65],],
'355':[[9,132],[29,132],],
'445':[[179,1168],],
'458':[[137,125],[146,76],[148,92],[173,170],[178,162],[135,85],[100,80],[89,243],[86,142],[187,94],[189,339],[57,149],[36,81],[209,140],[210,85],[213,297],[34,74],[20,100],[229,103],[234,289],[10,288],[247,144],[269,109],[270,146],[283,81],[284,110],[285,73],[180,97],[332,83],[394,83],],
'642':[[134,125],[302,127],],
'931':[[179,1177],],
},{'16':[[387,88],[311,88],[156,97],[89,456],[213,395],[235,381],[196,91],[66,19],[385,52],],
'31':[[70,191],[70,232],[384,8216],[213,407],[70,311],[58,29],[274,561],[352,125],[274,613],[89,468],[352,116],[335,1003],[141,86],[143,65],[16,109],[178,308],[274,625],[193,116],[193,125],[74,109],[200,229],[274,656],],
'60':[[249,199],],
'67':[[29,185],[74,119],[9,185],[16,119],[274,619],],
'147':[[70,306],],
'288':[[29,135],[9,135],],
'370':[[294,38],],
'664':[[89,151],[213,228],],
'921':[[384,8271],],
'1353':[[95,40],],
'1382':[[186,87],],
'1492':[[381,425],],
'2272':[[112,134],],
'2335':[[70,198],],
'2339':[[70,239],],
},{'48':[[181,217],],
'55':[[29,140],[9,140],],
'121':[[274,539],],
'144':[[218,232],],
'165':[[284,192],[269,212],],
'175':[[102,182],],
'177':[[181,993],],
'195':[[57,152],[86,145],[89,246],[100,83],[284,113],[36,84],[135,88],[137,128],[146,79],[332,86],[173,173],[178,165],[180,100],[20,103],[285,76],[187,97],[189,342],[283,84],[10,291],[394,86],[270,149],[34,77],[269,112],[209,143],[210,88],[213,300],[247,147],[148,95],[229,106],[234,292],],
'196':[[286,20],[287,30],[305,28],[198,31],[50,101],],
'199':[[36,167],],
'225':[[247,256],],
'319':[[352,104],[193,104],],
'460':[[102,154],],
'956':[[30,330],],
'1878':[[189,634],[213,479],],
'2006':[[206,95],],
'2160':[[198,71],],
'2234':[[352,53],[193,53],],
'2261':[[274,517],],
},{'31':[[29,156],[9,156],],
},{'346':[[29,158],[274,715],[9,158],],
'1358':[[42,935],],
'3032':[[159,94],],
'3566':[[194,56],],
'4859':[[384,2543],],
},{'12':[[384,2948],],
'43':[[359,37],],
'351':[[29,166],[9,166],],
},{'3':[[214,250],[331,37],],
'9':[[355,841],],
'13':[[246,406],],
'26':[[246,1047],[246,1497],[172,104],],
'33':[[164,382],],
'77':[[227,148],[227,154],],
'276':[[355,400],],
'345':[[160,284],],
'363':[[29,167],[9,167],],
'656':[[125,260],],
'1233':[[39,806],],
'1615':[[303,149],],
'2396':[[181,302],],
'3137':[[227,66],[171,60],],
'3680':[[251,47],],
},{'102':[[384,1103],],
'205':[[29,169],[9,169],],
},{'26':[[335,3176],[335,283],],
'140':[[12,564],],
'150':[[164,560],],
'163':[[29,171],[9,171],],
'206':[[181,52],],
'285':[[30,63],[21,165],[390,148],],
'926':[[335,2397],],
'1231':[[160,394],],
},{'54':[[266,351],],
'65':[[82,539],],
'121':[[128,170],[322,172],],
'187':[[189,448],],
'208':[[54,109],],
'248':[[218,326],[137,232],[173,277],],
'366':[[9,172],[29,172],],
'503':[[277,858],],
'845':[[181,947],],
'1216':[[39,706],],
'1301':[[302,140],[134,138],],
'2368':[[321,187],[161,587],],
'2485':[[84,444],],
},{'19':[[395,93],],
'23':[[29,174],[9,174],],
'724':[[384,8812],[277,495],],
},{'2':[[301,76],],
'23':[[164,439],],
'47':[[164,340],],
'82':[[172,140],],
'128':[[364,45],[203,70],],
'160':[[181,957],[181,967],],
'196':[[181,70],],
'220':[[259,25],[33,27],[45,23],],
'247':[[317,76],],
'264':[[355,556],],
'281':[[164,301],],
'285':[[246,58],],
'355':[[29,176],[9,176],],
'370':[[163,34],],
'439':[[266,337],],
'443':[[395,112],],
'482':[[214,276],],
'502':[[335,1693],[335,1024],[335,1398],[384,1348],[335,976],],
'525':[[164,148],],
'533':[[89,300],],
'858':[[181,577],],
'903':[[235,274],],
'1029':[[37,61],],
'1079':[[332,154],],
'1110':[[39,58],],
'1452':[[54,152],],
'1553':[[186,467],],
'1955':[[99,61],],
'2058':[[335,1464],[335,1248],],
'3169':[[384,6308],],
'3575':[[197,471],],
'3865':[[246,418],],
'4560':[[378,24],],
'4792':[[384,1695],],
'5141':[[384,8241],],
},{'14':[[87,62],],
'16':[[296,125],[80,91],[294,37],[270,244],[101,43],[91,34],[54,386],],
'18':[[226,34],[336,29],[46,34],],
'20':[[384,6034],[48,104],],
'23':[[220,74],[381,474],],
'28':[[190,59],[286,30],[101,33],],
'30':[[335,3057],[41,302],[234,390],[68,55],[335,2210],[84,459],],
'31':[[352,123],[193,123],],
'33':[[96,161],],
'38':[[214,254],],
'39':[[186,491],],
'43':[[164,84],[89,372],[357,38],],
'47':[[341,256],[307,256],],
'48':[[57,277],],
'50':[[384,5822],[306,98],],
'55':[[153,901],],
'67':[[266,248],[76,93],],
'73':[[30,349],],
'82':[[395,70],],
'121':[[48,2530],[321,154],[161,554],],
'139':[[266,146],],
'140':[[163,33],[214,114],],
'147':[[384,6021],],
'149':[[218,287],],
'150':[[181,173],],
'164':[[29,178],[215,61],[311,100],[274,611],[387,100],[183,61],[9,178],],
'167':[[242,92],],
'177':[[266,342],],
'217':[[274,702],],
'224':[[39,758],],
'225':[[293,110],[215,102],[183,102],[23,110],],
'241':[[361,72],],
'248':[[320,151],[42,1216],[39,257],[181,495],[49,418],[170,210],],
'250':[[287,81],[321,131],[187,160],[153,993],[335,1254],],
'278':[[42,909],],
'284':[[42,967],[384,6312],],
'321':[[161,542],[384,7698],[49,115],[321,144],[266,67],[321,72],],
'339':[[44,104],],
'349':[[384,7495],],
'357':[[178,286],],
'373':[[274,286],],
'420':[[70,634],],
'433':[[277,900],],
'445':[[266,317],],
'470':[[146,145],[20,175],[39,282],[285,146],],
'489':[[384,8683],],
'502':[[39,395],],
'506':[[54,1530],[171,1261],[153,30],[185,64],[54,19],[249,321],[355,1476],[153,1441],[277,599],[277,218],[277,281],[197,10],],
'547':[[48,45],],
'581':[[48,2548],],
'596':[[153,913],],
'597':[[331,209],],
'603':[[82,469],],
'676':[[15,29],],
'681':[[95,367],],
'696':[[160,192],[246,35],],
'706':[[74,128],[16,128],],
'771':[[316,83],],
'774':[[384,4231],],
'792':[[384,3659],],
'817':[[384,6968],],
'865':[[223,50],[217,462],],
'940':[[191,270],],
'1101':[[42,554],],
'1205':[[39,662],[353,179],],
'1254':[[384,3119],],
'1305':[[85,53],],
'1338':[[42,911],],
'1405':[[89,326],],
'1417':[[349,80],],
'1422':[[384,9609],],
'1462':[[274,251],],
'1506':[[277,229],],
'1535':[[48,202],],
'1897':[[48,3867],],
'1955':[[52,162],],
'2083':[[197,76],],
'2096':[[274,810],],
'2160':[[170,184],],
'2329':[[70,93],],
'2420':[[82,336],],
'2443':[[82,321],],
'2588':[[96,26],],
'2631':[[274,301],],
'2649':[[214,248],],
'2890':[[186,152],],
'3188':[[170,133],],
'3837':[[246,42],],
'4274':[[334,28],],
'4320':[[390,142],],
'4697':[[384,1166],],
'5210':[[384,9788],],
},{'68':[[384,7369],],
'164':[[339,153],],
'318':[[29,180],[9,180],],
},{'23':[[29,187],[9,187],],
'61':[[197,549],],
'65':[[164,21],],
'158':[[335,695],],
'165':[[308,132],[340,99],],
'242':[[54,521],],
'248':[[99,121],],
'800':[[197,457],],
'818':[[42,1322],],
'856':[[179,678],],
'1237':[[315,64],[289,64],],
'4431':[[343,82],],
},{'15':[[313,182],[355,1057],[223,43],[363,272],],
'34':[[246,373],],
'39':[[197,312],[70,462],],
'61':[[246,357],],
'99':[[384,8016],],
'152':[[251,160],],
'162':[[246,434],],
'275':[[384,7884],],
'288':[[274,401],],
'372':[[9,188],[29,188],],
'865':[[274,285],],
'1226':[[274,410],],
'1381':[[246,386],],
'1990':[[355,57],[277,875],[277,926],[214,75],[274,36],[355,671],[49,31],[384,744],],
'1991':[[384,4807],[95,160],[246,469],[49,46],],
},{'2':[[248,26],[29,190],[358,74],[9,190],],
'13':[[384,4825],[384,4940],[384,4957],[384,9019],],
'15':[[384,8004],],
'23':[[277,344],],
'82':[[335,290],[335,3183],],
'89':[[153,1003],],
'149':[[10,341],],
'224':[[335,47],],
'264':[[384,6410],],
'275':[[384,6070],],
'285':[[335,45],],
'321':[[92,10],[92,183],[56,61],[56,6],[56,65],[384,4489],[35,9],[35,52],[254,2],[171,371],[384,4500],],
'489':[[171,1085],[240,10],[19,2],[63,7],[63,106],[63,110],[240,52],],
'648':[[248,13],[139,10],[248,74],[38,13],[124,64],[124,60],[139,63],[245,12],[241,78],[354,12],[354,95],[241,12],[22,57],[369,2],[49,520],[49,10],[38,199],[171,606],[124,7],[384,4517],[384,4524],[22,12],[245,75],],
'674':[[384,4495],],
'1422':[[384,7164],],
'1425':[[48,59],],
'1955':[[384,6289],],
'2315':[[355,26],],
'2513':[[384,6442],],
'2528':[[384,8759],],
'3053':[[384,1751],[384,4194],],
'5020':[[384,5101],],
'5042':[[384,5627],],
},{'7':[[155,35],],
'9':[[384,7997],[161,28],[227,204],[277,49],],
'12':[[48,1303],[76,79],[181,874],[339,210],[336,131],[246,1686],[246,1217],],
'17':[[274,454],],
'25':[[214,302],],
'39':[[321,164],[161,564],[148,69],],
'43':[[355,355],[247,236],],
'47':[[70,134],],
'48':[[153,1222],[197,62],[70,79],],
'55':[[49,66],],
'61':[[277,836],],
'62':[[219,47],[262,45],],
'63':[[243,238],],
'65':[[162,376],[355,371],],
'82':[[39,561],[46,53],[48,32],[226,53],],
'114':[[12,580],],
'121':[[29,192],[9,192],],
'128':[[147,30],[238,26],[47,33],[43,21],[78,27],[86,198],[120,27],[202,23],[55,30],[167,25],[24,26],[177,25],[64,27],[119,21],[325,25],[275,32],[117,25],],
'131':[[352,154],[193,154],],
'133':[[274,127],],
'140':[[41,381],],
'150':[[277,567],],
'153':[[331,516],],
'165':[[384,1243],[390,153],[235,184],[21,170],],
'167':[[83,114],],
'169':[[214,150],],
'178':[[164,79],],
'199':[[30,484],],
'215':[[41,326],[396,185],],
'220':[[260,98],[394,65],],
'224':[[188,343],],
'228':[[160,36],],
'241':[[70,443],[197,293],],
'248':[[246,1864],[253,211],[277,583],[331,440],[153,615],],
'269':[[266,162],[308,98],],
'292':[[135,218],],
'294':[[49,80],],
'321':[[384,4868],],
'337':[[307,275],],
'343':[[12,602],],
'351':[[30,77],[339,132],],
'368':[[384,8813],],
'373':[[197,313],[70,463],],
'376':[[214,286],],
'378':[[355,503],],
'431':[[234,280],[247,126],[86,124],[100,62],[36,63],[146,58],[34,56],[173,152],[285,55],[148,74],[137,107],[178,153],[180,79],[283,63],[229,85],[269,91],[10,279],[187,76],[135,67],[89,234],[284,92],[213,288],[57,131],[210,67],[270,128],[189,330],[20,82],[209,122],[332,65],],
'445':[[384,7887],[39,315],],
'447':[[253,226],],
'456':[[163,52],],
'462':[[57,140],[20,91],[187,85],[269,100],[210,76],[173,161],[394,74],[270,137],[135,76],[332,74],[209,131],[247,135],[180,88],[36,72],[229,94],[34,65],[137,116],[285,64],[148,83],[86,133],[284,101],[146,67],[283,72],[100,71],],
'469':[[274,158],],
'489':[[171,106],],
'491':[[48,89],],
'492':[[227,43],],
'505':[[12,40],],
'515':[[83,65],],
'523':[[39,779],],
'525':[[48,4619],],
'538':[[277,182],],
'567':[[186,471],],
'572':[[306,183],[48,763],],
'580':[[12,545],],
'619':[[12,452],],
'639':[[160,205],],
'642':[[83,38],[48,62],],
'646':[[12,631],[277,992],[321,352],],
'649':[[12,644],[249,113],[277,1005],],
'659':[[197,295],[70,445],[290,129],],
'673':[[313,412],],
'696':[[197,501],],
'712':[[164,506],],
'756':[[341,275],],
'792':[[313,287],],
'869':[[344,72],],
'896':[[28,73],],
'926':[[363,274],[30,264],[313,184],],
'1019':[[265,40],],
'1101':[[355,517],],
'1109':[[384,8867],[384,8854],],
'1141':[[277,129],],
'1147':[[384,8983],],
'1156':[[39,517],],
'1177':[[266,370],],
'1178':[[39,978],],
'1229':[[77,88],[173,134],[270,110],[131,103],[57,113],[247,108],[86,106],[137,89],],
'1305':[[223,54],[218,309],],
'1310':[[41,195],],
'1319':[[344,329],],
'1326':[[41,365],],
'1353':[[54,54],],
'1433':[[342,320],[65,174],],
'1452':[[384,4757],],
'1462':[[174,256],],
'1517':[[48,70],],
'1811':[[235,451],],
'1839':[[384,2318],],
'1930':[[355,1457],],
'2080':[[53,137],],
'2181':[[374,35],[324,34],],
'2275':[[280,121],],
'2567':[[200,276],],
'2587':[[95,503],],
'2909':[[234,410],],
'2949':[[227,217],],
'2986':[[227,157],],
'3094':[[160,685],],
'3134':[[339,280],],
'3153':[[164,233],],
'3623':[[186,425],],
'3739':[[214,46],],
'3770':[[355,750],],
'3789':[[384,2231],],
'3973':[[384,182],],
'4192':[[341,266],[307,266],],
'4333':[[335,2063],],
'4362':[[335,2781],],
'4758':[[384,1335],],
'4865':[[384,2607],],
},{'205':[[274,489],],
'208':[[341,280],[352,159],[29,197],[307,280],[9,197],[274,30],[274,4],[251,350],[251,10],[227,324],[208,17],[336,182],[193,159],[171,197],[88,51],],
'230':[[384,7988],],
'269':[[70,300],],
'321':[[127,72],[149,39],[161,454],[164,81],[78,32],[171,418],[308,203],[308,201],[307,284],[193,163],[375,34],[311,108],[70,275],[214,143],[9,201],[214,288],[23,142],[215,119],[382,92],[197,156],[35,1],[56,10],[253,118],[254,57],[92,6],],
'489':[[63,11],[29,201],[293,142],[297,39],[298,72],[387,108],[341,284],[19,102],[352,163],[71,92],[183,119],[171,1177],[120,32],[331,543],[240,1],[340,168],[340,170],],
'499':[[303,172],],
'648':[[303,187],],
'1351':[[303,141],],
'1452':[[197,147],[70,266],[42,1062],[214,285],],
'2010':[[214,296],],
},{'7':[[234,3],[369,31],[124,42],[171,627],[189,5],[234,425],[377,34],],
'18':[[234,339],],
'117':[[10,0],],
'140':[[189,502],],
'228':[[10,16],],
'273':[[335,693],],
'474':[[189,641],],
'1033':[[335,452],],
'4289':[[335,631],],
},{'7':[[10,3],[369,29],[10,359],[213,5],[124,40],[377,32],[171,625],],
'18':[[10,338],],
'23':[[153,1308],],
'63':[[89,382],],
'117':[[189,0],],
'228':[[189,16],],
'474':[[213,488],],
'1225':[[355,64],],
'2629':[[355,502],],
'3000':[[153,1349],],
},{'7':[[10,5],[377,36],[124,44],[171,629],[178,3],[178,323],[369,33],],
'33':[[363,536],],
'69':[[384,9295],],
'117':[[234,0],],
'228':[[234,16],],
'474':[[10,361],],
},{'15':[[384,9577],],
'77':[[213,352],[189,397],],
'124':[[233,18],[153,425],[234,18],[178,18],[213,18],[189,18],[10,18],[89,18],],
'134':[[213,108],[189,97],[89,74],[10,91],[234,90],[178,60],],
'1953':[[153,429],],
},{'7':[[211,80],[235,501],[202,5],[92,92],[171,516],[254,155],],
'19':[[373,97],[355,1076],],
'23':[[142,179],[231,116],],
'26':[[31,49],[250,78],[367,72],],
'83':[[335,616],],
'89':[[142,142],[355,467],[153,481],],
'93':[[189,20],[116,23],[90,20],[10,20],[292,20],],
'117':[[142,0],],
'122':[[367,15],],
'667':[[202,28],],
'1329':[[142,14],],
'1651':[[391,31],[373,112],],
'2180':[[153,390],],
'2549':[[250,17],],
'2550':[[310,17],],
},{'15':[[90,40],],
'23':[[153,1240],[189,581],[153,1205],[373,31],[153,550],[153,530],[116,100],[153,496],],
'55':[[10,104],[189,110],],
'77':[[116,31],],
'381':[[116,24],[90,21],[292,21],[335,617],[153,391],[189,21],[10,21],],
'438':[[116,44],],
'523':[[153,568],],
'1652':[[335,627],],
'2550':[[335,671],[153,1413],],
'2935':[[335,633],[153,1351],],
'4110':[[292,40],],
},{'16':[[89,413],],
'18':[[189,174],],
'26':[[189,437],],
'55':[[213,121],],
'63':[[189,555],[213,415],],
'77':[[89,230],[189,138],],
'83':[[89,391],],
'173':[[189,24],[213,21],[89,21],[234,23],[10,24],],
'250':[[89,436],],
'421':[[10,112],[189,118],],
'1333':[[234,113],],
'2022':[[89,96],],
},{'236':[[213,23],[89,23],[234,25],[189,26],[10,26],],
'277':[[189,125],[89,104],[10,119],[213,128],[234,120],],
'1033':[[189,143],],
},{'173':[[234,27],[189,34],[10,28],],
'383':[[189,175],],
'423':[[234,125],[10,124],],
'1353':[[189,553],],
},{'236':[[234,29],[189,36],[10,30],],
'277':[[189,184],[234,134],[10,133],],
},{'7':[[171,502],[31,3],[31,53],[254,141],[92,78],[211,66],[223,5],],
'117':[[199,0],],
'128':[[199,29],],
'213':[[199,15],],
'275':[[384,7801],],
'386':[[189,37],[234,30],[10,31],],
'667':[[223,62],],
'2415':[[363,26],],
'2515':[[89,28],[213,28],],
'3181':[[313,34],],
},{'23':[[363,731],],
'203':[[199,90],],
'346':[[384,6426],],
'387':[[213,29],[234,31],[313,35],[189,38],[89,29],[363,27],[10,32],],
'451':[[363,115],],
'613':[[363,444],],
'921':[[363,615],[363,609],[363,485],],
'1828':[[313,143],],
},{'127':[[118,26],[233,33],[244,28],[178,33],[235,29],],
'131':[[280,27],[371,25],],
'317':[[210,31],[209,40],[10,74],[394,32],[247,45],[146,31],[148,33],[137,42],[135,32],[131,42],[213,91],[20,36],[173,50],[100,32],[178,47],[34,31],[229,35],[180,36],[332,30],[36,32],[270,45],[89,55],[86,46],[57,48],[285,31],[189,76],[284,37],[77,40],[283,34],[234,73],[187,37],[269,36],],
'388':[[234,32],[363,28],[213,30],[313,36],[10,33],],
'392':[[10,37],[234,36],[218,26],[313,40],[363,32],[213,34],],
'395':[[363,36],[10,41],[189,43],[213,38],[234,40],[313,44],],
'397':[[189,47],[218,30],[234,44],[10,45],[363,40],[213,42],],
'398':[[189,51],[363,44],[10,49],[234,48],[213,46],[218,34],],
'400':[[189,55],[234,52],[10,53],],
'403':[[189,59],[234,56],[10,57],[213,70],],
'405':[[213,74],[234,60],[189,63],[10,61],],
'406':[[234,64],[189,67],[10,65],],
'408':[[285,22],[213,86],[20,27],[137,33],[284,28],[86,37],[77,31],[146,22],[394,23],[10,69],[131,33],[148,24],[210,22],[89,50],[332,21],[209,31],[36,23],[189,71],[100,23],[229,26],[173,41],[34,22],[234,68],[362,19],[283,25],[57,39],[178,42],[62,21],[247,36],[180,27],[270,36],[135,23],[269,27],[187,28],],
'410':[[394,36],[57,52],[180,40],[187,41],[269,40],[178,51],[283,38],[173,54],[247,49],[284,41],[10,78],[234,77],[77,44],[189,80],[285,35],[86,50],[89,59],[229,39],[148,37],[209,44],[100,36],[270,49],[146,35],[210,35],[36,36],[137,46],[213,95],[131,46],[135,36],[332,34],[20,40],[34,35],],
'440':[[178,38],[235,34],[233,38],],
'685':[[74,20],[16,20],],
'687':[[74,24],[16,24],],
'689':[[74,28],[16,28],],
'691':[[16,32],[74,32],],
'712':[[247,32],[77,27],[86,33],[270,32],[173,37],[131,29],[137,29],[57,35],],
'773':[[209,35],[100,27],[229,30],[332,25],[148,28],[36,27],[57,43],[131,37],[269,31],[135,27],[34,26],[77,35],[210,26],[283,29],[394,27],[285,26],[270,40],[20,31],[173,45],[187,32],[146,26],[284,32],[137,37],[86,41],[247,40],[180,31],],
'1008':[[73,19],[198,24],[305,21],],
'1101':[[320,19],[94,20],],
'1380':[[235,39],],
'1496':[[44,23],[287,23],],
'1497':[[44,27],],
'1582':[[318,19],],
'2050':[[53,23],[50,23],],
'2063':[[235,43],],
'2064':[[235,47],],
'2182':[[213,66],[313,48],[363,64],],
'2217':[[218,38],],
'2227':[[218,42],],
'2247':[[270,27],[57,30],[137,24],[64,24],[55,27],[247,27],[173,32],[77,22],[131,24],[86,28],],
'2255':[[57,22],],
'2256':[[86,24],[57,26],],
'2302':[[260,25],],
'2380':[[75,23],],
'2405':[[170,32],],
'2415':[[320,23],],
'2418':[[111,26],],
'2516':[[213,50],],
'2517':[[213,54],],
'2568':[[94,24],],
'2579':[[363,48],],
'2580':[[363,52],],
'2581':[[363,56],],
'2582':[[363,60],],
'2654':[[283,21],[187,24],],
'3184':[[170,28],],
'3216':[[173,28],],
'3711':[[203,24],],
'3734':[[213,58],],
'3735':[[213,62],],
'3736':[[213,78],],
'3737':[[213,82],],
'3738':[[213,99],],
'3767':[[218,46],],
'4001':[[252,21],],
'4097':[[280,23],[371,21],],
'4224':[[319,19],],
'4528':[[361,21],],
'5242':[[394,19],],
},{'7':[[199,20],],
'26':[[363,757],[384,6415],],
'389':[[234,33],[313,37],[213,31],[10,34],],
'2967':[[153,936],[153,1130],[153,1359],],
},{'7':[[211,54],[85,3],[85,60],[254,129],[92,66],[291,5],[171,490],],
'23':[[355,735],],
'26':[[116,66],],
'117':[[231,0],],
'213':[[231,15],],
'388':[[89,30],[189,39],],
'390':[[234,34],[213,32],[313,38],[10,35],],
'667':[[291,40],],
'1930':[[363,30],],
'2178':[[218,24],],
},{'63':[[363,448],],
'147':[[363,406],[363,420],],
'277':[[213,148],[234,140],[10,139],[189,190],],
'285':[[89,126],],
'391':[[218,25],[10,36],[234,35],[89,31],[189,40],[313,39],[213,33],[363,31],],
'451':[[218,91],],
'676':[[363,129],],
'681':[[95,379],],
'845':[[313,152],],
},{'7':[[231,20],],
'16':[[363,422],[363,450],],
'389':[[234,37],[313,41],[363,33],[218,27],[213,35],[10,38],],
'390':[[153,937],[153,1360],[153,1131],],
'1930':[[54,1013],[179,791],[335,1375],[335,1526],[335,2929],[335,3745],[335,1305],[335,639],[197,570],],
'4296':[[335,852],],
},{'7':[[41,3],[41,393],[254,123],[92,60],[171,484],[211,48],],
'26':[[321,251],],
'117':[[351,0],],
'213':[[351,13],],
'392':[[189,41],[89,32],],
'393':[[313,42],[234,38],[10,39],[213,36],[363,34],],
'667':[[256,40],],
},{'7':[[71,39],[382,39],[350,213],],
'14':[[84,290],],
'128':[[351,45],],
'349':[[42,128],],
'392':[[95,380],],
'394':[[10,40],[189,42],[234,39],[213,37],[89,33],[363,35],[313,43],],
'426':[[313,169],[363,146],],
'430':[[213,161],[89,139],[10,152],[189,203],[234,153],],
'449':[[384,8196],],
'1249':[[87,48],],
'3978':[[384,5112],],
},{'7':[[351,18],],
'39':[[10,157],[213,166],[313,174],[89,143],[234,158],[363,151],[189,208],],
'389':[[10,42],[189,44],[363,37],[313,45],[213,39],[234,41],],
'393':[[153,1132],[153,938],[197,571],[153,1361],[335,640],[335,853],[335,1306],[335,1376],[335,1527],[335,3746],[54,1014],[179,792],],
'426':[[70,728],],
},{'23':[[363,199],[218,152],],
'147':[[363,579],],
'173':[[363,39],[189,46],[234,43],[10,44],[213,41],[218,29],],
'186':[[363,560],],
'395':[[95,381],],
'426':[[218,108],],
'432':[[10,162],[189,213],[234,163],[213,171],],
'438':[[363,568],],
'449':[[218,167],[10,214],[363,214],[189,265],[234,215],[213,223],],
'2051':[[363,155],],
'4452':[[384,6444],],
},{'88':[[218,158],[363,205],],
'236':[[189,50],[234,47],[363,43],[213,45],[10,48],[218,33],],
'397':[[95,382],],
'445':[[234,206],[10,205],[213,214],[189,256],],
},{'7':[[211,52],[41,5],[231,3],[92,64],[171,488],[254,127],[231,124],],
'117':[[291,0],],
'213':[[291,15],],
'215':[[189,53],[10,51],[234,50],],
'667':[[41,395],],
},{'397':[[10,215],[189,266],[234,216],],
'399':[[234,51],[189,54],[10,52],],
},{'7':[[291,20],],
'215':[[335,643],],
'389':[[234,53],[189,56],[10,54],],
},{'7':[[107,3],[369,398],[171,994],[189,152],[38,190],[107,24],[93,17],],
'48':[[153,863],],
'49':[[190,84],],
'89':[[181,207],[394,158],[181,107],],
'117':[[323,0],],
'149':[[347,27],],
'220':[[153,1103],],
'328':[[323,14],],
'401':[[234,54],[189,57],[10,55],],
'431':[[234,238],[189,288],[10,237],[213,242],],
'443':[[181,130],],
'470':[[153,1274],],
'609':[[263,19],[338,19],[203,19],],
'871':[[27,17],],
'872':[[50,17],],
'873':[[69,17],],
'928':[[181,846],],
'1009':[[36,17],],
'1021':[[284,17],],
'1061':[[53,17],],
'1062':[[276,17],],
'1063':[[273,17],],
'1064':[[364,17],],
'1065':[[347,17],],
'1066':[[343,18],],
'1067':[[394,17],],
'1068':[[137,17],],
'1069':[[173,17],],
'1070':[[86,17],],
'1071':[[57,17],],
'1072':[[283,17],],
'1073':[[187,17],],
'1074':[[269,17],],
'1075':[[100,17],],
'1076':[[135,17],],
'1079':[[332,17],],
'1081':[[131,17],],
'1593':[[181,880],],
'2360':[[213,68],],
'2517':[[89,38],],
'3675':[[189,29],],
'3726':[[209,19],],
},{'147':[[189,591],[213,434],[234,261],[10,260],[189,311],],
'277':[[234,235],[10,234],[189,285],],
'402':[[213,69],[234,55],[189,58],[10,56],],
'453':[[10,249],[189,300],[234,250],[213,254],],
'2516':[[213,239],],
},{'7':[[165,31],[142,37],[142,31],],
'48':[[135,19],[100,19],[283,19],],
'93':[[28,18],[271,18],[216,18],],
'122':[[271,15],[216,15],[282,15],[292,15],],
'139':[[57,24],],
'215':[[48,2884],[48,3246],[234,58],[213,72],[189,61],[306,591],[306,594],[10,59],[48,2881],[48,3249],],
'220':[[82,99],[82,118],[82,79],],
'241':[[284,24],[269,23],],
'382':[[153,392],],
'415':[[82,32],],
'447':[[335,232],[54,349],[179,1006],],
'700':[[82,51],[86,22],],
'885':[[28,22],],
'1043':[[348,17],],
'1101':[[253,19],],
'1355':[[157,17],],
'1598':[[48,3220],],
'1730':[[48,1835],],
'1731':[[48,1837],],
'1732':[[48,1839],],
'1811':[[48,3243],],
'1822':[[48,2878],],
'1898':[[48,3872],],
'1907':[[48,4045],[306,1353],],
'2246':[[64,20],],
'2413':[[81,17],],
'2519':[[89,42],],
'2537':[[90,17],],
'2999':[[173,26],],
'3628':[[187,22],],
'3676':[[189,31],],
'3726':[[260,23],],
'3727':[[209,25],],
'4158':[[306,588],],
},{'12':[[10,243],[213,248],[189,294],[234,244],],
'404':[[213,73],[234,59],[189,62],[10,60],],
},{'77':[[189,623],],
'228':[[189,66],[234,63],[10,64],],
'360':[[189,635],],
'454':[[189,307],[234,257],[10,256],],
},{'7':[[354,58],[122,5],[206,3],[171,769],[369,173],[206,101],],
'23':[[62,49],[362,37],],
'48':[[332,19],],
'89':[[176,209],],
'117':[[359,0],],
'139':[[57,37],[86,35],[247,34],[137,31],[173,39],[131,31],[178,40],[77,29],[270,34],],
'213':[[359,15],],
'215':[[234,66],[10,67],[394,21],[213,84],[189,69],],
'232':[[122,148],],
'241':[[135,21],[100,21],],
'375':[[332,66],[146,59],[173,153],[100,63],[137,108],[135,68],[178,154],[89,235],[180,80],[394,66],[187,77],[86,125],[189,331],[57,132],[36,64],[285,56],[209,123],[284,93],[210,68],[34,57],[213,289],[283,64],[229,86],[20,83],[234,281],[10,280],[247,127],[270,129],[269,92],[148,75],],
'447':[[36,21],],
'452':[[284,26],[269,25],],
'700':[[34,20],[210,20],[285,20],[146,20],],
'771':[[20,25],],
'864':[[362,17],],
'1045':[[283,23],[187,26],],
'1326':[[368,19],],
'2292':[[62,19],],
'2438':[[229,24],],
'2522':[[89,48],],
'2923':[[148,22],],
'3547':[[180,25],],
'3728':[[209,29],],
},{'3':[[332,62],],
'16':[[160,457],],
'19':[[181,923],[181,266],[160,382],],
'31':[[20,116],[284,126],[283,97],[34,90],[270,162],[269,125],[36,97],[247,160],[234,305],[285,89],[229,119],[213,313],[210,101],[209,156],[189,355],[187,110],[86,158],[10,304],[332,99],[89,259],[180,113],[394,99],[173,186],[57,165],[100,96],[160,450],[178,178],[148,108],[146,92],[135,101],[137,141],],
'33':[[394,57],],
'39':[[93,79],[160,544],],
'48':[[270,125],[283,60],[86,121],[187,73],[57,128],[247,123],[173,149],[137,104],],
'134':[[362,32],],
'147':[[62,118],],
'165':[[209,119],],
'175':[[36,60],],
'215':[[62,44],],
'224':[[93,69],],
'232':[[10,276],[189,327],[234,277],],
'241':[[100,59],[135,64],],
'277':[[178,150],],
'364':[[160,285],],
'383':[[89,231],],
'407':[[135,22],[187,27],[148,23],[180,26],[86,36],[394,22],[89,49],[362,18],[77,30],[210,21],[178,41],[100,22],[213,85],[20,26],[131,32],[229,25],[332,20],[62,20],[234,67],[173,40],[368,20],[247,35],[146,21],[57,38],[269,26],[285,21],[209,30],[270,35],[137,32],[36,22],[283,24],[189,70],[34,21],[284,27],[10,68],],
'454':[[284,89],[269,88],],
'462':[[160,504],],
'513':[[122,110],],
'780':[[146,55],[285,52],[34,53],[210,64],],
'781':[[20,79],],
'999':[[213,285],],
'1046':[[180,76],],
'1047':[[148,71],],
'1839':[[368,32],],
'3794':[[229,82],],
},{'7':[[359,20],],
'16':[[160,536],],
'26':[[176,211],],
'203':[[368,47],],
'215':[[153,950],],
'229':[[359,74],],
'389':[[77,32],[86,38],[89,51],[100,24],[62,22],[135,24],[137,34],[146,23],[148,25],[131,34],[36,24],[173,42],[34,23],[178,43],[180,28],[187,29],[189,72],[209,32],[210,23],[213,87],[229,27],[234,69],[247,37],[269,28],[270,37],[283,26],[284,29],[285,23],[332,22],[20,28],[57,40],[10,70],[362,20],[394,24],],
'931':[[359,53],],
},{'182':[[10,77],[332,33],[20,39],[285,34],[34,34],[284,40],[36,35],[283,37],[57,51],[270,48],[77,43],[86,49],[269,39],[89,58],[247,48],[100,35],[234,76],[131,45],[135,35],[229,38],[137,45],[213,94],[146,34],[210,34],[148,36],[209,43],[173,53],[189,79],[178,50],[187,40],[180,39],[394,35],],
'227':[[178,187],[187,119],[173,195],[189,364],[148,117],[209,165],[146,101],[210,110],[137,150],[213,322],[135,110],[229,128],[100,105],[234,314],[89,268],[247,169],[86,167],[269,134],[57,174],[270,171],[36,106],[283,106],[34,99],[284,135],[20,125],[285,98],[10,313],[332,108],[180,122],[394,108],],
},{'184':[[331,337],],
'277':[[384,4560],],
'285':[[234,85],[189,88],[10,86],],
'655':[[122,74],],
'2268':[[122,119],],
'2658':[[122,134],],
},{'7':[[178,85],[235,72],],
'18':[[189,424],],
'19':[[90,30],],
'23':[[384,7268],[277,558],[12,449],[116,106],[84,68],[116,80],[355,607],[231,107],[189,532],[142,129],],
'26':[[376,25],[178,93],[213,399],[320,70],[320,140],[89,122],[89,460],],
'77':[[170,76],],
'167':[[277,546],],
'173':[[134,24],[302,25],[128,28],[306,1131],[306,1065],[306,384],[306,359],[322,29],],
'277':[[322,60],[128,63],],
'290':[[189,291],[234,87],[234,241],[189,94],[10,240],[213,245],[10,88],],
'420':[[48,2015],[48,1992],],
'451':[[234,233],[189,283],[10,232],],
'471':[[384,9402],],
'484':[[170,65],],
'543':[[39,587],],
'682':[[80,49],[296,53],],
'722':[[384,5322],],
'726':[[246,1317],[253,46],[313,303],],
'918':[[89,319],[89,356],],
'926':[[191,32],],
'938':[[217,150],],
'1301':[[191,50],],
'1319':[[290,283],[179,229],[179,453],[179,1451],[290,507],[246,1255],],
'1672':[[170,93],],
'1848':[[179,133],[179,1240],[290,187],],
'1904':[[306,1112],],
'2859':[[302,47],[134,50],],
'4177':[[306,1203],],
},{'7':[[10,93],[89,76],[165,42],[178,62],[189,99],[213,110],[234,92],],
'33':[[316,118],[288,44],[232,131],],
'415':[[229,62],],
},{'7':[[171,765],[354,54],[194,3],[369,169],[122,3],[122,143],],
'26':[[49,397],[26,32],[234,95],[89,79],[178,65],[189,102],[10,96],[213,113],],
'117':[[152,0],],
'128':[[152,59],],
'213':[[152,15],],
'232':[[194,119],],
},{'9':[[232,126],],
'12':[[49,395],],
'23':[[339,89],],
'26':[[180,73],],
'48':[[229,168],[229,61],],
'124':[[325,21],[82,266],[165,20],[229,21],],
'128':[[133,77],[316,64],[350,135],],
'134':[[367,46],],
'414':[[89,80],[26,33],[10,97],[213,114],[189,103],[178,66],[234,96],],
'424':[[250,52],],
'431':[[57,107],[77,82],[86,100],[270,104],[173,128],[137,83],[247,102],[131,97],],
'567':[[258,48],],
'593':[[229,162],],
'780':[[229,58],],
'926':[[384,1577],],
'987':[[250,20],[373,20],[367,18],],
'1051':[[82,31],],
'1053':[[82,510],[229,174],[166,24],[133,80],],
'1346':[[165,40],],
'2413':[[373,45],],
'2942':[[288,40],],
'3115':[[161,326],],
},{'12':[[30,107],[159,63],],
'415':[[89,81],[178,67],[189,104],[213,115],[234,97],[10,98],],
},{'2':[[234,407],[95,122],],
'7':[[189,112],[292,34],[10,106],],
'12':[[220,116],[355,442],[384,9710],[170,193],],
'15':[[373,65],[274,787],[218,341],],
'19':[[90,50],[292,29],[89,316],[250,61],[367,55],[142,65],[335,1070],[81,42],[384,9669],[220,127],[335,756],[335,1057],[355,1240],[75,91],[313,460],],
'23':[[142,82],[373,77],[90,25],[274,751],[153,540],[234,343],[355,474],[250,41],[235,490],[367,43],],
'26':[[142,122],[81,26],[373,40],[157,39],[81,54],[191,237],[355,1207],],
'33':[[153,131],],
'57':[[75,88],],
'67':[[384,5312],],
'82':[[384,9899],],
'130':[[234,372],],
'149':[[292,57],],
'203':[[95,312],[335,1011],[54,745],],
'239':[[335,1101],],
'449':[[335,1118],[218,321],[355,623],],
'482':[[335,609],],
'502':[[335,1724],],
'523':[[246,1639],[246,1598],],
'543':[[218,351],[274,763],],
'562':[[355,748],],
'596':[[335,1189],],
'615':[[355,403],],
'680':[[95,392],],
'707':[[376,28],],
'861':[[220,55],],
'1119':[[277,930],],
'1151':[[384,9382],],
'1205':[[89,352],],
'1237':[[335,1685],],
'1351':[[384,9524],[42,593],[42,183],[335,736],],
'1393':[[355,575],],
'2288':[[384,5866],],
'2310':[[335,611],],
'2384':[[376,30],],
'2572':[[95,129],],
'2629':[[335,1683],],
},{'23':[[355,471],],
'417':[[189,113],[10,107],],
},{'16':[[349,54],[160,656],],
'18':[[203,78],[142,68],[189,115],[306,60],[10,109],],
'31':[[355,479],[142,145],[249,206],],
'39':[[257,166],],
'203':[[101,60],],
'220':[[151,29],[389,29],[319,26],],
'353':[[54,1442],],
'548':[[306,84],],
'551':[[160,290],],
'655':[[320,132],],
'1911':[[113,62],],
},{'2':[[358,313],[261,153],],
'3':[[274,441],[384,6076],[339,108],],
'16':[[174,263],[368,62],[159,36],],
'17':[[365,175],[25,80],[385,43],[355,1331],[39,154],],
'35':[[381,291],],
'38':[[96,192],],
'41':[[359,68],],
'65':[[223,52],[384,5117],[215,22],[289,182],[293,24],[307,33],[99,300],[384,7497],[315,182],[39,372],[244,41],[197,494],[23,24],[345,42],[341,33],[183,22],[317,73],[315,203],[60,56],[190,40],[84,462],[70,633],],
'77':[[70,66],],
'82':[[48,1980],[335,3387],[48,2003],],
'87':[[381,600],],
'90':[[18,25],],
'131':[[246,400],[246,423],],
'137':[[321,215],],
'152':[[191,197],[101,65],],
'165':[[384,1356],],
'177':[[61,26],[319,34],[370,45],[95,415],[67,24],[365,199],[370,24],[200,53],[61,38],[164,213],[164,205],[310,24],[260,65],],
'199':[[164,454],],
'206':[[303,169],],
'215':[[384,7762],[381,237],[384,6172],],
'223':[[82,460],],
'225':[[246,1391],[384,4786],[153,107],[73,75],[48,2706],[164,105],[160,615],[70,58],],
'277':[[95,144],[57,299],],
'285':[[335,794],],
'299':[[86,247],],
'306':[[335,3284],],
'354':[[207,35],[191,301],[312,43],[235,327],[274,521],],
'359':[[387,89],[311,89],],
'369':[[235,275],],
'372':[[164,22],],
'419':[[203,79],[319,27],[306,61],[151,30],[142,69],[101,61],[10,110],[189,116],[160,657],[389,30],],
'424':[[48,3869],[335,2363],[345,50],[42,439],],
'445':[[335,2335],],
'455':[[363,509],],
'473':[[384,6263],[384,6177],[48,4616],[48,2540],[384,7715],[384,7767],[381,159],[381,242],[381,305],[381,418],],
'480':[[335,1191],],
'488':[[54,492],],
'491':[[200,151],],
'498':[[164,487],[95,47],],
'514':[[306,73],],
'518':[[384,9132],],
'534':[[153,97],],
'550':[[39,44],],
'567':[[384,5441],],
'593':[[258,58],[351,57],[39,611],[181,452],[384,9905],[48,773],[82,532],[164,346],[306,193],],
'607':[[235,337],],
'639':[[191,193],],
'645':[[214,70],],
'656':[[302,111],[48,4681],[384,4050],[48,3117],[335,3436],[322,94],[39,603],],
'681':[[335,1319],],
'696':[[355,1291],[331,295],],
'698':[[301,42],],
'726':[[176,122],],
'730':[[213,467],],
'777':[[82,465],],
'800':[[308,26],[340,26],],
'857':[[332,168],],
'880':[[27,58],],
'926':[[355,727],],
'928':[[42,389],],
'935':[[30,233],],
'1006':[[160,473],],
'1033':[[176,221],[164,275],],
'1203':[[355,1167],],
'1226':[[84,226],],
'1299':[[384,8810],],
'1367':[[242,69],],
'1416':[[48,4314],],
'1424':[[384,8449],[384,5617],],
'1439':[[48,2014],[48,1991],],
'1445':[[384,1875],],
'1560':[[48,1242],[48,1283],],
'1633':[[306,313],],
'1811':[[54,508],[164,121],[52,306],[320,34],[118,40],],
'1878':[[125,227],[321,207],[381,64],[125,243],[306,302],],
'1963':[[335,1020],[381,259],[384,6195],[381,233],[313,63],[381,296],[75,40],[384,7758],[384,7784],[384,6168],[381,288],],
'2011':[[49,248],[384,1097],],
'2026':[[266,366],],
'2051':[[82,504],],
'2068':[[52,239],],
'2152':[[95,243],[54,676],],
'2168':[[193,101],[352,101],],
'2443':[[232,83],],
'2478':[[384,4428],],
'2493':[[125,125],],
'2494':[[384,417],[384,437],[384,801],[384,460],],
'2495':[[384,8970],],
'2642':[[99,235],],
'2797':[[125,25],],
'2803':[[125,47],],
'2886':[[253,116],[137,188],[352,57],[193,57],[173,233],],
'3016':[[159,17],],
'3055':[[160,30],[251,108],],
'3077':[[160,429],[181,961],[359,82],],
'3083':[[359,104],],
'3090':[[242,127],[160,663],],
'3102':[[161,77],[384,7639],],
'3136':[[284,199],[162,71],[269,219],],
'3561':[[181,140],],
'3580':[[181,418],],
'3911':[[384,2712],],
'3916':[[246,1151],],
'3936':[[246,1517],],
'4184':[[341,183],[307,183],],
'4375':[[335,3315],],
'4592':[[381,429],],
},{'7':[[310,27],[310,3],[92,122],[254,185],[250,5],[171,546],[211,110],],
'12':[[373,53],],
'15':[[31,37],],
'26':[[90,44],[116,48],[292,44],],
'77':[[157,51],],
'117':[[367,0],],
'381':[[367,16],],
'382':[[335,618],[153,569],],
'420':[[189,117],[310,25],[142,70],[10,111],],
'667':[[250,137],],
'2629':[[355,488],[355,1098],],
},{'7':[[170,57],[10,121],[322,51],[367,80],[213,130],[292,49],[189,127],[396,49],[234,122],[128,54],[250,86],],
'12':[[313,130],[363,81],[80,35],[218,65],[296,39],],
'15':[[197,348],[217,339],[197,291],[335,1863],[335,2300],[54,404],[48,3234],[70,441],[70,496],[48,2855],],
'19':[[72,78],[170,41],],
'23':[[72,29],[384,2487],[48,4824],[384,4343],[277,438],[363,513],[84,50],[84,80],[84,111],[384,5151],[84,186],[84,241],[84,336],[235,348],[235,305],[84,383],[48,4518],[84,475],[84,552],[48,3582],[384,7588],[246,1097],[196,60],[384,9351],[355,639],[302,163],[95,362],[306,1104],[116,90],[189,584],[355,482],[234,222],[217,301],[189,519],[42,882],[189,272],[346,28],[292,25],[134,161],[218,338],[231,65],[153,67],[153,110],[335,3272],[39,774],[153,484],[153,509],[153,544],[153,557],[153,653],[396,90],[178,257],[153,1209],[39,72],[156,66],[170,250],[231,88],[168,30],[372,41],[10,221],[84,446],[335,3309],],
'26':[[322,58],[322,147],[320,95],[313,138],[42,259],[384,9338],[80,42],[84,137],[142,119],[337,58],[128,145],[89,102],[128,61],[116,118],[116,71],[235,192],[363,87],[218,71],[363,355],[89,108],[296,46],[170,122],],
'31':[[178,292],[331,505],[48,1291],[331,461],[246,1491],[306,1410],],
'34':[[48,3502],],
'36':[[246,987],],
'43':[[296,140],[80,106],],
'63':[[277,560],[355,610],],
'67':[[84,376],[84,359],],
'77':[[277,936],],
'81':[[313,55],[189,123],[10,117],[234,118],[381,44],[213,126],],
'128':[[126,17],],
'149':[[322,113],[128,111],],
'154':[[396,179],],
'183':[[306,349],],
'186':[[306,1173],],
'199':[[83,100],],
'224':[[197,402],[153,469],[70,604],],
'239':[[384,4436],[384,7022],[384,5047],],
'275':[[381,154],],
'279':[[355,596],[277,548],[142,149],[384,7341],[186,420],],
'290':[[235,90],],
'298':[[153,152],],
'306':[[355,850],],
'349':[[242,51],],
'353':[[246,1478],[277,630],[121,111],[246,966],[48,4806],[277,648],],
'451':[[302,68],[134,88],[134,71],[302,85],[178,219],[178,100],],
'453':[[89,423],],
'464':[[384,5854],],
'470':[[89,445],[89,170],[384,8118],],
'479':[[48,4758],],
'482':[[381,557],[95,142],],
'491':[[306,722],],
'543':[[42,282],[355,704],[189,415],],
'550':[[48,3258],],
'608':[[217,323],],
'632':[[363,375],],
'642':[[384,8964],],
'674':[[381,118],[381,102],[381,131],[381,73],],
'680':[[153,744],[162,136],[170,233],[153,664],[335,1984],],
'681':[[171,54],[384,4027],[227,60],],
'722':[[170,53],],
'726':[[196,66],[246,1274],[156,72],[246,1321],],
'856':[[335,3556],[335,3199],[335,300],[335,1879],[335,702],[335,1146],[335,480],],
'866':[[335,1871],],
'931':[[95,97],],
'1004':[[48,3489],],
'1131':[[218,294],],
'1135':[[278,42],[191,275],],
'1191':[[39,582],],
'1229':[[153,1267],],
'1305':[[381,215],],
'1314':[[384,6258],],
'1414':[[384,7467],[191,230],],
'1416':[[331,284],[355,1045],[278,48],[217,298],],
'1470':[[277,692],],
'1591':[[54,447],],
'1608':[[335,2227],[335,3074],[313,380],],
'1688':[[48,3516],],
'1693':[[250,35],[367,37],],
'1837':[[384,4960],],
'2076':[[384,5073],],
'2136':[[331,98],[331,75],],
'2221':[[197,391],[70,596],],
'2371':[[384,6614],],
'2406':[[296,27],[80,27],],
'2464':[[384,6629],],
'2749':[[335,2750],[335,2022],],
},{'7':[[189,186],[10,135],[89,106],[234,105],[42,180],[234,136],[302,82],[134,85],[213,144],],
'23':[[322,106],[320,160],[52,194],[313,433],[355,1205],[128,104],[367,52],[75,62],[384,7272],[81,39],[250,58],],
'154':[[320,138],],
'236':[[70,364],[197,201],],
'277':[[234,124],[189,129],[213,132],[396,56],[396,51],[10,123],],
'333':[[70,612],[197,409],],
'422':[[156,73],[363,376],[196,67],],
'425':[[196,56],[156,62],],
'447':[[313,449],],
'672':[[42,1130],],
'726':[[81,32],[157,30],],
'791':[[70,521],],
'934':[[52,311],],
'1004':[[197,370],[70,570],[197,207],[70,370],],
'1101':[[197,355],[70,503],],
'1198':[[39,637],[355,1344],[42,136],],
'1333':[[42,590],],
'1540':[[70,687],[197,519],],
'1651':[[70,572],[70,617],[197,375],[70,505],[197,372],[70,575],[197,399],[197,357],],
'2346':[[70,582],[197,382],],
'2353':[[70,747],[197,589],],
'2359':[[197,584],[197,593],[70,751],[70,742],],
},{'7':[[372,38],[280,42],[260,59],[209,59],[349,32],[50,50],[207,51],[53,40],[334,40],[175,23],[57,64],[69,39],[173,71],[313,67],[314,32],[86,62],[103,39],[106,29],[131,72],[137,58],[150,39],[154,25],],
'16':[[82,495],[10,265],[315,44],[53,111],[234,266],[189,316],[207,67],[289,44],[345,49],],
'31':[[250,51],[304,162],[263,67],],
'41':[[42,438],],
'127':[[280,90],[371,83],],
'165':[[213,138],[189,180],[10,129],[234,130],],
'237':[[349,44],[200,58],],
'305':[[84,118],],
'370':[[48,3868],],
'431':[[287,55],[252,45],[80,64],[53,46],[170,89],[170,100],[50,56],[260,70],],
'548':[[204,44],],
'935':[[335,2362],],
'1003':[[48,2154],],
},{'7':[[396,54],],
'15':[[197,523],[70,691],],
'16':[[189,421],],
'23':[[156,55],[196,49],[156,38],],
'26':[[363,288],[213,146],[363,551],[10,137],[234,138],[189,188],],
'31':[[142,89],[363,297],[376,34],[178,223],[335,524],[213,369],],
'33':[[234,132],[10,131],[213,140],[189,182],],
'152':[[162,138],],
'306':[[355,860],],
'354':[[306,366],],
'438':[[196,75],[156,81],],
'442':[[197,427],[70,659],],
'451':[[128,66],[384,5076],[84,450],[322,63],],
'550':[[128,127],[322,129],],
'726':[[313,97],[156,61],[196,55],],
'838':[[197,597],],
'1004':[[48,2857],[48,3260],[48,3236],],
},{'7':[[231,26],],
'16':[[363,408],],
'135':[[84,233],[363,145],[313,168],[218,107],],
'140':[[231,86],[42,295],],
'147':[[89,129],[189,193],[213,151],[234,143],[10,142],],
'1930':[[70,727],],
'2585':[[191,195],],
},{'23':[[89,131],[189,195],[213,153],[234,145],[10,144],],
'152':[[246,1380],[379,171],],
'1226':[[246,274],],
},{'1':[[84,261],],
'7':[[142,126],],
'19':[[355,701],[42,279],[116,103],[231,104],[116,87],],
'23':[[116,69],[116,77],[116,56],[116,28],[116,116],[89,134],[189,198],[213,156],[234,148],[231,52],[231,61],[231,71],[10,147],],
'149':[[355,721],],
'224':[[84,236],],
'238':[[231,44],],
},{'12':[[10,149],[384,4964],[42,453],[48,617],[381,614],[363,473],[76,31],[89,136],[359,58],[358,129],[121,201],[161,113],[161,350],[340,73],[189,200],[308,106],[391,37],[266,104],[213,158],[234,150],[266,88],],
'48':[[189,461],],
'57':[[30,321],[102,148],[191,183],[164,262],],
'196':[[193,142],[352,142],],
'248':[[52,159],],
'598':[[48,3737],[306,982],],
'2229':[[93,131],],
'3830':[[321,217],],
},{'15':[[42,285],[48,3699],],
'277':[[10,151],[89,138],[128,176],[189,202],[213,160],[234,152],[322,178],],
'513':[[355,712],],
},{'7':[[10,154],[10,164],[10,207],[10,217],[10,236],[10,245],[10,258],[10,278],[10,283],[10,315],[16,45],[16,64],[16,81],[16,90],[20,81],[20,86],[20,95],[20,127],[34,55],[34,60],[34,69],[34,101],[36,62],[36,67],[36,76],[36,108],[44,69],[44,78],[394,78],[394,69],[50,55],[53,45],[57,77],[57,93],[57,106],[57,117],[57,130],[57,135],[57,144],[57,176],[62,46],[394,59],[74,45],[74,64],[74,81],[74,90],[75,56],[77,81],[77,92],[80,63],[86,86],[86,99],[86,110],[86,123],[86,128],[86,137],[86,169],[89,233],[89,238],[89,270],[100,61],[100,66],[100,75],[100,107],[111,69],[118,79],[131,96],[131,107],[135,66],[135,71],[135,80],[135,112],[137,82],[137,93],[137,106],[137,111],[137,120],[137,152],[394,49],[146,57],[146,62],[146,71],[146,103],[148,58],[148,73],[148,78],[148,87],[148,119],[170,88],[170,99],[173,116],[173,127],[173,138],[173,151],[173,156],[173,165],[173,197],[178,115],[178,120],[178,152],[178,157],[178,189],[180,78],[180,83],[180,92],[180,124],[187,68],[187,75],[187,80],[187,89],[187,121],[189,205],[189,215],[189,258],[189,268],[189,287],[189,296],[189,309],[189,329],[189,334],[189,366],[367,62],[203,61],[209,121],[209,126],[209,135],[209,167],[210,66],[210,71],[210,80],[210,112],[213,163],[213,173],[213,216],[213,226],[213,233],[213,241],[213,250],[213,263],[213,275],[213,287],[213,292],[213,324],[218,93],[218,110],[218,160],[218,170],[218,192],[218,209],[229,84],[229,89],[229,98],[229,130],[234,155],[234,165],[234,208],[234,218],[234,237],[234,246],[234,259],[234,279],[234,284],[234,316],[235,114],[235,123],[235,166],[235,172],[235,179],[244,88],[247,101],[247,112],[247,125],[247,130],[247,139],[247,171],[250,68],[252,44],[253,64],[253,76],[260,69],[269,90],[269,95],[269,104],[269,136],[270,103],[270,114],[270,127],[270,132],[270,141],[270,173],[363,270],[363,252],[283,55],[283,62],[283,67],[283,76],[283,108],[284,91],[284,96],[284,105],[284,137],[285,54],[285,59],[285,68],[285,100],[287,54],[363,240],[363,232],[363,222],[313,145],[313,154],[313,171],[313,180],[332,64],[332,69],[332,78],[332,110],[361,43],[362,34],[363,117],[363,131],[363,148],[363,157],[363,207],[394,110],],
'16':[[306,106],],
'146':[[48,3928],],
'215':[[306,1259],],
'376':[[197,157],[70,276],],
'596':[[277,755],[277,737],],
'1326':[[306,111],[48,125],],
'2384':[[142,134],],
'4874':[[384,3457],],
},{'15':[[197,299],[12,637],[277,998],[48,200],[70,449],],
'23':[[159,116],],
'26':[[159,66],[321,380],],
'59':[[339,258],[135,171],[189,212],[10,161],[213,170],[234,162],[89,147],[321,318],],
'343':[[44,109],[321,235],],
'605':[[339,224],],
'1667':[[153,502],],
'3712':[[344,79],],
'4451':[[351,52],],
},{'2':[[176,125],[246,1814],[277,25],[227,179],],
'16':[[274,479],],
'20':[[214,56],],
'28':[[277,295],],
'47':[[277,873],[214,122],[274,425],],
'67':[[174,20],[164,546],],
'82':[[303,33],[83,21],],
'107':[[12,179],],
'128':[[327,21],[383,21],[104,21],[94,27],],
'139':[[235,127],[178,124],[189,219],[213,177],[10,168],[363,161],[218,114],[234,169],],
'199':[[242,203],[160,54],[12,555],[160,62],[44,107],],
'269':[[164,114],],
'281':[[49,84],],
'321':[[227,119],],
'489':[[303,41],],
'648':[[49,21],[227,133],],
'817':[[384,4059],[384,9206],],
'865':[[277,899],],
'940':[[54,63],],
'1003':[[277,136],],
'1101':[[41,289],],
'1260':[[42,831],],
'2935':[[152,209],],
'3209':[[172,69],],
},{'12':[[335,2523],],
'23':[[189,489],],
'433':[[189,220],[178,125],[213,178],[218,115],[234,170],[235,128],[10,169],[363,162],],
},{'12':[[178,128],[189,223],[213,181],[218,118],[234,173],[235,131],[363,165],[10,172],],
},{'12':[[384,5318],],
'15':[[48,2467],[335,3604],[335,3422],[335,3572],[335,2520],],
'18':[[335,2379],],
'19':[[48,3104],[39,202],[200,42],[200,148],[48,4668],[335,3356],],
'23':[[234,175],[384,1827],[363,167],[220,84],[235,133],[200,186],[200,175],[200,134],[213,183],[10,174],[306,1404],[335,3401],[306,1524],[48,4184],[48,4630],[335,2851],[200,108],[121,248],[335,3371],[48,2128],[178,130],[189,225],[335,2476],[218,120],],
'25':[[48,2180],],
'26':[[384,8297],[335,3344],[136,23],],
'33':[[384,8273],[335,3690],[335,1292],],
'38':[[335,3384],],
'82':[[224,174],],
'92':[[224,60],[39,776],[39,755],[384,9615],[39,726],[39,710],[39,703],[39,682],[39,618],[39,594],[39,526],[345,30],],
'94':[[335,3529],],
'130':[[335,2446],[335,1644],[335,1793],[335,1075],],
'152':[[266,306],],
'173':[[335,3508],],
'241':[[335,2537],],
'290':[[48,2660],],
'443':[[335,1043],],
'457':[[335,3728],],
'483':[[335,3502],],
'500':[[39,906],],
'515':[[121,452],],
'540':[[335,1050],],
'572':[[48,1647],[39,212],],
'621':[[384,8808],],
'642':[[39,436],[48,307],],
'656':[[195,22],],
'680':[[335,1497],[48,2669],],
'1117':[[335,3464],],
'1185':[[244,84],[118,75],],
'1372':[[42,304],],
'1448':[[335,3475],],
'1553':[[48,325],],
'1696':[[48,1558],],
'1778':[[335,3634],],
'1814':[[48,2682],],
'2128':[[335,3660],],
'2221':[[335,1252],],
'2325':[[335,1546],],
'2626':[[384,5791],],
'2886':[[335,983],],
'3688':[[335,3697],[335,3731],],
'4383':[[335,3643],],
'4388':[[335,3651],],
},{'19':[[335,3396],],
'31':[[178,133],[189,228],[213,186],[218,123],[363,170],[234,178],[235,136],[10,177],],
'926':[[220,31],],
'1202':[[246,790],],
},{'12':[[235,499],],
'26':[[363,567],[367,77],[250,83],[116,43],],
'33':[[10,179],[234,180],[235,138],[363,172],[218,125],[213,188],[189,230],[178,135],],
'63':[[234,188],[363,180],[178,143],[235,146],[189,238],[363,490],[218,133],[213,196],[10,187],],
'73':[[363,501],],
'77':[[235,82],[156,80],[196,74],],
'82':[[235,70],],
'134':[[116,35],],
'147':[[363,557],],
'152':[[235,487],],
'173':[[250,25],[116,19],[367,23],[178,23],[363,23],[233,23],[235,19],],
'264':[[156,52],],
'346':[[363,586],[235,469],],
'370':[[95,368],],
'429':[[363,474],],
'447':[[363,621],],
'647':[[116,33],],
'856':[[363,457],],
'926':[[218,75],],
'1101':[[178,83],],
'1355':[[367,60],[250,66],],
'1458':[[235,287],],
'1589':[[196,19],[156,20],[54,853],],
'2233':[[54,1321],],
'2517':[[196,46],],
'2864':[[363,99],],
},{'16':[[41,160],[344,232],],
'18':[[331,343],],
'77':[[242,171],],
'148':[[384,6214],],
'199':[[266,336],],
'237':[[65,63],],
'277':[[218,128],[234,183],[235,141],[213,191],[189,233],[178,138],[10,182],[363,175],],
'283':[[384,1074],],
'712':[[164,437],],
'955':[[246,624],],
'1123':[[384,8383],],
'1139':[[277,299],],
'1910':[[384,9169],],
'2532':[[242,180],],
'3483':[[179,653],],
'3847':[[246,114],[277,653],],
},{'12':[[235,496],],
'63':[[235,482],],
'65':[[235,121],],
'137':[[178,118],],
'147':[[235,462],],
'173':[[178,37],[235,33],[233,37],],
'185':[[218,131],[213,194],[235,144],[189,236],[178,141],[10,185],[234,186],[363,178],],
'944':[[235,277],],
},{'23':[[178,148],[189,243],[213,201],[218,138],[234,193],[235,151],[363,185],[10,192],],
},{'23':[[10,195],[363,188],[70,658],[189,246],[197,426],[213,204],[218,141],[234,196],[235,154],[345,78],[355,866],[363,352],],
'63':[[30,156],],
},{'23':[[395,141],[10,226],[384,2192],[16,116],[30,115],[30,418],[39,166],[384,4934],[48,3934],[54,683],[54,727],[395,119],[384,8643],[57,241],[62,105],[69,77],[74,116],[80,110],[84,421],[395,111],[95,250],[95,294],[95,422],[95,442],[95,449],[103,97],[118,158],[135,164],[150,97],[153,765],[160,190],[162,207],[165,75],[174,57],[180,216],[181,129],[181,133],[186,128],[186,178],[189,171],[384,1250],[189,277],[189,468],[197,499],[200,77],[200,192],[200,214],[363,317],[217,308],[335,1042],[220,37],[224,165],[224,227],[227,195],[331,384],[234,227],[315,197],[315,144],[246,325],[246,393],[246,813],[246,863],[258,73],[270,219],[274,227],[274,549],[274,664],[274,717],[277,40],[277,335],[289,144],[296,144],[303,84],[303,94],[306,1265],[384,2195],],
'67':[[39,708],],
'128':[[234,337],[57,205],[367,100],[10,336],],
'442':[[345,79],[189,247],[218,142],[234,197],[213,205],[363,189],[235,155],[10,196],],
'449':[[384,2183],],
'867':[[384,1887],],
'1349':[[86,222],],
'1465':[[384,3567],],
'2238':[[54,1386],],
'4944':[[384,3703],],
},{'443':[[189,248],[213,206],[218,143],[234,198],[235,156],[363,190],[10,197],],
},{'7':[[42,202],],
'15':[[384,4423],[335,3657],],
'19':[[253,191],[65,95],],
'23':[[42,888],[384,9387],[54,748],[42,320],[266,187],[381,367],[84,454],[363,246],[335,2029],[95,324],[320,130],[162,130],[335,3140],[162,220],[179,1167],[253,161],[191,63],[191,186],[335,2881],[197,531],[335,2141],[220,101],[335,2183],[324,24],],
'63':[[213,213],[234,205],[235,163],[189,255],[363,197],[39,376],[39,314],[218,150],[10,204],],
'77':[[84,506],],
'81':[[231,40],[89,290],],
'134':[[75,35],[313,58],],
'149':[[162,190],],
'271':[[384,1492],],
'279':[[335,2625],],
'443':[[220,38],],
'543':[[395,45],],
'552':[[384,76],],
'935':[[335,2313],[335,2949],],
'1004':[[266,316],],
'1305':[[384,7009],[384,7886],[335,2334],],
'1308':[[278,51],],
'1467':[[355,1082],],
'1811':[[197,445],],
'1843':[[336,88],],
'2082':[[384,7899],[54,78],],
'2309':[[384,8478],],
'2323':[[384,7400],[384,7828],],
'2376':[[335,2262],[335,3152],],
'2377':[[335,2151],[335,2916],],
'2378':[[132,18],[313,18],[75,18],[335,2756],[335,2041],],
'2527':[[335,1838],[335,2685],[335,59],[335,1942],[335,2288],[355,587],],
},{'15':[[218,175],],
'19':[[361,82],[335,2320],[313,252],[313,230],[384,9447],[191,280],[191,139],],
'23':[[54,1350],],
'26':[[54,1082],[189,261],[213,219],[218,163],[234,211],[10,210],],
'31':[[162,117],],
'33':[[384,9369],],
'34':[[54,1293],],
'38':[[313,280],],
'54':[[361,51],],
'196':[[54,770],],
'241':[[295,36],],
'866':[[54,789],],
'1843':[[335,2591],[54,1213],],
'2548':[[313,260],],
},{'12':[[52,247],[173,97],],
'19':[[110,25],[77,59],[131,61],[332,159],[189,509],[189,476],[270,64],[332,46],[277,358],[181,741],[384,875],[36,161],[396,82],[247,64],],
'23':[[235,313],[247,83],[367,129],[52,197],[36,57],[250,126],[235,283],[213,476],[363,365],[30,323],[270,85],[189,631],[363,256],[335,1089],[396,97],[128,197],[396,105],[342,93],[313,83],[322,199],[110,36],[332,180],[396,119],[102,180],[30,52],[102,150],[102,60],[102,131],[102,96],[209,116],[260,63],],
'26':[[396,63],[191,74],[384,6529],[396,28],[220,34],[342,261],],
'36':[[30,295],],
'48':[[36,54],],
'49':[[335,2240],[335,2707],[335,2298],[335,1965],[384,7732],[335,3087],[335,1861],[335,3068],[335,2221],],
'67':[[181,750],[235,294],[332,177],[30,306],[363,522],],
'94':[[385,16],],
'134':[[385,23],],
'142':[[181,398],[102,80],],
'149':[[72,53],[30,203],],
'152':[[181,116],],
'165':[[251,38],[186,92],],
'173':[[55,22],[247,22],[270,22],[102,76],[36,20],],
'175':[[36,42],],
'186':[[335,771],[335,331],[335,384],[335,3223],[335,1918],[335,2639],],
'277':[[384,2489],],
'346':[[181,379],],
'412':[[384,5323],[384,7269],[191,33],],
'422':[[335,1880],[48,4519],[335,3557],[335,1147],[72,30],[335,703],[218,339],[196,61],[335,481],[84,337],[84,360],[84,447],[335,3200],[335,301],[384,5152],[346,29],[191,231],[384,6615],[250,87],[80,43],[170,234],[367,81],[84,476],[84,553],[384,9352],[384,8965],[355,483],[168,31],[126,18],[134,162],[384,7589],[156,67],[302,164],[296,47],[292,50],],
'425':[[70,692],[156,56],[196,50],[197,524],[84,451],],
'437':[[335,3397],],
'446':[[54,1083],[54,771],[54,1294],[54,790],[54,1351],[213,220],[10,211],[54,1214],[189,262],[218,164],[218,176],[234,212],],
'451':[[363,701],[363,686],[162,114],[355,1427],[335,2401],[335,2423],[162,49],[42,647],[337,81],[199,79],],
'502':[[335,769],[335,3221],[335,1916],[335,329],[335,382],[335,2637],],
'518':[[235,271],],
'543':[[253,225],[253,61],],
'546':[[39,56],[335,287],[335,3180],],
'550':[[335,3391],],
'615':[[181,371],[335,3726],],
'680':[[153,674],[335,1746],[186,323],[189,147],[335,1722],[335,1611],[335,1472],[335,1457],[335,1364],[335,1209],[42,231],[355,121],[186,334],],
'726':[[313,437],[313,448],],
'780':[[270,82],[247,80],],
'791':[[335,54],],
'846':[[396,173],[335,3189],],
'920':[[95,388],[30,123],],
'926':[[191,114],[313,309],[363,211],[313,74],],
'930':[[30,167],],
'932':[[30,191],],
'937':[[363,620],[363,404],],
'963':[[335,304],[335,484],[335,3203],[335,1883],[335,3560],[335,1150],[335,706],],
'1027':[[54,348],[335,231],[179,1005],],
'1135':[[191,172],],
'1301':[[367,64],[84,483],[250,70],[116,38],],
'1315':[[253,196],],
'1413':[[42,632],],
'1608':[[251,137],],
'1651':[[181,361],[181,355],],
'1669':[[253,207],],
'1991':[[335,1853],],
'2034':[[253,218],],
'2076':[[162,45],[384,4349],[335,109],[384,4323],],
'2221':[[355,560],[153,751],],
'2229':[[306,570],],
'2668':[[102,87],],
'2669':[[102,92],],
'3577':[[181,353],],
'3578':[[181,359],],
'3713':[[263,63],[263,77],],
'4373':[[335,3280],],
},{'19':[[12,569],],
'77':[[181,180],],
'153':[[253,221],],
'447':[[10,212],[234,213],[189,263],[213,221],[363,212],[218,165],],
'555':[[249,309],],
'705':[[181,1030],],
'928':[[251,68],],
'995':[[257,62],],
'1382':[[54,1288],],
'3626':[[217,345],],
},{'2':[[16,38],[74,38],],
'8':[[384,2622],],
'12':[[134,77],[141,74],[48,3393],[126,23],[349,70],[143,53],[302,74],],
'14':[[304,225],],
'16':[[89,402],[384,5158],[235,442],],
'26':[[384,9642],],
'28':[[209,217],],
'31':[[306,179],[42,408],[277,430],[235,95],[335,1978],[335,2710],[355,420],[355,829],[363,517],[363,261],[48,759],],
'34':[[30,211],],
'47':[[164,98],],
'48':[[274,254],[82,392],[246,828],[82,361],],
'55':[[179,145],[179,1254],[290,199],],
'63':[[384,1054],],
'65':[[75,121],[101,36],[251,57],],
'73':[[160,546],],
'82':[[384,8612],],
'83':[[220,125],],
'88':[[48,3276],[153,918],[48,2756],[306,516],],
'107':[[42,1263],],
'131':[[197,497],[178,235],],
'135':[[118,122],[244,164],],
'143':[[339,96],],
'147':[[172,84],],
'149':[[355,428],],
'152':[[246,1778],],
'163':[[99,80],],
'165':[[284,172],[269,171],],
'167':[[384,8743],],
'177':[[72,63],],
'196':[[70,637],],
'199':[[170,168],],
'203':[[75,133],[82,384],],
'220':[[160,188],[176,257],],
'225':[[190,62],],
'237':[[80,56],],
'241':[[189,512],],
'250':[[99,289],],
'271':[[384,7235],],
'277':[[335,3311],[99,145],],
'289':[[384,8195],],
'290':[[384,8903],],
'299':[[274,225],[274,325],],
'314':[[42,533],[42,515],],
'370':[[170,134],],
'371':[[339,154],],
'381':[[373,98],],
'402':[[181,131],],
'436':[[335,3652],[335,3635],],
'447':[[363,257],[355,484],[209,117],[355,122],],
'448':[[213,222],[189,264],[218,166],[234,214],[10,213],[363,213],],
'466':[[170,147],],
'470':[[322,206],[128,204],[189,487],],
'481':[[277,829],],
'505':[[384,444],],
'517':[[121,157],],
'530':[[384,2837],],
'532':[[162,273],],
'538':[[384,5333],],
'595':[[301,67],],
'596':[[337,72],],
'608':[[341,147],[307,147],],
'631':[[214,174],],
'673':[[313,482],],
'681':[[335,2514],],
'682':[[355,579],],
'700':[[270,236],],
'706':[[274,757],],
'800':[[164,167],[39,125],],
'857':[[162,264],],
'859':[[331,320],],
'866':[[170,60],[313,141],],
'887':[[277,140],],
'922':[[246,158],],
'926':[[335,2866],],
'949':[[384,3830],[384,1327],[384,6908],],
'955':[[42,1212],],
'958':[[335,2120],[335,2815],],
'995':[[331,240],],
'1006':[[359,64],[160,97],],
'1033':[[37,74],],
'1101':[[246,226],],
'1109':[[384,8925],[384,812],],
'1117':[[52,319],],
'1119':[[51,31],],
'1143':[[342,207],],
'1180':[[42,522],],
'1255':[[384,2182],],
'1301':[[384,6510],],
'1302':[[162,283],],
'1304':[[274,298],[384,5171],[179,1294],],
'1305':[[188,124],],
'1310':[[243,155],],
'1358':[[384,6526],],
'1363':[[42,253],],
'1364':[[331,324],],
'1392':[[384,6448],],
'1424':[[384,8607],],
'1429':[[42,777],],
'1456':[[42,916],],
'1462':[[384,2421],[384,2565],],
'1612':[[250,107],],
'1811':[[48,2665],],
'1963':[[75,98],],
'2004':[[84,157],],
'2095':[[246,1024],[246,1076],[246,1293],[277,802],[246,1213],],
'2150':[[335,1117],],
'2270':[[321,369],],
'2381':[[75,31],],
'2388':[[384,5493],],
'2663':[[176,143],],
'2689':[[384,3252],],
'2816':[[384,2190],],
'2977':[[246,1723],],
'3093':[[311,77],[387,77],],
'3145':[[162,306],],
'3626':[[235,240],],
'3769':[[218,320],],
'3780':[[224,126],],
'3919':[[246,1234],],
'3942':[[335,2342],],
'4052':[[274,194],],
'4056':[[274,469],],
'4061':[[274,749],],
'4185':[[307,107],[341,107],],
'4364':[[335,2893],],
'4452':[[384,4840],],
'4459':[[353,167],],
'4481':[[355,622],],
'4622':[[384,2755],],
'4684':[[384,575],],
'4890':[[384,3227],[384,3017],],
},{'7':[[291,26],],
'140':[[189,506],],
'147':[[234,220],[189,270],[10,219],],
},{'7':[[128,65],[322,62],[302,67],[178,99],[360,40],[134,70],],
'12':[[363,315],[218,79],[384,3552],[363,114],[363,103],[218,90],[105,32],[203,73],],
'23':[[337,80],[335,962],[355,1426],[84,481],[84,449],[234,232],[10,231],[363,685],[178,218],[363,700],[335,2400],[189,282],[199,78],],
'26':[[302,84],[258,39],[322,161],[128,159],[134,87],],
'31':[[37,86],],
'36':[[335,2422],],
'39':[[363,692],],
'63':[[384,5075],],
'77':[[335,2872],],
'89':[[162,48],[179,86],],
'128':[[337,42],],
'130':[[188,197],],
'155':[[385,69],],
'237':[[363,290],[363,553],],
'292':[[363,661],[199,54],],
'422':[[384,7342],],
'443':[[103,98],[150,98],],
'613':[[42,805],],
'697':[[74,57],[16,57],],
'926':[[335,2464],],
'939':[[335,2605],[335,3119],],
'954':[[76,19],],
'1004':[[162,113],],
'1370':[[105,47],],
'1414':[[42,646],],
'1416':[[217,360],[277,480],],
'2267':[[57,275],],
'2697':[[105,23],],
},{'3':[[269,194],],
'7':[[75,44],],
'23':[[89,418],[342,231],],
'48':[[284,80],[89,195],[173,118],[269,79],[234,248],[213,252],[189,161],[189,298],[209,102],[10,247],],
'176':[[181,114],],
'195':[[181,683],],
'301':[[209,229],],
'404':[[269,24],[284,25],[209,26],],
'412':[[90,31],],
'422':[[292,26],],
'447':[[292,51],],
'454':[[189,491],[284,77],[269,76],],
'653':[[209,99],],
'722':[[313,80],],
'1301':[[90,36],],
'1672':[[181,695],],
'2449':[[209,53],],
},{'9':[[384,9481],[200,287],[30,284],[183,87],[48,2575],[257,169],[215,87],],
'16':[[48,274],],
'48':[[89,422],],
'143':[[84,355],],
'165':[[89,181],],
'241':[[246,1627],],
'357':[[335,2412],[246,1552],],
'452':[[189,299],[189,162],[213,253],[234,249],[89,196],[10,248],],
'538':[[384,828],],
'846':[[183,109],[23,117],[293,117],[95,460],[215,109],],
'1117':[[358,70],],
'1509':[[277,426],],
'2448':[[379,176],],
'2531':[[152,130],],
'2589':[[161,190],],
'3253':[[384,2679],],
'3886':[[251,115],],
'4026':[[261,65],],
'4887':[[384,2973],],
},{'7':[[299,35],[205,35],[216,35],[192,35],[271,35],[237,35],],
'31':[[82,401],[82,418],[25,37],[25,26],[82,370],[283,234],[181,580],[143,51],[141,72],],
'33':[[181,468],],
'48':[[332,166],],
'49':[[164,209],[89,434],[164,238],[164,131],[89,202],[89,191],],
'77':[[181,777],[181,664],],
'140':[[181,565],[181,540],],
'165':[[164,548],[365,190],],
'187':[[173,104],[173,113],[270,91],[269,87],[10,255],[284,76],[189,306],[284,65],[269,75],[284,88],[173,124],[269,64],[213,260],[86,96],[283,219],[234,256],[283,209],[247,89],[57,103],],
'203':[[342,236],[312,24],],
'250':[[164,222],],
'309':[[365,138],],
'434':[[189,490],],
'518':[[181,735],],
'523':[[25,70],],
'646':[[70,217],],
'860':[[232,121],],
'917':[[331,257],],
'978':[[384,9892],],
'1117':[[312,47],],
'1135':[[181,806],],
'1364':[[209,219],],
'1381':[[189,456],[100,177],[89,450],[181,655],],
'2650':[[181,502],],
'5095':[[384,6913],],
},{'16':[[10,262],[53,108],[342,115],[342,100],[234,263],[189,313],],
'19':[[181,629],],
'23':[[244,108],],
'39':[[384,7464],],
'147':[[57,226],],
'241':[[363,508],],
'349':[[384,6025],],
'449':[[75,32],],
},{'33':[[163,51],],
'89':[[160,269],[189,319],[234,269],[10,268],],
'431':[[213,264],],
},{'228':[[189,321],[234,271],[10,270],],
'299':[[48,1435],[48,1374],],
'447':[[335,3727],[48,4520],],
},{'49':[[342,198],],
'130':[[28,56],[186,234],],
'154':[[265,23],],
'160':[[180,189],[180,160],],
'162':[[57,148],[394,82],[86,141],[89,65],[89,242],[100,79],[49,289],[135,84],[137,124],[146,75],[36,80],[173,169],[178,161],[180,96],[34,73],[10,287],[181,100],[20,99],[187,93],[189,338],[209,139],[210,84],[213,296],[229,102],[234,288],[247,143],[148,91],[269,108],[270,145],[283,80],[284,109],[285,72],[332,82],],
'2399':[[77,111],[131,126],],
'5243':[[394,176],],
},{'16':[[173,291],[30,374],[137,246],[181,1013],],
'30':[[194,111],],
'34':[[57,156],[86,149],[89,250],[100,87],[135,92],[36,88],[34,81],[146,83],[148,99],[332,90],[173,177],[20,107],[178,169],[180,104],[394,90],[137,132],[187,101],[189,346],[10,295],[209,147],[210,92],[213,304],[285,80],[229,110],[234,296],[247,151],[269,116],[270,153],[283,88],[284,117],],
'164':[[181,395],],
'203':[[286,26],],
'1911':[[222,24],],
'2023':[[152,159],],
},{'31':[[181,1027],[317,122],],
'39':[[34,86],[36,93],[57,161],[86,154],[89,255],[100,92],[102,153],[135,97],[137,137],[146,88],[148,104],[173,182],[178,174],[180,109],[20,112],[187,106],[189,351],[332,95],[209,152],[210,97],[213,309],[229,115],[234,301],[247,156],[269,121],[270,158],[283,93],[284,122],[285,85],[10,300],[394,95],],
'63':[[197,481],],
'346':[[384,6645],],
},{'77':[[10,320],[20,132],[34,106],[36,113],[57,181],[86,174],[89,275],[100,112],[135,117],[137,157],[146,108],[148,124],[332,115],[285,105],[173,202],[178,194],[180,129],[187,126],[189,371],[209,172],[210,117],[213,329],[229,135],[234,321],[247,176],[269,141],[270,178],[283,113],[284,142],[394,115],],
'228':[[153,922],],
'409':[[153,951],],
},{'23':[[10,329],[20,90],[20,141],[394,73],[27,40],[27,48],[34,64],[34,115],[36,71],[36,122],[394,63],[394,44],[44,80],[341,112],[44,128],[44,134],[332,124],[332,73],[307,112],[285,114],[49,215],[285,63],[284,151],[284,100],[57,139],[57,190],[283,122],[86,132],[86,183],[89,284],[283,71],[270,187],[270,136],[269,150],[100,70],[100,121],[269,99],[135,75],[135,126],[137,115],[137,166],[146,66],[146,117],[148,82],[148,133],[247,185],[247,134],[234,330],[229,144],[229,93],[218,254],[213,336],[210,126],[210,75],[160,166],[209,181],[160,503],[173,160],[173,211],[394,124],[178,203],[209,130],[180,87],[180,138],[189,380],[188,201],[181,182],[181,190],[181,220],[187,135],[187,84],[181,1032],[181,1011],[181,977],],
'49':[[276,49],[181,56],[181,258],[181,275],[36,142],],
'67':[[181,440],],
'89':[[181,76],[27,22],[160,117],[160,154],],
'154':[[181,888],],
'160':[[44,46],[44,102],[287,40],],
'162':[[160,25],[354,35],[160,28],[49,169],[49,198],[153,775],[152,127],[181,427],[176,206],[49,209],[93,139],[160,438],],
'290':[[93,66],[213,482],],
'306':[[246,1776],],
'632':[[49,178],],
'680':[[54,1137],],
'926':[[95,51],],
'961':[[181,223],],
'1229':[[50,90],],
'1393':[[276,61],],
'1507':[[277,394],],
'1991':[[178,240],],
'2024':[[49,370],],
'2220':[[93,77],],
'2399':[[77,142],[131,155],],
'2513':[[153,1096],],
'3000':[[153,1149],[153,1371],],
'3969':[[247,260],],
},{'152':[[178,205],[189,382],[213,338],[234,332],[10,331],],
},{'12':[[209,193],[20,153],[34,127],[36,134],[332,136],[285,126],[57,202],[86,195],[100,133],[135,138],[137,178],[146,129],[148,145],[284,163],[173,223],[283,134],[180,150],[187,147],[270,199],[394,136],[210,138],[269,162],[229,156],[247,197],],
'15':[[234,334],[10,333],[213,340],[189,384],[178,207],],
'77':[[363,428],],
'89':[[45,21],],
'128':[[255,20],[166,20],],
'147':[[313,200],[314,43],],
'231':[[48,1361],],
'482':[[384,9390],],
'2241':[[384,5853],],
},{'23':[[84,347],[321,273],[84,57],],
'121':[[84,549],],
'165':[[384,6294],],
'213':[[49,457],],
'364':[[214,251],],
'464':[[189,385],[213,341],[178,208],[313,201],[234,335],[10,334],],
'2064':[[52,114],],
'2582':[[162,234],],
},{'227':[[229,187],],
'378':[[10,339],],
'451':[[37,87],],
'668':[[313,476],],
'682':[[170,146],],
'836':[[215,83],[183,83],],
'1070':[[57,208],],
'1462':[[384,1031],],
'2160':[[220,108],],
'3875':[[384,9478],],
'4874':[[384,2765],],
},{'9':[[165,59],],
'27':[[274,343],],
'37':[[331,143],],
'41':[[290,100],],
'47':[[84,304],],
'63':[[358,281],],
'67':[[379,209],[160,137],[160,162],[161,103],[181,158],[49,316],],
'82':[[335,3467],],
'199':[[384,4966],[355,1446],[246,1924],[54,514],[197,474],[164,316],],
'250':[[42,237],[89,341],],
'281':[[246,1757],],
'374':[[10,342],],
'447':[[186,335],],
'502':[[335,1542],],
'828':[[54,1503],],
'1101':[[363,721],],
'2377':[[335,2985],],
'4420':[[342,155],],
},{'12':[[331,390],[58,53],[331,73],],
'23':[[277,234],],
'27':[[384,1195],[384,1520],],
'36':[[249,82],],
'39':[[48,3478],[46,64],[169,68],[12,294],[355,600],[336,148],[226,64],[114,67],[49,140],],
'277':[[153,154],],
'305':[[384,5713],[331,113],[10,344],],
'370':[[48,203],],
'431':[[306,107],],
'468':[[48,144],[48,122],[335,66],[54,255],[197,91],[153,155],[306,108],[306,125],[70,147],[179,611],],
'510':[[48,447],],
'648':[[197,83],[70,100],],
'815':[[70,177],[306,161],[48,408],[70,155],[48,207],[153,176],[197,121],[197,99],[179,622],[306,139],[306,129],],
'817':[[384,7969],],
'1010':[[70,146],],
'1326':[[54,258],[335,69],[179,614],[335,72],[54,261],[153,158],[197,90],],
'1519':[[306,124],[48,121],],
'1522':[[48,143],],
'1538':[[48,212],[335,65],],
'1539':[[153,180],[197,111],[48,224],[153,184],[153,188],[153,192],[54,265],[197,107],[70,167],[335,84],[70,159],[306,143],[306,147],[306,151],[179,630],[48,216],[179,634],[54,273],[197,103],[54,269],[179,626],[48,220],[335,76],[335,80],[70,163],],
'1562':[[48,397],],
'1564':[[48,403],],
'1572':[[48,432],],
'1915':[[249,88],],
'2110':[[54,254],],
'3480':[[179,610],],
},{'7':[[304,303],[304,383],[304,374],[304,363],[304,348],[304,204],[304,339],[304,333],[304,326],[304,310],[304,176],[304,294],[304,268],[304,258],[304,248],[304,218],[304,211],],
'23':[[160,443],[10,346],],
'89':[[381,172],[54,1132],[161,313],],
'155':[[160,531],],
'264':[[116,64],],
'391':[[355,736],],
'608':[[290,53],[246,284],],
'791':[[384,8656],],
'869':[[54,199],[274,673],],
'945':[[384,7809],[384,6489],],
'1332':[[335,466],],
'1334':[[384,5591],],
'1342':[[384,4857],[274,157],],
'1344':[[384,4873],],
'1421':[[181,723],[321,115],[102,187],],
'2042':[[246,201],],
'2080':[[246,774],],
'2301':[[359,110],],
'2589':[[161,337],],
'4708':[[384,2653],],
'4898':[[384,8766],],
'5033':[[384,5693],],
'5122':[[384,7817],],
},{'7':[[349,36],[314,36],[82,357],],
'12':[[322,205],[313,133],[384,9664],[48,518],[269,71],[189,154],[186,313],[54,362],[384,2507],[209,84],[384,726],[181,672],[80,60],[335,244],[269,59],[89,169],[179,1019],[10,348],[89,444],[153,564],[121,309],[128,203],[209,95],[173,99],[342,190],[173,120],[173,109],[153,651],],
'15':[[342,274],[173,62],[137,54],],
'16':[[39,281],[314,54],],
'19':[[335,2069],[384,5561],[384,6643],[44,137],[181,367],[269,45],[209,49],[335,2787],],
'23':[[209,106],[153,844],[153,759],[209,65],[269,214],[269,200],[269,83],[181,393],[153,1343],[209,70],],
'26':[[285,145],[20,174],],
'27':[[84,486],],
'31':[[65,128],],
'36':[[189,486],],
'39':[[199,60],[363,667],],
'49':[[335,2823],[335,2813],[335,2128],[335,2118],[153,382],],
'57':[[30,48],],
'63':[[131,67],[332,52],[77,65],[153,859],],
'68':[[153,367],[384,4314],],
'73':[[189,517],[181,700],],
'95':[[54,341],[179,998],],
'97':[[335,224],],
'99':[[153,741],],
'162':[[269,168],],
'199':[[153,658],],
'217':[[70,358],[48,4822],[153,661],[197,195],],
'244':[[153,350],],
'248':[[381,60],],
'305':[[335,1959],[384,4968],[306,1570],[342,157],[335,2702],],
'314':[[153,1190],],
'353':[[89,225],[189,498],],
'411':[[189,89],],
'484':[[173,67],[153,1273],[137,269],[173,315],],
'542':[[384,8117],],
'551':[[181,802],],
'596':[[146,144],],
'776':[[153,1077],],
'839':[[164,385],],
'917':[[384,4331],],
'1135':[[396,88],],
'1180':[[153,986],],
'1414':[[189,400],],
'1500':[[44,145],],
'1591':[[48,1194],],
'2020':[[89,209],],
'2179':[[153,738],[153,983],[153,1187],],
'2285':[[60,99],],
'2527':[[89,482],],
'2576':[[269,186],],
'2583':[[335,2753],[335,2025],],
'2626':[[153,695],[153,1250],[153,789],[153,1057],],
'2808':[[384,1496],[384,229],],
'2967':[[153,597],],
'4226':[[384,4678],],
'4644':[[384,298],],
'5179':[[384,9333],[384,9252],],
},{'19':[[75,84],],
'23':[[355,445],[10,350],[89,399],[189,451],[189,164],],
'26':[[189,134],],
'33':[[384,9401],],
'77':[[335,681],[344,113],],
'152':[[246,1543],],
'470':[[189,155],[189,90],],
'567':[[39,192],],
'4288':[[335,472],],
},{'16':[[39,265],[84,435],],
'31':[[218,245],],
'353':[[10,356],],
'4102':[[384,2090],],
},{'31':[[381,304],[384,7714],[384,6741],[384,6262],[384,6176],[179,64],[246,795],[381,158],[381,241],[384,7766],[381,417],[381,590],[381,621],],
'39':[[48,2539],],
'277':[[48,4615],],
'370':[[48,2549],],
'472':[[10,357],],
'817':[[48,4878],],
},{'7':[[245,72],[369,17],[93,141],[124,28],[171,613],],
'63':[[355,44],],
'117':[[377,0],],
'377':[[234,426],],
'378':[[10,360],],
'379':[[178,324],],
'474':[[93,142],],
'734':[[124,66],],
'1953':[[89,487],],
'2013':[[372,53],],
'2014':[[233,47],],
'2135':[[213,487],],
'2513':[[111,90],],
'2514':[[156,135],],
'2531':[[189,640],],
'2560':[[218,379],],
},{'7':[[224,5],[19,50],[63,53],[171,1125],[195,58],[204,81],[204,3],],
'117':[[11,0],],
'152':[[395,146],[395,54],],
'173':[[11,16],],
'486':[[224,237],],
},{'7':[[11,53],[19,48],[346,5],[195,56],[63,51],[171,1123],[11,3],],
'12':[[289,137],[200,82],[315,137],],
'117':[[224,0],],
'139':[[48,4199],[306,1539],],
'150':[[289,155],[315,155],],
'153':[[200,231],],
'173':[[224,16],],
'420':[[345,51],],
'486':[[346,36],],
'1755':[[48,2697],],
'4102':[[289,81],[315,81],],
},{'7':[[11,5],[289,196],[289,3],[19,52],[195,60],[171,1127],[63,55],],
'33':[[395,52],],
'77':[[289,194],],
'117':[[204,0],],
'140':[[11,51],],
'173':[[204,16],],
'486':[[11,55],],
'639':[[395,144],],
'743':[[48,2836],],
'1756':[[48,2840],],
},{'7':[[221,3],[204,40],[11,26],[19,34],[204,35],[195,42],[345,3],[171,1109],[221,35],[63,37],],
'15':[[395,22],],
'19':[[289,33],[204,25],[11,22],],
'23':[[289,41],],
'75':[[48,2833],[48,2828],],
'89':[[236,27],],
'93':[[204,20],[48,2749],],
'117':[[395,0],],
'139':[[48,3156],],
'475':[[11,17],],
'477':[[204,17],],
'485':[[289,17],],
'486':[[345,84],],
'671':[[48,2809],[48,2804],],
'745':[[134,17],],
'746':[[128,17],],
'1329':[[395,16],],
'1755':[[48,2160],],
'1756':[[48,3158],],
'4104':[[289,174],],
},{'7':[[128,38],[134,36],],
'14':[[288,22],[288,50],[76,90],],
'23':[[151,34],[389,34],[306,1407],[160,400],[48,4757],[48,4258],[48,4240],],
'33':[[227,170],],
'63':[[13,32],[115,32],[236,32],[158,47],],
'77':[[350,215],],
'82':[[39,791],[322,42],[302,40],],
'129':[[315,123],[289,123],],
'134':[[128,36],[204,33],[301,27],[315,38],[322,37],[11,24],[302,35],[289,38],[134,34],],
'139':[[11,35],],
'149':[[48,4699],[289,47],[48,3135],[315,47],[301,71],],
'231':[[122,95],],
'346':[[204,56],],
'364':[[39,807],],
'370':[[220,75],],
'443':[[315,198],],
'448':[[54,1289],],
'478':[[134,18],[204,18],[128,18],[11,18],[289,18],],
'480':[[204,50],[11,31],],
'483':[[384,9089],],
'484':[[48,4697],[48,3133],[11,45],],
'489':[[384,2511],],
'520':[[303,131],],
'522':[[48,3645],[48,4310],],
'550':[[322,84],[128,87],[134,104],[302,101],],
'580':[[384,8638],],
'588':[[39,343],[289,192],[39,471],[39,667],],
'633':[[48,3418],],
'634':[[48,3438],],
'642':[[48,2798],],
'654':[[322,19],[48,3215],[302,19],[48,3877],[306,1054],[315,18],],
'656':[[214,233],],
'674':[[306,1282],],
'808':[[39,530],],
'958':[[306,1364],[48,4056],],
'1101':[[48,4894],],
'1195':[[39,831],],
'1236':[[39,817],],
'1301':[[48,4767],],
'1421':[[204,31],],
'1933':[[349,86],[48,4248],[117,34],[167,34],[48,4147],[306,1489],[349,59],],
'1934':[[306,1493],[48,4151],],
'1943':[[48,4751],],
'1962':[[48,4633],],
'2250':[[301,18],],
'3622':[[384,2523],],
'3776':[[220,105],[335,1261],[335,1032],],
},{'128':[[204,49],[11,30],],
'417':[[335,1190],[95,313],[234,373],[54,746],],
'2384':[[153,133],],
},{'12':[[290,112],],
'13':[[384,8881],[384,9746],],
'15':[[384,3627],],
'16':[[11,39],[246,1874],],
'19':[[277,778],],
'23':[[224,113],[355,919],[121,218],[224,102],],
'28':[[89,380],],
'31':[[206,63],[246,569],],
'33':[[179,1213],[290,167],[179,113],],
'38':[[344,250],],
'63':[[384,7078],],
'224':[[331,252],[277,760],],
'272':[[384,2920],],
'288':[[277,828],[153,254],],
'433':[[274,480],],
'529':[[355,916],],
'580':[[384,8128],],
'1205':[[384,8696],],
'1307':[[257,127],[384,3576],],
'1424':[[384,8619],],
'1527':[[384,785],],
'2060':[[384,3389],],
'2101':[[384,9233],],
'2691':[[290,107],],
'4834':[[384,2188],],
'5063':[[384,6125],],
},{'7':[[31,44],[82,526],],
'12':[[384,9389],[384,9317],[34,49],[384,9158],[384,7708],[384,6279],[384,4896],[42,801],[42,1220],[381,392],[365,166],[355,1284],[355,848],[353,70],[353,35],[349,56],[253,189],[49,148],[246,1847],[246,1791],[54,601],[54,1250],[246,1102],[70,279],[72,38],[11,41],[235,421],[214,293],[210,58],[100,196],[121,53],[121,417],[135,153],[146,50],[210,45],[152,156],[200,106],[197,160],[191,41],[172,100],[170,260],[159,132],[153,1311],[396,41],],
'19':[[34,40],],
'30':[[176,251],[48,4470],],
'43':[[39,351],[93,125],[42,664],[54,1430],],
'63':[[153,306],[388,79],[358,364],[384,9850],[96,116],],
'68':[[381,556],],
'74':[[384,8411],],
'85':[[262,34],[219,34],],
'128':[[18,20],[262,17],[219,17],],
'149':[[339,182],],
'152':[[52,144],],
'164':[[381,411],[304,286],[42,754],],
'217':[[339,73],],
'248':[[246,1330],[186,184],[381,327],[214,275],[181,261],[358,137],[224,105],[359,99],[381,538],[48,4304],],
'277':[[277,701],],
'305':[[42,1252],[355,1351],[42,1237],],
'450':[[189,507],],
'469':[[304,269],[304,349],],
'499':[[48,2126],],
'593':[[257,140],],
'598':[[153,548],[153,300],],
'599':[[153,239],],
'682':[[335,754],],
'784':[[34,131],[146,133],],
'861':[[335,106],],
'1225':[[95,141],],
'1226':[[48,246],],
'1332':[[355,1028],],
'1397':[[384,5039],],
'1467':[[355,1072],],
'1822':[[48,3230],[48,2851],],
'2114':[[54,231],],
'2127':[[335,608],],
'2180':[[153,479],[153,852],],
'2382':[[335,2027],],
'2576':[[277,410],],
'3099':[[161,464],],
'3127':[[161,471],],
'3618':[[246,1429],],
'3956':[[246,1927],],
'3959':[[246,1896],],
},{'19':[[48,4695],[335,3501],[48,3131],[11,43],],
'23':[[48,3053],[384,9088],[12,127],],
'136':[[48,4802],],
'481':[[384,8697],],
'489':[[306,924],[48,3594],],
'548':[[306,56],[306,429],[48,2738],[12,190],[48,3203],[266,285],],
'1151':[[121,521],],
},{'7':[[170,64],],
'23':[[289,190],[363,564],],
'89':[[173,66],[62,114],[173,314],[173,322],[86,216],[137,268],[153,1079],[153,1272],],
'275':[[384,4290],[384,4367],],
'431':[[16,82],[74,82],],
'483':[[48,3132],[48,4696],[11,44],],
'1032':[[48,1060],],
'3619':[[331,481],],
'4272':[[384,9947],],
},{'7':[[134,165],[19,54],[195,62],[63,57],[134,3],[204,5],[171,1129],],
'33':[[11,47],[204,62],],
'63':[[289,157],],
'117':[[289,0],],
'128':[[289,114],],
'152':[[200,223],],
'173':[[289,16],],
'486':[[204,83],],
'1759':[[48,2712],],
},{'7':[[63,20],[171,1092],[19,17],[39,993],[39,4],[83,6],],
'63':[[48,66],],
'117':[[195,0],],
'375':[[39,979],],
'475':[[204,82],],
'476':[[11,54],],
'477':[[289,197],],
'478':[[221,36],],
'485':[[134,166],],
'486':[[39,994],],
'633':[[322,229],],
'634':[[115,40],],
'642':[[136,29],[83,131],],
'651':[[302,168],],
'652':[[13,40],],
'654':[[123,43],],
'734':[[63,112],],
'736':[[32,30],],
'737':[[126,39],],
'738':[[345,83],],
'740':[[395,149],],
'741':[[158,55],],
'742':[[236,40],],
'743':[[346,35],],
'744':[[224,236],],
'745':[[128,227],],
'746':[[315,210],],
'747':[[117,52],],
'748':[[349,89],],
'749':[[167,52],],
'750':[[314,113],],
'751':[[91,48],],
'752':[[200,316],],
'753':[[257,198],],
},{'7':[[171,1298],[171,1322],],
'12':[[174,277],],
'26':[[280,88],[371,81],],
'82':[[171,101],],
'117':[[12,0],[277,0],],
'152':[[227,208],[227,49],],
'203':[[84,34],],
'349':[[384,8716],],
'375':[[12,41],],
'489':[[227,235],],
'593':[[331,119],],
'1143':[[99,228],],
'1304':[[227,230],],
'2274':[[171,94],],
},{'16':[[54,491],],
'31':[[20,149],[34,123],[36,130],[332,132],[180,146],[57,198],[86,191],[100,129],[285,122],[113,43],[135,134],[137,174],[284,159],[146,125],[148,141],[283,130],[270,195],[269,158],[247,193],[173,219],[229,152],[394,132],[210,134],[187,143],[209,189],],
'288':[[249,75],],
'349':[[347,54],],
'462':[[181,889],],
'487':[[227,50],[227,236],[174,278],[171,1323],[227,231],[227,209],[171,1299],[171,102],[277,1],[171,95],[12,42],[12,1],],
'1131':[[113,26],],
'1205':[[212,75],[145,73],],
},{'2':[[12,4],[12,14],[12,62],[384,5229],[384,666],[384,206],[384,5573],[335,3454],[331,540],[331,513],[331,472],[12,595],[331,236],[19,14],[19,86],[331,15],[19,133],[384,9037],[306,923],[306,42],[303,200],[303,136],[303,111],[384,6017],[46,51],[303,40],[303,21],[303,1],[384,6208],[48,73],[384,8429],[48,102],[257,201],[48,3593],[240,48],[240,5],[227,248],[227,234],[63,1],[227,53],[227,46],[63,89],[227,37],[226,51],[384,8690],[83,2],[83,9],[83,19],[83,46],[214,365],[83,135],[88,23],[117,32],[214,48],[121,9],[121,27],[214,38],[121,46],[195,96],[195,93],[121,426],[195,9],[195,4],[171,1331],[384,8682],[121,594],[121,598],[167,32],[171,42],[171,1302],[171,105],[171,1161],[171,1089],[384,3789],],
'7':[[19,101],[63,10],[340,167],[171,1176],],
'15':[[12,203],],
'18':[[335,3450],],
'23':[[121,528],[306,117],[48,131],[121,477],[48,3624],[306,656],[306,670],[303,60],],
'26':[[39,21],],
'34':[[39,605],],
'36':[[12,422],[200,204],[121,405],[331,29],],
'63':[[171,80],[227,86],],
'67':[[83,73],],
'80':[[121,258],[171,1284],[306,65],[306,22],[306,1625],[39,542],[12,364],[121,495],[185,87],[200,282],[48,3],[12,549],[48,29],],
'82':[[331,542],],
'117':[[240,0],],
'224':[[48,87],],
'275':[[384,2500],],
'376':[[340,169],],
'436':[[195,23],],
'468':[[12,295],],
'500':[[39,492],[39,501],],
'501':[[39,288],],
'506':[[303,79],],
'517':[[121,34],],
'522':[[306,329],],
'546':[[306,4],[54,1538],[54,29],[48,38],[185,80],[12,176],[171,1277],[48,4986],[48,12],[12,585],],
'552':[[12,216],],
'642':[[266,278],],
'650':[[63,109],[306,100],[240,51],[240,9],[63,6],[171,1084],[63,105],[19,1],],
'755':[[120,31],],
'756':[[341,283],],
'757':[[293,141],],
'758':[[183,118],],
'759':[[298,71],],
'761':[[297,38],],
'762':[[29,200],],
'763':[[352,162],],
'764':[[71,91],],
'765':[[387,107],],
'1004':[[303,67],],
'1933':[[384,2510],],
'2675':[[384,1820],],
'2776':[[121,552],],
'5195':[[384,9619],],
},{'2':[[277,16],],
'73':[[48,3050],],
'79':[[153,60],],
'277':[[227,165],],
'489':[[12,15],],
'538':[[12,158],],
},{'14':[[12,436],],
'23':[[200,207],[306,237],[48,817],[121,224],[200,154],[121,444],[306,510],],
'26':[[315,112],[315,103],[200,129],[48,750],[12,147],[200,103],[306,170],[289,112],[289,103],[224,122],[121,212],[121,468],[39,338],[12,79],[39,579],[121,459],],
'34':[[306,443],[48,361],[121,324],],
'37':[[83,28],],
'59':[[48,4882],],
'173':[[335,3617],],
'281':[[384,8893],],
'346':[[200,46],[200,150],],
'422':[[48,3503],[384,4344],],
'443':[[200,193],],
'489':[[121,35],[331,30],[39,289],[39,493],[335,3451],[48,88],],
'490':[[12,16],[12,159],],
'501':[[12,137],],
'502':[[12,122],[12,194],[306,91],[39,184],],
'515':[[121,221],],
'517':[[12,226],[121,332],[121,381],],
'518':[[384,8286],[48,371],[48,1278],[48,742],[48,1288],[48,385],[121,130],],
'532':[[335,3442],[48,376],[12,143],],
'561':[[12,396],[12,465],[121,98],[48,585],[12,242],],
'597':[[134,128],[302,130],],
'604':[[12,405],],
'629':[[12,514],],
'643':[[121,601],[12,613],[121,13],[19,96],[331,1],[171,1171],[83,125],[39,988],[63,99],],
'958':[[48,1214],[335,3548],[48,1062],[48,1196],[48,2007],[48,1984],[48,1868],[48,1240],[306,721],],
'1148':[[39,293],],
'1174':[[39,457],[39,482],[39,971],[39,920],[39,954],[39,937],],
'1189':[[39,556],],
'1490':[[134,113],[128,96],],
'1608':[[48,621],],
'1627':[[48,734],],
'2010':[[331,107],],
'2150':[[331,508],],
'2746':[[331,492],],
'4226':[[331,457],],
'4390':[[335,3678],],
},{'15':[[12,18],],
'37':[[39,30],],
'165':[[384,3891],],
'1104':[[227,42],[171,47],],
},{'492':[[12,19],],
'696':[[384,949],[384,921],[384,2218],],
'780':[[384,1390],],
'1108':[[251,225],],
'1676':[[48,1849],[48,2069],],
'4257':[[331,226],],
},{'63':[[12,21],],
'82':[[384,8172],],
'272':[[384,8459],],
'284':[[384,7921],],
'1462':[[384,7075],],
'2632':[[384,130],],
'3196':[[384,737],],
'3627':[[384,1647],],
},{'494':[[12,22],],
'1105':[[39,34],],
},{'495':[[39,35],[12,23],],
},{'77':[[12,25],],
},{'67':[[381,395],[42,1173],],
'199':[[12,28],],
'247':[[164,486],],
'273':[[331,56],[39,411],],
'281':[[181,591],],
'370':[[218,288],[287,82],],
'817':[[384,7201],],
'940':[[95,46],],
},{'3':[[204,75],[224,81],],
'12':[[48,2125],],
'15':[[54,876],[390,123],[384,1611],],
'18':[[384,6561],],
'26':[[189,465],],
'30':[[200,196],],
'33':[[12,30],[161,391],],
'40':[[161,421],],
'57':[[395,136],],
'77':[[384,397],],
'86':[[161,413],],
'140':[[303,162],],
'147':[[189,445],],
'152':[[48,2139],],
'203':[[227,88],[355,922],[322,88],[302,105],],
'281':[[224,157],],
'420':[[289,183],[315,183],],
'449':[[246,159],],
'713':[[161,382],],
'1309':[[174,252],],
'1391':[[303,171],],
'1971':[[121,509],],
'2530':[[170,137],],
'2599':[[214,323],],
'3275':[[246,1781],],
},{'15':[[39,521],[48,867],[12,534],[39,500],[39,144],[48,292],[39,442],],
'26':[[39,491],],
'152':[[200,167],[48,316],[12,539],],
'499':[[12,31],],
'539':[[12,161],],
'642':[[384,8874],[48,3083],[48,3174],[39,333],[39,905],[384,8822],[384,8898],],
'1531':[[48,2105],],
},{'3':[[12,136],],
'15':[[384,9219],[306,558],[12,341],[12,530],[384,9117],[39,136],[48,870],[48,314],[39,466],[39,514],[48,297],[121,314],],
'19':[[384,9208],],
'23':[[48,3551],],
'26':[[39,287],],
'33':[[39,291],],
'63':[[12,33],],
'489':[[306,43],],
'537':[[12,156],],
'623':[[12,537],],
'642':[[48,4590],[384,8780],[384,8833],[200,165],[48,4885],],
'1381':[[221,32],],
'1756':[[48,3189],],
},{'12':[[12,35],[12,95],[12,121],[12,193],[235,75],[39,183],[39,394],[235,84],[178,96],[335,3506],[335,3393],[178,88],[335,3369],[306,441],[306,90],[303,127],[302,60],[302,52],[153,445],[277,325],[251,121],[246,1557],[153,230],[134,55],[134,63],],
'23':[[235,401],[246,55],],
'30':[[344,307],],
'39':[[384,5986],],
'43':[[52,199],[217,371],],
'48':[[153,354],],
'63':[[355,1018],[153,374],[277,385],],
'73':[[39,67],],
'81':[[335,784],[335,43],[335,1929],[335,2672],[178,58],[335,599],],
'85':[[83,92],[48,3564],],
'128':[[235,50],],
'137':[[335,381],],
'139':[[335,1915],[335,3220],[335,328],],
'150':[[235,249],],
'164':[[244,82],[118,73],[72,50],[121,134],],
'230':[[335,1193],],
'248':[[355,628],[39,752],[235,268],[355,647],],
'279':[[335,1023],[48,4318],[335,1046],],
'305':[[355,1009],[217,147],],
'423':[[197,376],[70,576],],
'447':[[335,55],[335,1723],[335,1210],],
'449':[[75,122],[355,429],[75,99],],
'470':[[89,483],],
'482':[[235,422],],
'614':[[335,1692],],
'681':[[54,431],],
'857':[[335,732],],
'861':[[355,112],],
'891':[[335,768],],
'1160':[[335,975],],
'1169':[[178,269],],
'1304':[[335,410],],
'1305':[[335,3241],[335,3714],[335,345],],
'1467':[[384,1347],[342,265],],
'1679':[[243,193],],
'1935':[[48,4289],],
'2058':[[335,1397],],
'2076':[[54,423],],
'2132':[[54,420],],
'2576':[[186,407],],
'2765':[[335,1443],[335,1588],],
'4158':[[306,648],],
'4313':[[335,1541],],
'4330':[[335,2636],],
'4389':[[335,3684],],
'5058':[[384,9191],],
'5067':[[384,6360],],
},{'36':[[277,857],],
'92':[[83,82],],
'490':[[227,166],],
'502':[[12,36],],
'518':[[384,9054],],
},{'152':[[12,38],],
},{'18':[[96,114],],
'23':[[249,247],],
'34':[[381,489],],
'152':[[83,89],],
'275':[[381,356],],
'482':[[381,393],],
'504':[[12,39],],
'552':[[384,443],[384,465],[384,423],],
},{'1':[[242,88],],
'12':[[214,130],[235,427],],
'16':[[102,51],[384,8771],],
'26':[[251,314],[335,445],[335,2284],[335,1834],],
'31':[[181,127],],
'37':[[49,112],],
'48':[[70,361],[197,198],],
'54':[[320,87],[384,5665],],
'61':[[384,6434],],
'63':[[153,1197],[339,194],],
'79':[[70,474],[197,324],],
'82':[[249,320],[54,18],[185,63],[197,9],[355,1475],[277,217],[171,1260],[153,29],[277,280],[277,598],[54,1529],[153,1440],],
'147':[[351,62],[84,302],[339,180],],
'175':[[102,193],],
'195':[[49,128],],
'196':[[84,502],],
'199':[[125,117],],
'203':[[321,142],[121,44],[321,69],[76,64],[341,238],[161,540],[307,238],[164,72],[357,44],[303,78],[308,73],[12,51],],
'205':[[251,49],],
'224':[[335,3185],],
'250':[[335,1400],],
'264':[[162,229],],
'284':[[384,5174],],
'285':[[153,136],[218,269],],
'290':[[284,222],],
'305':[[384,8177],],
'321':[[384,4750],],
'346':[[251,274],],
'349':[[384,3746],],
'370':[[153,994],],
'554':[[48,3555],],
'609':[[181,530],[48,3615],],
'647':[[39,654],],
'655':[[335,2031],],
'776':[[181,831],],
'784':[[54,460],],
'888':[[181,603],],
'912':[[180,171],],
'921':[[251,278],[384,9242],[384,231],[339,49],],
'926':[[277,889],[54,51],],
'940':[[218,57],],
'947':[[335,3013],],
'958':[[335,2196],[335,3043],],
'963':[[295,32],],
'965':[[30,380],],
'1003':[[355,1455],],
'1103':[[306,748],],
'1305':[[384,7553],],
'1309':[[384,7567],],
'1319':[[277,316],[355,239],],
'1338':[[42,355],],
'1467':[[42,1058],],
'1682':[[235,218],[48,1293],],
'1840':[[390,108],],
'1955':[[52,110],],
'1963':[[381,583],],
'2026':[[49,389],],
'2088':[[95,62],],
'2470':[[384,2391],],
'2747':[[121,83],],
'3626':[[384,5388],[186,485],],
'4321':[[335,2294],[335,1857],],
'4639':[[384,3541],],
'4848':[[384,2464],],
},{'13':[[384,3385],[384,3374],],
'15':[[384,5203],],
'23':[[384,5209],[384,5190],[12,53],],
'145':[[384,3548],],
'275':[[384,8685],],
'511':[[12,59],],
'2675':[[384,3534],],
},{'36':[[48,3617],],
'205':[[306,942],],
'507':[[384,8686],[12,54],],
},{'43':[[164,266],[363,712],],
'63':[[246,291],],
'128':[[80,25],[296,25],],
'508':[[12,55],],
'1442':[[321,52],],
'4336':[[335,2139],],
'4359':[[335,2879],],
},{'12':[[12,379],],
'15':[[48,446],],
'509':[[12,56],],
'1137':[[277,477],],
'3859':[[246,289],],
},{'1':[[12,58],],
'16':[[335,2589],],
'33':[[153,812],],
'38':[[54,560],],
'67':[[125,102],],
'77':[[384,1395],[277,815],],
'506':[[125,118],],
'835':[[70,297],],
'1967':[[48,4872],],
'2161':[[54,762],],
'2812':[[125,95],],
'2825':[[125,145],],
},{'2':[[384,5197],],
'15':[[384,1505],],
'277':[[384,5211],],
'507':[[384,3535],[12,60],],
'508':[[384,8687],],
'525':[[39,76],],
'3196':[[384,3721],],
},{'3':[[249,50],],
'15':[[384,7602],[242,74],],
'16':[[253,83],],
'18':[[160,461],],
'26':[[12,66],],
'33':[[358,120],],
'34':[[342,220],],
'38':[[251,207],[181,41],],
'50':[[164,642],],
'55':[[152,134],],
'77':[[96,122],[249,306],[142,181],[384,6637],[331,399],[214,41],[274,89],],
'140':[[335,2990],],
'158':[[39,106],],
'195':[[274,536],],
'238':[[218,371],],
'273':[[49,152],],
'288':[[95,492],],
'290':[[321,81],],
'346':[[112,144],],
'375':[[76,80],],
'433':[[274,426],[214,123],],
'449':[[246,227],],
'529':[[242,67],],
'596':[[266,357],],
'835':[[321,109],[164,298],],
'1119':[[274,50],],
'1198':[[384,9231],],
'1239':[[39,829],],
'1378':[[355,1085],],
'1450':[[355,711],],
'2333':[[70,122],[266,73],],
'2510':[[122,109],],
'2905':[[181,448],],
},{'23':[[39,101],[39,111],],
'89':[[12,70],],
'199':[[39,353],],
'225':[[306,72],[48,4637],],
'277':[[83,95],],
'436':[[335,3357],],
},{'12':[[48,2409],],
'15':[[306,210],[48,790],[48,1222],[200,218],],
'17':[[289,118],[315,118],],
'19':[[12,471],],
'23':[[315,125],[48,2187],[331,117],[289,125],[121,220],],
'26':[[224,233],],
'37':[[121,170],],
'63':[[48,625],[83,64],],
'77':[[306,240],[39,355],[48,820],],
'146':[[315,151],[289,151],],
'158':[[48,3048],],
'346':[[315,35],[289,35],],
'489':[[121,427],[384,3790],],
'514':[[39,102],[39,112],[12,71],],
'520':[[39,255],],
'542':[[257,162],],
'595':[[315,169],[289,169],],
'620':[[331,534],[12,454],[171,1165],[331,8],[63,93],[83,67],[12,607],[19,90],[121,1],[39,982],[48,765],[83,138],[306,185],[48,91],[83,119],],
'623':[[121,451],],
'642':[[48,3101],],
'844':[[48,2461],],
'958':[[48,2478],],
'1143':[[48,342],],
'1156':[[48,4665],],
'1606':[[266,304],],
'1668':[[48,4649],],
'1758':[[48,2122],],
},{'443':[[95,443],],
'515':[[39,113],[12,72],],
'543':[[95,425],],
'1458':[[121,564],],
'2583':[[95,454],],
'2746':[[121,570],],
},{'12':[[121,33],[121,380],[121,156],[12,225],[12,266],[121,331],[83,56],],
'19':[[12,357],[306,168],[12,212],[48,748],],
'23':[[121,204],[12,291],],
'30':[[121,173],],
'43':[[12,74],],
'57':[[48,80],],
'67':[[12,83],],
'207':[[121,375],],
'518':[[121,56],],
'550':[[12,279],[12,300],[121,127],],
'613':[[121,66],],
'1991':[[121,546],],
},{'3':[[384,4457],[384,4586],[384,3737],],
'12':[[342,238],],
'15':[[384,162],[335,3457],[384,9418],[21,117],[384,3864],[384,135],],
'16':[[363,476],[306,784],],
'18':[[355,1216],[95,83],],
'19':[[12,76],[83,58],[235,270],[251,135],[39,680],[121,55],[384,5176],[331,34],[42,157],[300,22],[186,318],],
'26':[[99,141],[251,105],[99,254],],
'31':[[200,250],],
'38':[[181,734],],
'50':[[335,2723],],
'59':[[246,1116],],
'63':[[39,552],],
'77':[[384,8337],],
'84':[[251,244],],
'152':[[384,8276],],
'177':[[253,164],],
'237':[[277,434],],
'345':[[164,654],],
'438':[[363,458],],
'453':[[384,2680],],
'531':[[48,652],[48,384],[48,370],[178,288],[178,275],[186,479],[121,129],[384,612],[25,92],[331,454],[384,8796],[113,56],[384,5360],],
'791':[[194,93],],
'844':[[48,1277],],
'899':[[153,91],],
'1109':[[274,273],],
'1220':[[42,1152],],
'1452':[[164,570],],
'1591':[[48,1287],],
'1626':[[48,741],],
'1838':[[99,101],],
'1913':[[200,246],[200,259],[384,9131],[186,249],],
'1971':[[235,212],],
'1991':[[251,216],],
'2058':[[189,547],],
'2063':[[266,204],],
'2150':[[384,8285],],
'2638':[[251,321],],
'4629':[[384,9646],[384,9630],],
'5166':[[384,9053],],
},{'12':[[344,86],[277,68],],
'19':[[179,978],[48,82],[277,113],[355,798],[290,118],],
'215':[[306,744],],
'518':[[12,77],],
'2772':[[246,1009],],
},{'9':[[39,254],],
'19':[[12,481],[12,557],[12,87],],
'23':[[12,509],[39,133],[12,493],[48,3566],],
'67':[[12,98],],
'82':[[306,331],],
'196':[[54,764],],
'419':[[306,85],],
'422':[[48,3583],],
'483':[[306,57],[306,925],[306,430],[48,3595],[12,128],[384,8698],[48,4803],[12,191],],
'489':[[306,118],[48,3625],[48,132],],
'522':[[12,116],[314,108],[48,3688],],
'621':[[306,505],],
'656':[[39,278],[303,130],],
'1417':[[48,116],],
},{'63':[[12,92],],
'538':[[12,163],],
},{'16':[[48,4642],[12,100],],
'23':[[48,3644],[306,921],[48,4309],[48,3591],[12,115],[48,4813],],
'31':[[355,1280],],
'36':[[314,107],[48,3687],],
'63':[[48,4808],],
'73':[[204,65],],
'237':[[242,110],],
'548':[[306,328],],
'1109':[[384,8838],],
},{'3':[[76,35],],
'12':[[289,179],[204,67],[315,179],[48,3571],[48,4810],[12,487],[12,102],[153,498],],
'19':[[246,1597],],
'26':[[246,1638],],
'239':[[181,215],],
'346':[[224,182],[153,567],[224,137],[12,495],],
'860':[[25,69],],
'1226':[[39,778],],
'1452':[[246,1741],],
},{'16':[[384,7869],[161,61],],
'31':[[161,300],[161,227],[12,106],],
'82':[[121,261],],
'203':[[159,156],],
'353':[[381,341],],
},{'15':[[306,319],[52,99],[52,51],],
'23':[[39,50],[306,79],[12,111],[39,116],[48,4618],[39,249],[48,2542],],
'36':[[48,56],],
'37':[[12,499],],
'75':[[161,81],],
'207':[[12,599],[214,120],],
'224':[[306,51],],
'321':[[164,147],],
'364':[[227,149],],
'449':[[48,2666],[39,126],],
'511':[[48,4873],],
'520':[[48,117],],
'533':[[336,50],],
'575':[[48,4798],],
'621':[[39,75],],
'632':[[12,522],],
'1381':[[48,4254],],
'2611':[[96,186],],
},{'525':[[306,80],[12,112],],
},{'73':[[12,491],],
'199':[[306,53],],
'277':[[246,1074],],
'526':[[306,81],[12,113],],
'580':[[12,304],],
'1116':[[342,148],],
},{'23':[[306,94],[321,229],[384,556],[12,125],],
},{'67':[[246,1818],[70,13],[70,786],[171,1227],[174,268],[179,3],[344,95],[185,30],[355,1489],[335,23],[290,60],[188,223],[277,82],[243,246],[335,3795],[355,545],[355,785],],
'128':[[210,141],],
'149':[[335,517],[218,223],[331,368],],
'199':[[188,195],[381,616],],
'250':[[355,438],[235,259],[355,915],[234,341],],
'271':[[278,29],],
'273':[[12,131],],
'281':[[335,989],[384,8187],],
'818':[[242,84],],
'1132':[[186,362],],
'1184':[[179,84],],
'1314':[[242,66],],
'1332':[[355,1189],[335,557],],
'1808':[[306,1167],],
'3642':[[188,119],],
},{'15':[[95,135],],
'16':[[384,7736],],
'33':[[344,286],],
'48':[[48,4312],],
'62':[[12,134],],
'63':[[384,4797],[12,139],],
'83':[[89,346],],
'163':[[99,276],[384,2951],],
'165':[[172,146],],
'241':[[313,305],],
'244':[[313,337],],
'269':[[162,367],[244,218],[118,187],],
'359':[[178,309],],
'491':[[39,185],],
'568':[[331,269],],
'641':[[384,5895],],
'800':[[384,6327],],
'876':[[177,51],],
'894':[[186,78],],
'921':[[384,9507],],
'1033':[[212,67],[145,65],],
'1134':[[39,207],],
'1244':[[246,900],],
'1353':[[99,96],],
'1405':[[384,5813],],
'1462':[[274,412],],
'1608':[[363,478],],
'2269':[[253,125],[132,29],],
'2374':[[172,152],],
'2388':[[363,602],],
'2702':[[384,3406],],
'2865':[[128,189],[322,191],],
'3833':[[384,5446],],
'4496':[[355,1432],],
'4729':[[384,2836],],
},{'3':[[12,141],[344,260],[48,651],[384,8795],[384,5359],[179,660],],
'15':[[384,8935],[344,222],],
'16':[[121,534],[384,2491],[25,91],[181,326],[160,50],[320,168],],
'19':[[178,274],[121,180],[102,47],[113,55],],
'23':[[42,992],[384,3229],[384,3019],[331,322],],
'26':[[186,478],[384,611],],
'27':[[243,162],],
'31':[[396,149],],
'39':[[48,366],],
'63':[[48,383],[243,75],[48,369],],
'77':[[384,2267],],
'80':[[153,1434],[153,23],[185,57],[171,1254],[197,3],[277,274],[54,12],[54,1523],[277,211],[249,314],[355,1469],[277,592],],
'149':[[42,983],],
'203':[[227,130],[217,410],[246,1918],[246,1067],[331,499],],
'314':[[217,218],],
'370':[[178,287],[87,63],],
'375':[[30,78],],
'517':[[121,128],],
'587':[[30,133],],
'596':[[121,550],],
'845':[[384,7833],],
'1119':[[217,378],],
'1129':[[174,29],],
'1205':[[96,152],],
'1304':[[179,125],[290,179],[179,1229],],
'1479':[[384,2745],],
'1560':[[48,374],],
'1682':[[342,250],],
'2083':[[197,42],],
'2329':[[70,39],],
'2583':[[331,453],],
'2675':[[384,628],],
'2816':[[384,3574],],
'3827':[[355,308],],
},{'3':[[246,713],[384,4531],[246,676],],
'15':[[335,3441],[21,123],[164,649],],
'18':[[355,224],],
'19':[[384,4819],[39,209],[344,300],[355,1322],],
'23':[[178,280],],
'26':[[251,261],[384,2164],],
'33':[[384,6995],[355,1404],],
'63':[[388,71],[384,4534],],
'152':[[355,1261],],
'470':[[186,314],],
'484':[[153,1080],],
'502':[[355,1010],],
'531':[[396,150],[48,367],[48,375],[42,984],[344,261],[179,661],[12,142],],
'596':[[178,262],],
'607':[[217,425],],
'614':[[194,104],],
'615':[[235,234],],
'1118':[[162,272],],
'1315':[[384,1295],],
'1370':[[89,366],],
'1462':[[274,209],],
'1913':[[296,163],[384,6657],[80,144],[384,9536],[48,4846],[335,1114],],
'1971':[[384,2170],],
},{'12':[[42,1303],[42,468],[42,208],[42,131],[42,876],],
'16':[[39,566],[12,149],],
'18':[[42,812],],
'26':[[42,622],[42,783],[384,4889],],
'31':[[89,299],[42,1276],],
'33':[[39,47],],
'39':[[75,59],[42,416],],
'50':[[39,138],],
'137':[[42,434],],
'183':[[273,48],],
'288':[[384,4911],],
'593':[[42,810],],
'596':[[336,49],],
'1329':[[384,4846],],
'1370':[[42,825],],
'1464':[[42,1011],],
'1489':[[42,1286],],
'2296':[[62,129],],
'5007':[[384,4904],],
},{'1':[[274,260],],
'343':[[246,911],],
'443':[[153,766],],
'533':[[39,567],[39,48],[12,150],],
'672':[[152,186],[153,96],],
'1672':[[384,741],],
'4422':[[342,178],],
},{'15':[[48,172],],
'23':[[384,4329],],
'121':[[96,166],],
'130':[[12,152],],
'154':[[244,159],],
},{'63':[[181,460],],
'154':[[39,575],],
'535':[[12,153],],
'1507':[[181,794],],
},{'16':[[12,155],],
'284':[[384,1714],],
'349':[[384,6830],],
'1101':[[384,8711],],
'1280':[[384,2449],],
'4804':[[384,1829],],
},{'15':[[384,843],],
'48':[[60,70],],
'49':[[181,779],],
'81':[[217,183],[217,164],],
'148':[[384,5979],],
'149':[[181,911],],
'454':[[181,665],],
'500':[[12,162],],
'501':[[12,157],],
'502':[[243,194],],
'551':[[181,843],],
'915':[[217,156],],
'926':[[384,9405],],
'1050':[[82,29],],
'1177':[[384,7905],],
'1194':[[160,45],],
'1462':[[384,6624],],
'1467':[[54,435],],
'2267':[[82,316],],
'3653':[[188,193],[277,181],],
'3881':[[246,607],],
'4190':[[384,778],],
'4685':[[384,594],],
'4719':[[384,827],[384,1928],[384,1765],],
'4800':[[384,1781],],
'5034':[[384,5332],],
},{'48':[[186,412],],
'61':[[153,376],],
'203':[[257,147],],
'425':[[376,35],],
'491':[[12,160],],
'550':[[39,421],],
'888':[[355,1012],],
'963':[[42,579],],
},{'3':[[335,993],],
'12':[[384,2812],],
'23':[[37,37],[23,51],[381,624],[181,687],[183,43],[186,446],[343,44],[215,43],[335,2365],[293,51],[317,115],[12,166],],
'33':[[384,6283],],
'34':[[394,198],],
'77':[[384,6692],],
'130':[[335,1049],],
'154':[[273,37],],
'346':[[170,114],[189,140],],
'420':[[381,65],[384,7785],[381,260],[384,6196],],
'1198':[[384,3486],],
'1407':[[42,582],],
'3169':[[384,2705],],
'4742':[[384,1119],],
'5131':[[384,8045],[384,8021],],
},{'16':[[306,667],[306,753],],
'31':[[48,379],],
'39':[[30,326],],
'67':[[382,61],[71,53],[382,53],[71,61],],
'277':[[12,168],],
'2273':[[58,57],],
},{'26':[[251,306],],
'55':[[246,1285],[246,1892],],
'67':[[257,161],],
'68':[[384,8116],],
'224':[[174,136],],
'241':[[335,396],],
'541':[[306,668],[12,169],],
'656':[[251,221],],
'857':[[112,91],],
'861':[[384,2427],[384,7275],],
'888':[[384,5362],[335,3459],],
'955':[[39,888],],
'1307':[[384,3007],[384,3217],],
'1363':[[217,421],],
'2100':[[125,266],],
'2266':[[57,272],],
'2455':[[306,654],],
'2488':[[384,4672],],
'2758':[[121,198],],
},{'3':[[95,281],[95,231],[39,419],[54,714],[54,664],[235,251],[218,350],],
'15':[[48,2800],[335,3364],[253,60],[39,586],[54,780],[54,804],[54,1373],[65,73],[395,84],[49,227],[95,424],[395,44],[395,39],[355,185],],
'18':[[189,414],[153,378],],
'26':[[153,322],[331,328],[246,1155],[181,829],[355,703],[42,281],],
'56':[[249,31],],
'63':[[345,73],],
'67':[[266,353],],
'128':[[41,287],],
'147':[[274,762],],
'152':[[42,1123],],
'213':[[355,139],],
'266':[[164,512],],
'460':[[197,482],],
'470':[[153,368],],
'525':[[161,82],],
'542':[[12,170],],
'572':[[153,310],],
'705':[[304,253],[30,218],[335,2368],],
'771':[[384,6896],],
'899':[[153,117],],
'926':[[162,161],[253,224],],
'1164':[[121,479],],
'1370':[[121,465],],
'1843':[[266,348],],
'2144':[[395,106],],
'2157':[[95,487],],
'2477':[[181,313],],
'3819':[[242,71],],
},{'543':[[12,171],],
'1167':[[395,132],],
'2795':[[304,272],],
},{'2':[[306,34],],
'7':[[48,8],[54,25],[185,76],[171,1273],[48,4982],],
'27':[[48,34],],
'56':[[54,1534],],
'117':[[306,0],],
'226':[[306,159],],
'275':[[384,8426],],
'375':[[12,581],[48,4620],],
'544':[[12,172],],
'838':[[306,394],],
},{'15':[[355,30],[277,319],],
'16':[[186,174],],
'19':[[12,181],[296,81],[277,367],[48,4902],[344,67],[362,27],[384,9297],[62,70],[62,29],],
'23':[[355,61],[246,257],[49,44],[335,3179],[335,456],[335,286],],
'33':[[12,584],[54,28],[54,1537],[48,11],[171,1276],[48,4985],[48,37],[185,79],[306,3],[12,175],],
'149':[[277,392],],
'159':[[304,312],],
'203':[[39,55],],
'350':[[153,676],],
'433':[[214,57],],
'531':[[277,212],[277,275],[197,4],[249,315],[355,1470],[277,593],[171,1255],[153,1435],[185,58],[153,24],[70,40],[54,13],[197,43],[54,1524],],
'545':[[384,8427],],
'596':[[118,171],[172,112],[244,202],],
'1112':[[39,79],],
'1351':[[379,113],],
},{'19':[[342,163],[384,7893],[342,201],],
'23':[[39,90],[39,156],[39,717],[25,82],[39,825],[385,45],[384,6237],[384,4225],[359,84],[39,734],[204,77],[70,68],[331,102],[315,185],[160,431],[306,315],[181,28],[181,46],[181,330],[181,528],[303,144],[395,89],[224,83],[224,159],[289,185],],
'420':[[384,9906],],
'489':[[12,586],[171,1278],[306,5],[185,81],[384,8430],[54,1539],[54,30],[48,13],[48,4987],[12,177],[48,39],],
'501':[[306,44],],
'543':[[345,74],],
'547':[[384,4226],],
'588':[[395,87],],
'773':[[384,4240],],
'821':[[96,150],],
'1117':[[384,6296],],
'1514':[[48,44],],
'2221':[[95,514],],
},{'12':[[89,207],],
'19':[[306,83],[57,305],[306,55],[306,327],[12,189],],
'23':[[48,3202],[48,2737],[306,428],],
'26':[[220,86],],
'39':[[113,24],],
'57':[[213,282],],
'107':[[384,2149],],
'152':[[199,73],[363,680],],
'346':[[266,284],],
'349':[[204,43],],
'411':[[122,75],],
'791':[[384,4930],],
'1680':[[384,6431],],
'3002':[[384,3646],],
'3978':[[384,5105],],
},{'12':[[12,200],],
},{'7':[[200,94],[302,49],[200,120],[134,52],],
'12':[[315,91],[289,91],[200,113],[200,87],],
'15':[[384,8948],],
'16':[[48,830],[306,250],[12,306],],
'19':[[134,32],[335,3606],[128,34],[335,3504],[322,35],[335,3574],[39,198],[302,33],[335,3589],],
'23':[[128,126],[306,702],[302,58],[48,670],[306,1163],[121,126],[134,61],[48,3278],[12,299],[306,518],[335,3390],[257,152],[12,418],[257,111],[48,3045],[121,419],[322,128],[128,73],[48,2758],[322,70],[306,1193],],
'26':[[200,271],[12,270],[257,121],[121,162],],
'36':[[12,278],[39,62],],
'77':[[48,2777],[48,2257],[48,3297],[48,916],[306,537],],
'149':[[12,339],[306,276],[134,110],[121,294],[121,301],[48,863],[306,283],[12,332],[48,856],[128,93],],
'298':[[306,495],],
'306':[[306,473],],
'412':[[12,450],],
'420':[[39,45],],
'422':[[128,55],[128,112],[48,3490],[39,73],[331,285],[306,1105],[322,52],[322,114],],
'425':[[128,67],[322,64],],
'436':[[335,3423],],
'454':[[331,258],],
'457':[[48,1375],[48,1436],],
'468':[[48,3479],],
'489':[[12,204],[185,88],[171,1285],[266,279],[171,43],[227,38],[200,283],[48,30],[48,4],[39,543],[121,259],[306,1626],[306,23],[306,66],[39,22],[12,550],[121,496],[384,9038],[12,365],[83,74],],
'502':[[335,3685],],
'515':[[289,119],[289,126],[315,119],[315,126],],
'519':[[306,745],],
'525':[[12,523],],
'543':[[335,3365],[39,420],],
'554':[[306,466],],
'579':[[121,268],],
'611':[[12,431],],
'707':[[335,3675],],
'722':[[48,3329],[48,2298],[48,1015],[306,604],[48,2894],],
'869':[[322,83],[306,650],[384,6023],[302,100],[48,3257],[134,103],[128,86],],
'938':[[335,3692],],
'963':[[335,3763],],
'1108':[[39,43],],
'1189':[[331,483],],
'1247':[[335,3410],],
'1301':[[384,8357],[331,273],[306,1072],[306,1144],],
'1432':[[48,1077],],
'1610':[[48,631],[306,289],],
'1669':[[306,790],[48,1301],],
'1672':[[48,2336],[306,642],[48,3367],[48,1116],[48,2930],],
'1679':[[306,767],[306,797],[306,562],],
'1778':[[48,2339],],
'2150':[[384,8339],],
'4165':[[306,750],],
'4898':[[384,8709],],
'5175':[[384,9221],[384,9213],],
},{'7':[[353,43],],
'12':[[153,832],[181,801],[12,209],],
'16':[[284,214],[251,343],],
'23':[[384,6661],[246,924],[30,118],[331,442],[335,2360],],
'36':[[355,997],[70,412],[344,245],[197,249],],
'48':[[181,842],],
'147':[[306,892],],
'203':[[160,289],],
'241':[[306,1074],],
'449':[[339,97],],
'513':[[331,400],],
'555':[[355,252],[243,68],],
'585':[[48,2254],[306,534],[48,913],[48,2774],[48,3294],],
'650':[[384,8552],],
'681':[[54,685],[95,252],],
'954':[[394,188],],
'1462':[[52,53],],
'1589':[[306,889],],
'1988':[[306,900],],
'2065':[[52,123],],
'2302':[[306,896],],
'2415':[[306,1140],],
'3271':[[179,1535],[179,1480],[179,1333],[179,1585],],
'3857':[[355,889],],
},{'3':[[384,1392],[335,3360],[384,442],[384,464],[384,422],],
'7':[[172,50],],
'15':[[277,683],],
'16':[[384,951],[384,923],],
'19':[[39,218],],
'23':[[42,723],],
'36':[[12,215],],
'59':[[224,98],],
'77':[[384,551],],
'150':[[244,145],],
'152':[[244,102],],
'250':[[384,75],],
'903':[[48,1556],],
'3213':[[384,895],],
'4735':[[384,1066],],
},{'2':[[384,2138],],
'12':[[186,349],],
'23':[[188,138],[355,903],[313,487],[277,355],[170,152],],
'81':[[250,37],[367,39],],
'277':[[335,948],],
'422':[[217,302],[191,276],[72,79],],
'471':[[335,682],[335,473],[75,85],],
'489':[[12,217],],
'550':[[48,671],],
'567':[[217,325],[384,6135],[174,234],[217,341],[278,34],],
'941':[[89,68],],
'1385':[[235,361],],
'1432':[[355,937],],
'1469':[[384,4883],[42,1105],],
},{'12':[[12,219],[290,43],[12,368],[277,619],[277,157],[48,287],[246,1034],[246,808],[246,741],[200,132],[188,106],[179,982],[179,70],[122,116],[384,8423],],
'18':[[249,273],],
'19':[[48,339],],
'23':[[12,512],[12,284],[246,1159],],
'26':[[246,747],],
'30':[[48,285],],
'36':[[246,867],[246,1166],[246,1089],],
'38':[[48,1393],],
'59':[[306,465],],
'63':[[277,171],],
'68':[[246,879],],
'73':[[246,858],[48,3554],],
'81':[[335,217],],
'205':[[249,303],],
'215':[[48,1127],],
'217':[[179,1061],[48,323],],
'473':[[48,4879],],
'511':[[277,816],[384,1396],],
'630':[[48,3196],],
'696':[[246,831],],
'995':[[200,255],],
'1532':[[179,1116],],
'1550':[[48,1554],],
'1552':[[48,311],],
'1591':[[48,1454],],
'1596':[[48,3041],],
'1817':[[48,2731],],
'2130':[[179,1035],],
'2143':[[54,573],],
'2374':[[73,71],],
'2976':[[246,1843],],
'3274':[[246,897],],
'3929':[[246,1408],],
},{'7':[[99,84],],
'12':[[355,774],[246,1675],[277,269],[95,177],[355,251],[84,179],[54,190],],
'28':[[343,61],],
'30':[[170,129],[243,67],[341,102],[121,378],[307,102],[12,223],],
'37':[[331,70],],
'43':[[30,471],[170,191],[181,152],[30,60],[160,113],[277,166],],
'63':[[301,45],[355,388],[246,1227],[246,1884],],
'68':[[384,5889],],
'73':[[217,349],[197,252],],
'131':[[160,183],],
'145':[[331,351],],
'152':[[164,357],],
'164':[[164,371],],
'267':[[181,401],],
'283':[[277,78],],
'288':[[243,242],],
'305':[[335,2987],[358,283],[12,426],],
'557':[[355,1036],],
'570':[[12,264],[121,154],],
'613':[[331,388],],
'696':[[277,505],],
'726':[[246,1339],],
'846':[[266,140],[249,308],],
'1117':[[278,60],],
'1141':[[320,116],[277,204],],
'1166':[[39,405],],
'1531':[[48,191],],
'1828':[[306,1158],],
'2836':[[246,1371],],
'3891':[[331,313],],
},{'19':[[12,229],],
'343':[[12,274],],
},{'45':[[355,1035],],
'55':[[12,232],],
'63':[[84,269],],
'250':[[152,218],],
'919':[[335,2607],],
'1033':[[335,3122],],
'1225':[[246,849],],
'1630':[[121,72],],
'3857':[[246,271],],
},{'36':[[121,75],[12,235],],
},{'558':[[121,76],[12,236],],
},{'420':[[355,1168],],
'559':[[121,77],[12,237],],
},{'23':[[121,97],[12,464],[12,241],],
'54':[[12,395],],
'596':[[48,595],],
'1378':[[48,584],],
},{'2':[[188,108],[70,54],[371,30],[277,159],],
'8':[[21,132],],
'16':[[125,158],],
'20':[[384,3060],],
'25':[[303,114],[384,9152],],
'31':[[121,101],[12,245],],
'61':[[184,38],],
'63':[[384,9436],],
'65':[[54,116],[188,87],],
'82':[[48,4379],],
'149':[[384,515],],
'155':[[384,6898],],
'199':[[181,406],],
'225':[[57,257],],
'230':[[274,443],],
'241':[[191,52],],
'264':[[162,101],],
'277':[[384,650],],
'321':[[266,48],],
'445':[[162,131],],
'491':[[39,339],],
'541':[[48,380],],
'554':[[48,340],],
'817':[[384,9931],],
'857':[[352,92],[193,92],],
'941':[[42,642],],
'960':[[355,747],],
'1053':[[148,153],],
'1117':[[283,227],],
'1241':[[266,287],],
'1261':[[42,1157],],
'1631':[[355,452],],
'2234':[[160,65],],
'3198':[[384,2753],[384,2086],],
'3585':[[246,464],],
'3770':[[355,1088],],
},{'63':[[12,403],],
'140':[[314,99],],
'154':[[121,103],[12,247],],
'596':[[48,3692],],
},{'82':[[121,107],[125,248],[355,809],[12,251],],
},{'564':[[121,108],[12,252],],
'1866':[[48,3697],],
},{'12':[[311,83],[387,83],],
'41':[[121,144],],
'164':[[384,1951],],
'237':[[48,1072],[48,1108],],
'248':[[381,390],[68,107],],
'351':[[12,255],],
'602':[[381,108],],
'1504':[[384,2025],],
},{'1':[[331,222],],
'3':[[331,529],],
'19':[[335,2933],[243,126],[246,549],[39,647],[384,4977],[243,91],[243,106],[246,904],[112,78],],
'23':[[278,33],[331,267],[331,298],[288,38],[258,47],[174,233],],
'36':[[12,259],],
'38':[[331,311],],
'203':[[152,61],],
'215':[[384,6134],],
'422':[[217,324],[217,340],],
'780':[[150,110],[103,110],],
'868':[[26,37],],
'880':[[355,1154],],
'886':[[186,378],[384,209],[186,462],[358,175],[186,489],[200,305],[384,1186],[384,1366],[186,228],[161,484],[384,9696],[186,56],[384,1404],[257,187],[384,8671],[261,84],[186,170],[384,8649],[358,83],[358,44],[384,8484],[384,7959],[162,299],[384,1511],[28,50],[28,32],],
'891':[[384,9701],[28,59],[384,8492],[384,8646],[186,470],[186,388],[186,267],[186,238],[186,194],[186,115],[384,2002],[384,2009],[384,2016],[384,2022],[384,2461],[384,7374],[384,3280],[384,3800],[384,4666],[186,81],[384,5440],[384,5510],[384,6973],[384,7404],],
'1131':[[39,191],],
'1226':[[331,244],],
'1401':[[335,2720],[174,87],[42,762],],
'1419':[[384,2579],],
'1627':[[384,5807],],
'1699':[[48,1653],],
'2583':[[160,376],],
'2754':[[121,149],],
'4113':[[294,42],],
},{'567':[[121,150],[331,223],[331,245],[331,268],[331,299],[331,530],[12,260],],
},{'152':[[121,152],[12,262],],
},{'569':[[121,153],[12,263],],
},{'224':[[331,486],],
'517':[[12,267],],
'1225':[[54,245],],
'1249':[[257,75],],
'1364':[[48,761],[121,159],[306,181],],
'1732':[[48,1863],[48,1888],],
'1752':[[48,2086],[48,2080],],
},{'99':[[42,1142],],
'100':[[188,276],],
'215':[[188,301],[188,341],],
'217':[[52,336],[42,1036],[39,211],[153,309],[153,346],[246,851],[52,300],],
'314':[[52,288],[39,222],[52,329],[39,763],[70,547],[188,280],],
'436':[[39,437],[39,907],],
'571':[[121,160],[48,762],[12,268],[306,182],],
'926':[[290,194],[179,1247],[179,140],],
'1109':[[179,1244],[290,191],[179,137],],
'1123':[[290,325],[290,367],[179,271],[179,313],[179,506],[179,559],[290,613],[290,560],[179,1506],[179,1556],],
'1125':[[52,327],],
'1177':[[188,259],],
'1180':[[188,323],],
'1225':[[246,1251],],
'1260':[[48,1646],],
'1265':[[188,337],],
'1267':[[188,255],[188,297],[188,319],],
'2090':[[200,269],],
'3235':[[174,213],[174,199],[174,171],[174,157],[174,185],],
'3237':[[174,218],[174,204],[174,190],[174,176],[174,162],],
},{'63':[[12,276],],
},{'39':[[246,1719],],
'164':[[12,286],],
'305':[[246,1759],[121,93],],
},{'15':[[48,4370],[48,4478],[384,5740],],
'19':[[121,69],[121,38],[306,173],[48,753],[246,1609],],
'23':[[246,650],],
'36':[[246,873],],
'59':[[39,901],],
'77':[[48,792],[153,534],[48,3573],[48,3683],[306,212],[197,459],[48,4009],],
'152':[[246,1071],],
'433':[[160,63],],
'574':[[246,1720],[246,1760],[121,94],[12,287],],
'933':[[335,3016],],
'1556':[[48,4797],],
'2463':[[153,631],],
'4331':[[335,2164],],
},{'23':[[344,157],[174,128],[243,51],[243,141],[355,286],],
'575':[[246,1072],[246,651],[39,902],[12,288],],
'906':[[355,76],],
},{'15':[[113,52],],
'23':[[12,506],],
'26':[[355,535],],
'63':[[277,175],],
'152':[[381,95],],
'196':[[160,78],],
'224':[[277,117],[243,267],],
'373':[[246,470],],
'554':[[384,8424],],
'576':[[246,652],[12,289],],
'608':[[335,462],],
'902':[[30,80],],
'955':[[246,661],],
'1123':[[242,77],],
'3137':[[162,153],],
'4786':[[384,1650],],
},{'23':[[121,369],],
'489':[[12,296],],
},{'19':[[381,141],],
'23':[[381,482],[42,223],],
'48':[[121,267],[306,248],[48,828],],
'422':[[381,216],],
'517':[[12,301],],
'674':[[381,179],],
'838':[[71,68],[382,68],],
'1151':[[121,312],],
'1411':[[381,54],],
'4649':[[384,562],[384,1114],[384,310],],
},{'2':[[48,26],],
'7':[[306,19],[185,84],[171,1281],],
'13':[[384,8694],[121,307],[384,8083],[384,8764],],
'23':[[121,255],[384,8439],],
'55':[[12,361],],
'56':[[306,1622],],
'63':[[384,8816],],
'67':[[12,303],],
'77':[[39,539],[200,279],[12,544],],
'117':[[48,0],],
'140':[[48,77],],
'226':[[48,232],],
'273':[[12,459],],
'346':[[306,930],],
'375':[[12,546],],
'420':[[306,62],[306,303],],
'597':[[121,492],],
'1591':[[48,1732],],
'2675':[[384,8127],[384,8637],[384,8939],],
'4629':[[384,8652],],
},{'23':[[246,1835],[188,53],[179,52],[243,254],],
'77':[[384,4039],],
'550':[[48,2258],[306,290],[306,251],[48,917],[48,2778],[48,3298],[12,307],[121,269],[48,831],[48,632],[306,538],],
'1683':[[48,1314],],
'1799':[[48,2518],[48,2556],],
'1800':[[48,2547],],
'1961':[[48,4627],[306,309],],
},{'19':[[169,31],[114,49],[114,29],[169,50],],
'217':[[121,285],[12,323],],
'581':[[121,270],[12,308],],
'587':[[12,315],[121,277],],
},{'124':[[306,268],[306,253],[48,848],[48,833],[48,840],[306,260],],
'582':[[121,278],[121,286],[12,316],[121,271],[12,324],[12,309],],
},{'2':[[246,1973],],
'36':[[246,1963],],
'88':[[331,128],],
'583':[[306,254],[121,272],[48,834],[12,310],],
'1151':[[121,394],],
'1215':[[246,700],],
'4105':[[290,70],],
},{'26':[[12,312],[306,533],[306,256],[121,274],[48,3293],[48,836],[48,2773],[48,912],[48,2253],],
'34':[[48,3119],[48,4683],],
'59':[[39,798],],
'82':[[345,45],],
'445':[[39,377],],
'489':[[39,606],],
'550':[[48,864],],
'1229':[[39,855],],
},{'147':[[48,2276],[48,3316],[48,949],],
'182':[[48,2789],[306,555],[48,942],[48,2269],[306,549],[48,3309],],
'215':[[48,2278],[306,265],[48,845],[121,283],[12,321],[48,951],[48,3318],],
'290':[[121,316],],
'585':[[48,837],[12,313],[306,257],[121,275],],
'593':[[48,872],[12,343],],
'671':[[48,2322],[48,1039],[48,3018],[48,2918],[48,2824],[48,3355],[306,630],],
'1647':[[48,959],],
'1648':[[48,967],],
'1652':[[48,954],],
'1685':[[48,2281],[306,560],[48,3321],],
'1820':[[48,2814],[48,2817],],
},{'73':[[153,64],],
'203':[[30,132],],
'586':[[121,276],[48,838],[306,258],[12,314],],
'753':[[257,115],],
'3275':[[246,1731],],
},{'23':[[12,349],[39,645],[121,320],[39,810],[395,33],],
'34':[[48,876],],
'82':[[128,42],[134,40],],
'99':[[384,3976],],
'182':[[48,3332],[48,2897],[48,1018],[306,607],[48,2301],],
'314':[[384,3981],[384,3997],],
'484':[[289,191],],
'489':[[195,24],],
'543':[[48,2801],],
'583':[[306,261],[12,317],[121,279],[48,841],],
'707':[[39,511],[39,141],[39,470],[39,532],[39,445],[39,149],[39,630],[39,342],[384,8830],[48,3089],[48,3141],[39,328],[39,666],[395,28],[48,4705],],
'1004':[[48,1037],[306,628],[48,2320],[48,2916],[48,3353],],
'1103':[[395,86],],
'1229':[[39,795],],
'1474':[[48,2959],],
'1647':[[48,1130],],
'1648':[[48,1155],],
'1652':[[48,2911],[48,3348],[306,623],[48,1032],[48,2315],],
'1685':[[306,614],[48,3339],[48,2328],],
'1819':[[48,2978],],
'4685':[[384,1934],],
},{'7':[[188,355],[227,254],[188,5],[171,127],[227,333],],
'23':[[90,56],],
'117':[[88,0],],
'262':[[227,222],],
'431':[[213,276],],
'567':[[48,1654],],
'588':[[12,318],[306,262],[121,280],[48,842],[121,321],],
'1462':[[384,1671],],
'2541':[[90,52],[292,36],],
'3967':[[246,1957],],
'4234':[[331,346],],
'4264':[[331,424],],
},{'550':[[121,295],[48,857],[306,277],[12,333],],
'591':[[121,297],[12,335],],
'1589':[[306,279],[48,859],],
},{'590':[[121,296],[12,334],],
'1225':[[384,3073],],
},{'590':[[48,860],[121,298],[306,280],[12,336],],
},{'2':[[65,135],],
'7':[[82,412],[82,508],[82,531],[304,230],],
'12':[[190,67],[155,46],[355,1232],[229,161],[229,190],[82,420],[161,450],[343,63],[59,48],[274,396],[54,234],[30,293],[283,178],],
'14':[[267,27],],
'16':[[326,48],[355,413],[53,102],[294,44],[376,40],[39,610],[26,39],[181,451],[355,409],[363,611],],
'18':[[306,192],[48,772],],
'19':[[246,1287],[100,41],[135,41],[246,950],],
'27':[[384,376],],
'31':[[303,121],[229,184],[207,106],[160,389],[306,774],],
'35':[[384,6285],],
'39':[[42,314],[307,63],[384,5819],[340,33],[60,72],[308,33],[42,1272],[341,63],[234,379],[355,1025],[384,5829],],
'43':[[42,1300],[52,281],[48,301],[344,120],[381,310],],
'56':[[249,80],],
'57':[[355,717],],
'67':[[344,127],],
'73':[[164,416],[164,481],[48,163],],
'82':[[355,1318],],
'99':[[339,116],],
'121':[[351,56],],
'127':[[178,227],],
'128':[[288,18],[37,20],[340,20],[294,20],[212,21],[307,24],[389,20],[145,19],[308,20],[151,20],[341,24],[343,24],[105,20],],
'139':[[335,730],],
'147':[[42,1116],],
'151':[[365,226],],
'152':[[246,445],[339,291],],
'176':[[189,534],],
'203':[[160,306],[308,60],[260,87],[307,82],[340,60],[341,82],],
'215':[[381,247],[384,7772],],
'217':[[54,238],],
'224':[[164,345],],
'248':[[339,245],[355,1308],[321,305],[321,327],[303,146],],
'277':[[83,60],],
'284':[[42,537],],
'305':[[321,339],[358,294],],
'314':[[339,159],],
'349':[[384,6960],],
'369':[[384,1349],],
'374':[[384,5628],],
'376':[[42,1063],],
'388':[[384,6427],],
'395':[[42,129],],
'415':[[258,49],],
'431':[[62,47],[362,35],],
'499':[[48,2140],],
'501':[[48,871],[12,342],],
'515':[[12,472],[331,118],[48,2188],],
'554':[[246,1090],[384,1397],[246,1167],[277,817],[246,868],[246,1160],[179,1062],],
'593':[[308,61],[340,61],[307,83],[341,83],],
'596':[[42,456],[339,278],[161,534],],
'623':[[12,476],],
'639':[[246,438],],
'791':[[258,57],],
'861':[[335,2450],],
'865':[[47,31],[47,22],],
'935':[[335,1361],],
'937':[[42,206],],
'955':[[42,1144],],
'960':[[355,1059],],
'1003':[[280,105],[371,98],],
'1101':[[384,8209],],
'1180':[[339,139],],
'1244':[[42,809],],
'1321':[[41,313],],
'1337':[[231,97],],
'1345':[[42,1161],],
'1382':[[384,9904],],
'1396':[[42,466],[42,874],],
'1414':[[246,883],],
'1442':[[341,227],[307,215],[341,215],[307,227],],
'1452':[[274,419],],
'1519':[[48,1788],],
'1723':[[384,7704],],
'2182':[[95,405],],
'2225':[[54,1236],],
'2325':[[384,6183],],
'2496':[[85,56],],
'2530':[[89,474],],
'2772':[[121,439],],
'2804':[[125,50],],
'2959':[[153,291],],
'3160':[[164,632],[164,459],],
'3703':[[200,243],],
'4012':[[257,139],[257,158],],
'4013':[[257,145],],
},{'66':[[331,359],],
'90':[[331,355],],
'588':[[48,877],[12,350],],
'1315':[[384,4421],],
},{'61':[[308,63],[307,85],[340,63],[341,85],],
'87':[[340,57],[341,79],[307,79],[308,57],],
'128':[[99,110],],
'169':[[214,155],[16,133],[74,133],],
'215':[[12,353],],
'225':[[301,66],],
'277':[[381,133],[153,546],],
'370':[[23,111],[266,343],[215,103],[183,103],[293,111],],
'449':[[30,212],[341,108],[307,108],[178,236],[384,3831],],
'955':[[30,353],],
'1025':[[76,70],],
'1299':[[289,168],[315,168],],
'1459':[[193,72],[352,72],],
'1630':[[121,41],],
'1840':[[48,3123],[48,4687],],
'2134':[[251,188],],
},{'12':[[251,248],[336,48],[355,934],[39,384],],
'27':[[344,282],],
'28':[[121,516],[49,400],],
'30':[[189,578],[12,398],],
'39':[[384,3778],[133,94],[335,1188],[246,1361],[244,201],[118,170],[178,261],[181,110],[355,978],[336,65],],
'43':[[68,95],[359,56],[381,71],[355,176],[381,272],[381,339],[246,426],[381,448],[121,549],[125,63],[48,619],[339,277],[48,594],[186,211],[214,380],[42,455],[394,156],[321,45],[306,1078],[303,49],[277,660],[161,533],[277,553],[164,532],[39,766],[39,507],[246,403],[252,85],[189,494],[181,659],[181,667],[181,799],[12,355],],
'57':[[337,71],[345,68],[345,76],[75,106],[42,1127],[395,78],[395,91],[266,356],[231,91],[235,319],],
'61':[[355,155],],
'67':[[251,63],[251,85],[277,736],[246,1043],[277,754],],
'85':[[153,825],[153,1215],[181,413],],
'164':[[121,365],[153,562],],
'167':[[246,189],],
'202':[[39,188],],
'206':[[49,348],],
'220':[[181,264],],
'248':[[331,32],[121,88],],
'267':[[335,2085],],
'281':[[113,22],],
'284':[[217,429],[384,942],],
'305':[[54,516],[42,239],[384,5902],[181,931],[172,111],[49,318],[335,3072],[335,2225],[160,517],],
'351':[[80,98],[296,132],[384,6865],[65,177],[384,4508],[342,323],[112,40],],
'353':[[289,79],[315,79],[224,147],],
'489':[[303,137],],
'564':[[355,810],],
'598':[[125,113],[277,442],[153,912],],
'599':[[277,799],],
'607':[[331,130],],
'817':[[384,2791],],
'861':[[246,1210],],
'865':[[335,2308],],
'1003':[[160,279],[313,300],],
'1113':[[224,162],],
'1225':[[39,837],],
'1228':[[164,244],],
'1442':[[146,143],],
'1477':[[161,512],],
'1486':[[384,4832],[384,4837],],
'1819':[[384,2298],],
'1865':[[48,3691],],
'2406':[[125,258],],
'2576':[[186,277],],
'4591':[[381,402],],
},{'12':[[321,55],[306,787],[322,126],[128,124],[153,1217],[48,3486],[84,527],[331,96],],
'43':[[331,421],[121,491],],
'63':[[39,70],[39,819],],
'79':[[331,203],],
'85':[[384,5991],],
'248':[[12,377],],
'271':[[42,277],],
'305':[[134,127],[302,129],[321,411],],
'861':[[246,1533],],
'1337':[[42,878],],
'1442':[[331,478],],
'4253':[[331,208],],
},{'18':[[277,833],],
'48':[[48,4655],],
'49':[[153,603],],
'63':[[335,1956],[335,2699],[277,797],[335,3009],[12,381],],
'67':[[335,2976],[153,299],],
'79':[[153,525],],
'107':[[384,2210],],
'121':[[274,630],],
'136':[[277,441],[153,1236],],
'139':[[153,581],],
'147':[[335,2065],[335,2783],[197,536],],
'152':[[342,205],],
'217':[[153,273],],
'241':[[306,1165],[335,2508],],
'250':[[48,3736],[153,911],[153,1317],[306,981],],
'277':[[48,2859],[48,3238],[75,66],],
'321':[[70,258],[197,139],],
'356':[[335,3131],],
'382':[[153,551],[153,1241],],
'445':[[335,2686],[335,1943],],
'462':[[277,395],],
'595':[[153,547],],
'653':[[277,407],],
'681':[[48,4292],],
'706':[[153,560],],
'949':[[251,264],[235,238],],
'979':[[335,3060],[335,2213],],
'1117':[[335,2546],[153,613],[179,1329],[179,1581],[335,2973],[179,1476],[179,1531],[339,83],],
'1123':[[277,459],],
'1353':[[95,261],[54,694],],
'1417':[[48,4295],],
'1450':[[306,699],],
'1477':[[384,1313],],
'1667':[[197,440],],
'1927':[[48,4302],],
'2123':[[54,603],],
'2127':[[54,456],],
'2179':[[153,1084],],
'2348':[[125,112],],
'2796':[[125,93],],
'2821':[[125,135],],
'2987':[[153,806],],
'3739':[[246,245],],
'3995':[[251,300],],
'4367':[[335,2935],],
'4653':[[384,338],],
'4716':[[384,795],],
},{'267':[[84,523],[153,238],],
'598':[[48,3239],[48,2860],[12,382],[153,274],[153,526],[153,582],[153,807],[153,1318],[277,798],],
},{'23':[[335,115],[12,385],],
'73':[[12,504],],
'82':[[246,766],],
'343':[[48,1544],],
'642':[[48,3194],[48,2110],],
},{'12':[[355,170],[277,792],[277,189],],
'43':[[12,388],],
'82':[[121,584],],
'152':[[277,974],],
'199':[[30,445],],
'347':[[42,1261],],
'1167':[[84,520],],
'1335':[[355,1129],],
'4226':[[320,170],],
},{'15':[[12,553],[54,60],[381,107],[336,102],[320,173],[12,393],],
'343':[[277,572],[84,271],],
},{'89':[[277,666],],
'154':[[20,71],[12,400],],
'298':[[48,2583],[48,335],],
'420':[[101,66],],
'548':[[57,306],],
'771':[[82,468],[316,79],[316,74],],
'1229':[[60,93],[60,76],],
'2501':[[86,245],],
'3801':[[232,86],],
'5203':[[384,9732],],
},{'31':[[381,321],[384,5165],[384,6769],[334,82],],
'152':[[301,36],[366,38],],
'548':[[384,2150],],
'563':[[12,404],],
'1267':[[384,989],],
'1680':[[243,214],],
},{'30':[[48,746],[84,374],[306,166],[339,223],],
'39':[[181,212],[170,256],[12,408],],
'305':[[384,7528],[384,6273],],
},{'605':[[12,409],],
},{'7':[[379,142],],
'16':[[341,145],[341,165],[307,165],[155,43],[48,3659],[54,247],[307,145],[262,39],[200,274],[217,424],[251,146],[219,39],],
'30':[[153,638],[42,1008],[331,459],],
'164':[[244,154],],
'224':[[176,167],],
'245':[[12,411],],
'248':[[246,1489],],
'267':[[246,535],],
'488':[[209,190],[173,220],[148,142],[180,147],[229,153],[394,133],[137,175],[135,135],[146,126],[187,144],[247,194],[100,130],[86,192],[269,159],[270,196],[283,131],[284,160],[285,123],[57,199],[36,131],[34,124],[20,150],[210,135],[332,133],],
'552':[[384,924],],
'580':[[384,8817],],
'584':[[331,129],],
'1424':[[243,57],],
'2353':[[313,119],],
'2415':[[235,336],],
'4485':[[355,959],],
},{'16':[[12,414],[277,200],],
'23':[[344,83],[335,2406],[335,461],[355,248],[290,52],[242,205],[243,219],[246,283],[217,322],[355,765],],
'28':[[246,1014],],
'67':[[39,238],],
'164':[[246,295],],
'224':[[246,1200],[331,165],[246,1358],],
'498':[[39,412],],
'607':[[262,40],[219,40],[307,166],[341,146],[341,166],[307,146],],
'1865':[[181,783],],
'2512':[[188,179],],
},{'19':[[150,114],[103,114],],
'23':[[335,1969],[48,257],[159,164],],
'36':[[84,327],[246,1845],],
'37':[[112,96],],
'49':[[48,3614],[306,945],],
'59':[[159,159],],
'63':[[125,263],],
'69':[[121,336],],
'77':[[112,59],],
'79':[[249,231],[384,4995],[102,66],[54,89],[384,5014],[384,7490],],
'124':[[263,18],[338,18],[203,18],],
'134':[[263,36],[338,32],[203,38],],
'149':[[159,105],],
'154':[[188,113],[277,162],],
'201':[[384,7505],[48,3685],],
'231':[[82,440],[44,73],[379,115],[203,42],[338,67],[338,26],[338,36],[44,113],[263,30],[82,450],[263,40],[276,70],[82,433],[287,60],[287,92],[203,31],],
'290':[[186,255],],
'489':[[12,423],],
'547':[[39,157],[181,529],],
'623':[[384,508],],
'697':[[384,9069],],
'1113':[[121,354],],
'1155':[[123,37],],
'1914':[[381,123],],
'2061':[[162,183],],
'2314':[[381,161],],
'2510':[[384,336],],
'2512':[[188,64],],
'3024':[[188,61],[246,1860],[159,31],],
'5052':[[384,5887],],
},{'7':[[217,145],[99,76],],
'12':[[28,65],],
'16':[[95,431],],
'20':[[391,44],],
'28':[[331,403],[176,180],],
'43':[[42,1325],[48,796],[48,2144],[49,33],[42,1204],[358,317],[59,44],[86,251],[95,103],[39,784],[358,292],[109,24],[329,64],[321,337],[121,432],[306,216],[153,233],[283,245],[160,515],[261,157],[246,1591],[181,929],[164,290],[164,428],[164,476],[246,628],[378,27],[176,236],[178,312],[181,614],[181,248],[181,535],[355,675],],
'63':[[331,111],[335,3070],[335,2467],[355,332],[335,2223],],
'67':[[121,91],[384,5900],[335,1258],],
'73':[[306,1087],[307,87],[343,73],[308,65],[340,65],[341,87],],
'146':[[113,35],],
'199':[[39,571],],
'202':[[164,162],[384,6271],],
'217':[[266,60],],
'230':[[339,110],],
'250':[[152,179],[162,180],[381,358],],
'277':[[331,77],],
'284':[[172,109],],
'298':[[246,960],],
'299':[[246,1290],],
'321':[[161,387],],
'447':[[396,120],],
'547':[[331,103],],
'593':[[246,1091],],
'598':[[153,1085],],
'609':[[12,424],],
'676':[[268,57],],
'682':[[54,1198],],
'888':[[246,715],],
'905':[[30,87],],
'1125':[[217,228],],
'1214':[[39,697],],
'1254':[[331,216],],
'1282':[[355,1007],],
'1335':[[384,6456],],
'1474':[[384,282],],
'1865':[[54,1420],],
'1993':[[246,345],],
'2100':[[321,409],],
'2127':[[335,2077],],
'2675':[[384,9471],[384,8433],],
'3519':[[179,1289],],
'3559':[[246,803],],
'3601':[[181,997],],
'3890':[[246,697],],
'3904':[[246,1966],],
},{'89':[[12,430],],
'152':[[159,143],],
},{'205':[[161,583],[321,183],],
'513':[[321,110],],
'550':[[12,432],],
},{'1':[[342,255],[191,203],],
'16':[[191,60],[30,287],[363,443],[214,291],[234,399],[160,606],],
'18':[[152,163],[246,318],[355,226],[246,938],[274,63],[306,778],[206,43],[208,30],[214,237],[355,1218],],
'34':[[152,104],],
'39':[[363,483],],
'147':[[121,65],[246,593],[335,2409],[384,5687],[331,387],[306,758],[12,434],],
'199':[[355,440],],
'203':[[384,641],],
'349':[[174,37],],
'861':[[84,472],],
'878':[[384,1622],],
'921':[[173,310],[358,186],[274,465],[232,77],[181,491],[381,168],],
'1406':[[344,313],],
'1432':[[42,804],],
'1860':[[67,59],],
'2675':[[384,9167],[384,8334],],
},{'12':[[335,1691],],
'153':[[12,438],],
'791':[[194,103],],
},{'26':[[106,38],],
'48':[[332,175],[186,161],],
'61':[[12,469],[12,440],],
'62':[[341,121],[307,121],],
'73':[[353,91],],
'77':[[353,176],[353,64],],
'83':[[30,304],],
'90':[[353,83],],
'91':[[353,53],],
'94':[[106,18],[353,24],],
'134':[[106,27],],
'150':[[106,43],],
'165':[[363,683],[199,76],],
'185':[[224,206],],
'199':[[95,117],],
'227':[[189,458],],
'251':[[30,177],],
'269':[[70,125],],
'277':[[218,82],[344,318],[396,92],[235,233],[355,402],[363,106],[335,3274],],
'285':[[30,164],[54,795],[153,584],[89,117],],
'288':[[246,931],],
'344':[[181,1016],],
'366':[[30,64],[335,2398],[21,166],[390,149],],
'447':[[335,1090],],
'451':[[384,7343],],
'470':[[189,499],[173,100],[335,2788],[335,2070],[269,60],[209,85],[269,169],],
'479':[[306,1490],[48,4148],],
'502':[[72,51],],
'553':[[277,356],],
'609':[[263,31],[338,68],[338,27],],
'696':[[335,2345],],
'887':[[28,35],],
'899':[[30,57],],
'926':[[30,188],[30,474],[30,366],[335,3725],],
'960':[[335,2351],],
'1466':[[99,127],],
'1778':[[125,115],[213,272],[118,62],[235,109],[244,63],],
'1841':[[190,29],[48,4702],[48,3138],],
'2023':[[152,141],],
'2025':[[49,378],[342,134],],
'2095':[[246,1975],],
'2105':[[54,165],],
'2150':[[95,236],[54,669],],
'2327':[[69,70],],
'2384':[[153,1082],],
'2470':[[84,283],],
'2532':[[209,243],],
'2589':[[249,182],],
'2731':[[169,29],[114,27],],
'2741':[[244,178],[118,136],],
'3577':[[181,370],],
'3696':[[194,106],],
'3748':[[214,339],],
'3941':[[246,1617],],
'4320':[[335,1850],],
},{'15':[[331,510],],
'615':[[12,441],],
},{'48':[[246,837],],
'616':[[12,442],],
'1205':[[355,1265],],
'1351':[[246,1567],],
'3895':[[246,1619],],
},{'7':[[307,50],[341,50],],
'23':[[12,444],],
'36':[[355,931],],
},{'550':[[12,451],],
},{'7':[[83,118],[331,7],[19,89],[171,1164],[331,533],[63,92],],
'27':[[39,981],[12,606],],
'82':[[83,137],],
'117':[[121,0],],
'375':[[12,453],[83,66],[306,184],[48,764],[48,90],],
'861':[[121,178],],
},{'9':[[39,263],],
'12':[[39,39],],
'15':[[19,93],[12,610],[331,537],[331,11],[306,188],[171,1168],[121,4],[83,141],[83,122],[83,70],[63,96],[48,768],[48,94],[12,457],[39,985],],
'23':[[306,738],[306,504],],
'82':[[39,179],],
'275':[[384,8807],],
'345':[[331,109],],
'471':[[39,193],],
'520':[[39,134],],
'550':[[39,74],[39,199],],
'554':[[48,312],],
'588':[[39,142],],
'681':[[39,162],],
'915':[[39,121],],
'979':[[306,1176],],
'1107':[[39,41],],
'1115':[[39,104],],
'1141':[[39,242],],
},{'63':[[12,467],],
'447':[[342,262],],
},{'15':[[83,62],[306,224],[48,623],[48,780],[48,804],[306,200],[48,1218],[121,450],],
'19':[[12,475],],
'77':[[48,825],[306,245],],
'346':[[246,999],],
'637':[[12,536],],
'838':[[306,512],],
'1385':[[384,507],],
},{'73':[[12,479],],
},{'77':[[384,8135],],
'139':[[48,3164],[48,4727],],
'173':[[48,2157],],
'520':[[12,482],],
'600':[[48,2111],],
},{'63':[[12,484],],
},{'523':[[12,488],],
'1741':[[48,4219],],
'1847':[[48,4774],],
},{'85':[[12,501],],
'1741':[[48,3896],],
'1847':[[48,4854],],
},{'23':[[48,611],],
'63':[[48,604],],
'464':[[48,1362],],
'554':[[12,513],],
'1673':[[48,1395],],
},{'173':[[48,3209],],
'491':[[12,515],],
'600':[[48,3195],],
'1916':[[48,4890],],
},{'2':[[186,141],],
'20':[[214,89],[214,95],],
'23':[[12,517],],
'81':[[355,107],],
'82':[[70,478],[197,328],],
'321':[[214,173],],
'791':[[186,283],],
'1347':[[384,9023],],
'2912':[[153,1225],],
'3053':[[384,8060],[384,7157],[384,5623],],
'5190':[[384,9568],],
},{'23':[[49,177],[84,248],[181,624],[339,54],[363,310],[363,374],[12,521],],
},{'7':[[195,72],[13,5],[322,228],[19,64],[171,1139],[63,67],[322,3],],
'77':[[322,109],],
'117':[[302,0],],
'203':[[12,526],],
'236':[[302,16],],
'486':[[13,41],],
'1828':[[306,1107],],
'1830':[[48,3417],],
'2675':[[384,4312],],
},{'7':[[19,66],[302,5],[63,69],[115,3],[115,39],[171,1141],[195,74],],
'63':[[12,528],],
'117':[[322,0],],
'123':[[322,16],],
'486':[[302,169],],
'1847':[[306,1196],[48,3437],],
'2675':[[384,8328],],
'4629':[[384,8325],],
},{'16':[[44,96],],
'19':[[277,525],],
'33':[[243,120],[384,3256],],
'152':[[246,760],],
'501':[[12,531],],
'596':[[303,138],],
'1305':[[243,96],],
'2577':[[384,5296],],
'4101':[[287,77],],
},{'500':[[48,2106],],
'501':[[48,3190],],
'635':[[12,532],],
},{'27':[[179,75],[321,225],],
'250':[[48,260],],
'277':[[48,119],],
'500':[[12,535],],
},{'520':[[12,558],],
},{'12':[[336,106],],
'16':[[357,16],],
'20':[[161,486],],
'30':[[246,1539],[246,369],[176,228],],
'31':[[313,92],],
'33':[[384,3056],],
'57':[[235,433],],
'77':[[313,238],[246,686],],
'135':[[253,199],],
'164':[[160,204],],
'165':[[30,209],],
'183':[[244,97],],
'227':[[395,143],],
'248':[[84,197],[12,562],[313,227],[249,150],],
'277':[[191,192],],
'305':[[179,1179],],
'926':[[313,422],[191,227],],
'1117':[[246,437],],
'1138':[[358,79],],
'1204':[[125,163],],
'1487':[[395,50],],
'1754':[[48,2134],],
'2233':[[54,1449],],
'3135':[[161,575],[321,175],],
},{'15':[[12,572],],
},{'19':[[336,165],],
'25':[[384,4303],],
'81':[[384,9874],],
'205':[[12,575],],
'279':[[235,65],[118,47],[244,48],],
'500':[[384,8875],],
'1038':[[384,9210],],
'4006':[[257,46],],
'4849':[[384,5894],],
},{'1':[[12,604],[19,20],[63,23],[39,1],[195,28],[83,40],[83,130],[195,99],[88,28],[136,28],[48,64],[171,1095],],
'12':[[384,8917],],
'14':[[39,12],[195,18],],
'15':[[32,23],[136,25],[200,44],],
'16':[[83,37],[48,61],],
'23':[[158,34],[48,3193],[128,114],[322,116],[224,45],[48,2109],],
'26':[[39,535],[48,306],],
'33':[[200,164],],
'38':[[266,277],],
'54':[[39,495],],
'77':[[384,8897],],
'89':[[48,2797],],
'275':[[384,9204],[384,8963],[384,9612],],
'279':[[39,564],[39,332],],
'501':[[221,33],],
'554':[[48,288],[48,3042],],
'777':[[384,8873],],
'894':[[39,440],[39,910],],
'979':[[302,126],[134,124],],
'1154':[[39,447],],
'1161':[[39,660],],
'1170':[[39,435],],
'1178':[[39,464],[39,944],[39,961],[39,927],],
'1184':[[39,519],],
'1193':[[39,590],],
'1255':[[39,904],],
'1591':[[48,3082],[48,4589],[48,3173],],
'1592':[[48,4884],],
'1762':[[48,3100],],
'4629':[[384,9115],[384,8779],[384,8821],[384,8832],],
},{'7':[[19,95],[171,1170],[63,98],[121,12],[83,124],],
'63':[[12,612],[39,987],],
'82':[[121,600],],
'117':[[331,0],],
},{'19':[[277,980],[355,512],[12,619],],
'546':[[344,68],],
},{'2':[[334,68],[277,988],[12,627],],
'8':[[384,8091],[384,8519],],
'23':[[336,45],[91,25],],
'132':[[384,8981],],
'148':[[358,132],],
'321':[[214,69],],
'656':[[358,118],[261,37],[358,94],],
'792':[[384,8527],],
'869':[[384,8101],],
'1416':[[384,1488],],
'1421':[[303,43],],
},{'19':[[379,111],[338,70],],
'23':[[58,23],[321,351],[135,174],],
'36':[[30,154],[12,630],[277,991],[249,127],],
'63':[[384,2909],],
'67':[[181,633],],
'149':[[232,60],],
'152':[[338,85],],
'154':[[181,594],],
'443':[[165,76],],
'707':[[384,3396],[154,37],[65,181],[175,35],[339,287],[342,305],[342,327],[384,2934],[321,359],],
'926':[[384,4877],],
'2098':[[70,216],[54,136],],
},{'33':[[384,7931],[384,7939],],
'39':[[165,78],],
'55':[[246,706],],
'82':[[217,454],],
'165':[[48,3520],],
'225':[[359,141],],
'321':[[49,69],[277,1008],[12,647],[171,1312],[214,2],[46,56],[277,1002],[226,56],[227,160],[227,244],[12,641],],
'382':[[116,32],],
'696':[[246,210],],
'1123':[[41,295],[217,504],[277,31],[355,236],],
'1203':[[39,653],],
'1278':[[290,127],],
'1309':[[384,7565],],
'1319':[[153,315],],
'5133':[[384,8108],],
},{'2':[[70,99],[384,7372],[18,83],[384,4523],[384,4516],[214,207],[369,485],[341,240],[49,2],[321,195],[49,20],[49,51],[308,75],[49,117],[49,142],[307,240],[171,1081],[88,20],[164,32],[303,194],[303,186],[303,182],[197,82],[160,40],[139,15],],
'9':[[214,32],],
'13':[[384,349],],
'23':[[214,328],],
'54':[[214,335],],
'63':[[214,25],[303,38],[161,424],[227,117],],
'130':[[96,28],],
'499':[[214,324],],
'647':[[277,1003],[12,642],],
'650':[[214,4],[214,65],[12,649],[171,1314],[171,605],[22,11],[22,56],[38,12],[226,58],[139,62],[38,198],[227,152],[227,162],[227,246],[235,223],[241,11],[241,77],[245,11],[245,74],[248,12],[248,73],[252,70],[139,9],[277,1010],[124,63],[124,59],[124,22],[124,6],[49,519],[49,71],[49,9],[46,58],[354,11],[354,94],[355,48],[363,540],[369,1],],
'835':[[214,352],],
'1004':[[384,5587],],
'1225':[[161,430],],
'1491':[[227,132],],
'2037':[[214,93],],
'2341':[[161,446],],
'3099':[[384,7941],],
'4405':[[384,3141],[384,3147],],
'4629':[[384,372],],
},{'2':[[384,5010],[249,112],],
'10':[[384,3023],],
'23':[[161,199],[384,1522],[384,1197],],
'26':[[384,1593],],
'84':[[161,151],],
'92':[[384,5459],[161,345],[161,330],[384,3775],[384,7094],[384,5685],[161,305],[384,7872],[161,359],[384,1587],],
'567':[[358,84],],
'648':[[277,1004],[12,643],],
'649':[[384,5460],],
'656':[[384,5680],],
'792':[[384,491],],
'808':[[384,7097],[384,3785],],
'869':[[384,5917],],
'1160':[[358,39],],
'1249':[[358,266],],
'1503':[[384,3764],],
'1505':[[384,5138],],
'2150':[[214,363],],
'2599':[[384,5344],[161,202],[96,87],],
'4749':[[384,7530],],
},{'7':[[92,8],[248,11],[139,8],[22,10],[240,8],[35,7],[124,58],[38,11],[124,5],[171,369],[171,604],[171,1083],[354,10],[49,8],[241,10],[63,104],[245,10],[56,4],[56,59],[171,1310],[63,5],],
'12':[[171,13],],
'13':[[384,7984],],
'14':[[124,21],[92,19],[261,29],],
'15':[[70,766],[197,137],[197,608],[70,256],],
'20':[[306,102],],
'23':[[355,40],[363,539],[252,69],[235,222],[65,139],[355,47],],
'63':[[227,151],],
'77':[[39,245],],
'82':[[240,50],[227,242],],
'117':[[214,0],[254,0],[369,0],[19,0],],
'140':[[227,145],[266,46],],
'275':[[384,8551],],
'370':[[306,99],[277,230],],
'375':[[49,67],[226,54],[227,158],[46,54],[12,645],[277,1006],],
'468':[[70,101],[384,7970],[306,126],[197,84],[70,148],[197,92],],
'474':[[245,73],],
'647':[[227,161],[171,1313],[12,648],[214,3],[46,57],[49,70],[277,1009],[227,245],[226,57],],
'708':[[354,93],],
'734':[[56,63],[124,62],[63,108],],
'827':[[38,197],],
'829':[[22,55],],
'832':[[92,181],],
'1013':[[35,50],],
'1097':[[248,72],],
'1325':[[184,29],[384,6788],[41,363],],
'1955':[[214,64],],
'2048':[[49,518],],
'2386':[[139,61],],
'2711':[[241,76],],
'3208':[[214,53],],
},{'7':[[171,1137],[315,5],[19,62],[63,65],[302,167],[302,3],[195,70],],
'12':[[314,80],],
'117':[[13,0],],
'236':[[13,16],],
'486':[[315,211],],
'1935':[[48,4154],[306,1496],[48,4275],[48,4587],],
},{'7':[[13,3],[13,39],[19,60],[128,5],[195,68],[63,63],[171,1135],],
'33':[[200,221],],
'63':[[315,157],],
'117':[[315,0],],
'128':[[315,114],],
'173':[[315,16],],
'420':[[48,2707],],
'486':[[128,228],],
'1761':[[48,2722],],
},{'7':[[127,37],[298,37],],
'16':[[277,406],[182,49],],
'23':[[373,87],],
'34':[[266,296],],
'39':[[191,96],[37,54],],
'165':[[158,23],[346,25],[172,80],[236,24],[115,24],[54,1111],[13,24],],
'184':[[209,98],[209,109],[209,88],[181,626],[247,98],[53,115],[270,100],[53,49],[50,59],],
'479':[[220,76],],
'800':[[164,133],],
},{'7':[[171,1111],[19,36],[123,42],[395,5],[123,3],[63,39],[195,44],],
'19':[[315,195],[349,28],[314,25],[315,33],],
'23':[[314,61],[315,41],[39,345],[349,52],],
'26':[[123,32],[123,25],],
'89':[[221,22],[13,27],],
'93':[[349,20],[322,18],[302,18],[48,4229],[48,3214],[117,20],],
'117':[[221,0],],
'139':[[48,4719],],
'486':[[395,150],],
'652':[[315,17],],
'750':[[167,17],],
'751':[[314,17],],
'1329':[[221,16],],
'1759':[[48,2162],],
'1900':[[48,3876],[306,1053],],
'1905':[[48,4157],[306,1499],],
'1941':[[48,4721],],
'4104':[[315,174],],
},{'23':[[160,90],],
'59':[[384,252],],
'67':[[160,110],],
'89':[[160,122],],
'149':[[93,127],],
'152':[[379,196],],
'445':[[220,102],[162,221],[335,2626],[335,2030],[320,131],[65,96],[162,191],],
'478':[[236,28],],
'479':[[315,199],],
'654':[[13,28],],
'740':[[224,90],[158,27],[224,37],],
'741':[[115,28],],
'1575':[[48,437],],
'1755':[[48,3112],],
'1936':[[48,4676],],
'2378':[[253,70],[162,61],],
'2782':[[122,73],],
},{'2':[[358,117],],
'15':[[195,21],],
'19':[[39,524],[261,36],[49,250],],
'23':[[39,277],[345,28],[384,5679],[303,129],],
'26':[[54,989],[54,928],[54,1038],],
'31':[[251,220],[335,3435],[322,93],[302,110],],
'63':[[48,3116],[302,103],[39,602],[48,4680],[322,86],],
'93':[[128,49],[322,40],[302,44],[134,47],[302,38],[322,46],],
'128':[[158,45],[13,30],[115,30],[236,30],],
'149':[[315,75],[289,75],],
'152':[[358,93],],
'215':[[54,1285],],
'237':[[48,3092],[48,4595],],
'372':[[315,65],[289,65],],
'443':[[224,228],],
'479':[[302,41],[322,43],],
'596':[[125,259],],
'603':[[60,77],],
'740':[[128,21],[306,1056],[315,21],[289,21],[48,3879],[322,22],[302,22],[134,21],],
'771':[[303,100],],
'817':[[384,4049],],
'1003':[[173,307],[137,262],],
'1027':[[214,232],],
'1101':[[48,4892],],
'1315':[[86,200],],
'1326':[[384,8776],],
'2858':[[128,46],[134,44],],
},{'7':[[171,494],[217,511],[85,5],[217,3],[92,70],[211,58],[254,133],],
'117':[[14,0],],
'122':[[156,13],],
'213':[[14,15],],
'327':[[196,12],],
'667':[[85,62],],
},{'7':[[14,3],[14,54],[42,43],[231,5],[211,56],[92,68],[171,492],[254,131],],
'117':[[85,0],],
'213':[[85,15],],
'667':[[231,126],],
},{'7':[[14,5],[254,135],[244,55],[235,101],[211,60],[99,3],[171,496],[118,54],[99,303],[92,72],],
'19':[[383,26],],
'23':[[355,971],[355,194],],
'26':[[355,954],[178,107],],
'34':[[355,892],],
'63':[[52,187],],
'93':[[179,1281],[179,833],],
'117':[[217,0],],
'213':[[217,15],],
'217':[[179,1128],],
'375':[[70,444],[197,294],],
'447':[[335,332],],
'449':[[274,195],],
'647':[[290,128],],
'667':[[14,56],],
'915':[[243,158],],
'1101':[[179,699],[118,19],[244,19],],
'1109':[[48,4387],],
'1125':[[179,1085],],
'1279':[[94,22],],
'1281':[[335,1177],[335,2495],[54,377],[335,1891],[197,332],[70,482],],
'1282':[[335,2503],],
'1467':[[153,328],],
'1510':[[54,380],[197,335],[70,485],],
'2179':[[233,28],[235,24],[178,28],],
'2551':[[383,18],],
'2836':[[290,81],],
'3508':[[179,1342],[179,858],],
'3525':[[179,1092],],
'3529':[[179,1131],],
},{'7':[[14,20],],
},{'7':[[14,26],],
'144':[[14,46],],
},{'7':[[14,32],],
},{'7':[[14,38],],
},{'7':[[92,178],[254,241],[89,150],[211,166],[171,602],],
'15':[[14,44],],
'19':[[156,34],],
'23':[[89,454],[213,393],],
'89':[[156,111],],
'117':[[196,0],],
'128':[[196,89],[156,95],],
'215':[[213,48],[363,46],],
'329':[[196,14],],
'395':[[89,34],],
'431':[[363,223],[213,227],],
'593':[[89,475],],
'667':[[309,37],],
},{'12':[[14,48],],
'68':[[164,353],],
'152':[[235,436],],
},{'23':[[181,254],],
'77':[[384,9653],[14,51],],
'130':[[384,6672],],
'926':[[89,303],],
},{'7':[[184,42],[92,38],[254,101],[171,462],[242,14],],
'82':[[242,216],],
'117':[[211,0],],
'264':[[253,232],],
'347':[[337,116],],
'381':[[235,502],],
'387':[[31,54],],
'391':[[85,61],],
'394':[[41,394],],
'399':[[231,125],],
'421':[[310,28],],
'657':[[217,512],],
'658':[[14,55],],
'659':[[99,304],],
'667':[[184,43],],
'668':[[201,27],],
'669':[[15,49],],
'670':[[256,39],],
'682':[[168,42],],
'683':[[98,49],],
'987':[[172,169],],
'988':[[42,1332],],
'1278':[[291,39],],
'1321':[[130,30],],
'1327':[[202,27],],
'1341':[[223,61],],
'1355':[[81,64],],
'1377':[[278,73],],
'1392':[[239,32],],
'1395':[[138,45],],
'1420':[[376,43],],
'1947':[[191,305],],
'1955':[[363,762],],
'1966':[[268,61],],
'1995':[[355,28],],
'2067':[[244,256],],
'2069':[[351,66],],
'2133':[[329,73],],
'2161':[[132,39],],
'2181':[[199,104],],
'2211':[[296,171],],
'2222':[[80,152],],
'2357':[[324,41],],
'2369':[[72,86],],
'2370':[[396,191],],
'2375':[[313,490],],
'2376':[[75,142],],
'2377':[[361,112],],
'2378':[[142,185],],
'2383':[[320,176],],
'2385':[[196,97],],
'2402':[[309,36],],
'2413':[[373,115],],
'2414':[[250,136],],
'2537':[[292,62],],
'2538':[[90,65],],
'2539':[[383,30],],
'2548':[[157,81],],
'2549':[[367,139],],
'2550':[[116,132],],
'2551':[[327,30],],
'2552':[[104,30],],
'2553':[[94,56],],
'2554':[[295,46],],
'2555':[[374,42],],
'2556':[[220,131],],
'2557':[[225,49],],
'2558':[[118,225],],
'2559':[[170,281],],
'2773':[[277,346],],
},{'7':[[171,476],[254,115],[92,52],[201,26],[168,5],[211,40],[201,3],],
'26':[[170,83],],
'39':[[138,40],],
'117':[[15,0],],
'203':[[313,222],],
'301':[[313,475],],
'313':[[15,16],],
'667':[[168,43],],
'1388':[[313,428],],
'2530':[[170,171],],
},{'7':[[15,3],[15,48],[92,50],[376,5],[254,113],[171,474],[211,38],],
'117':[[168,0],],
'313':[[168,16],],
'667':[[376,44],],
'673':[[335,1986],],
},{'7':[[15,5],[256,38],[256,3],[254,117],[211,42],[171,478],[92,54],],
'18':[[84,101],],
'89':[[84,414],[84,256],[84,497],],
'117':[[201,0],],
'152':[[235,196],],
'288':[[84,319],],
'313':[[201,16],],
'451':[[363,291],],
'487':[[84,35],],
'667':[[15,50],],
'2342':[[384,6687],],
},{'15':[[251,141],],
'16':[[258,61],],
'26':[[251,125],],
'31':[[200,67],[141,56],[42,343],[224,73],],
'41':[[384,6664],],
'74':[[290,145],[179,965],],
'75':[[48,3017],[179,1315],[179,1567],[179,1517],[179,1462],[48,2823],],
'99':[[350,121],],
'147':[[260,82],],
'152':[[253,52],],
'162':[[54,592],],
'165':[[218,185],],
'215':[[350,101],],
'217':[[350,61],[133,40],[350,71],[350,51],[48,692],[350,31],[350,21],[350,91],[48,723],[130,18],[133,49],[350,81],[306,830],[306,817],[133,58],[153,342],[133,22],[376,18],[350,111],[350,41],[133,67],[133,31],[15,18],[136,16],],
'237':[[48,1047],[48,1096],[306,646],],
'238':[[384,6689],],
'241':[[306,847],[306,851],],
'299':[[246,1560],],
'314':[[42,1038],],
'468':[[197,108],[197,104],[197,100],[335,73],[335,77],[335,81],[306,152],[306,148],[54,262],[54,266],[54,270],[179,635],[306,144],[179,631],[197,112],[70,156],[70,160],[70,164],[70,168],[179,623],[48,404],[48,398],[48,225],[153,189],[48,221],[153,185],[48,217],[153,181],[48,213],[153,177],[48,204],[179,627],[48,409],[306,140],],
'551':[[306,893],],
'581':[[306,291],[48,633],],
'588':[[48,3354],[306,629],[48,2321],[48,1038],[48,2917],],
'639':[[253,200],],
'671':[[130,19],[153,343],[391,19],[15,19],[376,19],[350,132],[350,122],[42,1039],[350,112],[391,23],[350,102],[48,4937],[133,23],[350,92],[48,724],[350,82],[48,4930],[350,72],[133,32],[350,62],[350,52],[350,42],[350,32],[350,22],[306,908],[133,41],[391,27],[133,50],[306,818],[133,59],[136,17],[133,68],[48,693],[306,831],],
'791':[[42,974],],
'888':[[384,7082],],
'958':[[48,2028],],
'1180':[[350,131],],
'1360':[[42,225],],
'1562':[[48,2845],[48,3224],[48,2872],[48,3262],[48,2803],[48,2808],[48,3269],[48,2240],[48,2234],[48,2865],[48,2224],[48,2202],[48,2208],[48,2218],],
'1632':[[48,1357],],
'1645':[[306,599],[48,2293],[48,3324],[48,1010],[48,2889],],
'1662':[[48,1052],],
'1707':[[153,263],[70,347],[197,184],[179,971],],
'1719':[[384,5982],],
'1723':[[384,6926],],
'1738':[[48,1914],[48,1944],],
'1750':[[54,579],[48,1972],],
'1753':[[48,2047],],
'1788':[[48,3400],[48,3383],],
'1832':[[384,8346],],
'1856':[[48,3958],],
'1919':[[48,4041],[306,1349],],
'1968':[[48,4841],],
'1976':[[48,4929],[48,4936],],
'1988':[[306,907],[306,869],],
'2153':[[179,1277],],
'2180':[[153,439],],
'2194':[[335,1338],[54,914],],
'2210':[[54,982],],
'2415':[[306,1185],],
'2857':[[134,98],[302,95],],
'3178':[[165,71],],
'3494':[[179,747],[179,814],],
'3508':[[179,855],[179,1591],[179,1339],[179,1541],[179,1486],],
'4182':[[306,1290],],
'4294':[[335,833],],
'4329':[[335,2075],[335,2793],],
'4332':[[335,2061],],
'4340':[[335,2191],[335,3038],],
'4361':[[335,2779],],
'4389':[[335,3667],],
'5148':[[391,22],],
'5240':[[391,18],],
'5241':[[391,26],],
},{'7':[[42,134],],
'15':[[152,185],],
'19':[[42,1129],],
'23':[[253,139],[355,1342],[361,69],],
'59':[[335,2087],],
'128':[[15,22],],
'288':[[153,95],],
'431':[[361,44],],
'1479':[[235,322],],
'3750':[[335,2506],],
'4326':[[335,1999],],
},{'19':[[313,387],[313,328],[313,395],],
'23':[[313,411],],
'83':[[15,24],],
'152':[[30,222],],
'422':[[335,1985],[42,283],],
'449':[[170,169],],
'680':[[335,2716],],
'681':[[15,43],[41,345],[335,2725],[138,32],],
'722':[[337,67],],
'880':[[384,8123],],
'1324':[[335,2731],[41,349],],
'1413':[[313,481],],
'2221':[[313,425],],
},{'13':[[384,5325],],
'15':[[15,26],[384,2513],[384,7819],],
'23':[[384,1948],[68,111],[191,157],[191,211],[266,266],[384,2311],[384,6777],[381,178],[335,2729],[381,101],],
'26':[[384,6040],[384,4494],],
'33':[[381,130],[384,7161],],
'59':[[384,5285],[268,55],],
'87':[[384,4830],],
'298':[[381,117],],
'306':[[306,1281],[48,3950],],
'596':[[68,96],[381,72],],
'1004':[[384,6321],],
'1117':[[384,6736],],
'1314':[[384,6726],],
'1369':[[48,3662],],
'1913':[[306,1296],[48,3964],],
'4903':[[384,6800],],
},{'23':[[363,465],],
'674':[[15,27],],
'869':[[384,674],],
},{'34':[[251,152],[384,1269],],
'81':[[274,293],[313,274],],
'275':[[191,100],[396,136],[384,4955],[384,5282],[268,48],],
'674':[[268,56],[384,6041],[384,6778],],
'675':[[15,28],],
'845':[[363,128],],
'2010':[[384,6051],],
},{'23':[[41,335],],
'275':[[41,306],[68,59],[355,383],[15,34],],
},{'677':[[41,307],[68,60],[15,35],],
},{'19':[[171,17],[227,15],],
'678':[[68,61],[15,36],[41,308],],
'1101':[[384,6317],[68,42],],
'1305':[[384,6720],],
'3163':[[384,4724],],
'5081':[[384,6555],],
'5141':[[384,9363],],
},{'3':[[246,835],],
'12':[[335,1363],],
'16':[[138,30],],
'19':[[332,49],[335,1610],[335,1745],[335,1471],[77,62],[15,41],[131,64],],
'23':[[121,209],[335,1961],[95,386],[152,206],[153,663],[153,673],[153,743],[153,785],[54,1252],[153,1313],[162,135],[170,232],[54,1136],[186,322],[186,333],[189,146],[189,481],[335,2704],[48,2668],[246,1191],[313,234],[335,2980],[332,164],[332,173],[335,1496],[355,455],[153,861],],
'33':[[186,293],],
'77':[[384,6905],],
'140':[[42,230],[41,343],],
'217':[[335,1983],[335,2715],],
'298':[[246,826],],
'869':[[95,391],[355,120],],
'926':[[335,1456],],
'931':[[54,429],],
'1305':[[335,1991],],
'1591':[[335,1208],[335,1721],],
},{'12':[[394,162],],
'23':[[170,207],[95,428],[48,4291],[54,1383],],
'26':[[384,4026],],
'39':[[73,58],],
'63':[[394,181],],
'67':[[95,288],[54,721],],
'80':[[384,8164],],
'81':[[30,220],],
'93':[[39,362],],
'128':[[287,26],[286,16],[198,27],[305,24],[101,18],],
'149':[[95,378],],
'154':[[220,52],],
'164':[[50,97],],
'217':[[274,769],[274,306],],
'351':[[49,201],],
'420':[[335,1320],],
'422':[[153,1210],],
'443':[[95,251],[95,450],[54,684],],
'449':[[170,135],],
'518':[[335,2724],[300,23],],
'542':[[384,2428],],
'543':[[95,282],[54,665],[54,781],[54,805],[95,232],[54,715],[54,1374],],
'680':[[138,31],[335,1992],[15,42],[41,344],[54,430],],
'707':[[95,53],[242,42],],
'722':[[335,1358],],
'869':[[95,366],[335,2513],],
'926':[[335,1318],],
'1122':[[39,161],],
'1132':[[181,66],],
'1135':[[181,703],],
'1160':[[335,933],],
'1237':[[220,81],],
'1301':[[170,198],],
'1736':[[213,382],],
'2098':[[384,2437],],
'2141':[[95,489],],
'2583':[[335,2855],[95,439],[335,2383],],
'3197':[[227,59],[171,53],],
'3942':[[335,2441],],
'4620':[[384,332],],
},{'7':[[278,5],[168,41],[168,3],[254,111],[211,36],[92,48],[171,472],],
'12':[[274,215],],
'26':[[75,53],[80,48],[235,475],[363,592],[54,1187],[367,119],[138,38],[142,114],[157,70],[296,52],[355,632],[335,3521],[250,116],[213,389],[170,145],[235,303],],
'86':[[89,374],],
'99':[[335,2528],],
'117':[[376,0],],
'152':[[355,578],[170,85],],
'186':[[42,605],[42,195],],
'217':[[54,1197],],
'301':[[98,46],[89,472],[213,411],[234,423],],
'313':[[376,16],],
'532':[[178,281],],
'667':[[278,74],],
'669':[[168,17],],
'673':[[15,44],],
'682':[[335,2529],],
'707':[[168,23],],
'869':[[274,191],],
'949':[[191,239],],
'1003':[[335,3129],],
'1004':[[335,3524],],
'1333':[[335,753],[335,2456],],
'1423':[[335,2559],],
'1671':[[335,1345],],
'2129':[[54,1195],],
'2160':[[335,1007],],
'2194':[[54,966],[54,918],[335,1341],],
'3702':[[335,2533],],
'3942':[[355,423],],
'4327':[[335,2003],],
'4363':[[335,2842],],
},{'7':[[254,205],[239,5],[92,142],[98,3],[98,48],[171,566],[211,130],],
'117':[[138,0],],
'123':[[138,16],],
'238':[[15,46],],
'667':[[239,33],],
'673':[[41,350],],
},{'7':[[16,5],[245,68],[145,3],[171,690],[145,78],[369,94],],
'117':[[154,0],],
'150':[[145,38],],
'169':[[16,142],],
'173':[[154,16],],
},{'94':[[74,19],[16,19],],
'134':[[74,43],[16,43],],
},{'7':[[330,36],[380,5],[171,660],[245,38],[330,3],[369,64],],
'117':[[386,0],],
'139':[[74,22],[16,22],],
'169':[[380,46],],
'213':[[386,15],],
},{'686':[[74,23],[16,23],],
'700':[[74,62],[16,62],],
},{'7':[[386,26],],
'139':[[54,638],[335,269],[179,1615],[48,1820],],
'389':[[74,25],[16,25],],
},{'328':[[74,27],[16,27],],
'339':[[74,79],[16,79],],
},{'7':[[386,5],[171,662],[245,40],[304,401],[369,66],],
'117':[[330,0],],
'169':[[386,43],],
'213':[[330,13],],
'215':[[16,30],[74,30],],
},{'14':[[16,88],[74,88],],
'690':[[74,31],[16,31],],
},{'7':[[330,18],],
'389':[[74,33],[16,33],],
},{'128':[[74,35],[16,35],],
},{'23':[[384,3919],[384,9009],],
'36':[[339,231],[321,291],[214,158],[161,119],[161,145],[161,167],],
'43':[[161,108],],
'449':[[16,39],[74,39],[190,63],],
'792':[[161,39],],
'821':[[96,171],],
'1998':[[249,71],],
},{'694':[[74,40],[16,40],],
},{'12':[[246,1677],[246,1669],],
'19':[[355,124],[274,256],[246,830],[274,327],[355,581],[335,2516],[70,639],[335,2344],],
'23':[[39,881],[84,159],[27,60],[246,1501],[246,512],],
'26':[[200,239],[355,1296],[113,68],],
'36':[[246,40],],
'40':[[161,353],],
'49':[[153,633],],
'63':[[42,329],],
'82':[[355,907],],
'83':[[217,456],],
'150':[[384,9644],],
'154':[[283,201],[37,69],[308,126],[176,145],[160,99],[340,93],[320,93],[214,176],],
'167':[[246,117],],
'252':[[384,1215],[384,1232],],
'298':[[246,1693],],
'305':[[246,164],],
'343':[[242,186],],
'370':[[381,475],],
'417':[[246,1640],],
'443':[[160,191],[274,228],[181,134],[197,500],],
'502':[[75,123],[75,100],[355,430],],
'542':[[121,199],[112,92],],
'543':[[197,483],[266,349],],
'575':[[384,5741],],
'680':[[153,786],],
'695':[[74,41],[16,41],],
'696':[[246,129],[246,138],],
'707':[[355,1269],],
'722':[[328,28],[328,20],],
'726':[[246,1278],[246,1313],[246,71],],
'880':[[48,4658],],
'926':[[246,128],[277,517],[242,118],[355,1290],],
'940':[[355,913],],
'948':[[217,445],[246,109],[331,294],],
'961':[[54,1428],],
'1004':[[350,188],],
'1109':[[246,137],[384,2217],[384,920],[384,415],[277,504],[355,486],[384,435],[384,458],[246,209],[384,948],],
'1147':[[190,65],],
'1214':[[246,1785],],
'1374':[[49,204],],
'1462':[[355,910],],
'1677':[[179,666],],
'1725':[[179,739],[179,742],[179,713],],
'2907':[[246,1242],],
'3207':[[246,34],],
'3266':[[179,77],],
'3539':[[179,1364],],
'3793':[[229,74],],
'3849':[[246,146],],
},{'23':[[16,56],[74,51],[74,56],[384,7641],[16,51],],
'2675':[[384,9068],],
},{'16':[[16,53],[16,71],[48,2535],[74,53],[74,71],[235,480],],
'31':[[301,34],[355,732],],
'137':[[384,5840],],
'203':[[301,41],],
'469':[[384,2654],],
'1337':[[84,222],],
'1462':[[274,403],],
},{'23':[[135,197],[213,438],[189,595],[396,113],],
'63':[[84,333],],
'281':[[156,36],],
'291':[[86,233],],
'354':[[284,203],],
'482':[[100,197],[135,154],],
'698':[[74,54],[16,54],],
'2528':[[89,309],],
'3575':[[181,322],],
},{'7':[[86,75],[77,70],[131,85],[247,71],[210,53],[137,71],[173,84],[270,73],],
'12':[[270,235],[20,165],],
'14':[[339,294],],
'20':[[384,3954],[384,3971],[384,5231],],
'23':[[49,193],[161,212],[49,308],[49,322],[49,354],[49,498],[384,3772],[249,120],[49,281],[49,165],[384,3783],[111,44],[69,80],],
'26':[[20,74],],
'48':[[321,331],[229,52],[57,247],[74,61],[180,65],[180,58],[57,83],[179,60],[173,241],[48,639],[169,24],[48,602],[153,228],[148,50],[137,196],[304,234],[306,297],[210,153],[358,298],[114,37],[114,22],[20,62],[69,27],[16,61],[306,300],],
'77':[[210,145],[210,49],],
'94':[[285,19],[48,501],[270,19],[131,21],[247,19],[229,19],[82,294],[34,19],[146,19],[137,21],[148,19],[210,19],[82,281],[82,264],[325,19],[82,249],[82,232],[173,21],[77,19],[82,172],[82,50],[86,21],[82,27],],
'121':[[49,255],],
'134':[[148,46],[146,45],[210,51],[285,43],[270,71],[77,68],[247,69],[229,48],[34,44],],
'143':[[82,497],],
'147':[[210,163],],
'230':[[321,346],],
'420':[[82,461],[82,505],[82,466],],
'728':[[173,250],[69,29],[69,45],[137,205],[69,68],],
'778':[[69,91],],
'1029':[[48,521],[48,506],],
'1119':[[82,329],],
'1151':[[384,7600],],
'1576':[[48,510],],
'2078':[[133,85],],
'2258':[[173,82],[131,83],[86,73],[137,69],],
'2259':[[57,215],[57,268],[57,221],],
'2589':[[161,91],],
'2675':[[384,6334],],
'2905':[[210,148],],
'4463':[[384,4492],],
'4813':[[384,1943],],
},{'23':[[74,69],[16,69],],
},{'154':[[16,95],[74,74],[74,95],[16,74],],
'220':[[160,637],],
},{'484':[[74,83],[16,83],],
},{'23':[[74,86],[16,86],],
'133':[[371,47],[280,54],],
'159':[[304,305],],
},{'14':[[304,252],],
'39':[[30,355],],
'43':[[111,63],],
'48':[[343,55],[350,204],],
'63':[[384,6220],[30,370],],
'128':[[106,40],],
'152':[[160,212],[274,564],],
'165':[[384,9349],],
'168':[[321,371],],
'196':[[112,123],],
'221':[[319,49],],
'284':[[384,2626],],
'359':[[58,30],[16,110],[74,110],],
'360':[[102,183],],
'370':[[39,283],],
'436':[[345,31],],
'595':[[30,213],],
'616':[[331,511],],
'681':[[95,283],[54,716],],
'712':[[317,107],],
'741':[[314,72],],
'866':[[313,115],],
'926':[[335,2367],],
'933':[[335,2550],],
'941':[[30,217],],
'1009':[[247,227],],
'1072':[[131,166],],
'1168':[[384,5088],],
'1192':[[181,1029],],
'1308':[[384,859],],
'1470':[[246,1797],],
'1720':[[212,72],],
'2445':[[82,346],],
'2480':[[84,411],],
'2564':[[93,95],],
'2711':[[145,70],],
'2730':[[114,41],],
'2907':[[246,1084],],
},{'73':[[274,756],],
'83':[[84,423],],
'138':[[74,127],[16,127],],
'143':[[181,817],],
'199':[[306,1091],[335,374],],
'242':[[164,374],],
'277':[[153,559],],
'857':[[39,813],],
'926':[[344,190],],
'975':[[30,420],],
'2719':[[384,9066],],
},{'15':[[321,358],[339,286],],
'16':[[395,27],],
'19':[[39,327],[242,41],],
'23':[[48,4704],[48,3140],[342,304],],
'26':[[39,665],],
'33':[[39,444],],
'63':[[384,3395],],
'130':[[39,469],],
'150':[[49,63],],
'154':[[39,341],],
'165':[[39,140],[112,81],],
'177':[[335,3427],],
'225':[[335,3674],],
'237':[[48,3088],[355,1268],[384,8829],[52,276],[376,27],],
'272':[[246,1585],[246,1572],],
'302':[[186,436],],
'462':[[95,52],],
'479':[[39,531],],
'491':[[48,1985],[48,2008],],
'538':[[243,195],],
'595':[[76,71],[16,134],[74,134],],
'952':[[353,157],],
'1121':[[39,148],],
'1151':[[175,34],[154,36],],
'1183':[[39,510],],
'1195':[[39,629],],
'1207':[[39,674],],
'1255':[[246,1205],],
'1393':[[246,1026],],
'1462':[[384,2933],],
'1557':[[257,55],],
'1714':[[65,180],[342,326],],
'2867':[[246,538],],
'3180':[[168,22],],
'4291':[[335,685],],
},{'7':[[17,5],[369,141],[66,29],[354,92],[241,69],[171,737],],
'15':[[388,52],],
'117':[[155,0],],
'140':[[304,173],],
'178':[[17,40],],
'709':[[155,15],],
},{'7':[[171,707],[369,111],[317,131],[241,39],],
'89':[[164,393],[164,108],[164,409],],
'93':[[317,19],[304,20],[155,14],[317,16],[17,16],],
'117':[[365,0],],
'178':[[388,92],],
'259':[[141,68],[143,47],],
'375':[[164,507],],
'722':[[370,50],[61,76],[67,43],],
'1329':[[365,12],],
'3173':[[164,639],],
},{'7':[[171,703],[369,107],[365,231],[241,35],],
'117':[[388,0],],
'172':[[17,18],],
'178':[[164,670],],
'213':[[388,11],],
'375':[[155,36],],
'708':[[155,16],],
},{'8':[[384,9408],],
'15':[[304,170],],
'65':[[235,410],],
'89':[[17,23],],
'153':[[235,379],],
'912':[[235,406],],
},{'7':[[304,168],],
'19':[[82,547],[365,213],],
'23':[[356,46],[173,231],[137,186],[317,24],[343,49],[317,38],[343,26],[317,106],[82,536],],
'52':[[164,436],],
'121':[[356,30],],
'128':[[82,302],],
'147':[[173,227],[137,182],],
'154':[[164,505],],
'155':[[356,37],[190,45],],
'205':[[164,422],],
'224':[[343,90],],
'247':[[155,22],],
'259':[[164,494],],
'307':[[343,66],],
'322':[[164,659],],
'540':[[343,45],[317,116],],
'711':[[17,24],],
'1019':[[190,24],],
'1027':[[317,68],[317,129],],
'1051':[[131,105],[57,115],[86,108],[137,91],[270,112],[247,110],[173,136],[77,90],],
'1052':[[82,246],[82,225],[82,213],[82,200],[173,36],[82,278],[82,182],[82,169],[82,291],[82,153],[247,31],[82,516],[270,31],[82,455],[82,141],[82,129],[82,115],[57,34],[137,28],[131,28],[82,96],[82,76],[86,32],[343,22],[82,62],[82,45],[82,24],[82,261],[77,26],],
'1151':[[61,88],[370,62],[67,55],],
'1515':[[317,83],],
'3173':[[317,52],],
},{'27':[[358,159],],
'63':[[209,254],],
'67':[[90,61],[90,28],[17,26],[155,24],],
'128':[[228,29],[356,24],],
'199':[[363,124],],
'277':[[384,94],[54,1159],[116,85],],
'382':[[116,101],],
'821':[[96,22],],
'2081':[[384,7891],],
'2589':[[161,381],[214,330],],
},{'16':[[39,324],],
'178':[[155,26],[17,28],],
'514':[[335,3358],],
'600':[[48,1545],],
'2975':[[232,100],],
'3746':[[384,386],],
},{'23':[[17,31],],
'241':[[48,1994],[48,2017],],
'288':[[48,194],],
},{'16':[[266,83],],
'23':[[266,90],[266,136],],
'39':[[164,604],],
'63':[[21,120],],
'506':[[214,131],],
'715':[[17,32],],
},{'7':[[171,1077],[106,5],[369,481],[139,58],],
'117':[[18,0],],
'173':[[18,14],],
'733':[[106,63],],
},{'7':[[18,3],[353,5],[18,78],[171,1075],[139,56],[369,479],],
'33':[[18,69],],
'117':[[106,0],],
'173':[[106,16],],
'733':[[353,192],],
},{'26':[[18,76],[18,43],],
'94':[[18,16],],
'134':[[18,31],],
'147':[[18,49],],
},{'182':[[18,18],],
'725':[[18,38],],
},{'420':[[18,26],],
},{'3':[[355,838],],
'7':[[328,27],[170,52],],
'12':[[358,385],[261,215],],
'23':[[61,75],[67,42],[84,464],[370,49],[48,3328],[357,27],[153,1053],[154,31],[162,172],[48,2297],[170,109],[175,29],[218,215],[228,37],[261,69],[48,2893],[275,20],[275,28],[306,603],[313,79],[356,21],[48,1014],[18,28],[337,66],],
'34':[[85,45],],
'39':[[384,5321],],
'288':[[106,23],[328,19],],
'926':[[335,1357],],
'2240':[[54,1469],],
'4455':[[353,159],],
},{'14':[[384,9762],],
'19':[[34,133],[82,528],],
'23':[[34,47],],
'67':[[358,366],[261,195],[358,360],],
'73':[[210,170],],
'94':[[82,203],],
'147':[[82,478],],
'152':[[285,134],[133,110],],
'468':[[277,235],],
'482':[[34,41],],
'581':[[243,255],[384,4040],[246,1836],],
'722':[[18,29],],
'1504':[[384,9721],],
'2594':[[161,506],],
'3119':[[384,5466],],
'5126':[[384,7956],],
},{'7':[[18,33],[150,34],[169,38],[103,34],],
'15':[[277,494],],
'19':[[333,20],[103,77],[104,23],[150,77],[383,23],[327,23],],
'23':[[353,173],],
'420':[[384,8811],],
'579':[[71,69],[382,69],],
'671':[[48,218],[306,145],[179,628],[153,182],[335,82],[54,271],[70,161],[197,105],],
'2327':[[150,28],],
'2683':[[103,28],],
},{'31':[[42,447],[18,37],],
},{'7':[[253,45],[157,29],[142,94],[81,31],[18,40],],
'16':[[246,70],[246,1273],],
'19':[[246,1104],[246,1635],],
'23':[[196,54],[196,65],[54,1190],[313,436],[156,60],[313,96],[156,71],[363,548],],
'36':[[246,1691],],
'63':[[246,1277],[246,1320],],
'67':[[313,447],],
'339':[[176,121],],
'343':[[246,1514],],
'926':[[246,1316],],
'1325':[[48,3528],],
'1675':[[48,1872],],
'2010':[[246,1338],],
'3927':[[246,1312],],
'4204':[[313,302],],
},{'23':[[18,46],],
'1671':[[179,891],],
},{'2':[[357,47],],
'12':[[173,249],[137,204],],
'15':[[384,121],],
'23':[[57,110],[347,22],[287,58],[69,67],[77,85],[347,40],[247,105],[246,517],[86,103],[44,71],[173,131],[164,661],[131,100],[137,86],[270,107],[153,626],[155,29],[164,601],[18,64],],
'63':[[246,597],],
'89':[[203,29],[338,58],[54,167],[232,65],[82,431],[263,28],[338,24],[338,64],[82,438],],
'128':[[107,18],[129,16],],
'149':[[353,186],],
'224':[[69,44],],
'322':[[228,26],],
'700':[[69,28],],
'722':[[357,28],[228,38],],
'729':[[106,32],],
'909':[[54,212],],
'1381':[[232,73],],
'2066':[[82,448],],
},{'33':[[106,31],],
'728':[[18,65],],
},{'16':[[18,67],],
'31':[[213,466],],
'349':[[177,39],],
},{'73':[[18,72],],
},{'23':[[189,537],[396,116],[396,102],],
'77':[[18,74],],
'857':[[384,560],],
},{'47':[[18,80],[28,91],[49,6],[103,129],[106,62],[114,73],[139,1],[150,129],[169,74],[171,1041],[192,46],[205,46],[216,46],[237,46],[248,17],[271,46],[299,46],[328,38],[353,191],[357,52],[357,54],[369,445],[385,76],],
},{'23':[[336,96],[384,2242],],
'63':[[125,153],],
'149':[[125,76],],
'374':[[35,53],[38,14],[38,200],[49,11],[49,521],[56,7],[56,62],[56,66],[63,8],[63,107],[63,111],[92,11],[92,184],[124,8],[124,61],[124,65],[35,10],[22,58],[19,3],[139,11],[139,64],[171,372],[171,607],[171,1086],[240,11],[240,53],[241,13],[241,79],[245,13],[245,76],[248,14],[248,75],[254,3],[22,13],[354,13],[354,96],[369,3],],
'2846':[[125,236],],
},{'7':[[19,22],[38,36],[56,19],[63,25],[92,40],[139,24],[171,377],[171,464],[171,648],[171,751],[171,840],[171,1004],[171,1043],[171,1097],[195,30],[211,28],[245,26],[248,35],[254,16],[254,103],[354,40],[369,52],[369,155],[369,244],[369,408],[369,447],],
'3053':[[384,3144],],
},{'7':[[19,24],[32,3],[32,29],[195,32],[171,1099],[63,27],],
'117':[[136,0],],
'313':[[136,14],],
'486':[[39,995],],
'671':[[200,68],[224,74],],
'1423':[[48,3080],[48,4580],],
},{'7':[[19,26],[195,34],[171,1101],[63,29],[126,3],[126,38],[136,3],],
'18':[[158,43],[224,54],],
'117':[[32,0],],
'313':[[32,16],],
'486':[[136,30],],
},{'7':[[32,5],[345,82],[195,36],[171,1103],[63,31],[19,28],],
'117':[[126,0],],
'313':[[126,14],],
'486':[[32,31],],
'1827':[[48,3402],[48,3406],[48,2946],[48,3396],],
'1832':[[322,209],[126,26],[128,207],],
'5144':[[384,8316],],
},{'7':[[19,30],[38,66],[369,274],[56,37],[63,33],[92,84],[124,30],[171,395],[171,508],[171,615],[171,664],[171,705],[171,870],[171,1105],[377,22],[195,38],[211,72],[241,37],[245,42],[369,109],[369,68],[254,34],[254,147],[369,19],],
'277':[[251,83],[48,4875],[251,241],],
'3263':[[178,304],],
},{'7':[[19,32],[395,3],[224,36],[395,148],[195,40],[171,1107],[63,35],],
'15':[[345,20],],
'19':[[224,29],[221,27],],
'23':[[289,68],[315,68],[224,89],],
'89':[[158,26],],
'93':[[128,20],[48,3211],[315,20],[322,21],[302,21],[289,20],[48,2746],[134,20],],
'117':[[345,0],],
'149':[[224,215],],
'199':[[224,203],],
'476':[[224,17],],
'479':[[306,1055],[48,3878],],
'486':[[126,40],],
'625':[[48,2158],],
'1329':[[345,14],],
'1755':[[48,3149],],
'1762':[[48,3147],],
'1904':[[306,1532],[48,4192],],
'1917':[[48,4711],],
'1936':[[48,4713],],
},{'7':[[19,38],[158,54],[195,46],[221,5],[171,1113],[63,41],[83,133],],
'19':[[314,28],[123,40],[349,25],],
'23':[[314,71],[314,52],],
'89':[[123,20],[115,27],],
'93':[[314,20],[167,20],],
'117':[[123,0],],
'275':[[384,9083],],
'486':[[221,37],],
'747':[[48,4262],],
'748':[[117,17],],
'749':[[349,17],],
'1329':[[123,14],],
'1853':[[306,1391],[48,4083],],
'1927':[[48,4085],[48,4264],[306,1393],],
},{'7':[[236,39],[171,1117],[236,3],[195,50],[63,45],[19,42],],
'52':[[48,3151],],
'117':[[158,0],],
'236':[[158,14],],
'241':[[345,64],],
'333':[[48,3097],],
'486':[[123,44],],
'1937':[[306,1527],[48,4187],[48,4583],],
},{'7':[[19,44],[195,52],[171,1119],[346,34],[158,3],[63,47],[346,3],],
'52':[[48,2835],[48,2830],[48,3160],],
'117':[[236,0],],
'236':[[236,16],],
'241':[[395,67],],
'333':[[48,3095],],
'486':[[158,56],],
},{'7':[[19,46],[236,5],[224,235],[63,49],[224,3],[195,54],[171,1121],],
'31':[[306,579],],
'117':[[346,0],],
'236':[[346,16],],
'301':[[322,218],[126,35],[128,216],],
'420':[[384,8971],],
'486':[[236,41],],
'1364':[[302,76],[134,79],],
'1820':[[48,2941],],
'1844':[[48,3378],],
},{'7':[[289,5],[63,59],[128,3],[195,64],[128,226],[171,1131],[19,56],],
'12':[[346,32],],
'77':[[128,107],],
'117':[[134,0],],
'236':[[134,16],],
'486':[[289,198],],
'1830':[[48,2957],],
},{'7':[[19,58],[315,3],[63,61],[195,66],[171,1133],[134,5],[315,209],],
'117':[[128,0],],
'123':[[128,16],],
'486':[[134,167],],
'1834':[[48,2976],],
},{'7':[[19,68],[322,5],[195,76],[63,71],[171,1143],[117,51],[117,3],],
'117':[[115,0],],
'236':[[115,16],],
'486':[[322,230],],
'671':[[48,4042],[306,1350],],
'1364':[[349,72],],
'1945':[[48,4261],],
},{'7':[[19,70],[349,88],[63,73],[115,5],[349,3],[171,1145],[195,78],],
'117':[[117,0],],
'236':[[117,16],],
'486':[[115,41],],
'489':[[384,2501],],
'1919':[[48,4269],],
},{'7':[[19,72],[63,75],[117,5],[195,80],[171,1147],[167,3],[167,51],],
'117':[[349,0],],
'236':[[349,16],],
'375':[[117,26],],
'486':[[117,53],],
},{'7':[[19,74],[349,5],[63,77],[314,112],[314,3],[171,1149],[195,82],],
'63':[[384,2503],],
'117':[[167,0],],
'123':[[167,16],],
'147':[[48,4165],],
'486':[[349,90],],
},{'7':[[195,84],[63,79],[91,3],[91,47],[167,5],[171,1151],[19,76],],
'13':[[384,8246],],
'117':[[314,0],],
'123':[[314,16],],
'147':[[306,1507],],
'375':[[167,26],],
'486':[[167,53],],
'838':[[306,1512],],
'1592':[[48,4172],],
},{'7':[[19,78],[314,5],[200,315],[63,81],[200,3],[195,86],[171,1153],],
'117':[[91,0],],
'123':[[91,16],],
'147':[[48,2585],[48,2175],],
'150':[[384,3103],],
'453':[[257,170],[200,288],],
'486':[[314,114],],
},{'7':[[19,80],[63,83],[91,5],[257,197],[171,1155],[195,88],[257,3],],
'26':[[257,48],[257,114],],
'117':[[200,0],],
'123':[[200,16],],
'375':[[384,8814],],
'486':[[91,49],],
},{'7':[[19,82],[200,5],[63,85],[171,1157],[195,90],],
'117':[[257,0],],
'123':[[257,14],],
'486':[[200,317],],
'1801':[[48,2640],],
},{'7':[[19,106],[240,22],[120,3],[120,30],[171,1181],],
'79':[[303,175],],
'117':[[340,0],],
'150':[[340,84],],
'173':[[340,14],],
'734':[[240,54],],
'1703':[[48,1695],],
},{'7':[[19,108],[341,282],[341,3],[340,3],[171,1183],[240,24],],
'15':[[352,28],[29,34],],
'117':[[120,0],],
'173':[[120,16],],
'274':[[341,274],],
'376':[[340,171],],
},{'7':[[19,110],[293,140],[120,5],[293,3],[240,26],[171,1185],],
'117':[[341,0],],
'140':[[120,24],],
'173':[[341,16],],
'375':[[120,28],],
'376':[[120,33],],
'1705':[[48,1698],],
},{'7':[[341,5],[171,1187],[183,3],[183,117],[240,28],[19,112],],
'63':[[384,5639],],
'117':[[293,0],],
'150':[[293,97],],
'376':[[341,285],],
'765':[[293,16],],
'1701':[[48,1691],],
},{'7':[[19,114],[293,5],[171,1189],[240,30],[298,70],],
'117':[[183,0],],
'376':[[293,143],],
'766':[[183,14],],
'1702':[[48,1693],],
},{'7':[[19,116],[22,48],[35,35],[38,188],[56,53],[92,176],[171,411],[171,432],[171,600],[171,739],[171,799],[171,825],[171,992],[171,1036],[171,1191],[211,164],[240,32],[241,71],[248,67],[254,50],[254,71],[254,239],[354,88],[369,143],[369,203],[369,229],[369,396],[369,440],],
},{'7':[[19,118],[171,1193],[297,37],[240,34],[297,3],],
'117':[[298,0],],
'329':[[298,16],],
'376':[[183,120],],
'755':[[340,15],],
},{'7':[[29,3],[29,199],[171,1195],[240,36],[298,3],[19,120],],
'117':[[297,0],],
'329':[[297,18],],
'376':[[298,73],],
'4195':[[340,17],],
},{'7':[[19,122],[352,3],[297,5],[240,38],[171,1197],[352,161],],
'117':[[29,0],],
'329':[[29,18],],
'376':[[297,40],],
'756':[[120,17],],
'757':[[341,17],],
},{'7':[[29,5],[171,1199],[71,3],[71,90],[240,40],[19,124],],
'117':[[352,0],],
'329':[[352,18],],
'376':[[29,202],],
'2400':[[120,19],[341,19],],
},{'7':[[19,126],[387,3],[352,5],[171,1201],[240,42],[387,106],],
'117':[[71,0],],
'122':[[293,15],],
'329':[[71,18],],
'376':[[352,164],],
'758':[[293,17],],
},{'7':[[71,5],[240,44],[171,1203],[19,128],],
'117':[[387,0],],
'122':[[183,13],],
'329':[[387,16],],
'376':[[71,93],],
'759':[[183,15],],
},{'7':[[38,132],[285,5],[171,936],[34,3],[34,135],[369,340],],
'49':[[285,159],],
'117':[[20,0],],
'228':[[20,16],],
'375':[[24,27],],
},{'7':[[20,3],[20,182],[38,130],[171,934],[146,5],[369,338],],
'49':[[146,177],],
'117':[[285,0],],
'228':[[285,16],],
'375':[[43,22],],
},{'7':[[20,5],[171,938],[38,134],[36,193],[36,3],[369,342],],
'49':[[20,188],],
'117':[[34,0],],
'228':[[34,16],],
},{'94':[[82,185],[24,19],[20,19],],
'134':[[20,48],],
},{'7':[[316,82],[316,93],],
'12':[[303,99],],
'26':[[316,104],],
'63':[[384,6895],],
'123':[[24,24],[82,190],[20,24],],
'164':[[86,243],],
'700':[[82,467],],
'780':[[20,66],],
'1003':[[316,73],],
'1132':[[316,78],],
'1500':[[57,303],],
'4220':[[316,112],],
},{'7':[[171,763],[369,167],[152,3],[354,52],[152,225],],
'117':[[194,0],],
'213':[[194,13],],
'215':[[213,97],],
'232':[[259,57],],
'375':[[284,102],[86,134],[283,73],[100,72],[270,138],[269,101],[135,77],[285,65],[137,117],[247,136],[146,68],[229,95],[148,84],[57,141],[332,75],[36,73],[34,66],[173,162],[210,77],[180,89],[209,132],[394,75],[20,92],[187,86],],
'409':[[209,33],[187,30],[210,24],[180,29],[173,43],[229,28],[148,26],[247,38],[146,24],[137,35],[269,29],[135,25],[270,38],[131,35],[283,27],[100,25],[284,30],[86,39],[285,24],[77,33],[332,23],[57,41],[36,25],[34,24],[394,25],[20,29],],
'4903':[[384,4217],],
},{'128':[[194,39],],
'230':[[194,63],],
'362':[[194,57],],
'407':[[210,69],[229,87],[20,84],[36,65],[34,58],[394,67],[332,67],[57,133],[247,128],[187,78],[285,57],[86,126],[180,81],[269,93],[100,64],[173,154],[284,94],[148,76],[135,69],[270,130],[283,65],[137,109],[209,124],[146,60],],
'431':[[270,133],[146,63],[135,72],[283,68],[148,79],[269,96],[100,67],[173,157],[284,97],[86,129],[180,84],[247,131],[285,60],[187,81],[394,70],[57,136],[36,68],[332,70],[229,90],[34,61],[210,72],[20,87],[137,112],[209,127],],
'772':[[210,25],[209,34],[34,25],[229,29],[394,26],[36,26],[247,39],[57,42],[187,31],[269,30],[180,30],[173,44],[270,39],[148,27],[146,25],[283,28],[137,36],[135,26],[284,31],[131,36],[100,26],[285,25],[86,40],[77,34],[332,24],[20,30],],
'790':[[194,88],],
'1302':[[384,4239],[194,98],],
'1359':[[194,49],],
'2487':[[194,85],],
},{'7':[[194,18],],
'31':[[384,4230],],
'229':[[194,60],],
'389':[[57,44],[77,36],[86,42],[100,28],[131,38],[135,28],[36,28],[146,27],[148,29],[34,27],[332,26],[173,46],[180,32],[187,33],[137,38],[285,27],[20,32],[209,36],[210,27],[213,100],[229,31],[247,41],[269,32],[270,41],[283,30],[284,33],[394,28],],
'2301':[[153,1154],[153,1376],],
'3691':[[194,25],],
},{'19':[[20,45],],
'152':[[146,169],],
},{'12':[[344,125],],
'16':[[46,74],],
'19':[[44,35],],
'23':[[36,48],[207,48],[44,91],[207,63],[53,88],[207,43],[287,51],[283,147],[394,55],],
'26':[[113,59],],
'48':[[146,43],[283,45],],
'49':[[332,42],[153,855],[131,54],[180,48],[210,43],[247,57],[270,57],[77,52],],
'154':[[181,853],],
'223':[[285,41],],
'241':[[100,44],[135,44],],
'290':[[284,47],],
'360':[[287,31],],
'447':[[36,43],],
'470':[[269,46],[209,50],],
'543':[[181,830],],
'723':[[34,42],],
'775':[[20,46],],
'777':[[187,49],],
'1079':[[260,31],[260,40],],
'1229':[[153,1076],],
'2053':[[207,28],[148,44],],
'3001':[[283,155],],
'3790':[[229,46],],
},{'7':[[82,464],],
'12':[[187,61],[20,53],],
'13':[[384,9845],[384,3898],[384,8872],],
'23':[[20,168],[270,242],],
'48':[[187,48],],
'63':[[270,68],],
'469':[[384,5694],],
'784':[[20,157],],
'939':[[57,253],],
'2675':[[384,7387],],
},{'12':[[187,63],],
'15':[[210,61],],
'19':[[69,90],],
'23':[[137,190],[173,235],],
'223':[[285,49],],
'345':[[137,202],[173,247],],
'482':[[34,50],],
'700':[[20,63],[180,66],[180,59],],
'777':[[20,54],],
'875':[[229,55],[148,53],],
'1229':[[131,91],[86,81],[77,76],[247,77],[137,77],[270,79],[173,90],],
'1878':[[57,88],],
'2918':[[146,52],],
},{'778':[[20,55],[20,64],[34,51],[57,89],[77,77],[86,82],[270,80],[131,92],[137,78],[146,53],[148,54],[247,78],[173,91],[187,64],[210,62],[229,56],[285,50],],
'979':[[103,100],[150,100],],
},{'26':[[355,1244],],
'99':[[384,3188],[384,3239],[384,3336],[390,100],[384,3368],[384,3470],[384,3508],[384,3579],[384,3713],[384,4733],[384,4551],[384,4481],[384,4465],[384,4247],[384,3818],[68,101],[384,4001],[290,451],[384,4408],[384,4131],[179,397],[384,3185],[384,4306],[384,4361],],
'100':[[384,1465],],
'152':[[42,161],[355,1363],[42,493],],
'217':[[179,402],[384,9289],[290,456],],
'309':[[51,22],],
'349':[[384,7627],],
'642':[[39,448],[39,928],],
'671':[[306,909],[391,28],],
'779':[[86,83],[77,78],[285,51],[57,90],[270,81],[247,79],[229,57],[20,56],[131,93],[210,63],[187,65],[137,79],[146,54],[173,92],[34,52],[20,65],[148,55],],
'780':[[384,3819],],
'791':[[384,7572],[384,6450],[384,6352],[384,5495],],
'792':[[150,109],[103,109],],
'957':[[162,312],],
'1117':[[358,147],[358,127],],
'1120':[[384,1320],],
'1125':[[384,1389],],
'1156':[[39,473],],
'1264':[[39,959],],
'1281':[[41,33],],
'1598':[[48,1636],[48,1578],],
'1698':[[48,1670],[48,1594],],
'1915':[[384,2559],[384,3305],[384,2630],[384,3332],[384,539],],
'2132':[[335,538],],
'3239':[[174,174],],
'3749':[[217,69],],
'4166':[[306,833],],
'4568':[[379,69],],
'4748':[[384,1172],],
'4803':[[384,4004],],
'4845':[[384,8705],],
'4931':[[384,6939],[384,5541],[384,9590],],
},{'31':[[20,78],],
},{'14':[[358,346],[261,186],],
'25':[[161,321],],
'29':[[384,872],],
'30':[[384,8723],],
'503':[[384,9055],],
'607':[[100,131],[135,136],[137,176],[146,127],[148,143],[394,134],[86,193],[176,168],[180,148],[36,132],[209,191],[210,136],[229,154],[173,221],[57,200],[247,195],[20,151],[269,160],[270,197],[283,132],[284,161],[285,124],[332,134],[34,125],[187,145],],
'949':[[384,7024],],
'1033':[[395,129],],
'1374':[[384,7294],],
'1474':[[384,5968],],
'1679':[[48,1650],],
'2076':[[235,358],],
'2160':[[384,1058],],
'2388':[[384,5222],[384,7241],],
'3815':[[235,425],],
'4106':[[384,3326],],
'4581':[[384,1485],],
'5053':[[384,5920],],
'5184':[[384,9465],],
},{'77':[[48,1750],],
'206':[[384,7798],],
'288':[[197,178],[153,257],[70,341],],
'464':[[57,203],[86,196],[100,134],[36,135],[137,179],[146,130],[148,146],[34,128],[173,224],[180,151],[187,148],[135,139],[209,194],[210,139],[229,157],[247,198],[269,163],[270,200],[283,135],[284,164],[285,127],[20,154],[332,137],[394,137],],
'1606':[[306,411],],
},{'55':[[49,361],],
'128':[[34,130],[146,132],[285,129],[20,156],],
'285':[[54,459],],
'2157':[[54,1452],],
},{'7':[[38,128],[135,5],[285,153],[285,3],[171,932],[369,336],],
'19':[[146,163],],
'49':[[135,229],],
'117':[[146,0],],
'140':[[285,136],[20,161],],
'228':[[146,16],],
},{'12':[[381,362],[52,253],[285,141],[20,170],],
'19':[[146,40],],
'904':[[48,2581],],
},{'23':[[20,172],],
},{'12':[[96,89],],
'39':[[84,441],],
'89':[[384,4696],[384,7260],[384,4326],[384,9344],],
'130':[[285,150],[20,179],],
'447':[[42,633],],
'470':[[384,5562],],
'656':[[173,308],[137,263],],
'844':[[190,49],],
'1781':[[277,934],[335,1654],[142,161],[335,1803],],
'2285':[[86,212],],
'3125':[[384,9265],],
},{'144':[[335,3022],[335,2170],],
'788':[[285,151],[20,180],],
'1479':[[384,644],],
'2010':[[191,264],],
},{'2':[[312,18],],
'13':[[384,9887],],
'16':[[194,101],],
'18':[[306,776],[274,58],],
'23':[[164,305],[164,226],[331,158],[331,138],[164,143],],
'31':[[301,48],],
'33':[[384,7682],],
'47':[[55,35],[57,312],[60,106],[64,32],[53,147],[50,114],[69,95],[379,224],[77,148],[79,58],[82,564],[86,262],[100,207],[107,26],[109,33],[110,45],[378,38],[113,72],[119,26],[129,24],[369,236],[131,171],[133,130],[135,225],[137,275],[146,173],[148,167],[43,26],[38,1],[36,195],[165,84],[166,28],[171,832],[173,334],[34,137],[180,229],[181,5],[181,1035],[181,1040],[187,203],[190,80],[364,52],[27,67],[203,84],[207,116],[356,60],[209,273],[210,184],[348,29],[228,47],[229,197],[232,136],[238,31],[347,65],[247,266],[248,6],[255,28],[260,103],[263,102],[269,226],[343,107],[270,253],[272,53],[273,52],[24,31],[276,82],[282,34],[283,253],[284,229],[285,155],[286,45],[287,105],[44,149],[22,16],[393,30],[312,33],[312,65],[316,123],[323,27],[325,30],[177,59],[20,184],[338,94],[332,191],[394,205],],
'59':[[384,7634],],
'152':[[112,104],],
'160':[[247,211],[77,126],[209,207],[270,213],[332,150],[131,141],],
'279':[[211,18],[335,52],],
'449':[[384,576],],
'796':[[21,105],],
'858':[[38,27],],
'931':[[194,87],],
'2316':[[65,170],[342,316],],
},{'15':[[99,69],],
'48':[[274,476],],
'63':[[384,9322],],
'67':[[384,6512],],
'82':[[277,466],[178,112],[277,484],[244,53],[306,232],[355,197],[384,8655],[306,203],[52,59],[277,511],[217,492],[384,6473],[48,812],[118,52],[42,1071],[217,283],[217,278],[48,783],],
'140':[[274,267],],
'237':[[235,99],],
'284':[[42,973],],
'322':[[217,267],],
'395':[[384,8197],],
'417':[[274,788],],
'449':[[274,299],[42,917],[384,2422],[384,5494],[384,6449],[384,5334],[188,125],],
'546':[[246,258],],
'659':[[335,333],[335,1178],[48,4388],[197,336],[70,486],[54,381],[335,1892],[335,2496],[335,2504],[179,1343],[179,859],[197,333],[244,20],[54,378],[235,25],[118,20],[70,483],],
'790':[[86,263],[100,208],[107,27],[109,34],[110,46],[113,73],[82,565],[356,61],[119,27],[129,25],[348,30],[347,66],[131,142],[131,172],[133,131],[135,226],[137,276],[146,174],[343,108],[148,168],[164,144],[164,227],[164,306],[342,317],[165,85],[79,59],[171,833],[173,335],[177,60],[77,149],[77,127],[338,95],[364,53],[369,237],[378,39],[180,230],[181,6],[379,225],[69,96],[65,171],[335,53],[181,1036],[181,1041],[332,192],[332,151],[325,31],[187,204],[64,33],[190,81],[323,28],[316,124],[194,102],[312,66],[60,107],[57,313],[312,34],[203,85],[207,117],[312,19],[209,208],[209,274],[55,36],[210,185],[211,19],[53,148],[287,106],[286,46],[285,156],[284,230],[50,115],[283,254],[44,150],[43,27],[282,35],[38,28],[38,2],[228,48],[229,198],[232,137],[384,7635],[384,9888],[238,32],[20,185],[393,31],[36,196],[34,138],[27,68],[276,83],[247,212],[247,267],[248,7],[255,29],[24,32],[260,104],[263,103],[269,227],[22,17],[21,106],[270,214],[270,254],[272,54],[273,53],[274,59],[166,29],[394,206],],
'851':[[147,22],[37,39],[37,58],[37,24],[37,43],[37,29],[258,56],],
'915':[[384,1207],],
'931':[[384,6055],[384,8266],],
'1004':[[290,50],],
'1034':[[37,78],],
'1101':[[335,1184],[335,2656],[179,1353],[70,535],[70,520],],
'1109':[[384,7220],],
'1184':[[274,238],],
'1245':[[186,145],[181,788],[181,729],[186,288],[321,249],],
'1249':[[217,273],],
'1282':[[335,389],],
'1302':[[194,92],[209,197],[194,74],[210,41],[247,201],[332,140],[247,55],[270,55],[270,203],[335,62],[332,40],[377,17],[274,73],[77,50],[131,131],[180,46],[77,116],[131,52],],
'1304':[[384,4433],],
'1342':[[274,760],[274,774],],
'1359':[[164,611],[186,282],[181,34],],
'1448':[[217,391],],
'1455':[[226,67],[384,8745],[384,2999],[336,151],[384,7120],[46,67],[384,4790],[384,4580],[384,4454],[384,3209],[274,146],],
'1457':[[384,1329],],
'1463':[[42,998],],
'1510':[[197,266],[70,416],],
'1765':[[217,216],[217,226],[217,188],[217,197],[217,207],],
'1828':[[197,384],[70,584],],
'1949':[[48,4397],],
'2126':[[54,445],[335,1419],[335,342],[335,1926],[335,405],[335,1717],[335,1204],[335,2667],[335,1566],],
'2348':[[384,2867],[384,447],[384,456],[384,578],[384,817],[246,231],],
'2384':[[274,753],[274,472],],
'2442':[[181,22],[82,306],],
'2453':[[82,559],],
'2551':[[179,865],],
'2631':[[384,4974],[384,908],[384,939],[384,7238],[384,7841],[384,1361],[384,1220],],
'2816':[[384,2840],],
'3162':[[274,684],],
'3229':[[384,8568],[384,7571],],
'3276':[[384,4929],],
'3378':[[384,7903],],
'3850':[[355,952],],
'4316':[[335,1578],[335,1432],],
'5039':[[384,5403],],
'5072':[[384,6351],],
},{'2':[[384,3741],[384,5341],[384,5452],],
'3':[[96,10],[384,374],[384,267],[384,218],[96,198],[96,202],[384,3091],[339,274],[339,199],[96,3],[21,193],[161,3],[161,33],[303,47],[161,44],[161,59],[161,141],[161,307],[161,377],[161,426],[21,9],[161,530],[161,602],[164,575],[164,616],[171,143],[171,148],[208,55],[208,60],[208,113],[214,314],[227,270],[227,275],[249,61],[249,133],[277,248],[384,2122],],
'9':[[384,1894],],
'13':[[384,2773],[384,8995],[384,3658],[384,7953],],
'15':[[384,4159],[96,20],[96,37],[384,1635],],
'23':[[249,184],[150,86],[96,46],[103,86],],
'54':[[384,3316],[384,490],],
'63':[[98,43],],
'67':[[103,108],[150,108],[161,510],],
'197':[[251,295],[384,239],],
'230':[[251,317],],
'275':[[384,6942],],
'446':[[361,52],[313,281],[313,261],],
'947':[[355,163],[313,286],],
'1125':[[384,8526],],
'1151':[[289,162],[315,162],],
'1198':[[384,3958],],
'1225':[[384,9775],],
'1381':[[384,5200],[384,7521],],
'1504':[[384,2012],],
'3097':[[161,38],],
'3127':[[384,5910],],
},{'20':[[21,37],],
},{'20':[[21,40],],
},{'8':[[21,101],],
'28':[[162,262],],
'199':[[389,48],[151,48],],
'370':[[321,155],[161,555],],
'445':[[278,52],],
'711':[[384,9409],],
},{'23':[[21,104],],
},{'82':[[186,395],],
'83':[[186,325],],
'373':[[246,435],],
'791':[[21,107],],
'2283':[[181,731],],
'2688':[[150,88],[103,88],],
},{'39':[[21,109],],
},{'50':[[21,115],],
},{'15':[[340,25],[214,133],[308,25],],
'23':[[52,142],],
'34':[[266,106],],
'38':[[251,174],[384,6326],],
'47':[[164,389],],
'130':[[162,96],[162,245],[118,103],[70,115],[153,1429],[153,16],[171,1241],[266,378],[172,102],[179,28],[179,1642],[185,44],[197,456],[70,7],[39,124],[266,170],[384,4784],],
'154':[[266,52],[70,56],[244,135],[340,80],[164,166],[308,113],],
'165':[[172,59],],
'205':[[251,209],],
'454':[[164,132],],
'518':[[251,106],[384,9419],[251,322],[251,245],[21,118],],
'535':[[244,160],],
'808':[[336,82],],
'836':[[303,156],],
'1160':[[384,1283],],
'1385':[[266,292],],
'2075':[[384,4773],[235,446],],
'3814':[[251,127],],
'3986':[[251,185],],
'4755':[[384,1299],],
},{'443':[[200,215],],
'532':[[21,124],],
'674':[[384,2312],[384,5286],],
'791':[[186,146],],
'902':[[246,1879],],
'1308':[[42,1077],],
},{'562':[[21,133],],
},{'140':[[21,141],],
'215':[[48,1419],],
'815':[[48,234],],
'1029':[[48,4753],],
'1326':[[54,276],[153,161],[153,195],[335,87],],
'1519':[[306,122],],
'1532':[[48,4114],[48,4367],[48,4423],],
'1539':[[306,155],[197,115],[179,638],[70,171],[48,401],[48,228],],
'1602':[[48,1815],[48,1786],[48,1686],],
'1708':[[48,1711],],
'1853':[[48,4325],],
'1918':[[306,1401],],
},{'803':[[21,142],],
},{'804':[[21,143],],
'4963':[[384,4107],],
},{'805':[[21,144],],
},{'333':[[21,146],],
},{'12':[[21,150],],
'19':[[39,529],],
'63':[[384,7096],],
'700':[[384,3784],],
'860':[[336,81],],
},{'146':[[48,469],],
'242':[[21,152],],
'1582':[[48,480],],
},{'809':[[21,153],],
},{'810':[[21,154],],
},{'130':[[21,156],],
},{'15':[[21,159],],
'23':[[65,113],],
'26':[[384,9415],],
'272':[[340,151],[308,184],],
'792':[[251,318],],
'4788':[[384,1673],],
},{'165':[[251,191],],
'813':[[21,160],],
'2653':[[135,214],[100,167],],
},{'29':[[48,546],],
'74':[[179,643],],
'78':[[335,92],],
'146':[[306,1313],[48,3982],],
'215':[[48,1526],[48,1822],[48,182],[48,2515],],
'217':[[48,4442],],
'491':[[48,743],],
'545':[[306,160],],
'580':[[48,233],],
'780':[[51,23],],
'814':[[21,161],],
'815':[[48,1808],],
'827':[[48,1702],],
'1278':[[48,271],],
'1279':[[48,4771],],
'1326':[[48,147],[306,128],],
'1519':[[48,4143],[48,4408],],
'1525':[[306,138],[70,154],[153,175],[197,98],[48,152],[179,621],],
'1536':[[48,206],],
'1539':[[48,407],],
'1544':[[48,240],],
'1582':[[48,2103],],
'1666':[[48,1321],],
'1701':[[48,1730],],
'1721':[[48,1807],],
'1842':[[48,3541],],
'1919':[[306,1481],[48,4336],],
'1951':[[179,1134],],
'1967':[[48,4795],],
'2081':[[54,281],],
'2083':[[197,120],],
'2329':[[70,176],],
'2331':[[153,200],],
'2953':[[153,170],],
},{'12':[[30,317],],
'16':[[30,141],],
'557':[[335,2608],[335,3123],],
'615':[[30,475],[30,65],[21,167],[390,150],],
'3887':[[384,728],],
},{'2':[[21,181],[30,465],[384,9148],[390,164],],
'8':[[384,6949],],
'9':[[384,3637],],
'15':[[384,9785],],
'16':[[384,3114],[384,6759],[384,4565],[54,1472],[161,46],[384,1117],[384,6967],[176,89],[384,1973],[384,1962],[384,1937],[277,90],[384,3915],[303,23],[329,38],[384,5575],[384,8968],[384,5753],[384,1843],[384,7830],[384,1475],[384,6579],[384,6382],[384,6355],[384,368],],
'25':[[384,3262],[384,3275],[384,7091],],
'30':[[339,206],],
'48':[[84,367],],
'49':[[384,9890],],
'56':[[384,7968],],
'60':[[277,258],],
'79':[[384,3616],],
'164':[[384,6438],[384,2575],],
'196':[[54,540],],
'199':[[384,8184],[84,426],],
'202':[[363,752],[384,6505],],
'203':[[384,4915],[384,9650],[161,309],[384,4037],[384,8511],[384,6780],[384,3027],[384,8148],[246,614],[384,9634],[384,8200],[384,6152],[355,364],[48,4877],],
'206':[[384,2790],],
'224':[[384,9004],[384,7860],],
'237':[[384,6667],],
'241':[[384,9902],],
'245':[[384,3085],],
'248':[[384,8214],[355,743],[384,1556],[384,175],],
'251':[[335,3773],],
'271':[[384,1884],],
'277':[[384,4594],[384,7469],],
'284':[[384,6108],[384,913],[384,6095],],
'374':[[384,8760],],
'380':[[384,9578],],
'533':[[384,4890],],
'593':[[384,5820],],
'642':[[384,9205],],
'645':[[384,8520],[384,8092],[384,8102],[384,8528],],
'649':[[384,5139],[384,1588],],
'676':[[384,6052],[384,1270],],
'792':[[384,4160],],
'840':[[384,2143],[384,2291],],
'908':[[384,4048],],
'940':[[384,3845],],
'949':[[384,6013],],
'1062':[[273,46],],
'1101':[[384,8749],],
'1117':[[52,173],],
'1135':[[384,7052],],
'1143':[[335,1945],[335,2688],],
'1180':[[384,1209],],
'1310':[[384,7352],[344,280],],
'1368':[[384,5108],],
'1462':[[384,2863],[384,7200],],
'1463':[[384,5337],],
'1474':[[384,2303],[162,316],],
'1503':[[384,8497],],
'1915':[[384,5454],[384,5652],[384,8668],],
'2060':[[384,3378],],
'2234':[[384,9930],],
'2351':[[70,621],],
'2556':[[384,7358],],
'2601':[[384,1801],],
'2608':[[389,50],[151,50],],
'2631':[[384,7129],],
'2661':[[384,8341],],
'2711':[[384,4204],],
'2979':[[153,646],],
'3604':[[384,8306],],
'3739':[[384,8537],[261,45],],
'4193':[[384,4058],],
'4325':[[384,5183],],
'4405':[[384,7823],],
'4622':[[384,2177],],
'4651':[[384,3593],],
'4706':[[384,3565],],
'4751':[[384,1518],[384,1193],],
'4861':[[384,7208],],
'4933':[[384,3517],],
'4967':[[384,4173],],
'5058':[[384,9594],],
'5125':[[384,7928],],
'5211':[[384,9797],],
},{'14':[[350,198],],
'16':[[173,244],[137,199],],
'39':[[321,281],],
'55':[[153,756],],
'225':[[42,1321],[321,397],],
'281':[[242,32],],
'321':[[274,96],],
'337':[[140,37],[144,43],],
'648':[[214,336],],
'817':[[390,165],[30,466],[21,182],[384,4205],],
'1314':[[384,7540],[242,83],],
'1452':[[274,429],],
'2333':[[307,258],[341,258],],
},{'67':[[84,329],],
'199':[[311,94],[387,94],],
'818':[[30,467],[390,166],[21,183],],
},{'63':[[390,169],[21,186],],
},{'15':[[96,82],[161,36],],
'23':[[96,170],],
'36':[[96,149],],
'275':[[384,2288],],
'792':[[96,4],[161,34],[96,38],[96,21],[161,603],[171,149],[208,61],[227,276],[21,194],[384,6943],],
},{'208':[[22,28],],
},{'7':[[22,32],[392,3],[369,213],[392,50],[171,809],],
'117':[[318,0],],
'128':[[318,22],],
'173':[[318,14],],
'217':[[54,1000],[54,1049],],
'734':[[22,59],],
'866':[[54,1298],],
'2210':[[54,1056],],
'2629':[[384,7492],],
},{'7':[[22,40],[369,221],[222,5],[144,3],[144,45],[171,817],],
'117':[[112,0],],
'173':[[112,16],],
'209':[[222,62],],
'275':[[384,7430],],
},{'7':[[22,42],[369,223],[112,5],[171,819],[140,3],[140,39],],
'117':[[144,0],],
'209':[[112,152],],
'328':[[144,16],],
'374':[[384,4518],],
'757':[[48,1699],],
},{'7':[[369,225],[326,53],[326,3],[144,5],[171,821],[22,44],],
'63':[[384,4520],],
'117':[[140,0],],
'173':[[140,16],],
'209':[[144,49],],
'825':[[48,1700],],
},{'7':[[22,46],[38,196],[369,227],[140,5],[279,52],[171,823],],
'117':[[326,0],],
'182':[[326,14],],
'209':[[140,43],],
'374':[[384,4525],],
'826':[[48,1701],],
},{'7':[[22,50],[369,231],[171,827],[79,53],[79,3],],
'63':[[54,130],],
'117':[[279,0],],
'124':[[279,14],],
'165':[[54,1271],],
'189':[[392,17],],
'209':[[326,57],],
'215':[[54,1276],[54,1279],],
'823':[[318,15],],
'2171':[[54,840],],
'2172':[[54,842],],
'2243':[[54,1502],],
},{'7':[[22,54],[62,5],[354,86],[265,46],[171,797],[369,201],],
'117':[[319,0],],
'140':[[62,84],],
'232':[[62,142],],
'1493':[[319,14],],
},{'7':[[215,117],[307,5],[215,3],[35,31],[254,67],[171,428],],
'33':[[84,300],[267,29],],
'117':[[23,0],],
'150':[[23,97],],
'186':[[384,5637],],
'376':[[307,285],],
'420':[[351,58],],
'833':[[23,16],],
'2629':[[336,141],],
},{'7':[[23,3],[23,140],[35,29],[78,5],[254,65],[171,426],],
'117':[[307,0],],
'140':[[78,24],],
'173':[[307,16],],
'375':[[78,28],],
'376':[[78,33],],
},{'7':[[23,5],[171,430],[35,33],[92,180],[127,70],[254,69],],
'117':[[215,0],],
'376':[[23,143],],
'1012':[[215,14],],
},{'7':[[193,5],[311,3],[35,45],[171,442],[311,106],[254,81],],
'117':[[382,0],],
'122':[[23,15],],
'329':[[382,18],],
'376':[[193,164],],
'830':[[23,17],],
},{'134':[[23,30],[293,30],],
'765':[[293,18],],
'833':[[23,18],],
},{'12':[[365,114],[23,59],[214,373],[321,108],[214,351],[183,51],[293,59],[164,395],[215,51],],
'30':[[164,446],],
'43':[[23,74],[99,112],[293,74],[183,74],[215,74],],
'128':[[317,22],[97,20],[215,18],[293,20],[183,18],[23,20],],
'151':[[317,80],],
'152':[[336,110],[321,180],[161,580],],
'164':[[341,247],[308,82],[307,247],[164,297],],
'248':[[52,132],[293,132],[23,132],[303,166],],
'289':[[84,297],],
'351':[[303,89],],
'1211':[[70,296],],
'2368':[[336,136],],
},{'12':[[214,278],],
'15':[[23,82],[293,82],[23,28],[293,28],[183,82],[215,82],],
'23':[[382,72],[71,72],],
'34':[[23,44],[288,35],[293,95],[23,95],[293,44],],
'130':[[246,1434],],
'152':[[336,71],],
'159':[[304,341],[321,100],],
'637':[[321,226],],
'837':[[358,324],[261,164],],
'851':[[293,138],[23,138],],
'2352':[[360,49],],
'2629':[[303,155],],
'3712':[[321,129],],
},{'12':[[23,42],[23,93],[384,8228],[301,56],[293,93],[293,42],[105,58],],
'13':[[384,4391],[384,9777],],
'27':[[70,315],],
'43':[[277,704],],
'63':[[99,196],[105,65],],
'164':[[339,146],],
'248':[[384,2598],],
'351':[[261,163],[358,323],[48,3944],[306,1275],],
'646':[[384,3397],],
'844':[[153,165],[48,238],],
'2675':[[384,2399],],
'4914':[[384,3393],],
},{'19':[[336,138],],
'48':[[306,471],],
'51':[[293,80],[23,80],],
'139':[[306,490],[306,458],],
'205':[[23,62],[293,62],],
'231':[[70,195],[70,236],],
'321':[[71,35],[382,35],],
'423':[[197,400],],
'491':[[306,444],[306,511],],
'1211':[[197,596],[70,754],],
'1225':[[382,80],[71,80],[258,30],],
'1667':[[70,602],],
'1708':[[306,393],],
'1711':[[183,80],[215,80],],
'1847':[[306,1598],],
'1870':[[306,1249],],
'1906':[[306,1566],],
'1920':[[306,1358],],
'1927':[[306,1511],],
'2365':[[382,67],[71,67],],
'4156':[[306,719],],
},{'89':[[164,116],],
'205':[[164,384],],
'230':[[341,66],[23,68],[183,68],[215,68],[293,68],[307,66],[308,36],[308,49],[340,49],[340,36],],
'275':[[384,8782],],
'836':[[336,72],],
'1218':[[384,7895],[95,516],],
},{'24':[[23,71],[384,4263],[387,104],[384,2081],[183,65],[183,71],[384,586],[215,65],[215,71],[311,104],[293,71],],
'29':[[384,8205],[384,4271],[87,89],],
'431':[[384,3458],],
'567':[[384,7375],[384,6974],[384,8650],[261,85],[28,60],[28,51],],
'939':[[384,2894],],
'1315':[[384,6964],],
'1425':[[384,3465],],
'1504':[[384,2142],],
'2589':[[214,319],],
'2590':[[384,3360],],
'4783':[[384,2290],],
'5045':[[384,5646],],
},{'14':[[87,58],],
'38':[[135,191],],
'158':[[304,323],[274,309],],
'277':[[337,98],],
'835':[[293,75],[183,75],[23,75],[215,75],],
'2691':[[313,339],],
},{'3':[[23,84],[340,45],[183,85],[215,85],[293,84],[308,45],[384,7995],],
'19':[[161,545],[321,147],],
},{'12':[[161,557],[321,157],[390,144],],
'50':[[293,88],[215,90],[183,90],[23,88],],
},{'13':[[384,7754],[381,229],[384,6162],[384,6206],],
'17':[[190,48],],
'19':[[30,128],],
'35':[[384,6694],],
'54':[[161,369],],
'139':[[293,99],[23,99],],
'199':[[343,77],],
'320':[[93,122],],
'374':[[384,4826],],
'792':[[384,268],],
'843':[[215,91],[183,91],],
'928':[[30,481],[384,5147],[384,720],[384,6765],],
'935':[[361,84],],
'1147':[[317,100],],
'1349':[[86,240],],
'1543':[[48,237],[153,164],],
'1591':[[48,2460],[48,1276],],
'1922':[[343,85],],
'2675':[[384,4988],],
'3100':[[384,245],],
'3911':[[384,4418],],
},{'19':[[314,103],],
'196':[[39,267],[23,105],[84,437],[160,176],[164,526],[181,946],[183,97],[190,55],[293,105],[215,97],[214,220],],
'1323':[[199,56],[199,36],[218,358],[225,31],[191,214],[313,151],[41,340],[355,1442],[363,127],[363,389],[363,643],[363,663],[363,688],[363,716],[384,7832],],
},{'19':[[23,116],[215,108],[183,108],[293,116],],
'23':[[95,459],],
'77':[[396,145],[396,67],[396,78],[384,9550],[266,139],[384,9244],[396,32],[191,253],[384,7355],[329,34],[329,45],[329,62],[335,3188],[384,6250],[363,497],[384,5062],[384,5067],[396,172],],
'443':[[303,95],],
'513':[[249,307],],
'995':[[277,224],],
'1101':[[246,38],],
'1330':[[42,464],],
'1336':[[42,872],],
'1421':[[249,220],],
'2655':[[344,135],],
},{'23':[[95,417],[183,111],[215,111],[293,119],[23,119],],
},{'248':[[183,113],[215,113],[293,121],[23,121],],
},{'196':[[183,115],[293,123],[215,115],[23,123],],
'1323':[[199,34],[313,416],[363,595],[363,749],[384,5255],[384,5547],[384,6522],[384,7299],[384,8042],[384,8282],[384,8291],[384,8330],],
},{'835':[[23,133],],
},{'2':[[84,278],],
'7':[[37,28],],
'23':[[37,42],[37,57],],
'343':[[23,137],[293,137],],
'540':[[37,38],],
'1027':[[258,55],[147,21],[37,23],],
'1030':[[258,32],],
'2367':[[382,87],[71,87],],
'2463':[[84,295],],
},{'7':[[282,32],[38,176],[43,5],[282,3],[171,980],[369,384],],
'49':[[43,30],],
'117':[[24,0],],
'123':[[24,16],],
},{'7':[[24,3],[24,29],[38,174],[171,978],[369,382],[119,5],],
'49':[[119,30],],
'117':[[43,0],],
'123':[[43,16],],
},{'7':[[24,5],[393,3],[38,178],[171,982],[393,28],[369,386],],
'49':[[24,35],],
'117':[[282,0],],
'404':[[282,16],],
},{'7':[[353,55],[90,42],[116,46],[292,42],],
'19':[[384,979],[384,1759],],
'23':[[150,42],[148,163],[178,316],[103,42],[218,376],[313,105],[48,4640],[178,300],],
'39':[[244,156],],
'171':[[25,21],],
'248':[[331,280],],
'288':[[218,261],[372,24],],
'726':[[246,1105],],
'1442':[[363,426],],
'2778':[[260,84],],
},{'12':[[25,34],[52,226],[373,29],[266,120],[363,456],[251,236],[246,1373],[340,165],[300,33],[340,97],[332,157],[127,34],[308,130],[308,198],[141,34],[317,30],[143,29],[332,44],[162,328],[164,25],[320,79],[298,34],],
'43':[[189,474],],
'48':[[131,59],[77,57],],
'128':[[141,22],[367,32],[143,20],[62,24],[362,22],],
'164':[[164,587],[197,442],[197,547],[179,677],],
'241':[[373,89],],
'248':[[181,600],[345,54],[395,57],[162,76],],
'305':[[179,1170],],
'351':[[112,76],],
'926':[[396,80],],
'1029':[[335,701],[335,479],[335,299],[335,1878],[335,3198],],
'1101':[[54,399],],
'1109':[[197,343],],
'1211':[[70,511],],
'2069':[[70,491],],
'2132':[[179,1161],],
'2136':[[86,88],[57,95],],
'2223':[[54,1208],],
'2355':[[197,529],],
'4310':[[335,1145],],
'4382':[[335,3555],],
},{'26':[[384,559],],
'31':[[384,63],],
'33':[[169,52],[114,51],],
'69':[[112,90],[246,1095],],
'149':[[42,488],],
'152':[[313,430],],
'175':[[164,360],],
'199':[[274,583],[54,1268],[48,1937],[193,91],[352,91],],
'224':[[84,84],[80,113],[381,435],[49,429],[296,147],[160,249],[321,87],[322,122],[128,120],],
'282':[[99,251],],
'452':[[181,696],],
'454':[[332,167],[283,235],[209,220],[25,38],],
'555':[[217,350],],
'593':[[59,49],[161,451],[384,1350],[42,457],[335,731],[344,121],[153,292],[54,1237],],
'795':[[162,263],],
'817':[[384,3916],],
'884':[[271,40],[299,40],[205,40],],
'944':[[355,1140],[42,1259],],
'1123':[[99,138],[384,429],[48,2524],[384,471],[384,453],[99,285],],
'1164':[[121,530],],
'1234':[[39,812],],
'1462':[[384,2349],],
'1464':[[384,9006],],
'1474':[[179,1173],],
'1672':[[235,352],],
'2079':[[271,22],[205,22],[299,22],[100,148],],
'2134':[[54,474],],
'2362':[[70,760],[197,602],],
'2463':[[331,150],[84,99],],
'2762':[[384,2213],],
'3008':[[384,7455],[153,1411],],
'3576':[[181,333],],
'3690':[[352,63],[193,63],],
'3729':[[209,237],],
'3829':[[384,1688],],
'4807':[[384,1845],],
'5119':[[384,7643],],
},{'1':[[181,1],[312,63],[38,34],[38,202],[53,139],[88,32],[164,235],[171,838],[369,242],[181,17],],
'14':[[38,26],],
'77':[[181,576],[25,63],],
'89':[[181,59],],
'858':[[181,18],],
'961':[[181,421],],
'3168':[[181,837],],
},{'155':[[331,340],[25,66],],
'903':[[384,481],],
'4263':[[331,319],],
},{'39':[[172,143],[336,80],[214,163],],
'49':[[312,37],],
'67':[[173,297],[137,252],[25,68],[227,125],],
'158':[[191,133],],
'299':[[232,120],],
'369':[[355,557],],
'817':[[384,3086],],
'858':[[164,236],],
'2010':[[266,309],],
},{'2':[[277,867],],
'9':[[277,100],],
'12':[[246,1232],[246,1016],[266,133],[331,254],[246,1600],[246,1532],],
'15':[[48,3255],],
'16':[[243,229],[48,807],[48,169],[371,106],[39,884],[335,2436],[54,426],[335,2482],[164,218],[355,772],[344,89],[306,227],[306,565],],
'26':[[246,93],],
'30':[[355,1145],[287,96],],
'31':[[246,1735],],
'33':[[161,147],],
'39':[[335,529],[246,154],[384,382],[84,471],[384,897],[220,54],[384,1641],[384,1544],[296,116],],
'63':[[181,270],[83,97],[48,4651],[246,1209],],
'67':[[121,177],],
'85':[[48,3577],[384,7513],[153,622],],
'98':[[335,105],],
'140':[[277,398],[358,99],],
'164':[[274,438],],
'199':[[326,35],[134,134],[302,136],],
'203':[[371,77],[280,84],[384,7963],[54,133],[42,759],],
'217':[[54,1390],],
'248':[[335,953],[49,41],[335,2395],[191,103],[181,859],[36,176],[164,541],],
'264':[[355,111],],
'277':[[381,525],],
'281':[[181,96],],
'285':[[355,449],],
'301':[[355,858],[384,3677],[234,384],],
'305':[[246,1632],[246,1093],[363,575],],
'346':[[384,355],],
'349':[[384,6004],[384,7274],],
'351':[[25,74],],
'369':[[39,59],],
'420':[[54,677],[95,244],],
'502':[[217,148],],
'546':[[39,80],],
'554':[[179,1117],],
'597':[[321,412],],
'598':[[153,1237],],
'599':[[153,527],[153,808],[153,1319],],
'649':[[384,5011],],
'740':[[221,28],],
'789':[[384,645],],
'791':[[355,198],],
'828':[[54,1272],],
'865':[[218,307],],
'887':[[384,3005],[384,3215],],
'888':[[384,2426],],
'1003':[[335,1607],[335,1468],[335,1742],],
'1033':[[335,2449],],
'1072':[[181,73],],
'1117':[[153,916],],
'1123':[[152,110],[48,4383],],
'1362':[[49,312],],
'1426':[[384,2869],],
'1719':[[54,1491],],
'1955':[[95,147],],
'1997':[[340,134],[308,167],],
'2260':[[152,200],],
'2346':[[335,3586],],
'3120':[[161,395],],
'3275':[[246,1769],],
'3653':[[246,1901],],
'3839':[[246,53],],
},{'7':[[362,3],[368,5],[171,787],[354,76],[369,191],[362,71],],
'117':[[26,0],],
'124':[[26,16],],
'232':[[368,117],],
},{'7':[[26,3],[26,49],[101,5],[354,74],[171,785],[369,189],],
'117':[[368,0],],
'232':[[101,84],],
'1493':[[368,16],],
},{'7':[[26,5],[369,193],[151,3],[354,78],[151,52],[171,789],],
'117':[[362,0],],
'228':[[362,16],],
'232':[[26,54],],
'420':[[389,31],[151,31],],
},{'2':[[277,898],],
'16':[[46,31],[336,26],[274,284],[226,31],[174,222],[235,417],],
'17':[[118,194],[244,225],],
'23':[[26,20],],
'39':[[186,392],[335,2307],],
'203':[[217,461],],
'320':[[47,30],],
'1513':[[47,21],],
'1960':[[274,135],],
'2133':[[223,49],[218,306],],
},{'16':[[214,202],[384,8692],[189,418],[50,110],],
'23':[[335,1870],],
'27':[[246,1857],[188,58],],
'31':[[172,160],[54,1347],],
'34':[[152,153],],
'39':[[214,210],],
'89':[[54,788],],
'147':[[263,98],],
'167':[[381,545],],
'203':[[54,1297],[89,463],[213,402],[171,91],],
'224':[[384,8679],],
'237':[[313,140],[170,59],[363,89],[363,362],[313,114],[353,62],],
'370':[[91,35],[217,463],],
'525':[[39,250],],
'817':[[54,1473],],
'865':[[26,21],],
'870':[[26,47],],
'921':[[384,2582],],
'1141':[[384,5744],],
'1169':[[384,3467],],
'2403':[[80,58],],
'4334':[[337,77],],
},{'7':[[180,70],],
'19':[[26,29],],
'1527':[[384,1886],],
},{'7':[[152,38],],
'23':[[26,36],],
'285':[[152,136],],
'921':[[384,5815],],
'1019':[[152,96],],
'2930':[[178,216],],
},{'3':[[213,363],[277,105],[277,262],],
'15':[[39,92],[95,365],],
'16':[[231,111],[151,40],[396,132],[389,40],],
'18':[[335,1195],[246,788],[242,58],[355,1021],],
'23':[[381,191],[355,982],[48,2142],[365,216],],
'31':[[395,37],[37,47],],
'33':[[161,169],],
'55':[[48,1541],],
'63':[[395,42],],
'77':[[235,215],[186,458],[355,659],[335,966],[384,3611],[246,797],[48,2341],],
'83':[[142,165],],
'140':[[224,187],],
'147':[[274,176],[42,1092],],
'150':[[246,430],],
'152':[[95,390],],
'154':[[152,215],],
'165':[[355,119],],
'225':[[246,1870],],
'288':[[246,1603],],
'301':[[26,45],[274,190],],
'368':[[395,94],],
'370':[[70,635],[153,914],[384,5823],[274,252],[89,327],[39,396],[384,6022],[160,193],],
'443':[[345,80],],
'470':[[384,4315],],
'482':[[153,240],],
'502':[[306,649],],
'543':[[395,107],],
'593':[[365,227],],
'596':[[395,79],[345,69],],
'613':[[335,2410],],
'639':[[313,423],],
'835':[[164,447],],
'845':[[164,527],],
'861':[[161,396],[48,3256],[161,148],[246,1902],[152,201],],
'931':[[335,1220],],
'960':[[322,82],[128,85],],
'968':[[384,8100],[384,7100],[390,4],[390,31],[261,231],[390,105],[390,131],[30,387],[384,5916],[358,10],[358,392],[261,21],[171,171],[208,83],[384,673],[384,679],[384,1154],[384,1158],[227,298],[384,3852],[384,4296],],
'1108':[[134,102],[302,99],],
'1119':[[153,236],],
'1134':[[344,71],],
'1506':[[121,499],],
'1591':[[335,1754],],
'1786':[[48,2405],],
'2041':[[49,483],],
'2113':[[54,198],],
'2196':[[54,921],],
'2241':[[249,296],],
'2565':[[93,112],],
'2704':[[353,121],],
'3149':[[274,672],],
'3514':[[249,108],],
'3910':[[246,1110],],
'3942':[[335,2512],],
},{'23':[[189,394],[213,349],],
'162':[[49,341],],
'869':[[26,46],],
},{'7':[[171,896],[38,92],[50,5],[69,93],[69,3],[369,300],],
'49':[[50,118],],
'117':[[27,0],],
'228':[[27,16],],
},{'7':[[27,3],[27,65],[38,90],[171,894],[369,298],[53,5],],
'49':[[53,151],],
'117':[[50,0],],
'123':[[50,16],],
},{'7':[[27,5],[276,80],[38,94],[276,3],[369,302],[171,898],],
'49':[[27,71],],
'117':[[69,0],],
'123':[[69,16],],
},{'23':[[27,32],[50,45],[53,35],[69,34],[273,30],[276,31],[343,36],[347,32],[364,31],],
},{'12':[[27,34],[50,47],[53,37],[69,36],[148,52],[384,4762],[229,54],[273,32],[276,33],[364,33],[343,38],[347,34],],
'26':[[172,126],],
'128':[[300,47],],
'4234':[[384,7692],[384,5271],],
},{'31':[[249,100],[160,640],],
'39':[[48,2636],[379,133],[249,292],[148,62],[272,41],[177,50],],
'41':[[355,99],],
'203':[[42,938],],
'349':[[177,35],],
'462':[[27,41],],
'1582':[[384,334],],
'1680':[[48,1280],],
'2486':[[84,535],],
},{'7':[[41,128],],
'15':[[89,156],[89,175],[97,39],[276,46],],
'147':[[363,294],[342,113],[27,45],],
'360':[[198,32],],
'921':[[342,98],],
'1431':[[182,28],[274,597],],
},{'26':[[277,144],],
'130':[[41,202],[41,219],[41,230],[41,241],[41,252],[41,263],[41,274],[41,318],[68,85],[191,163],[27,52],[368,83],[384,1621],[384,3039],[384,3050],[384,3069],[384,3138],[384,3160],[384,3169],[384,3174],[384,3284],[384,3907],[384,4110],[384,4221],[384,5018],[384,6358],[384,6797],[384,7141],[384,7990],[384,8990],[384,8998],[384,9107],],
},{'340':[[27,55],],
},{'23':[[27,57],[384,1996],[93,64],[93,97],[111,65],[112,132],[181,849],[181,884],[276,22],[276,39],[355,1153],[364,22],[384,1150],[384,8122],],
'77':[[384,3709],],
'1963':[[48,4657],],
},{'7':[[328,36],[328,3],[139,46],[237,5],[171,1065],[369,469],],
'117':[[28,0],],
'140':[[186,225],],
'236':[[28,16],],
'733':[[237,47],],
'2132':[[54,370],[335,251],[179,1033],],
'2967':[[153,413],],
},{'7':[[28,3],[28,89],[139,44],[171,1063],[216,5],[369,467],],
'117':[[237,0],],
'236':[[237,16],],
'733':[[216,47],],
},{'7':[[28,5],[369,471],[139,48],[150,3],[150,127],[171,1067],],
'117':[[328,0],],
'733':[[28,92],],
'3498':[[179,800],[179,782],[179,719],[179,734],],
'4231':[[328,16],],
},{'2':[[321,76],[321,178],[161,578],],
'124':[[48,4911],],
'134':[[205,26],[299,26],[237,26],[216,26],[192,26],[271,26],],
'144':[[48,4956],],
'182':[[192,19],[299,19],],
'236':[[205,19],[237,19],],
'404':[[28,19],[271,19],[216,19],],
'780':[[68,102],[384,3189],],
'1125':[[384,2520],],
'1324':[[384,2066],],
'1974':[[48,4923],],
'1982':[[48,4925],],
'2079':[[237,39],[271,39],[205,39],[216,39],[299,39],[192,39],],
'4825':[[384,2684],],
'4949':[[384,3850],],
},{'12':[[150,36],[103,75],[103,36],[150,75],],
'48':[[48,4243],],
'128':[[150,25],[28,21],[114,19],[103,25],[169,21],[263,26],[338,22],],
'248':[[384,1565],],
'817':[[384,1557],],
},{'3':[[384,1365],[186,227],[186,169],[251,291],[186,461],],
'15':[[384,208],],
'16':[[42,726],],
'19':[[384,1332],],
'23':[[358,174],],
'29':[[161,483],],
'50':[[186,55],],
'63':[[358,43],[384,8648],[186,118],[261,83],],
'77':[[200,304],[28,49],[186,488],[162,298],[384,8483],[186,377],[257,186],],
'152':[[358,82],],
'186':[[48,2400],],
'203':[[186,123],],
'305':[[384,1444],],
'306':[[28,31],],
'555':[[278,61],],
'891':[[42,858],],
'1504':[[384,1403],],
'1506':[[384,8670],],
'3833':[[384,4153],],
'3877':[[384,1510],[384,1185],],
'4336':[[335,2114],],
'4405':[[384,7958],],
'5199':[[384,9695],],
},{'26':[[315,101],[48,710],[289,101],],
'48':[[283,231],[28,34],[277,139],[186,203],[186,60],[181,550],[384,9698],],
'54':[[48,3475],],
'63':[[312,22],],
'77':[[384,3214],[384,3004],],
'277':[[277,562],],
'295':[[384,8885],],
'422':[[246,1098],],
'436':[[48,1559],[48,326],[48,308],],
'447':[[186,93],[253,197],[306,571],],
'550':[[48,3491],[384,8949],[200,95],[200,121],],
'955':[[42,1171],],
'1416':[[384,6138],],
'2034':[[335,3564],[335,1154],[335,710],[335,3207],[335,1887],[335,488],[335,308],],
'2229':[[384,9534],],
'3196':[[384,2658],],
},{'3':[[384,7081],[384,2425],],
'26':[[246,885],[274,187],[384,5833],],
'36':[[181,602],],
'43':[[181,963],],
'48':[[186,295],],
'59':[[246,643],[246,908],[48,2853],[48,3232],],
'154':[[225,46],],
'165':[[28,37],[186,402],],
'175':[[335,669],[335,3164],[335,437],[335,3336],[335,3775],[335,2274],[335,925],],
'286':[[30,74],],
'422':[[384,9339],[355,640],],
'425':[[384,5077],],
'482':[[186,185],],
'502':[[344,308],],
'518':[[335,3458],[384,4458],[384,5361],[384,8277],[178,289],[384,4587],],
'532':[[246,714],[246,677],[384,4532],[179,662],[355,1011],],
'728':[[153,627],],
'1202':[[384,9925],],
'1351':[[384,8244],],
'1627':[[384,7416],[384,7857],[384,3439],],
'2076':[[52,313],],
'2221':[[244,189],[118,147],],
'3619':[[186,375],],
},{'128':[[338,62],],
'888':[[28,38],],
},{'241':[[28,45],],
'817':[[384,5184],],
},{'3':[[28,58],[384,7403],[186,193],[186,80],[384,2460],[186,114],[186,469],[186,237],],
'10':[[384,3279],],
'12':[[384,9700],[384,4665],],
'15':[[358,41],],
'18':[[384,2021],],
'19':[[186,266],],
'33':[[42,857],],
'63':[[307,207],[341,207],],
'77':[[384,8491],[261,81],[384,5509],[384,8645],[384,5439],[186,387],],
'99':[[290,460],[179,406],],
'107':[[384,2001],],
'152':[[384,2008],],
'302':[[384,3799],],
'316':[[355,1324],],
'555':[[355,1037],],
'639':[[358,80],],
'642':[[39,962],],
'648':[[384,7373],],
'937':[[335,761],],
'1033':[[186,111],],
'1265':[[179,392],[290,446],],
'1505':[[384,2015],],
'1624':[[48,731],],
'1989':[[48,4980],],
'2132':[[335,767],],
'3443':[[290,583],[179,529],],
'3833':[[384,6972],],
'4978':[[384,4258],],
'4989':[[384,4462],],
},{'149':[[355,1065],[121,429],],
'199':[[28,62],],
'281':[[57,249],],
'5143':[[384,8343],],
},{'305':[[28,67],],
},{'34':[[152,114],],
'295':[[200,73],],
'790':[[331,139],],
'886':[[186,124],[186,119],],
'891':[[186,112],],
'893':[[28,68],],
'996':[[39,909],[39,439],],
'1380':[[65,80],],
'3162':[[331,428],],
'3409':[[186,77],],
'4578':[[379,157],],
},{'12':[[186,213],],
'23':[[28,71],],
},{'895':[[28,72],],
'3368':[[384,496],],
},{'63':[[336,77],],
'279':[[30,46],],
'443':[[217,309],],
'674':[[384,6727],],
'953':[[355,283],[344,154],[243,138],],
'2309':[[384,9096],],
},{'81':[[48,1790],],
'152':[[357,20],],
'165':[[162,350],],
'199':[[181,815],],
'225':[[160,357],],
'228':[[359,45],],
'369':[[89,301],],
'452':[[181,684],],
'470':[[30,49],],
'550':[[306,703],],
'649':[[384,5345],],
'1255':[[48,3470],[48,3465],[48,3003],[48,3008],],
'2494':[[384,4567],],
'2740':[[118,114],[336,162],],
'3152':[[164,178],],
'4798':[[384,1732],],
},{'63':[[153,116],[153,90],],
'73':[[355,854],],
'153':[[84,194],[355,714],],
'203':[[30,56],],
'562':[[355,453],],
'1128':[[153,1051],],
},{'31':[[152,66],[232,129],],
'290':[[384,1630],[384,3871],[30,69],],
},{'48':[[137,256],[173,301],],
'50':[[355,160],],
'63':[[60,59],[48,1473],],
'137':[[334,60],],
'165':[[30,71],],
'206':[[312,55],[160,590],],
'277':[[355,1380],[384,6915],[121,113],[277,632],],
'320':[[156,118],],
'520':[[306,58],],
'547':[[306,45],],
'631':[[384,9569],],
'700':[[49,256],],
'859':[[331,341],],
'1117':[[335,3448],],
'1123':[[355,1123],],
'1265':[[224,52],[158,41],],
'1356':[[246,1941],],
'1406':[[335,1093],],
'2151':[[121,555],],
'2368':[[87,66],],
'3032':[[277,718],],
},{'3':[[384,8255],],
'531':[[30,79],],
'2670':[[384,6881],],
'3957':[[246,1878],],
},{'33':[[249,29],],
'77':[[384,480],[153,73],[235,273],],
'152':[[242,60],],
'203':[[355,127],],
'506':[[49,390],],
'554':[[48,1555],],
'577':[[30,81],],
'615':[[342,135],[49,379],],
'2001':[[384,7576],],
'2017':[[206,66],],
'2241':[[152,194],],
'4117':[[384,2848],],
},{'27':[[68,67],],
'31':[[384,6730],[384,2028],[384,1954],],
'34':[[384,1891],],
'39':[[257,177],[200,295],[48,2580],],
'167':[[199,88],],
'203':[[384,3129],[381,443],],
'224':[[30,85],],
'817':[[384,3846],[384,1938],],
'878':[[41,319],[41,275],[41,264],[41,253],[384,3139],[41,242],[41,231],[68,86],[41,220],[41,203],[191,164],],
'1169':[[191,126],[41,215],],
'2566':[[381,52],],
},{'567':[[384,2017],],
'904':[[30,86],],
'3127':[[384,1639],],
'3833':[[384,1461],],
'4637':[[384,2006],],
'4783':[[384,1608],],
'4793':[[384,1699],],
},{'167':[[277,120],],
'202':[[355,75],],
'305':[[30,89],],
},{'15':[[171,21],[227,19],],
'89':[[30,91],],
'255':[[246,1530],],
},{'59':[[42,153],[42,483],[355,1377],],
'165':[[30,96],],
'313':[[384,3071],],
'1151':[[243,179],[121,487],],
'1473':[[384,1880],],
'2010':[[121,579],],
'2042':[[224,120],],
'2058':[[153,79],[164,193],],
'2149':[[384,4047],],
'2283':[[60,63],],
},{'23':[[317,56],],
'36':[[54,211],],
'908':[[30,97],],
},{'26':[[384,2497],],
'909':[[30,98],],
'2642':[[384,2970],],
},{'910':[[30,99],],
},{'20':[[235,225],],
'65':[[46,78],[226,78],],
'67':[[84,308],],
'81':[[48,390],],
'140':[[251,44],],
'164':[[358,381],[261,211],],
'165':[[384,9413],[251,201],[251,312],],
'178':[[384,1807],],
'196':[[384,9640],],
'203':[[384,3077],],
'237':[[384,27],],
'269':[[384,1736],],
'340':[[50,94],],
'377':[[189,503],],
'489':[[335,3455],],
'516':[[95,444],],
'528':[[384,557],],
'539':[[355,1013],],
'594':[[331,356],],
'649':[[384,5681],],
'752':[[384,3104],],
'757':[[120,25],],
'831':[[78,25],],
'911':[[30,100],],
'1005':[[160,319],],
'1076':[[135,160],[100,203],],
'1305':[[384,8152],],
'1310':[[384,7136],],
'1510':[[336,168],],
'1819':[[384,2308],],
'1967':[[235,405],],
'2122':[[384,4917],],
'2229':[[65,110],],
'2247':[[153,1293],],
'2530':[[178,277],],
'3229':[[384,8517],],
'3549':[[180,170],],
'3926':[[246,1310],],
'4509':[[384,5661],],
'4948':[[384,3940],],
'4954':[[384,3926],],
'4956':[[384,3933],],
'5148':[[384,8444],],
},{'2':[[30,102],],
'27':[[173,312],],
'128':[[235,200],],
'1019':[[131,144],[247,214],[77,129],],
'2256':[[86,214],],
'3565':[[384,3909],],
},{'19':[[49,126],[41,374],[30,104],],
'496':[[39,36],],
},{'7':[[217,172],[41,136],],
'15':[[114,31],[384,2888],[344,264],[169,33],],
'19':[[246,172],],
'23':[[52,62],[243,157],],
'31':[[246,1351],],
'63':[[384,8588],[197,241],[384,8079],[70,404],],
'82':[[290,174],[179,1222],[179,120],],
'266':[[30,109],],
'284':[[162,275],],
'305':[[384,9511],],
'531':[[344,223],[243,163],],
'861':[[246,155],],
'1029':[[335,2490],],
'1118':[[39,120],],
'1119':[[174,254],],
'1304':[[384,4810],[384,159],],
'1305':[[384,1206],[384,132],],
'1309':[[179,110],[290,164],[179,1210],],
'1310':[[384,6149],],
'1311':[[41,165],],
'1313':[[384,5733],[384,7662],[41,175],[179,103],[384,9870],[344,166],[243,150],[179,1200],[355,295],[217,155],[290,156],],
'1424':[[384,5942],],
'2323':[[384,8860],],
'2512':[[188,173],],
'3143':[[290,510],[290,563],[179,456],[179,509],[179,562],[179,354],[290,408],[290,616],[179,845],],
'3229':[[384,8395],],
'5103':[[384,8624],],
},{'19':[[384,3225],[384,3015],],
'857':[[48,2525],],
'915':[[30,110],],
'4268':[[331,380],],
},{'12':[[331,315],[331,335],],
'19':[[331,411],],
'38':[[331,256],],
'217':[[306,756],[168,26],],
'412':[[39,588],],
'535':[[384,4330],],
'551':[[30,119],],
'869':[[384,4316],],
'916':[[30,111],],
'1781':[[331,155],],
},{'2':[[186,305],[121,264],],
'23':[[89,183],[396,125],],
'48':[[89,294],],
'63':[[332,171],],
'79':[[181,306],],
'199':[[209,241],],
'250':[[181,316],],
'264':[[84,479],],
'295':[[89,318],],
'513':[[342,221],],
'587':[[153,65],],
'917':[[30,112],],
'1085':[[209,224],],
'1353':[[189,408],],
'2449':[[269,181],],
'2513':[[89,355],],
},{'14':[[261,169],[358,329],],
'165':[[335,3769],[335,3415],],
'443':[[30,116],],
'451':[[335,2606],],
'2267':[[358,378],[261,208],],
},{'23':[[30,139],[95,373],[30,122],],
'159':[[384,1626],],
'165':[[384,769],],
'680':[[95,387],],
},{'2':[[261,198],[277,607],],
'13':[[391,55],],
'14':[[321,43],],
'15':[[384,9506],[217,440],],
'16':[[39,505],[384,5070],],
'17':[[274,179],],
'18':[[118,160],],
'38':[[84,316],],
'46':[[339,48],],
'48':[[232,76],],
'49':[[181,657],],
'55':[[36,187],],
'63':[[235,210],],
'65':[[234,393],[181,490],[69,82],[89,363],[358,185],[283,187],[384,4505],],
'67':[[274,464],[381,167],],
'128':[[359,35],[326,23],],
'137':[[232,48],],
'140':[[342,97],],
'144':[[160,331],],
'146':[[384,6653],],
'149':[[314,50],[349,50],],
'152':[[384,3867],],
'165':[[251,277],],
'167':[[191,152],],
'199':[[62,88],],
'206':[[384,9366],],
'225':[[213,446],[30,336],[284,184],[62,40],[269,204],[189,619],[189,603],],
'232':[[181,297],],
'237':[[384,2434],],
'241':[[244,114],[256,20],],
'250':[[359,126],],
'256':[[76,37],[173,318],],
'259':[[308,163],[340,130],],
'276':[[339,174],[304,261],],
'284':[[118,202],[244,233],],
'299':[[384,254],],
'321':[[387,92],[311,92],],
'340':[[101,74],],
'350':[[153,667],],
'359':[[66,20],],
'370':[[384,3660],[153,902],[242,93],],
'408':[[160,286],],
'447':[[384,7590],],
'470':[[384,9665],[384,230],],
'479':[[39,808],],
'530':[[99,97],[384,5814],[363,479],[172,147],[384,2952],],
'547':[[160,432],],
'577':[[113,53],],
'594':[[331,360],],
'613':[[363,484],],
'633':[[322,110],],
'745':[[128,108],],
'788':[[173,309],],
'800':[[162,97],],
'818':[[153,757],],
'840':[[384,2082],[384,587],],
'844':[[384,721],[30,129],],
'866':[[381,546],],
'931':[[99,187],],
'1006':[[62,126],],
'1021':[[36,157],],
'1117':[[246,1642],[76,75],[394,190],],
'1158':[[206,45],],
'1187':[[217,369],],
'1371':[[42,362],],
'1411':[[381,149],],
'1457':[[188,128],],
'1474':[[46,69],[226,69],[336,153],],
'1477':[[384,2224],],
'1481':[[99,225],[42,1202],],
'1516':[[242,44],],
'1766':[[384,2603],],
'1930':[[363,614],],
'1967':[[384,9277],[384,9241],],
'2045':[[355,326],],
'2066':[[246,515],],
'2106':[[54,171],],
'2211':[[384,7460],],
'2332':[[153,87],],
'2342':[[384,1005],],
'2368':[[384,2128],],
'2372':[[191,135],],
'2388':[[384,2444],[384,8270],[384,292],],
'2396':[[76,96],],
'2456':[[251,337],],
'2464':[[363,608],[384,2485],],
'2635':[[99,168],],
'2671':[[384,2748],],
'2806':[[384,3690],],
'2867':[[307,231],[341,231],],
'3605':[[384,1028],],
'3748':[[368,40],[359,91],[368,72],],
'3978':[[367,127],[250,124],],
'4188':[[307,219],[341,219],],
'4324':[[381,404],],
'4336':[[335,2834],],
'4554':[[384,1721],],
'4602':[[384,18],],
'4622':[[384,91],],
'4651':[[384,324],],
'4684':[[384,1292],[384,2168],],
'4754':[[384,1252],],
'4757':[[384,1322],],
'4864':[[384,2581],],
'4995':[[384,4600],],
'5101':[[384,7059],],
'5103':[[384,9398],],
'5191':[[384,9572],],
},{'12':[[384,724],],
'16':[[48,348],],
'31':[[246,1355],[87,81],],
'152':[[246,174],[246,157],[355,1407],],
'164':[[42,714],],
'203':[[217,384],],
'445':[[384,77],],
'531':[[217,219],[30,134],[217,411],],
'567':[[243,127],],
'1214':[[246,103],],
'2242':[[174,224],[277,474],],
},{'13':[[384,7047],],
'67':[[335,950],[181,148],[363,562],[42,698],[336,56],[160,87],],
'139':[[304,283],],
'149':[[274,771],[39,303],[242,80],[266,331],[30,137],],
'199':[[274,603],[182,39],[57,290],],
'215':[[42,227],[218,187],[42,476],],
'281':[[381,578],[52,232],[225,33],[62,96],],
'285':[[213,356],],
'370':[[181,174],],
'817':[[384,4891],],
'868':[[152,137],],
'1003':[[384,8352],[42,1288],],
'1283':[[176,110],],
'1359':[[54,1108],],
'1405':[[49,372],[152,192],[178,231],],
'1486':[[384,4851],],
'2022':[[49,356],],
'2590':[[384,3093],],
'2723':[[206,77],],
},{'19':[[30,145],[39,839],[49,157],[54,569],[181,669],[235,339],[331,42],[251,238],[384,5094],],
'551':[[246,925],],
},{'34':[[152,91],],
'77':[[125,121],],
'155':[[99,232],],
'924':[[30,146],],
'1151':[[153,75],],
'2337':[[280,86],[371,79],],
'2981':[[153,649],],
},{'1':[[246,127],],
'2':[[223,45],],
'3':[[42,297],[191,298],],
'8':[[384,3323],[384,3233],],
'12':[[253,223],[30,473],[246,1503],[246,1315],[246,1280],[277,351],[313,326],[243,109],[337,86],[344,189],[313,393],[218,74],[217,498],[384,9872],[313,421],[54,50],[384,8504],[384,8475],[54,414],[384,7837],[30,148],[384,7750],[384,7739],[384,7664],[384,21],[384,7284],[75,69],[384,2131],[384,7190],[384,6872],[384,6143],[174,140],[174,122],[320,155],[384,8590],[384,5860],[384,3826],[162,160],],
'15':[[355,1399],[42,660],],
'18':[[363,228],],
'23':[[243,185],[253,50],[30,372],[313,308],[95,50],[42,566],[162,197],[277,516],[313,73],[277,565],[335,2650],[363,417],[363,402],[191,113],[313,148],[191,31],[363,120],],
'26':[[363,210],],
'27':[[335,1317],],
'33':[[384,1576],],
'39':[[42,794],],
'41':[[355,210],],
'43':[[30,263],[320,91],[242,46],[191,226],],
'57':[[335,1455],[220,30],[138,34],],
'63':[[277,303],[277,878],[277,373],[277,457],[39,53],[39,87],[277,888],[384,9914],],
'68':[[30,365],],
'73':[[335,964],[306,1191],],
'77':[[242,117],[355,726],],
'81':[[30,410],[306,1414],],
'85':[[30,187],],
'128':[[85,35],[322,33],[128,32],],
'152':[[355,1373],[355,564],[395,116],[384,6001],],
'154':[[355,1450],],
'164':[[242,56],[253,38],[320,53],[335,2510],[277,539],[337,100],],
'196':[[162,218],[95,193],],
'224':[[290,193],[179,139],[179,1246],],
'248':[[95,74],[335,1600],[191,249],[335,1735],[355,590],[335,1245],],
'285':[[335,3724],],
'305':[[335,2206],[335,3053],],
'315':[[41,181],],
'343':[[174,111],],
'373':[[313,183],[363,273],],
'447':[[335,1747],[335,1612],[335,1473],],
'481':[[290,113],],
'540':[[335,2366],],
'542':[[335,397],],
'543':[[335,2369],],
'598':[[54,604],],
'673':[[30,223],],
'680':[[54,1253],],
'845':[[363,717],],
'846':[[396,79],[396,68],[396,33],],
'861':[[335,2396],],
'898':[[89,302],],
'915':[[70,405],[197,242],[179,1211],[384,8080],[290,165],[179,111],],
'981':[[384,4876],],
'995':[[344,202],],
'1004':[[277,924],[277,918],[179,1204],[290,160],[384,3430],[384,9444],],
'1101':[[335,1265],],
'1105':[[42,496],],
'1109':[[179,106],[306,508],],
'1169':[[184,35],],
'1226':[[355,1041],[217,502],],
'1302':[[174,31],[243,77],],
'1304':[[384,853],],
'1305':[[384,8018],],
'1308':[[42,733],[42,691],],
'1310':[[384,5134],[384,5247],],
'1319':[[355,147],],
'1413':[[335,2145],[335,2885],],
'1419':[[384,6466],],
'1424':[[42,739],],
'1437':[[42,838],],
'1591':[[335,2865],[179,1554],],
'1811':[[335,1647],[335,1796],],
'1952':[[48,4381],],
'2082':[[254,95],[92,32],[218,303],[95,3],[218,313],[355,1505],[355,11],[355,754],[95,26],[54,58],[363,278],[242,212],[95,345],[54,650],[374,39],[223,58],[54,393],[218,354],[242,8],[313,188],[171,456],[324,28],[324,38],],
'2141':[[54,564],],
'2158':[[54,815],],
'2182':[[54,1177],],
'2208':[[335,1356],],
'2332':[[384,9404],],
'2396':[[290,103],[217,487],[217,331],],
'2528':[[313,52],],
'2961':[[355,1289],],
'3220':[[174,43],],
'3222':[[355,314],],
'3251':[[344,144],],
'3271':[[179,129],[290,183],[179,1233],],
'3352':[[290,365],[179,311],],
'3453':[[290,611],[179,557],],
'3822':[[355,234],],
'3942':[[335,2463],],
'4096':[[278,38],],
'4354':[[335,2540],],
'4467':[[355,78],],
'4476':[[355,256],],
'4488':[[355,1121],],
'4774':[[384,1561],],
'4863':[[384,2573],[384,3882],],
},{'286':[[30,151],],
'595':[[307,109],[341,109],],
'696':[[49,205],],
},{'2':[[96,155],[301,24],[366,33],[384,6764],],
'15':[[384,2244],],
'19':[[30,480],],
'26':[[181,913],[181,845],],
'37':[[306,214],[48,794],],
'60':[[179,54],],
'77':[[176,173],],
'128':[[301,38],],
'165':[[246,276],[251,67],[99,91],[384,1632],[384,1913],],
'275':[[384,5146],],
'277':[[384,719],],
'279':[[70,91],[197,74],],
'348':[[42,388],[99,73],],
'442':[[30,157],],
'575':[[335,3017],[335,2165],],
'588':[[39,533],],
'837':[[384,2599],],
'986':[[384,6072],],
'1151':[[344,62],],
'1350':[[301,30],],
'1591':[[335,153],],
'2042':[[361,62],],
'3982':[[251,89],],
'4226':[[384,7440],],
},{'23':[[189,441],[30,159],],
},{'19':[[30,166],],
'26':[[384,477],],
'2877':[[133,122],],
},{'12':[[384,7133],[99,186],],
'15':[[162,148],[42,624],],
'19':[[359,52],[353,129],[54,428],],
'23':[[368,56],[83,110],[246,416],[95,96],[355,552],[96,132],],
'26':[[30,169],],
'47':[[164,199],],
'63':[[384,8849],],
'73':[[331,489],],
'77':[[170,186],[355,1326],[112,94],],
'140':[[384,6054],],
'197':[[48,4316],],
'271':[[70,422],[197,272],],
'301':[[54,758],[95,334],[95,158],],
'343':[[39,547],],
'449':[[384,2566],[384,813],[384,445],],
'671':[[42,975],],
'773':[[194,86],],
'915':[[290,409],[290,617],[179,355],[52,63],[179,846],[290,511],[179,510],[179,457],[290,564],[179,563],],
'1004':[[384,8397],],
'1184':[[266,259],],
'1304':[[179,1176],],
'1305':[[384,149],],
'1309':[[384,5786],],
'1463':[[384,7176],[384,4813],],
'2127':[[335,1219],],
'3229':[[384,8169],],
'4684':[[384,8929],],
'5058':[[384,8454],[384,8616],],
'5059':[[384,8265],],
},{'12':[[30,299],],
'19':[[30,190],],
'26':[[30,248],],
'63':[[30,402],],
'931':[[30,170],],
'1381':[[335,2427],],
},{'12':[[335,2471],],
'19':[[335,2549],[335,3287],],
'23':[[335,3015],],
'73':[[30,174],],
'140':[[335,3405],],
'182':[[48,1140],[48,1165],],
'271':[[335,3641],],
'436':[[335,3698],],
'445':[[335,3658],],
'470':[[335,2129],[335,2824],],
'506':[[384,7554],],
'877':[[41,129],],
'919':[[335,3770],],
'1029':[[48,2620],],
'1279':[[48,4416],],
'1917':[[48,4362],[306,1469],[48,4101],[306,1424],],
'1920':[[48,4109],[306,1432],[306,1477],],
'2127':[[335,3295],],
'2179':[[197,367],[70,677],[70,567],[197,509],],
'2346':[[179,887],],
'2448':[[335,3134],],
'2629':[[384,5609],],
},{'15':[[52,310],[30,182],],
'26':[[118,149],[244,191],],
'89':[[39,851],],
},{'19':[[42,316],],
'23':[[335,2357],[361,48],[315,166],[361,93],[335,3007],[315,134],[289,166],[289,134],[253,73],[335,2939],[361,103],[224,180],[224,131],],
'26':[[335,2839],[224,70],],
'33':[[335,1360],],
'54':[[224,195],],
'77':[[335,2869],],
'82':[[224,94],],
'173':[[224,23],],
'239':[[361,27],],
'298':[[224,135],],
'446':[[295,37],[313,231],[313,253],[191,140],[361,83],[191,281],[384,9448],[384,9370],[335,2592],[335,2321],],
'447':[[313,75],],
'451':[[335,2465],],
'551':[[335,2361],],
'615':[[224,207],],
'672':[[361,70],],
'737':[[224,55],],
'926':[[335,2651],],
'934':[[30,183],],
'943':[[30,232],],
'947':[[268,43],[384,7550],[384,9598],[335,2948],[335,2992],[384,9438],[344,302],[355,1418],[30,246],[384,8752],[335,2330],[335,2312],],
'1198':[[384,6494],],
'1338':[[42,943],[42,964],],
'2034':[[220,62],],
'2221':[[335,1409],[335,1403],],
'2495':[[335,1848],],
'4325':[[335,2348],],
'4355':[[335,2544],],
},{'3':[[246,455],],
'152':[[274,213],[363,94],[274,198],[363,371],],
'203':[[89,410],],
'284':[[266,255],],
'447':[[30,192],],
'639':[[313,93],],
'1472':[[234,421],],
'4498':[[356,43],],
},{'12':[[85,38],[335,760],[42,205],[42,615],[42,1136],[167,30],[246,193],[117,30],],
'23':[[42,1231],[384,1099],[30,198],[363,619],],
'817':[[384,2304],],
'842':[[321,148],[161,546],],
'926':[[363,403],],
'939':[[30,258],],
'1139':[[384,6367],],
'1475':[[42,1224],],
},{'12':[[315,193],[249,178],[180,50],[204,46],],
'19':[[161,434],[204,53],[204,28],],
'39':[[125,87],],
'63':[[30,252],],
'128':[[180,153],],
'152':[[249,159],],
'248':[[30,201],[249,263],],
'305':[[391,46],],
'436':[[335,3691],],
'443':[[224,166],],
'861':[[217,149],],
'1532':[[335,3106],],
},{'15':[[384,2893],[121,168],[246,1451],],
'23':[[57,252],[121,228],[57,245],[30,257],[335,3118],[335,2604],[313,479],[246,821],[283,180],[246,1418],[246,1425],[30,206],[247,93],[270,95],],
'36':[[246,785],[246,381],[246,343],[121,373],[246,888],],
'77':[[384,9073],],
'207':[[384,9150],],
},{'2':[[162,91],],
'15':[[95,66],[42,640],],
'16':[[246,182],],
'23':[[42,1113],],
'31':[[361,40],],
'39':[[355,912],],
'45':[[42,716],],
'63':[[384,8755],[266,282],[384,1534],],
'81':[[266,175],[191,207],],
'152':[[277,945],[306,322],],
'153':[[231,46],],
'203':[[335,2978],],
'373':[[95,161],],
'548':[[384,6432],],
'553':[[191,277],],
'705':[[30,214],],
'845':[[355,1443],],
'846':[[329,46],[384,7356],[363,498],[384,6251],[384,5068],[329,35],],
'915':[[179,121],[344,224],[179,1223],[290,175],],
'921':[[384,3868],[384,722],],
'935':[[191,282],[355,1419],],
'953':[[384,7679],],
'1033':[[191,269],],
'1128':[[243,53],],
'1467':[[234,360],[363,533],[234,397],],
'1848':[[335,1844],],
'2026':[[335,3438],],
'2082':[[197,639],[95,179],[95,113],[197,31],[54,657],[95,212],[306,15],[54,62],[171,1271],[95,224],[95,45],[54,6],[95,510],[95,153],[185,74],[95,90],[306,1620],[95,133],],
'2084':[[384,7726],],
'2182':[[218,56],],
'2342':[[384,5549],],
'2460':[[384,6878],],
'3197':[[384,2320],],
'4863':[[384,3844],[384,3859],],
},{'12':[[89,67],],
'150':[[363,226],],
'152':[[30,216],],
'359':[[196,92],[156,98],],
'447':[[277,359],],
'926':[[277,919],[355,591],],
'940':[[42,641],],
'2512':[[188,133],],
},{'54':[[313,418],],
'346':[[30,225],],
'3802':[[335,3001],],
},{'19':[[30,231],],
'31':[[70,529],],
},{'3':[[42,1258],[235,457],],
'168':[[301,69],],
'203':[[321,212],],
'230':[[274,162],[87,72],],
'420':[[30,234],[381,601],[235,276],],
'555':[[266,141],],
'562':[[384,3061],],
'1302':[[384,2757],],
'1340':[[52,265],],
'2033':[[384,5925],],
'2675':[[384,1790],[384,5954],],
'3091':[[176,99],],
'3598':[[355,1139],],
},{'23':[[384,6488],[30,236],],
'137':[[335,2658],],
'140':[[42,626],],
'182':[[42,50],],
'270':[[335,2641],],
'347':[[384,7808],[384,5278],[268,31],],
'533':[[42,209],],
'1331':[[355,1126],],
'1477':[[42,1178],],
'4494':[[355,1385],],
},{'945':[[30,237],],
},{'15':[[268,42],[355,1417],],
'18':[[355,162],],
'19':[[30,245],[335,2329],[384,9597],],
'23':[[335,3012],],
'38':[[313,285],],
'244':[[335,2947],[335,2311],],
'420':[[335,2336],],
'513':[[335,2991],],
'532':[[344,301],],
'562':[[384,9437],],
'1205':[[384,8751],],
'2084':[[384,7549],],
},{'3':[[384,5897],],
'19':[[341,202],[307,202],],
'23':[[341,193],[30,405],[307,193],[246,108],[246,526],],
'26':[[227,184],[331,293],],
'33':[[153,51],],
'271':[[217,444],],
'272':[[244,59],[118,58],[235,105],],
'370':[[214,255],],
'932':[[30,249],],
'2626':[[384,6535],],
'4629':[[384,2571],[384,3856],],
},{'3':[[153,1029],],
'23':[[186,417],[153,1034],],
'26':[[176,103],],
'34':[[296,29],[80,108],[296,142],[296,92],],
'45':[[335,2338],],
'59':[[384,5045],],
'77':[[189,412],[176,92],],
'143':[[30,254],],
'152':[[274,690],],
'241':[[384,7346],[235,237],],
'412':[[189,425],],
'417':[[376,31],[142,123],[157,40],[142,83],[373,41],[355,1208],[384,9525],[81,27],[355,576],[95,130],[355,404],[191,238],[89,353],[42,184],[335,737],[81,55],[42,594],],
'422':[[235,306],[384,7023],],
'454':[[181,807],],
'529':[[355,1190],[335,518],],
'532':[[274,210],],
'572':[[246,852],],
'615':[[244,179],[95,118],[118,137],],
'891':[[335,762],],
'921':[[384,4506],],
'1122':[[121,462],],
'1283':[[176,113],],
'1305':[[384,1326],],
'1350':[[42,170],],
'1351':[[384,1297],[384,1257],[251,263],[153,302],[178,264],],
'1380':[[384,9285],],
'1393':[[251,123],],
'1416':[[153,114],],
'1467':[[384,9279],],
'1591':[[335,1137],],
'1608':[[355,1222],],
'1908':[[384,5988],[384,6012],],
'2409':[[80,96],[296,130],],
'2462':[[384,9790],],
'3814':[[251,143],],
'4141':[[304,197],],
'4863':[[384,3829],],
'5092':[[384,6907],],
},{'78':[[384,7547],],
'173':[[335,139],[335,2486],],
'375':[[313,288],[30,265],],
'1592':[[335,2488],],
'4281':[[335,258],],
'4326':[[335,2281],],
},{'19':[[95,215],[30,276],],
'2331':[[153,43],],
},{'149':[[30,279],],
'4460':[[353,156],],
},{'7':[[217,259],[217,162],[217,281],],
'16':[[89,384],],
'23':[[153,148],[384,7678],[217,481],[384,9502],[243,137],[355,940],[344,153],[355,282],],
'31':[[30,291],],
'531':[[42,993],],
'1211':[[246,586],],
},{'7':[[350,201],[350,191],],
'12':[[339,255],[321,315],],
'30':[[331,333],],
'73':[[30,308],],
'128':[[76,18],],
'164':[[394,187],],
'370':[[30,350],],
'469':[[304,249],],
'955':[[30,333],],
},{'15':[[42,1186],],
'19':[[48,2521],],
'23':[[30,433],[246,665],[246,610],[246,623],[30,352],[30,332],[30,310],],
'26':[[42,1211],[42,1170],],
'77':[[246,646],],
'130':[[179,651],],
'154':[[384,3911],],
'243':[[42,1109],],
'523':[[246,1742],],
'572':[[42,1143],],
'646':[[384,4878],],
'937':[[42,1232],],
'1249':[[39,887],],
'1446':[[42,1248],],
'3482':[[246,688],[246,704],[179,649],[246,639],],
'3888':[[246,691],[246,660],[246,709],],
'5018':[[384,5097],],
},{'23':[[30,329],],
'63':[[384,3837],],
'252':[[384,3889],],
'275':[[384,3841],],
'422':[[227,61],[171,55],],
'816':[[30,318],],
'4682':[[384,3904],[384,3880],],
},{'63':[[162,311],],
'284':[[30,339],],
'869':[[153,241],],
},{'39':[[210,180],],
'43':[[30,341],],
'75':[[210,168],],
'143':[[48,1213],],
'186':[[335,1932],[335,1728],[335,1593],[335,1448],[335,2675],[335,787],[335,602],[335,413],[335,348],[306,1367],[335,3244],[335,1213],[197,405],[153,472],[70,607],[54,450],[48,4059],[335,3717],],
'215':[[48,2027],],
'217':[[48,1351],],
'224':[[48,1501],[48,1457],],
'241':[[70,200],[48,4456],],
'333':[[48,2025],],
'346':[[48,4283],],
'422':[[153,470],[197,403],[54,448],[70,605],],
'449':[[335,2867],[335,2816],[335,2121],],
'470':[[335,2814],[335,2119],[48,1195],],
'479':[[306,1365],[48,4057],],
'484':[[48,1061],],
'491':[[335,3549],],
'500':[[48,3175],],
'501':[[48,4886],],
'502':[[335,1211],[335,346],[335,2673],[335,1930],[335,600],[335,3715],[335,411],[335,3242],[335,785],],
'506':[[335,2197],[335,3044],],
'588':[[48,3090],],
'623':[[48,1219],],
'656':[[48,4596],],
'838':[[306,720],],
'935':[[335,2870],],
'949':[[335,1138],],
'958':[[335,3550],[48,4887],[70,608],[48,4598],[48,4597],[335,1139],[48,3176],[48,1254],[48,1264],],
'963':[[335,3042],[335,2195],],
'1029':[[48,2071],],
'1211':[[48,2030],],
'1237':[[335,1726],],
'1333':[[335,1706],],
'1388':[[48,2480],],
'1591':[[48,1867],[48,2059],[48,1239],],
'1602':[[48,1783],],
'1632':[[48,1768],],
'1663':[[48,1253],],
'1665':[[48,1263],],
'1670':[[48,1244],],
'1749':[[48,1983],[48,2035],[48,2006],],
'1762':[[48,2477],],
'1837':[[48,3086],[48,4593],],
'1846':[[306,1363],[48,4055],],
'1933':[[48,4280],],
'2332':[[335,1591],[335,1446],],
'2372':[[335,3248],],
'3702':[[335,2568],[335,3547],],
'4312':[[335,1788],],
'4353':[[335,2570],],
'4371':[[335,3246],],
},{'14':[[87,78],],
'38':[[30,343],],
'203':[[277,948],[49,454],],
'1462':[[274,222],[384,1254],[251,259],],
},{'81':[[30,346],],
'128':[[363,299],[322,81],[128,84],[313,207],],
'162':[[335,799],],
'199':[[335,2350],[335,1866],[335,2340],],
'373':[[355,1058],],
'845':[[363,689],[363,664],[199,37],[363,644],[199,57],],
'846':[[396,146],],
'915':[[243,151],[355,296],[344,167],],
'1101':[[313,214],],
'1304':[[384,4146],],
'1308':[[384,7314],[42,674],[242,156],],
'1314':[[42,756],],
'1424':[[197,260],[384,8464],],
'1467':[[355,746],[384,9392],],
'2082':[[384,7646],],
'2157':[[54,732],[95,299],],
'2158':[[95,316],],
'4729':[[384,3994],],
'5058':[[384,8467],],
},{'15':[[219,20],[39,793],[262,20],[235,342],[352,74],[193,74],],
'26':[[321,286],],
'196':[[54,1427],],
'317':[[181,420],],
'366':[[181,53],],
'462':[[160,26],],
'705':[[350,205],[335,2551],[30,356],],
'1237':[[335,2439],],
'2484':[[181,222],],
'3826':[[242,198],],
},{'961':[[30,357],],
},{'16':[[30,359],[313,341],],
'23':[[335,3109],[335,3762],],
'31':[[42,578],[253,158],[295,31],[186,456],[95,33],[361,79],],
'147':[[335,3049],[335,2202],],
'152':[[68,92],],
'165':[[335,3126],],
'182':[[335,3026],[335,2174],],
'237':[[337,53],],
'548':[[220,87],],
'1004':[[335,303],[335,1882],[335,1149],[335,705],[335,3559],[335,483],[335,3202],],
'1029':[[335,2199],[335,3046],],
'1591':[[335,3041],[335,2194],],
'4332':[[335,2185],],
'4361':[[335,3142],],
'4363':[[335,3144],],
'4370':[[335,3137],],
},{'615':[[30,367],],
},{'12':[[30,379],],
},{'506':[[30,381],],
},{'152':[[30,383],],
},{'3':[[358,9],[171,170],[208,82],[227,297],[261,20],[261,230],[390,3],[358,391],[384,3848],],
'13':[[384,687],[384,672],[384,3287],[384,8099],[384,7099],],
'15':[[390,104],[390,30],[390,130],],
'23':[[30,386],],
'33':[[384,1153],],
'63':[[384,5644],],
'275':[[384,4295],],
'884':[[384,3851],],
'2675':[[384,5915],[384,3942],],
'3739':[[384,1157],],
'4405':[[384,678],],
},{'12':[[342,106],[111,72],[378,32],],
'23':[[135,182],],
'152':[[320,81],],
'248':[[30,390],],
'1255':[[48,2849],[48,3228],],
'1767':[[48,2212],],
'1769':[[48,2215],],
'1771':[[48,2228],],
'1772':[[48,2231],],
'1773':[[48,2244],],
'1774':[[48,2247],],
'1824':[[48,2869],[48,3266],],
'1825':[[48,3273],[48,2876],],
'1948':[[48,4345],],
'2136':[[135,150],[100,193],],
},{'19':[[48,708],[277,70],[30,392],],
'23':[[121,484],[313,245],[42,865],],
'165':[[30,438],],
'239':[[239,29],],
'256':[[257,85],],
'448':[[257,63],],
'552':[[42,724],],
'931':[[52,64],],
'1222':[[39,744],],
'1374':[[42,947],[98,40],[235,168],[42,309],[384,9273],[384,9919],],
'2034':[[384,4121],],
'4052':[[335,3489],],
},{'31':[[164,579],],
'33':[[30,396],],
'63':[[164,623],],
},{'63':[[30,416],],
'542':[[39,889],],
'971':[[30,397],],
},{'18':[[30,400],],
},{'73':[[30,412],],
},{'15':[[186,98],],
'89':[[186,109],],
'443':[[30,419],],
'1120':[[384,1685],],
},{'18':[[30,422],],
},{'19':[[30,426],],
'4858':[[384,3453],],
'4981':[[384,4355],],
},{'27':[[355,459],],
'52':[[61,63],],
'63':[[384,3670],],
'149':[[186,65],[251,213],[95,58],[231,68],[160,554],[161,66],[342,138],],
'199':[[54,1100],],
'250':[[355,1195],[153,319],],
'281':[[82,549],[30,428],],
'817':[[384,9891],],
'1340':[[42,1019],],
'4184':[[307,92],[341,92],],
},{'2':[[277,773],],
'25':[[384,4398],],
'49':[[339,52],],
'67':[[220,99],],
'241':[[306,1175],],
'299':[[246,1655],],
'447':[[181,380],],
'451':[[103,99],[150,99],],
'813':[[251,319],],
'940':[[95,162],],
'949':[[186,418],],
'970':[[30,439],],
'1005':[[73,79],],
'1109':[[242,189],],
'1254':[[246,1763],],
'1319':[[246,1299],],
'1424':[[54,1098],],
'1448':[[70,325],],
'1679':[[384,4125],],
'2148':[[355,613],],
'2263':[[57,231],],
'2325':[[384,6269],],
'2415':[[134,123],[302,125],],
'2445':[[335,3059],[335,2212],],
'3080':[[160,513],],
'3743':[[214,227],],
'3761':[[234,368],],
'4228':[[321,294],[339,234],],
'4555':[[368,80],],
},{'979':[[30,440],],
},{'12':[[384,4554],[384,4875],],
'39':[[30,443],],
'750':[[384,2504],],
'846':[[303,96],],
'2310':[[335,613],],
},{'43':[[30,452],[48,107],[48,674],[52,43],[335,3367],[142,157],[373,70],[181,562],[249,167],],
'351':[[54,1227],[341,179],[164,94],[307,179],],
},{'12':[[30,454],],
},{'84':[[30,456],],
'343':[[197,72],[277,962],[70,89],],
},{'336':[[30,459],],
},{'7':[[56,47],[171,405],[212,5],[254,44],[252,3],[252,97],],
'33':[[384,6771],[384,5167],],
'117':[[301,0],],
'173':[[301,16],],
'322':[[212,83],],
'374':[[384,6071],],
'375':[[30,485],],
},{'7':[[254,143],[92,80],[171,504],[172,3],[172,168],[211,68],[199,5],],
'117':[[31,0],],
'213':[[31,15],],
'421':[[367,17],],
'667':[[199,105],],
'2903':[[373,19],],
'3977':[[250,19],],
},{'7':[[31,5],[211,70],[42,1331],[92,82],[171,506],[254,145],],
'117':[[172,0],],
'213':[[172,13],],
'667':[[31,55],],
'791':[[244,21],],
},{'7':[[31,20],],
'229':[[31,39],],
'421':[[335,619],[153,570],],
},{'7':[[31,26],],
'33':[[116,113],],
'230':[[31,42],],
'356':[[142,137],],
},{'7':[[31,32],],
'381':[[31,50],],
},{'23':[[250,75],[367,69],[31,46],],
'124':[[142,62],],
'949':[[142,124],],
},{'19':[[178,76],[178,105],],
'992':[[250,76],[367,70],[31,47],],
},{'99':[[290,441],[179,387],],
'217':[[384,9198],],
'314':[[48,1574],[48,1631],],
'737':[[32,17],],
'780':[[39,474],[39,929],[39,449],],
'1600':[[48,1667],[48,1597],[48,1673],],
'3448':[[290,594],[179,540],],
'4726':[[384,867],],
'4845':[[384,4411],],
},{'15':[[344,198],],
'16':[[157,74],[113,50],[331,239],],
'18':[[243,46],],
'19':[[257,61],[257,78],[172,155],[355,1229],[242,104],[277,451],[277,223],[277,297],[246,738],],
'26':[[70,401],[197,238],],
'31':[[355,1369],],
'33':[[384,7667],[355,81],],
'36':[[125,140],],
'63':[[344,201],[384,8381],],
'128':[[32,19],],
'203':[[217,366],],
'529':[[242,85],],
'603':[[57,307],],
'869':[[246,1871],],
'915':[[217,173],],
'1003':[[331,125],],
'1119':[[39,215],[200,254],],
'1305':[[290,172],[179,118],[179,1220],],
},{'7':[[200,71],],
'19':[[42,374],],
'23':[[42,978],],
'26':[[65,82],],
'63':[[39,596],],
'230':[[384,8883],],
'532':[[384,4535],],
'572':[[39,438],[39,908],],
'642':[[224,46],[32,24],[158,35],],
},{'7':[[304,189],],
'23':[[42,418],],
'33':[[42,1120],],
'241':[[32,27],],
'295':[[224,48],[158,37],],
},{'7':[[171,757],[354,46],[163,5],[259,52],[369,161],[259,3],],
'117':[[33,0],],
'232':[[163,83],],
'313':[[33,16],],
},{'7':[[33,3],[33,54],[45,3],[354,44],[171,755],[369,159],],
'31':[[213,284],],
'117':[[163,0],],
'232':[[45,41],],
'313':[[163,16],],
},{'7':[[354,48],[171,759],[194,114],[369,163],[33,5],],
'117':[[259,0],],
'232':[[33,59],],
'313':[[259,14],],
},{'228':[[33,18],],
},{'19':[[163,23],[259,21],[33,23],],
'59':[[95,353],],
'130':[[54,433],],
'155':[[355,157],],
'357':[[381,528],],
'869':[[49,484],],
'2836':[[125,200],],
},{'7':[[316,72],],
'12':[[153,1041],[53,124],[381,519],],
'16':[[335,1068],[331,124],[384,6464],[335,3128],[173,306],[177,45],[89,94],[218,356],[217,304],[246,286],[235,332],[137,261],[49,500],],
'30':[[384,6711],[132,26],[162,362],[313,299],[42,1274],[363,734],[246,1614],[384,6682],[199,94],],
'63':[[384,5415],],
'146':[[313,346],],
'164':[[181,204],[298,65],[298,57],[213,367],[365,144],[381,112],[127,65],[127,57],],
'203':[[181,760],[48,2153],],
'224':[[335,2404],[306,985],[162,290],[48,3740],],
'248':[[381,255],[160,219],[384,6191],[181,608],[384,7780],[49,270],[371,97],[220,120],[335,551],[246,474],[335,1467],[335,1606],[335,1741],[280,104],],
'301':[[384,2922],],
'349':[[384,6599],],
'351':[[121,305],],
'533':[[42,1287],],
'615':[[353,177],],
'659':[[290,82],],
'817':[[329,39],[384,7824],],
'1002':[[163,24],[33,24],[259,22],],
'1314':[[242,196],],
'1433':[[42,814],],
'1837':[[49,467],],
'2333':[[384,1803],],
'2415':[[384,8351],],
'2836':[[355,991],],
'3072':[[160,278],],
'3626':[[355,1454],],
'3760':[[277,135],],
'3931':[[320,62],],
'4055':[[381,105],],
},{'10':[[384,8534],],
'24':[[384,4184],],
'48':[[350,168],],
'82':[[83,24],[384,4780],],
'95':[[54,355],[70,369],[197,206],[179,1012],[335,237],],
'125':[[335,169],[179,952],[179,919],[335,189],],
'139':[[54,978],],
'144':[[163,43],[45,32],[33,36],[259,34],],
'167':[[384,8420],],
'215':[[48,4038],[48,2318],[48,3351],[48,1044],[48,2914],[179,749],[179,816],[306,1346],[306,626],[48,1035],],
'241':[[82,396],[82,365],],
'271':[[266,315],],
'277':[[303,66],],
'282':[[277,75],],
'284':[[384,6320],],
'321':[[384,5586],],
'422':[[48,2856],[48,3235],[48,3259],],
'445':[[335,2917],[335,2152],],
'447':[[335,1881],[335,482],[335,1148],[335,302],[335,3558],[335,704],[335,3201],],
'461':[[153,923],],
'465':[[84,550],],
'489':[[303,80],],
'547':[[306,316],],
'628':[[48,4855],],
'700':[[48,511],],
'774':[[153,1377],[153,1155],],
'791':[[335,406],[335,2668],[335,1718],[335,1579],[335,1420],[335,1205],[335,1567],[335,1433],],
'823':[[54,1299],],
'915':[[384,8625],[384,8396],],
'931':[[384,8455],],
'933':[[197,510],[70,678],],
'1004':[[179,817],[179,750],[54,1514],[48,2319],[48,1036],[179,1301],[48,140],[48,2591],[48,2915],[48,1045],[48,3352],[306,1347],[306,627],[48,4039],],
'1069':[[153,868],[153,1115],[153,1286],],
'1101':[[290,49],],
'1109':[[179,1203],[277,923],[384,3429],[384,9443],[277,917],[290,159],],
'1301':[[48,3488],],
'1305':[[384,4685],[174,250],[384,5488],[41,162],[384,5613],[384,6121],[384,6091],[384,5434],[384,6164],[384,6826],],
'1309':[[384,7072],[384,6371],[344,278],[217,467],[243,131],[243,153],[384,7168],[384,6147],[344,147],[384,7186],[384,7216],[384,7254],[384,7350],[384,5748],[355,276],[381,452],],
'1310':[[162,169],[384,7582],],
'1326':[[335,595],],
'1504':[[384,9528],[384,9768],[384,5912],],
'1510':[[335,581],],
'1519':[[48,139],],
'1588':[[48,3218],[48,3064],[48,3060],[48,1331],[48,890],[48,2753],[48,553],[48,1327],[48,4558],[48,557],[48,4562],[48,2172],[48,572],[48,568],[48,928],[48,1532],[48,1536],],
'1597':[[48,1514],],
'1598':[[48,1476],[48,1408],],
'1629':[[306,485],],
'1639':[[48,1406],],
'1719':[[267,21],],
'1722':[[48,1799],],
'1724':[[48,1805],],
'1737':[[48,1927],[48,1908],[48,1904],[48,1923],],
'1748':[[48,3035],[48,3543],],
'1798':[[48,2607],],
'1802':[[48,2590],],
'1828':[[70,569],[197,369],[306,1149],],
'1881':[[306,1242],[48,3914],],
'1893':[[48,4513],],
'1901':[[48,4899],],
'1940':[[48,4834],],
'1958':[[48,4474],],
'1998':[[49,132],],
'2076':[[162,112],],
'2147':[[54,1498],[54,1447],[54,1467],],
'2153':[[179,1300],],
'2171':[[54,1308],],
'2172':[[54,1403],[54,1363],],
'2173':[[54,1407],[54,1367],],
'2183':[[54,1513],],
'2220':[[76,25],],
'2241':[[112,63],],
'2415':[[142,108],],
'2568':[[153,435],],
'2712':[[306,1562],],
'2958':[[153,397],],
'3527':[[335,780],],
'3702':[[335,3523],],
'4445':[[350,187],],
'5060':[[384,6101],],
},{'7':[[122,32],[372,47],],
'12':[[160,391],[160,308],[151,24],],
'16':[[207,73],],
'140':[[160,318],],
'144':[[207,101],],
'152':[[272,49],],
'183':[[319,54],],
'186':[[122,114],[73,78],],
'231':[[122,137],],
'340':[[122,84],],
'1004':[[33,37],],
'2997':[[153,1170],[153,1391],[335,660],[335,894],[335,911],[153,966],[153,1333],],
},{'12':[[160,405],[160,398],],
'16':[[62,125],[160,472],[73,46],[359,63],[160,340],[160,566],],
'19':[[62,131],[160,477],],
'31':[[44,66],[33,43],[305,46],[160,96],[260,56],[259,41],[163,67],[198,62],[368,50],],
'39':[[160,624],],
'152':[[176,157],],
'164':[[359,89],],
'349':[[160,125],],
'353':[[73,66],],
'548':[[122,76],],
},{'7':[[198,92],[354,68],[369,183],[198,3],[73,3],[171,779],],
'12':[[287,79],[160,325],[102,164],],
'15':[[305,70],],
'39':[[274,816],],
'63':[[359,124],],
'73':[[181,80],],
'77':[[265,32],],
'89':[[62,100],],
'117':[[305,0],],
'140':[[49,272],[160,221],],
'150':[[163,71],[259,45],[33,47],[287,98],],
'232':[[73,90],],
'1326':[[305,82],[305,76],],
'1391':[[359,70],[163,55],[368,64],],
'1493':[[305,16],],
'2299':[[62,135],[160,485],],
'2629':[[160,577],],
'2997':[[335,655],],
},{'33':[[259,49],[163,75],[33,51],],
'210':[[198,23],[305,20],[73,18],],
'338':[[198,54],],
'1839':[[305,39],[73,35],],
},{'7':[[34,5],[171,940],[148,165],[148,3],[38,136],[369,344],],
'19':[[247,226],],
'49':[[34,141],],
'117':[[36,0],],
'228':[[36,16],],
'506':[[102,194],],
},{'7':[[35,25],[254,61],[171,422],[78,30],[78,3],],
'33':[[52,137],],
'61':[[70,317],],
'63':[[70,145],[303,177],],
'117':[[308,0],],
'150':[[308,117],[266,98],],
'165':[[70,337],],
'173':[[308,14],],
'734':[[35,54],],
'2629':[[336,115],],
},{'7':[[35,37],[254,73],[171,434],[149,3],[149,37],],
'117':[[127,0],],
'329':[[127,16],],
'376':[[215,120],],
'1010':[[308,15],],
},{'7':[[35,47],[171,444],[382,5],[254,83],],
'117':[[311,0],],
'122':[[215,13],],
'329':[[311,16],],
'376':[[382,93],],
'832':[[215,15],],
},{'7':[[35,49],[56,51],[171,409],[230,28],[252,5],[254,48],],
'117':[[267,0],],
'173':[[267,14],],
'322':[[252,100],],
},{'7':[[36,5],[207,114],[38,138],[207,3],[171,942],[369,346],],
'49':[[36,199],],
'117':[[148,0],],
'228':[[148,16],],
'375':[[177,26],],
'420':[[207,36],],
},{'16':[[36,50],],
'285':[[153,753],],
},{'63':[[188,199],],
'67':[[95,189],],
'82':[[335,589],],
'83':[[335,652],],
'121':[[257,109],[49,326],],
'128':[[178,210],[36,137],[218,263],],
'199':[[164,324],[118,107],],
'244':[[218,212],],
'281':[[188,230],],
'285':[[54,1476],],
'817':[[384,9579],],
'839':[[307,67],[341,67],],
'861':[[326,36],],
'916':[[48,2526],],
'953':[[246,587],],
'1315':[[246,1793],[246,579],],
},{'77':[[54,740],[95,307],],
'224':[[36,147],],
},{'19':[[181,431],],
'1017':[[36,148],],
},{'15':[[343,52],[343,29],],
'26':[[36,150],],
'34':[[247,119],[181,903],[86,117],[131,114],[77,99],[137,100],[57,124],[173,145],[270,121],],
'48':[[190,23],[190,34],[190,37],[82,308],[181,43],[228,33],[356,28],],
'49':[[342,234],[384,9632],],
'155':[[265,39],],
'162':[[152,95],],
'203':[[343,94],],
'791':[[209,209],[131,143],[332,152],[270,215],[77,128],[247,213],],
},{'16':[[89,361],[283,185],[304,316],[36,153],],
'534':[[152,187],],
'1143':[[153,605],],
},{'7':[[269,5],[38,122],[100,3],[100,205],[171,926],[369,330],],
'15':[[283,224],],
'33':[[36,156],],
'49':[[269,230],],
'117':[[284,0],],
'215':[[181,357],],
'228':[[284,16],],
'921':[[284,185],],
'1070':[[247,216],],
},{'23':[[36,183],],
'73':[[36,181],],
},{'7':[[147,5],[248,61],[171,1030],[76,3],[76,102],[369,434],],
'33':[[87,53],],
'117':[[37,0],],
'140':[[84,310],],
'150':[[321,240],],
'333':[[37,16],],
'375':[[147,31],],
'420':[[258,59],],
'1037':[[147,37],],
'1550':[[48,1613],],
},{'7':[[37,3],[37,91],[47,5],[248,59],[369,432],[171,1028],],
'117':[[147,0],],
'333':[[147,16],],
'1037':[[47,40],],
},{'7':[[37,5],[333,27],[333,3],[248,63],[171,1032],[369,436],],
'117':[[76,0],],
'150':[[76,69],],
'173':[[76,16],],
'1037':[[37,95],],
'2388':[[76,43],],
},{'134':[[37,26],],
'333':[[37,18],],
},{'16':[[39,347],],
'19':[[181,651],],
'23':[[47,28],[54,347],[145,30],[147,20],[164,492],[179,1004],[37,22],[190,31],[212,32],[317,128],[317,67],[258,54],[288,20],[335,230],],
'63':[[232,105],],
'130':[[214,231],],
'447':[[335,110],],
},{'7':[[369,416],[360,56],[171,1012],[248,43],[360,3],[350,3],],
'12':[[384,6344],],
'26':[[37,49],],
'117':[[87,0],],
'213':[[87,15],],
'1037':[[350,227],],
},{'3':[[179,984],],
'16':[[37,60],],
'26':[[246,484],],
'48':[[306,497],],
'82':[[179,1207],[179,1217],[306,514],],
'94':[[179,876],],
'99':[[48,1368],],
'143':[[335,157],],
'186':[[37,72],],
'196':[[153,703],],
'199':[[48,2619],],
'224':[[179,1021],[48,1388],[48,1449],[48,4547],[48,1493],[153,460],[306,1573],[179,996],[179,1249],[70,379],[48,520],[153,288],[153,718],[54,364],[179,1508],[179,1558],[54,339],[306,1605],[335,246],[335,221],[48,2599],[306,449],[153,408],[306,476],[48,2685],[48,505],[197,216],[48,4531],],
'231':[[54,550],[54,619],],
'237':[[48,1503],[48,1459],[48,1246],],
'241':[[48,2630],],
'279':[[48,1295],],
'359':[[70,240],],
'451':[[335,2873],],
'479':[[48,4752],],
'491':[[48,1063],],
'493':[[48,2070],[48,1850],],
'502':[[153,446],],
'515':[[48,1223],],
'532':[[48,4847],],
'656':[[48,3093],],
'674':[[48,3965],[306,1297],],
'727':[[179,892],],
'876':[[48,2637],],
'926':[[179,1234],],
'950':[[335,2489],],
'958':[[335,1729],[335,1789],[70,609],[335,1933],[306,1368],[54,451],[48,4599],[48,4457],[48,4284],[153,473],[48,4060],[335,2122],[335,1707],[197,406],[335,1594],[335,2198],[48,2481],[70,201],[335,2571],[335,2676],[335,1449],[335,349],[335,2817],[335,1214],[48,1784],[335,1140],[335,414],[335,788],[48,1769],[335,3045],[48,1352],[335,603],[335,3249],[335,3551],[335,3718],],
'1030':[[258,76],],
'1139':[[179,1226],],
'1178':[[306,727],[48,1201],],
'1405':[[153,1254],],
'1455':[[179,1261],],
'1500':[[197,599],[70,757],],
'1591':[[179,1551],[48,1966],[179,1601],[48,2090],[179,828],[54,629],[179,1446],[179,1501],[179,867],],
'1593':[[335,195],[153,970],[153,1174],[54,323],[306,460],[48,4869],[48,4792],[48,4174],[179,958],[153,1337],[153,1395],[48,1726],[153,221],[306,1514],],
'1602':[[48,1736],],
'1678':[[48,1267],[48,1257],],
'1681':[[48,1285],],
'1727':[[335,275],[179,1621],[48,1827],],
'1736':[[48,1877],],
'1749':[[48,2010],[48,1987],],
'1793':[[48,2469],],
'1846':[[179,1453],],
'1909':[[306,397],],
'1910':[[335,177],[306,1254],[48,3925],[179,927],[70,293],[197,174],],
'1915':[[48,3979],[306,1310],],
'2026':[[153,1061],],
'2133':[[54,1180],],
'2135':[[54,524],],
'2346':[[179,889],],
'2626':[[246,616],],
'2765':[[335,1778],[335,1756],],
'2986':[[153,796],],
'3275':[[179,1270],],
'3506':[[179,843],],
'3512':[[179,967],],
'3515':[[179,1029],],
'4277':[[335,298],],
'4278':[[335,478],],
'4279':[[335,700],],
'4280':[[335,1086],],
'4281':[[335,1877],],
'4282':[[335,3197],],
'4283':[[335,3494],],
'4284':[[335,263],],
'4343':[[335,2847],],
},{'7':[[171,1006],[369,410],[248,37],[350,223],],
'12':[[37,63],[384,7391],],
'18':[[258,75],],
'33':[[333,25],],
'117':[[258,0],],
'128':[[258,19],],
'150':[[321,267],],
'152':[[351,60],],
'313':[[258,12],],
'369':[[203,71],],
'734':[[248,76],],
'838':[[258,31],],
},{'267':[[48,3425],[48,2966],[306,673],],
'696':[[37,70],],
'1030':[[37,64],],
},{'31':[[37,67],],
'1591':[[48,1059],],
},{'2':[[212,66],[145,64],],
'33':[[65,148],],
'35':[[384,2515],[381,566],],
'39':[[54,1146],],
'43':[[164,274],],
'49':[[189,142],],
'146':[[53,80],],
'165':[[335,3121],],
'167':[[80,101],[384,4511],[296,135],],
'196':[[262,23],],
'206':[[335,451],],
'213':[[49,475],],
'220':[[176,220],],
'225':[[160,149],],
'232':[[214,62],[394,153],],
'241':[[384,2430],[363,698],],
'244':[[191,268],],
'274':[[384,6705],],
'316':[[358,124],],
'321':[[219,23],],
'462':[[181,978],],
'480':[[234,374],],
'503':[[83,83],],
'515':[[200,219],],
'609':[[338,37],[263,41],[203,43],],
'926':[[355,565],[54,394],],
'941':[[355,592],],
'949':[[373,42],],
'975':[[186,110],],
'1029':[[37,73],],
'1109':[[217,477],],
'1225':[[335,2951],],
'1229':[[347,51],],
'1267':[[117,42],[167,42],],
'1340':[[52,278],],
'1405':[[178,255],],
'1559':[[363,571],],
'1839':[[353,162],],
'2054':[[207,84],],
'2068':[[268,40],],
'2144':[[395,128],],
'2232':[[160,179],],
'2288':[[170,247],],
'2332':[[335,2448],],
'2384':[[367,57],[384,3221],[81,44],[384,3011],[250,63],],
'2584':[[213,371],],
'2704':[[210,161],],
'2721':[[181,1019],],
'2765':[[246,97],],
'3169':[[164,573],],
'3198':[[384,2682],],
'3556':[[214,85],],
'4423':[[342,240],],
'4585':[[381,195],],
'4868':[[384,2691],],
'5044':[[384,5634],],
},{'230':[[37,77],],
'2510':[[96,73],[87,74],],
},{'7':[[87,32],],
'26':[[37,80],],
'2509':[[87,69],],
},{'15':[[37,89],],
},{'24':[[37,94],[38,18],[47,39],[76,105],[87,96],[105,73],[129,30],[139,6],[147,36],[171,1002],[248,2],[258,81],[258,84],[275,38],[288,55],[294,51],[333,30],[350,226],[360,59],[369,406],[385,74],],
},{'203':[[181,122],],
'501':[[384,9209],],
'791':[[38,29],],
},{'1038':[[38,30],],
},{'7':[[38,40],[312,3],[171,844],[166,3],[166,26],[369,248],],
'49':[[312,69],],
'117':[[110,0],],
'313':[[110,16],],
},{'7':[[38,42],[255,26],[110,5],[255,3],[171,846],[369,250],],
'49':[[110,49],],
'117':[[166,0],],
'140':[[82,518],],
'152':[[229,67],],
'313':[[166,16],],
},{'7':[[38,44],[348,27],[166,5],[348,3],[171,848],[369,252],],
'49':[[166,32],],
'63':[[82,520],],
'117':[[255,0],],
'152':[[229,78],],
'313':[[255,16],],
},{'7':[[38,46],[378,3],[369,254],[171,850],[378,36],[255,5],],
'12':[[53,104],],
'26':[[207,112],],
'49':[[255,32],],
'117':[[348,0],],
'241':[[165,50],],
'313':[[348,16],],
},{'7':[[38,48],[369,256],[348,5],[109,3],[109,31],[171,852],],
'49':[[348,33],],
'117':[[378,0],],
'313':[[378,16],],
'389':[[57,27],[86,25],],
},{'7':[[378,5],[369,258],[316,121],[171,854],[38,50],],
'49':[[378,42],],
'117':[[109,0],],
'135':[[283,237],],
'313':[[109,14],],
'389':[[283,22],[187,25],],
'2991':[[153,890],[153,1152],[153,1374],],
},{'7':[[38,54],[272,51],[272,3],[171,858],[369,262],],
'49':[[109,37],],
'117':[[316,0],],
'213':[[316,13],],
'346':[[180,75],],
'1033':[[49,476],],
},{'7':[[133,3],[133,128],[369,264],[316,3],[171,860],[38,56],],
'49':[[316,127],],
'117':[[272,0],],
'213':[[272,15],],
'375':[[148,70],],
'700':[[148,20],],
'2246':[[393,20],[282,20],],
'3257':[[177,22],],
},{'7':[[38,58],[379,3],[369,266],[272,5],[171,862],[379,222],],
'26':[[229,65],[165,45],],
'49':[[272,57],],
'117':[[133,0],],
'213':[[133,15],],
},{'7':[[38,60],[60,3],[60,104],[82,136],[369,268],[133,5],[171,864],],
'23':[[333,23],],
'49':[[133,134],],
'89':[[82,443],],
'117':[[379,0],],
'122':[[338,15],],
'213':[[379,15],],
'2386':[[333,15],],
'4398':[[338,60],],
},{'7':[[38,62],[379,5],[369,270],[232,134],[171,866],[232,3],],
'49':[[379,228],],
'117':[[60,0],],
'213':[[60,15],],
'700':[[82,28],],
},{'7':[[38,64],[171,868],[369,272],[82,562],[60,5],],
'49':[[60,110],],
'117':[[232,0],],
'128':[[232,45],],
'213':[[232,13],],
'215':[[173,30],],
'241':[[270,25],[247,25],[55,25],],
'375':[[247,109],[270,111],[137,90],[131,104],[57,114],[77,89],[86,107],[173,135],],
'538':[[82,30],],
'700':[[131,22],[77,20],[137,22],],
'1044':[[86,26],[57,28],],
'2248':[[153,643],],
'2302':[[64,22],],
},{'7':[[38,68],[171,872],[165,82],[165,3],[369,276],],
'12':[[190,51],],
'23':[[247,114],[77,94],[173,140],[57,119],[137,95],[131,109],[86,112],[270,116],],
'49':[[232,140],],
'93':[[82,152],[82,168],[82,181],[82,199],[82,212],[82,224],[82,245],[82,260],[82,277],[82,290],[82,454],[82,515],[82,128],[82,114],[86,31],[82,95],[137,27],[82,75],[77,25],[82,61],[57,33],[173,35],[82,44],[343,21],[343,16],[190,16],[82,23],[228,16],[228,22],[82,140],[247,30],[356,16],[270,30],[131,27],],
'117':[[82,0],],
'140':[[181,31],],
'150':[[181,50],],
'722':[[356,22],],
'1329':[[82,14],],
},{'7':[[38,70],[286,43],[171,874],[369,278],[82,3],],
'12':[[229,173],],
'15':[[133,79],[255,23],[166,23],],
'19':[[207,109],],
'26':[[229,181],],
'33':[[50,52],[53,42],],
'48':[[50,19],[53,19],],
'49':[[82,568],],
'63':[[229,176],],
'89':[[207,55],[148,152],],
'117':[[165,0],],
'220':[[82,65],],
'593':[[82,509],],
'700':[[82,250],],
'1329':[[165,14],],
'1495':[[207,21],],
'2246':[[177,20],],
'2435':[[82,235],],
},{'7':[[113,3],[113,70],[369,282],[171,878],[38,74],],
'49':[[165,88],],
'117':[[286,0],],
'173':[[286,14],],
},{'7':[[38,76],[44,3],[44,147],[286,3],[369,284],[171,880],],
'49':[[286,49],],
'117':[[113,0],],
'173':[[113,16],],
},{'7':[[38,78],[263,100],[263,3],[113,5],[171,882],[369,286],],
'33':[[276,67],],
'49':[[113,76],],
'89':[[283,151],],
'117':[[44,0],],
'346':[[203,45],[338,39],[263,43],],
'1493':[[44,16],],
},{'7':[[38,80],[44,5],[338,92],[338,3],[171,884],[369,288],],
'49':[[44,153],],
'117':[[263,0],],
'123':[[263,16],],
'152':[[44,121],[276,78],],
'420':[[203,80],],
},{'7':[[38,82],[263,5],[171,886],[203,3],[203,82],[369,290],],
'33':[[276,76],[44,119],],
'49':[[263,106],],
'117':[[338,0],],
'1049':[[338,16],],
},{'7':[[38,84],[171,888],[338,5],[287,103],[287,3],[369,292],],
'49':[[338,98],],
'117':[[203,0],],
'173':[[203,16],],
},{'7':[[38,86],[53,3],[53,145],[171,890],[203,5],[369,294],],
'49':[[203,88],],
'117':[[287,0],],
'1493':[[287,16],],
},{'7':[[38,88],[50,3],[287,5],[50,112],[171,892],[369,296],],
'18':[[173,303],[137,258],],
'49':[[287,109],],
'117':[[53,0],],
'123':[[53,16],],
'187':[[181,620],],
'1225':[[50,81],],
},{'7':[[38,96],[69,5],[273,50],[171,900],[369,304],[273,3],],
'49':[[69,99],],
'67':[[273,45],],
'117':[[276,0],],
'124':[[276,16],],
'238':[[181,869],],
'369':[[364,46],],
},{'7':[[38,98],[171,902],[364,50],[364,3],[276,5],[369,306],],
'49':[[276,86],],
'117':[[273,0],],
'140':[[187,180],],
'173':[[273,16],],
},{'7':[[38,100],[171,904],[273,5],[347,63],[347,3],[369,308],],
'49':[[273,56],],
'63':[[364,48],],
'117':[[364,0],],
'123':[[364,16],],
},{'7':[[38,102],[171,906],[343,3],[343,105],[369,310],[364,5],],
'49':[[364,56],],
'117':[[347,0],],
'173':[[347,16],],
},{'7':[[38,104],[171,908],[394,3],[369,312],[347,5],[394,203],],
'49':[[347,69],],
'117':[[343,0],],
'1052':[[343,17],],
},{'7':[[38,106],[137,3],[137,273],[171,910],[343,5],[369,314],],
'49':[[343,111],],
'117':[[394,0],],
'228':[[394,16],],
},{'7':[[38,108],[394,5],[369,316],[173,332],[173,3],[171,912],],
'12':[[181,164],],
'23':[[343,69],],
'26':[[86,203],],
'49':[[394,209],],
'67':[[181,144],],
'117':[[137,0],],
'147':[[53,82],],
'228':[[137,16],],
'354':[[181,202],],
'913':[[131,145],[77,130],],
'1033':[[347,52],],
},{'7':[[38,110],[86,3],[86,260],[137,5],[171,914],[369,318],],
'49':[[137,279],],
'117':[[173,0],],
'140':[[137,271],],
'228':[[173,16],],
'2992':[[153,1285],[153,867],[153,1114],],
},{'7':[[38,112],[57,3],[173,5],[57,310],[171,916],[369,320],],
'18':[[57,207],],
'33':[[111,87],],
'49':[[173,338],],
'117':[[86,0],],
'228':[[86,16],],
'913':[[247,215],],
},{'7':[[38,114],[283,251],[283,3],[86,5],[171,918],[369,322],],
'33':[[187,199],],
'49':[[86,266],],
'117':[[57,0],],
'228':[[57,16],],
},{'7':[[38,116],[57,5],[187,201],[187,3],[171,920],[369,324],],
'12':[[109,21],],
'49':[[57,316],],
'63':[[247,218],[77,134],],
'77':[[100,183],],
'89':[[131,165],[187,152],],
'117':[[283,0],],
'140':[[100,180],],
'228':[[283,16],],
'462':[[153,1372],[153,1150],],
'1225':[[181,72],],
'2994':[[153,888],],
},{'7':[[38,118],[283,5],[171,922],[269,224],[269,3],[369,326],],
'33':[[57,263],],
'49':[[283,257],],
'117':[[187,0],],
'228':[[187,16],],
'1225':[[270,240],],
'3631':[[187,176],],
},{'7':[[38,120],[171,924],[284,227],[284,3],[369,328],[187,5],],
'38':[[181,351],],
'49':[[187,207],],
'117':[[269,0],],
'150':[[181,982],],
'228':[[269,16],],
'921':[[269,205],],
'2149':[[186,300],],
},{'7':[[38,124],[284,5],[171,928],[135,223],[135,3],[369,332],],
'49':[[284,233],],
'117':[[100,0],],
'140':[[229,193],],
'228':[[100,16],],
'375':[[135,219],],
'506':[[284,223],],
'1814':[[100,145],],
},{'7':[[38,126],[171,930],[100,5],[146,171],[146,3],[369,334],],
'18':[[86,224],],
'33':[[283,193],],
'49':[[100,211],],
'117':[[135,0],],
'140':[[100,202],[135,159],],
'152':[[284,225],],
'228':[[135,16],],
},{'7':[[38,140],[148,5],[229,195],[229,3],[171,944],[369,348],],
'49':[[148,171],],
'117':[[207,0],],
'140':[[148,159],],
'1493':[[207,16],],
},{'7':[[38,142],[171,946],[207,5],[332,189],[332,3],[369,350],],
'49':[[207,120],],
'117':[[229,0],],
'228':[[229,16],],
'375':[[325,26],],
},{'7':[[38,144],[260,101],[369,352],[260,3],[171,948],[229,5],],
'19':[[260,30],],
'23':[[260,39],],
'49':[[229,201],],
'63':[[77,132],[131,147],],
'117':[[332,0],],
'228':[[332,16],],
'375':[[64,28],[260,99],],
'420':[[260,66],],
'1019':[[332,153],],
'1225':[[186,167],],
},{'7':[[38,146],[332,5],[171,950],[131,3],[131,169],[369,354],],
'33':[[332,183],],
'49':[[332,195],],
'117':[[260,0],],
'128':[[260,91],],
'140':[[77,113],[77,144],[131,128],[131,157],],
'1493':[[260,16],],
},{'7':[[38,148],[77,3],[77,146],[260,5],[171,952],[369,356],],
'49':[[260,107],],
'117':[[131,0],],
'228':[[131,16],],
'1225':[[164,279],],
},{'7':[[38,150],[247,264],[247,3],[131,5],[369,358],[171,954],],
'49':[[131,175],],
'117':[[77,0],],
'228':[[77,16],],
},{'7':[[38,152],[270,251],[77,5],[270,3],[171,956],[369,360],],
'18':[[270,221],],
'49':[[77,152],],
'117':[[247,0],],
'228':[[247,16],],
'375':[[55,31],],
},{'7':[[38,154],[171,958],[209,3],[209,271],[247,5],[369,362],],
'49':[[247,270],],
'117':[[270,0],],
'228':[[270,16],],
},{'7':[[38,156],[171,960],[270,5],[210,182],[210,3],[369,364],],
'49':[[270,257],],
'117':[[209,0],],
'140':[[269,183],],
'228':[[209,16],],
'2895':[[209,223],],
'3168':[[181,713],],
},{'7':[[38,158],[209,5],[171,962],[180,3],[180,227],[369,366],],
'49':[[209,277],],
'117':[[210,0],],
'228':[[210,16],],
'375':[[119,22],],
},{'7':[[38,160],[64,3],[64,30],[171,964],[210,5],[369,368],],
'49':[[210,188],],
'117':[[180,0],],
'228':[[180,16],],
'375':[[238,27],],
},{'7':[[38,162],[180,5],[55,3],[55,33],[171,966],[369,370],],
'49':[[180,233],],
'117':[[64,0],],
'173':[[64,16],],
'2131':[[54,353],[179,1010],[335,235],],
'2179':[[153,706],],
'2968':[[153,395],],
},{'7':[[38,164],[238,29],[238,3],[171,968],[64,5],[369,372],],
'49':[[64,36],],
'117':[[55,0],],
'123':[[55,16],],
'147':[[153,450],],
'215':[[48,1311],],
'1225':[[181,94],],
},{'7':[[38,166],[55,5],[177,57],[171,970],[177,3],[369,374],],
'49':[[55,39],],
'117':[[238,0],],
'123':[[238,16],],
},{'7':[[171,972],[369,376],[325,28],[325,3],[238,5],[38,168],],
'26':[[393,26],[282,26],],
'49':[[238,35],],
'117':[[177,0],],
'123':[[177,16],],
'128':[[177,28],],
},{'7':[[38,170],[119,3],[119,24],[171,974],[177,5],[369,378],],
'49':[[177,63],],
'117':[[325,0],],
'123':[[325,16],],
},{'7':[[38,172],[43,3],[43,24],[325,5],[369,380],[171,976],],
'49':[[325,34],],
'117':[[119,0],],
'123':[[119,16],],
},{'7':[[38,180],[171,984],[228,3],[228,45],[282,5],[369,388],],
'49':[[282,38],],
'117':[[393,0],],
'123':[[393,16],],
},{'7':[[171,986],[393,5],[369,390],[356,3],[356,58],[38,182],],
'26':[[356,48],],
'49':[[393,34],],
'117':[[228,0],],
'1052':[[228,17],],
},{'7':[[38,184],[171,988],[190,3],[190,78],[228,5],[369,392],],
'49':[[228,51],],
'117':[[356,0],],
'1052':[[356,17],],
},{'7':[[38,186],[171,990],[356,5],[323,25],[248,71],[369,394],],
'49':[[356,64],],
'117':[[190,0],],
'140':[[356,56],],
'173':[[190,14],],
},{'7':[[38,192],[82,19],[323,3],[171,996],[129,22],[129,3],[369,400],],
'49':[[323,31],],
'117':[[107,0],],
'173':[[107,16],],
'712':[[82,77],[82,63],[82,46],[82,97],[82,116],[82,130],],
},{'7':[[38,194],[82,195],[171,998],[369,402],[107,5],],
'49':[[107,30],],
'117':[[129,0],],
'173':[[129,14],],
'712':[[82,214],[82,226],],
},{'19':[[39,15],],
'130':[[277,906],],
'3200':[[227,71],[171,65],],
},{'2':[[242,201],[277,73],[68,41],],
'7':[[72,34],[191,37],[396,37],],
'15':[[290,48],],
'19':[[246,4],[41,391],[277,66],[384,9320],[277,846],[218,297],[42,143],[384,5275],[379,169],[188,353],[171,1320],[355,516],[355,1347],[355,761],[355,770],],
'23':[[355,884],[355,898],[355,1356],[42,122],[335,1028],[231,83],[331,438],[331,377],[331,263],[331,193],[235,373],[42,380],[243,64],[306,340],[42,479],[363,720],[246,37],[246,45],[178,82],[246,225],[246,635],[277,445],[277,286],[42,553],[99,179],[246,980],[246,860],[246,1378],[121,60],[246,1577],],
'26':[[70,534],[355,188],],
'34':[[48,3505],],
'55':[[178,73],],
'74':[[384,8208],],
'77':[[277,709],],
'81':[[384,8376],],
'124':[[48,3713],[306,958],],
'130':[[277,642],],
'134':[[72,32],[244,44],[396,35],[94,35],[320,45],[118,43],[235,61],[361,33],[191,35],[253,30],],
'140':[[99,66],],
'147':[[396,130],],
'149':[[374,28],[220,28],[329,28],[268,28],[306,433],[98,28],[138,28],[295,28],[225,28],],
'154':[[39,321],[191,46],[396,46],[72,43],],
'155':[[331,84],[246,27],],
'275':[[174,18],[384,7690],[384,6316],[384,6066],[384,8074],[381,549],[384,8932],],
'279':[[313,213],],
'281':[[142,75],[41,378],[361,36],[277,198],],
'370':[[384,7699],],
'455':[[244,109],],
'489':[[331,237],],
'543':[[41,288],[242,72],],
'546':[[296,82],],
'550':[[384,8710],],
'608':[[355,249],],
'630':[[48,4891],],
'642':[[195,19],[384,9613],],
'656':[[48,4893],],
'674':[[384,5326],],
'922':[[246,175],],
'926':[[384,7665],],
'940':[[384,7680],],
'1004':[[48,4856],[48,4900],],
'1100':[[39,16],],
'1278':[[335,2501],[118,18],[268,18],[98,18],[335,2493],[94,19],[191,18],[179,1571],[396,18],[295,18],[138,18],[253,18],[72,18],[54,1165],[197,330],[179,1521],[220,18],[142,20],[320,18],[225,18],[233,20],[235,16],[327,19],[327,27],[329,18],[54,375],[178,20],[179,1466],[179,698],[374,18],[70,480],[179,873],[179,1319],[361,18],[244,18],[335,1175],[335,1889],],
'1281':[[335,571],[70,394],[197,231],],
'1305':[[95,30],],
'1346':[[142,72],],
'1392':[[335,1183],[335,2655],],
'1404':[[99,247],],
'1421':[[335,377],],
'1425':[[83,31],],
'1547':[[384,9163],],
'1598':[[48,4896],],
'1667':[[306,1418],[306,1463],[48,4490],[48,4095],],
'1669':[[320,105],],
'1837':[[384,4946],],
'1896':[[48,4851],],
'1947':[[70,502],[335,2577],[197,354],[54,410],],
'1955':[[54,441],[335,1922],[335,1415],[335,2663],[197,380],[335,1200],[335,1572],[335,1713],[179,723],[335,1426],[70,580],[335,1562],],
'2008':[[277,728],],
'2034':[[320,121],],
'2067':[[70,519],],
'2082':[[54,1163],],
'2126':[[179,1352],],
'2133':[[54,1172],[54,398],],
'2262':[[253,133],],
'2309':[[384,8920],],
'2357':[[197,553],[70,705],[335,2630],[335,2038],],
'2383':[[335,2758],[335,2043],],
'2552':[[179,878],],
'2557':[[335,1264],],
'3229':[[384,8582],],
'3509':[[179,1325],[179,1527],[179,1472],[179,1577],],
'3817':[[242,30],[355,345],],
'3937':[[246,1522],],
'4898':[[384,8748],],
'5103':[[384,9495],],
},{'16':[[243,41],[163,47],[355,846],],
'203':[[344,58],],
'224':[[188,30],[39,26],],
'1101':[[39,17],],
'1143':[[384,776],],
},{'241':[[306,747],],
'543':[[395,85],],
'550':[[39,23],],
},{'12':[[39,28],[42,141],[42,547],[341,181],[162,119],[171,46],[227,41],[307,181],],
'13':[[384,8735],],
'248':[[42,1229],],
'250':[[384,2882],],
'2634':[[251,101],],
'3196':[[384,2161],],
'4629':[[384,4527],],
},{'12':[[335,3378],],
'63':[[39,33],],
'67':[[384,9884],],
'164':[[274,277],],
'248':[[42,495],],
'277':[[384,2125],],
'4629':[[384,5876],],
},{'914':[[39,37],],
},{'275':[[384,2850],],
'621':[[39,40],],
'722':[[85,46],],
'3131':[[161,516],],
},{'128':[[134,101],[302,98],],
'621':[[39,42],],
'791':[[384,3000],[384,3210],],
'1308':[[355,204],],
'1315':[[384,2964],],
'1455':[[384,6048],],
'1467':[[384,5804],],
'3990':[[251,224],],
},{'1':[[217,232],[246,136],],
'12':[[41,355],[48,4386],[65,123],[306,507],[80,84],[296,75],[384,2880],[290,158],[384,5043],[384,811],[179,105],[384,5952],[384,5999],[384,8924],[179,1202],[384,8866],[384,8853],[184,20],[384,6156],[384,6754],[174,226],[384,8837],[395,114],[355,562],[217,386],[217,476],[242,188],[243,129],[243,165],],
'23':[[355,201],[335,987],[277,503],[277,290],],
'26':[[197,277],[70,427],],
'43':[[274,312],[274,272],],
'55':[[384,9912],],
'57':[[84,216],],
'63':[[384,7181],[355,150],],
'68':[[186,432],],
'77':[[384,7845],[384,2615],],
'128':[[302,31],[134,30],],
'149':[[277,470],],
'150':[[39,82],],
'164':[[118,145],[244,187],],
'165':[[277,371],],
'248':[[277,922],[277,916],[384,9442],[186,373],],
'279':[[384,3428],],
'284':[[384,1225],],
'318':[[244,172],[118,130],],
'373':[[277,876],],
'449':[[355,485],],
'525':[[39,51],],
'791':[[384,457],],
'817':[[384,914],],
'878':[[277,145],],
'931':[[384,4814],],
'995':[[355,82],],
'1105':[[274,278],],
'1226':[[246,208],[277,310],[217,336],],
'1308':[[197,342],],
'1319':[[179,1243],[179,136],[290,190],],
'1455':[[384,6037],[384,7173],[384,6482],],
'1463':[[384,7219],],
'1467':[[277,886],[274,322],],
'1591':[[179,1504],],
'1991':[[384,3624],],
'2090':[[384,919],],
'2867':[[384,2216],],
'3332':[[290,323],[179,269],],
'3434':[[179,504],[290,558],],
'3758':[[384,2872],],
'3850':[[246,229],],
'4106':[[290,86],],
'4190':[[384,414],[384,1552],[384,434],],
'4622':[[384,2905],[384,3559],[384,3733],],
'4667':[[384,947],],
},{'447':[[335,288],[335,3181],[39,57],],
},{'18':[[39,64],],
},{'16':[[39,78],],
},{'23':[[39,85],[39,678],[395,99],],
'26':[[395,72],],
'36':[[121,353],[121,339],[345,66],[83,103],[395,76],],
'63':[[315,187],[224,85],[204,79],[289,187],[224,161],],
'1004':[[306,317],],
},{'23':[[39,96],],
'271':[[217,141],],
},{'23':[[235,438],[308,137],[266,240],[340,104],],
'306':[[246,1681],],
'515':[[39,103],],
},{'276':[[99,123],],
'513':[[39,107],],
'3802':[[342,147],],
},{'17':[[274,390],],
'23':[[358,155],],
'25':[[384,4374],],
'31':[[89,442],],
'38':[[218,328],[283,226],],
'39':[[335,2972],],
'47':[[358,166],],
'48':[[246,1606],[314,58],[273,43],[335,2982],[180,207],],
'51':[[321,160],[161,560],],
'63':[[246,970],],
'83':[[231,75],],
'91':[[249,84],[249,94],[384,7976],],
'131':[[246,450],],
'136':[[335,112],[335,1548],],
'137':[[153,297],],
'139':[[384,3603],],
'140':[[181,485],],
'151':[[339,82],],
'152':[[355,1246],[246,1564],[76,74],[335,3463],[335,3447],],
'163':[[341,125],[307,125],],
'165':[[164,159],],
'177':[[54,512],],
'182':[[48,1934],],
'199':[[181,856],[181,892],],
'203':[[312,46],],
'208':[[339,149],],
'215':[[381,460],[384,6231],],
'225':[[50,106],],
'244':[[381,269],],
'246':[[53,127],[52,172],],
'252':[[52,318],],
'264':[[234,387],[84,558],],
'277':[[277,650],[188,136],],
'290':[[84,488],],
'295':[[355,1078],],
'299':[[246,1526],],
'302':[[186,370],],
'321':[[358,172],],
'340':[[160,482],],
'343':[[384,4799],[384,4540],],
'369':[[197,472],],
'375':[[39,316],],
'388':[[199,91],],
'425':[[156,82],[196,76],],
'447':[[335,3088],[335,2241],],
'451':[[363,554],],
'458':[[180,190],],
'462':[[153,776],],
'465':[[384,6295],],
'516':[[39,114],],
'519':[[246,1010],],
'523':[[204,68],],
'530':[[172,153],],
'539':[[39,422],],
'547':[[39,718],[39,826],],
'551':[[394,189],],
'553':[[174,235],],
'577':[[246,662],],
'593':[[257,159],],
'609':[[246,1861],],
'645':[[358,95],],
'666':[[89,304],],
'681':[[335,2442],],
'696':[[246,1641],],
'700':[[161,92],],
'776':[[283,148],],
'780':[[358,148],],
'797':[[246,436],],
'818':[[274,430],],
'869':[[153,915],],
'926':[[246,1281],],
'935':[[335,1404],[335,2545],],
'945':[[335,2642],],
'949':[[176,104],],
'1151':[[121,536],],
'1153':[[331,374],],
'1192':[[206,59],],
'1197':[[39,633],],
'1252':[[39,895],],
'1279':[[48,252],],
'1319':[[246,213],],
'1351':[[335,520],],
'1420':[[42,696],],
'1424':[[358,181],[355,928],],
'1441':[[278,59],[42,850],],
'1452':[[179,944],[54,102],],
'1453':[[179,1328],[179,1530],[179,1475],[179,1580],],
'1490':[[384,6735],],
'1509':[[277,468],],
'1593':[[379,185],],
'1608':[[179,1165],],
'1863':[[48,3670],],
'1878':[[93,86],],
'1993':[[246,1420],],
'2081':[[384,7499],],
'2096':[[274,727],],
'2301':[[181,926],],
'2357':[[162,73],],
'2371':[[191,246],],
'2384':[[355,706],],
'2415':[[322,220],[128,218],],
'2529':[[381,387],],
'2544':[[181,643],],
'2626':[[99,99],],
'2676':[[102,174],],
'2704':[[106,49],],
'2864':[[196,86],[156,92],],
'2893':[[246,915],],
'2976':[[153,612],],
'3004':[[181,504],],
'3069':[[379,198],],
'3139':[[162,202],],
'3713':[[246,1064],],
'3899':[[246,944],],
'3973':[[249,59],],
'4320':[[385,57],],
'4502':[[358,143],[358,126],[358,146],[358,60],],
'4503':[[358,63],],
'4504':[[358,66],],
'4505':[[358,69],],
'4781':[[384,1615],],
},{'31':[[162,271],[162,281],[39,119],],
'224':[[246,1802],],
},{'12':[[384,732],[373,72],[51,30],[320,30],[200,253],],
'39':[[277,850],[274,49],],
'43':[[266,294],[162,52],[52,217],[274,486],[164,515],[164,521],[39,128],[266,224],[256,36],],
'57':[[82,328],[70,656],[197,424],[242,102],[313,373],],
'63':[[266,181],[217,413],],
'152':[[49,217],],
'202':[[217,377],[355,288],[243,143],[344,159],],
'248':[[277,929],[39,214],],
'305':[[153,235],[164,292],],
'314':[[384,5731],],
'431':[[253,65],],
'499':[[174,253],],
'865':[[186,393],],
'1003':[[162,363],],
'1155':[[52,235],],
},{'26':[[251,271],[384,1319],],
'41':[[54,69],[95,68],[384,1228],[384,1212],],
'50':[[39,146],],
'62':[[384,49],[384,2709],],
'63':[[242,164],],
'203':[[331,494],[384,80],],
'282':[[42,770],[42,775],],
'370':[[246,43],],
'420':[[384,438],[384,8450],[384,418],],
'817':[[384,1974],],
'940':[[191,278],],
'960':[[242,157],],
'1335':[[242,136],],
'2310':[[384,1684],],
'4347':[[335,2318],],
},{'1120':[[39,147],],
},{'15':[[384,2907],],
'19':[[39,160],],
'39':[[121,461],],
'77':[[384,2926],],
'861':[[335,530],],
'885':[[384,1558],],
},{'12':[[48,2523],],
'19':[[384,2585],[42,264],],
'26':[[41,294],[355,1156],[384,1237],[277,30],[355,816],],
'39':[[246,1244],],
'63':[[384,9312],],
'82':[[384,1181],],
'83':[[344,218],[246,279],],
'248':[[99,137],[99,284],],
'271':[[42,989],],
'285':[[355,1053],],
'290':[[135,49],],
'315':[[54,499],[153,364],[355,1303],],
'364':[[355,842],],
'443':[[384,3568],[39,167],],
'445':[[384,1493],],
'926':[[384,8081],[179,312],[384,6467],[179,558],[41,182],[179,1555],[197,243],[384,3431],[384,3324],[384,3234],[217,332],[355,148],[217,488],[217,503],[42,497],[243,186],[174,112],[174,32],[42,661],[384,854],[355,1451],[355,1400],[355,1374],[42,795],[42,839],[277,304],[355,1122],[277,458],[278,39],[355,1042],[48,4382],[290,114],[355,315],[290,366],[355,257],[290,612],[335,398],[344,145],[344,203],[70,406],[355,79],[355,235],[290,104],[355,211],],
'995':[[384,8382],],
'1109':[[355,83],[290,559],[290,324],[355,151],[355,202],[70,428],[290,87],[179,270],[277,311],[179,505],[179,1505],[274,279],[197,278],[217,337],[217,233],[384,2616],],
'1178':[[246,1295],],
'1245':[[384,3254],],
'1302':[[174,242],],
'1319':[[246,1249],],
'1349':[[384,6365],[384,6127],[242,76],[42,165],],
'1359':[[384,7562],],
'1403':[[48,2395],],
'1462':[[251,268],[384,200],[384,573],],
'2221':[[152,109],[54,1124],],
'2762':[[251,303],],
'3196':[[384,962],],
'3757':[[217,181],],
'3928':[[246,1332],],
'4286':[[355,1257],],
'4669':[[384,428],],
'4670':[[384,452],],
'4674':[[384,470],],
'4756':[[384,1316],],
},{'12':[[39,670],[384,7672],],
'18':[[39,169],[121,115],],
'140':[[331,80],],
'301':[[179,115],[179,1215],[174,68],[290,169],[174,49],],
'431':[[277,756],],
'1154':[[39,330],],
},{'1':[[52,326],[384,5443],],
'12':[[381,604],[384,5527],[384,5534],],
'26':[[381,204],],
'63':[[217,401],],
'82':[[384,151],],
'99':[[384,7145],[384,7065],[117,44],[384,8525],[167,44],[384,6977],[384,6936],[384,6849],[261,41],[384,6846],[384,6834],[384,6815],[384,2519],[384,7002],[381,197],[384,6180],[384,6266],],
'100':[[179,439],[290,493],[384,2249],],
'215':[[179,1444],[179,1408],[186,434],[384,5847],[384,82],[186,440],],
'217':[[384,9588],[384,8065],],
'420':[[384,5618],],
'671':[[48,4938],[350,73],[133,69],],
'738':[[126,15],],
'780':[[384,2631],[384,4248],[390,101],],
'791':[[384,1362],[384,909],[384,940],[384,1221],[217,227],],
'960':[[384,4147],],
'1033':[[384,2516],],
'1124':[[39,170],],
'1125':[[384,6816],[167,45],[384,5535],[384,5528],[117,45],],
'1155':[[266,272],],
'1177':[[384,5264],[384,5472],],
'1182':[[290,427],[179,373],],
'1262':[[39,950],],
'1267':[[384,4631],],
'1295':[[41,99],],
'1424':[[384,1388],],
'1474':[[384,4582],],
'1509':[[217,51],],
'1719':[[117,39],[167,39],],
'1919':[[48,4031],],
'2342':[[339,228],],
'3242':[[174,188],],
'3267':[[179,1084],],
'3430':[[290,574],[179,520],],
'3517':[[179,1054],],
'3661':[[188,272],],
'3663':[[188,293],],
'3666':[[188,315],],
'4007':[[257,57],],
'4075':[[384,9099],],
'4565':[[379,51],],
'4641':[[384,751],[384,280],],
'4706':[[384,2335],[384,1539],],
'4724':[[384,2612],],
'4787':[[384,1916],],
},{'12':[[384,7687],],
'152':[[39,172],],
'301':[[355,301],[344,172],],
},{'1126':[[39,173],],
},{'62':[[335,587],[335,899],[335,650],],
'139':[[48,1008],],
'177':[[224,213],],
'215':[[48,2887],[306,597],[335,2777],[48,2291],],
'339':[[160,595],],
'340':[[160,297],],
'479':[[301,72],],
'576':[[243,52],],
'586':[[48,3322],],
'613':[[306,779],[355,1219],],
'696':[[246,1694],],
'712':[[343,91],],
'866':[[54,1474],],
'1127':[[39,174],],
'1180':[[384,804],],
'1223':[[48,2397],],
'1305':[[174,26],],
'1401':[[137,229],[173,274],],
'2127':[[335,831],],
'2132':[[335,2059],],
'2384':[[153,1050],],
'2816':[[384,787],],
'2945':[[152,197],],
'4226':[[381,137],],
},{'1128':[[39,175],],
'1169':[[174,28],],
},{'16':[[39,181],],
'31':[[42,569],[42,703],[160,647],[249,137],[250,104],[274,366],[307,117],[331,197],[337,84],[339,208],[341,117],[365,153],[381,114],],
},{'353':[[39,190],],
'548':[[113,25],],
'596':[[384,4838],[75,107],[231,92],],
'1205':[[99,193],[218,293],[53,84],[193,107],[352,107],[159,72],],
'1374':[[251,55],],
},{'2':[[186,361],],
'7':[[316,77],],
'12':[[164,313],],
'30':[[70,309],],
'43':[[42,822],],
'63':[[112,84],],
'164':[[355,1429],[134,118],[331,195],[181,318],[363,625],[39,195],[302,120],[246,1658],],
'199':[[384,6233],],
'202':[[181,65],],
'203':[[266,93],],
'224':[[381,508],],
'248':[[160,353],],
'299':[[384,3403],],
'319':[[352,38],[193,38],],
'351':[[160,386],],
'621':[[306,1177],],
'817':[[384,7861],],
'3931':[[246,1548],],
},{'67':[[134,130],[302,132],],
'1132':[[39,196],],
},{'12':[[355,514],[344,70],],
'36':[[39,206],],
'63':[[200,156],],
'482':[[384,9318],],
'4639':[[384,7306],],
},{'3':[[344,252],],
'19':[[209,226],[186,351],[355,1312],[191,274],[269,188],],
'31':[[54,756],[209,213],[95,332],],
'149':[[181,702],],
'152':[[396,87],[384,2047],[384,2069],],
'199':[[42,928],[42,1239],],
'203':[[186,72],],
'220':[[186,399],],
'272':[[384,1260],[335,1975],],
'284':[[251,157],],
'299':[[186,260],],
'343':[[278,41],],
'470':[[342,158],],
'572':[[39,223],],
'792':[[98,44],],
'888':[[274,188],[384,5834],],
'1220':[[384,6243],],
'1244':[[72,71],],
'1307':[[191,171],[235,354],[191,78],[384,7051],],
'1433':[[384,97],],
'1452':[[342,127],],
'2076':[[384,3795],],
'3592':[[181,805],],
'5250':[[396,70],],
},{'92':[[384,5601],],
'275':[[91,29],],
'481':[[257,128],],
'1135':[[39,224],],
'1151':[[121,518],],
},{'28':[[39,226],],
'63':[[277,767],[70,544],],
'164':[[246,509],[242,151],],
'250':[[277,476],],
'957':[[153,242],],
'1108':[[355,205],],
'1158':[[257,125],],
'1169':[[84,253],],
},{'12':[[39,234],[355,768],[41,389],[355,759],[246,948],[381,439],],
'63':[[39,409],],
'316':[[358,78],],
'940':[[246,183],],
'2272':[[246,865],],
},{'23':[[39,236],],
'995':[[277,298],],
'1123':[[384,6366],],
'1319':[[355,844],],
'3251':[[290,177],[179,1225],[179,123],],
},{'608':[[39,239],],
},{'2':[[340,95],[308,128],],
'36':[[277,203],[39,241],],
'165':[[235,377],[266,212],],
'199':[[384,9792],[95,164],],
'264':[[65,91],],
'277':[[320,115],],
'318':[[70,335],],
'817':[[384,4595],],
'1151':[[277,128],],
'1187':[[39,550],],
'1462':[[384,5743],],
'3003':[[153,1203],],
},{'3':[[277,98],[384,5763],[384,5770],[39,261],],
},{'19':[[384,2370],],
'43':[[217,442],[99,227],[246,14],[174,238],[277,56],],
'54':[[384,870],],
'63':[[384,6858],[39,269],],
'202':[[39,687],],
'562':[[48,341],],
'598':[[335,3061],[342,206],[335,2214],[335,2687],[153,604],[335,1944],],
'2671':[[384,997],],
'3196':[[384,775],],
'4667':[[384,511],],
},{'1143':[[39,270],],
},{'130':[[39,273],],
},{'16':[[342,203],[342,165],],
'130':[[214,225],],
'152':[[39,275],],
'562':[[148,154],],
},{'47':[[317,99],],
'130':[[70,252],[227,127],[197,133],],
'154':[[214,165],],
'645':[[384,8982],],
'694':[[190,64],],
'705':[[39,284],],
'1491':[[42,1296],],
},{'500':[[48,293],[48,868],],
'501':[[48,298],[384,9118],[39,292],],
},{'31':[[39,296],],
},{'152':[[39,298],],
},{'3':[[181,641],[246,1795],[331,58],[165,57],],
'16':[[49,297],[162,164],],
'19':[[61,87],[121,311],[41,291],[162,254],[67,54],[384,7599],[370,61],],
'23':[[355,538],],
'26':[[121,486],[243,178],],
'31':[[175,33],[384,3500],[154,35],],
'33':[[289,161],[121,393],[384,9381],[315,161],],
'63':[[121,520],],
'77':[[39,300],[121,390],],
'140':[[164,77],],
'147':[[296,96],],
'531':[[331,500],[121,535],],
'596':[[355,811],[296,133],[65,178],[80,99],[121,517],[342,324],],
'903':[[153,74],],
'1307':[[355,142],[384,3250],[246,195],[344,61],],
'1315':[[227,181],[277,27],],
'1319':[[70,432],[197,282],],
'2416':[[384,3346],],
'2536':[[355,807],],
'3860':[[277,127],],
},{'1151':[[39,301],],
},{'15':[[153,610],],
'19':[[39,308],],
'63':[[331,373],],
'199':[[384,4898],],
},{'588':[[39,329],[39,446],[39,512],],
'1153':[[39,309],],
},{'43':[[39,318],[266,299],[359,138],[42,807],[220,96],[370,38],[70,117],[173,293],[123,36],[137,248],[164,61],[170,178],[313,467],],
'63':[[188,84],],
'83':[[178,252],],
'133':[[274,375],[274,635],],
'199':[[266,362],[335,3433],[52,234],],
'202':[[164,75],[68,88],],
'215':[[381,302],[381,588],],
'230':[[381,239],[384,6174],[384,7764],],
'250':[[197,491],],
'264':[[186,328],],
'277':[[381,156],[384,6260],[231,78],],
'284':[[266,271],],
'423':[[42,137],],
'1331':[[42,543],],
'1843':[[70,527],],
'3571':[[181,300],],
},{'128':[[221,24],],
'140':[[39,516],],
'217':[[48,4664],],
'479':[[39,472],],
'500':[[39,334],],
'838':[[306,1359],],
'1591':[[48,4051],[48,4277],[48,4452],],
'2675':[[384,8279],[384,8288],[384,8299],[384,8313],[384,8332],],
},{'12':[[39,768],],
'73':[[39,357],],
},{'34':[[164,169],],
'63':[[181,480],],
'121':[[49,302],],
'248':[[42,986],[257,124],[384,1280],[355,1162],[355,1367],],
'585':[[39,378],],
'613':[[206,44],],
'949':[[384,1258],],
'2671':[[384,1777],],
},{'31':[[121,575],[39,382],],
},{'3':[[335,957],],
'12':[[121,577],],
'16':[[83,77],],
'18':[[227,97],],
'19':[[384,5577],[218,346],[303,25],[274,693],[274,678],],
'48':[[246,1207],],
'203':[[358,38],],
'346':[[335,974],],
'420':[[335,1021],],
'596':[[39,385],],
'2058':[[95,269],[54,702],],
'2104':[[384,1282],],
'2790':[[384,4015],],
'3194':[[171,28],],
'4301':[[335,932],],
},{'92':[[39,659],],
'500':[[48,3084],],
'501':[[48,4591],],
'1156':[[48,4278],],
'1160':[[39,386],],
},{'15':[[39,388],],
'499':[[121,510],],
},{'63':[[121,512],],
'152':[[39,390],],
},{'26':[[121,581],],
'489':[[121,478],[121,529],[121,553],[121,406],[200,205],],
'1163':[[39,391],],
},{'869':[[39,397],],
},{'68':[[153,1016],],
'248':[[39,404],],
},{'12':[[395,131],],
'31':[[39,426],],
'1169':[[84,519],],
},{'26':[[39,430],],
'77':[[213,373],],
'154':[[95,322],[335,527],],
'273':[[181,340],],
'443':[[395,120],],
'1017':[[95,308],[54,741],],
'3566':[[181,385],],
'4318':[[335,1799],[335,1650],],
'5017':[[384,5087],],
},{'16':[[191,125],[274,578],[53,90],[50,92],[347,57],],
'33':[[217,166],[355,312],[174,51],],
'63':[[39,432],[381,98],[122,129],],
'85':[[384,5050],],
'164':[[317,118],[48,3665],[84,252],[384,6739],[384,6324],[178,268],[181,166],[181,523],],
'203':[[84,518],[160,598],],
'248':[[359,116],[244,239],[118,208],],
'250':[[41,214],],
'349':[[384,4439],],
'351':[[184,34],[266,56],[101,71],],
'840':[[384,3466],],
'915':[[41,166],],
'1006':[[160,406],],
'1128':[[174,27],[306,780],],
'1442':[[172,61],],
'1452':[[326,32],],
'2836':[[251,172],],
'3054':[[174,63],],
'4696':[[384,7108],[384,2768],],
},{'61':[[160,255],],
'62':[[384,1756],],
'65':[[384,9186],],
'91':[[353,39],],
'137':[[42,460],],
'285':[[39,434],],
'305':[[384,834],],
'447':[[102,132],],
'926':[[54,605],],
'949':[[384,5989],],
'1995':[[384,1433],],
'2313':[[384,6590],],
'4685':[[384,3989],],
'4686':[[384,1772],],
'4826':[[384,2282],],
'5049':[[384,5715],],
'5078':[[384,6503],],
},{'994':[[39,475],[39,930],[39,450],],
'1256':[[39,913],],
'1261':[[39,947],],
'1265':[[39,964],],
},{'186':[[39,932],[39,452],],
},{'314':[[39,934],[39,454],],
},{'217':[[39,481],[39,919],[39,936],[39,953],[39,970],[39,456],],
},{'491':[[39,483],[39,921],[39,938],[39,955],[39,972],[39,458],],
},{'99':[[179,447],[290,501],],
'186':[[39,941],[39,461],],
},{'12':[[384,7624],],
'99':[[384,5263],[384,5392],[384,5515],[384,5426],[65,155],[384,5471],[384,5538],[162,174],[384,5500],[384,5124],[384,5566],[303,18],],
'100':[[384,1992],[384,1815],[160,672],[176,67],],
'131':[[266,369],],
'186':[[42,525],],
'217':[[174,210],[384,9423],],
'538':[[384,844],[384,1782],],
'671':[[350,93],],
'780':[[384,4002],],
'791':[[384,8569],[384,7904],],
'1120':[[384,1229],],
'1176':[[39,942],[39,462],],
'1177':[[174,211],],
'1184':[[42,518],],
'1291':[[41,75],],
'1778':[[65,160],],
'1915':[[384,707],[384,4618],],
'2346':[[179,896],],
'3528':[[217,63],],
'3660':[[188,258],],
'4216':[[316,50],],
'4567':[[379,63],],
'4587':[[384,4484],[384,3821],],
'4803':[[384,2664],],
'4837':[[384,9490],],
'4855':[[384,4622],[384,4633],],
'5151':[[384,8541],],
},{'3':[[194,54],],
'23':[[246,576],],
'99':[[39,926],],
'152':[[246,1297],],
'217':[[39,977],],
'314':[[39,488],],
'449':[[246,1294],],
'780':[[39,960],],
'1177':[[39,943],[39,463],],
'1676':[[48,1200],[306,726],],
'1734':[[48,1845],],
},{'186':[[39,477],],
},{'84':[[355,1136],],
'99':[[335,3514],[358,253],[381,209],[384,6596],[384,7650],[381,223],[381,235],[381,279],[384,7760],[381,300],[381,458],[384,716],[384,803],[384,857],],
'100':[[384,2375],[384,2412],],
'124':[[350,130],],
'186':[[48,1761],[306,422],[335,211],],
'217':[[174,168],[384,9685],[174,183],[384,8320],],
'231':[[339,138],[122,141],],
'282':[[174,45],],
'314':[[384,7248],[384,2553],],
'671':[[133,51],[350,53],],
'780':[[384,4362],],
'791':[[384,1208],[217,208],],
'800':[[266,171],],
'1125':[[384,6978],],
'1177':[[65,156],[384,5427],],
'1179':[[39,478],],
'1267':[[290,143],[179,92],[384,5719],[384,5702],[384,3425],],
'1280':[[41,27],],
'1348':[[42,521],],
'1455':[[384,7574],],
'1591':[[179,1411],],
'1637':[[48,2351],],
'1708':[[48,1780],],
'1719':[[384,6594],],
'1795':[[48,2496],],
'1829':[[153,985],],
'1915':[[384,7211],[384,8096],[384,6386],],
'1956':[[217,39],],
'2140':[[122,39],],
'2620':[[99,39],],
'3233':[[174,151],],
'3238':[[174,165],],
'3240':[[174,179],],
'3305':[[290,473],[179,419],],
'3449':[[179,542],[290,596],],
'3522':[[217,93],],
'3668':[[188,322],],
'3672':[[188,333],],
'3777':[[223,33],],
'4169':[[306,805],],
'4353':[[335,2556],],
'4449':[[351,37],],
'4563':[[379,39],],
'4587':[[384,5706],],
'4706':[[384,2296],[384,1549],[384,2751],],
'4837':[[384,7427],],
'4845':[[384,8732],],
'5231':[[388,35],],
},{'1180':[[39,479],],
},{'186':[[39,486],],
'217':[[290,426],[179,372],],
},{'19':[[39,509],],
'288':[[246,489],],
'343':[[179,1042],],
},{'152':[[266,258],],
'284':[[384,7204],[42,517],],
'375':[[384,1244],[39,518],],
'1335':[[42,829],],
'1462':[[274,237],],
'3267':[[179,83],],
},{'436':[[39,527],],
'502':[[244,83],[118,74],],
},{'16':[[355,685],[39,537],],
'27':[[48,3560],],
'224':[[335,49],],
'1353':[[153,82],],
},{'15':[[217,368],[227,168],],
'23':[[208,37],],
'37':[[355,269],],
'277':[[39,549],],
'611':[[159,144],],
'1505':[[384,7525],],
},{'518':[[39,553],],
},{'152':[[39,555],],
'484':[[331,482],],
},{'152':[[39,577],],
},{'199':[[39,581],],
'817':[[384,2178],],
},{'5':[[206,58],],
'31':[[335,3695],],
'143':[[121,344],],
'144':[[49,174],],
'162':[[206,91],],
'195':[[160,169],[113,38],],
'199':[[368,102],],
'237':[[39,584],[342,172],],
'250':[[153,1092],],
'436':[[335,3729],],
'447':[[335,3398],],
'460':[[181,1028],],
'4581':[[384,888],],
},{'31':[[44,117],[276,74],],
'917':[[39,589],],
},{'7':[[42,393],[89,159],],
'12':[[384,1734],],
'19':[[54,184],[274,39],[384,4752],[160,44],],
'23':[[39,613],[57,296],[350,178],[251,34],],
'26':[[65,168],[342,314],],
'33':[[384,7379],],
'36':[[181,949],],
'128':[[79,19],[196,32],],
'155':[[181,287],[146,148],],
'345':[[214,282],],
'431':[[213,234],],
'575':[[246,1721],],
},{'89':[[39,789],[39,628],],
'513':[[39,830],],
},{'588':[[39,631],],
},{'501':[[48,3552],],
'1196':[[39,632],],
},{'12':[[384,7393],[355,980],[384,6338],[384,3957],[384,9230],],
'15':[[42,587],],
'19':[[121,568],],
'23':[[52,291],[384,6493],[42,369],[39,636],[52,296],[52,332],],
'39':[[322,197],[128,150],[128,163],[128,195],[322,152],[322,165],],
'57':[[367,122],[61,69],[128,102],[313,451],[322,104],[250,119],],
'81':[[384,9126],[384,9063],],
'134':[[244,139],],
'152':[[121,562],],
'164':[[384,3485],],
'202':[[84,390],],
'305':[[161,105],[379,211],],
'491':[[121,222],],
'529':[[186,363],],
'672':[[42,135],[355,1343],],
'1412':[[268,34],],
'1484':[[42,1245],[384,7578],],
},{'63':[[39,639],],
},{'1199':[[39,640],],
},{'248':[[39,642],],
},{'3':[[384,9924],],
'15':[[388,62],[388,69],],
'16':[[235,386],],
'19':[[39,651],[274,339],],
'23':[[164,592],],
'33':[[300,25],],
'34':[[246,1888],],
'39':[[266,227],[209,265],[235,398],[48,2464],],
'149':[[72,66],],
'165':[[54,401],[197,345],[70,493],],
'224':[[41,148],],
'266':[[320,40],[39,723],],
'869':[[246,789],[246,798],],
'888':[[186,186],],
'924':[[251,239],],
'1220':[[153,246],],
'1913':[[355,653],[384,7854],],
'3877':[[246,563],],
},{'343':[[355,1166],],
'1123':[[42,166],[384,2586],],
'1202':[[39,652],],
},{'59':[[246,844],[306,1082],],
'154':[[159,54],[125,162],[277,387],[39,656],],
'273':[[277,613],[258,37],],
},{'2':[[212,74],[161,87],[145,72],],
'27':[[164,630],[39,712],],
'48':[[159,71],],
'67':[[218,292],],
'126':[[164,457],],
'131':[[301,81],],
'149':[[251,53],[246,671],[153,763],],
'160':[[181,229],],
'199':[[344,139],[385,60],[355,1264],[234,370],],
'215':[[381,199],],
'277':[[89,351],],
'281':[[384,3544],[180,223],[49,511],],
'355':[[352,106],[193,106],],
'370':[[76,94],],
'488':[[145,74],[212,76],],
'543':[[355,140],],
'547':[[96,151],],
'580':[[384,8695],],
'642':[[39,661],],
'817':[[384,8750],[384,9595],[384,3379],[384,2864],],
'1003':[[353,178],],
'1046':[[49,477],],
'1068':[[53,83],],
'1158':[[181,481],],
'1349':[[86,229],],
'1452':[[99,192],],
'2891':[[343,101],],
'3120':[[358,256],],
'3196':[[384,598],],
},{'370':[[39,663],],
},{'50':[[39,673],],
},{'19':[[321,47],],
'23':[[39,859],[161,341],],
'130':[[384,4340],[39,685],],
'972':[[39,890],],
'2042':[[246,366],],
'4996':[[384,4640],],
},{'197':[[39,689],],
},{'1209':[[39,690],],
},{'1':[[384,8480],[384,8472],],
'33':[[39,692],],
'41':[[384,1369],],
'99':[[290,274],[179,220],],
'100':[[384,1146],[384,883],],
'144':[[48,1452],[54,325],[54,367],[48,1496],[48,1728],[70,295],[70,382],[70,510],[70,562],[70,701],[70,715],[70,753],[335,249],[153,223],[48,1391],[153,448],[153,463],[153,721],[153,972],[153,1176],[153,1339],[153,1397],[48,1370],[335,197],[179,929],[179,960],[179,986],[179,1024],[335,179],[306,501],[306,462],[197,176],[197,219],[197,362],[197,595],[153,411],],
'186':[[179,1387],[179,1401],],
'671':[[54,580],[48,2029],],
'780':[[384,3580],],
'792':[[96,47],],
'926':[[384,7740],],
'1120':[[384,1213],[251,272],[384,8451],],
'1125':[[384,4583],[384,5619],[384,9100],[384,4148],],
'1177':[[384,1230],],
'1211':[[331,524],],
'1289':[[41,63],],
'1462':[[384,945],],
'1582':[[48,1960],],
'1719':[[384,5657],],
'1795':[[48,2490],],
'1911':[[355,336],],
'1915':[[384,700],],
'2346':[[179,882],],
'3162':[[246,585],],
'3673':[[188,335],],
'4272':[[331,523],],
'4570':[[379,81],],
'4587':[[384,8804],],
'4693':[[384,8548],],
'4701':[[384,4250],],
'4837':[[384,5429],],
'4845':[[384,5503],],
'4855':[[384,3329],],
},{'780':[[384,540],],
'1211':[[39,693],],
'1286':[[384,533],],
},{'1212':[[39,694],],
'1247':[[39,873],],
},{'12':[[246,1784],],
'16':[[246,102],],
'43':[[246,1554],],
'140':[[39,730],],
'202':[[39,696],],
'224':[[246,778],],
'1132':[[42,823],],
'1442':[[176,263],],
},{'43':[[246,142],[42,788],[246,179],[246,134],[246,67],[246,217],[246,125],],
'152':[[274,258],],
'305':[[176,238],[39,699],[217,230],[246,699],],
'1244':[[331,146],[246,1270],[246,121],[246,655],],
'1442':[[246,920],],
},{'16':[[39,705],],
},{'2':[[171,25],],
'65':[[110,39],],
'82':[[214,16],],
'140':[[52,272],],
'1214':[[39,731],],
'1915':[[227,111],[179,42],],
'2512':[[188,44],],
},{'547':[[95,515],[384,7894],[39,735],],
'728':[[384,122],],
'948':[[384,3857],],
'956':[[384,3842],],
},{'267':[[39,737],],
},{'3':[[362,66],],
'12':[[42,1151],[384,6242],],
'16':[[246,1446],[207,79],],
'38':[[39,835],[153,782],],
'67':[[39,739],],
'73':[[121,356],],
'79':[[153,245],],
'140':[[54,203],],
'224':[[153,1013],],
'370':[[39,759],],
'1365':[[42,711],],
'1370':[[217,449],],
'1391':[[164,277],],
'1452':[[54,243],],
'2676':[[200,266],],
},{'23':[[39,742],],
},{'1221':[[39,743],],
},{'16':[[54,1116],[39,746],],
'343':[[335,2535],],
'607':[[54,248],],
'1123':[[48,2396],],
},{'26':[[39,857],[306,934],[39,749],],
},{'16':[[50,80],],
'17':[[181,93],],
'26':[[335,691],],
'43':[[246,1327],[48,3680],[82,541],[335,185],[95,140],[162,82],[161,429],[181,87],[179,935],[174,97],],
'48':[[306,976],[48,3731],],
'69':[[353,145],],
'82':[[355,36],],
'140':[[258,29],],
'167':[[355,63],],
'206':[[384,4608],[49,444],],
'277':[[335,2302],],
'299':[[246,1480],],
'369':[[181,71],[164,149],[335,1694],],
'445':[[335,2950],],
'451':[[179,87],],
'462':[[152,128],[160,118],],
'518':[[42,1153],],
'609':[[102,67],],
'668':[[138,41],],
'725':[[42,448],],
'797':[[186,326],],
'861':[[95,148],[221,29],[384,2870],],
'908':[[384,3072],],
'940':[[42,717],],
'1107':[[384,2851],],
'1123':[[246,1250],],
'1220':[[54,244],[164,278],[39,836],[121,357],[54,204],[200,267],[39,760],],
'1242':[[384,9774],],
'1433':[[49,479],],
'1672':[[270,239],],
'2200':[[246,1189],[384,5774],],
'2366':[[382,79],[71,79],],
'2468':[[186,166],[277,747],[246,964],],
'2649':[[188,33],],
'2671':[[338,80],],
'2770':[[121,408],],
'3633':[[188,160],],
'3636':[[188,41],],
'3650':[[277,668],],
'3892':[[246,736],],
'3896':[[246,848],],
'3903':[[246,1038],],
'4536':[[363,708],],
},{'23':[[266,302],],
'61':[[339,114],],
'82':[[277,765],[48,262],],
'162':[[54,1141],],
'203':[[84,225],],
'436':[[39,777],],
'1415':[[70,435],[42,656],[246,207],[99,153],[217,501],[197,285],[384,4982],],
'1478':[[42,1190],],
'1519':[[48,245],],
'2017':[[153,748],[153,1341],[160,435],[181,861],[49,286],],
'2020':[[49,337],[122,127],[176,203],],
'2392':[[304,369],[274,409],],
'3762':[[290,84],[277,309],[355,1040],[217,335],],
'3858':[[246,273],],
'4081':[[277,743],],
'4260':[[331,243],],
},{'279':[[39,782],],
},{'39':[[164,243],[384,6203],[189,601],[213,444],[381,267],[384,7792],],
'305':[[164,318],[39,786],],
},{'7':[[60,75],[60,92],[60,80],[232,80],[82,312],],
'12':[[270,59],[270,78],[181,154],[153,857],[247,59],[137,76],[77,54],[77,75],[173,89],[131,90],[131,56],[86,80],[247,76],],
'23':[[50,89],[50,103],[153,1090],],
'26':[[39,854],],
'39':[[379,126],[50,36],],
'48':[[137,88],[270,109],[100,142],[247,107],[384,7061],[77,87],[131,102],[57,112],[86,105],[173,133],],
'49':[[181,542],],
'89':[[137,254],[173,299],[153,1075],],
'153':[[137,244],[173,289],],
'164':[[384,9757],],
'299':[[82,340],],
'305':[[70,377],[197,214],],
'551':[[153,833],],
'961':[[39,794],],
'1244':[[173,270],[137,225],],
'1504':[[384,9727],[384,9738],],
'2004':[[347,50],[53,73],],
'2180':[[153,1266],],
'2888':[[137,209],[173,254],],
},{'585':[[39,799],],
'800':[[251,246],],
'1245':[[251,234],],
},{'12':[[39,801],[42,1208],[277,813],[355,968],],
'27':[[335,545],],
'30':[[89,187],],
'43':[[246,1882],],
'65':[[70,541],],
'202':[[160,393],],
'305':[[335,2646],],
'367':[[137,233],[173,278],],
'699':[[100,198],[135,155],],
'800':[[164,390],],
'817':[[84,368],],
'861':[[277,101],],
'1132':[[160,354],],
'1322':[[355,385],],
'2301':[[153,878],],
},{'89':[[54,1437],],
'1231':[[39,802],],
},{'19':[[188,152],[234,352],],
'68':[[39,805],],
'318':[[384,3176],],
},{'67':[[249,38],[181,424],],
'128':[[284,166],[269,165],],
'150':[[101,55],],
'215':[[335,2016],[335,2744],],
'277':[[189,453],[189,166],[89,425],],
'588':[[39,811],],
'700':[[57,222],],
'2519':[[89,198],],
},{'12':[[246,743],],
'43':[[181,745],],
'706':[[39,814],],
'1646':[[48,3326],[48,2891],[48,2295],[48,1012],[306,601],],
'2808':[[321,399],],
},{'19':[[39,816],],
'705':[[246,1798],],
},{'12':[[75,46],[335,2438],],
'19':[[363,203],[218,156],[39,821],],
'31':[[315,63],[289,63],[220,47],[395,138],],
'128':[[75,26],],
'150':[[253,214],],
'250':[[253,58],],
'417':[[335,1725],[218,322],[335,1686],[335,1684],[335,1071],],
'466':[[220,109],],
'1003':[[220,121],],
'1381':[[220,80],],
'2384':[[75,93],[95,124],[335,1059],[335,1013],],
},{'14':[[385,27],],
'19':[[384,3667],],
'23':[[71,63],[71,42],[258,66],[382,63],[382,55],[382,42],[71,55],[385,36],],
'94':[[387,28],[311,28],],
'139':[[387,65],[311,65],],
'149':[[360,52],],
'231':[[384,33],],
'1237':[[39,822],],
'1540':[[311,68],[387,68],],
'3713':[[203,36],[263,34],[338,30],],
},{'199':[[39,828],],
},{'924':[[39,840],],
},{'14':[[360,44],],
'82':[[39,842],],
'483':[[266,286],[121,522],],
'522':[[384,8839],],
'588':[[48,3142],[48,4706],],
'674':[[48,3663],],
'1248':[[39,878],],
'2800':[[125,36],],
},{'43':[[39,845],],
'5207':[[384,9773],],
},{'89':[[39,848],],
},{'16':[[72,70],],
'39':[[137,224],[173,269],],
'43':[[246,1269],[308,165],[331,173],[246,654],[246,120],[39,865],[340,132],],
'61':[[84,128],],
'164':[[246,338],[246,958],],
'305':[[84,154],[331,145],],
'462':[[181,191],],
'1132':[[160,387],],
'1155':[[42,808],],
'1467':[[335,548],],
'2382':[[170,95],],
'2691':[[246,899],],
},{'15':[[384,407],],
'19':[[321,248],[277,306],[39,868],],
'23':[[42,535],[181,787],[174,60],[277,133],[186,144],[186,287],[181,728],],
'31':[[42,150],],
'33':[[41,151],[384,7907],],
'63':[[251,76],[384,911],[162,287],[384,2147],[384,1265],[384,954],[384,1223],[251,233],[99,148],[384,169],],
'77':[[384,1088],],
'82':[[42,931],],
'99':[[54,1095],],
'128':[[217,289],],
'152':[[336,156],[344,214],[384,3096],[226,72],[46,72],],
'272':[[217,490],[176,84],],
'433':[[174,21],],
'449':[[162,265],[384,3253],],
'553':[[278,35],],
'926':[[42,734],],
'1125':[[384,152],],
'1137':[[355,206],],
'1305':[[384,6373],],
'1307':[[384,7558],],
'1310':[[217,469],],
'1466':[[194,43],],
'4883':[[384,2890],],
},{'26':[[39,871],],
'39':[[162,214],],
},{'23':[[335,3409],],
'1246':[[39,872],],
},{'31':[[39,877],],
},{'3':[[246,1036],],
'7':[[217,179],],
'23':[[308,177],[340,144],[246,1971],[42,1222],[39,886],[224,190],],
'26':[[257,74],],
'77':[[186,135],],
'84':[[358,265],],
'128':[[87,47],],
'155':[[160,582],],
'1455':[[217,272],],
'3017':[[159,129],],
},{'67':[[39,892],],
},{'844':[[384,4989],],
'1250':[[39,893],],
},{'196':[[160,69],],
'1251':[[39,894],],
},{'1117':[[39,896],],
},{'14':[[371,49],[280,56],],
'48':[[379,128],],
'236':[[384,3080],],
'282':[[246,1762],],
'396':[[335,854],],
'1253':[[39,897],],
'1305':[[384,5947],[313,276],],
'1766':[[331,215],],
'2383':[[335,2290],[335,1840],],
'2546':[[91,45],],
'3229':[[384,6708],],
'3873':[[246,533],],
'4898':[[384,3118],],
'5090':[[384,6809],],
},{'23':[[84,530],[95,479],[102,140],[246,1204],[246,1224],],
'26':[[246,1145],[246,1080],],
'33':[[313,69],],
'36':[[246,1850],],
'41':[[384,1086],],
'48':[[246,1028],],
'154':[[160,500],],
'215':[[48,3038],[48,3546],],
'237':[[48,3469],[48,3007],],
'288':[[160,558],],
'292':[[384,2736],],
'322':[[48,2033],],
'443':[[384,1888],],
'576':[[39,903],],
'1004':[[48,3544],[48,3036],],
'1151':[[384,3347],],
'1255':[[48,2020],[48,3227],[48,1997],[48,2848],],
'1416':[[384,2181],],
'1439':[[48,2019],[48,1996],],
'1554':[[48,329],],
'1685':[[48,2100],],
'1733':[[48,3000],[48,3462],],
'1737':[[48,1954],[48,2096],],
'1782':[[48,3464],[48,3002],],
'1821':[[48,2847],[48,3226],],
'2034':[[246,1907],],
'2500':[[301,83],[343,103],],
'3653':[[246,1915],],
'4620':[[384,87],],
},{'41':[[224,50],[158,39],],
'99':[[48,1625],[48,1569],],
'314':[[39,912],],
'671':[[376,20],],
'1180':[[174,166],],
'1600':[[48,1591],],
'4845':[[384,3371],],
'5021':[[384,5127],],
},{'186':[[39,915],],
},{'314':[[39,917],],
},{'186':[[39,924],],
},{'33':[[307,204],[341,204],],
'309':[[51,18],],
'642':[[39,945],],
'671':[[350,123],[350,133],[391,24],[384,6665],[350,103],[350,113],],
'970':[[42,866],],
'1184':[[42,830],],
'1211':[[331,525],],
'1225':[[42,1154],],
'1364':[[384,1056],],
'1598':[[48,1583],[48,1642],],
'1602':[[48,1645],],
'1698':[[48,1600],[48,1676],],
'1915':[[384,714],],
'3013':[[157,72],],
'3450':[[179,549],[290,603],],
'3994':[[384,8367],],
'4335':[[335,2093],[335,2797],],
'4803':[[384,2640],],
'4908':[[384,8663],],
},{'12':[[384,65],],
'152':[[42,1156],],
'217':[[384,9141],],
'314':[[384,5205],],
'671':[[153,344],],
'780':[[48,1579],[48,1637],],
'1120':[[384,419],],
'1125':[[257,58],],
'1211':[[384,7741],],
'1260':[[39,946],],
'1340':[[52,283],[52,321],],
'1600':[[48,1603],[48,1679],],
'3386':[[179,415],[290,469],],
'4701':[[384,8158],],
'4927':[[384,7148],],
'4931':[[384,3511],],
},{'186':[[39,949],],
},{'1125':[[39,951],],
},{'186':[[39,958],],
'217':[[290,232],[179,178],],
},{'12':[[42,1147],],
'99':[[290,445],[179,391],],
'217':[[384,9042],[384,9077],],
'891':[[39,963],],
'1211':[[188,336],],
'1256':[[224,51],[158,40],],
'1260':[[48,1584],[48,1643],],
'4701':[[384,3197],],
},{'186':[[39,966],],
},{'12':[[117,41],[167,41],[355,1361],],
'19':[[219,26],[262,26],],
'99':[[384,5870],[384,5701],[384,6217],[381,570],[117,48],[384,6222],[381,586],[179,91],[179,379],[384,5932],[384,6170],[384,3424],[384,6132],[384,5718],[290,433],[384,6059],[167,48],[290,142],],
'100':[[384,1833],[384,2032],[384,988],[384,1718],],
'186':[[54,1119],[48,2063],],
'215':[[188,318],[188,296],],
'217':[[290,498],[384,9488],[179,444],],
'269':[[266,312],],
'314':[[42,491],],
'351':[[384,9627],],
'482':[[219,35],],
'671':[[384,5983],[350,83],],
'780':[[384,4132],],
'791':[[188,126],],
'958':[[48,2060],],
'1125':[[384,2613],],
'1177':[[384,5125],],
'1266':[[39,967],],
'1296':[[41,105],],
'1305':[[188,117],],
'1348':[[42,159],],
'1915':[[384,4630],],
'1951':[[217,57],],
'2217':[[54,1127],],
'3411':[[188,254],],
'4166':[[306,810],],
'4169':[[306,823],[306,837],],
'4566':[[379,57],],
'4581':[[384,694],],
'4803':[[384,5721],],
'4931':[[384,5569],],
},{'1267':[[39,968],],
},{'186':[[39,975],],
},{'7':[[380,3],[171,656],[245,34],[369,60],[380,41],],
'117':[[40,0],],
'125':[[371,19],],
'127':[[280,21],],
'169':[[262,54],],
'213':[[40,13],],
},{'7':[[40,3],[386,3],[171,658],[245,36],[369,62],[386,38],],
'117':[[380,0],],
'169':[[40,44],],
'213':[[380,15],],
'1273':[[371,23],[280,25],],
},{'7':[[40,18],],
},{'7':[[40,24],],
'125':[[153,215],],
'389':[[371,22],[280,24],],
},{'7':[[40,30],],
},{'30':[[380,36],[40,34],],
},{'15':[[304,371],[304,360],[350,209],],
'33':[[248,31],[384,4642],],
'159':[[40,36],],
},{'7':[[40,39],[171,652],[219,3],[369,56],[245,30],],
'13':[[384,3755],],
'27':[[219,49],],
'117':[[262,0],],
'169':[[219,59],],
'313':[[262,14],],
},{'7':[[291,3],[171,486],[351,3],[254,125],[211,50],[92,62],[142,19],[291,38],],
'19':[[327,26],],
'23':[[384,6773],[80,81],[296,72],[355,137],[384,4604],],
'26':[[178,78],[290,126],],
'63':[[52,189],],
'75':[[179,1570],[179,1520],[179,1318],[179,1465],],
'117':[[41,0],],
'122':[[80,15],[296,15],[309,13],],
'128':[[138,20],[374,20],[295,20],[220,20],[225,20],[98,20],[329,20],[268,20],],
'137':[[54,374],],
'139':[[335,1174],],
'154':[[363,304],],
'167':[[179,1065],],
'213':[[48,265],[41,15],],
'217':[[179,1119],],
'219':[[48,270],],
'271':[[335,2492],[335,2500],],
'380':[[178,19],[233,19],],
'422':[[48,4759],],
'479':[[48,4768],],
'543':[[162,162],],
'631':[[197,329],[70,479],],
'667':[[351,67],],
'683':[[138,17],],
'887':[[335,1888],],
'1101':[[54,1164],],
'1392':[[94,18],],
'1916':[[48,4233],],
'1947':[[72,17],],
'1955':[[235,15],],
'1956':[[153,331],],
'1966':[[225,17],],
'2067':[[118,17],],
'2126':[[179,697],],
'2133':[[374,17],],
'2357':[[320,17],],
'2369':[[244,17],],
'2370':[[191,17],],
'2383':[[253,17],],
'2548':[[361,17],],
'2552':[[327,18],],
'2554':[[98,17],],
'2555':[[295,17],],
'2556':[[329,17],],
'2557':[[220,17],],
'2558':[[268,17],],
'2559':[[396,17],],
'3509':[[179,872],],
},{'7':[[41,20],],
'26':[[48,251],],
'65':[[191,39],[396,39],[72,36],],
'124':[[48,4097],[306,1420],],
'135':[[253,150],],
'140':[[320,55],[253,40],],
'183':[[80,139],[296,158],[296,119],],
'229':[[41,124],],
'389':[[320,20],[94,21],],
'506':[[320,88],],
'1278':[[48,266],],
'1942':[[48,4415],[48,4359],[48,4770],],
'1947':[[179,1152],],
},{'1':[[384,2672],],
'7':[[41,126],[41,26],],
'15':[[384,2448],],
},{'7':[[41,32],],
'23':[[70,393],[197,230],[335,570],],
'33':[[355,994],],
'79':[[296,85],],
'237':[[41,134],],
'1101':[[335,1176],[335,2494],[54,376],[197,331],[277,287],[335,1890],[277,446],[70,481],],
'1284':[[179,1069],],
'1305':[[355,245],],
'1392':[[335,511],[335,746],],
'1942':[[48,4761],],
'1947':[[335,492],[335,714],[335,3593],[335,3211],[335,1158],[335,312],[335,1897],],
'1955':[[335,3705],[335,775],[335,3228],[335,338],[277,421],],
'2559':[[335,3236],],
'2935':[[335,576],],
'2963':[[153,333],],
'3518':[[179,1121],],
},{'7':[[41,38],],
'140':[[355,1006],],
'217':[[179,1305],],
'1101':[[335,2502],],
'1281':[[179,1070],],
'1303':[[41,143],],
'1392':[[335,388],],
'1955':[[335,401],],
'2067':[[179,1185],],
},{'26':[[176,109],],
'99':[[176,112],],
'100':[[384,187],],
'152':[[42,1005],],
'351':[[384,7068],[384,8560],],
'671':[[48,4931],],
'780':[[384,3337],],
'1282':[[41,39],],
'1697':[[384,7330],],
'4142':[[304,201],],
'4837':[[384,2251],],
'4931':[[384,5520],],
},{'7':[[41,44],],
'83':[[41,156],],
'1285':[[179,1068],],
},{'7':[[41,50],],
'82':[[41,169],],
'140':[[355,1055],],
'3518':[[179,1067],],
},{'100':[[384,657],],
'351':[[384,7881],[384,8577],],
'780':[[384,3471],[384,3509],],
'1285':[[41,51],],
'1591':[[179,1545],[179,1595],],
'1915':[[384,2551],[384,532],],
'2120':[[54,222],],
'4571':[[379,87],],
'4701':[[384,9045],],
'4855':[[384,2634],],
'4927':[[384,9865],[384,3474],],
},{'7':[[41,56],],
'183':[[296,94],],
'1123':[[41,183],],
},{'12':[[42,1003],],
'99':[[290,437],[179,383],],
'100':[[384,485],],
'321':[[219,29],[262,29],],
'482':[[262,35],],
'780':[[384,3369],],
'1260':[[331,526],],
'1287':[[41,57],],
'1288':[[54,220],],
'2119':[[54,219],],
'4855':[[384,2534],],
},{'7':[[41,62],],
'1314':[[41,199],],
},{'7':[[41,68],],
'215':[[41,210],],
},{'7':[[41,74],],
'904':[[41,216],],
},{'7':[[41,80],],
'215':[[41,227],],
},{'7':[[41,86],],
'215':[[41,238],],
},{'7':[[41,92],],
'215':[[41,249],],
},{'7':[[41,98],],
'215':[[41,260],],
},{'7':[[41,104],],
'215':[[41,271],],
},{'7':[[41,110],],
'183':[[296,106],],
'215':[[41,282],],
},{'7':[[41,284],[41,116],],
'217':[[48,268],],
},{'3':[[70,451],[197,301],],
'128':[[217,137],[41,119],],
'436':[[266,307],[384,8809],],
'550':[[257,122],],
'935':[[315,167],[289,167],],
'1781':[[121,457],],
'4713':[[384,780],],
},{'82':[[41,122],],
},{'7':[[191,49],[116,37],[72,46],[90,35],],
'23':[[331,272],[363,696],[306,1143],[191,109],],
'26':[[337,51],[363,111],[81,34],[218,87],[157,32],],
'61':[[134,137],[246,1535],[302,139],[384,5993],],
'89':[[170,197],],
'277':[[384,6509],[277,770],],
'345':[[41,132],[384,8356],],
'412':[[116,81],],
'431':[[367,63],[250,69],],
'451':[[218,80],[363,104],[84,482],],
'597':[[48,3487],],
'647':[[48,3521],],
'668':[[313,223],],
'726':[[142,95],],
'920':[[95,374],],
'1479':[[170,47],],
'1532':[[48,4766],],
'1778':[[306,1071],],
'2533':[[170,182],],
},{'15':[[194,73],[197,339],],
'16':[[194,91],],
'18':[[355,963],],
'19':[[277,464],[210,40],[77,49],[270,54],[131,51],[247,54],[332,39],[180,45],],
'23':[[174,99],],
'33':[[384,8378],[384,8076],[355,259],],
'63':[[41,139],[384,2687],[377,16],],
'77':[[384,54],[174,241],],
'83':[[274,72],],
'128':[[209,196],[270,202],[77,115],[247,200],[131,130],[332,139],],
'152':[[384,815],],
'449':[[384,2756],],
'531':[[217,379],[179,1230],[179,126],[355,309],[290,180],[174,30],[243,76],[384,8936],],
'857':[[384,454],],
'1118':[[162,282],],
'1205':[[344,140],],
'2675':[[384,2740],],
'2745':[[251,250],],
'3696':[[194,97],],
'4276':[[335,61],],
'4977':[[384,4238],],
},{'89':[[70,398],[197,235],[384,8072],],
'283':[[41,142],],
},{'2':[[227,229],[174,14],[171,1308],[174,4],],
'7':[[41,145],],
'8':[[384,852],],
'12':[[179,1175],[242,169],],
'43':[[174,117],],
'63':[[384,937],[344,240],[344,55],],
'77':[[384,5034],[384,5401],[384,4432],],
'82':[[243,122],[355,306],],
'140':[[344,210],],
'152':[[197,255],],
'197':[[179,1293],],
'215':[[381,572],],
'224':[[174,220],],
'277':[[384,158],],
'283':[[174,54],],
'306':[[243,88],],
'605':[[384,6274],],
'1004':[[384,4686],[384,5614],[384,5489],[384,5435],[162,170],],
'1101':[[384,6067],],
'1123':[[174,113],],
'1126':[[344,173],],
'1139':[[290,178],[179,124],],
'1305':[[171,37],[227,32],[68,46],],
'1310':[[274,297],[384,6724],[268,53],[363,385],[396,140],[384,3124],],
'1317':[[41,190],],
'1319':[[174,91],],
'1424':[[384,2563],],
'1462':[[174,244],],
'1547':[[384,6256],],
'1591':[[335,409],[179,1228],],
'1626':[[381,608],],
'2675':[[384,5016],[384,5170],],
'3227':[[355,321],],
'3251':[[174,261],],
'3818':[[355,348],[242,34],],
'4629':[[384,4145],[384,4809],],
},{'2':[[174,25],],
'12':[[242,143],],
'13':[[384,4972],],
'15':[[162,166],[335,1990],],
'23':[[381,214],[384,5487],[335,2333],[384,6825],],
'26':[[54,48],[68,45],],
'33':[[95,88],[384,7552],[384,6840],[188,123],],
'38':[[268,50],],
'63':[[344,235],],
'77':[[217,465],[384,4684],[384,7418],[384,5746],],
'79':[[296,103],],
'82':[[227,31],[290,171],[179,117],[171,36],],
'100':[[188,265],],
'111':[[290,260],[179,206],],
'140':[[344,205],[384,8151],],
'147':[[335,2943],],
'167':[[363,382],],
'203':[[344,51],],
'230':[[381,293],],
'250':[[335,2969],],
'275':[[384,8070],[95,29],[384,6719],[384,7901],],
'277':[[384,1218],[384,1205],],
'288':[[42,768],],
'301':[[42,765],[243,147],[344,163],[243,111],[243,95],[355,340],[355,292],],
'373':[[384,8017],[384,7885],],
'420':[[223,53],],
'439':[[41,161],],
'469':[[355,737],],
'482':[[384,7709],],
'494':[[384,131],],
'567':[[335,2721],],
'676':[[274,294],[396,137],[313,275],],
'679':[[384,6721],],
'706':[[344,191],],
'844':[[381,230],[384,6163],[384,7755],],
'861':[[218,308],],
'1004':[[384,6372],],
'1033':[[54,395],],
'1101':[[70,395],[197,232],],
'1123':[[174,33],],
'1304':[[41,146],[355,349],[242,35],[41,191],],
'1305':[[344,236],],
'1309':[[384,5946],[384,5612],[384,5433],],
'1310':[[384,935],],
'1332':[[344,129],],
'1334':[[85,52],],
'1424':[[384,148],[384,2816],[243,61],],
'1426':[[355,244],],
'1510':[[277,293],],
'1591':[[335,344],[179,1219],[335,3713],[335,3240],],
'2675':[[384,7008],[384,7214],[384,6514],[384,6496],],
'3217':[[384,4795],],
'3228':[[174,82],],
'3250':[[174,249],],
'3327':[[290,312],[179,258],],
'3346':[[179,300],[290,354],],
'3369':[[179,342],[290,396],],
'3399':[[179,404],[290,458],],
'3424':[[290,536],[179,482],],
'3445':[[290,589],[179,535],],
'3468':[[179,588],[290,642],],
'3525':[[344,276],],
'3641':[[188,116],],
'3818':[[384,7542],],
'3942':[[384,1325],],
'4114':[[384,3121],],
'4281':[[335,2304],],
'4629':[[384,7734],[384,7746],[384,7348],[384,7184],[384,7166],[384,7911],[384,7917],[384,6145],[384,6120],[384,6090],],
'5083':[[384,6700],],
},{'1202':[[41,149],],
},{'15':[[344,60],],
'16':[[384,7050],[384,1386],],
'19':[[191,170],],
'33':[[384,926],],
'52':[[191,77],],
'82':[[41,153],[384,2885],[384,7560],],
'284':[[384,956],],
'422':[[246,1492],],
'531':[[384,3575],[384,7834],],
'857':[[235,353],],
'861':[[384,3216],[384,3006],],
'937':[[246,194],],
'1137':[[257,126],],
'1191':[[384,2179],],
'1205':[[355,141],],
'1309':[[384,7557],],
'1319':[[355,436],],
'1416':[[384,146],],
'1424':[[384,3249],],
'1462':[[384,1919],],
'1474':[[384,5940],],
'1808':[[384,975],],
},{'16':[[234,382],[257,96],],
'19':[[42,690],],
'23':[[42,1076],[242,90],],
'63':[[42,673],],
'82':[[197,341],[42,732],],
'152':[[197,288],[70,438],],
'250':[[242,155],],
'299':[[278,50],],
'349':[[384,3562],[384,6539],],
'567':[[243,107],],
'861':[[48,4384],],
'1123':[[355,203],],
'1180':[[217,209],[384,858],],
'1261':[[384,66],],
'1307':[[41,154],[384,7835],],
'1431':[[217,496],],
'2090':[[355,338],],
'3631':[[384,7313],],
'3760':[[217,294],],
},{'7':[[41,158],],
'12':[[242,162],],
'15':[[384,2618],[384,4542],],
'19':[[384,4927],],
'23':[[384,5245],],
'26':[[384,5945],[41,178],],
'33':[[384,3434],[384,5555],],
'50':[[355,275],],
'63':[[42,773],],
'77':[[384,4938],],
'79':[[381,451],],
'82':[[290,163],[179,109],],
'140':[[344,267],[344,229],],
'152':[[384,6842],],
'275':[[384,7556],[384,7656],],
'277':[[384,906],],
'555':[[197,253],],
'647':[[384,7566],],
'960':[[243,152],],
'1004':[[384,6122],[384,6165],[174,251],[384,7583],[384,6092],[384,6827],],
'1109':[[243,130],],
'1123':[[344,146],],
'1304':[[68,47],[171,38],[227,33],],
'1305':[[384,6146],[344,52],[274,295],[384,6497],[242,36],[344,237],[296,104],[268,51],[344,277],[217,466],[355,350],[363,383],[384,7167],[384,7185],[384,7215],[384,3122],[384,7349],[41,192],[384,7419],[384,7543],[384,6722],[384,5747],[384,6515],[162,167],[396,138],],
'1309':[[344,230],[384,7657],],
'1591':[[179,1209],],
'1615':[[384,7564],],
'2088':[[95,72],],
'2675':[[384,5059],[384,6582],[384,7253],[384,6609],[384,5785],[384,6475],],
'3292':[[179,185],[290,239],],
'3306':[[179,289],[290,343],],
'3323':[[290,301],[179,247],],
'3361':[[179,331],[290,385],],
'3390':[[179,381],[290,435],],
'3419':[[290,525],[179,471],],
'3440':[[179,524],[290,578],],
'3461':[[290,631],[179,577],],
'3749':[[384,6370],],
'4629':[[384,6105],[384,7071],[384,5611],[384,5432],],
'4783':[[384,5132],],
'4994':[[384,4557],],
},{'7':[[41,171],],
'63':[[384,3436],[227,35],[171,40],],
'140':[[344,220],[384,7135],],
'152':[[41,194],[344,269],[384,5557],[242,38],[355,352],],
'275':[[384,7674],],
'277':[[384,934],],
'439':[[344,233],],
'960':[[355,297],[344,168],],
'1004':[[217,468],[384,7217],[384,7255],[243,132],[243,154],[384,7187],[381,453],[384,7351],[384,7169],[355,277],[344,279],[41,163],[384,5749],[384,6148],[384,7073],[344,148],],
'1309':[[344,53],[68,48],[384,7544],[384,7420],[162,168],[344,238],[384,6723],[384,6610],[384,6516],[384,6498],[384,6476],[363,384],[274,296],[268,52],[384,2619],[384,3123],[396,139],[384,4543],[384,4558],[384,5060],[384,5133],[384,5246],],
'1310':[[384,7675],],
'1463':[[179,278],[179,164],[179,236],[290,374],[290,218],[290,290],[290,332],[179,320],],
'1591':[[179,1198],],
'2675':[[384,7302],[384,7581],[384,6007],],
'3270':[[179,101],[290,154],],
'3378':[[290,412],[290,514],[290,567],[179,358],[179,460],[290,620],[179,513],[179,566],],
},{'1310':[[41,164],],
},{'1169':[[217,167],[41,167],],
},{'7':[[217,154],],
'19':[[41,174],],
'250':[[344,165],[243,149],[355,294],],
'275':[[384,7661],],
'1119':[[384,5732],],
'1310':[[179,102],[290,155],[179,1199],],
'5058':[[384,9869],],
},{'1':[[381,531],],
'2':[[242,26],],
'7':[[41,185],],
'12':[[381,576],[381,553],],
'13':[[384,4592],[384,6253],],
'16':[[242,82],],
'33':[[384,4513],[80,103],[242,53],[296,137],],
'63':[[68,50],],
'67':[[381,580],],
'100':[[188,286],[188,307],],
'140':[[384,6277],[381,535],],
'167':[[242,65],[242,195],[242,183],],
'275':[[384,7539],],
'279':[[41,198],[242,24],[254,99],[242,2],[92,36],[355,358],[211,170],[211,5],[171,460],[95,525],[95,15],],
'346':[[381,610],],
'482':[[42,755],],
'1304':[[384,6257],[384,6725],[384,3125],],
'1305':[[355,341],],
'1310':[[384,7421],],
'1359':[[242,149],],
'1419':[[242,138],],
'1427':[[42,747],],
'1911':[[384,4562],],
'2479':[[384,4576],],
'4629':[[384,7198],],
},{'3':[[99,239],[308,174],[384,235],[340,141],[384,1310],],
'23':[[41,187],],
'26':[[246,578],[121,196],[62,81],],
'33':[[253,195],[251,283],],
'55':[[384,2963],],
'75':[[186,137],],
'140':[[178,233],],
'143':[[99,262],],
'149':[[341,123],[42,256],[307,123],],
'266':[[307,98],[170,36],[341,98],],
'281':[[274,372],],
'375':[[86,199],],
'433':[[277,26],[227,180],],
'462':[[188,202],],
'482':[[246,1792],],
'485':[[289,158],],
'506':[[153,137],],
'542':[[251,222],],
'615':[[152,142],],
'617':[[246,838],],
'652':[[315,158],],
'696':[[181,135],],
'1109':[[274,323],],
'1455':[[179,152],[290,206],],
'1462':[[384,1294],],
'1591':[[179,1263],],
'1913':[[384,4420],[384,6963],],
'2111':[[246,497],],
'3719':[[206,47],],
'3825':[[242,193],],
'5164':[[384,9021],],
},{'1315':[[41,188],],
},{'1316':[[41,189],],
},{'12':[[99,86],],
'19':[[70,425],[197,275],[242,176],],
'442':[[355,867],],
'995':[[277,452],],
'1151':[[41,292],],
'1303':[[197,236],[70,399],],
},{'39':[[246,1248],],
'63':[[246,1254],],
'82':[[42,658],[42,671],[42,792],[384,5796],[70,431],[153,314],[174,90],[384,4823],[384,1094],[179,228],[179,452],[384,929],[355,1159],[355,821],[42,503],[355,238],[179,1450],[355,146],[355,86],[197,281],[217,159],[217,169],[217,417],[344,328],[227,188],[235,257],[243,73],[243,173],[246,212],[355,435],[41,297],[335,3380],[290,506],[277,33],[277,301],[277,315],[277,455],[290,90],[290,282],[384,7909],],
'147':[[179,1385],],
'420':[[48,2004],],
'481':[[384,7079],],
'647':[[217,505],],
'1123':[[355,843],],
'1178':[[246,1298],],
'1245':[[384,170],],
'1302':[[174,100],],
'1676':[[179,1397],],
'1677':[[179,1380],[179,1490],],
'1734':[[179,1392],],
'1735':[[179,1499],],
'1846':[[179,135],[179,1242],[290,189],],
'3928':[[246,1335],],
},{'2':[[68,53],[41,300],],
'15':[[161,372],],
},{'7':[[254,105],[211,30],[92,42],[130,3],[130,29],[171,466],],
'23':[[41,312],],
'77':[[68,82],],
'82':[[211,174],],
'117':[[184,0],],
'313':[[41,360],[384,6785],[184,14],],
},{'677':[[355,384],[41,336],],
},{'1':[[313,415],[199,33],[363,594],],
'15':[[384,8041],],
'16':[[225,30],],
'19':[[363,715],[384,5254],[384,5546],],
'31':[[313,150],],
'34':[[41,339],[363,388],],
'77':[[384,7298],],
'107':[[355,1441],[363,748],],
'447':[[363,687],],
'451':[[199,55],[363,662],],
'634':[[384,8329],],
'817':[[384,7831],],
'849':[[199,35],],
'1003':[[218,357],],
'1381':[[191,213],[363,126],],
'2183':[[363,642],],
'2675':[[384,8290],[384,8281],],
'4643':[[384,6521],],
},{'23':[[41,348],],
'26':[[384,2065],],
'671':[[246,1561],],
'674':[[335,2730],],
},{'39':[[341,154],[169,43],[307,154],],
'82':[[48,3527],],
'150':[[214,195],],
'153':[[184,28],[384,6787],[41,362],],
'349':[[384,9724],],
'2790':[[125,216],],
'2829':[[125,167],],
'2835':[[125,197],],
},{'2':[[249,97],],
'134':[[305,34],[151,26],[73,30],[372,30],[319,30],[368,27],[389,26],],
'228':[[335,843],[305,18],[335,573],[389,18],[372,18],[73,16],[319,16],[151,18],[368,18],],
'650':[[306,127],[70,149],[70,102],[277,231],[184,30],[384,6789],[384,7971],[197,93],[197,85],[41,364],],
'1007':[[305,83],[305,77],],
'1314':[[188,287],],
'1520':[[48,124],[306,110],],
'1523':[[335,68],[54,257],[153,157],[48,146],[70,106],[179,613],[197,89],],
'1537':[[306,131],[48,209],[179,616],[54,260],[153,160],[335,71],],
'1565':[[384,3088],],
'1574':[[48,434],],
'1576':[[70,179],[197,123],[48,449],[306,163],],
'2014':[[335,594],],
'2125':[[335,86],[153,194],[54,275],],
'2139':[[305,81],],
'3665':[[188,309],],
'4146':[[305,75],],
'4293':[[335,857],],
'4960':[[384,4043],],
'5153':[[384,8775],],
},{'7':[[42,3],[254,151],[92,88],[171,512],[202,3],[202,26],[211,76],],
'23':[[313,404],],
'26':[[313,365],],
'117':[[337,0],],
'445':[[313,19],],
'667':[[42,1333],],
'926':[[335,2886],[335,2146],],
'1329':[[337,16],],
},{'14':[[42,11],[365,9],[65,9],[82,11],[93,9],[123,11],[142,11],[165,11],[202,13],[221,13],[304,11],[345,11],[337,13],[342,11],[395,13],],
'1327':[[313,405],],
'1383':[[42,371],],
},{'23':[[145,42],[384,4845],[212,44],],
'36':[[145,34],[212,36],],
'126':[[339,77],],
'128':[[65,166],[342,312],],
'137':[[304,157],[371,32],],
'149':[[42,820],[228,43],],
'277':[[306,950],],
'312':[[65,11],[337,15],[93,11],[304,13],[342,13],[123,13],[142,13],[365,11],[345,13],[165,13],[221,15],[202,15],[82,13],[42,13],[395,15],],
'712':[[82,303],],
'888':[[179,663],],
'940':[[306,323],],
'1476':[[48,1795],],
'1531':[[48,1898],],
'1587':[[48,491],],
'1731':[[48,1891],],
'1738':[[48,1917],],
'1853':[[48,3863],[306,1049],],
'1869':[[48,3705],],
'1879':[[306,979],[48,3734],],
'2168':[[54,835],],
'2560':[[93,102],[111,33],],
'3978':[[384,4828],],
},{'124':[[42,20],],
'1346':[[42,124],],
'1395':[[42,463],],
},{'18':[[355,1125],],
'182':[[42,26],],
'314':[[42,542],],
'533':[[42,469],[42,132],],
'593':[[42,538],],
'1481':[[355,1335],],
},{'3':[[335,515],],
'15':[[384,5842],],
'23':[[335,465],],
'33':[[335,540],[384,5357],],
'123':[[42,32],],
'137':[[335,1698],[335,532],[335,2452],],
'147':[[42,186],[42,596],],
'199':[[42,558],],
'250':[[335,556],],
'347':[[355,1061],[355,1027],[274,745],[235,478],[75,104],[376,38],[234,376],[355,407],],
'593':[[344,128],[178,228],],
'949':[[153,303],],
'1203':[[42,167],],
'2626':[[355,432],],
'2629':[[344,321],],
'2964':[[153,348],[335,749],],
'4491':[[355,1188],],
},{'19':[[157,55],],
'33':[[384,5844],],
'55':[[234,103],],
'137':[[335,621],[335,1701],[335,1709],[250,55],[335,2455],[335,535],[367,49],],
'175':[[367,113],],
'182':[[42,38],[81,20],[250,22],[367,20],[142,50],[234,20],],
'217':[[81,61],],
'239':[[157,47],[157,25],],
'277':[[81,36],],
'347':[[355,416],[234,112],[75,117],],
'613':[[234,400],],
'682':[[367,120],[250,117],],
'1004':[[142,109],],
'1333':[[142,110],],
'1352':[[355,1202],],
'1353':[[42,178],],
'1408':[[42,589],],
'1458':[[384,5370],],
'1591':[[335,1705],],
'2414':[[250,110],],
'2415':[[81,59],],
'2964':[[335,804],[335,764],[335,752],[153,572],[153,340],[335,807],[335,839],],
'4225':[[384,6559],],
},{'226':[[85,43],],
'305':[[246,347],],
'347':[[384,5590],],
'445':[[42,203],],
'658':[[42,44],],
'926':[[85,36],],
'1355':[[42,610],[42,200],],
'1411':[[42,618],],
'2494':[[85,51],],
},{'19':[[42,781],],
'26':[[278,22],],
'28':[[42,828],],
'31':[[42,242],],
'33':[[242,135],],
'63':[[355,1128],],
'137':[[335,391],],
'140':[[217,507],],
'165':[[42,650],],
'182':[[42,56],],
'347':[[242,132],[355,242],[355,1033],],
'506':[[384,7568],],
'593':[[355,1319],[355,1309],],
'926':[[42,740],],
'1117':[[355,1247],],
'1245':[[42,735],[278,36],],
'1359':[[384,6455],[278,45],[42,729],],
'1438':[[42,841],],
'1445':[[42,862],],
'3978':[[384,4886],],
},{'182':[[42,62],],
'1367':[[42,267],],
'1448':[[42,871],],
},{'123':[[42,68],],
'140':[[384,4283],],
'347':[[84,221],[116,98],[231,96],[355,719],],
'533':[[42,877],],
'1368':[[42,272],],
},{'23':[[42,942],[42,963],],
'26':[[130,25],],
'182':[[42,74],],
'271':[[42,334],],
'347':[[384,5956],],
'362':[[42,936],],
'370':[[42,910],],
'926':[[42,298],],
'1379':[[42,354],],
},{'65':[[42,951],],
'123':[[42,80],],
'1377':[[42,345],],
},{'13':[[42,1001],],
'69':[[384,9304],],
'182':[[42,86],],
'230':[[42,1018],],
'347':[[52,264],],
'370':[[42,968],],
'449':[[52,320],],
'593':[[52,282],],
'671':[[42,1040],],
'707':[[52,277],],
'1283':[[42,1006],],
'1380':[[42,358],],
'2675':[[384,9181],],
},{'7':[[42,91],[92,74],[254,137],[223,60],[223,3],[217,5],[171,498],[211,62],],
'19':[[104,26],],
'117':[[99,0],],
'213':[[99,15],],
'375':[[274,159],],
'667':[[217,513],],
'2553':[[104,18],],
},{'15':[[274,491],[274,696],[384,4096],[384,4081],],
'23':[[274,759],[274,773],],
'26':[[42,1084],[182,22],],
'33':[[384,4801],[274,335],],
'38':[[274,383],[274,377],],
'73':[[274,436],],
'140':[[274,733],],
'147':[[274,661],],
'230':[[42,383],],
'299':[[274,275],],
'301':[[274,483],],
'346':[[194,82],],
'347':[[274,421],[274,165],[274,156],],
'681':[[274,307],],
'1123':[[274,280],],
'1340':[[42,1041],],
'1341':[[42,92],[104,19],],
'2060':[[264,24],],
'2631':[[274,240],],
'3064':[[274,346],],
'3978':[[384,4856],],
},{'167':[[42,391],],
'173':[[42,98],],
},{'26':[[42,1132],],
'34':[[42,1214],],
'63':[[42,1149],],
'182':[[42,104],],
'259':[[42,1095],],
'562':[[42,1158],],
'1386':[[42,402],],
'1389':[[42,425],],
'3978':[[384,4872],],
},{'12':[[42,1125],],
'63':[[42,1097],[42,1160],],
'182':[[42,110],],
'593':[[42,1145],],
'1388':[[42,412],],
},{'23':[[339,99],],
'34':[[229,179],],
'206':[[365,120],],
'421':[[142,71],],
'1019':[[82,309],],
'1101':[[42,123],],
'1720':[[65,57],],
'2377':[[337,46],],
'2438':[[165,39],],
'2535':[[93,50],],
'2709':[[304,165],],
'2711':[[342,89],],
},{'7':[[42,269],[42,126],],
'817':[[384,5109],],
'1315':[[384,9022],],
'2411':[[384,5594],],
},{'63':[[42,520],],
'230':[[42,512],[42,146],],
'322':[[42,550],],
'518':[[42,158],],
'1403':[[42,531],],
},{'19':[[42,164],],
'48':[[86,228],[86,221],],
'62':[[335,3420],],
'117':[[42,429],],
'154':[[378,34],],
'177':[[86,239],],
'481':[[384,6126],],
'513':[[242,75],],
'856':[[54,1209],],
'969':[[100,194],[48,4346],[135,151],],
'1194':[[54,185],],
'1843':[[266,324],[48,3253],[54,506],[384,7034],],
'2574':[[95,166],],
'4095':[[384,6364],],
},{'1':[[355,1253],],
'7':[[42,169],[301,29],[385,32],],
'15':[[80,69],[49,221],[54,1134],[272,37],],
'26':[[160,445],],
'128':[[366,31],],
'183':[[91,20],],
'1339':[[42,952],],
'1399':[[135,180],],
},{'15':[[384,8243],[335,735],],
'16':[[170,112],[384,1235],[80,73],],
'18':[[246,1566],],
'26':[[384,1256],[42,182],[42,592],],
'31':[[335,979],[200,198],[42,173],],
'89':[[249,43],[121,472],],
'203':[[303,69],],
'239':[[75,136],],
'250':[[303,140],],
'482':[[153,301],],
'532':[[384,1296],[178,263],[251,262],],
'646':[[379,112],],
'949':[[335,519],[142,84],[355,1191],],
'1424':[[384,1372],],
'1627':[[246,1653],],
'2640':[[384,9523],],
'5076':[[384,6470],],
},{'15':[[42,175],],
'18':[[355,1201],],
'26':[[335,679],],
'107':[[344,111],],
'152':[[344,304],],
'203':[[75,81],],
'420':[[335,795],],
'3191':[[170,212],],
},{'26':[[95,39],[153,81],],
'34':[[101,29],],
'63':[[153,54],[42,177],],
'152':[[153,689],],
'279':[[274,736],],
'288':[[235,228],[95,260],[54,693],],
'315':[[189,407],],
'343':[[95,137],],
'481':[[384,3628],[274,481],],
'487':[[99,229],],
'791':[[274,775],[274,789],[274,685],],
'1101':[[99,248],],
'1105':[[384,5877],],
'1318':[[99,87],],
'2082':[[54,53],],
'2267':[[384,4142],],
'2625':[[99,95],],
'3064':[[189,552],],
},{'19':[[42,190],[298,60],[42,338],[42,600],[127,60],[278,55],[157,65],[234,416],],
'31':[[365,146],[141,61],],
'552':[[384,1067],],
'1333':[[384,5371],],
'1362':[[42,233],],
},{'7':[[171,538],[254,177],[81,3],[361,5],[81,63],[92,114],[211,102],],
'117':[[157,0],],
'140':[[42,199],[42,609],],
'150':[[355,1237],],
'182':[[157,16],],
'346':[[367,59],[81,46],[250,65],],
'375':[[234,411],],
'506':[[384,5389],],
'667':[[361,113],],
'1333':[[335,536],[335,765],],
'4306':[[335,1106],],
},{'7':[[42,211],],
'128':[[317,65],[212,30],[145,28],],
'247':[[164,597],],
'277':[[246,1940],[48,2345],],
'791':[[277,485],],
'1333':[[355,1203],],
'1382':[[42,364],],
},{'48':[[269,173],[284,174],],
'89':[[42,421],],
'315':[[355,1393],[42,214],],
'1134':[[384,7307],],
},{'15':[[42,635],[42,216],],
'34':[[42,1192],],
'140':[[42,934],],
'921':[[384,2435],],
'1117':[[335,2643],],
'1374':[[384,6525],],
'1378':[[42,352],[42,960],],
'1387':[[42,405],],
'1667':[[70,282],[197,163],[391,41],],
'1719':[[161,117],],
},{'16':[[181,33],],
'19':[[52,255],[384,6454],],
'23':[[186,281],[251,59],[164,610],],
'33':[[384,5736],],
'63':[[384,1092],],
'99':[[71,45],[382,45],],
'131':[[54,1107],],
'147':[[42,218],],
'153':[[194,48],],
'199':[[242,148],[355,1353],],
'299':[[278,44],],
'538':[[217,157],],
'861':[[335,2483],],
'1109':[[384,2873],],
'1205':[[181,482],],
'1307':[[384,7561],],
'1423':[[42,728],],
},{'47':[[274,806],],
'281':[[320,66],],
'579':[[42,224],],
'817':[[384,8761],],
'858':[[181,838],],
'1452':[[274,723],],
},{'15':[[253,203],],
'147':[[244,220],[118,189],],
'861':[[384,7514],],
'923':[[42,228],],
},{'43':[[160,440],],
'63':[[355,925],],
'225':[[102,159],],
'248':[[251,129],],
'285':[[217,375],],
'343':[[213,409],[49,311],[89,470],],
'447':[[42,232],],
'1328':[[42,372],],
'1424':[[384,2341],],
},{'23':[[217,420],],
'57':[[42,252],],
},{'449':[[42,254],[42,409],[48,760],[48,3394],[51,32],[72,64],[118,123],[121,158],[126,24],[128,205],[134,78],[141,75],[143,54],[162,307],[172,85],[384,1055],[363,262],[189,513],[209,218],[235,96],[235,241],[235,443],[244,165],[246,1779],[250,108],[277,431],[355,421],[302,75],[306,180],[322,207],[349,71],[335,1979],[335,2711],[337,73],[384,5159],],
'531':[[331,323],],
'926':[[179,107],[179,1205],[290,161],],
},{'12':[[42,710],[42,262],],
'248':[[225,36],],
'305':[[384,284],],
'817':[[384,3594],[162,317],],
},{'1123':[[42,265],],
},{'19':[[42,683],],
'167':[[355,1251],],
'513':[[242,68],],
'1366':[[42,266],],
},{'274':[[384,5107],],
'347':[[384,5696],],
'349':[[42,271],],
},{'16':[[42,289],[384,9484],[191,147],],
'39':[[48,3661],],
'301':[[306,1272],[384,7231],[48,3941],],
'370':[[334,29],],
'2245':[[279,22],],
},{'27':[[355,465],[247,222],],
'38':[[381,371],],
'39':[[206,52],[180,166],],
'43':[[381,352],[381,77],[49,231],[52,251],[54,182],[54,1248],[371,120],[365,218],[70,109],[76,77],[363,139],[355,1211],[89,365],[89,387],[355,1151],[105,46],[355,1050],[42,797],[121,189],[121,464],[355,947],[145,48],[146,152],[153,1228],[161,589],[355,494],[42,564],[340,71],[336,129],[321,189],[42,528],[181,185],[320,28],[313,162],[308,104],[186,252],[197,258],[301,54],[355,1002],[212,50],[214,371],[217,355],[396,169],[218,101],[231,102],[246,946],[280,118],[277,860],[42,292],[249,214],[252,80],[277,807],[266,43],[266,86],[274,406],],
'63':[[394,160],],
'67':[[110,23],],
'152':[[217,448],],
'164':[[102,162],],
'202':[[384,9014],],
'250':[[174,84],[174,109],],
'305':[[181,537],[178,314],[42,1206],[283,247],[181,616],[381,360],[54,1422],[164,478],[164,430],[355,677],[261,159],[246,1593],[109,26],[378,29],[86,253],[358,319],[59,46],],
'1214':[[42,824],[246,1555],],
'1442':[[197,463],[42,853],[335,2415],[344,47],],
'1865':[[335,1996],[83,35],[181,916],],
'2573':[[131,161],],
},{'7':[[42,347],[42,300],],
'250':[[179,1181],],
'1381':[[42,361],],
'1951':[[70,488],],
},{'26':[[42,303],],
},{'3':[[342,167],],
'153':[[42,306],],
},{'18':[[336,84],[235,296],[220,58],[191,217],[170,154],[159,146],],
'19':[[42,308],[98,39],[49,203],],
'33':[[384,9272],],
'237':[[384,7085],[384,7293],[384,5162],],
'431':[[235,167],],
'531':[[121,181],[342,251],],
'884':[[384,3190],],
'1205':[[251,54],],
'1374':[[48,1205],[48,1881],[48,1884],[48,1232],[48,1227],],
'1460':[[42,946],],
'1655':[[48,1204],],
'1657':[[48,1231],],
'1659':[[48,1226],],
'1731':[[48,1883],],
'1733':[[48,1880],],
'2663':[[102,62],],
'4629':[[384,9918],],
'5079':[[384,6524],],
},{'970':[[42,948],[98,41],[235,169],[384,9274],[384,9920],[42,310],],
},{'31':[[170,270],],
'696':[[42,330],],
},{'7':[[184,3],[92,44],[278,3],[254,107],[171,468],[278,72],[211,32],],
'117':[[130,0],],
'313':[[130,16],],
'667':[[184,44],],
'671':[[42,344],],
},{'12':[[217,320],[42,959],[48,583],[266,216],[153,1207],[321,64],[249,240],[249,139],],
'128':[[90,23],],
'164':[[181,707],],
'248':[[355,1084],],
'271':[[42,351],],
'1158':[[355,1163],],
},{'447':[[384,6616],],
'1358':[[42,1193],[42,353],],
},{'12':[[384,9284],],
'89':[[42,954],[42,357],],
'173':[[235,38],],
'439':[[65,64],],
'445':[[235,164],],
'543':[[65,74],],
'888':[[384,4459],[384,4588],],
'2309':[[65,69],[65,79],[65,61],],
},{'3':[[384,5199],[274,818],[384,7520],],
'7':[[42,360],],
'15':[[384,1023],[42,970],],
'19':[[220,79],[121,437],[89,449],[232,72],[313,349],],
'23':[[384,6480],[221,31],[384,7171],[42,1027],],
'33':[[384,1046],[100,176],[384,601],],
'34':[[246,385],],
'38':[[181,654],],
'59':[[189,455],],
'63':[[384,4707],],
'77':[[335,2426],],
'369':[[384,6309],],
'499':[[384,398],],
'506':[[357,45],],
'674':[[191,212],],
'713':[[363,125],],
'1416':[[48,4253],],
'1991':[[49,368],],
'2446':[[82,348],],
'3196':[[384,411],],
'3852':[[246,248],],
'4226':[[384,4415],],
'4621':[[384,107],],
'4706':[[384,2346],],
'4932':[[384,3557],],
'4999':[[384,4689],],
},{'19':[[246,1365],[186,86],],
'656':[[54,1039],[54,990],],
'817':[[384,9903],],
'921':[[42,363],],
'2171':[[54,930],],
'2229':[[384,4278],],
'2232':[[54,1287],],
},{'1198':[[42,370],],
},{'7':[[42,385],],
'128':[[99,53],],
'347':[[384,9307],],
'659':[[235,102],[355,893],[244,56],[118,55],],
'931':[[42,976],],
'1335':[[355,1248],],
'3760':[[217,311],],
},{'2':[[163,31],],
'12':[[235,360],],
'15':[[159,141],],
'26':[[99,202],[99,71],[384,319],[99,57],],
'33':[[384,1139],],
'47':[[164,39],],
'140':[[42,1047],],
'154':[[266,291],],
'346':[[384,506],],
'1384':[[42,386],],
'2104':[[384,6396],[384,6406],],
'5068':[[384,6305],],
},{'355':[[42,401],],
'682':[[89,375],],
'2528':[[89,369],],
},{'7':[[42,404],],
'1117':[[156,83],[156,93],[196,77],[196,87],[363,555],[93,87],],
},{'26':[[313,427],],
'149':[[42,411],],
'236':[[179,668],],
'422':[[372,42],],
'515':[[48,2479],],
'1198':[[42,1246],],
'1725':[[179,721],],
'2384':[[335,758],],
'3539':[[179,1360],],
},{'12':[[355,886],],
'57':[[42,424],],
},{'15':[[42,431],],
'420':[[214,71],],
'1225':[[42,718],],
'1838':[[331,409],],
},{'12':[[218,332],],
'23':[[49,329],[50,99],[341,72],[54,476],[326,41],[307,72],[95,201],[305,26],[99,212],[287,28],[112,24],[286,18],[274,353],[384,9583],[148,156],[198,29],[181,68],],
'26':[[100,188],[135,145],],
'36':[[274,357],],
'39':[[266,159],],
'56':[[384,4997],],
'153':[[187,182],[52,125],[164,424],[289,58],[176,274],[373,33],[315,58],],
'195':[[214,171],],
'366':[[335,284],[335,3177],],
'420':[[176,222],[359,69],[42,440],[95,145],[164,488],[303,170],[160,616],[368,63],[164,276],],
'705':[[321,372],[112,124],],
'861':[[234,385],[54,678],[95,245],],
'921':[[341,220],[307,220],[307,232],[384,2445],[341,232],],
'2720':[[112,112],],
'3148':[[163,54],],
},{'7':[[239,3],[211,126],[92,138],[254,201],[239,31],[104,5],[171,562],],
'12':[[355,975],],
'13':[[384,6447],],
'117':[[94,0],],
'137':[[335,2654],[335,1182],[335,387],[335,510],],
'139':[[235,118],[118,83],[244,92],],
'140':[[355,1147],],
'347':[[94,17],],
'420':[[355,1332],],
'667':[[104,31],],
'1391':[[42,441],],
'1394':[[42,451],],
'2964':[[153,336],[335,745],],
},{'13':[[94,52],],
'26':[[280,100],[371,93],],
'38':[[355,574],],
'73':[[42,443],],
'449':[[246,1214],[246,1025],],
'502':[[251,122],],
'3593':[[276,60],],
},{'347':[[42,450],],
},{'7':[[138,44],[211,128],[92,140],[94,5],[254,203],[138,3],[171,564],],
'117':[[239,0],],
'150':[[42,1311],[42,462],],
'173':[[239,16],],
'667':[[94,57],],
'2675':[[384,5366],],
},{'846':[[42,873],[42,465],],
},{'59':[[384,8086],],
'68':[[384,5038],],
'250':[[172,64],],
'502':[[217,372],],
'1331':[[42,470],],
},{'12':[[206,54],],
'41':[[317,78],],
'63':[[181,743],[331,261],[335,2963],],
'598':[[197,140],[70,259],],
'923':[[42,477],],
'2377':[[277,362],],
'4548':[[365,224],],
},{'12':[[135,179],[384,9011],],
'63':[[246,167],],
'1101':[[99,180],[42,480],],
},{'277':[[42,486],],
},{'19':[[173,273],[42,761],[335,2719],[174,86],[137,228],[384,8785],],
'33':[[42,499],],
'1003':[[306,986],[48,3741],],
'1202':[[246,564],],
'1326':[[48,435],],
},{'518':[[331,35],],
'1401':[[42,500],],
'3889':[[246,674],],
},{'12':[[42,530],[48,2394],[48,3948],[49,433],[54,192],[102,58],[341,104],[197,465],[246,1202],[306,1279],[307,104],[384,3673],],
'861':[[153,528],],
'1003':[[381,520],],
},{'12':[[99,246],[42,556],],
'23':[[242,115],],
'134':[[179,1037],],
'2634':[[99,165],],
'2648':[[99,293],],
'4053':[[384,1308],],
},{'19':[[121,384],],
'26':[[384,2601],],
'39':[[153,999],[89,325],],
'55':[[42,572],[178,248],[178,254],],
'63':[[153,144],],
'131':[[153,1201],],
'147':[[384,5826],[152,165],],
'162':[[152,101],[384,5882],],
'197':[[384,5812],],
'244':[[178,230],],
'250':[[89,88],],
'425':[[178,224],],
'462':[[49,371],],
'502':[[178,270],],
'596':[[49,349],],
'1016':[[178,211],],
'1370':[[89,388],],
'1467':[[153,127],],
'1829':[[153,1253],],
'2321':[[384,1744],],
'2930':[[152,191],],
},{'23':[[49,384],],
'33':[[42,574],],
'540':[[42,583],],
'615':[[344,319],],
'903':[[342,136],],
'1416':[[49,381],[152,144],],
'1669':[[344,312],],
'2058':[[335,1555],[335,1092],],
'3584':[[181,747],],
},{'39':[[42,581],],
'562':[[42,643],],
},{'436':[[335,2521],],
'1198':[[268,35],[186,364],[42,588],],
},{'7':[[337,63],],
'128':[[374,24],[98,24],[138,24],[373,22],[220,24],[225,24],[329,24],[295,24],[268,24],],
'149':[[320,37],],
'875':[[384,5272],],
'1334':[[42,611],],
'1342':[[42,1042],],
'2940':[[152,124],],
},{'937':[[42,616],],
},{'23':[[381,148],],
'904':[[381,53],],
'1410':[[42,617],],
},{'63':[[384,8133],],
'149':[[42,921],],
'208':[[384,9059],],
'281':[[268,33],],
'945':[[42,627],],
},{'12':[[42,631],],
'19':[[335,2144],[335,2884],],
'285':[[313,469],],
'939':[[313,480],],
'1646':[[48,2334],[48,3365],[48,1114],[306,640],[48,2928],],
},{'23':[[42,645],[321,401],[247,258],[246,1679],[189,399],[191,229],[213,358],[213,380],[246,882],[384,7466],],
'89':[[54,76],[186,159],],
'298':[[186,190],],
},{'12':[[217,500],[246,206],[42,655],],
'23':[[99,152],],
'77':[[384,4981],],
'284':[[197,284],[70,434],],
},{'12':[[384,1487],],
'15':[[355,1044],],
'16':[[313,311],],
'19':[[277,479],[48,4252],[331,283],[335,566],[170,266],],
'41':[[384,145],],
'63':[[171,74],[227,80],],
'77':[[153,113],],
'144':[[384,4950],],
'152':[[274,316],[217,359],],
'199':[[42,666],],
'224':[[65,100],],
'250':[[217,297],],
'433':[[277,137],],
'499':[[355,923],],
'530':[[48,4313],],
'615':[[99,128],],
'888':[[52,314],],
'903':[[49,380],[152,195],],
'1192':[[342,173],],
'1307':[[384,2180],],
'1315':[[152,143],],
'4095':[[384,6137],],
'4096':[[278,47],],
'4210':[[313,473],],
},{'12':[[48,4298],[42,705],[349,61],[224,176],[349,79],],
'23':[[48,115],],
'39':[[48,2561],],
'57':[[42,685],],
'63':[[48,3568],],
'164':[[48,4294],],
'351':[[331,289],],
'1813':[[48,4790],],
},{'18':[[242,123],],
'31':[[42,688],],
'39':[[246,1507],],
'203':[[242,96],],
},{'16':[[355,1300],[42,694],],
'26':[[42,752],],
'186':[[42,707],],
'230':[[384,4894],],
'671':[[306,870],[48,1048],],
'682':[[274,192],],
'1003':[[384,6465],],
'1120':[[242,137],],
'1416':[[274,317],],
'1420':[[278,17],],
'1444':[[42,860],],
'2180':[[153,1281],],
'4170':[[306,815],],
'4327':[[335,2735],],
'4646':[[384,2578],],
},{'7':[[92,46],[130,5],[376,3],[171,470],[211,34],[254,109],[376,42],],
'117':[[278,0],],
'152':[[278,69],],
'313':[[278,16],],
'667':[[130,31],],
'1335':[[335,392],],
'1419':[[42,695],],
'1423':[[278,66],],
},{'3':[[54,1454],[162,216],],
'12':[[249,219],],
'26':[[204,30],],
'33':[[335,376],],
'43':[[181,722],],
'68':[[84,500],],
'77':[[335,3767],],
'321':[[321,114],],
'420':[[193,102],[352,102],],
'433':[[303,42],],
'1023':[[84,311],],
'1117':[[84,489],],
'1390':[[42,719],],
'2006':[[102,186],],
'2481':[[84,401],],
},{'2':[[384,8058],],
'1421':[[42,720],],
'3053':[[384,7163],],
'4629':[[384,5938],],
'5193':[[384,9608],],
},{'99':[[335,2564],],
'314':[[70,552],],
'886':[[48,2401],[335,2115],[42,727],],
'1180':[[335,2557],],
'1260':[[335,2094],[335,2798],],
'1419':[[48,1049],[153,1282],],
'1423':[[48,3074],[48,4579],[335,2558],[70,553],[48,3079],[48,4574],[335,2565],[48,2402],],
'1445':[[153,1111],[278,65],],
'1599':[[48,3073],],
'1762':[[48,3078],],
'1917':[[48,4578],],
'1959':[[48,4573],],
'4360':[[335,2737],],
},{'7':[[217,238],[217,252],[217,245],],
'16':[[358,180],[54,1097],[218,180],[116,121],[384,8835],[384,549],[344,170],[384,3248],[355,299],[181,475],],
'23':[[384,1986],],
'27':[[384,4805],],
'31':[[135,200],],
'41':[[384,167],],
'55':[[179,1048],],
'57':[[384,8489],],
'63':[[384,8463],],
'82':[[42,738],],
'152':[[384,6141],],
'175':[[365,168],],
'199':[[355,856],],
'203':[[217,436],[217,474],[384,4793],[284,205],[86,235],[384,8392],],
'217':[[217,190],[384,5950],],
'227':[[243,115],[174,120],],
'271':[[384,8628],[384,8618],[384,9327],],
'272':[[384,4816],[384,2930],[384,8864],[384,6154],[342,228],[384,8851],[384,139],[384,8191],[243,56],[384,3735],[61,65],[384,4985],[384,916],],
'275':[[384,5725],],
'285':[[384,5437],[355,927],[384,5616],],
'494':[[384,7076],],
'530':[[344,287],[384,7737],],
'567':[[42,763],],
'596':[[384,943],],
'634':[[384,8326],],
'839':[[384,8783],],
'926':[[384,5135],],
'960':[[384,8468],],
'1109':[[384,7182],[384,3560],],
'1211':[[384,4149],[384,8473],[384,9101],[384,4584],[384,8481],],
'1226':[[70,436],[197,286],],
'1231':[[100,199],[135,156],],
'1307':[[384,1387],[384,976],[384,5941],[384,147],[384,957],],
'1310':[[384,7188],],
'1370':[[217,356],[197,259],],
'1462':[[227,78],[384,790],[171,72],],
'1765':[[384,8606],],
'1819':[[384,8448],],
'2059':[[344,187],],
'2087':[[384,1976],[384,8502],[384,809],[384,2352],],
'3221':[[174,47],],
'3223':[[174,66],[384,3886],],
'3230':[[174,138],[355,317],[243,60],],
'3627':[[384,8922],[384,2878],[384,9120],[186,500],[384,7748],[384,2158],[384,2340],[384,761],[384,1964],[384,3862],],
'4188':[[384,1371],],
'4629':[[384,2562],[384,2821],[384,2815],[384,2828],],
'4844':[[384,2359],],
},{'23':[[48,58],[83,30],[344,42],[350,196],[42,743],],
'39':[[217,329],],
'2591':[[384,3464],],
'2626':[[274,65],],
},{'48':[[102,71],],
'241':[[102,74],],
'791':[[246,259],[384,2868],],
'1267':[[54,1128],],
'1335':[[355,243],[242,133],],
'1425':[[42,744],],
},{'15':[[42,746],],
},{'1120':[[331,495],[42,771],],
'1797':[[48,2502],],
'2090':[[257,81],],
},{'1120':[[42,776],],
},{'23':[[42,779],],
},{'12':[[182,27],[42,1305],[274,596],],
'39':[[217,495],],
'85':[[42,785],],
'1003':[[42,815],],
'2576':[[121,243],],
'3176':[[165,62],],
},{'16':[[246,220],],
'23':[[355,936],[335,740],[42,803],],
'63':[[48,1076],],
},{'23':[[239,22],[145,46],[49,461],[280,107],[371,100],[355,1329],[212,48],],
'90':[[384,96],],
'230':[[42,1317],],
'533':[[42,813],],
'1205':[[49,478],[49,512],],
'2079':[[312,60],],
'2317':[[65,173],[342,319],],
'2577':[[95,355],],
'3760':[[217,433],],
'4642':[[384,2729],],
'4685':[[384,831],],
'4880':[[384,2807],],
},{'167':[[384,5121],],
'533':[[42,826],],
'1467':[[384,2967],],
'2921':[[146,155],],
},{'433':[[42,832],],
},{'1435':[[42,833],],
},{'33':[[42,837],],
},{'12':[[125,221],],
'1123':[[42,840],],
},{'3':[[42,844],],
'715':[[48,2018],[48,1995],[48,195],],
'1466':[[335,689],],
'1749':[[48,2013],[48,1990],],
},{'26':[[42,846],],
},{'99':[[278,58],[42,849],],
'199':[[335,559],],
},{'43':[[42,852],[335,2414],[331,477],[341,226],[307,226],[176,195],[176,262],[197,462],[206,50],[246,919],[341,214],[344,46],[247,220],[307,214],],
'48':[[146,142],],
'52':[[246,1349],],
'67':[[80,128],],
'121':[[135,189],],
'145':[[363,639],],
'152':[[384,6874],],
'199':[[246,1353],[384,5055],],
'267':[[321,51],],
'277':[[363,632],],
'479':[[306,1408],],
'800':[[172,60],],
'2481':[[363,425],],
},{'12':[[42,855],],
},{'186':[[335,885],],
'314':[[335,3487],],
'542':[[335,3460],],
'886':[[278,62],[42,859],],
'1033':[[384,2692],],
'4293':[[335,891],[335,873],],
},{'63':[[278,64],],
'316':[[355,1314],],
'1419':[[42,861],],
'2180':[[153,1110],],
'4627':[[384,116],[384,757],[384,1747],[384,1874],[384,2208],[384,2221],[384,2233],],
},{'427':[[246,1381],],
'1335':[[42,863],],
'1358':[[42,961],],
'1388':[[42,1247],],
'1452':[[42,900],],
'1459':[[42,940],],
},{'12':[[384,1847],],
'26':[[176,94],[176,115],],
'220':[[304,195],],
'1260':[[42,867],],
'2977':[[160,667],],
},{'16':[[49,106],],
'23':[[57,283],[217,390],],
'39':[[42,905],[42,890],[68,70],[70,324],[162,146],[308,142],[217,404],[42,870],[340,109],],
'99':[[217,199],],
'224':[[384,5675],[214,103],],
'305':[[335,3474],],
'1003':[[162,291],],
},{'597':[[42,879],],
},{'12':[[42,885],[75,129],[266,154],],
'38':[[128,174],[322,176],],
'39':[[116,125],],
'63':[[84,189],],
'237':[[306,698],],
'248':[[340,117],[355,710],[308,150],],
},{'277':[[42,895],],
},{'17':[[214,284],],
'23':[[342,126],[214,263],[160,475],[303,153],[232,103],[246,1740],[164,569],[84,211],[84,205],],
'36':[[58,46],[54,242],],
'63':[[274,75],],
'196':[[274,387],[274,418],[54,488],[262,32],[179,943],[274,666],[274,722],[304,388],[219,32],[42,1090],[274,428],[384,4756],],
'205':[[42,899],],
'208':[[54,151],[277,896],],
'230':[[197,146],[70,265],],
'343':[[358,258],],
'348':[[341,31],[307,250],[307,31],[54,101],[341,250],[42,1061],[99,191],[274,92],[274,112],[384,2955],[274,172],[274,182],[99,116],[384,4064],[274,42],[274,450],],
'489':[[331,473],],
'567':[[186,268],],
'728':[[155,30],],
'734':[[125,237],],
'791':[[164,307],],
'792':[[249,185],],
'861':[[164,219],],
'1237':[[335,1687],[95,125],],
'1342':[[264,25],],
'2060':[[384,4743],[274,142],],
'2096':[[218,273],[54,122],[144,35],[140,29],[95,198],],
'2990':[[326,31],],
'4593':[[381,432],],
},{'15':[[309,27],[42,907],],
'3538':[[179,1529],[179,1579],[179,1474],[179,1327],],
'4377':[[384,6587],],
},{'149':[[118,196],[244,227],],
'370':[[82,337],[42,912],],
'940':[[191,208],],
'3095':[[161,24],],
'4835':[[384,2197],],
},{'7':[[217,224],[217,205],[217,195],[217,186],[217,214],],
'12':[[42,914],],
'23':[[52,69],[52,93],[118,200],[336,150],[244,231],[226,66],[46,66],[217,397],[384,2998],[217,363],[384,3208],[384,5966],[162,295],],
'63':[[266,269],[384,2568],],
'77':[[384,4453],],
'82':[[384,6375],],
'89':[[52,67],],
'275':[[384,8604],],
'365':[[384,1104],],
'449':[[384,8744],[384,5172],],
'481':[[384,8620],],
'679':[[384,6318],],
'780':[[384,7573],],
'922':[[217,220],],
'935':[[42,965],],
'1184':[[384,7205],],
'1305':[[384,7918],],
'1308':[[217,210],],
'1309':[[384,6106],[384,6093],],
'1381':[[42,971],[384,7172],[42,1028],[384,6310],[384,6481],],
'1424':[[217,191],],
'1463':[[179,1260],[179,151],[290,205],],
'2286':[[217,271],],
'2675':[[384,8789],],
'3758':[[217,201],],
'3769':[[274,145],],
'4405':[[384,6047],],
'4629':[[384,4579],[384,4789],],
'4903':[[384,6036],],
'5059':[[384,7119],],
},{'1455':[[42,915],],
'2631':[[384,8457],],
},{'15':[[384,1711],],
'186':[[42,919],],
'284':[[162,285],],
'449':[[384,1328],],
'552':[[384,952],],
'607':[[355,960],],
'1109':[[217,387],],
'1267':[[188,127],],
},{'39':[[384,5369],],
'73':[[235,286],],
'140':[[42,926],],
'241':[[42,981],],
'567':[[384,4667],],
'1003':[[384,6600],],
'1198':[[121,563],],
'3091':[[384,1855],],
},{'355':[[193,71],[352,71],],
'588':[[384,1935],],
'596':[[224,163],],
'696':[[242,119],],
'876':[[42,939],],
},{'89':[[42,945],],
},{'577':[[381,96],],
'1158':[[42,987],],
'3876':[[246,559],],
},{'15':[[162,260],[162,251],],
'17':[[274,185],],
'31':[[384,6713],],
'54':[[355,909],],
'63':[[277,943],[384,572],],
'81':[[266,199],],
'107':[[384,1531],],
'149':[[306,763],],
'203':[[274,236],[274,208],[274,250],],
'301':[[384,2932],],
'353':[[274,221],],
'357':[[251,258],],
'370':[[274,287],],
'373':[[274,402],[384,745],[274,411],],
'525':[[52,52],[306,320],],
'550':[[266,280],],
'696':[[384,5742],[246,165],],
'791':[[274,147],],
'915':[[384,5734],[174,255],[344,265],],
'921':[[384,1293],[384,293],[384,2083],[384,1323],[384,1253],[384,2749],[384,1006],[384,325],[384,2225],],
'935':[[384,9371],[384,8753],],
'953':[[42,994],],
'1123':[[174,243],],
'1304':[[384,2564],],
'1308':[[197,289],[70,439],],
'1310':[[384,7074],],
'1314':[[384,7199],],
'1424':[[217,357],[384,4986],[344,288],[384,944],],
'1467':[[384,6623],[251,162],],
'2026':[[384,789],],
'2388':[[384,2420],],
'2528':[[355,166],[384,9433],],
'2762':[[251,267],],
'3196':[[384,173],[227,56],[171,50],[384,2152],[384,1957],],
'3197':[[341,161],[307,161],],
'3200':[[171,71],[227,77],],
'4190':[[384,3246],[341,224],[307,224],],
'4405':[[384,3483],],
'4622':[[384,2649],[384,2733],[384,1041],[384,1670],[384,2862],[384,2924],[384,2355],[384,2348],[384,199],[384,1030],[384,2337],[384,590],[384,1918],[384,2832],[384,970],[384,1384],],
'4706':[[384,1135],[384,3532],],
'4719':[[384,1655],],
'4776':[[384,1583],],
'5003':[[384,4709],],
},{'23':[[42,997],],
'217':[[384,5336],],
'284':[[384,7175],[179,150],[384,4812],[290,204],[179,1259],],
'301':[[217,438],[217,240],],
'1310':[[384,7218],],
'3279':[[290,217],[290,289],[290,331],[179,319],[179,277],[179,235],[179,163],[290,373],],
'4684':[[384,6158],],
},{'16':[[329,50],],
'31':[[42,1010],],
'817':[[384,9005],],
'5205':[[384,9743],],
},{'16':[[242,140],[42,1034],],
'696':[[355,1270],],
'817':[[384,3566],],
'2071':[[52,244],],
},{'15':[[99,266],],
'23':[[206,84],],
'82':[[99,126],[49,29],[42,1051],],
'83':[[335,688],],
'162':[[206,37],[194,42],],
'903':[[206,67],],
'1315':[[62,82],[206,48],],
'2637':[[99,281],],
},{'12':[[363,532],],
'15':[[342,264],[157,76],],
'23':[[355,1081],],
'33':[[153,490],[234,359],],
'38':[[355,745],],
'39':[[234,366],],
'43':[[274,321],],
'47':[[384,1346],],
'63':[[344,116],],
'77':[[355,1071],[178,294],[384,2966],[99,134],[153,120],[384,5803],[384,6622],[153,327],[335,554],[335,547],[42,1057],[384,9916],],
'80':[[355,1482],[171,1246],[70,25],[70,796],[197,628],[197,18],[153,3],[185,49],],
'81':[[384,9269],],
'99':[[153,126],],
'152':[[142,163],],
'205':[[277,885],],
'373':[[251,161],],
'464':[[384,9391],],
'546':[[384,9298],],
'921':[[384,9278],],
'978':[[355,460],[355,1196],],
'981':[[335,614],],
'1002':[[54,434],],
'3806':[[234,396],],
'3812':[[235,262],],
},{'12':[[42,1184],[42,1102],],
'1143':[[384,998],],
'1474':[[42,1165],],
},{'12':[[384,393],],
'23':[[384,4882],[42,1104],],
'31':[[384,3609],[68,90],],
'277':[[313,209],[384,6838],[363,301],],
'1143':[[384,6859],],
'1680':[[363,323],],
},{'26':[[307,151],[341,151],],
'63':[[277,691],],
'891':[[307,208],[341,208],],
'940':[[42,1114],],
'1151':[[246,1796],],
},{'73':[[42,1118],],
'270':[[384,7813],],
'791':[[312,20],],
'1198':[[384,9064],[384,9127],],
'4257':[[384,6118],],
},{'15':[[277,313],],
'31':[[134,120],[302,122],[363,92],[62,63],[363,369],],
'63':[[234,420],],
'659':[[274,196],],
'997':[[42,1121],],
},{'19':[[42,1138],],
'36':[[321,383],],
'205':[[290,74],],
'343':[[384,1879],],
},{'2':[[42,1164],],
'23':[[384,2302],[162,315],[384,6744],],
'34':[[302,113],[315,205],[322,96],],
'63':[[179,1172],],
'75':[[48,3026],[48,2826],],
'81':[[384,8390],],
'175':[[48,3021],],
'186':[[48,2806],],
'477':[[48,2837],],
'745':[[48,2958],],
'791':[[384,7121],[226,68],[46,68],[336,152],[384,4791],[384,4581],[384,4455],],
'1117':[[179,945],],
'1125':[[384,281],],
'1309':[[384,6828],[384,7584],],
'1310':[[384,7256],],
'1422':[[384,5939],],
'1455':[[162,296],[384,5967],],
'1819':[[48,2812],],
'2527':[[384,3136],],
'4114':[[296,98],],
},{'19':[[42,1168],],
'1249':[[42,1223],],
},{'18':[[251,97],[46,48],[48,1794],[48,2677],[52,191],[84,343],[84,541],[128,224],[214,78],[214,333],[226,48],[384,2019],[384,9856],[261,48],[322,226],[335,1411],[384,959],[384,931],[384,126],[355,1199],],
'38':[[344,258],],
'39':[[246,252],],
'498':[[42,1174],],
'3088':[[355,1183],],
'3217':[[355,90],],
},{'3':[[162,301],],
'255':[[42,1177],],
'321':[[251,293],[384,1312],[384,237],],
'792':[[161,511],],
'3049':[[384,2223],],
'4618':[[384,69],],
},{'250':[[42,1189],],
},{'15':[[384,71],],
'19':[[235,321],[170,46],[42,1195],],
'33':[[384,2105],],
'77':[[384,1708],[384,1774],[384,643],[384,837],[384,2284],[384,2744],],
},{'1479':[[42,1196],],
'2738':[[363,584],[235,467],],
},{'23':[[277,240],[161,215],[277,725],],
'27':[[99,224],],
'203':[[355,1334],],
'343':[[42,1201],],
},{'343':[[42,1226],],
},{'12':[[355,1340],],
'248':[[42,1243],],
},{'16':[[384,4123],],
'23':[[246,482],[246,502],[246,507],[246,591],],
'903':[[384,7577],],
'958':[[48,1255],],
'1483':[[42,1244],],
'1719':[[384,7621],],
'1838':[[384,5654],],
},{'199':[[42,1254],],
'277':[[320,157],],
},{'54':[[42,1268],],
'117':[[42,1282],],
'275':[[384,4836],[384,4850],],
'593':[[42,1301],],
'674':[[384,4831],],
'1393':[[94,53],],
'4208':[[313,363],],
},{'16':[[395,49],],
'31':[[289,53],[315,53],[164,36],],
'533':[[42,1277],],
},{'19':[[125,181],],
'77':[[384,1969],[353,125],[42,1279],],
'154':[[159,48],],
},{'31':[[42,1285],],
},{'15':[[128,95],[134,112],],
'19':[[42,1294],],
'23':[[384,4717],[329,58],],
'59':[[384,6750],],
'5085':[[384,6734],],
},{'531':[[227,131],],
'1004':[[48,4475],],
'1490':[[42,1295],],
},{'31':[[181,416],[384,4598],],
'39':[[381,424],],
'199':[[42,1329],],
'206':[[214,386],],
},{'7':[[207,60],[369,171],[359,3],[171,767],[152,5],[359,149],[354,56],],
'23':[[207,70],[122,102],],
'55':[[335,903],],
'62':[[153,1164],],
'79':[[153,1327],],
'117':[[122,0],],
'122':[[198,15],[207,15],[44,15],[368,15],[260,15],[287,15],[305,15],[319,13],[73,13],[372,15],],
'128':[[122,53],],
'136':[[153,960],],
'213':[[122,15],],
'232':[[152,230],],
'817':[[54,541],],
'1016':[[335,653],],
'1444':[[335,886],],
},{'134':[[44,42],[260,33],[207,30],[287,36],],
'228':[[260,18],[287,18],[207,18],[44,18],],
},{'3':[[44,51],],
'210':[[207,20],[260,20],[44,20],],
'776':[[260,41],],
'1014':[[207,37],],
},{'124':[[287,22],[44,22],],
'776':[[287,52],],
'1006':[[44,67],],
},{'154':[[44,76],],
'182':[[44,26],],
},{'31':[[164,153],],
'63':[[44,37],],
'248':[[303,119],[355,398],],
'432':[[44,110],],
'462':[[181,428],],
'869':[[231,112],],
'918':[[89,295],],
'1796':[[48,2658],],
},{'67':[[321,348],],
'145':[[44,125],],
'149':[[258,44],],
'199':[[52,182],],
'285':[[153,894],],
'1318':[[355,868],],
},{'12':[[57,302],],
'237':[[44,144],],
'425':[[197,598],],
'730':[[177,40],],
'2361':[[70,756],],
},{'7':[[369,157],[354,42],[163,3],[163,78],[171,753],],
'117':[[45,0],],
'232':[[160,707],],
'313':[[45,14],],
},{'7':[[122,20],],
'144':[[160,348],[160,129],],
'177':[[122,124],],
'183':[[73,60],],
'229':[[122,63],],
'288':[[359,136],],
'1004':[[45,33],],
'1554':[[368,77],],
},{'3':[[46,3],[46,29],[171,181],[208,93],[214,212],[226,9],[226,83],[227,308],[358,20],[358,400],[384,4285],[384,8496],[384,4273],],
'13':[[384,3763],[384,1585],],
'15':[[384,1515],],
'63':[[384,8676],],
'567':[[384,5511],[384,2003],],
'1004':[[384,8535],],
'1503':[[384,1516],],
'1505':[[384,7195],],
'2675':[[384,7867],[384,7619],[384,5709],[384,4253],],
},{'3':[[46,9],[46,83],[171,176],[208,88],[227,303],[358,3],[390,20],[384,8180],[358,262],[358,277],[384,6999],[390,184],[384,2154],],
'13':[[384,2536],[384,9767],[384,2530],],
'15':[[358,302],[358,30],],
'63':[[384,4182],],
'77':[[384,4395],],
'567':[[384,2462],[358,45],],
'792':[[384,1636],[384,5911],],
'2675':[[384,9459],[384,9527],[384,9720],[384,9737],[384,7607],[384,9726],],
'3127':[[384,1896],],
'3196':[[384,2141],],
'3833':[[384,2011],],
'3877':[[384,2024],],
'4620':[[384,1402],],
'4629':[[384,5301],[384,5130],],
'4923':[[384,3447],],
},{'3':[[46,19],[46,91],[171,186],[208,98],[336,173],[226,3],[226,29],[227,313],[336,9],],
'13':[[384,4921],[384,5137],],
'63':[[384,2014],],
'152':[[214,214],],
'275':[[384,8674],],
'2675':[[384,7524],],
'3877':[[384,7406],[384,7194],],
},{'27':[[70,599],[197,394],[73,82],],
'82':[[121,498],],
'149':[[226,42],[46,42],[336,37],],
'199':[[277,228],[72,81],[161,432],],
'817':[[384,7092],[384,8669],],
'940':[[95,213],],
'3261':[[178,214],],
},{'16':[[197,309],[70,459],],
'19':[[49,324],[49,300],[218,226],],
'23':[[46,44],[336,39],[226,44],],
'158':[[181,793],],
'166':[[214,60],],
'197':[[181,519],],
'433':[[227,120],],
'546':[[355,31],[277,393],],
'791':[[211,20],],
'913':[[235,201],],
'1532':[[54,1489],],
},{'3':[[226,61],[46,61],],
'63':[[214,30],],
'1004':[[49,133],],
},{'7':[[217,50],],
'12':[[274,200],],
'63':[[344,212],],
'538':[[217,184],],
'791':[[277,467],],
'921':[[46,70],[336,154],[226,70],],
'1510':[[179,1097],],
'2126':[[277,425],],
},{'7':[[217,44],],
'26':[[336,167],],
'33':[[217,347],],
'140':[[197,265],[217,177],[70,415],],
'389':[[94,25],],
'776':[[46,75],],
'791':[[54,379],[70,484],[197,334],],
'1281':[[335,512],],
'1282':[[179,1186],],
'1956':[[179,1096],],
'2126':[[335,580],],
'2288':[[226,75],],
'2348':[[277,292],],
},{'7':[[171,1026],[294,5],[147,3],[147,33],[369,430],[248,57],],
'117':[[47,0],],
'1037':[[294,52],],
'1513':[[47,16],],
},{'7':[[47,3],[369,428],[47,36],[171,1024],[248,55],[275,5],],
'15':[[385,21],],
'117':[[294,0],],
'173':[[294,16],],
'375':[[47,34],],
'1037':[[275,39],],
},{'7':[[248,69],[171,1038],[369,442],],
'15':[[360,36],],
'23':[[294,22],[47,20],],
'117':[[385,0],],
'122':[[47,15],],
'128':[[385,40],],
'329':[[385,13],],
'1037':[[333,31],],
'1512':[[294,17],],
},{'19':[[48,43],],
'23':[[131,139],[209,205],[247,209],[270,211],[332,148],[335,2431],[77,124],],
},{'19':[[317,82],],
'343':[[48,50],],
},{'19':[[48,53],],
'681':[[242,43],],
},{'89':[[48,69],],
},{'12':[[48,1470],],
'27':[[48,110],],
'39':[[220,114],[176,59],],
},{'130':[[48,4407],[48,4439],[48,4142],],
'147':[[48,244],],
'313':[[48,135],[306,121],],
'637':[[48,120],],
'803':[[48,4368],[48,1787],[48,4424],[306,123],[48,4754],[48,4326],[48,4115],[306,1402],],
'1521':[[48,138],],
},{'468':[[306,109],[48,123],],
},{'23':[[48,1548],],
'147':[[51,14],[48,137],],
'1004':[[48,141],],
},{'1521':[[48,142],],
'1524':[[48,242],],
},{'39':[[70,105],[197,88],],
'468':[[153,156],[179,612],[54,256],[335,67],[48,145],],
},{'244':[[48,486],],
'815':[[48,241],[153,171],[48,148],],
'1326':[[70,150],[197,94],[179,617],],
'1538':[[306,134],],
'1632':[[48,1771],],
},{'313':[[306,137],[48,151],[179,620],[70,153],[153,174],[197,97],],
'1524':[[70,151],[197,95],[179,618],[153,172],[306,135],[48,149],],
},{'23':[[48,157],],
},{'25':[[48,159],],
'41':[[384,784],],
'250':[[48,350],],
'817':[[384,1885],],
},{'43':[[48,161],],
'2457':[[84,38],],
},{'2':[[336,133],],
'535':[[48,173],],
},{'1529':[[48,174],],
},{'147':[[48,190],[48,1897],],
'313':[[48,180],[48,176],],
'815':[[48,2104],],
},{'146':[[48,2626],],
'215':[[48,2504],[319,63],[48,4436],[48,4402],],
'217':[[48,178],[54,333],[335,205],],
'237':[[48,2375],[48,1151],[48,2363],],
'241':[[306,856],],
'551':[[306,897],],
'589':[[48,1655],],
'613':[[306,759],],
'1029':[[48,2091],],
'1125':[[179,1409],],
'1220':[[207,80],[153,783],],
'1260':[[51,19],],
'1265':[[48,1585],],
'1319':[[179,1393],],
'1597':[[48,4661],],
'1621':[[48,726],],
'1684':[[48,1318],],
'1733':[[48,3538],],
'1740':[[48,2000],],
'1807':[[48,2633],],
'1917':[[48,4366],],
'1919':[[48,4422],[48,4113],[306,1436],[48,4332],[48,4139],[306,1460],],
'1942':[[48,4765],],
'2244':[[54,1488],],
'2345':[[197,191],[70,354],],
'2915':[[174,125],[243,118],],
'2958':[[153,269],],
'3267':[[179,1115],],
'4345':[[335,3105],],
},{'313':[[48,184],],
},{'313':[[48,187],],
},{'205':[[215,54],[183,54],],
'432':[[48,201],],
'1540':[[215,35],[183,35],],
},{'671':[[48,205],],
},{'468':[[54,259],[153,159],[179,615],[306,130],[335,70],[48,208],],
},{'15':[[355,51],],
'49':[[49,25],],
'79':[[48,211],[306,133],],
'162':[[335,64],[176,56],],
'203':[[209,201],[247,205],[270,207],[77,120],[131,135],[332,144],],
'433':[[227,134],],
'791':[[377,18],[186,289],],
'4936':[[384,3588],],
},{'51':[[48,215],[335,79],[153,179],[197,102],[70,158],[306,142],[54,268],[179,625],],
'53':[[306,154],[48,227],[179,637],[70,170],[335,75],[197,114],[54,264],[153,191],],
'724':[[54,272],[153,183],[179,629],[48,219],[306,146],[70,162],[197,106],[335,83],],
'1540':[[153,187],[70,166],[306,150],[179,633],[48,223],[197,110],],
'1563':[[48,400],],
'1565':[[48,406],],
},{'7':[[311,67],[387,67],],
'23':[[387,53],[387,61],[387,45],[311,61],[311,53],[311,45],],
'34':[[384,8230],],
'36':[[215,34],[183,34],],
'68':[[384,4256],[384,6019],],
'321':[[311,35],[387,35],],
'423':[[70,743],[197,585],],
'671':[[153,186],[306,149],[70,165],[179,632],[197,109],[48,222],],
'2052':[[197,582],[70,740],],
'2355':[[197,518],[70,686],],
'3491':[[277,534],],
'4620':[[384,2074],],
},{'803':[[54,277],[70,172],[153,196],[179,639],[197,116],[306,156],[335,88],[48,229],],
},{'803':[[153,162],[48,235],],
},{'1542':[[153,163],[48,236],],
},{'837':[[48,239],],
},{'19':[[48,248],],
},{'12':[[384,2901],],
'248':[[48,255],],
},{'2':[[232,96],],
'12':[[48,706],[48,679],[48,279],[178,109],[178,80],[384,9162],],
'147':[[48,2353],[48,2365],],
'248':[[384,6255],],
'333':[[48,2349],],
'2130':[[54,372],],
'2415':[[235,290],],
},{'140':[[48,290],],
'147':[[48,1551],],
'313':[[48,318],],
},{'147':[[48,1610],],
'152':[[48,295],],
'313':[[48,321],],
},{'147':[[48,1553],[48,1612],],
'313':[[48,331],],
'593':[[48,302],],
},{'19':[[277,122],[246,1019],[48,304],],
'1405':[[121,385],],
},{'31':[[246,371],],
'203':[[48,310],],
'888':[[384,3440],],
},{'7':[[142,112],],
'19':[[75,114],[335,3519],[75,51],[250,114],[363,590],[170,81],[367,117],[235,473],[235,301],[213,387],[365,180],],
'33':[[186,466],[274,230],],
'140':[[274,203],],
'154':[[355,630],],
'203':[[99,171],],
'346':[[384,327],],
'420':[[266,367],[197,495],],
'554':[[48,324],],
'926':[[384,3827],],
'1038':[[181,123],],
'1381':[[384,1047],],
'2058':[[157,68],],
'3178':[[367,135],[250,132],],
'3575':[[384,1430],],
'3782':[[224,223],],
},{'19':[[243,263],],
'63':[[48,328],],
'73':[[368,76],],
'164':[[181,622],],
'4639':[[384,3686],],
},{'12':[[48,337],],
'73':[[84,419],],
},{'147':[[48,2533],[48,4647],],
'313':[[48,344],],
'815':[[48,4796],],
'1802':[[48,2571],],
},{'26':[[257,54],[257,68],],
'215':[[48,346],],
},{'147':[[48,2487],],
'313':[[48,354],],
},{'16':[[363,570],],
'203':[[48,363],],
},{'31':[[246,1541],[121,123],[121,140],],
'63':[[48,1282],],
'203':[[48,373],],
'491':[[48,1241],],
},{'147':[[48,712],],
'313':[[48,392],],
},{'19':[[48,396],],
'215':[[48,3223],],
'241':[[48,2201],],
'425':[[48,3261],],
'588':[[48,2802],],
'1474':[[48,2807],],
'1756':[[48,2844],],
'1767':[[48,2207],],
'1770':[[48,2217],[48,2233],],
'1771':[[48,2223],],
'1773':[[48,2239],],
'1811':[[48,2864],],
'1822':[[48,3268],[48,2871],],
},{'671':[[48,399],],
},{'803':[[48,402],],
},{'671':[[48,405],],
'860':[[384,3087],],
},{'671':[[48,410],],
},{'15':[[48,412],],
'1741':[[48,1920],[48,1901],],
},{'275':[[48,414],],
},{'313':[[48,417],],
},{'313':[[48,422],],
},{'313':[[48,428],],
},{'1571':[[48,429],],
'1573':[[48,431],],
},{'216':[[335,909],[335,658],],
'217':[[306,1466],],
'237':[[48,3444],[48,2984],],
'246':[[335,918],[335,2267],[335,3157],],
'743':[[48,3161],],
'747':[[48,4043],[306,1351],],
'789':[[335,2171],[335,3023],],
'791':[[48,4398],],
'898':[[306,704],],
'1279':[[48,4098],[306,1421],],
'1444':[[335,892],],
'1532':[[306,1461],],
'1572':[[48,430],],
'1600':[[48,3153],],
'1762':[[48,2693],],
'1834':[[48,3449],[48,2987],],
'1847':[[48,3446],],
'1869':[[48,4025],],
'1877':[[306,1334],],
'1917':[[48,4106],[306,1429],[306,1474],],
'1918':[[306,1338],[48,4029],],
'1920':[[306,1342],[48,4034],],
'1930':[[306,1446],[306,1457],[48,4125],[335,1672],[335,3326],[335,1821],[335,1624],[335,363],[335,1763],[335,1233],[48,4136],[335,1485],],
'1935':[[48,4160],[48,4724],[306,1502],],
'1937':[[48,4716],[48,4195],[306,1535],],
'1956':[[48,4432],],
'1968':[[48,4836],],
'2128':[[335,3748],],
'2132':[[335,3329],[335,366],[335,1309],[335,1379],[335,1530],],
'3495':[[179,1423],],
'3498':[[179,802],],
'3702':[[335,3752],],
'4162':[[306,695],],
'4314':[[335,1385],],
},{'468':[[48,433],],
},{'19':[[181,716],],
'23':[[95,184],],
'162':[[335,449],],
'1401':[[48,436],],
'2022':[[54,468],],
'2082':[[54,463],],
'2604':[[220,22],[98,22],[268,22],[295,22],[329,22],[225,22],[138,22],[374,22],],
},{'468':[[70,178],[197,122],[306,162],[48,448],],
'1589':[[48,509],],
'1807':[[48,2605],],
'1906':[[306,1560],],
'1969':[[48,4832],],
'2346':[[70,367],[197,204],],
'4156':[[306,483],],
},{'123':[[48,452],],
'1815':[[48,4535],[48,2689],],
},{'94':[[48,455],],
'1580':[[48,463],],
},{'48':[[48,461],],
'147':[[48,466],],
'241':[[48,475],],
'1584':[[48,477],],
},{'1579':[[48,462],],
},{'1578':[[48,464],],
},{'88':[[355,1242],],
'146':[[54,1183],],
'147':[[48,479],],
'149':[[341,136],[307,136],],
'182':[[318,18],[198,21],],
'196':[[326,46],],
'220':[[335,877],],
'236':[[48,2098],[48,1956],],
'567':[[384,3801],],
'681':[[384,333],],
'809':[[48,470],],
'921':[[62,41],[62,127],],
'1255':[[48,1998],[48,2021],],
'1685':[[48,2102],],
'1749':[[48,1959],],
'1839':[[198,47],],
'2096':[[384,2718],[384,4209],],
'2294':[[62,37],],
'2300':[[62,116],],
},{'1582':[[48,471],],
},{'1579':[[48,476],],
},{'803':[[48,1420],],
'1524':[[48,1772],[48,487],],
},{'313':[[48,489],],
'1798':[[48,2554],],
'1940':[[48,4625],],
},{'1586':[[48,490],],
},{'29':[[48,1482],],
'93':[[48,4557],[48,3217],[48,1535],[48,552],[48,556],[48,567],[48,571],[48,889],[48,3063],[48,3059],[48,2752],[48,1326],[48,1330],[48,1531],[48,4561],[48,2171],],
'215':[[48,544],],
'241':[[48,1464],[48,1508],[48,1400],],
'277':[[48,1377],[48,1438],],
'629':[[48,1396],],
'1329':[[48,492],],
'1590':[[48,525],[48,498],],
'1639':[[48,892],],
'1640':[[48,894],],
'1643':[[48,927],],
},{'92':[[306,839],],
'93':[[306,540],[306,524],[306,521],[48,899],[48,919],[48,923],[196,23],[196,18],[48,1005],[48,2192],[48,2260],[48,2264],[48,2761],[48,2780],[48,2784],[48,2933],[156,24],[156,19],[48,3281],[48,3300],[48,3304],[48,3370],[306,881],[306,884],[54,897],[54,891],[54,857],[306,1133],[48,4079],[306,1136],[306,1154],[306,1387],[306,544],],
'99':[[335,2005],],
'136':[[306,1093],],
'139':[[335,1907],],
'165':[[335,2611],],
'174':[[48,529],[48,935],[306,854],[48,508],],
'215':[[335,2050],[335,1239],[335,824],[335,2765],[54,948],],
'237':[[306,582],],
'241':[[306,863],],
'277':[[335,3111],[48,3411],[48,2951],],
'438':[[54,1322],],
'590':[[306,278],[48,858],],
'738':[[48,2947],[48,3407],],
'912':[[384,3078],],
'935':[[335,2593],],
'1101':[[335,2631],],
'1423':[[335,2738],],
'1588':[[48,493],],
'1640':[[48,931],],
'1652':[[306,1043],[48,3798],[48,3857],],
'1667':[[48,4349],],
'1828':[[306,1095],[54,893],[306,1117],],
'1884':[[306,1045],[48,3800],],
'1895':[[48,3859],],
'1928':[[48,4090],[306,1398],],
'1946':[[48,4341],],
'1949':[[48,4449],[335,1331],[48,4343],[335,826],],
'1988':[[306,865],],
'2126':[[335,1901],[335,2581],],
'2128':[[335,1909],[335,2054],],
'2132':[[335,1899],[335,2579],],
'2159':[[335,2633],],
'2160':[[335,1329],],
'2175':[[54,848],],
'2176':[[54,1335],],
'2177':[[54,852],],
'2179':[[54,1315],],
'2191':[[54,954],],
'2206':[[54,956],],
'2302':[[306,888],],
'4158':[[306,585],],
'4170':[[306,859],],
'4173':[[306,841],],
'4174':[[306,861],],
'4295':[[335,848],],
'4311':[[335,1241],],
'4326':[[335,2007],],
'4332':[[335,2052],],
'4333':[[335,2056],],
'4358':[[335,2595],],
'4359':[[335,2769],[335,2613],],
'4361':[[335,2767],],
'4362':[[335,2771],],
},{'89':[[384,2793],],
'215':[[48,524],],
'241':[[48,497],],
},{'48':[[48,4527],],
'75':[[179,1574],[179,1524],[179,1469],[179,1322],],
'95':[[54,336],],
'99':[[48,1766],[335,215],],
'137':[[335,1207],[335,2670],[335,1720],[335,408],],
'139':[[48,2594],[48,4749],],
'144':[[48,1965],],
'162':[[54,617],[54,595],],
'165':[[153,1248],],
'199':[[153,467],],
'215':[[48,3525],[54,628],[335,271],[179,1617],[48,1978],[179,1389],[179,1403],[48,1238],],
'217':[[179,992],],
'285':[[153,693],],
'372':[[54,522],],
'651':[[48,4276],[48,4588],],
'696':[[153,787],],
'700':[[48,502],],
'736':[[48,3081],],
'791':[[335,343],[54,446],[335,1927],[179,866],],
'815':[[48,1823],[48,1731],],
'926':[[54,565],],
'1029':[[179,1227],[179,1218],[179,1262],[179,1208],[179,1250],[48,1286],],
'1101':[[54,1173],],
'1125':[[179,1445],],
'1180':[[48,1781],],
'1211':[[179,961],[179,1025],[48,1497],[48,1453],],
'1319':[[179,1500],],
'1423':[[335,2116],[335,2566],],
'1532':[[179,1394],[48,2627],[179,1410],[48,2001],[48,2634],],
'1597':[[48,3172],],
'1602':[[48,1345],],
'1619':[[48,1058],],
'1624':[[48,1261],],
'1625':[[48,1275],],
'1649':[[48,1193],],
'1655':[[48,1210],],
'1661':[[48,1251],],
'1708':[[335,152],],
'1731':[[48,1866],],
'1739':[[48,2058],],
'1751':[[48,2089],],
'1776':[[48,2459],[48,2474],],
'1798':[[48,2680],],
'1806':[[48,2616],],
'1815':[[48,4541],],
'1920':[[48,4050],],
'1948':[[48,4451],],
'2127':[[335,597],],
'2132':[[335,1775],[335,3239],[335,1753],],
'2140':[[54,548],],
'2384':[[153,1055],],
'2631':[[179,848],],
'2960':[[153,283],],
'2964':[[335,782],],
'3502':[[179,1553],[179,1448],[179,1236],[179,1197],[179,1503],[179,827],],
'3504':[[179,837],],
'3508':[[179,1544],[179,1550],[179,862],[179,1600],[179,1594],[179,1496],],
'3545':[[179,1439],],
'3702':[[335,3545],[335,2864],],
'4283':[[335,261],],
'4306':[[335,1704],],
'4309':[[335,1136],[335,1786],],
'4317':[[335,1585],[335,1440],],
'4327':[[335,3040],[335,2193],],
'4329':[[335,2811],],
'4353':[[335,2845],],
'4383':[[335,3712],],
},{'99':[[48,1359],],
'139':[[153,402],[153,713],],
'174':[[48,1488],[48,1444],[48,1383],[48,515],],
'215':[[153,441],],
'217':[[306,1292],[48,3960],],
'491':[[48,4883],],
'950':[[335,2487],],
'1005':[[153,1171],[153,967],[153,1392],[153,1334],],
'1715':[[306,1304],[48,3973],],
'1733':[[48,1841],],
'1770':[[48,4843],],
'1847':[[48,4865],[48,4788],],
'1856':[[48,4171],],
'1870':[[48,3921],],
'2131':[[54,359],[335,241],[179,1016],],
'2180':[[153,454],],
'4277':[[335,296],],
'4278':[[335,476],],
'4279':[[335,698],],
'4280':[[335,1084],],
'4281':[[335,1875],],
'4282':[[335,3195],],
'4283':[[335,3492],],
},{'61':[[181,879],],
'73':[[384,1137],],
'147':[[367,98],],
'151':[[153,220],[48,1725],[335,194],[54,322],[179,957],],
'162':[[379,184],],
'167':[[384,7282],],
'199':[[160,493],],
'231':[[153,443],[48,4543],],
'250':[[384,1729],],
'298':[[48,4868],],
'299':[[384,9824],],
'427':[[379,172],],
'649':[[384,5918],],
'751':[[306,1513],[48,4173],],
'838':[[306,459],],
'1229':[[384,7062],],
'1244':[[84,129],],
'1417':[[48,4791],],
'1592':[[48,1445],[54,360],[335,242],[48,516],[48,1489],[48,1384],[179,1017],],
'2531':[[153,969],],
'2984':[[153,715],],
'2994':[[153,1336],],
'3000':[[153,1394],[153,1173],],
'3169':[[379,165],],
'3741':[[384,9050],],
},{'52':[[48,531],],
'236':[[48,527],],
'241':[[48,533],],
},{'215':[[335,127],],
'815':[[48,547],],
},{'173':[[48,550],[48,3057],],
'241':[[48,3040],],
'887':[[48,1560],],
'994':[[48,1575],],
'1256':[[48,1570],],
'1261':[[48,1604],[48,1580],],
'1697':[[48,1565],],
},{'147':[[48,1486],],
'215':[[48,1518],],
'333':[[48,1506],],
'1004':[[48,1409],[48,4559],[48,1537],[48,1332],[48,569],[48,554],[48,3061],[48,2173],],
'1588':[[48,1483],[48,1401],],
'1596':[[48,1561],[48,1566],[48,1571],[48,1576],[48,1581],[48,1605],],
'1598':[[48,1415],],
'1601':[[48,1622],[48,1628],[48,1634],[48,1640],[48,1681],[48,1616],],
'1638':[[48,1513],],
'1642':[[48,2194],],
'1643':[[48,2199],],
'1685':[[48,4660],],
'1695':[[48,1510],],
'1762':[[48,3171],],
'1917':[[48,4734],],
},{'26':[[48,2734],[48,3199],],
'147':[[48,1442],],
'215':[[48,1480],],
'276':[[48,1181],],
'333':[[48,1462],],
'479':[[48,4895],],
'1004':[[48,1328],[48,3219],[48,3065],[48,2754],[48,4563],[48,929],[48,573],[48,558],[48,1407],[48,1533],],
'1588':[[48,1397],[48,1439],],
'1597':[[48,1572],[48,1567],[48,1582],[48,1606],[48,1617],[48,1623],[48,1629],[48,1635],[48,1641],[48,1682],[48,1577],[48,1562],],
'1638':[[48,1475],],
'1642':[[48,3283],[48,2763],],
'1643':[[48,3287],[48,2767],],
'1647':[[48,1184],[48,933],],
'1686':[[48,1414],],
'1692':[[48,1466],],
'1756':[[48,3182],],
},{'333':[[48,575],[48,3067],[48,560],],
'958':[[48,3177],],
'1762':[[48,3072],],
},{'139':[[48,3168],],
'333':[[48,1590],[48,1596],[48,1602],[48,577],[48,562],[48,1660],[48,1666],[48,1672],[48,1678],[48,3069],[48,2165],],
'742':[[48,3152],[48,3098],],
'1599':[[48,3178],],
'1698':[[48,1684],[48,1608],],
'1755':[[48,2699],],
'1762':[[48,2644],],
},{'173':[[48,565],[48,4555],],
'215':[[48,1615],],
'241':[[48,3548],],
'1261':[[48,1680],],
'1602':[[48,1639],[48,1627],[48,1633],[48,1621],],
},{'314':[[48,1777],],
'333':[[48,1344],[48,1334],[48,579],[48,1431],[48,4569],[48,1539],[48,4236],[48,1746],],
'994':[[48,1632],],
'1029':[[48,1785],],
'1256':[[48,1626],],
'1261':[[48,1638],],
'1265':[[48,1644],],
'1591':[[48,1782],],
'1597':[[48,1416],],
'1600':[[48,1685],],
'1632':[[48,1814],],
'1695':[[48,1523],],
'1697':[[48,1620],],
'1713':[[48,1735],],
'1723':[[48,1803],],
'1856':[[48,4499],],
'1941':[[48,4272],],
'1942':[[48,4781],],
},{'14':[[384,9752],],
'20':[[384,3945],],
'48':[[54,283],[106,51],[335,94],[249,238],[181,1021],[48,581],],
'196':[[384,353],[384,378],],
'567':[[103,111],[150,111],],
'723':[[384,5467],],
'792':[[384,3959],],
'2790':[[125,12],],
},{'629':[[48,612],[48,1363],[48,605],],
},{'23':[[48,608],],
'346':[[306,409],],
'2512':[[277,153],],
'3653':[[384,5293],],
},{'75':[[311,49],[382,59],[387,49],[71,59],],
'333':[[387,22],[71,25],[311,22],[382,25],],
'1004':[[350,169],],
'1226':[[266,303],],
'1238':[[382,56],[71,56],],
'1540':[[387,46],[311,46],],
'1605':[[277,154],[384,5294],[48,609],[306,410],],
},{'31':[[48,615],],
'5178':[[384,9228],],
},{'39':[[384,7478],[313,391],[170,220],[313,324],],
'77':[[337,96],],
'147':[[313,379],[384,1286],],
'199':[[72,40],[191,43],[396,43],],
'288':[[179,1164],],
'518':[[200,251],[363,459],[363,477],[306,785],[266,205],[251,136],],
'596':[[335,3073],[48,620],[335,2226],],
'605':[[170,257],],
'915':[[384,9512],],
'1202':[[186,187],[197,346],[235,387],[48,2465],[266,228],[209,266],[54,402],[70,494],[235,399],],
'1364':[[335,2712],[335,1980],],
'1374':[[102,63],],
'2262':[[355,1221],],
},{'94':[[306,287],[48,629],],
'1629':[[306,402],[48,1741],],
},{'95':[[197,187],[70,350],],
'306':[[179,96],[290,149],],
'1089':[[48,1312],],
'1609':[[306,288],[48,630],],
},{'333':[[48,657],[48,643],],
'1632':[[48,1744],],
},{'12':[[250,106],[48,800],[306,220],],
'43':[[121,447],],
'99':[[48,659],],
'314':[[48,645],],
},{'518':[[48,653],],
'2772':[[200,201],],
},{'59':[[48,664],],
},{'12':[[303,148],[384,4859],],
'67':[[48,666],],
'248':[[277,501],],
'1123':[[384,7563],],
'2080':[[371,91],[280,98],],
},{'1615':[[48,667],],
},{'12':[[48,676],],
},{'19':[[246,1186],[48,681],],
},{'333':[[48,698],[48,685],],
'671':[[48,1053],],
'1029':[[48,1064],],
'1662':[[48,1057],],
},{'186':[[48,1179],],
'333':[[48,703],[48,690],],
},{'671':[[48,725],[48,694],],
},{'1619':[[48,699],],
},{'1620':[[48,704],],
},{'333':[[48,730],[48,716],],
'671':[[48,1097],],
'1663':[[48,1260],],
},{'186':[[48,1100],[48,1274],],
'333':[[48,738],[48,721],],
'1665':[[48,1270],],
},{'12':[[246,582],],
'30':[[246,996],],
'164':[[381,607],],
'305':[[246,962],],
'891':[[48,732],],
'1628':[[48,740],],
},{'3':[[384,7856],[384,3438],[246,1652],],
'15':[[384,7415],[384,1033],],
'19':[[384,5806],],
'502':[[246,1558],],
'869':[[246,1604],],
'1301':[[246,1536],],
'1626':[[48,733],],
'1993':[[246,1611],],
'2675':[[384,315],],
},{'1625':[[48,739],],
},{'94':[[48,1340],[306,401],[48,1740],],
'99':[[306,416],[48,1755],],
'815':[[48,744],],
'1029':[[48,1353],[306,477],[48,1389],],
'1326':[[306,164],],
'1576':[[306,484],],
'1639':[[48,1379],],
'1687':[[48,1812],],
},{'37':[[306,175],[121,71],[48,755],],
'1991':[[121,183],],
'2746':[[121,40],],
},{'19':[[95,341],[355,451],[321,414],],
'59':[[48,770],[306,190],],
'82':[[246,1772],],
'2384':[[313,462],],
'2449':[[181,768],[181,811],],
'3201':[[384,2200],],
},{'147':[[48,1356],],
'333':[[48,1743],[48,1342],[48,897],],
'420':[[306,194],[48,774],],
'1029':[[48,1770],],
'1180':[[48,1762],],
'1591':[[48,1767],],
'1597':[[48,1410],],
'1629':[[48,1813],[48,1354],],
'1637':[[48,1125],],
},{'16':[[306,312],],
'31':[[306,197],[48,777],],
'1591':[[48,1211],],
},{'23':[[306,205],[48,785],],
},{'3':[[277,605],],
'15':[[306,229],[48,809],],
'203':[[83,44],],
'921':[[277,608],],
},{'31':[[306,235],[48,815],],
'203':[[125,99],],
},{'124':[[48,4968],[48,882],],
'139':[[48,1124],],
'267':[[48,2416],],
'1547':[[48,2350],],
},{'173':[[48,887],],
'241':[[48,1512],[48,1404],],
'901':[[48,1474],],
},{'147':[[48,1381],],
'1004':[[48,891],],
'1588':[[48,1378],],
'1597':[[48,1402],],
'1598':[[48,1398],],
'1632':[[48,1411],],
'1638':[[48,1405],],
'1642':[[48,901],],
'1643':[[48,906],],
},{'1588':[[48,893],],
'1598':[[48,930],],
},{'147':[[48,1187],],
'1588':[[48,895],],
'1641':[[48,938],[48,1188],],
'1648':[[48,1191],[48,937],],
},{'1589':[[48,900],[48,3282],[48,2193],[48,2762],[306,522],],
'1645':[[48,921],[48,3302],[48,2782],[48,2262],[306,542],],
},{'236':[[48,905],[48,3286],[48,2198],[48,2766],[306,527],],
'1645':[[48,926],[48,3307],[48,2787],[48,2267],[306,547],],
},{'551':[[48,2255],[48,2775],[48,3295],[306,535],[48,914],],
},{'75':[[306,661],],
'147':[[48,1110],[306,636],[48,2924],[48,2330],[48,3361],],
'199':[[48,1067],[48,1103],],
'215':[[48,2993],[306,710],[48,3455],],
'237':[[48,1169],[48,1144],[48,2384],],
'1128':[[48,2292],[48,3323],[48,1009],[306,598],[48,2888],],
'1589':[[48,2781],[306,541],[48,2261],[48,920],[48,3301],],
'1645':[[48,2792],[48,2311],[48,2304],[48,1021],[306,552],[306,619],[48,3344],[48,3335],[48,2272],[48,1028],[48,3312],[48,945],[306,610],[48,2907],[48,2900],],
'1646':[[48,2786],[48,925],[306,546],[48,2266],[48,3306],],
'1647':[[48,1142],],
'1648':[[48,1167],],
'1650':[[48,3311],[48,2791],[306,609],[48,2271],[48,3334],[306,618],[48,3343],[48,2303],[48,1027],[48,944],[306,551],[48,2899],[48,1020],[48,2906],[48,2310],],
'1652':[[48,2387],],
'1666':[[48,1093],],
'1782':[[48,2357],[48,2369],[48,2378],],
'1826':[[48,2935],[48,3372],],
'1835':[[306,706],[48,3451],[48,2989],],
},{'186':[[306,639],[48,3364],[48,1113],[48,2333],[48,2927],],
'671':[[48,1011],[48,3325],[48,2890],[306,600],[48,2294],],
'1589':[[48,2785],[48,924],[306,545],[48,2265],[48,3305],],
'1645':[[48,2388],],
},{'237':[[48,1146],[48,1137],],
'241':[[48,1183],],
'586':[[48,960],],
'588':[[48,1131],],
'933':[[48,1141],],
'1589':[[48,932],],
'1653':[[48,958],[48,1135],[48,1129],],
},{'147':[[48,964],[48,1122],],
'237':[[48,1171],[48,1162],],
'586':[[48,968],],
'588':[[48,1156],],
'933':[[48,1166],],
'1589':[[48,936],],
'1653':[[48,1154],[48,966],[48,1160],],
'1674':[[48,1190],],
},{'1641':[[48,1192],[48,939],],
},{'237':[[48,3342],[306,617],[48,1026],[48,2905],[48,2309],],
'586':[[48,943],[48,2790],[48,3310],[48,2270],[306,550],],
'588':[[48,1019],[306,608],[48,3333],[48,2898],[48,2302],],
'1885':[[48,3759],[306,1004],],
'1886':[[306,1009],[48,3764],],
'1887':[[306,1014],[48,3769],],
'1888':[[306,1019],[48,3774],],
'1889':[[306,1024],[48,3779],],
'1890':[[48,3784],[306,1029],],
'1891':[[48,3789],[306,1034],],
'1892':[[306,1039],[48,3794],],
},{'52':[[306,1581],],
'124':[[391,30],],
'140':[[373,111],],
'215':[[306,1586],[48,3907],],
'247':[[335,812],],
'333':[[70,616],[197,398],[179,1074],[179,1109],[179,1101],],
'404':[[306,1354],[48,4046],],
'423':[[197,356],[70,504],[70,571],[197,371],],
'447':[[181,354],[181,360],],
'1029':[[179,893],],
'1645':[[48,2273],[306,553],[306,611],[48,2312],[48,2305],[48,3336],[48,3313],[48,2908],[48,2901],[48,946],[48,2793],[48,1029],[306,620],[48,1022],[48,3345],],
'1647':[[48,961],[48,1132],[48,1138],],
'1648':[[48,1157],[48,969],[48,1163],],
'1828':[[70,574],[70,684],[197,374],[197,516],[197,513],[70,681],],
'1883':[[48,3802],[306,1047],],
'1894':[[48,3861],],
'1906':[[48,4081],[306,1389],],
'1946':[[48,4323],],
'1949':[[48,4353],],
'2346':[[179,885],],
'3518':[[179,1076],],
'3520':[[179,1103],],
'3526':[[179,1111],],
},{'182':[[306,622],[48,1031],[48,3347],[48,2314],[48,2910],],
'199':[[54,622],[153,1179],[54,553],[153,975],[153,730],[153,1400],],
'215':[[179,1079],],
'217':[[48,953],],
'237':[[48,2386],],
'238':[[335,662],],
'241':[[306,845],],
'276':[[306,644],],
'586':[[48,3356],[48,2919],[48,2323],[306,631],[48,1040],],
'963':[[335,3145],],
'1281':[[48,4762],],
'1305':[[54,396],],
'1884':[[306,1042],[48,3797],],
'1895':[[48,3856],],
'1930':[[335,427],],
'2127':[[335,3148],[335,626],],
'2132':[[335,325],[335,1912],[335,430],[335,2616],[335,727],[335,505],[335,1171],],
'2215':[[54,1025],],
'3267':[[179,1107],],
'3528':[[179,1099],],
'3533':[[335,720],[335,498],[335,1904],[335,3599],[335,1164],[335,318],[335,3217],[335,2584],],
'4158':[[335,3581],[335,3613],],
'4175':[[306,867],],
'4179':[[306,1179],],
'4292':[[335,815],],
'4327':[[335,2010],],
'4338':[[335,3035],[335,2188],],
'4342':[[335,2232],[335,3079],],
'4345':[[335,2258],],
'4353':[[335,2598],],
'4371':[[335,3263],],
},{'182':[[48,1159],[48,1134],],
'215':[[48,957],],
'554':[[48,1128],],
'1648':[[48,965],],
'1673':[[48,1153],],
'1894':[[48,3816],],
'1895':[[48,3821],[48,3826],[48,3831],[48,3836],[48,3841],[48,3846],[48,3851],],
},{'236':[[48,972],],
'1374':[[48,1206],],
'1655':[[48,1119],],
'1677':[[48,1208],],
},{'147':[[48,1177],],
'236':[[48,975],],
'276':[[48,1118],],
'333':[[48,1203],],
'1654':[[48,1209],],
},{'236':[[48,978],],
'1374':[[48,1233],],
'1657':[[48,1174],],
},{'236':[[48,981],],
'237':[[48,1173],],
'333':[[48,1230],],
},{'236':[[48,984],],
'1374':[[48,1228],],
'1659':[[48,1149],],
},{'236':[[48,987],],
'237':[[48,1148],],
'333':[[48,1225],],
},{'147':[[48,1235],],
'236':[[48,990],],
'237':[[48,1105],[48,1069],],
'333':[[48,1248],],
},{'236':[[48,993],],
'333':[[48,1250],],
'1660':[[48,1106],[48,1070],],
},{'147':[[48,1051],[48,1056],],
'236':[[48,996],],
'1619':[[48,1054],],
},{'236':[[48,999],],
'333':[[48,1259],],
'1591':[[48,1252],],
'1670':[[48,1082],],
'1671':[[48,1084],],
},{'1663':[[48,1000],],
},{'147':[[48,1308],[48,1272],],
'186':[[48,1089],],
'236':[[48,1002],],
'333':[[48,1269],],
'1591':[[48,1262],],
'1665':[[48,1090],],
'1666':[[48,1316],],
},{'237':[[48,1092],],
'581':[[48,1315],],
'1589':[[48,1006],],
'1685':[[48,1320],],
},{'2':[[197,171],[179,924],[335,174],[70,290],[384,4115],[391,40],],
'15':[[48,4348],],
'19':[[304,221],],
'23':[[197,396],[384,9681],[48,4466],[252,31],[70,601],[48,4018],[384,7027],[384,8958],[48,4007],[391,57],],
'26':[[306,1084],],
'36':[[296,156],[80,122],],
'79':[[48,3635],[48,3588],[306,918],],
'147':[[306,1417],[306,1246],[48,3918],[48,4094],[48,3969],[48,3956],],
'154':[[153,501],[355,602],],
'173':[[179,831],],
'205':[[128,132],[197,439],[322,134],[306,938],[70,671],[363,337],],
'215':[[48,4483],],
'277':[[384,8441],],
'479':[[384,8639],],
'484':[[173,323],],
'513':[[142,182],],
'550':[[306,605],[48,2299],[48,2895],[48,3330],[48,1016],],
'551':[[384,6662],],
'656':[[384,8777],],
'673':[[313,388],],
'742':[[48,4188],[306,1528],],
'1004':[[306,1243],[48,3915],[48,4514],],
'1029':[[179,1454],[179,1509],[179,1559],],
'1326':[[384,4044],],
'1491':[[48,4476],],
'1573':[[306,1462],],
'1602':[[48,4500],],
'1765':[[306,1238],[48,3910],],
'1853':[[48,4481],[306,1240],[48,3912],],
'1870':[[48,4486],],
'1916':[[306,1316],[48,3985],[48,4489],],
'1917':[[48,3989],[306,1320],[48,4497],],
'1918':[[48,4504],[306,1324],[48,3993],],
'1919':[[48,4508],[48,3997],[306,1328],],
'1920':[[306,1332],[48,4001],],
'1927':[[48,4169],],
'1938':[[48,4209],],
'1942':[[48,4493],],
'2123':[[70,281],[197,162],],
'2912':[[384,9675],],
'3053':[[384,9174],],
'3535':[[179,1307],],
'4182':[[306,1286],],
'4487':[[384,9660],[384,9691],],
'5100':[[384,7043],],
},{'1556':[[48,4648],],
'1619':[[48,1065],],
'1625':[[48,1101],],
},{'23':[[48,1300],[253,206],[306,789],[320,104],[344,311],],
'288':[[48,1074],],
},{'241':[[48,1081],],
'420':[[48,1243],],
'3833':[[243,212],],
},{'696':[[179,740],],
'1029':[[179,890],],
'1663':[[48,1083],],
'1725':[[179,808],],
'1762':[[48,2471],],
'2208':[[54,962],[335,1344],],
'2217':[[54,1205],],
'2896':[[153,1279],[153,1108],],
'4296':[[335,837],],
'4336':[[335,2112],[335,2806],[335,2102],],
'4364':[[335,2905],],
},{'12':[[384,740],],
'23':[[396,94],[384,9336],[384,9255],[170,92],[170,149],[170,204],[181,694],[189,524],[209,239],[224,128],[384,7265],[246,64],[270,238],[284,218],[384,4842],[313,484],[335,2217],[384,4319],[396,128],[335,3064],[335,3276],[335,2895],[363,519],],
'39':[[353,116],],
'248':[[235,351],],
'449':[[384,6527],],
'494':[[384,738],],
'531':[[384,3230],[384,3020],],
'1413':[[48,2335],[306,641],[48,2929],[48,3366],[48,1115],],
'2296':[[335,2837],],
'4099':[[384,8295],[384,4970],],
},{'12':[[121,58],],
'43':[[335,3354],],
'305':[[121,434],],
'554':[[48,1394],],
'581':[[48,4628],],
'1391':[[289,59],[315,59],],
'1532':[[48,1152],],
'1591':[[48,1498],],
'1601':[[48,3549],],
},{'1641':[[48,1189],],
},{'140':[[48,3531],],
'186':[[48,1871],],
'491':[[48,1869],[48,1215],[48,1197],],
'958':[[48,1220],],
},{'186':[[306,725],],
'217':[[48,1848],],
'237':[[48,1874],[48,1199],],
'314':[[179,1396],],
'422':[[306,723],],
'1734':[[48,2065],],
'1736':[[48,2068],],
},{'15':[[179,717],[179,780],],
'92':[[179,758],],
'215':[[48,2511],[179,1429],[179,775],],
'217':[[48,2500],],
'696':[[179,1365],],
'958':[[48,2072],],
'1029':[[48,1851],],
'1125':[[179,1055],],
'1319':[[179,1381],[179,1491],],
'1388':[[179,1361],],
'1654':[[48,1207],],
'1732':[[48,1860],[48,1886],],
'1733':[[306,733],[48,1854],[306,730],[48,1857],],
'1749':[[48,2075],[48,2078],],
'1751':[[48,2083],],
'1795':[[257,39],],
'2127':[[179,1379],],
'3267':[[179,1143],[179,1139],],
'3485':[[179,665],],
'3494':[[179,705],[179,770],],
'3495':[[179,707],[179,772],],
'3508':[[179,1489],],
'3541':[[179,1414],],
},{'1484':[[48,1256],],
'1679':[[48,1266],],
},{'16':[[48,1649],],
'19':[[306,766],],
'36':[[306,796],],
'77':[[243,192],],
'586':[[306,561],],
'958':[[48,1265],],
'1484':[[384,4124],],
'2730':[[114,24],[169,26],],
'3137':[[342,182],],
},{'43':[[48,3514],[384,6430],],
'67':[[101,50],[335,971],[363,322],[384,7287],[274,784],],
'167':[[243,189],],
'202':[[335,1018],],
'206':[[384,4727],],
'217':[[384,1080],],
'251':[[187,163],[384,4476],],
'284':[[384,6484],],
'491':[[48,1279],],
'1474':[[296,99],],
'1670':[[243,213],],
'2125':[[384,4999],],
'2721':[[113,30],],
},{'420':[[48,1284],],
'2842':[[384,4590],],
},{'12':[[342,249],],
'30':[[246,1449],],
'150':[[235,217],],
'195':[[246,31],],
'422':[[48,1292],],
'449':[[331,241],],
'491':[[335,3452],],
'2111':[[246,1439],],
'2691':[[246,982],],
'2808':[[277,61],],
},{'1610':[[48,1313],],
},{'7':[[232,24],],
'33':[[181,546],],
'646':[[232,61],],
'1665':[[48,1317],],
'3803':[[232,107],],
},{'182':[[48,3338],[306,613],],
'215':[[48,2327],],
'217':[[48,2280],[48,3320],],
'501':[[306,559],],
'696':[[48,4659],],
'1255':[[48,2101],],
'1532':[[48,3539],[48,1319],],
'1582':[[48,2099],],
},{'29':[[48,1413],[48,1520],],
'173':[[48,1529],[48,1324],],
},{'333':[[48,1337],],
'1725':[[48,1811],],
},{'224':[[48,1348],],
'318':[[162,133],],
'1680':[[48,3515],],
},{'333':[[48,1423],],
},{'94':[[48,1426],],
'1029':[[48,1494],[48,1504],],
'1597':[[48,1484],],
},{'94':[[48,1429],],
'1029':[[48,1450],[48,1460],],
'1598':[[48,1440],],
},{'1004':[[48,1477],],
'1588':[[48,1465],],
'1686':[[48,1521],],
},{'73':[[367,36],],
'128':[[250,34],],
'241':[[48,1468],],
'447':[[54,772],],
'2132':[[335,1325],],
'2576':[[218,336],],
},{'1518':[[48,1471],],
},{'1004':[[48,1515],],
'1588':[[48,1509],],
'1692':[[48,1522],],
},{'552':[[48,1557],],
},{'215':[[384,7329],],
'217':[[48,1619],[48,1564],],
'1600':[[48,1661],],
'3411':[[290,488],[179,434],],
'4726':[[384,885],],
},{'333':[[48,1587],[48,1593],[48,1599],[48,1675],[48,1657],[48,1663],[48,1669],],
'1598':[[48,1683],[48,1607],],
},{'12':[[48,1652],],
'99':[[176,118],[176,127],],
'671':[[391,20],[136,18],],
'4927':[[384,9807],],
'4931':[[384,9945],],
},{'803':[[48,1712],[48,1816],[48,1687],],
},{'173':[[48,1690],],
'1211':[[48,1729],],
},{'758':[[48,1692],],
'1030':[[258,13],],
},{'759':[[48,1694],],
},{'7':[[241,49],[171,717],[67,3],[143,5],[67,61],[369,121],],
'117':[[141,0],],
'152':[[67,27],[61,29],[61,41],],
'173':[[141,16],],
'178':[[143,71],],
'755':[[48,1696],],
},{'7':[[241,51],[369,123],[171,719],[61,3],[61,90],[141,5],],
'33':[[164,189],],
'117':[[67,0],],
'150':[[370,40],],
'173':[[67,16],],
'178':[[141,92],],
'215':[[335,1827],],
'247':[[164,207],],
'382':[[335,672],[153,1414],],
'888':[[335,2275],[335,438],[335,3165],[335,3776],[335,3337],[335,926],],
'1005':[[335,912],],
'1029':[[54,630],],
'1704':[[48,1697],],
'2126':[[335,674],[335,928],[335,2277],[335,440],[54,632],[335,3169],[335,3780],[335,3339],],
'2128':[[335,1829],],
'2153':[[179,1604],],
'2159':[[335,3167],],
'2245':[[54,1507],],
'4359':[[335,3171],],
'4383':[[335,3778],],
},{'162':[[54,302],],
'174':[[70,243],],
'412':[[306,385],],
'815':[[153,201],[48,1703],],
'1326':[[197,124],],
'2346':[[179,900],],
'4283':[[335,144],],
},{'147':[[335,209],[48,1752],[48,1759],[48,1774],[306,420],[54,327],[306,413],[70,346],[197,183],[153,262],[179,970],[335,199],],
'333':[[153,206],[306,390],[70,248],[54,307],[335,149],[197,129],[179,905],[48,1708],],
},{'94':[[48,1710],[335,151],[306,392],[197,131],[54,309],[179,907],[70,250],[153,208],],
'95':[[335,203],[54,331],[179,990],[197,193],[70,356],],
'97':[[335,213],],
'1629':[[306,417],[48,1756],],
'1717':[[48,1764],[48,1779],],
'1909':[[306,424],],
'2958':[[153,271],],
},{'7':[[245,58],[58,3],[58,61],[59,5],[171,680],[369,84],],
'117':[[371,0],],
'123':[[371,16],],
'140':[[59,41],],
'147':[[54,317],[153,213],[153,210],[48,1720],],
'169':[[59,95],],
},{'99':[[179,973],],
'125':[[70,287],[54,319],[197,168],[48,1722],],
'2346':[[197,210],[70,373],],
'2954':[[153,217],],
'3510':[[179,921],[179,954],[335,171],[335,191],],
},{'75':[[215,79],[183,79],],
'1710':[[70,374],[54,320],[179,922],[179,955],[179,974],[153,218],[70,288],[197,169],[197,211],[48,1723],[335,172],[335,192],],
'4444':[[350,156],],
},{'545':[[306,395],],
'580':[[48,1733],],
},{'1712':[[48,1734],],
},{'23':[[246,389],],
'39':[[342,301],],
'132':[[334,24],],
'288':[[280,31],],
'321':[[214,128],],
'1029':[[306,398],[48,1737],],
'1151':[[342,325],[65,179],],
},{'186':[[48,3972],[306,1303],],
'1602':[[48,1747],],
},{'1715':[[48,1748],],
},{'1602':[[48,1778],],
'1632':[[48,1763],],
},{'898':[[48,1791],],
},{'2':[[267,20],[384,7717],[261,71],],
'15':[[384,6603],[384,5981],],
'19':[[381,274],],
'20':[[252,50],[252,28],],
'23':[[384,3768],[161,125],],
'24':[[321,135],[96,63],],
'25':[[321,388],[384,249],],
'29':[[384,4293],[384,4370],[384,4299],[384,3194],],
'54':[[384,9225],],
'77':[[384,4549],],
'149':[[91,22],[384,4288],],
'224':[[48,3652],],
'275':[[381,376],[381,86],],
'453':[[261,66],],
'540':[[381,625],],
'596':[[384,3779],],
'1467':[[384,9299],],
'1490':[[384,6751],],
'1503':[[384,7620],],
'1507':[[54,1490],],
'1603':[[384,3960],],
'1667':[[197,172],[179,925],[70,291],[335,175],],
'1718':[[48,1792],],
'1909':[[48,3962],[48,3975],],
'1915':[[303,86],],
'1933':[[123,23],],
'2314':[[65,132],[381,347],],
'2315':[[381,188],[167,38],[384,6593],[381,202],[358,76],[65,141],[117,38],[358,122],[161,194],],
'2589':[[161,116],[161,101],],
'2890':[[282,24],[393,24],],
'4025':[[261,51],],
'4027':[[261,55],],
'4028':[[261,59],],
'4029':[[261,63],],
'4102':[[384,3949],],
'4181':[[306,1294],[306,1306],],
'4511':[[358,251],],
'4866':[[384,8001],],
'5046':[[384,5656],],
'5055':[[384,5928],],
},{'7':[[171,397],[56,39],[254,36],[175,37],],
'18':[[381,184],],
'33':[[175,25],],
'93':[[212,18],],
'117':[[65,0],],
'128':[[65,56],],
'275':[[384,7702],[384,7695],],
'288':[[175,19],],
'322':[[366,43],],
'593':[[381,311],[212,22],],
'722':[[175,30],],
'1027':[[212,33],],
'1329':[[48,1796],[65,12],],
'1722':[[175,15],],
'2267':[[212,28],],
'2916':[[212,71],],
'4903':[[384,3166],],
},{'1004':[[48,1800],[48,1806],],
'1720':[[48,1797],],
'1721':[[48,1801],],
},{'7':[[56,43],[212,80],[171,401],[212,3],[254,40],],
'117':[[175,0],],
'150':[[212,40],],
'173':[[175,14],],
'322':[[65,186],],
'1721':[[48,1798],],
},{'33':[[384,6925],],
'182':[[65,48],],
'274':[[65,117],],
'593':[[381,248],[384,6286],[384,6184],[384,7773],],
'944':[[381,602],],
'1720':[[381,185],[384,7703],[381,312],],
'1721':[[48,1802],],
},{'7':[[56,45],[301,3],[171,403],[175,3],[254,42],[301,85],],
'117':[[212,0],],
'150':[[212,55],],
'173':[[212,16],],
'322':[[175,40],],
'375':[[65,175],],
'1602':[[48,1804],],
},{'144':[[48,1831],[179,756],[179,823],],
'333':[[48,1810],],
'883':[[179,720],],
'1671':[[179,809],[179,741],],
'1677':[[179,776],],
'1725':[[179,712],],
'3485':[[179,711],],
'3498':[[179,807],[179,738],],
},{'1591':[[179,1618],[335,272],[48,1824],],
},{'19':[[179,1620],[335,274],[48,1826],],
},{'3':[[384,7518],],
'1029':[[335,276],[179,1622],[48,1828],],
},{'1728':[[179,1623],[335,277],[48,1829],],
},{'29':[[48,3030],],
'173':[[48,1834],],
'887':[[48,3492],],
'1842':[[48,3533],],
},{'215':[[48,1890],[48,1865],],
'237':[[48,3457],[306,712],[48,2995],],
'404':[[48,3244],[306,589],[48,2879],[48,1836],],
'1374':[[48,1882],],
'1677':[[48,1861],[48,1852],[48,1858],[306,731],],
'1730':[[48,3534],[48,3493],[48,3031],],
},{'237':[[48,2997],[306,714],[48,3459],],
'404':[[306,592],[48,3247],[48,1838],[48,2882],],
'1374':[[48,1885],],
'1677':[[48,1855],[48,1887],[306,734],],
'1731':[[48,3535],[48,1862],[48,1859],[48,3032],[48,3494],],
},{'333':[[306,729],[48,1879],],
'404':[[48,3250],[48,1840],[48,2885],[306,595],],
'1731':[[48,1853],[306,732],],
'1732':[[48,3495],[306,735],[48,3033],[48,1856],],
'1830':[[48,3461],[48,2999],[306,716],],
'1842':[[48,3537],],
},{'186':[[48,1844],],
'314':[[179,1391],],
'1180':[[179,1412],],
'1267':[[48,2064],[48,2061],],
'1592':[[48,1842],],
},{'100':[[179,1498],],
'1178':[[48,1846],],
'1286':[[179,1596],[179,1546],],
},{'23':[[352,128],[193,128],[274,616],],
'26':[[48,2067],[48,1876],],
'1414':[[213,381],],
},{'93':[[48,1903],[48,1907],[48,1922],[48,1926],],
'958':[[48,2031],],
'1329':[[48,1892],],
'1748':[[48,2095],[48,1953],],
},{'182':[[48,1894],],
'898':[[48,3004],[48,3466],],
'1742':[[48,1949],[48,1913],],
'1743':[[48,1943],[48,1916],],
'1753':[[48,2053],],
},{'898':[[48,3471],[48,3009],],
'1738':[[48,1895],],
'1742':[[48,1941],],
'1743':[[48,1947],],
'1753':[[48,2057],],
},{'1329':[[48,1899],],
'1582':[[48,1999],],
},{'7':[[263,82],],
'19':[[80,67],[170,103],],
'75':[[306,1588],],
'92':[[48,3895],[48,4218],[54,1065],[54,290],[306,1228],],
'128':[[386,35],[231,35],[330,33],[272,35],[291,35],],
'139':[[48,2566],],
'144':[[384,8248],],
'244':[[48,2569],],
'815':[[48,4772],],
'1101':[[48,4852],],
'1740':[[48,1900],],
'1744':[[48,1919],],
'2129':[[54,300],[54,1075],],
'2182':[[54,863],],
'2227':[[54,1509],],
},{'144':[[48,1912],],
'328':[[48,1940],],
'1004':[[48,1924],[48,1905],],
'1739':[[48,1948],],
},{'328':[[48,1946],],
'671':[[48,1915],],
'1004':[[48,1928],[48,1909],],
'1739':[[48,1942],],
},{'1329':[[48,1918],],
'1582':[[48,2022],],
},{'93':[[48,1930],],
},{'68':[[48,1932],],
'333':[[384,2041],[384,2697],],
'447':[[384,876],],
'1582':[[384,3802],],
},{'1117':[[48,1935],],
},{'173':[[48,2094],[48,1952],],
'815':[[48,3542],],
'1733':[[48,3034],],
},{'147':[[48,1962],],
'236':[[48,1958],],
'241':[[48,1982],],
'333':[[48,1989],[48,2012],],
'671':[[48,2048],],
'707':[[48,2009],[48,1986],],
'1255':[[48,2034],],
'1319':[[48,2005],],
'1751':[[48,2074],],
'1752':[[48,2077],],
},{'99':[[48,1974],],
'147':[[48,1976],],
'215':[[48,1971],[54,578],],
'333':[[54,576],[48,1969],],
'1211':[[54,581],],
},{'215':[[48,2088],[48,2082],],
'236':[[48,2037],],
'1677':[[48,2084],[48,2073],],
'1753':[[48,2050],],
},{'236':[[48,2040],],
'1677':[[48,2076],[48,2079],],
'1738':[[48,2054],],
'1751':[[48,2085],],
},{'215':[[48,2046],],
'236':[[48,2044],],
'322':[[48,2052],[48,2056],],
'1749':[[48,2049],],
},{'63':[[313,401],],
'128':[[314,23],[200,145],[111,29],[111,74],[349,23],[263,87],],
'609':[[82,451],],
'625':[[48,2112],],
'1756':[[48,2133],],
},{'23':[[48,3111],],
'139':[[48,2149],],
'143':[[48,2114],],
'147':[[48,2696],],
'175':[[48,3186],],
'476':[[48,2698],],
'479':[[48,3419],[48,3439],],
'483':[[48,2739],[48,3204],],
'588':[[48,2960],[48,2979],],
'625':[[48,3165],],
'740':[[48,3148],[48,2747],[48,3212],[48,2159],],
'1573':[[48,3154],],
'1759':[[48,2714],],
'1761':[[48,2724],],
'1817':[[48,3180],],
},{'23':[[48,2132],[48,3128],],
'63':[[48,3206],[48,2741],],
'75':[[48,2839],[48,2843],],
'175':[[48,3188],],
'478':[[48,3157],[48,2750],],
'1573':[[48,3162],],
'1755':[[48,3181],[48,2115],[48,3166],],
'1816':[[48,2709],],
},{'23':[[48,3126],],
'63':[[48,2151],[48,2117],],
'173':[[48,3144],[48,2167],],
'175':[[48,3184],],
'436':[[48,3105],],
'754':[[48,2641],],
'933':[[48,2621],],
'1600':[[48,3169],[48,2700],],
'1798':[[48,2691],],
},{'17':[[48,2121],],
},{'147':[[48,2711],],
'478':[[48,2161],],
'485':[[48,2713],],
'639':[[48,2135],],
},{'152':[[48,2137],],
},{'147':[[48,2721],],
'652':[[48,2723],],
'654':[[48,2163],],
},{'52':[[48,3146],],
'147':[[48,2456],[48,2613],],
'182':[[48,2702],[48,2643],],
'236':[[48,2169],[48,3071],],
'333':[[48,2483],],
'1029':[[48,2470],],
'1423':[[48,3075],],
'1600':[[48,3099],],
'1671':[[48,2472],],
'1757':[[48,3170],[48,2692],],
'1794':[[48,2476],],
'1807':[[48,2623],],
'1836':[[48,3077],],
},{'217':[[48,4405],],
'752':[[48,2176],],
'1029':[[48,4848],[48,4793],[48,4870],],
'1532':[[48,4437],[48,4140],],
},{'3':[[48,2182],],
'39':[[91,40],],
'59':[[214,28],],
},{'12':[[384,6659],],
'57':[[71,77],[382,77],],
'144':[[48,2185],],
'305':[[306,1602],],
'931':[[384,8170],],
'1455':[[217,225],[384,8790],[217,215],[217,206],[217,187],[384,8621],[384,6376],[384,8605],[384,7919],[217,196],],
'1902':[[48,3909],],
'1907':[[306,1237],],
'5061':[[384,6103],],
'5217':[[384,9840],],
},{'12':[[48,2190],],
'1405':[[384,1745],[384,2602],],
'4255':[[331,214],],
},{'23':[[200,169],],
'173':[[200,25],[257,23],],
'186':[[48,2206],],
'217':[[48,2367],],
'476':[[200,83],],
'1600':[[48,2645],],
'1769':[[48,2211],],
'1791':[[48,2449],],
},{'671':[[48,2225],[48,2241],[48,2209],],
},{'61':[[200,92],],
'182':[[200,28],[257,26],],
'277':[[48,2647],],
'1645':[[48,2370],],
'1768':[[48,2210],],
'1770':[[48,2214],],
},{'187':[[312,15],],
'671':[[48,4842],],
'969':[[48,2232],[48,2245],[48,2248],[48,2229],[48,2216],[48,2213],],
},{'174':[[48,2421],],
'186':[[48,2222],],
'241':[[48,2435],],
'1532':[[48,2376],],
'1772':[[48,2227],],
'1787':[[48,2412],],
'1791':[[48,2650],],
'1792':[[48,2453],],
},{'241':[[48,2425],],
'267':[[48,2438],],
'277':[[48,2652],],
'1645':[[48,2379],],
'1768':[[48,2226],],
'1770':[[48,2230],],
},{'173':[[315,24],[289,24],],
'186':[[48,2238],],
'199':[[289,85],[315,85],],
'215':[[48,2355],],
'267':[[48,2427],],
'1755':[[48,2725],[48,2715],],
'1774':[[48,2243],],
'1790':[[48,2445],],
},{'174':[[48,2430],],
'182':[[289,27],[315,27],],
'277':[[48,2717],[48,2727],],
'1645':[[48,2358],],
'1768':[[48,2242],],
'1770':[[48,2246],],
'1790':[[315,97],[289,97],],
},{'236':[[48,2283],],
'237':[[48,2361],],
'241':[[48,2433],],
'333':[[48,2485],],
},{'186':[[48,2458],],
'236':[[48,2286],],
'237':[[48,2373],],
'1762':[[48,2473],],
},{'236':[[48,2289],],
'237':[[48,2382],],
'267':[[48,2441],],
'1128':[[48,2398],],
},{'2':[[57,235],],
'7':[[350,166],],
'12':[[246,600],],
'16':[[213,271],[235,108],[118,61],[244,62],],
'27':[[249,300],],
'73':[[306,1102],],
'85':[[65,159],],
'152':[[162,84],],
'224':[[65,106],],
'276':[[48,2338],],
'305':[[199,67],[54,1258],[363,674],[306,1089],],
'469':[[304,177],],
'596':[[112,41],[125,114],],
'724':[[353,174],],
'1846':[[306,1070],],
'3185':[[335,3633],],
},{'26':[[48,2343],],
},{'1356':[[48,2346],],
},{'15':[[277,933],],
'19':[[121,456],],
'38':[[142,160],],
'546':[[48,4903],],
'1351':[[200,199],[121,473],],
'1780':[[48,2347],],
'2107':[[331,154],],
'2572':[[121,411],],
'4319':[[335,1802],[335,1653],],
},{'1255':[[48,3001],[48,3463],],
'1767':[[48,2368],],
'1769':[[48,2371],],
'1771':[[48,2377],],
'1772':[[48,2380],],
'1773':[[48,2356],[48,2428],],
'1774':[[48,2359],[48,2431],],
},{'1646':[[48,2389],],
},{'15':[[48,2392],],
'346':[[48,2407],],
},{'539':[[257,148],],
'1423':[[48,2403],],
},{'12':[[335,3407],],
'63':[[181,692],],
'1785':[[48,2404],],
'2576':[[181,680],[102,178],],
},{'333':[[48,2411],],
'1637':[[48,2417],],
},{'1767':[[48,2450],],
'1771':[[48,2454],[48,2413],],
'1773':[[48,2446],],
'1824':[[48,3382],],
'1825':[[48,3399],],
},{'1771':[[48,2436],],
'1772':[[48,2439],],
},{'182':[[315,29],[289,29],[48,2444],],
'241':[[289,96],[289,107],[315,96],[315,107],],
'277':[[48,2729],[48,2719],],
'1790':[[315,108],[289,108],],
},{'61':[[200,99],],
'182':[[200,30],[257,28],[48,2448],],
'277':[[200,89],[48,2649],],
'887':[[200,96],],
},{'182':[[48,2452],],
'277':[[48,2654],],
},{'420':[[384,2713],],
'436':[[48,2468],],
},{'1591':[[48,2475],],
},{'134':[[257,50],],
'182':[[48,2506],[48,2495],[257,38],[48,2489],],
'1792':[[48,2655],],
},{'182':[[48,2498],[48,2509],[257,42],[48,2492],],
'970':[[257,86],],
'1797':[[48,2657],],
},{'7':[[257,66],],
'59':[[257,118],],
'1677':[[48,2512],[48,2501],],
'1795':[[48,2656],],
},{'94':[[48,2553],[48,2564],],
'147':[[48,2679],],
'581':[[48,2557],],
'815':[[48,2516],],
'1004':[[48,2592],],
'1029':[[48,2686],[48,2600],],
'1576':[[48,2606],],
'1577':[[48,2690],],
},{'1586':[[48,2555],],
'1798':[[48,2517],],
},{'23':[[48,2546],],
},{'147':[[48,2639],],
'1741':[[48,2567],],
'1762':[[48,2624],],
},{'147':[[48,2589],],
'752':[[48,2586],],
'1741':[[48,2570],],
},{'453':[[48,2576],],
},{'1803':[[48,2577],],
},{'26':[[246,1667],],
'153':[[162,326],[252,90],[277,674],],
'420':[[174,264],],
'921':[[384,2129],[76,38],],
'1591':[[48,2595],],
'2576':[[355,217],],
},{'236':[[48,2615],[48,2602],],
'1004':[[48,2608],],
},{'147':[[48,2610],],
'173':[[48,2604],],
'175':[[48,2632],],
'1757':[[48,2622],],
},{'598':[[306,700],[306,1166],],
'1591':[[48,2617],],
'3789':[[384,974],],
},{'7':[[379,160],],
'199':[[384,4669],],
'224':[[84,95],],
'944':[[384,5926],],
'1591':[[48,2628],],
},{'63':[[335,3472],],
'149':[[48,2662],],
'163':[[384,2979],],
'199':[[84,152],],
'728':[[246,518],],
'948':[[246,527],],
'2569':[[95,80],],
'5058':[[384,9509],],
},{'16':[[197,606],[355,491],[335,1052],[52,305],[54,437],[197,135],[191,120],[191,84],[70,254],[70,764],[384,4767],[337,113],],
'18':[[48,3242],[48,2863],],
'23':[[197,444],],
'31':[[118,39],[235,450],],
'52':[[164,120],],
'140':[[162,249],],
'147':[[214,135],[384,6861],],
'165':[[320,33],[162,158],[197,534],[70,62],[373,63],],
'206':[[164,404],],
'241':[[253,141],[266,219],],
'267':[[379,178],],
'277':[[54,1240],],
'305':[[48,2664],],
'445':[[324,25],],
'447':[[396,29],[302,165],[134,163],[396,64],],
'878':[[384,4111],[384,3051],],
'1349':[[384,7035],[54,507],],
'2738':[[335,1795],[335,1646],],
},{'16':[[48,3631],[48,2671],],
'31':[[181,648],[204,73],],
'39':[[84,77],],
'596':[[189,579],],
'1498':[[231,113],],
},{'23':[[48,2674],],
'306':[[306,446],],
'422':[[48,4825],],
'522':[[48,4814],],
'674':[[48,3951],],
'700':[[306,298],],
'1156':[[48,4453],],
'1592':[[48,4866],[48,4789],],
'1814':[[48,4529],],
},{'15':[[100,144],[57,99],[86,92],],
'23':[[270,224],[270,248],],
'77':[[187,167],],
'196':[[84,491],],
'1073':[[57,264],],
'1591':[[48,2681],[48,4528],],
},{'123':[[48,4534],[48,2688],],
'147':[[48,4540],],
'1573':[[48,2694],],
},{'652':[[48,2708],],
},{'173':[[48,2744],],
'1600':[[48,3179],],
'1790':[[48,2730],],
},{'15':[[314,66],],
'77':[[384,4336],],
'370':[[384,9610],],
'554':[[48,3197],[48,2732],],
},{'2':[[162,41],],
'29':[[48,3028],],
'63':[[302,115],[322,98],[315,207],],
'81':[[384,9330],],
'175':[[48,3024],],
'186':[[48,2811],],
'255':[[384,8447],],
'275':[[384,2307],],
'279':[[384,7364],],
'477':[[48,2841],],
'586':[[48,2815],],
'743':[[48,2831],],
'746':[[48,2977],],
'1180':[[384,2297],],
'1310':[[384,6517],],
'2314':[[381,399],],
'5059':[[384,8114],],
},{'599':[[48,3240],[48,2861],],
'1474':[[48,2813],],
'1819':[[48,2816],],
'1824':[[48,3386],[48,2940],],
'1825':[[48,3404],[48,2944],],
},{'671':[[48,3225],[48,2846],],
},{'969':[[48,2870],[48,2877],[48,3229],[48,3267],[48,3274],[48,2850],],
},{'671':[[48,2873],[48,3263],[48,3270],[48,2866],],
},{'147':[[48,3381],],
'237':[[48,2939],],
'1823':[[48,2867],[48,3264],],
'1824':[[48,3265],[48,2868],],
'1828':[[48,2949],],
'1844':[[48,3385],],
'1846':[[48,3409],],
},{'147':[[48,3398],],
'738':[[48,3403],],
'1823':[[48,2874],[48,3271],],
'1825':[[48,3272],[48,2875],],
'1827':[[48,2943],],
'1829':[[48,3413],[48,2953],],
},{'173':[[213,25],[89,25],],
'277':[[89,110],],
'423':[[213,133],],
'1589':[[48,2934],[48,3371],],
'1755':[[48,2961],[48,3420],],
'2530':[[213,413],],
},{'236':[[48,3374],[48,2937],],
'671':[[48,3401],],
'744':[[48,3379],[48,2942],],
'1364':[[48,3395],],
'1820':[[48,2945],[48,3405],],
'1826':[[48,3421],[48,2962],],
},{'12':[[170,69],],
'94':[[70,564],[197,364],],
'134':[[170,50],],
'144':[[306,1116],],
'173':[[170,19],[313,31],],
'241':[[306,1146],],
'252':[[313,126],],
'264':[[70,722],[54,1008],[197,565],],
'423':[[70,583],[197,383],[197,373],[70,573],],
'449':[[313,142],[170,61],],
'550':[[306,1106],],
'791':[[197,385],],
'933':[[70,568],[197,368],],
'1589':[[48,2948],[54,892],[306,1134],[306,1094],],
'1755':[[48,2980],],
'1827':[[48,2963],],
'1832':[[48,2971],[306,1157],],
'1846':[[306,1097],],
'1904':[[306,1201],],
'2184':[[54,1054],],
'2189':[[54,974],[54,899],],
'2211':[[54,972],],
'2349':[[70,590],],
'2355':[[70,680],[197,512],[197,506],[197,515],[70,674],[70,683],],
'2415':[[306,1114],],
'4173':[[306,1099],],
'4176':[[306,1148],],
},{'63':[[153,1345],[153,1252],[153,1059],],
'73':[[153,791],[153,697],],
'470':[[153,984],[153,1188],[153,659],[189,401],[153,739],],
'1589':[[48,3412],[48,2952],],
'1645':[[48,2990],[48,3452],],
'1830':[[48,2982],[48,3442],],
'1844':[[48,3388],],
},{'182':[[48,3473],[48,3011],],
'236':[[306,658],[48,3416],[48,2956],],
'1573':[[48,2985],[48,3447],],
'1732':[[306,715],[48,3460],[48,2998],],
'1828':[[48,2981],[48,2972],],
'1846':[[48,3441],[48,3431],],
'4161':[[306,693],[306,679],[306,665],],
},{'39':[[48,3427],[306,675],[48,2968],],
},{'1':[[48,3429],[306,677],[48,2970],],
'63':[[384,8349],],
'67':[[384,8345],],
'135':[[396,183],],
'147':[[396,165],],
'236':[[128,26],[306,382],[396,20],[70,578],[306,1129],[322,27],[250,32],[197,378],[367,30],],
'301':[[384,7864],],
'333':[[70,614],[197,411],],
'354':[[134,95],[302,118],[302,156],[302,92],[134,116],[134,154],],
'447':[[250,88],[367,82],],
'1101':[[396,47],],
'1198':[[322,153],[128,151],],
'1364':[[322,208],[128,206],[126,25],],
'1828':[[70,591],[197,566],[70,723],[197,386],],
'1846':[[306,1156],],
'2860':[[128,57],[322,54],],
},{'1830':[[48,3432],[306,680],[48,2973],],
},{'236':[[48,3434],[48,2975],],
'1830':[[48,3448],[48,2986],],
},{'1540':[[70,744],[197,586],],
'1573':[[335,3158],[335,3330],[48,3450],[335,2268],[335,1822],[335,1764],[335,1673],[179,1424],[48,2988],[306,705],[335,367],[335,1625],[335,3753],[335,919],[335,1234],[335,1310],[335,1386],[335,1486],[335,1531],],
'1652':[[153,1401],[153,1180],[153,976],[153,731],[54,623],[54,554],[335,663],[335,431],],
},{'1762':[[48,3076],],
'1917':[[48,4576],],
},{'12':[[381,373],[363,527],[277,436],[246,571],[121,191],[385,47],],
'63':[[246,500],],
'67':[[93,118],[156,115],],
'73':[[246,589],],
'140':[[246,480],],
'164':[[52,118],],
'248':[[49,466],],
'351':[[54,86],[200,235],],
'1161':[[48,4592],[48,3085],],
'2385':[[384,4959],],
'2559':[[384,4945],],
'3086':[[160,628],],
},{'47':[[266,69],[49,56],],
'63':[[384,3874],],
'147':[[331,408],],
'321':[[277,578],],
'507':[[384,3549],],
'515':[[48,4666],[48,3102],],
'817':[[384,5653],],
'940':[[95,154],],
'1117':[[99,100],],
'1504':[[358,263],],
'3121':[[358,249],[358,242],],
},{'12':[[48,4673],[48,3109],],
'19':[[335,3376],],
'48':[[173,287],[137,242],],
'60':[[353,161],],
'2261':[[160,107],],
'2373':[[122,60],[198,46],[265,16],[305,38],[323,18],[73,34],[160,85],[354,30],[368,31],],
'4521':[[384,7604],],
'4842':[[384,2317],],
},{'5':[[384,711],],
'8':[[384,697],[384,2556],[384,3302],[384,529],],
'9':[[384,2761],],
'13':[[384,4626],[384,4614],],
'16':[[390,107],[186,307],[48,4686],[48,3122],[96,40],],
'31':[[249,48],],
'224':[[277,707],],
'349':[[161,110],],
'792':[[384,2774],[384,3317],],
'817':[[384,8538],[384,8103],[384,8093],[161,47],[384,6950],[384,8521],[384,8529],[384,6383],[384,7929],],
'968':[[384,688],[384,3288],],
'1169':[[384,2769],],
'1504':[[384,2531],[384,2537],],
'1538':[[209,202],[332,145],[247,206],[131,136],[77,121],[270,208],],
'2136':[[384,5758],[246,1831],[277,95],[179,46],],
'4682':[[384,536],[384,3295],[384,704],],
'4861':[[384,2548],[384,3309],],
},{'16':[[48,4701],[306,928],[190,28],[48,3137],],
'31':[[317,44],],
'39':[[224,198],],
'203':[[181,1023],],
},{'147':[[48,3523],],
'404':[[48,3221],],
'1675':[[48,3532],],
'1685':[[48,3540],],
'1732':[[48,3536],],
},{'7':[[379,152],],
'12':[[235,175],],
'15':[[218,197],],
'17':[[384,1273],],
'18':[[266,347],[266,323],],
'19':[[172,130],[251,28],],
'23':[[54,1212],[54,505],[251,177],[162,335],[235,395],[197,467],[235,384],[197,485],[384,7033],],
'26':[[118,34],[52,269],[70,549],[235,182],[172,35],[244,38],[172,78],[118,110],],
'77':[[118,211],[244,242],],
'82':[[384,1338],[171,201],[251,2],[251,23],[384,901],[274,17],[227,328],[274,841],],
'128':[[256,17],],
'135':[[118,90],],
'140':[[52,86],[251,91],],
'147':[[384,6329],[179,670],],
'205':[[266,359],],
'215':[[48,3252],],
'224':[[235,375],],
'252':[[384,3876],[384,3895],],
'271':[[384,1241],[384,1354],[70,515],],
'272':[[384,4765],[52,220],[52,176],[244,125],[172,88],[256,33],[172,57],],
'346':[[384,1726],],
'357':[[244,118],],
'445':[[197,446],[197,532],[384,4424],[84,507],],
'506':[[251,275],],
'511':[[335,2590],],
'552':[[244,103],],
'655':[[162,192],],
'856':[[179,1162],],
'1304':[[384,5035],],
'1361':[[244,221],[118,190],],
'1608':[[384,1287],],
'2062':[[52,106],],
'2066':[[384,6391],[384,6401],],
'2069':[[70,526],],
'2075':[[52,303],],
'2262':[[251,199],[251,310],],
'2567':[[336,87],[384,5024],],
'4452':[[384,6292],],
},{'236':[[48,3377],],
'671':[[48,3384],],
'1820':[[48,3387],],
},{'31':[[126,21],[48,3391],],
'34':[[283,222],],
},{'12':[[134,92],[302,89],],
'139':[[335,3584],],
'144':[[170,274],],
'173':[[128,24],[306,1069],[306,1127],[134,28],[302,29],[322,25],[306,363],[306,380],],
'186':[[170,277],],
'215':[[134,68],[302,65],],
'241':[[246,1257],],
'412':[[179,1452],[179,454],[290,188],[290,284],[290,508],[179,230],[179,134],[179,1241],],
'447':[[322,200],[128,198],],
'1589':[[306,1155],[306,1137],[306,1096],[306,1118],[48,3408],],
'1755':[[48,3440],],
'1827':[[48,3422],],
'1832':[[48,3430],],
'1900':[[306,1362],[48,4054],],
'2859':[[128,52],[322,49],],
},{'123':[[48,3436],[335,2914],[335,2149],[306,1195],],
'144':[[54,1518],],
'147':[[306,1597],[48,4864],[48,4787],[306,1206],],
'1573':[[335,3024],[335,2172],[48,3445],],
'1741':[[54,1510],[48,4773],[306,1589],[48,4853],],
},{'79':[[335,2324],[335,1843],],
'83':[[70,49],],
'199':[[384,3665],],
'215':[[48,3498],],
'3272':[[179,1239],[179,132],[290,186],],
'4283':[[384,5598],],
'5140':[[384,8235],],
},{'726':[[48,3529],],
'1101':[[48,3506],],
'1843':[[118,35],[118,91],[118,111],[118,212],[197,447],[197,468],[197,486],[244,39],[244,243],[256,18],[256,34],[384,5025],],
},{'12':[[48,3509],],
'43':[[246,1716],],
},{'12':[[214,376],],
'13':[[384,3098],],
'23':[[306,687],],
'39':[[341,263],[307,263],],
'277':[[384,4100],[384,4053],[384,4072],[384,4086],],
'1850':[[48,3510],],
},{'575':[[48,3574],],
},{'93':[[48,3808],],
'140':[[48,4480],],
'174':[[306,914],],
'520':[[48,3584],],
'1329':[[48,3706],[306,951],],
'1651':[[306,1355],[48,3862],[306,1048],[48,4047],[48,4082],[48,4324],[48,4354],[48,3803],[306,1390],],
'1667':[[306,1239],[48,3911],],
'1877':[[48,3726],[306,971],],
'1881':[[48,3746],[306,991],],
'1896':[[48,3865],],
},{'149':[[48,3604],],
},{'12':[[306,947],[384,9086],[48,3622],],
},{'15':[[48,3931],[306,1262],],
'23':[[48,3629],],
'26':[[48,3677],],
'124':[[48,3719],[306,964],],
'1667':[[48,4498],[48,3957],[48,3970],[48,4170],[306,1287],],
'2066':[[117,28],[167,28],],
},{'16':[[48,3639],],
'31':[[384,6853],],
'39':[[355,724],],
'203':[[84,245],],
},{'199':[[48,3642],],
},{'31':[[48,3648],],
},{'2':[[190,42],],
'65':[[356,34],],
'180':[[67,58],],
'297':[[186,209],],
'1859':[[48,3649],],
},{'16':[[391,59],[48,3655],],
'215':[[381,211],],
'267':[[381,139],],
'2315':[[161,84],],
'4629':[[384,9672],],
},{'1861':[[381,212],[391,60],[48,3656],],
},{'255':[[48,3669],],
},{'12':[[384,3362],],
'13':[[384,3354],[384,4117],],
'351':[[48,3673],],
'580':[[384,8084],],
'700':[[384,3955],],
'2675':[[384,6983],],
'4903':[[384,4188],],
},{'30':[[48,3690],],
'43':[[246,1053],[54,1419],[83,34],[181,915],[335,1995],],
'63':[[54,250],],
'224':[[246,941],[181,782],],
'248':[[246,543],],
},{'19':[[48,3696],],
'45':[[84,184],],
'845':[[314,104],],
},{'1':[[176,240],],
'39':[[384,119],],
'420':[[73,76],],
'430':[[48,3700],],
'978':[[231,69],],
'990':[[116,114],],
},{'12':[[48,3703],[363,461],[335,875],[384,9112],],
'849':[[384,8292],],
'1029':[[153,1255],[153,797],[153,1062],],
'2967':[[153,590],],
},{'1868':[[48,3704],],
'1923':[[48,4024],],
},{'313':[[306,953],[48,3708],],
'1872':[[48,4485],[306,1248],[48,3920],],
'1909':[[48,3923],],
'4181':[[306,1252],],
},{'1870':[[306,954],[48,3709],],
},{'124':[[306,956],[48,3711],],
'1667':[[48,4484],[306,1247],[48,3919],],
},{'124':[[306,960],[48,3715],],
'1667':[[48,4487],[48,4189],[306,1317],[306,1529],[48,3986],],
},{'124':[[306,962],[48,3717],],
'1667':[[48,4494],[306,1321],[48,3990],],
},{'124':[[306,966],[48,3721],],
'1667':[[48,4501],[306,1325],[48,3994],],
},{'124':[[306,968],[48,3723],],
'1667':[[48,4505],[306,1329],[48,3998],],
},{'124':[[306,970],[48,3725],],
'1667':[[48,4509],[306,1333],[48,4002],],
},{'16':[[48,3728],[161,525],[306,973],[321,206],[353,57],[339,269],],
'31':[[315,177],[57,87],[289,177],],
'39':[[48,4738],],
'203':[[189,430],],
'236':[[93,36],],
'237':[[93,85],],
'277':[[235,194],[381,63],[302,87],[134,90],],
'349':[[125,242],[125,226],],
'408':[[93,80],],
'700':[[306,301],],
'1911':[[189,633],[213,478],],
},{'19':[[306,978],[48,3733],],
},{'1401':[[306,987],[48,3742],],
},{'173':[[306,990],[48,3745],],
'1667':[[306,1241],[48,3913],],
},{'1853':[[48,3747],[48,3809],[306,992],],
'1883':[[306,1002],[48,3757],],
'1884':[[48,3777],[48,3782],[48,3787],[48,3792],[48,3772],[48,3767],[306,1027],[306,1022],[306,1037],[306,1017],[306,1012],[306,1007],[306,1032],[48,3762],],
'1895':[[48,3848],[48,3843],[48,3838],[48,3828],[48,3823],[48,3818],[48,3833],[48,3853],],
},{'124':[[48,3756],[306,1001],],
'173':[[306,995],[48,3750],],
'1589':[[306,1046],[48,3801],],
},{'124':[[48,3753],[306,998],],
'1589':[[306,1044],[48,3799],],
'1650':[[306,1040],[48,3770],[306,1035],[48,3775],[306,1030],[48,3780],[48,3765],[48,3785],[306,1020],[48,3790],[306,1015],[48,3795],[306,1010],[306,1025],[48,3760],[306,1005],],
'1884':[[306,1006],[48,3796],[306,1011],[48,3791],[306,1016],[48,3786],[306,1021],[48,3781],[306,1026],[48,3776],[306,1031],[48,3771],[306,1036],[48,3766],[306,1041],[48,3761],],
},{'1882':[[48,3819],[306,1003],[48,3758],],
},{'1882':[[48,3824],[306,1008],[48,3763],],
},{'1882':[[48,3829],[306,1013],[48,3768],],
},{'1882':[[48,3834],[306,1018],[48,3773],],
},{'1882':[[48,3839],[306,1023],[48,3778],],
},{'1882':[[48,3844],[306,1028],[48,3783],],
},{'1882':[[48,3849],[306,1033],[48,3788],],
},{'1882':[[48,3854],[306,1038],[48,3793],],
},{'173':[[48,3806],],
'1920':[[48,4512],],
},{'124':[[48,3815],],
'173':[[48,3811],],
'1589':[[48,3860],],
},{'124':[[48,3813],],
'1589':[[48,3858],],
'1653':[[48,3822],[48,3852],[48,3827],[48,3847],[48,3832],[48,3842],[48,3817],[48,3837],],
'1885':[[48,3820],],
'1886':[[48,3825],],
'1887':[[48,3830],],
'1888':[[48,3835],],
'1889':[[48,3840],],
'1890':[[48,3845],],
'1891':[[48,3850],],
'1892':[[48,3855],],
},{'628':[[48,3897],],
'1329':[[48,3864],],
'1901':[[48,3883],],
'1967':[[48,4850],],
},{'1853':[[48,3866],],
},{'23':[[48,3871],],
'5183':[[384,9457],],
},{'404':[[48,3873],],
'1101':[[48,4897],],
},{'173':[[306,1052],[48,3875],],
'306':[[306,1361],[48,4053],],
},{'173':[[48,3882],],
'1899':[[48,4898],],
},{'175':[[48,3886],[48,3889],[48,3892],[306,1226],[306,1223],[306,1220],[306,1217],],
'476':[[306,1540],[48,4200],],
'651':[[48,4155],[306,1497],],
'750':[[48,4166],],
'751':[[306,1508],],
'933':[[306,1470],[48,4102],[306,1425],],
'1573':[[306,1503],[48,4161],[306,1536],[48,4196],],
'1651':[[48,3908],],
'1667':[[48,4210],],
'1873':[[306,1530],[48,4190],],
'1896':[[48,3898],[48,3884],],
'1908':[[48,3905],],
'1916':[[48,4203],[306,1543],],
'1917':[[48,4207],],
'1918':[[306,1442],[48,4121],],
'1925':[[48,4071],[306,1379],],
'4150':[[306,1231],[306,1215],[306,346],],
},{'1902':[[48,3887],[48,4072],[48,4103],[48,4122],[48,4204],[306,1218],[306,1380],[306,1426],[306,1443],[306,1471],[306,1544],],
},{'75':[[306,1111],[306,1200],],
'1902':[[48,4201],[48,4197],[48,4191],[48,3890],[306,1221],[306,1531],[306,1537],[306,1541],],
},{'75':[[306,1109],[306,1198],],
'1902':[[48,4167],[48,4162],[48,4156],[48,3893],[306,1224],[306,1498],[306,1504],[306,1509],],
},{'75':[[306,1592],],
'147':[[306,1565],],
'173':[[306,1234],[306,1556],[48,3901],],
'175':[[306,1595],],
'1589':[[306,1388],[48,4080],],
'1667':[[48,3916],[306,1244],],
'1907':[[306,1559],],
},{'236':[[306,1558],[306,1236],[48,3903],],
'1004':[[306,1563],],
'1573':[[306,1352],[48,4044],],
'1906':[[306,1593],],
},{'83':[[335,1223],],
'136':[[335,1749],[335,1614],[335,1475],],
'349':[[384,8125],],
'436':[[335,1498],],
'502':[[384,5987],],
'681':[[335,1321],],
'1170':[[54,606],],
'1211':[[179,883],],
'1907':[[48,3904],],
'2455':[[384,6011],],
'2528':[[335,1771],[335,1632],],
'2973':[[153,592],[153,1064],[153,1257],[153,799],],
'4150':[[306,1583],],
'4310':[[335,1271],],
},{'94':[[306,405],],
'1029':[[306,450],],
'1180':[[306,423],],
'1592':[[48,3974],[48,3961],[48,3922],],
'1712':[[306,396],],
'4151':[[306,454],],
},{'15':[[384,6574],],
'59':[[84,132],],
'613':[[384,9168],],
'1719':[[197,173],[179,926],[335,176],[70,292],],
'1870':[[306,1253],[48,3924],],
'4722':[[384,846],],
},{'18':[[384,9521],],
'196':[[222,23],],
'203':[[113,61],[160,300],[384,6702],],
'232':[[101,23],],
'290':[[102,168],],
'305':[[384,9184],],
'411':[[384,4561],],
'447':[[189,632],[213,477],],
'705':[[384,5089],],
'1280':[[384,2673],],
'1856':[[306,1263],[48,3932],],
'2026':[[384,806],],
'4477':[[355,335],],
'4782':[[384,1603],],
},{'343':[[306,1270],[48,3939],],
},{'3':[[384,6962],],
'16':[[80,143],[200,245],[296,162],[186,248],],
'31':[[384,9130],],
'224':[[355,652],[246,1570],[246,1583],],
'250':[[200,258],],
'299':[[384,9734],],
'349':[[384,6656],[384,7853],],
'506':[[235,428],],
'844':[[384,4419],],
'887':[[384,9535],],
'1719':[[306,1295],[48,3963],],
'1970':[[48,4845],],
'1993':[[246,1427],],
'2082':[[95,76],],
'2132':[[335,1113],],
'3653':[[246,1471],],
'4190':[[384,1542],],
'4256':[[331,219],],
},{'16':[[381,122],],
'23':[[381,324],],
'1719':[[306,1307],[48,3976],],
'3130':[[161,514],],
},{'2':[[249,87],[179,41],],
'5':[[384,5524],[384,4617],],
'8':[[384,5531],[384,4629],],
'10':[[384,5651],[384,8667],],
'12':[[384,2629],],
'33':[[384,6952],[384,3311],[384,8523],[384,6385],[384,3297],[384,3304],[384,531],[384,538],[384,699],[384,706],[384,713],[384,2550],[384,2558],[384,8095],[384,4035],],
'50':[[384,7210],],
'67':[[306,1309],[48,3978],],
'77':[[384,3331],],
'107':[[384,7327],],
'205':[[214,43],],
'217':[[384,5517],],
'277':[[214,51],[171,1334],[303,53],[227,110],[227,251],[303,4],],
'443':[[303,85],],
'489':[[303,61],],
'792':[[384,5342],[384,5453],[384,7954],],
'1160':[[384,5578],[303,26],],
'1211':[[96,48],],
'1503':[[384,8677],],
},{'182':[[306,1315],[48,4232],[48,3984],],
'333':[[48,4567],],
'742':[[48,4584],],
'1873':[[48,4488],],
'1904':[[306,1542],[48,4202],],
'1941':[[48,4779],[48,4731],],
'1959':[[48,4889],],
},{'52':[[306,1382],[48,4074],[48,4710],],
'124':[[48,4496],],
'182':[[48,4206],[306,1546],],
'236':[[48,4571],[48,3988],[306,1319],[48,4227],],
'333':[[48,4609],],
'1423':[[48,4575],],
'1573':[[48,4026],[306,1335],],
'1836':[[48,4577],],
'1903':[[306,1444],[48,4123],],
'1918':[[48,4100],[306,1468],[48,4361],[306,1423],],
'1924':[[48,4733],[48,4777],[48,4365],[48,4395],],
'1926':[[306,1473],[306,1428],[48,4105],],
'1929':[[306,1448],[48,4127],],
'1937':[[48,4214],[48,4603],],
'1942':[[48,4330],],
'1946':[[48,4334],],
},{'124':[[48,4503],],
'186':[[48,4028],[306,1337],],
'236':[[48,4356],[48,3992],[306,1323],],
'333':[[306,1370],[48,4062],],
'1279':[[48,4360],],
'1532':[[48,4403],],
'1573':[[48,4399],[306,1422],[306,1467],[48,4099],],
'1853':[[48,4048],[306,1356],],
'1926':[[306,1441],[306,1400],[48,4092],[48,4120],],
'1949':[[48,4410],],
'1951':[[48,4390],],
},{'52':[[306,1395],[48,4087],],
'124':[[48,4507],],
'236':[[48,4268],[306,1327],[48,3996],],
'333':[[306,1372],[48,4064],[48,4286],],
'1004':[[306,1348],[48,4040],],
'1573':[[306,1339],[306,1343],[306,1475],[48,4030],[48,4107],[306,1430],[48,4035],],
'1917':[[48,4331],[48,4335],],
'1920':[[48,4421],],
'1927':[[48,4419],[306,1455],[48,4134],[48,4429],],
'1928':[[306,1435],[48,4112],[306,1480],],
'1931':[[48,4138],[306,1459],],
},{'124':[[48,4511],],
'186':[[48,4033],[306,1341],],
'236':[[48,4412],[306,1331],[48,4000],],
'333':[[48,4066],[306,1374],],
'1519':[[48,4425],[48,4440],],
'1573':[[48,4433],],
'1918':[[48,4049],[306,1357],],
'1919':[[48,4108],[48,4420],[306,1476],[306,1431],],
'1928':[[306,1453],[48,4132],],
'1949':[[48,4444],],
},{'1877':[[48,4003],],
},{'31':[[48,4021],],
'938':[[125,88],],
'4378':[[343,84],],
},{'12':[[48,4023],],
},{'23':[[48,4690],],
'173':[[48,4708],[48,4225],],
'175':[[48,4783],],
'285':[[48,4068],[306,1376],],
'436':[[48,4669],],
'457':[[48,4521],],
'1417':[[48,4299],],
'1916':[[48,4732],],
'1940':[[48,4776],],
'1942':[[48,4394],],
'1949':[[48,4364],],
},{'63':[[306,1378],[48,4070],],
},{'173':[[48,4077],[306,1385],],
'264':[[48,4119],[306,1440],],
'1589':[[306,1399],[48,4091],],
'1903':[[306,1427],[306,1472],[48,4104],],
},{'63':[[48,4301],],
'175':[[48,4461],[48,4178],[306,1518],],
'741':[[48,4263],[48,4084],[306,1392],],
'748':[[48,4270],],
'933':[[306,1478],[306,1433],[48,4110],],
'1905':[[48,4168],[306,1510],],
'1920':[[306,1454],[48,4133],],
'1927':[[48,4462],],
'1942':[[48,4428],],
'1949':[[48,4418],],
},{'173':[[306,1397],[48,4089],],
'264':[[48,4131],[306,1452],],
'1927':[[306,1434],[306,1479],[48,4111],],
},{'236':[[306,1438],[48,4117],],
'1573':[[306,1447],[48,4126],],
},{'7':[[199,26],],
'12':[[363,613],],
'31':[[363,736],],
'140':[[363,394],],
'389':[[363,29],],
'506':[[355,1456],],
'1117':[[199,92],],
'1917':[[306,1445],[48,4124],],
'1919':[[306,1456],[48,4135],],
'2132':[[335,362],[335,426],[335,638],[335,1232],[179,790],[335,3325],[335,1762],[335,1484],[335,1623],],
'2208':[[335,1374],[54,1012],],
'2355':[[70,726],[197,569],],
'2585':[[384,6419],],
'2967':[[153,727],],
'3514':[[355,1423],],
'4309':[[335,1514],[335,1287],[335,1671],[335,1820],],
'4310':[[335,1665],[335,1304],[335,1814],[335,1525],],
'4331':[[335,2928],],
'4391':[[335,3744],],
},{'236':[[306,1450],[48,4129],],
'1573':[[306,1458],[48,4137],],
},{'139':[[306,1486],],
'815':[[48,4144],],
'5064':[[384,6210],],
},{'19':[[48,4247],[349,58],],
'23':[[48,4146],[306,1488],[349,85],],
'128':[[123,22],],
'290':[[384,2509],],
'489':[[117,33],[167,33],],
'884':[[384,2521],],
'1161':[[48,4279],],
},{'19':[[306,1492],[48,4150],],
},{'52':[[48,4159],[48,4723],[306,1501],],
'236':[[48,4274],[306,1495],[48,4586],[48,4153],],
'333':[[48,4288],[48,4605],[48,4601],],
'1939':[[48,4212],],
},{'23':[[48,4675],],
'143':[[48,4181],[306,1521],],
'175':[[48,4746],],
'625':[[48,4728],],
'740':[[48,4712],],
'1573':[[48,4717],],
'1597':[[48,4735],],
'1936':[[48,4747],],
},{'52':[[48,4194],[48,4715],[306,1534],],
'236':[[48,4186],[48,4582],[306,1526],],
'333':[[48,4607],],
'1935':[[48,4602],[48,4213],],
},{'1902':[[48,4208],],
},{'1902':[[48,4211],],
},{'94':[[48,4624],[48,4222],],
'627':[[48,4775],],
'1029':[[48,4548],[48,4532],],
'1576':[[48,4833],],
'1577':[[48,4536],],
},{'63':[[48,4523],],
'139':[[48,4730],],
'175':[[48,4785],],
'654':[[48,4720],[48,4230],],
'1573':[[48,4725],],
'1917':[[48,4778],],
'1927':[[48,4271],],
},{'124':[[48,4492],],
'147':[[48,4358],[48,4414],],
'1278':[[48,4760],[48,4769],[48,4234],],
'1916':[[48,4780],],
'1947':[[48,4329],],
'1954':[[48,4393],],
'1955':[[48,4427],],
'1966':[[48,4764],],
},{'15':[[48,4238],],
'1591':[[48,4750],],
'3935':[[246,1494],],
},{'525':[[48,4255],],
},{'52':[[48,4266],],
'236':[[48,4260],],
},{'52':[[48,4340],],
'236':[[48,4322],],
'1519':[[48,4327],],
'1532':[[48,4333],],
},{'7':[[191,3],[211,150],[191,304],[254,225],[171,586],[92,162],[244,5],],
'52':[[197,353],[70,501],],
'117':[[72,0],],
'140':[[168,39],],
'171':[[153,421],],
'236':[[72,16],],
'247':[[54,409],],
'420':[[235,328],],
'667':[[244,257],],
'1364':[[235,97],[384,5160],[277,432],],
'1379':[[384,6617],],
'1946':[[48,4328],],
'2370':[[384,4942],],
'3533':[[335,1157],[335,491],[335,2576],[335,3210],[335,3592],[335,1896],[335,713],[179,1151],[335,311],],
},{'173':[[48,4338],],
'1589':[[48,4450],[48,4344],],
'1940':[[48,4537],],
},{'236':[[48,4448],],
'264':[[335,1368],],
'815':[[48,4409],[48,4443],],
'933':[[48,4417],[48,4363],],
'1589':[[335,825],[335,1330],[48,4342],],
'1693':[[335,1326],],
'1917':[[48,4396],],
'1919':[[48,4430],],
'1949':[[48,4352],],
'1950':[[48,4351],],
'2208':[[335,1383],],
'2211':[[335,1351],[335,861],],
'2935':[[335,846],],
'4296':[[335,865],],
'4311':[[335,1353],],
},{'1589':[[48,4350],],
'1667':[[48,4515],],
},{'7':[[217,56],],
'140':[[48,4375],],
'271':[[217,193],],
'791':[[70,487],[48,4389],],
'3526':[[179,1133],],
'3698':[[217,111],],
},{'562':[[48,4380],],
},{'7':[[89,3],[89,486],[124,50],[372,5],[171,635],[369,39],[377,42],],
'117':[[233,0],],
'236':[[233,16],],
'474':[[372,54],],
'506':[[235,219],],
'1918':[[48,4391],],
'2180':[[153,428],],
},{'7':[[152,50],],
'380':[[153,426],],
'894':[[152,115],],
'1953':[[48,4392],],
},{'7':[[171,520],[363,3],[254,159],[211,84],[92,96],[363,761],],
'12':[[72,59],[384,5156],[244,213],[52,109],[118,182],[384,5030],[244,128],[118,93],],
'13':[[384,6288],],
'15':[[384,4769],[336,98],],
'23':[[384,4863],],
'33':[[95,101],],
'55':[[197,221],[70,384],],
'67':[[52,161],],
'77':[[274,149],[99,60],],
'89':[[335,1065],],
'117':[[235,0],],
'147':[[52,149],],
'150':[[266,201],[118,163],[335,955],[277,331],],
'165':[[251,25],],
'197':[[99,237],[274,645],],
'224':[[335,292],],
'236':[[235,14],],
'359':[[274,620],],
'420':[[118,41],[244,42],],
'447':[[335,3190],],
'631':[[355,108],],
'667':[[142,186],],
'931':[[355,553],],
'1033':[[214,63],],
'1225':[[355,37],],
'1388':[[179,722],],
'1391':[[95,146],],
'1462':[[274,288],],
'1832':[[70,579],[197,379],],
'1920':[[48,4426],],
'2127':[[335,2662],[335,1921],[335,3227],[335,3704],[54,440],[335,1199],[335,774],[335,400],[335,337],[335,1712],[277,420],],
'2675':[[384,3200],[384,2990],],
'3186':[[363,327],],
'4316':[[335,1414],[335,1561],],
'4317':[[335,1425],[335,1571],],
},{'7':[[217,38],],
'33':[[344,271],],
'555':[[277,506],],
'791':[[335,1893],[54,382],[335,1179],],
'1319':[[217,170],],
'1949':[[48,4431],],
'2126':[[335,3232],[335,3709],],
'2568':[[153,330],],
'3527':[[179,1095],],
},{'236':[[48,4446],],
'333':[[48,4459],],
'1948':[[48,4538],],
},{'19':[[314,90],],
'343':[[48,4473],],
},{'333':[[48,4565],],
'958':[[48,4888],],
'1917':[[48,4572],],
},{'79':[[161,477],],
'161':[[384,635],],
'545':[[48,4621],],
'4048':[[274,131],[274,458],],
'4049':[[274,461],[274,134],],
'4193':[[341,268],[307,268],],
},{'1586':[[48,4626],],
'4149':[[306,308],],
},{'63':[[48,4632],],
},{'16':[[345,25],[210,173],[384,7103],[345,34],],
'31':[[266,262],[384,5052],],
'43':[[266,243],],
'149':[[384,5794],],
'203':[[159,42],],
'224':[[381,287],],
'277':[[95,99],[384,7757],[381,295],[381,582],[381,258],[381,232],[384,6194],[384,6167],[384,7783],],
'349':[[116,95],[367,131],[204,60],[75,97],[250,128],[116,111],],
'491':[[384,4345],],
'596':[[384,6866],],
'598':[[48,4656],[153,1242],],
'1003':[[384,5416],],
'1131':[[231,93],],
'1169':[[384,4440],],
'1170':[[384,9187],],
'1680':[[335,1019],[335,972],],
'2378':[[75,39],[313,62],],
'3961':[[246,1920],],
},{'23':[[48,4692],],
},{'31':[[48,4742],],
},{'7':[[92,154],[171,578],[211,142],[220,5],[254,217],[268,3],[268,60],],
'117':[[225,0],],
'123':[[225,16],],
'667':[[220,132],],
'875':[[384,7693],],
'1652':[[48,4763],],
'4537':[[363,724],],
},{'12':[[161,448],[187,178],],
'39':[[384,5997],[235,404],],
'68':[[384,9662],[384,5065],[384,9276],[384,9556],[384,9240],[384,3792],],
'85':[[384,5858],[335,2996],],
'164':[[160,272],[384,6870],[336,125],[160,683],[358,337],[53,76],[161,129],[261,177],],
'277':[[384,16],],
'351':[[340,163],[308,196],],
'502':[[235,423],],
'817':[[384,6439],],
'926':[[363,121],],
'1132':[[164,314],],
'1763':[[48,4849],[48,4794],[48,4871],],
},{'147':[[48,4840],],
'236':[[48,4828],],
'1004':[[48,4835],],
'1969':[[48,4858],],
},{'173':[[48,4831],],
'175':[[48,4860],],
'1101':[[48,4857],],
'1573':[[48,4837],],
'1969':[[48,4861],],
},{'1592':[[48,4844],],
},{'39':[[277,785],],
'203':[[121,508],],
'554':[[48,4880],],
'921':[[235,211],[384,2169],],
'1591':[[153,284],],
},{'316':[[48,4905],],
},{'1972':[[48,4906],],
},{'124':[[48,4922],[48,4976],],
'224':[[48,4908],],
},{'884':[[48,4912],],
},{'884':[[48,4957],],
'1283':[[48,4932],],
'1975':[[48,4913],],
'1976':[[48,4928],[48,4935],],
'1983':[[48,4927],],
'1984':[[48,4934],],
},{'1976':[[48,4914],],
},{'19':[[48,4947],],
'1976':[[48,4958],],
'1977':[[48,4915],],
'1986':[[48,4952],],
},{'1978':[[48,4916],],
},{'75':[[48,4918],],
},{'1980':[[48,4919],],
},{'884':[[48,4924],],
},{'884':[[48,4926],],
},{'1976':[[48,4933],],
},{'19':[[48,4943],],
},{'124':[[48,4951],],
},{'140':[[48,4972],],
},{'333':[[306,899],],
'1589':[[306,864],],
'1652':[[306,868],],
'1987':[[48,4973],],
'2302':[[306,906],],
'4170':[[306,874],],
},{'241':[[48,4979],],
},{'55':[[274,35],],
'63':[[214,74],[355,56],],
'77':[[384,743],],
'128':[[257,44],],
'205':[[355,670],],
'305':[[89,343],],
'433':[[277,874],],
'926':[[277,925],],
'1466':[[49,30],],
},{'19':[[180,187],[49,58],[49,367],[62,109],[384,3623],[384,2903],[121,545],[153,773],[153,996],[160,350],[342,196],[180,158],[335,1852],[335,944],[251,215],[251,280],[384,1617],],
'149':[[178,239],],
'280':[[246,468],],
'546':[[49,45],],
'931':[[95,159],],
'1109':[[274,313],],
'1374':[[121,182],],
'1424':[[384,4806],],
},{'33':[[214,98],[49,54],],
},{'36':[[161,74],],
'197':[[246,934],],
'207':[[246,361],[246,1462],[246,1453],[246,1664],],
'575':[[246,1610],],
'707':[[49,64],],
'939':[[246,1419],[246,1426],[246,786],[246,382],[246,344],[246,889],[246,822],],
},{'203':[[49,76],],
},{'48':[[384,9801],],
'152':[[49,96],],
'374':[[355,27],],
'518':[[194,94],],
'3131':[[384,1432],],
},{'152':[[49,98],],
'857':[[181,334],],
},{'43':[[121,63],[340,112],[308,145],[49,109],],
'63':[[161,165],],
'1244':[[340,133],[308,166],],
},{'19':[[246,1745],],
'34':[[249,57],],
'59':[[49,131],],
'275':[[161,467],],
'3096':[[249,70],],
},{'20':[[384,7396],],
'648':[[49,143],],
'724':[[327,24],[383,24],[104,24],],
'924':[[49,158],],
},{'1999':[[49,159],[49,144],],
},{'10':[[261,143],],
'47':[[49,146],],
'199':[[153,1039],[54,161],],
'645':[[336,46],],
'1180':[[384,7575],],
'1504':[[358,303],],
'1955':[[52,150],],
'4420':[[342,216],[342,187],],
},{'128':[[273,20],],
'199':[[49,150],],
},{'33':[[49,162],],
'543':[[49,228],],
},{'39':[[347,49],[53,72],[122,122],],
'225':[[84,156],[49,182],],
'1229':[[50,37],],
},{'19':[[49,237],],
'33':[[49,190],],
},{'3':[[194,67],],
'7':[[206,94],],
'12':[[352,149],[193,149],[274,368],[62,77],[362,64],],
'23':[[102,185],],
'30':[[274,571],],
'39':[[260,94],],
'50':[[274,348],],
'57':[[218,276],],
'73':[[181,103],[49,292],],
'128':[[372,22],[222,20],],
'130':[[274,711],[182,47],],
'152':[[181,243],],
'305':[[153,1087],],
'462':[[218,255],],
'681':[[54,806],[54,782],],
'700':[[49,194],],
'728':[[54,168],],
'877':[[182,29],],
'1155':[[274,636],],
'1360':[[274,807],[274,724],],
'2004':[[50,38],],
'2199':[[54,932],],
'4296':[[335,869],],
},{'7':[[152,98],],
'19':[[49,219],],
'23':[[105,40],],
'868':[[384,5816],],
'1445':[[384,1748],],
'2698':[[105,68],],
},{'19':[[49,266],],
'33':[[188,217],],
'59':[[160,609],],
'121':[[49,241],],
'220':[[160,587],],
'277':[[277,727],],
'646':[[384,2910],[338,86],],
'728':[[338,65],],
'2028':[[160,244],],
'3653':[[188,214],],
},{'2008':[[49,242],],
},{'3':[[181,511],[277,711],],
'26':[[121,414],[242,62],],
'33':[[384,6050],],
'34':[[214,295],[176,266],],
'55':[[331,106],],
'63':[[49,244],],
'77':[[384,8310],],
'147':[[191,263],],
'223':[[274,555],],
'237':[[331,497],],
'346':[[246,1337],],
'360':[[274,540],],
'439':[[242,181],],
'529':[[384,8188],],
'979':[[246,1300],],
'1117':[[246,1065],],
'1160':[[121,578],],
'1163':[[121,513],],
'1198':[[244,140],],
'1299':[[266,308],],
'1805':[[277,675],],
'1811':[[384,6862],],
'3566':[[181,410],],
},{'28':[[49,247],],
'301':[[384,1096],],
'1158':[[49,303],],
},{'7':[[350,183],],
'23':[[349,82],],
'431':[[57,78],],
'656':[[49,251],],
'2031':[[49,415],],
'2037':[[49,442],],
},{'7':[[372,52],[124,46],[171,631],[372,3],[377,38],[369,35],[234,5],],
'18':[[49,258],],
'117':[[178,0],],
'150':[[274,742],],
'158':[[233,42],],
'224':[[355,682],],
'228':[[178,16],],
'346':[[372,35],],
'474':[[234,427],],
'1326':[[335,574],],
'2675':[[384,5809],],
},{'7':[[233,3],[124,48],[171,633],[178,5],[369,37],[233,46],[377,40],],
'63':[[233,44],],
'73':[[49,260],],
'117':[[372,0],],
'140':[[178,296],],
'217':[[335,593],],
'474':[[178,325],],
'739':[[178,305],],
'1493':[[372,16],],
},{'33':[[49,278],],
'89':[[49,333],],
},{'12':[[49,404],[331,430],[110,28],[384,8250],],
'68':[[84,430],],
'700':[[49,282],],
'1442':[[363,640],],
},{'12':[[206,65],],
'43':[[160,434],],
'63':[[153,747],],
'128':[[113,18],],
'202':[[49,285],],
'203':[[160,507],],
'861':[[181,860],],
'1211':[[153,1340],],
},{'33':[[49,305],],
},{'196':[[49,331],],
},{'16':[[49,336],],
'43':[[176,202],],
'215':[[122,126],],
'548':[[89,208],],
'1680':[[101,51],],
},{'73':[[49,344],],
},{'16':[[152,173],],
'19':[[213,354],],
'23':[[54,467],],
'152':[[49,351],],
'196':[[218,267],],
'700':[[49,355],],
'1003':[[89,95],],
'1128':[[152,198],],
},{'23':[[49,358],[49,374],[152,140],[152,158],[152,183],[359,49],],
'33':[[246,523],],
'162':[[359,40],],
'680':[[152,207],],
},{'1381':[[49,369],],
},{'31':[[49,377],],
'203':[[342,133],],
'817':[[384,9635],],
},{'55':[[49,388],[152,149],[341,57],[307,57],],
'65':[[266,365],],
'131':[[153,139],],
'420':[[335,3437],],
'1128':[[384,788],[384,805],],
'1829':[[153,1060],],
},{'12':[[189,478],],
'67':[[49,423],],
'84':[[49,393],],
'2438':[[229,171],],
},{'27':[[160,243],],
'154':[[49,451],],
'596':[[49,401],],
},{'2028':[[49,402],],
},{'273':[[49,406],],
},{'79':[[49,414],],
},{'3':[[49,421],],
},{'62':[[49,426],],
'84':[[395,82],],
'1194':[[181,950],],
'2228':[[265,20],],
'5054':[[384,5924],],
},{'15':[[384,6855],],
'23':[[49,437],[384,4120],[128,183],[220,61],[335,3563],[253,217],[320,120],[322,185],[335,307],[335,487],[335,709],[335,1153],[335,1886],[335,3206],],
'31':[[84,66],[84,54],],
'33':[[384,7037],],
'144':[[384,9656],],
'288':[[246,1906],],
'349':[[384,110],],
'353':[[384,624],],
},{'2034':[[49,438],],
},{'23':[[160,20],[49,440],],
'277':[[227,27],[171,32],],
'370':[[277,901],],
'490':[[277,17],],
'2547':[[355,71],],
},{'33':[[214,92],],
'2036':[[49,441],],
},{'7':[[369,185],[101,3],[101,79],[305,5],[171,781],[354,70],],
'63':[[160,235],],
'117':[[198,0],],
'232':[[305,91],],
'1225':[[49,445],],
'1493':[[198,16],],
'2997':[[335,905],],
},{'16':[[49,488],],
'23':[[49,464],],
'26':[[384,6336],],
'155':[[379,216],],
'1278':[[384,6774],],
},{'7':[[316,18],],
'229':[[316,70],],
'1225':[[49,480],],
},{'7':[[316,24],],
'63':[[49,482],],
'603':[[316,75],],
},{'7':[[316,101],],
'15':[[371,86],[217,406],[280,93],],
'16':[[384,155],],
'19':[[246,365],[246,1030],[146,157],],
'23':[[224,109],[251,113],],
'26':[[274,124],],
'59':[[384,9880],],
'255':[[224,119],[160,569],[84,104],[246,200],[246,1474],[361,61],],
'308':[[384,4093],],
'330':[[384,4077],],
'531':[[102,48],],
'1002':[[49,485],],
'4400':[[338,77],],
},{'67':[[49,490],],
},{'19':[[49,492],],
},{'12':[[161,323],],
'19':[[355,1286],],
'23':[[290,124],],
'36':[[249,269],[355,325],],
'149':[[70,532],],
'230':[[344,196],],
'420':[[161,78],],
'543':[[355,186],],
'551':[[70,413],[344,246],[197,250],[355,998],],
'596':[[164,533],],
'2044':[[49,493],],
},{'336':[[49,504],],
},{'152':[[49,506],],
},{'7':[[49,517],[114,71],[139,26],[369,449],[171,1045],],
'117':[[357,0],],
'128':[[357,14],],
'313':[[357,12],],
'728':[[353,187],],
'734':[[139,65],],
},{'12':[[69,56],],
'94':[[69,20],[82,157],],
'146':[[50,71],[53,61],],
'615':[[69,71],],
'875':[[69,37],[50,48],[53,38],],
'1053':[[50,20],[53,20],],
'1754':[[82,452],],
},{'63':[[50,73],[53,63],],
'147':[[53,106],],
'182':[[53,22],[82,35],[50,22],],
'1053':[[53,43],[50,53],],
},{'14':[[321,361],[339,289],],
'24':[[384,4377],[384,4393],],
'59':[[313,177],[363,154],[58,20],[58,35],],
'63':[[177,37],],
'67':[[296,153],[50,108],[80,119],],
'143':[[82,354],],
'147':[[82,493],],
'288':[[50,27],[53,27],[82,503],],
'343':[[379,204],],
'1053':[[82,66],[82,236],[82,251],],
},{'3':[[57,279],],
'147':[[53,56],[69,63],[50,66],],
'349':[[181,178],[197,581],[70,739],],
},{'147':[[53,58],[50,68],],
'1229':[[53,74],],
'2228':[[207,27],[148,43],],
},{'16':[[207,83],],
'203':[[53,65],[50,75],],
},{'1521':[[51,15],],
},{'815':[[51,24],],
'3713':[[263,93],],
},{'15':[[127,26],[298,26],],
'2056':[[51,25],],
},{'3':[[95,268],[54,701],],
'18':[[335,1267],[227,113],],
'19':[[54,768],],
'23':[[95,470],[54,698],[54,1087],[54,1105],[54,173],[54,194],[95,169],[303,107],[95,265],[246,149],],
'26':[[127,62],[298,62],[157,67],[365,148],[355,24],[234,418],[51,39],],
'77':[[95,55],[335,1737],[335,1602],[335,1554],[335,1463],[335,1247],[214,18],],
'84':[[384,1064],],
'147':[[160,181],],
'203':[[153,78],[164,192],],
'215':[[335,1391],[335,1678],[335,1536],],
'433':[[303,34],],
'506':[[95,63],],
'615':[[54,670],[335,1091],[95,237],],
'1591':[[335,1586],[335,1776],[335,1441],],
'2332':[[335,1396],],
'3680':[[189,546],],
'4453':[[353,67],],
},{'19':[[52,73],[112,66],[200,237],[200,311],[246,79],[246,1804],[257,193],[320,110],[331,132],[331,291],[331,303],[344,186],],
},{'14':[[384,3633],[390,140],],
'15':[[264,23],],
'19':[[162,365],],
'23':[[244,252],[214,384],[214,348],[118,221],[384,1799],],
'52':[[52,83],],
'79':[[274,448],],
'277':[[384,3388],],
'348':[[274,141],[384,4742],],
'838':[[336,139],],
'3196':[[384,3377],],
'4194':[[307,271],[341,271],],
},{'16':[[52,89],],
'19':[[70,330],[384,8942],],
'31':[[160,525],[339,43],],
'39':[[244,150],],
'130':[[172,149],],
'305':[[162,182],],
'3901':[[246,1003],],
},{'77':[[52,105],],
},{'23':[[266,222],],
'33':[[266,203],],
'147':[[235,364],],
'173':[[235,42],],
'506':[[52,111],],
'1375':[[235,170],],
},{'63':[[52,113],],
'147':[[235,440],],
'165':[[235,177],],
'236':[[235,46],],
},{'23':[[52,167],],
'149':[[52,122],],
'196':[[274,706],[274,700],[274,680],],
'443':[[274,718],],
'1160':[[274,694],],
},{'7':[[82,447],],
'128':[[264,27],],
'176':[[230,23],[375,24],],
'199':[[246,514],],
'250':[[218,182],],
'370':[[52,163],],
'749':[[117,27],],
'751':[[167,27],],
'817':[[384,1210],],
'1314':[[242,184],],
'1498':[[181,429],],
'1955':[[251,26],],
'2135':[[384,6400],],
'5073':[[384,6390],],
},{'7':[[171,582],[268,5],[244,255],[92,158],[211,146],[254,221],[244,3],],
'117':[[118,0],],
'150':[[266,214],[52,203],],
'236':[[118,16],],
'275':[[384,4760],],
'375':[[235,185],],
'667':[[268,62],],
'856':[[52,227],],
'1104':[[384,4528],],
'1364':[[235,444],],
'1391':[[384,2446],],
'2349':[[70,518],],
'3488':[[179,1184],],
},{'19':[[52,207],],
'165':[[172,37],[384,2595],],
'921':[[256,21],],
'2070':[[52,238],],
'2742':[[268,39],],
},{'7':[[201,5],[254,119],[211,44],[92,56],[351,65],[171,480],],
'73':[[118,175],[244,206],],
'117':[[256,0],],
'144':[[172,121],[52,230],],
'203':[[70,490],],
'313':[[256,14],],
'357':[[172,164],],
'667':[[201,28],],
'921':[[244,234],[118,203],],
'2349':[[70,525],],
},{'19':[[160,281],[52,237],],
},{'140':[[52,243],],
},{'12':[[246,870],],
'1465':[[52,245],],
'3917':[[246,1177],],
},{'63':[[54,91],],
'248':[[52,261],],
},{'19':[[246,1045],],
'23':[[246,1057],[52,267],],
},{'26':[[52,302],],
'99':[[54,1149],],
'217':[[218,220],[54,1153],],
'860':[[172,144],],
'2067':[[235,445],],
'2104':[[384,4772],],
},{'3':[[384,3794],],
'23':[[54,343],[54,422],[384,5002],[384,4348],[95,484],[153,352],[153,372],[384,4322],[162,111],[179,1000],[335,226],[384,5072],[335,108],[235,357],],
'26':[[235,345],],
'63':[[244,112],],
'89':[[162,44],[197,60],[70,77],],
'217':[[384,3598],],
'423':[[52,312],],
'470':[[197,196],[70,359],],
'518':[[384,136],[384,163],],
'1627':[[384,1034],],
'3196':[[384,1112],],
'4625':[[384,104],],
'4642':[[384,1020],[384,286],[384,617],],
'4745':[[384,1125],],
'4852':[[384,2482],],
},{'518':[[235,213],],
'1135':[[251,158],],
'1416':[[52,315],],
'4226':[[384,73],],
},{'7':[[133,84],],
'31':[[276,65],[53,99],],
},{'12':[[299,30],[342,218],[181,586],[312,59],[271,30],[192,30],[237,30],[216,30],[205,30],],
'43':[[53,130],],
'128':[[205,38],[205,21],[216,38],[237,21],[192,38],[237,38],[271,21],[192,21],[271,38],[299,21],[216,21],[299,38],],
'305':[[384,9282],],
'351':[[100,147],],
'917':[[331,316],],
'1003':[[181,609],],
},{'15':[[371,90],[280,97],],
'16':[[257,93],],
'19':[[246,773],],
'203':[[53,136],],
'224':[[246,1163],[246,680],],
'343':[[384,2976],],
},{'2':[[54,41],],
'7':[[185,68],[306,1614],[306,9],[197,25],[171,1265],],
'56':[[197,633],],
'62':[[95,206],],
'117':[[54,0],],
'226':[[54,280],],
'275':[[384,7890],],
'375':[[95,504],],
'420':[[384,7498],],
'1591':[[54,337],],
},{'15':[[218,302],[324,27],[95,112],],
'18':[[384,7645],],
'19':[[384,7898],[54,649],[95,344],],
'23':[[54,462],],
'26':[[54,656],[95,223],],
'63':[[95,132],],
'85':[[95,152],],
'107':[[54,392],],
'196':[[95,509],[197,30],[171,1270],[306,14],[306,1619],[197,638],[185,73],[95,211],[54,5],],
'239':[[54,1162],],
'279':[[355,1504],[171,455],[374,38],[95,25],[95,2],[92,31],[355,753],[363,277],[218,312],[355,10],[223,57],[242,7],[242,211],[254,94],[324,37],[54,57],[313,187],],
'359':[[95,41],],
'506':[[54,52],],
'555':[[95,178],],
'602':[[54,61],],
'926':[[95,75],],
'1305':[[95,89],],
'1414':[[54,77],],
'2133':[[95,44],],
'2384':[[218,353],],
},{'2':[[197,41],],
'7':[[54,1520],[153,20],[54,9],[171,1251],[185,54],],
'33':[[249,311],],
'56':[[153,1431],],
'77':[[277,589],],
'79':[[277,208],],
'83':[[355,1466],],
'117':[[197,0],],
'199':[[277,271],],
'226':[[197,119],],
'928':[[197,75],],
},{'78':[[384,7725],],
'79':[[54,44],],
'950':[[384,7548],],
},{'23':[[246,191],[246,204],[54,46],],
},{'19':[[54,65],],
},{'1':[[384,808],],
'12':[[384,2351],],
'16':[[384,3884],],
'217':[[95,60],],
'1120':[[384,1975],],
'2086':[[54,66],],
'3931':[[384,8501],],
},{'2087':[[95,61],[54,67],],
'2090':[[95,71],],
},{'99':[[174,208],],
'1120':[[95,69],[54,70],],
},{'99':[[290,483],[179,429],],
'230':[[257,80],],
'1120':[[242,165],],
'1211':[[355,337],],
'1225':[[200,268],],
'2089':[[54,71],[95,70],],
'4671':[[384,918],],
},{'79':[[54,74],],
},{'77':[[54,80],],
'147':[[54,611],],
'1591':[[54,566],],
'1741':[[54,291],[54,1066],],
'2095':[[54,112],],
},{'23':[[54,82],],
'443':[[186,129],],
'2149':[[95,221],[54,654],],
'3947':[[246,1699],],
},{'12':[[164,537],],
'57':[[164,401],],
'351':[[54,106],],
},{'12':[[90,38],],
'19':[[246,23],[246,1212],[277,801],],
'43':[[54,111],],
'63':[[246,1023],],
'305':[[246,1292],],
'527':[[246,1075],],
'584':[[246,1974],],
},{'2':[[218,272],[54,121],],
'12':[[384,4208],],
'17':[[384,4754],],
'19':[[352,140],[274,639],[274,362],[193,140],[274,648],],
'23':[[326,44],[274,781],[304,386],[384,9546],],
'26':[[304,393],[326,20],],
'34':[[355,1226],[153,1199],],
'47':[[54,486],[140,28],[384,5081],[95,197],[274,720],[144,34],],
'87':[[384,351],],
'99':[[218,241],],
'152':[[384,2717],],
'215':[[326,27],],
'346':[[274,726],[274,809],[274,370],],
'348':[[384,2689],],
'2675':[[384,9531],],
'2941':[[152,84],],
'3721':[[206,79],],
'4765':[[384,1427],],
},{'531':[[181,327],],
'861':[[54,134],],
},{'19':[[70,215],],
'1358':[[384,2436],],
'2097':[[54,135],],
},{'646':[[54,137],],
'728':[[228,27],],
'1452':[[274,451],],
},{'12':[[321,408],],
'15':[[304,318],[54,139],],
'33':[[125,265],],
'597':[[321,56],[84,528],],
'601':[[84,521],],
},{'23':[[54,141],],
'303':[[381,164],],
'513':[[384,9232],],
},{'23':[[54,155],],
'33':[[54,774],],
'128':[[279,16],],
'140':[[62,111],],
'728':[[54,213],],
},{'23':[[246,693],],
'39':[[249,253],],
'224':[[54,158],],
'343':[[382,47],[71,47],],
'531':[[87,64],],
'844':[[161,370],],
},{'12':[[54,163],[54,179],[112,54],[161,69],[384,6395],[384,4771],[384,6405],],
'43':[[189,544],],
'63':[[186,285],],
'199':[[186,494],],
'1158':[[384,1281],],
'4609':[[384,767],],
},{'153':[[118,218],[244,249],],
'203':[[253,174],],
'224':[[246,1220],],
'341':[[384,1906],],
'346':[[335,3003],],
'817':[[335,2689],[335,1946],],
'2104':[[54,164],],
},{'196':[[54,170],],
},{'16':[[176,73],],
'19':[[331,153],],
'203':[[54,176],],
},{'2107':[[54,177],],
},{'1349':[[54,186],],
},{'19':[[54,253],],
'2109':[[54,187],],
},{'23':[[246,496],[342,211],],
'77':[[384,1786],],
'2110':[[54,188],],
'3275':[[246,1438],[246,1385],[246,1346],[246,669],],
'5115':[[384,7516],],
},{'131':[[54,196],],
},{'34':[[206,75],],
'40':[[303,74],],
'61':[[246,752],[355,1016],],
'299':[[246,722],],
'471':[[246,1544],],
'888':[[355,641],],
'2112':[[54,197],],
'2410':[[121,542],],
'3621':[[186,415],],
'3813':[[235,311],],
},{'67':[[54,230],],
'1225':[[54,205],],
},{'19':[[54,208],],
},{'27':[[331,518],],
'136':[[246,1951],],
'2102':[[54,214],],
},{'2116':[[331,519],[54,215],],
},{'2117':[[331,520],[54,216],],
},{'105':[[54,218],],
},{'1288':[[54,221],],
},{'23':[[54,1393],],
'59':[[54,224],],
},{'568':[[331,531],],
'817':[[384,4916],],
'2121':[[54,225],],
},{'482':[[54,232],[54,602],[70,280],[96,117],[176,252],[197,161],[246,1430],[246,1848],[246,1897],[246,1928],[257,141],[277,702],[339,183],],
},{'333':[[54,236],],
},{'96':[[153,267],],
'468':[[153,193],[335,85],[54,274],],
'1391':[[384,4998],],
'1532':[[335,206],[54,334],],
},{'12':[[335,3687],],
'67':[[335,2693],[335,1950],],
'94':[[335,1657],[335,1517],[335,1576],[335,1806],[335,1296],[335,1430],],
'173':[[179,696],[335,495],[179,761],[335,3596],[179,1148],[54,1068],[335,3214],[335,1161],[335,717],[54,407],[54,293],[335,315],],
'235':[[179,1609],],
'264':[[335,1816],[335,1480],[335,358],[335,1510],[335,422],[179,786],[335,1619],[335,1283],[335,1667],[335,1758],[335,1228],[335,3740],[277,530],],
'382':[[335,634],],
'453':[[277,427],],
'1589':[[335,827],[335,1242],[54,1316],[335,1332],[335,1900],[335,2580],],
'1652':[[335,3218],[335,499],[335,1905],[335,721],[335,319],[335,3600],[335,1165],[335,2585],],
'1705':[[335,1830],[335,439],[335,3168],[335,3779],[335,3338],[335,673],[54,631],[335,927],[335,2276],],
'2092':[[54,612],],
'2132':[[54,444],[335,1716],[335,3231],[179,1154],[179,1351],[335,1203],[335,778],[335,1925],[335,624],[335,2666],[335,579],[335,404],[335,341],],
'2135':[[54,528],],
'2211':[[335,1278],[335,1782],[335,1639],[335,1505],],
'2222':[[54,1167],],
'3491':[[179,726],[277,424],],
'3499':[[179,1417],],
'4309':[[335,1565],[335,1418],],
'4328':[[335,2827],[335,2132],],
'4374':[[335,3297],],
'4391':[[335,3708],],
},{'236':[[54,295],[54,439],[335,3703],[335,3225],[335,2661],[54,1070],[335,1920],[335,1711],[179,763],[335,1582],[179,1358],[335,1437],[335,1198],[335,773],[335,591],[335,336],],
'297':[[277,419],],
'333':[[335,1937],[335,2680],[335,418],[335,1733],[335,353],[335,3253],[54,455],[335,607],[335,1598],[335,1453],[335,3722],[335,792],[335,1218],],
'671':[[335,2794],[335,2076],],
'1004':[[335,596],],
'1123':[[335,399],],
'1281':[[335,3237],],
'2126':[[335,1284],[335,3298],[179,1418],[335,635],[335,1481],[335,1506],[335,1243],[335,1279],[179,787],[335,625],[335,1620],[335,1640],[54,529],[335,1668],[335,1511],[335,423],[335,1759],[335,1783],[335,1229],[335,1817],[54,1168],[335,359],[277,531],[54,613],[335,3741],],
'2127':[[335,3226],],
'2132':[[179,1383],],
'2180':[[54,1319],],
'3508':[[179,1378],],
'4295':[[335,830],],
'4312':[[335,1659],[335,1519],[335,1298],[335,1808],],
'4328':[[335,2809],[335,2105],],
'4329':[[335,2260],[335,3147],],
'4371':[[335,3294],],
'4374':[[335,3322],],
},{'26':[[335,3655],],
'94':[[335,3735],[335,1522],[335,1371],[335,1662],[335,1811],[335,1301],],
'143':[[54,599],[335,2154],],
'173':[[54,417],[54,297],[335,322],[54,1072],[335,3609],[335,1168],[335,724],[335,502],],
'396':[[335,1528],[335,1307],[335,3747],[335,1377],],
'933':[[335,3659],],
'1589':[[335,2053],[54,1323],[335,2057],[335,849],[335,1908],],
'1652':[[335,506],[335,3614],[335,1172],[335,1913],[335,326],[335,728],],
'1705':[[54,633],[335,3781],[335,2278],[335,441],[335,675],[335,929],[335,1828],],
'1908':[[335,1615],[335,1322],[335,1750],[335,1476],[335,1224],[54,607],[335,1499],[335,1272],[335,1633],[335,1772],],
'2127':[[54,614],[335,1285],[335,1621],[335,360],[335,424],[335,1512],[335,1669],[335,1482],[335,636],[335,1760],[335,1230],[277,532],[335,1818],[54,530],],
'2131':[[335,1824],[335,1236],[335,1766],[335,1675],[335,1627],[335,921],[335,1533],[335,1312],[335,2270],[335,369],[335,1488],[335,665],[54,556],[335,1388],[54,625],[335,433],],
'4332':[[335,2156],],
},{'236':[[54,1074],[54,299],],
'2127':[[54,1169],],
'2178':[[54,1326],],
'2223':[[54,1194],],
},{'404':[[335,233],[179,1007],[54,350],],
'881':[[54,371],[179,1034],[335,252],],
'1004':[[54,356],[335,238],[179,1013],],
'1029':[[179,1030],],
},{'67':[[335,3497],],
'94':[[335,1124],],
'137':[[335,1435],[335,1422],],
'147':[[54,358],[179,1015],[335,240],],
'170':[[54,635],[179,1611],[335,265],],
'173':[[335,121],[54,352],[179,1009],],
'436':[[335,3509],],
'1101':[[54,442],[335,1923],[335,1714],[335,1201],[335,2664],],
'1281':[[335,577],[335,3229],[335,339],[335,776],],
'1282':[[335,402],],
'1333':[[335,622],],
'1835':[[335,3331],[335,1235],[335,432],[335,1387],[54,624],[335,920],[335,1487],[335,1532],[335,1626],[335,1674],[335,664],[335,1765],[335,1823],[335,368],[335,2269],[335,1311],[335,3159],[54,555],],
'2130':[[335,234],],
'3489':[[179,1349],],
'3500':[[179,1426],],
},{'23':[[335,2897],],
'181':[[179,1160],],
'186':[[335,1112],],
'236':[[335,125],[54,369],[179,1032],[179,767],],
'247':[[335,1170],[335,1911],[335,504],[335,2615],[335,726],[54,419],[335,324],],
'333':[[335,1216],[54,453],[335,2678],[335,1451],[335,790],[335,1596],[335,605],[335,1731],[335,416],[335,351],[335,3251],[335,1935],],
'671':[[335,834],[335,1339],],
'682':[[335,1346],],
'1101':[[335,2578],[54,411],[335,2039],[335,2044],[335,2759],],
'1211':[[335,250],],
'1279':[[179,1153],],
'1281':[[335,1159],[335,493],[335,313],[335,1898],[335,715],[335,3212],],
'1333':[[335,840],],
'1355':[[335,1107],[335,766],[335,537],],
'1510':[[179,1187],],
'1677':[[179,1382],[179,1492],],
'2127':[[335,3238],],
'2128':[[335,2058],[335,2157],[335,434],[335,666],[335,922],[335,637],[54,615],[54,531],[335,361],[335,2271],[335,1825],[335,425],[335,1767],[335,1231],[335,1389],[335,1761],[335,1308],[335,1313],[54,626],[335,1676],[335,370],[335,1378],[335,1237],[335,1628],[335,1622],[335,1483],[335,1489],[54,557],[335,1529],[335,1534],],
'2131':[[335,578],[335,777],[54,443],[335,2665],[335,340],[335,403],[335,1715],[179,1427],[335,1924],[179,1350],[335,3230],[335,623],[335,1202],],
'2146':[[335,1226],[335,1274],[335,1752],[54,609],[335,1324],[335,1635],[335,1478],[335,1617],[335,1774],[335,1501],],
'3500':[[179,789],[179,1420],],
'3501':[[179,804],],
'3541':[[179,1367],],
'3545':[[179,1431],],
'3702':[[335,3512],],
'4071':[[335,429],[335,365],[335,3328],],
'4292':[[335,802],],
'4310':[[335,1134],],
'4359':[[335,2773],[335,3161],],
'4363':[[335,2921],],
'4371':[[335,3258],],
'4372':[[335,3333],[335,3324],],
'4380':[[335,3533],],
'4382':[[335,3542],],
},{'7':[[211,136],[329,72],[295,5],[92,148],[254,211],[171,572],[329,3],],
'117':[[374,0],],
'123':[[374,16],],
'147':[[54,1171],],
'238':[[95,43],[223,48],[218,305],],
'250':[[54,1179],],
'667':[[295,47],],
'1652':[[54,397],],
},{'63':[[251,187],[54,473],],
'128':[[310,20],],
'4554':[[388,77],],
},{'7':[[213,486],[171,621],[377,28],[369,25],[213,3],[124,36],],
'13':[[384,6399],],
'47':[[95,187],],
'62':[[54,482],],
'117':[[218,0],],
'121':[[218,316],],
'228':[[218,14],],
'420':[[54,509],],
'474':[[93,143],],
'1160':[[218,347],],
'1591':[[54,523],],
'2137':[[54,527],],
'2675':[[384,6632],],
},{'12':[[86,237],[135,149],[100,192],],
'18':[[246,1830],],
'19':[[277,94],[384,5757],[179,45],],
'77':[[384,6300],[164,156],],
'431':[[363,241],[57,94],[86,87],],
'468':[[331,74],],
'484':[[86,217],],
'597':[[331,97],],
'1076':[[86,225],],
'1119':[[266,182],],
'2135':[[54,510],],
},{'228':[[54,526],],
'2139':[[54,544],],
},{'147':[[54,546],],
'1493':[[54,542],],
},{'33':[[218,285],],
'38':[[156,127],],
'63':[[305,60],],
'313':[[305,80],],
'2138':[[54,543],],
'2997':[[153,1329],[153,1166],[153,962],[335,888],[153,1387],],
},{'7':[[122,38],],
'12':[[389,24],],
'26':[[272,47],],
'144':[[283,158],],
'152':[[160,310],],
'183':[[198,77],],
'221':[[198,90],],
'1004':[[259,35],],
'2138':[[54,547],],
'2783':[[122,89],],
},{'196':[[54,563],],
'543':[[95,488],],
},{'924':[[54,570],],
},{'12':[[335,1967],[54,572],],
'4329':[[335,2107],],
},{'26':[[395,127],],
'63':[[54,585],],
'77':[[395,105],],
},{'128':[[273,34],],
'162':[[54,597],],
'538':[[246,608],],
},{'2128':[[54,608],[335,1225],[335,1273],[335,1323],[335,1477],[335,1500],[335,1616],[335,1634],[335,1751],[335,1773],],
},{'188':[[54,1446],[54,1466],],
'196':[[54,1497],],
'215':[[54,642],],
'329':[[54,883],],
},{'15':[[174,258],],
'126':[[371,103],[280,110],],
'131':[[99,241],],
'165':[[162,79],],
'185':[[181,611],],
'199':[[345,58],[395,61],],
'241':[[355,612],],
'290':[[153,1018],],
'295':[[373,79],],
'700':[[358,299],[339,295],],
'926':[[54,651],],
'1117':[[218,329],],
},{'23':[[95,220],[186,299],[54,653],],
'33':[[384,4046],],
'255':[[355,104],],
},{'12':[[335,1116],[307,119],[341,119],],
'15':[[384,8284],],
'23':[[335,1096],],
'31':[[54,668],[95,235],],
'275':[[214,362],],
'305':[[152,181],],
'518':[[384,8338],],
'1029':[[335,1087],],
'3785':[[331,507],],
},{'196':[[54,1244],],
'1164':[[121,554],],
'2058':[[95,56],[95,238],[95,266],[54,699],[54,671],],
},{'31':[[95,242],[54,675],],
'67':[[352,131],[193,131],],
'598':[[274,631],],
},{'99':[[179,1279],],
'147':[[179,1299],],
'215':[[179,1276],],
'264':[[95,247],[54,680],],
'333':[[179,1274],],
'3502':[[179,1603],],
'3503':[[179,1283],],
},{'7':[[223,20],],
'12':[[95,407],],
'33':[[95,254],[54,687],],
'2182':[[54,1360],],
},{'7':[[223,26],],
'33':[[95,257],[54,690],],
'152':[[95,409],],
'2182':[[54,1400],],
},{'23':[[95,272],[54,705],],
},{'12':[[95,468],],
'23':[[54,731],[54,712],[95,298],[95,279],],
'26':[[95,486],],
'38':[[54,818],],
'55':[[54,1451],[54,1493],],
'63':[[54,879],],
'2586':[[95,501],],
'2587':[[95,499],],
},{'23':[[54,718],[95,315],[95,285],],
'26':[[95,464],[95,481],],
'33':[[54,814],],
'38':[[54,793],],
'55':[[54,1414],],
'67':[[54,1355],],
'499':[[54,877],],
'2581':[[95,495],],
'2586':[[95,497],],
},{'139':[[335,2619],[54,1021],],
'443':[[95,295],[54,728],],
'1589':[[335,2632],[54,949],],
'1705':[[335,3166],],
'2132':[[335,2760],],
},{'15':[[54,1344],],
'23':[[95,475],],
'26':[[218,173],],
'34':[[95,302],[54,735],],
'59':[[384,6620],],
'81':[[170,188],],
'128':[[198,70],],
'150':[[180,174],],
'165':[[189,557],[213,417],],
'231':[[384,2742],],
'279':[[335,969],[335,937],],
'345':[[335,1328],],
'417':[[220,56],],
'518':[[99,142],[99,255],],
'1160':[[335,958],],
'1237':[[220,110],],
'1260':[[384,1057],],
'1301':[[170,183],],
'1991':[[274,314],],
'2076':[[384,164],[384,137],],
'3575':[[220,107],[335,1034],],
'4304':[[335,1006],],
'4827':[[384,2265],],
},{'7':[[171,528],[211,92],[92,104],[320,5],[254,167],[132,3],[132,38],],
'31':[[218,200],],
'117':[[324,0],],
'182':[[324,16],],
'241':[[95,337],[54,761],[95,403],],
'667':[[320,177],],
'2224':[[54,1217],],
},{'2102':[[54,775],],
},{'3':[[54,784],],
'828':[[54,1277],],
'1004':[[54,1300],[54,1364],[54,1408],],
'2165':[[54,824],],
},{'19':[[54,797],[54,812],],
'67':[[54,822],],
'149':[[54,831],],
'447':[[54,791],],
},{'2164':[[54,823],[54,798],],
'2199':[[54,1041],[54,992],],
},{'3':[[54,808],],
'828':[[54,1280],],
'1004':[[54,1368],[54,1404],],
'2165':[[54,799],],
},{'3':[[277,716],],
'12':[[54,826],],
},{'31':[[70,625],[193,100],[197,489],[352,100],[54,834],],
},{'277':[[54,888],],
'1329':[[54,836],],
'2121':[[54,1394],],
'2187':[[54,886],],
'2217':[[54,1303],],
},{'2169':[[54,837],],
},{'124':[[54,839],],
'656':[[54,929],],
'2233':[[54,1307],],
},{'828':[[54,841],],
'2233':[[54,1362],],
'2240':[[54,1402],],
},{'828':[[54,843],],
'2233':[[54,1366],],
'2240':[[54,1406],],
},{'236':[[54,845],],
'2233':[[54,1328],],
},{'236':[[54,847],],
'2233':[[54,1331],],
},{'1589':[[54,849],],
'2233':[[54,1334],],
},{'236':[[54,851],],
'2233':[[54,1338],],
},{'236':[[54,855],[191,20],[72,20],[218,23],],
'241':[[191,116],],
'301':[[191,80],],
'1101':[[191,47],[72,44],],
'2233':[[54,1325],],
},{'15':[[153,417],],
'23':[[72,56],],
'26':[[296,59],[250,92],[367,86],[384,9257],],
'52':[[153,810],],
'67':[[235,315],],
'77':[[196,84],[156,90],[296,66],],
'94':[[197,508],[70,566],[70,676],[197,366],],
'130':[[363,488],],
'134':[[363,77],[218,61],[296,35],],
'147':[[70,507],[153,711],[197,359],],
'165':[[70,390],[70,648],[197,416],[197,227],],
'170':[[153,982],[153,578],[153,737],[153,1407],[153,1186],],
'173':[[197,351],[153,419],[250,30],[153,1263],[367,28],[235,23],[233,27],[218,17],[363,19],[153,1070],[178,27],[153,705],[153,849],[296,19],[70,499],],
'175':[[70,775],[153,553],[197,617],],
'264':[[153,723],[95,357],],
'382':[[153,1352],],
'423':[[196,57],[156,63],],
'438':[[367,78],[250,84],],
'449':[[384,8904],],
'502':[[178,97],[235,85],],
'615':[[153,1083],],
'1589':[[54,858],[156,25],[196,24],],
'2179':[[153,579],],
'2233':[[54,1314],],
'2935':[[153,1126],[153,932],],
'2959':[[153,452],[153,1289],[153,1118],[153,871],],
'2967':[[153,433],[153,575],],
'2991':[[153,1136],],
},{'147':[[153,438],],
'171':[[153,1265],[153,1072],[153,851],],
'236':[[153,389],[54,860],[218,19],],
'243':[[153,814],],
'333':[[153,478],],
'1671':[[153,1109],[153,1280],],
'1954':[[153,427],],
'2179':[[153,933],[153,576],[153,724],[153,1127],[153,1353],[153,453],],
'2233':[[54,1318],],
'2896':[[153,873],],
'2989':[[153,822],],
},{'7':[[92,76],[99,5],[254,139],[171,500],[199,3],[199,103],[211,64],],
'13':[[384,8007],],
'23':[[374,34],],
'33':[[324,33],],
'117':[[223,0],],
'213':[[223,15],],
'215':[[363,62],[213,64],],
'396':[[313,46],],
'667':[[99,305],],
'2180':[[54,861],],
},{'15':[[54,1176],[218,55],],
'65':[[363,268],],
'128':[[223,41],],
'2051':[[313,178],],
'2161':[[95,404],],
'2181':[[54,862],[313,47],[363,63],[213,65],],
'2233':[[54,1359],],
'2240':[[54,1399],],
},{'3':[[200,141],[257,103],],
'15':[[250,99],[372,49],[75,76],[263,84],],
'19':[[313,331],],
'23':[[181,169],[257,130],],
'147':[[313,197],],
'1741':[[54,864],],
'2016':[[363,641],[384,8251],],
'2233':[[54,1311],[54,1512],],
'2240':[[54,1516],],
},{'144':[[54,941],[54,1004],[54,1053],],
'313':[[54,866],],
},{'144':[[54,1063],],
'313':[[54,869],],
},{'217':[[54,871],],
},{'173':[[54,885],],
'2169':[[54,889],],
},{'277':[[54,895],],
},{'1589':[[54,898],],
'1828':[[54,973],],
},{'277':[[54,901],],
},{'236':[[54,903],],
'2159':[[54,1022],],
'2193':[[54,953],],
},{'277':[[54,905],],
},{'147':[[54,943],],
'236':[[54,907],],
'682':[[54,919],],
'2204':[[54,946],],
'2205':[[54,952],],
},{'215':[[54,913],[335,1337],],
'236':[[335,1335],[54,911],],
'1828':[[54,975],],
'2128':[[335,1372],],
'2132':[[335,1347],[335,1340],],
'2195':[[54,917],[54,965],],
'2207':[[54,959],],
'2208':[[54,1028],[54,1032],],
'4315':[[335,1381],],
},{'277':[[54,964],[54,1018],[54,916],],
},{'63':[[152,151],],
'2193':[[54,920],],
},{'277':[[54,924],],
},{'231':[[54,986],[54,1035],],
'2197':[[54,925],],
},{'828':[[318,16],[392,18],],
'1382':[[54,1040],[54,991],[54,931],],
},{'160':[[82,544],],
'281':[[246,1188],[384,5773],],
'2006':[[54,933],],
'2165':[[54,1042],[54,993],],
},{'18':[[54,935],],
},{'29':[[54,996],[54,1045],],
'2201':[[54,936],],
},{'277':[[54,998],[54,1047],[54,939],],
},{'277':[[54,945],],
},{'277':[[54,951],],
},{'1589':[[54,955],],
'2210':[[54,1010],],
},{'277':[[54,1016],[54,958],],
},{'215':[[335,1355],],
'236':[[335,1343],[54,961],],
'2194':[[335,1382],[335,1373],[54,976],],
'2206':[[54,1011],],
'2214':[[54,1031],[54,1027],],
},{'123':[[54,968],],
'1004':[[54,979],],
},{'147':[[54,981],],
'236':[[54,970],],
'1828':[[54,1055],[54,1009],],
},{'7':[[92,168],[396,5],[296,170],[171,592],[211,156],[296,3],[254,231],],
'26':[[384,7459],],
'117':[[170,0],],
'236':[[170,16],],
'667':[[396,192],],
'2210':[[54,971],],
'2675':[[384,4657],],
'4297':[[335,860],],
'4312':[[335,1781],[335,1638],[335,1277],[335,1504],],
'4314':[[335,1350],],
'4629':[[384,9707],],
},{'12':[[296,151],[80,117],],
'30':[[153,494],],
'57':[[355,605],[363,331],],
'63':[[96,94],],
'305':[[384,8435],],
'861':[[83,98],],
'2198':[[54,1036],[54,987],],
'2354':[[70,665],[197,433],],
},{'277':[[54,1051],[54,1058],[54,1002],],
},{'147':[[54,1030],],
'236':[[54,1006],],
'1652':[[54,1026],],
},{'277':[[54,1024],],
},{'277':[[54,1060],],
},{'162':[[54,1077],],
'182':[[218,37],[54,1302],],
'236':[[54,1126],],
'345':[[54,1092],],
'397':[[218,168],],
'653':[[54,1112],],
'1223':[[54,1117],],
'1671':[[54,1206],],
'2161':[[218,201],],
'2175':[[54,1332],],
'2223':[[54,1204],],
'2224':[[54,1221],],
},{'12':[[95,172],[54,1090],],
},{'252':[[54,1102],],
'956':[[384,3838],],
},{'3':[[82,426],],
'7':[[82,324],],
'12':[[283,52],[187,56],],
'16':[[54,1121],[157,58],],
'19':[[187,46],[283,43],[153,883],],
'23':[[187,191],],
'48':[[93,76],],
'63':[[247,66],],
'77':[[379,194],],
'128':[[76,24],],
'447':[[270,65],],
'531':[[384,2492],],
},{'7':[[152,108],],
'12':[[54,1123],],
'16':[[189,149],],
'19':[[95,513],[277,585],[355,559],[381,485],[153,750],],
'23':[[335,1402],[353,99],[341,169],[335,1251],[307,169],],
'140':[[335,1408],],
'159':[[84,288],],
'199':[[70,595],[197,390],],
'290':[[82,404],],
'869':[[313,424],],
'1109':[[244,188],[118,146],],
'3196':[[384,3400],],
},{'7':[[80,3],[254,233],[80,151],[92,170],[170,5],[171,594],[211,158],],
'63':[[384,4570],],
'117':[[296,0],],
'140':[[80,124],[384,4612],[384,4719],],
'152':[[309,33],],
'374':[[384,4501],],
'667':[[170,282],],
'1101':[[54,1166],],
'1278':[[296,16],],
},{'236':[[54,1193],],
'301':[[54,1203],],
'2174':[[54,1329],],
'2217':[[54,1207],],
},{'236':[[54,1216],],
'2177':[[54,1339],],
'2225':[[54,1220],],
},{'236':[[54,1219],],
'247':[[54,1235],],
},{'12':[[54,1229],],
},{'173':[[218,41],[54,1233],],
'230':[[218,190],],
'1589':[[54,1336],],
'1705':[[54,1508],],
},{'2':[[265,19],],
'16':[[181,146],],
'26':[[122,58],],
'89':[[229,44],[207,26],[148,42],],
'926':[[54,1254],],
'1390':[[214,72],],
'3557':[[181,63],],
'3582':[[181,525],],
},{'3':[[335,2033],],
'23':[[65,109],[93,130],[162,88],[181,1003],[199,71],[363,678],[306,569],[54,1262],[339,212],],
'26':[[384,5179],],
'159':[[304,296],],
'196':[[384,9533],],
'532':[[384,6996],],
'837':[[384,9778],],
'2341':[[384,4277],],
'4761':[[384,1415],],
},{'12':[[54,1266],],
'635':[[246,761],],
},{'124':[[54,1283],],
'1004':[[54,1309],],
},{'63':[[160,178],],
'656':[[54,1286],],
'3600':[[181,943],],
},{'146':[[54,1313],],
'215':[[54,1306],],
'225':[[54,1358],],
'1004':[[54,1448],],
'1847':[[54,1511],],
'2126':[[54,1317],],
'2127':[[54,1320],],
'2128':[[54,1324],],
'2129':[[54,1327],],
'2154':[[54,1361],],
'2163':[[54,1365],],
'2169':[[54,1304],],
'2217':[[54,1333],],
'2223':[[54,1330],],
'2227':[[54,1337],],
'2231':[[54,1310],],
'2240':[[54,1397],],
},{'99':[[54,1371],],
'128':[[352,52],[193,52],],
'154':[[160,409],],
'217':[[54,1342],],
'370':[[274,703],],
'575':[[160,64],],
'5167':[[384,9929],],
},{'63':[[54,1353],],
'73':[[54,1380],],
},{'12':[[54,1376],],
},{'2236':[[54,1377],],
},{'16':[[54,1385],],
},{'861':[[54,1391],],
},{'1004':[[54,1515],[54,1499],[54,1468],],
'2155':[[54,1401],],
'2166':[[54,1405],],
'2169':[[54,1395],],
'2233':[[54,1398],],
'2240':[[54,1396],],
},{'12':[[54,1424],[358,358],[358,339],[288,47],[261,179],],
'18':[[86,208],],
'30':[[249,66],],
'39':[[246,413],],
'43':[[331,27],[277,855],],
'57':[[160,369],[261,193],],
'67':[[112,62],[112,99],],
'68':[[384,5852],],
'128':[[253,26],],
'152':[[60,95],],
'164':[[249,295],],
'248':[[355,699],],
'275':[[60,82],],
'923':[[152,193],],
'1003':[[181,205],],
'2163':[[54,1409],],
'3864':[[246,398],],
},{'31':[[277,473],],
'150':[[54,1434],],
'197':[[384,3675],],
'534':[[274,261],],
'865':[[174,223],],
'2633':[[99,160],],
},{'190':[[54,1501],],
'191':[[54,1444],],
},{'190':[[54,1487],],
'191':[[54,1464],],
},{'86':[[54,1506],],
'130':[[279,21],],
},{'94':[[64,19],[177,19],[282,19],[393,19],[55,19],],
},{'77':[[86,258],],
'139':[[153,709],],
'215':[[153,875],[153,1121],[153,1292],],
'454':[[173,125],[86,97],[57,104],],
'653':[[247,99],[270,101],],
'780':[[131,94],[77,79],[137,80],],
'1051':[[153,644],[137,23],[131,23],[86,27],[77,21],[173,31],[64,23],[247,26],[57,29],[270,26],[55,26],],
},{'7':[[232,18],],
'33':[[342,285],[342,272],],
'49':[[232,116],[153,642],],
'128':[[232,93],],
'229':[[232,52],],
'389':[[64,25],[57,31],[86,29],[137,25],[131,25],[77,23],[247,28],[270,28],[173,33],[55,28],],
},{'7':[[171,389],[254,28],[366,40],[391,5],[56,31],],
'117':[[281,0],],
'313':[[281,14],],
'322':[[391,75],],
},{'7':[[65,183],[171,393],[254,32],[56,35],],
'117':[[366,0],],
'213':[[366,11],],
'322':[[281,23],],
'986':[[301,17],],
},{'7':[[301,5],[267,31],[171,407],[267,3],[254,46],[56,49],],
'117':[[252,0],],
'123':[[252,16],],
'147':[[70,285],[197,166],],
'152':[[391,70],[161,122],],
'322':[[301,88],],
},{'7':[[56,55],[375,3],[171,413],[304,111],[254,52],[375,30],],
'117':[[230,0],],
'122':[[108,13],],
'322':[[267,34],],
'329':[[230,15],],
},{'7':[[171,415],[230,3],[254,54],[56,57],],
'117':[[375,0],],
'322':[[230,31],],
'329':[[375,15],],
'330':[[264,17],],
},{'134':[[131,70],[57,62],[137,56],[86,60],[173,69],],
'402':[[137,18],[86,18],[173,18],[57,18],[131,18],],
},{'33':[[57,224],],
'94':[[57,21],],
'2258':[[57,75],],
'2262':[[57,228],],
},{'404':[[86,23],[57,25],],
'780':[[86,84],[57,91],],
'788':[[86,213],],
},{'195':[[173,58],[86,54],[137,50],[57,56],],
'705':[[343,56],],
'921':[[232,49],[69,83],],
},{'31':[[57,74],[86,72],[111,53],[131,82],[137,68],[173,81],],
'48':[[181,775],],
'299':[[342,109],[342,270],[342,283],],
'596':[[181,660],],
},{'19':[[270,229],[57,267],],
'23':[[57,237],[57,220],[187,195],[57,81],],
'2261':[[57,214],],
},{'196':[[384,7450],],
'199':[[57,211],],
'281':[[164,636],],
'2022':[[152,199],],
},{'19':[[57,213],],
'31':[[274,516],],
'39':[[150,104],[103,104],],
'239':[[160,106],],
},{'26':[[251,198],],
'82':[[174,41],],
'128':[[61,57],],
'165':[[253,132],],
'346':[[251,309],],
'455':[[57,227],],
'1128':[[355,1220],],
},{'16':[[57,230],],
'19':[[58,50],],
'28':[[121,187],],
'31':[[84,406],],
},{'2':[[277,36],[227,191],],
'67':[[251,32],],
'149':[[189,542],[290,67],],
'199':[[57,233],],
'1030':[[258,20],],
'1101':[[253,134],],
'1279':[[320,89],],
'2248':[[232,94],],
'2512':[[277,164],],
'2617':[[99,177],],
},{'562':[[57,258],],
},{'73':[[57,271],],
},{'7':[[157,36],],
'16':[[283,211],],
'23':[[335,3413],[57,274],[170,73],[141,42],[358,377],[261,207],],
'33':[[384,4141],],
'36':[[145,25],[212,27],[190,69],],
'77':[[82,315],],
'921':[[384,2604],],
},{'3':[[181,245],],
'15':[[122,118],[62,79],],
'19':[[272,44],],
'23':[[181,454],[176,243],],
'63':[[181,827],],
'238':[[160,313],],
'2008':[[160,588],],
'2052':[[57,280],],
'2946':[[152,212],],
},{'30':[[253,124],],
'150':[[132,28],],
'305':[[57,294],],
'1004':[[112,64],],
},{'7':[[371,5],[74,3],[74,137],[171,682],[369,86],[245,60],],
'117':[[58,0],],
'150':[[321,368],],
'169':[[371,129],],
'173':[[58,16],],
},{'27':[[76,45],],
'199':[[58,33],],
},{'226':[[83,49],],
'443':[[62,106],[246,864],],
'680':[[335,1962],[335,2705],[355,456],],
'880':[[112,133],],
'1421':[[84,402],[84,312],],
'2103':[[246,694],],
'2263':[[58,51],],
},{'24':[[58,56],],
},{'12':[[58,59],],
'346':[[171,93],],
},{'2':[[384,4652],],
'132':[[371,122],[280,120],[59,86],],
'2675':[[384,5507],],
},{'7':[[60,20],],
'229':[[60,67],],
},{'7':[[60,26],],
'593':[[60,73],],
'2280':[[60,45],],
},{'7':[[60,32],],
'15':[[60,89],],
'656':[[60,78],],
},{'7':[[60,38],],
'2277':[[60,46],],
'2285':[[60,85],],
},{'7':[[60,44],],
'107':[[60,65],],
'2278':[[60,90],],
},{'7':[[60,51],],
'290':[[60,101],],
},{'128':[[60,54],],
},{'34':[[60,62],],
'420':[[60,57],],
'791':[[181,789],[181,730],],
},{'2241':[[60,83],],
},{'33':[[86,211],],
'275':[[60,98],],
'2284':[[60,84],],
},{'7':[[217,264],[217,270],[60,87],],
},{'18':[[61,54],],
},{'16':[[336,158],[226,74],],
'23':[[384,5865],],
'43':[[170,246],],
'2287':[[61,55],],
},{'242':[[251,228],],
'1424':[[61,66],],
'1452':[[95,199],],
},{'7':[[389,5],[354,84],[171,795],[319,3],[369,199],[319,66],],
'117':[[62,0],],
'228':[[62,16],],
'232':[[389,57],],
'420':[[319,35],[319,28],],
},{'7':[[62,3],[62,137],[151,5],[369,197],[171,793],[354,82],],
'117':[[389,0],],
'173':[[389,16],],
'232':[[151,57],],
},{'128':[[62,60],],
'134':[[62,34],],
'182':[[62,18],],
},{'252':[[62,32],],
},{'7':[[62,36],],
},{'199':[[62,93],],
'221':[[160,463],],
'1582':[[62,38],],
},{'199':[[62,90],],
'1582':[[62,128],[62,42],],
'4363':[[335,2836],],
},{'19':[[62,102],[319,24],[62,67],],
'23':[[319,43],[319,60],[62,122],],
},{'12':[[319,41],[62,86],],
'23':[[319,51],],
'128':[[319,22],],
'149':[[319,57],],
},{'27':[[62,134],],
'199':[[160,484],[62,98],],
},{'12':[[384,5973],],
'19':[[384,23],],
'26':[[384,4127],],
'77':[[384,2726],],
'140':[[384,4908],],
'183':[[282,28],],
'484':[[62,115],],
'596':[[217,430],],
},{'7':[[359,26],],
'12':[[368,91],[176,233],],
'16':[[389,46],[151,46],[62,120],],
'23':[[359,109],],
'26':[[160,384],[181,268],[181,925],],
'89':[[359,146],],
'147':[[368,35],],
'215':[[102,90],[153,877],],
'547':[[359,85],],
'1045':[[153,1153],[153,1375],[153,891],],
},{'174':[[306,905],],
'236':[[306,887],],
'404':[[260,24],[64,21],],
'1079':[[260,67],],
'4170':[[306,895],],
},{'182':[[65,18],],
'1346':[[65,58],],
},{'182':[[65,24],],
'2310':[[65,66],],
},{'182':[[65,30],],
'2310':[[65,76],],
},{'182':[[65,36],],
'295':[[65,87],],
},{'182':[[65,42],],
'813':[[65,114],],
},{'124':[[342,86],[65,54],],
'136':[[65,162],],
'4428':[[342,308],],
},{'7':[[65,68],[65,78],[65,60],],
'63':[[384,6423],[384,9105],[384,8386],[384,9249],[384,9095],],
'140':[[384,8514],],
'4629':[[384,8477],[384,8919],],
'4903':[[384,8141],],
},{'295':[[384,1683],],
'417':[[335,610],[335,612],],
'1380':[[65,75],[65,65],],
},{'237':[[65,71],],
},{'15':[[65,85],],
},{'148':[[384,6589],],
'422':[[384,6630],[277,937],],
'471':[[344,114],],
'481':[[355,920],[355,917],],
'1109':[[65,124],],
'1413':[[313,470],],
'1458':[[384,6601],],
'3550':[[180,179],],
'3635':[[188,38],],
'4115':[[384,9519],],
'5092':[[384,6888],],
},{'15':[[384,4357],],
'23':[[191,150],[355,360],[381,398],[384,384],[68,78],],
'33':[[384,8843],[381,564],],
'89':[[381,346],[65,131],],
'215':[[363,743],],
'420':[[381,160],],
},{'15':[[384,6592],],
'19':[[381,201],[381,496],],
'23':[[161,193],[381,187],],
'217':[[384,9235],],
'346':[[117,37],[167,37],],
'374':[[358,75],],
'513':[[358,121],],
'543':[[161,83],],
'650':[[65,140],],
'2058':[[355,25],],
},{'1194':[[342,315],[65,169],],
},{'23':[[176,97],],
'791':[[342,318],[65,172],],
'1101':[[384,7700],],
},{'7':[[241,73],[171,741],[369,145],],
'23':[[97,22],[164,342],],
'117':[[66,0],],
'128':[[66,17],],
'178':[[155,54],],
'259':[[143,62],[141,83],],
'329':[[66,13],],
'2612':[[97,17],],
},{'2':[[261,200],[358,370],],
'52':[[143,59],[141,80],[66,23],],
},{'12':[[66,27],],
},{'15':[[384,1743],],
'274':[[384,4214],],
'712':[[67,56],],
},{'2':[[227,23],],
'279':[[355,22],],
'679':[[68,43],],
'2131':[[335,3498],],
},{'12':[[384,3179],],
'13':[[384,7827],],
'15':[[384,8887],],
'63':[[384,3127],],
'67':[[191,123],],
'152':[[335,2954],],
'167':[[68,64],],
'275':[[384,9440],],
'675':[[363,466],],
'1505':[[384,7407],],
'2675':[[384,7839],[384,8111],[384,9461],[384,7233],[384,7399],],
'4629':[[384,9325],[384,8859],],
'4903':[[384,7116],],
},{'31':[[277,657],],
'167':[[68,80],],
'817':[[384,6781],],
'2877':[[133,105],],
},{'15':[[384,2056],],
'33':[[381,331],[381,592],],
'63':[[384,6268],[384,6182],],
'73':[[381,466],],
'140':[[335,1545],],
'152':[[68,104],],
'199':[[394,184],],
'420':[[381,289],[381,419],[381,306],],
'1963':[[153,1243],],
},{'136':[[353,59],],
'182':[[353,26],[106,20],[69,22],],
'333':[[82,159],],
'2327':[[106,34],[69,47],],
},{'12':[[103,30],],
'16':[[82,499],],
'19':[[150,27],],
'23':[[103,60],],
'34':[[103,69],[150,69],],
'39':[[103,125],[150,125],],
'346':[[150,64],],
'700':[[69,69],[69,46],],
'712':[[82,456],],
'728':[[106,33],],
'778':[[180,67],[180,60],],
},{'27':[[283,139],],
'128':[[69,65],],
'482':[[159,133],],
},{'2':[[70,38],],
'7':[[179,21],[171,1234],[185,37],[153,9],[153,1422],],
'27':[[197,503],],
'56':[[179,1635],],
'117':[[70,0],],
'226':[[70,175],],
'275':[[384,4775],],
'375':[[266,371],[266,163],],
'928':[[70,92],],
},{'19':[[70,15],[70,788],[171,1229],[174,270],[179,5],[355,1491],[355,787],[185,32],[188,225],[243,169],[243,182],[243,248],[246,1820],[277,84],[290,62],[355,547],[335,25],[335,3797],[344,97],],
'926':[[179,130],[290,184],],
'1591':[[179,1237],],
'3713':[[384,8415],],
},{'2':[[153,42],],
'7':[[197,15],[197,625],[70,22],[185,46],[171,1243],],
'56':[[70,793],],
'117':[[153,0],],
'226':[[153,199],],
'321':[[355,1479],],
},{'12':[[363,494],[89,336],],
'26':[[186,443],],
'33':[[335,1445],[335,1395],],
'39':[[315,132],[289,132],],
'49':[[153,1008],[153,1195],[153,991],[153,86],[153,142],],
'130':[[335,1539],[335,1590],[335,1681],[153,685],[335,1558],],
'248':[[277,940],],
'412':[[384,9403],],
'436':[[335,2447],],
'888':[[384,5078],],
'1467':[[171,1247],[153,4],[197,629],[185,50],[197,19],[355,1483],[70,797],[70,26],],
'4372':[[335,3307],],
},{'47':[[70,121],],
'63':[[266,72],],
'370':[[341,257],[307,257],],
'817':[[384,1802],],
},{'140':[[70,131],],
},{'231':[[70,197],],
'329':[[70,182],],
'1010':[[70,338],],
},{'2':[[70,207],],
},{'89':[[243,258],[384,8225],[355,777],[363,524],[70,210],],
'861':[[371,78],[280,85],],
},{'144':[[70,220],],
},{'231':[[70,238],],
'329':[[70,225],],
'2335':[[70,339],],
},{'1029':[[70,241],],
},{'12':[[384,2944],],
'23':[[384,6884],],
'68':[[384,7258],[384,6990],[384,2694],[84,495],[384,8900],[384,4276],[384,4703],[384,5252],[384,9342],[384,5559],[384,5961],[384,6627],[384,6641],[384,5485],],
'164':[[161,445],[70,328],[339,166],],
'2042':[[84,105],],
},{'3':[[201,24],],
'15':[[128,82],[320,84],[322,79],[384,6679],[235,198],[384,6686],],
'23':[[339,227],],
'52':[[162,358],],
'82':[[384,4700],],
'144':[[384,7019],[199,50],[363,729],[363,657],],
'152':[[384,8253],[348,22],],
'183':[[384,8308],],
'428':[[84,262],],
'849':[[384,5548],[384,5256],],
'1229':[[384,9739],],
'2061':[[70,331],],
'2183':[[263,85],],
'4201':[[384,631],[384,1004],],
},{'1610':[[197,188],[70,351],],
},{'2343':[[197,189],[70,352],],
},{'100':[[188,311],[188,268],[188,289],],
'314':[[188,247],],
'2344':[[70,353],[197,190],],
'3656':[[188,305],[188,244],[188,263],[188,284],],
'3670':[[188,327],],
'3671':[[188,329],],
},{'94':[[179,881],],
'144':[[179,899],],
'147':[[197,209],[70,372],],
'149':[[296,32],],
'165':[[70,387],[197,224],],
'173':[[197,203],[70,366],],
'175':[[70,773],[197,615],],
'933':[[179,888],],
'1101':[[197,381],[70,581],],
'1651':[[179,886],[179,894],],
'1835':[[197,587],[70,745],],
'1846':[[335,3585],],
'1908':[[179,884],],
'2346':[[179,895],],
},{'215':[[335,3051],[335,2204],],
'231':[[153,456],[306,492],[153,404],[306,1600],[306,1568],],
'267':[[381,500],],
'1711':[[70,375],[197,212],],
},{'26':[[70,418],[277,489],[197,268],],
'63':[[125,111],],
'89':[[384,2866],],
'271':[[179,1257],[179,148],[290,202],[290,97],],
'790':[[384,577],],
'931':[[384,446],],
'948':[[244,60],[235,106],[118,59],],
'1109':[[246,230],[277,291],],
'1245':[[384,2891],],
'1302':[[384,455],[384,816],],
'1359':[[384,2874],],
'4622':[[384,2853],],
},{'52':[[70,557],],
'147':[[70,524],],
'236':[[70,517],],
'1843':[[70,550],],
'2351':[[70,589],],
},{'1231':[[137,234],[153,879],[173,279],[355,386],[70,542],],
},{'139':[[70,588],],
'147':[[70,559],],
'173':[[70,555],],
'175':[[70,641],[70,620],],
'817':[[70,622],],
'2351':[[70,642],],
},{'15':[[70,627],],
'30':[[274,331],],
'82':[[227,215],],
'154':[[160,343],],
'290':[[134,142],[302,144],],
'897':[[384,9097],],
'1408':[[186,365],],
'2468':[[99,287],],
'4527':[[360,48],],
},{'26':[[313,88],],
'77':[[313,118],],
'147':[[70,698],[313,249],],
'165':[[70,651],[197,419],],
'173':[[197,526],[70,694],[218,21],[313,22],],
'175':[[197,619],[70,777],],
'237':[[313,225],],
'1255':[[313,70],],
'1832':[[197,567],[70,724],],
'2346':[[197,588],[70,746],],
},{'16':[[128,117],[197,432],[277,551],[322,119],[355,617],[70,664],],
},{'52':[[70,696],[197,528],],
'236':[[70,673],[197,505],],
'423':[[197,520],[70,688],],
'1004':[[197,511],[70,679],],
'1101':[[70,706],],
'1651':[[197,514],[197,517],[70,685],[70,682],],
'2353':[[70,725],[197,568],],
},{'52':[[70,710],],
'236':[[70,703],],
'2358':[[70,734],],
},{'7':[[254,165],[92,102],[253,5],[324,40],[171,526],[324,3],[211,90],],
'117':[[320,0],],
'182':[[320,16],],
'241':[[266,194],[253,103],],
'420':[[162,72],],
'667':[[253,233],],
'923':[[384,7048],],
'1177':[[162,175],],
'1225':[[384,4609],],
'1364':[[363,263],],
'2356':[[70,704],],
'3488':[[179,1192],],
'3699':[[197,552],],
'4330':[[335,2037],[335,2629],],
'4629':[[384,4545],],
},{'139':[[70,733],],
'147':[[70,712],],
'173':[[70,708],],
'175':[[70,779],],
},{'147':[[197,592],[70,750],],
'236':[[197,563],[70,720],],
'1540':[[197,583],[70,741],],
},{'7':[[223,38],],
'69':[[384,8024],],
'215':[[153,945],],
'230':[[313,190],[363,280],],
'389':[[363,65],[313,49],[213,67],],
'2356':[[70,735],],
},{'838':[[70,755],],
},{'63':[[197,601],[70,759],],
'128':[[260,28],[207,24],],
},{'134':[[71,37],[382,37],],
'333':[[382,20],[71,20],],
'671':[[258,62],],
'838':[[382,81],[71,81],],
'1702':[[258,14],],
},{'94':[[382,28],[71,28],],
'851':[[258,33],],
'1029':[[258,77],],
'1238':[[382,64],[71,64],],
'4023':[[258,70],],
},{'7':[[382,66],[71,66],],
},{'1765':[[382,78],[71,78],],
},{'12':[[382,86],[71,86],],
'2675':[[384,6956],],
},{'14':[[336,135],[385,49],],
'231':[[384,2127],[161,567],[321,167],],
'288':[[321,186],[161,586],],
'513':[[76,81],],
'851':[[382,88],[71,88],],
'2103':[[87,65],],
},{'7':[[72,3],[72,85],[92,160],[118,5],[254,223],[171,584],[211,148],],
'117':[[244,0],],
'236':[[244,16],],
'277':[[384,891],],
'667':[[118,226],],
},{'7':[[72,5],[396,3],[92,164],[171,588],[254,227],[211,152],[396,190],],
'117':[[191,0],],
'150':[[361,98],],
'236':[[191,16],],
'374':[[384,4941],],
'393':[[363,451],],
'420':[[191,302],],
'667':[[72,87],],
'1225':[[363,709],],
'4534':[[363,468],],
},{'26':[[191,296],],
'31':[[363,627],],
'68':[[384,6613],[384,7586],],
'130':[[191,245],],
'152':[[225,44],],
'165':[[384,9830],],
'613':[[191,204],],
'1506':[[72,82],],
'1868':[[384,9113],[363,462],],
'2342':[[384,5257],],
},{'23':[[396,142],],
'33':[[384,4351],],
'130':[[191,118],[363,399],],
'147':[[191,82],],
'149':[[191,145],],
'562':[[191,53],],
'860':[[191,134],],
'958':[[335,3247],],
'1416':[[384,4951],],
'2371':[[72,83],],
},{'19':[[160,84],],
'228':[[305,37],[73,33],[198,45],[368,30],],
'2228':[[122,59],],
'2786':[[265,15],[323,17],],
'4464':[[354,29],],
},{'39':[[82,481],[207,92],[249,211],[73,70],],
'305':[[181,160],[160,164],[160,139],],
'905':[[384,1609],],
'3214':[[172,151],],
},{'7':[[211,96],[313,489],[92,108],[132,5],[313,3],[171,532],[254,171],],
'12':[[253,179],],
'117':[[75,0],],
'123':[[75,16],],
'152':[[313,445],],
'667':[[132,40],],
'2675':[[384,8954],],
},{'7':[[75,3],[75,141],[92,106],[324,5],[254,169],[171,530],[211,94],],
'33':[[253,121],],
'117':[[132,0],],
'173':[[132,16],],
'667':[[324,42],],
'2127':[[335,2261],],
'4362':[[335,3151],],
},{'7':[[75,5],[361,111],[92,110],[171,534],[254,173],[211,98],[361,3],],
'26':[[337,45],],
'67':[[335,2984],],
'83':[[186,347],],
'117':[[313,0],],
'123':[[313,16],],
'140':[[277,361],],
'375':[[253,227],],
'667':[[75,143],],
'1847':[[335,2915],[335,2150],],
'2675':[[384,6648],],
},{'7':[[254,153],[171,514],[142,184],[92,90],[337,5],[142,3],[211,78],],
'15':[[202,21],],
'19':[[253,28],],
'23':[[253,136],[253,92],[253,69],[75,38],[313,61],],
'89':[[162,60],[75,28],],
'117':[[202,0],],
'122':[[253,15],],
'285':[[335,57],],
'667':[[337,117],],
'1329':[[202,16],],
'2132':[[335,2040],],
'2375':[[75,17],],
'2376':[[132,17],],
'2377':[[313,17],],
'2382':[[335,2755],],
},{'63':[[75,110],],
'236':[[75,20],],
'2383':[[75,42],],
},{'236':[[75,22],],
'682':[[75,54],],
},{'12':[[75,30],],
'63':[[220,123],[220,49],],
},{'404':[[82,80],[82,100],],
'412':[[170,94],[170,66],],
'449':[[82,362],[82,393],],
'455':[[75,33],],
'470':[[335,2026],[335,2754],],
'2382':[[82,363],[82,394],],
},{'7':[[92,100],[254,163],[320,175],[363,5],[171,524],[211,88],[320,3],],
'12':[[313,443],[313,102],],
'15':[[132,36],],
'33':[[132,22],],
'117':[[253,0],],
'150':[[266,177],],
'375':[[202,24],],
'420':[[75,41],[313,64],[320,35],],
'445':[[335,1839],[335,2042],[335,2289],[335,2757],],
'667':[[363,763],],
'1033':[[355,593],],
'1225':[[164,150],],
'2378':[[253,16],],
},{'23':[[244,182],[118,140],[90,59],[274,471],[80,147],[142,133],],
'82':[[384,6099],],
'149':[[80,29],[296,77],[80,71],[296,128],[80,86],[80,94],],
'154':[[296,166],],
'417':[[153,132],[384,5313],[376,29],[367,56],[95,123],[335,1119],[335,1102],[335,1058],[335,1012],[335,757],[313,461],[218,352],[234,408],[235,491],[75,92],[95,393],[250,62],[81,43],[274,752],[274,764],[384,9383],[355,624],[384,9900],],
'422':[[355,705],[189,416],],
'437':[[246,791],],
'532':[[153,1081],],
'540':[[186,447],],
'543':[[153,379],[153,118],[153,323],[153,369],],
'707':[[335,686],],
'722':[[170,110],[153,1054],],
'869':[[355,1022],],
'1135':[[209,227],],
'1351':[[75,137],],
'2346':[[296,33],],
'2583':[[153,1049],],
'3814':[[384,3220],[384,3010],],
},{'7':[[211,162],[80,5],[196,96],[171,598],[92,174],[254,237],],
'117':[[309,0],],
'121':[[80,137],],
'140':[[75,127],],
'374':[[384,4958],[384,4496],],
'667':[[80,153],],
'1278':[[309,14],],
'4903':[[384,4711],],
},{'7':[[76,5],[369,438],[139,60],[171,1034],[248,65],[385,71],],
'117':[[333,0],],
'173':[[333,14],],
'1037':[[76,106],],
},{'1004':[[76,26],],
},{'12':[[384,5492],[363,601],],
'19':[[384,5906],[384,5963],[384,1823],[384,5221],[76,42],[384,2701],[384,3808],[384,3699],],
'23':[[321,324],[339,264],],
'39':[[199,40],[363,647],[384,5413],],
'68':[[384,9821],[384,7843],[384,9538],[384,7240],],
'85':[[384,8269],],
'271':[[384,3204],[384,2994],],
'305':[[225,42],],
'351':[[112,127],],
'1302':[[384,55],],
'2341':[[384,6991],],
'2371':[[384,9831],],
'2675':[[384,2443],[384,2645],[384,2419],],
'4226':[[384,291],[384,4450],],
},{'2271':[[76,46],],
},{'2389':[[76,47],],
},{'131':[[76,50],],
},{'12':[[277,762],[274,408],],
'43':[[76,56],],
'160':[[304,368],],
'305':[[339,112],],
'861':[[152,111],],
'1510':[[335,513],],
},{'123':[[304,124],],
'126':[[339,118],[76,60],],
'160':[[304,337],],
},{'707':[[76,72],],
'2367':[[384,6957],],
},{'7':[[350,78],],
'140':[[76,86],],
'696':[[350,189],],
},{'39':[[277,514],[384,7502],[217,486],],
'305':[[290,102],],
'1155':[[181,301],],
'1205':[[76,95],],
'1425':[[217,330],],
},{'38':[[76,99],],
},{'2397':[[76,100],],
},{'23':[[77,141],[131,125],[131,154],[77,110],],
},{'134':[[341,36],[307,36],],
'323':[[307,18],[78,18],],
'763':[[341,18],[120,18],],
},{'121':[[341,42],[307,42],],
'325':[[307,20],[78,20],],
'764':[[341,20],[120,20],],
},{'7':[[309,35],[92,172],[171,596],[211,160],[254,235],[309,3],[296,5],],
'117':[[80,0],],
'140':[[309,31],],
'152':[[384,4721],],
'374':[[384,4490],],
'667':[[296,172],],
'1278':[[80,16],],
},{'134':[[80,31],],
'173':[[309,17],[80,19],],
'449':[[80,57],],
},{'147':[[80,141],],
'236':[[309,19],[80,21],],
'237':[[80,51],],
},{'123':[[309,21],[170,31],[80,23],],
'470':[[80,61],],
'3187':[[170,97],],
},{'509':[[296,26],[80,26],],
'2851':[[125,257],],
'3559':[[331,46],],
},{'12':[[170,39],[170,125],],
'19':[[170,262],[296,50],[80,46],],
'354':[[170,238],],
'535':[[96,167],],
'1155':[[170,179],],
'1416':[[170,267],],
'1846':[[170,275],],
'2267':[[170,74],],
'2583':[[363,530],],
},{'26':[[80,75],],
},{'15':[[153,487],],
'2384':[[296,129],[80,95],],
'2481':[[384,37],],
'2509':[[384,1141],],
},{'31':[[121,541],[80,130],],
},{'149':[[80,133],],
'2060':[[341,272],[307,272],],
'3196':[[384,4103],[384,4089],],
'4452':[[384,5593],],
'4965':[[384,4138],],
},{'3':[[384,5259],[199,42],[363,649],[355,1434],],
'16':[[296,168],[80,149],],
'73':[[363,410],],
'147':[[128,134],[322,136],],
'940':[[384,5550],],
},{'7':[[171,540],[373,3],[92,116],[157,5],[254,179],[373,114],[211,104],],
'117':[[81,0],],
'182':[[81,16],],
'346':[[373,44],],
'667':[[157,82],],
},{'7':[[81,5],[254,181],[92,118],[171,542],[211,106],[250,3],[250,135],],
'117':[[373,0],],
'236':[[373,16],],
'667':[[81,65],],
'1364':[[250,109],],
},{'7':[[296,62],],
'12':[[157,60],[253,186],],
'15':[[118,120],[244,162],],
'18':[[235,298],],
'23':[[322,100],[128,98],],
'54':[[363,306],],
'63':[[363,623],[84,63],[235,289],],
'82':[[118,65],],
'134':[[81,29],[157,27],],
'135':[[253,177],],
'144':[[244,74],[306,1210],],
'147':[[306,1184],[320,124],[320,144],],
'183':[[81,58],],
'215':[[363,217],],
'236':[[306,1067],[128,30],[118,22],[178,25],[302,27],[196,21],[346,18],[320,22],[233,25],[235,21],[306,1139],[116,21],[396,22],[296,23],[244,24],[363,25],[156,22],[250,27],[367,25],[134,26],[322,31],[306,361],],
'241':[[313,99],],
'249':[[320,58],[253,43],],
'288':[[363,577],],
'301':[[134,122],[235,335],[396,72],[302,124],],
'346':[[142,107],],
'381':[[250,79],[367,73],],
'404':[[157,18],[81,18],[253,20],],
'412':[[306,1204],[306,1113],],
'423':[[396,52],],
'438':[[95,369],],
'447':[[116,39],[156,57],[196,51],],
'502':[[178,89],[235,76],[134,56],[302,53],],
'550':[[322,65],[128,68],],
'615':[[363,107],[218,83],],
'671':[[384,8347],[134,99],[302,96],],
'680':[[313,235],],
'744':[[322,219],[126,36],[128,217],],
'1004':[[306,1150],],
'1198':[[322,166],[128,164],],
'1652':[[306,1180],],
'1828':[[306,1100],],
'1832':[[384,7865],[384,8350],],
'2179':[[296,60],],
},{'12':[[367,67],[172,39],[250,73],],
'68':[[384,3345],],
'128':[[157,22],[81,22],],
},{'329':[[82,21],],
'1346':[[82,310],],
},{'15':[[378,21],],
'236':[[111,25],],
'290':[[111,67],],
'404':[[82,33],],
'538':[[82,317],],
},{'329':[[82,42],],
'370':[[82,322],],
},{'140':[[82,424],],
'147':[[82,331],],
'217':[[82,335],],
'404':[[82,52],],
},{'329':[[82,59],],
'2447':[[82,350],],
},{'329':[[82,73],],
'2051':[[82,355],],
},{'143':[[82,373],],
'182':[[82,86],],
'2423':[[82,374],],
},{'329':[[82,93],],
'2448':[[82,386],],
},{'244':[[82,410],],
'329':[[82,112],],
},{'329':[[82,126],],
'2220':[[82,427],],
},{'329':[[82,138],],
'609':[[82,434],],
},{'124':[[82,155],[82,143],],
'1049':[[333,16],],
},{'213':[[82,445],],
'329':[[82,150],],
},{'329':[[82,166],],
'2327':[[82,457],],
},{'329':[[82,179],],
'700':[[82,462],],
},{'33':[[82,486],],
'244':[[82,473],],
'329':[[82,197],],
},{'329':[[82,210],],
'2374':[[82,482],],
},{'7':[[82,489],],
'329':[[82,222],],
'2432':[[82,487],],
},{'333':[[82,234],],
},{'329':[[82,243],],
'2327':[[82,500],],
},{'329':[[82,258],],
'700':[[82,506],],
},{'7':[[165,55],],
'63':[[229,170],],
'152':[[82,513],[229,164],],
'249':[[165,53],],
'328':[[229,23],[165,38],[82,268],[325,23],],
'1053':[[255,24],[229,177],],
'3024':[[316,86],],
'3548':[[316,90],],
'3792':[[229,71],],
},{'329':[[82,275],],
},{'13':[[82,524],],
'329':[[82,288],],
},{'173':[[82,300],],
'723':[[82,529],],
},{'23':[[181,21],],
'26':[[82,305],],
},{'15':[[384,9729],[232,82],[82,320],],
'844':[[86,241],],
},{'12':[[335,2891],[109,29],[283,249],],
'290':[[82,343],],
'431':[[283,56],[187,69],],
'2241':[[86,209],],
},{'57':[[214,190],],
'68':[[384,6930],],
'248':[[84,143],[84,121],],
'351':[[82,345],],
'370':[[183,62],[215,62],[311,101],[335,2211],[335,3058],[387,101],],
'1169':[[172,62],],
},{'705':[[82,347],],
},{'1381':[[82,349],],
},{'7':[[379,175],],
'449':[[342,208],[82,385],],
'3824':[[335,3133],],
},{'33':[[232,114],[209,52],],
'36':[[181,709],[181,810],],
'38':[[269,180],],
'49':[[181,472],],
'63':[[384,9894],],
'89':[[181,674],[181,767],],
'140':[[181,508],],
'152':[[181,470],],
'593':[[82,421],],
'607':[[379,143],],
},{'7':[[82,436],],
},{'23':[[82,534],],
},{'12':[[140,24],[144,30],[82,552],],
'19':[[384,4061],],
'351':[[274,107],[164,55],],
},{'12':[[82,558],],
},{'433':[[83,22],],
},{'15':[[83,85],],
'153':[[306,653],[121,346],],
'305':[[384,6010],],
'353':[[331,416],],
},{'37':[[83,87],],
'295':[[251,336],],
},{'15':[[246,21],],
'63':[[84,37],],
'562':[[188,109],],
'4026':[[384,7597],],
},{'1528':[[84,39],],
},{'59':[[84,44],],
},{'12':[[384,6877],[84,48],],
'164':[[102,115],],
'351':[[102,127],],
'639':[[235,434],],
'1169':[[181,167],],
},{'77':[[84,61],],
'147':[[296,160],],
'150':[[363,345],],
'236':[[363,21],[296,21],],
'237':[[296,55],],
'277':[[363,83],],
},{'63':[[153,70],],
'277':[[84,73],],
'370':[[384,9789],],
},{'39':[[84,294],],
'84':[[331,149],],
'130':[[153,630],],
'164':[[84,98],],
},{'16':[[363,607],],
'18':[[384,2484],],
'31':[[313,159],[191,287],[218,98],[363,136],],
'39':[[191,223],],
'67':[[363,630],],
'203':[[84,114],],
'288':[[191,66],[191,190],],
'1117':[[231,76],],
'1365':[[225,37],],
'2341':[[384,6628],],
},{'43':[[331,413],],
'152':[[84,116],],
'1433':[[384,832],],
},{'19':[[84,432],[102,136],[384,6635],[384,5225],[84,168],],
'2675':[[384,7631],[384,7482],],
'4643':[[384,3805],[384,3696],],
},{'19':[[84,172],],
},{'26':[[84,174],],
'79':[[277,746],[186,165],],
'84':[[84,515],],
'150':[[173,295],[137,250],],
'155':[[336,54],],
'857':[[99,286],],
'924':[[246,926],],
'1151':[[331,501],],
'1626':[[246,963],],
},{'205':[[84,201],],
},{'9':[[384,2390],],
'19':[[188,49],],
'23':[[188,92],],
'39':[[84,282],],
'203':[[87,85],],
'817':[[384,4174],[384,8201],[384,4161],],
},{'395':[[84,291],],
},{'33':[[321,124],],
'275':[[384,6079],],
'835':[[84,298],],
},{'19':[[84,324],],
},{'43':[[84,357],],
},{'12':[[84,362],],
'30':[[313,257],],
'39':[[289,141],[315,141],],
'817':[[384,1589],],
'861':[[153,623],],
},{'63':[[84,379],],
},{'40':[[358,114],],
'199':[[84,381],],
'1719':[[252,29],],
'3574':[[181,312],],
'5245':[[394,150],],
},{'31':[[339,128],[384,4427],],
'43':[[84,386],],
'349':[[364,43],],
'817':[[384,6760],],
},{'12':[[314,93],[384,4575],[84,395],],
'277':[[384,40],],
'1155':[[359,139],],
},{'15':[[84,410],],
'49':[[84,397],],
'67':[[84,468],],
},{'73':[[363,424],],
'147':[[363,441],],
'165':[[84,400],],
'215':[[306,1189],],
'277':[[384,36],],
'921':[[363,480],],
'1382':[[384,4279],],
'1667':[[384,7028],],
'3631':[[384,9135],],
},{'705':[[84,412],],
},{'144':[[84,416],],
},{'462':[[181,221],],
'817':[[84,427],],
'1169':[[326,33],],
},{'154':[[84,443],],
},{'43':[[84,534],[84,511],],
'598':[[251,301],[277,460],[384,796],[384,1314],[384,2211],[251,265],],
},{'23':[[335,1696],[84,538],],
'203':[[194,84],],
'1338':[[384,5957],],
'4759':[[384,1377],],
},{'15':[[384,4671],],
'59':[[339,68],],
'77':[[138,36],],
'2487':[[84,539],],
},{'248':[[84,561],],
},{'7':[[85,20],],
'229':[[85,40],],
},{'7':[[85,26],],
'2493':[[85,48],],
},{'7':[[85,32],],
'593':[[85,57],],
},{'16':[[352,147],[193,147],],
'31':[[128,201],[322,203],],
'203':[[363,492],],
'301':[[125,124],],
'1107':[[85,47],],
'1432':[[335,741],],
'2211':[[384,9708],],
},{'7':[[85,50],],
'33':[[384,3833],],
'140':[[384,8825],],
'231':[[384,800],],
'696':[[384,436],[384,416],[384,459],],
'817':[[384,4566],],
'3196':[[384,1658],[384,474],],
},{'16':[[188,145],],
'19':[[335,1859],[335,2296],[335,1847],],
'39':[[125,219],[125,170],],
'59':[[191,293],],
'370':[[85,54],],
'531':[[96,153],],
'817':[[384,8969],],
},{'2495':[[85,55],],
},{'499':[[246,1782],],
'656':[[86,201],],
},{'89':[[187,71],[283,58],],
'349':[[283,171],],
'1068':[[86,204],],
},{'2498':[[86,205],],
'2535':[[111,82],],
},{'16':[[160,601],],
'89':[[160,275],],
'203':[[135,216],[100,169],],
'1205':[[145,75],[86,230],[180,224],[212,77],[301,82],[343,102],[384,3545],],
},{'305':[[191,258],],
'771':[[86,244],],
},{'7':[[232,36],],
'135':[[86,256],],
'613':[[232,78],],
},{'7':[[87,93],[171,1010],[248,41],[369,414],[87,3],],
'12':[[384,6348],],
'26':[[288,29],[288,42],],
'117':[[350,0],],
'213':[[350,13],],
'1037':[[258,85],],
},{'7':[[87,5],[369,418],[171,1014],[248,45],[288,52],],
'117':[[360,0],],
'213':[[360,13],],
'326':[[385,11],],
'1037':[[87,97],],
},{'7':[[87,20],],
'229':[[87,55],],
},{'7':[[87,26],],
'841':[[87,59],],
},{'7':[[87,38],],
'33':[[321,242],],
'1034':[[87,75],],
},{'7':[[87,44],],
'840':[[87,90],],
},{'15':[[160,562],[286,34],],
'18':[[87,68],],
'130':[[187,165],],
'154':[[283,163],[283,141],[273,22],],
'462':[[276,50],[276,62],],
'540':[[273,38],],
'1385':[[384,1140],],
'3008':[[164,321],],
'3593':[[181,819],],
'3630':[[187,173],],
},{'39':[[160,216],],
'42':[[96,72],],
'65':[[162,195],],
'67':[[134,145],[302,147],],
'140':[[313,455],],
'145':[[122,108],],
'339':[[160,679],],
'359':[[89,152],[213,229],],
'447':[[102,97],],
'876':[[384,335],],
'941':[[156,99],[196,93],],
'944':[[87,73],],
},{'26':[[171,129],[188,7],[188,357],[227,224],[227,256],[227,335],[88,2],],
},{'2':[[88,10],[88,54],[88,62],[171,133],[188,2],[208,107],[208,8],[246,1828],[227,260],[277,185],],
'9':[[188,43],],
'14':[[188,23],],
'23':[[188,63],[277,178],[277,152],],
'63':[[246,1825],],
'79':[[188,242],],
'224':[[188,282],[188,303],[188,261],],
'267':[[188,172],],
'275':[[384,5290],[384,5766],],
'609':[[188,114],[277,163],],
'2470':[[188,93],],
'3054':[[188,101],],
'3640':[[188,77],],
'3643':[[188,132],],
'3651':[[188,178],],
'3652':[[188,184],],
},{'7':[[377,44],[369,41],[233,5],[111,3],[171,637],[124,52],[111,89],],
'13':[[384,6441],],
'18':[[156,120],],
'23':[[153,1095],],
'117':[[89,0],],
'228':[[89,16],],
'277':[[89,359],],
'474':[[233,48],],
'949':[[89,354],],
'1033':[[214,86],],
'1405':[[153,1000],],
'3000':[[153,1124],],
},{'7':[[89,5],[369,43],[171,639],[156,134],[124,54],[156,3],[377,46],],
'117':[[111,0],],
'173':[[111,16],],
'474':[[89,488],],
},{'236':[[213,27],[89,27],],
'277':[[213,142],],
'615':[[89,118],],
'1168':[[213,374],],
},{'12':[[89,163],[213,238],],
'397':[[213,224],],
'432':[[89,148],],
'664':[[213,49],[89,35],],
},{'15':[[196,45],],
'18':[[93,114],],
'23':[[111,77],],
'83':[[213,231],],
'134':[[156,44],[111,35],],
'173':[[156,17],[213,53],[89,37],],
'877':[[89,157],],
'2560':[[111,18],],
},{'346':[[89,185],],
'402':[[89,39],],
'1498':[[89,296],],
'2516':[[89,164],],
},{'26':[[89,221],],
'67':[[89,428],],
'173':[[89,41],],
'383':[[89,414],],
'453':[[89,197],],
'877':[[89,176],],
'2533':[[89,396],],
},{'63':[[89,430],],
'404':[[89,43],],
'454':[[89,192],],
'2519':[[89,415],],
},{'228':[[89,45],],
'454':[[89,203],],
},{'48':[[89,214],],
'236':[[89,47],],
},{'16':[[89,90],],
'274':[[94,42],[94,38],],
'586':[[306,556],],
},{'7':[[89,120],],
},{'128':[[89,286],],
'277':[[89,322],],
},{'19':[[153,1024],],
'2525':[[89,287],],
'2990':[[153,830],],
},{'15':[[384,9601],],
'19':[[355,586],[89,481],],
'39':[[355,567],],
'203':[[162,125],],
'2378':[[335,58],],
'2526':[[89,288],],
'2528':[[335,1941],[335,1837],[335,2287],[335,2684],],
'4405':[[384,3135],],
},{'15':[[384,9432],],
'23':[[335,2286],[335,1836],[186,345],],
'33':[[335,2683],[335,1940],],
'38':[[89,308],],
'128':[[313,51],],
'152':[[335,1770],[335,1631],[335,1492],[355,165],[355,569],],
'158':[[89,292],],
'2530':[[89,368],],
'5142':[[384,8758],],
},{'152':[[381,386],[89,311],],
},{'23':[[355,411],],
'149':[[342,223],],
'518':[[178,276],],
'532':[[89,367],],
'673':[[170,170],],
'681':[[170,136],],
'682':[[178,282],[89,473],[213,412],],
'1416':[[335,567],],
},{'7':[[189,639],[124,38],[369,27],[218,3],[377,30],[171,623],[189,3],],
'73':[[89,377],],
'117':[[213,0],],
'228':[[213,16],],
'474':[[218,380],],
'1225':[[152,129],],
'1326':[[335,844],],
'1592':[[153,968],],
'2996':[[153,930],],
},{'16':[[209,250],],
'31':[[89,394],],
'149':[[363,333],],
'224':[[242,179],],
'918':[[209,242],],
},{'346':[[274,822],],
'836':[[246,1435],],
'2532':[[89,395],],
'2534':[[170,195],[170,181],],
'3587':[[181,711],],
},{'18':[[213,397],[89,458],],
'26':[[313,219],],
'417':[[384,9711],[170,194],],
'940':[[384,7727],],
'960':[[335,1867],],
'2407':[[170,180],],
'2534':[[313,220],],
},{'7':[[124,56],[369,45],[171,641],[111,5],[377,48],],
'12':[[93,108],[89,477],],
'33':[[93,49],[111,81],],
'117':[[156,0],],
'329':[[156,15],],
'474':[[111,91],],
},{'12':[[95,339],[89,479],],
'27':[[137,266],],
'137':[[355,806],],
},{'7':[[171,552],[292,3],[92,128],[116,5],[254,191],[292,61],[211,116],],
'117':[[90,0],],
'182':[[90,16],],
'667':[[116,133],],
},{'7':[[90,3],[90,64],[92,126],[310,5],[254,189],[171,550],[211,114],],
'33':[[231,122],],
'117':[[116,0],],
'123':[[116,16],],
'667':[[310,29],],
},{'7':[[90,5],[383,3],[92,130],[171,554],[211,118],[254,193],[383,29],],
'117':[[292,0],],
'404':[[292,16],],
'667':[[90,66],],
},{'134':[[90,33],],
'404':[[90,18],],
'713':[[90,62],],
},{'274':[[309,24],],
'275':[[384,2843],],
'417':[[292,35],[292,58],[292,30],[90,51],[90,26],],
},{'149':[[91,32],],
'3151':[[164,127],],
'4045':[[274,77],],
},{'3':[[91,37],],
'152':[[246,1754],],
'904':[[384,1892],],
},{'3':[[355,1402],],
'1151':[[181,642],],
'1764':[[91,41],],
},{'34':[[384,3383],],
'37':[[384,1643],[91,43],],
'1315':[[340,142],[308,175],],
},{'2545':[[91,44],],
},{'2':[[227,103],[171,88],[171,63],[227,69],],
'15':[[171,68],[227,74],],
'33':[[277,20],],
'77':[[174,39],],
'81':[[124,24],[92,22],],
'165':[[211,24],],
'203':[[277,383],[355,70],],
'2036':[[171,33],[277,902],[227,28],],
'3786':[[227,174],],
},{'7':[[92,112],[157,3],[157,80],[171,536],[211,100],[254,175],[313,5],],
'16':[[361,64],],
'26':[[313,107],],
'117':[[361,0],],
'182':[[361,16],],
'346':[[313,259],],
'667':[[313,491],],
},{'7':[[171,544],[211,108],[373,5],[367,138],[254,183],[367,3],[92,120],],
'18':[[367,102],],
'117':[[250,0],],
'123':[[250,16],],
'140':[[373,103],],
'667':[[373,116],],
'1391':[[373,34],],
'2675':[[384,9514],],
},{'7':[[92,124],[116,3],[116,131],[367,5],[171,548],[211,112],[254,187],],
'117':[[310,0],],
'140':[[367,110],],
'173':[[310,16],],
'667':[[367,140],],
'857':[[153,1412],],
'888':[[335,670],],
},{'7':[[92,132],[171,556],[327,29],[211,120],[254,195],[292,5],[327,3],],
'94':[[383,17],],
'117':[[383,0],],
'667':[[292,63],],
'3506':[[179,864],],
},{'7':[[92,134],[104,3],[104,29],[171,558],[383,5],[211,122],[254,197],],
'94':[[327,17],],
'117':[[327,0],],
'667':[[383,31],],
'1029':[[179,877],],
},{'7':[[92,136],[94,3],[94,55],[327,5],[254,199],[171,560],[211,124],],
'94':[[104,17],],
'117':[[104,0],],
'667':[[327,31],],
},{'7':[[92,144],[295,3],[254,207],[138,5],[211,132],[171,568],[295,45],],
'117':[[98,0],],
'123':[[98,16],],
'667':[[138,46],],
},{'7':[[92,146],[98,5],[374,3],[171,570],[211,134],[254,209],[374,41],],
'117':[[295,0],],
'123':[[295,16],],
'135':[[361,76],],
'667':[[98,50],],
},{'7':[[92,150],[171,574],[211,138],[220,3],[220,130],[254,213],[374,5],],
'117':[[329,0],],
'123':[[329,16],],
'667':[[374,43],],
'940':[[384,7357],],
},{'7':[[92,152],[171,576],[211,140],[329,5],[254,215],[225,48],[225,3],],
'117':[[220,0],],
'123':[[220,16],],
'147':[[335,1263],[220,91],],
'667':[[329,74],],
'2160':[[335,1035],],
},{'7':[[92,156],[118,3],[118,224],[171,580],[211,144],[225,5],[254,219],],
'117':[[268,0],],
'123':[[268,16],],
'275':[[384,5269],],
'667':[[225,50],],
},{'7':[[92,166],[170,3],[170,280],[171,590],[254,229],[191,5],[211,154],],
'63':[[384,4944],],
'117':[[396,0],],
'236':[[396,16],],
'264':[[335,3192],],
'420':[[363,510],],
'667':[[191,306],],
'1364':[[189,514],],
'2675':[[384,7851],],
'4371':[[335,3235],],
},{'7':[[124,32],[377,24],[218,378],[369,21],[171,617],],
'19':[[93,45],],
'23':[[111,38],[156,47],[93,101],],
'82':[[377,56],],
'89':[[111,32],],
'117':[[93,0],],
'346':[[156,132],],
'1329':[[93,12],],
'2514':[[111,17],],
},{'12':[[93,59],],
'228':[[93,24],],
},{'23':[[156,130],],
'228':[[93,30],],
'408':[[93,70],],
},{'123':[[93,42],],
'1387':[[93,88],],
},{'31':[[111,60],[93,94],],
},{'57':[[93,111],],
},{'19':[[381,51],],
'23':[[181,974],[176,231],[93,133],],
'40':[[384,3815],],
'220':[[368,24],[359,78],],
'431':[[394,60],],
},{'16':[[93,135],],
'18':[[336,86],],
'31':[[172,136],],
'147':[[384,5023],],
'301':[[251,149],],
'607':[[200,275],],
},{'659':[[153,329],[94,23],],
'2179':[[153,434],],
'2523':[[94,39],],
'2963':[[153,338],],
},{'23':[[153,46],[95,79],],
'248':[[98,36],],
'1202':[[274,340],],
},{'12':[[355,1414],[95,107],],
},{'277':[[95,110],],
},{'73':[[121,410],],
'128':[[353,28],[316,116],],
'248':[[160,229],[95,128],],
'836':[[288,36],],
},{'30':[[344,242],],
'43':[[95,150],],
'128':[[206,35],],
'164':[[131,160],],
'347':[[355,1142],],
'800':[[118,104],],
'3004':[[153,1212],],
},{'1141':[[95,165],],
},{'23':[[181,582],[95,174],],
},{'43':[[186,276],[95,347],],
'48':[[181,679],],
'63':[[355,636],],
'73':[[373,94],[335,3403],],
'121':[[218,335],],
'152':[[269,185],],
'164':[[164,558],],
'202':[[121,242],],
'224':[[355,216],],
'248':[[277,409],[102,177],[235,308],[186,406],],
'250':[[102,117],],
'339':[[176,269],],
'2833':[[362,50],],
},{'121':[[384,6577],[384,6565],],
'165':[[251,30],[384,6393],[384,6403],],
'176':[[384,8222],],
'230':[[384,6412],[197,543],[283,242],[384,8031],[384,8055],],
'241':[[384,4962],],
'387':[[384,7802],],
'388':[[363,732],],
'397':[[384,6445],],
'415':[[384,1578],],
'961':[[321,287],],
'1002':[[95,354],],
'1101':[[384,4947],],
'1353':[[384,4143],],
'1606':[[384,5295],],
'2181':[[384,8008],],
'2581':[[246,1400],[266,191],],
'5121':[[384,8034],],
},{'236':[[156,27],[196,26],],
'277':[[218,67],],
'447':[[196,62],[156,68],],
'2179':[[95,358],],
},{'12':[[363,237],],
'664':[[363,47],],
'2384':[[95,394],],
'4530':[[363,220],],
},{'173':[[363,51],],
'2579':[[95,395],],
'4531':[[363,230],],
},{'23':[[95,411],[95,435],[95,456],[246,1399],[266,190],[162,231],],
'173':[[363,55],],
'205':[[95,494],],
'449':[[363,258],],
'2579':[[363,238],],
'2580':[[95,396],],
},{'63':[[162,233],],
'236':[[363,59],],
'241':[[363,249],],
'2581':[[95,397],],
'2582':[[363,250],],
},{'23':[[95,438],[95,453],[100,152],[153,1048],[160,375],[363,529],[335,2854],[335,2382],],
'48':[[335,2024],[335,2752],],
'4270':[[331,452],],
},{'301':[[99,162],],
'425':[[213,370],],
'2160':[[95,476],],
},{'31':[[396,158],],
'203':[[321,277],],
'420':[[213,468],[246,1392],[191,194],],
'2584':[[95,477],],
'3626':[[384,6418],],
'3835':[[244,122],],
},{'2157':[[95,500],],
'2158':[[95,496],],
},{'2157':[[95,502],],
'2158':[[95,498],],
},{'321':[[96,25],],
},{'2':[[161,237],[249,181],[249,142],[249,162],[161,139],],
'12':[[384,3752],],
'19':[[161,64],[96,34],[161,100],],
'23':[[161,115],[161,495],[161,336],[384,3965],[277,253],[96,109],[96,91],[96,66],],
'24':[[339,197],],
'47':[[161,375],],
'84':[[161,172],],
'155':[[214,318],],
'275':[[161,90],],
'567':[[384,7960],],
'648':[[214,329],],
'792':[[214,315],],
'1481':[[161,216],],
'2595':[[96,57],],
'2596':[[96,60],],
'3110':[[161,177],[161,181],],
'3112':[[161,185],[161,189],],
'3120':[[161,380],],
},{'33':[[96,42],[161,49],[161,55],[384,8531],[249,63],[384,4176],[384,4163],[384,3319],[390,116],],
'77':[[384,3359],[384,3635],],
'140':[[161,462],],
'250':[[384,3653],],
'506':[[390,109],[384,2392],],
'792':[[384,3092],],
},{'33':[[384,2771],],
'101':[[384,7251],[384,6981],],
'780':[[384,6940],],
'1261':[[384,7149],],
'1283':[[384,7069],],
'2590':[[384,4177],[384,4164],[96,43],[161,50],[384,3320],[390,110],],
'2611':[[384,3463],[384,2408],],
'3671':[[384,6819],],
'4667':[[384,7321],[384,7006],],
'4701':[[384,7106],],
},{'20':[[96,50],],
},{'20':[[96,53],],
},{'20':[[96,55],],
'23':[[277,256],[249,156],[249,146],[161,505],[161,223],],
'77':[[384,7965],],
'224':[[161,174],],
'2589':[[161,178],[96,58],[161,182],[161,186],],
},{'2594':[[96,56],],
},{'2594':[[96,59],],
},{'31':[[96,78],],
},{'75':[[96,80],],
'77':[[384,4647],],
'2212':[[96,95],],
},{'23':[[384,3969],[96,86],],
'39':[[214,322],],
'203':[[161,201],],
'968':[[384,3943],],
'1915':[[384,5343],],
'2589':[[161,496],],
},{'23':[[96,101],],
'33':[[96,129],],
},{'205':[[191,200],],
'2060':[[384,1800],],
'2600':[[96,102],],
},{'23':[[96,112],],
'694':[[249,72],],
'1998':[[161,468],],
},{'12':[[96,183],],
'238':[[96,120],],
},{'12':[[331,363],],
'513':[[96,123],],
'1278':[[220,21],[98,21],[268,21],[295,21],[329,21],[225,21],[138,21],[374,21],],
},{'931':[[96,133],],
},{'89':[[96,137],],
},{'38':[[96,142],],
},{'288':[[96,159],],
'307':[[173,260],[137,215],],
'795':[[389,49],[151,49],],
'2352':[[186,366],],
},{'26':[[161,98],],
'370':[[96,162],],
},{'12':[[341,95],[246,409],[307,95],],
'27':[[96,180],],
'43':[[160,422],],
'164':[[337,108],[313,367],],
},{'23':[[96,185],],
'33':[[384,2763],[384,2407],],
'63':[[384,3462],[384,3455],],
'77':[[384,7950],[384,7945],],
'250':[[384,7112],],
'1169':[[384,7109],],
'4677':[[384,3643],],
},{'7':[[171,713],[317,3],[143,3],[143,67],[241,45],[369,117],],
'117':[[97,0],],
'173':[[97,16],],
'178':[[317,135],],
'420':[[164,347],],
},{'7':[[97,3],[97,42],[171,711],[241,43],[369,115],],
'117':[[317,0],],
'140':[[365,209],],
'173':[[317,14],],
'178':[[365,235],],
},{'134':[[97,28],],
'2318':[[97,18],],
},{'16':[[98,30],],
'5103':[[384,9500],],
},{'39':[[98,33],],
},{'7':[[99,20],],
'163':[[99,176],],
'229':[[99,63],],
'230':[[274,379],],
'1342':[[274,166],],
},{'7':[[99,26],],
'12':[[274,423],],
'928':[[99,74],],
'2638':[[99,198],],
},{'7':[[99,32],],
'34':[[99,82],],
'2148':[[99,242],],
},{'7':[[99,38],],
'928':[[99,92],],
'2637':[[99,271],],
},{'7':[[99,44],],
'165':[[99,105],],
},{'7':[[99,107],[99,50],],
},{'7':[[173,107],[178,91],],
'23':[[99,296],[300,31],[141,32],[143,27],[99,217],[290,94],[170,244],[172,76],[99,55],[162,155],[277,487],[217,313],[244,36],],
'315':[[118,32],],
'518':[[384,5177],],
'672':[[335,2088],],
'1135':[[269,189],],
'1301':[[170,48],],
'2495':[[191,294],],
},{'33':[[99,89],],
'349':[[384,4547],],
'1307':[[384,927],],
'4680':[[384,522],],
},{'7':[[99,94],],
},{'2':[[266,289],],
'15':[[164,129],],
'26':[[121,502],],
'31':[[153,1043],],
'39':[[308,111],[340,78],[384,9813],],
'43':[[274,445],],
'152':[[180,181],],
'153':[[145,60],[212,62],],
'199':[[266,50],],
'305':[[384,6534],[384,5790],],
'349':[[384,5329],],
'420':[[335,3285],],
'562':[[283,228],],
'613':[[274,64],],
'696':[[355,431],],
'817':[[246,615],],
'921':[[99,98],],
'1020':[[153,606],],
'1591':[[153,1056],[153,1249],[153,788],[153,694],],
},{'518':[[99,102],],
},{'19':[[99,189],[99,114],],
},{'16':[[160,576],[160,585],],
'43':[[242,129],[355,501],],
'63':[[384,6567],],
'81':[[384,5608],],
'184':[[300,50],],
'269':[[336,114],],
'321':[[384,6087],],
'609':[[384,7491],],
'696':[[355,487],],
'698':[[355,733],],
'1406':[[344,320],],
'1452':[[274,43],[303,154],[99,117],],
'1603':[[384,379],],
'2060':[[336,140],],
'2267':[[384,2605],],
'2332':[[335,1682],],
'3598':[[355,1097],],
'4050':[[274,153],],
},{'1116':[[99,124],],
'3058':[[160,52],],
'3909':[[246,1141],],
'3925':[[246,1307],],
},{'23':[[384,7237],],
'100':[[251,74],],
'186':[[384,7128],[274,269],],
'277':[[384,1263],[384,1360],],
'449':[[384,8608],[99,146],],
'791':[[274,239],[384,2423],[274,300],],
'931':[[179,356],[179,847],[290,618],[179,458],[290,512],[290,410],[290,565],[179,564],[179,511],],
'1004':[[384,8456],],
'1304':[[384,938],],
'1305':[[384,1219],[384,4973],],
'1309':[[384,907],],
'2323':[[384,7840],],
'3627':[[251,231],],
},{'277':[[384,129],],
'284':[[99,150],],
},{'163':[[99,159],],
},{'248':[[251,100],[99,164],],
'577':[[160,79],],
},{'23':[[274,496],],
'165':[[99,167],],
'1452':[[358,259],],
},{'1553':[[99,172],],
},{'165':[[99,270],[99,280],[99,174],],
},{'43':[[181,797],],
'146':[[257,105],[200,143],],
'837':[[99,197],],
'979':[[251,320],],
'2977':[[153,618],],
'3938':[[251,252],],
},{'152':[[301,22],],
'215':[[288,33],],
'2618':[[99,199],],
},{'16':[[214,218],],
'163':[[99,204],],
'568':[[331,246],],
'1911':[[384,9522],],
},{'149':[[99,215],],
},{'102':[[384,1128],[384,2969],[99,234],],
},{'250':[[99,259],],
},{'2643':[[99,260],],
},{'140':[[99,274],],
'1315':[[99,263],],
},{'15':[[99,278],],
'267':[[186,483],],
'861':[[384,646],],
},{'19':[[99,291],],
'2671':[[384,9261],],
},{'31':[[179,658],],
'2647':[[99,292],],
},{'12':[[135,56],[188,32],[209,78],[332,60],[269,53],[284,54],[100,51],],
'202':[[214,247],],
},{'3':[[181,501],],
'2583':[[100,153],],
},{'681':[[384,2438],],
'2650':[[100,154],],
},{'23':[[135,211],[100,164],],
},{'250':[[135,213],[100,166],],
},{'15':[[109,19],],
'73':[[283,173],],
'404':[[283,20],[187,23],],
'780':[[187,66],],
'1072':[[100,181],],
'2220':[[283,53],],
'2267':[[283,212],],
},{'23':[[112,49],[135,143],[100,186],],
'155':[[224,153],],
'1002':[[355,158],],
'1488':[[125,182],[159,49],],
'2836':[[344,134],[164,201],[355,273],],
},{'18':[[135,166],],
'1391':[[135,146],[100,189],],
},{'7':[[368,112],[171,783],[198,5],[368,3],[354,72],[369,187],],
'117':[[101,0],],
'169':[[286,37],],
'173':[[101,16],],
'232':[[198,97],],
},{'26':[[176,155],],
'217':[[122,133],],
'220':[[122,92],[122,87],],
'353':[[193,86],[352,86],],
'1911':[[101,24],],
},{'128':[[101,26],],
'2661':[[101,41],],
},{'2659':[[101,27],],
},{'231':[[101,40],],
'550':[[384,8340],],
'1540':[[384,8231],],
'3746':[[384,2402],],
'4620':[[384,609],],
'4645':[[384,304],],
},{'12':[[187,171],[101,46],],
'63':[[266,238],],
'164':[[340,102],[308,135],],
'1132':[[384,3404],],
},{'16':[[122,81],],
'31':[[176,142],],
'447':[[102,61],],
'3005':[[213,425],[189,565],],
},{'149':[[102,69],],
},{'297':[[102,82],],
'447':[[102,88],],
},{'2665':[[102,83],],
},{'241':[[102,85],],
},{'2667':[[102,86],],
},{'2301':[[102,91],],
},{'39':[[103,95],[150,95],[102,106],],
'63':[[363,659],[199,52],],
'250':[[384,6880],],
},{'15':[[384,2960],],
'34':[[355,945],],
'59':[[384,7311],[341,176],[102,123],[331,249],[384,4444],[307,176],[102,111],],
'140':[[246,197],[384,553],[251,164],[280,95],[371,88],],
'155':[[384,6933],],
'231':[[359,143],[338,79],],
'255':[[287,101],[355,864],[384,996],],
'1393':[[246,1215],],
'1479':[[384,1709],],
'2010':[[384,8311],],
'4226':[[384,1776],[384,839],[384,2269],[384,2747],[384,9138],[384,9260],],
},{'290':[[102,119],],
},{'2466':[[102,137],],
'4201':[[387,97],[311,97],],
},{'203':[[102,142],],
},{'5':[[384,4638],],
'9':[[384,7523],],
'10':[[384,5914],[384,9530],],
'12':[[102,144],[384,2383],],
'13':[[384,4179],[384,6333],],
'20':[[384,9180],[384,7617],],
'30':[[176,177],[384,9818],],
'31':[[384,5378],],
'38':[[384,3787],],
'79':[[384,8432],],
'82':[[384,8788],[384,5884],[384,5784],[384,8938],],
'83':[[384,9246],],
'101':[[384,14],],
'131':[[384,9548],],
'135':[[384,1789],],
'158':[[384,6015],],
'165':[[384,6647],],
'206':[[384,6552],],
'215':[[384,272],[384,6608],[384,7213],],
'217':[[384,4467],[384,7629],[384,2454],[384,4636],],
'221':[[384,9658],],
'222':[[384,7301],],
'238':[[384,2475],],
'265':[[384,3679],],
'274':[[384,2675],],
'277':[[384,1400],[384,2477],[384,1423],[384,8257],[384,2418],[384,7480],[384,1679],[384,2668],[384,1704],[384,1016],[384,2442],[384,242],[384,627],[384,2456],],
'298':[[384,9827],],
'302':[[384,4675],[384,5365],[384,7386],],
'305':[[384,3694],[381,502],],
'436':[[384,8298],],
'447':[[384,6530],],
'489':[[384,1821],],
'491':[[384,8287],],
'567':[[384,5808],],
'593':[[384,1398],[384,5830],],
'609':[[384,7506],[384,5015],],
'666':[[384,6673],],
'700':[[384,3972],],
'706':[[384,9067],],
'791':[[384,6513],[384,818],[384,579],[384,6474],],
'792':[[384,240],],
'817':[[384,7053],],
'849':[[384,8331],],
'855':[[384,980],[384,1760],],
'888':[[384,8278],],
'912':[[384,1737],[384,3941],],
'926':[[384,7838],],
'935':[[384,9449],[384,6495],],
'949':[[384,9526],],
'960':[[384,9393],],
'986':[[384,5168],],
'1109':[[384,5953],],
'1125':[[384,83],],
'1135':[[384,2070],],
'1156':[[384,8289],[384,8333],[384,8280],],
'1255':[[384,2737],],
'1261':[[384,5206],],
'1325':[[384,9725],],
'1369':[[384,7232],],
'1412':[[384,9060],],
'1424':[[384,9328],[384,8327],],
'1462':[[384,9372],[384,3533],[384,4987],],
'1504':[[384,9460],],
'1608':[[384,9513],],
'1672':[[384,3231],],
'1746':[[384,3803],],
'1819':[[384,7365],],
'1839':[[384,7605],],
'1898':[[384,9458],],
'1908':[[384,8126],],
'1955':[[384,5031],],
'2034':[[384,111],[384,625],],
'2076':[[384,287],],
'2300':[[384,5974],],
'2313':[[384,6631],],
'2323':[[384,8888],],
'2332':[[384,5079],],
'2409':[[384,38],],
'2415':[[384,7866],],
'2466':[[384,5226],],
'2591':[[384,7252],[384,6982],[384,6820],[384,7007],],
'2671':[[384,8312],[384,2270],],
'2675':[[384,9358],[384,5481],[384,7054],[384,5506],[384,7594],[384,5207],[384,4468],[384,9450],[384,7606],[384,5398],[384,9373],[384,9562],[384,8889],[384,5188],[384,5354],[384,7630],[384,5240],[384,9394],[384,8563],[384,7618],[384,5169],[384,7481],[384,9166],[384,5227],[384,4676],[384,9828],[384,5544],[384,9835],],
'2686':[[384,312],],
'2719':[[384,9357],],
'2909':[[384,7580],],
'2942':[[384,1451],],
'3099':[[384,8110],[384,8562],],
'3100':[[384,261],],
'3135':[[384,4656],],
'3196':[[384,289],[384,2038],[384,314],[384,2644],[384,274],[384,263],[384,113],[384,607],[384,1002],[384,85],[384,1018],[384,1762],[384,1038],[384,2272],[384,2255],[384,1453],[384,1739],[384,2739],[384,2723],[384,2677],[384,581],[384,2072],],
'3253':[[381,93],[384,9470],[381,384],],
'3548':[[384,9561],],
'3803':[[384,9165],],
'3911':[[384,1702],],
'3932':[[384,1036],],
'4095':[[384,2398],],
'4323':[[384,5187],],
'4405':[[384,8953],[384,6581],],
'4491':[[384,1000],],
'4576':[[384,9267],],
'4622':[[384,822],],
'4629':[[384,3419],],
'4685':[[384,605],],
'4686':[[384,2093],],
'4741':[[384,1110],],
'4760':[[384,2440],],
'4764':[[384,1421],],
'4772':[[384,1819],[384,2036],],
'4789':[[384,1677],],
'4838':[[384,2642],[384,2416],[384,2989],[384,3199],[384,2666],[384,2253],],
'4862':[[384,6955],],
'4866':[[384,9237],],
'4870':[[384,2721],],
'4874':[[384,4311],[384,4413],],
'4894':[[384,5480],],
'4907':[[384,4252],[384,3341],],
'4944':[[384,3707],],
'4987':[[384,4448],[384,5058],],
'5022':[[384,5397],[384,5708],[384,5543],[384,5505],],
'5029':[[384,5239],],
'5037':[[384,5353],],
'5056':[[384,6006],],
'5069':[[384,7398],],
'5094':[[384,7279],],
'5111':[[384,8263],],
'5116':[[384,7593],],
'5123':[[384,7850],],
'5150':[[384,9719],[384,9689],[384,9809],],
'5152':[[384,8707],[384,9047],[384,8636],],
'5171':[[384,9123],],
'5204':[[384,9736],],
'5215':[[384,9834],],
},{'130':[[200,265],],
'155':[[102,173],],
},{'12':[[102,190],[131,163],[146,161],[247,224],],
'63':[[153,881],],
'164':[[181,365],],
'396':[[153,1362],],
'2180':[[153,1073],],
'2999':[[153,1140],],
},{'7':[[353,189],[353,3],[139,52],[150,5],[171,1071],[369,475],],
'117':[[103,0],],
'123':[[103,16],],
'733':[[150,130],],
'2679':[[150,92],[103,92],],
},{'7':[[103,3],[328,5],[103,127],[139,50],[171,1069],[369,473],],
'67':[[103,91],[150,91],],
'117':[[150,0],],
'123':[[150,16],],
'733':[[328,39],],
},{'7':[[103,5],[171,1073],[106,3],[106,60],[139,54],[369,477],],
'117':[[353,0],],
'173':[[353,16],],
'733':[[103,130],],
},{'93':[[103,18],],
'346':[[150,20],],
},{'12':[[150,57],[103,57],],
'333':[[150,23],[103,23],],
'855':[[150,43],[103,43],],
},{'12':[[150,79],[150,30],],
'19':[[103,27],],
'23':[[150,60],],
'346':[[103,79],[103,64],],
},{'26':[[150,47],[103,47],],
},{'2684':[[150,48],[103,48],],
},{'579':[[384,563],[384,311],],
'2327':[[103,61],],
'2683':[[150,61],],
'4769':[[384,1458],],
},{'2':[[150,66],[103,66],],
'459':[[181,1014],],
},{'792':[[150,87],[103,87],],
},{'779':[[150,101],[103,101],],
'1151':[[384,3251],],
'3196':[[384,3497],],
'4190':[[384,2101],],
},{'3':[[251,334],],
'175':[[164,467],[164,646],],
'518':[[164,571],],
'609':[[150,115],[103,115],],
'3968':[[246,1959],],
'4007':[[384,9463],],
'5234':[[388,67],[388,60],],
},{'272':[[290,106],],
'530':[[331,270],[313,338],[274,413],],
'550':[[121,302],],
'554':[[246,898],],
'1101':[[246,981],],
'2528':[[355,570],],
'2690':[[103,116],[150,116],],
},{'39':[[150,120],[103,120],],
},{'77':[[246,1050],],
'152':[[150,122],[103,122],],
},{'7':[[288,3],[171,1020],[248,51],[275,3],[275,35],[369,424],],
'117':[[105,0],],
'173':[[105,16],],
'375':[[275,33],],
'1037':[[288,56],],
},{'7':[[105,3],[369,422],[105,70],[171,1018],[248,49],],
'33':[[350,139],[321,231],],
'77':[[294,46],[105,43],[258,51],],
'117':[[288,0],],
'173':[[288,14],],
'1037':[[360,60],],
},{'7':[[105,5],[294,48],[171,1022],[248,53],[369,426],[294,3],],
'117':[[275,0],],
'173':[[275,16],],
'1037':[[105,74],],
},{'7':[[350,150],],
'23':[[105,50],[105,22],],
'134':[[105,26],],
'173':[[105,18],],
'722':[[275,29],[275,21],],
},{'7':[[350,28],],
'23':[[105,67],],
'48':[[350,148],],
'2007':[[105,41],],
},{'150':[[105,55],],
},{'837':[[105,59],],
},{'128':[[288,31],],
'248':[[105,63],],
},{'39':[[384,9565],],
'55':[[161,501],],
'722':[[106,24],],
'921':[[188,129],],
'2221':[[277,586],],
'2662':[[384,3405],],
},{'499':[[246,160],],
'615':[[106,44],],
},{'91':[[210,160],[353,111],[353,120],[353,139],[353,183],[357,35],[106,48],],
},{'31':[[106,54],],
},{'33':[[106,58],],
},{'220':[[107,21],],
'2866':[[129,19],],
},{'7':[[369,76],[171,672],[245,50],[280,3],[280,124],],
'117':[[108,0],],
'169':[[342,334],],
'2252':[[108,14],],
},{'7':[[369,78],[171,674],[334,91],[245,52],[334,3],[108,3],],
'12':[[371,110],],
'33':[[304,164],],
'117':[[280,0],],
'123':[[280,16],],
'140':[[339,91],],
'147':[[335,167],[179,917],],
'169':[[108,29],],
},{'15':[[108,22],],
'841':[[304,324],],
'2252':[[304,112],],
},{'7':[[108,24],[241,75],[171,668],[369,72],[304,3],[245,46],],
'33':[[154,27],],
'93':[[145,16],],
'117':[[342,0],],
'128':[[342,88],],
'169':[[304,406],],
'288':[[154,21],],
'346':[[110,41],[384,4203],],
'593':[[145,20],],
'684':[[154,17],],
'722':[[154,32],],
'1027':[[145,31],],
'1329':[[342,14],],
'2267':[[145,26],],
'2916':[[145,69],],
},{'94':[[111,21],[306,1554],[306,337],[114,17],],
'134':[[114,34],],
'142':[[111,41],],
'1029':[[306,1574],[306,1606],],
'1576':[[306,1561],],
'2499':[[111,83],],
},{'123':[[111,23],],
'2258':[[111,54],],
},{'23':[[112,44],],
'26':[[384,4400],],
'47':[[384,7435],[112,20],],
},{'29':[[112,36],],
'34':[[222,28],],
'2714':[[384,7436],[112,21],],
'3263':[[352,66],[193,66],],
'3997':[[342,151],],
},{'199':[[112,140],[112,33],],
},{'230':[[355,1359],],
'2104':[[112,55],],
},{'609':[[112,97],[112,60],],
},{'12':[[331,180],],
'19':[[162,65],[295,34],[112,101],],
'59':[[355,1293],],
'532':[[235,235],],
'615':[[384,7344],],
'1471':[[384,9065],],
'3253':[[384,8726],],
'4724':[[384,3236],],
'5180':[[384,9356],],
},{'39':[[112,111],],
'305':[[335,2079],[179,1291],],
},{'26':[[181,865],],
'83':[[336,123],],
'147':[[113,29],],
'154':[[113,20],],
'160':[[287,85],[181,1018],],
'199':[[320,98],],
'343':[[137,238],[173,283],],
'540':[[394,199],],
'2325':[[394,185],],
},{'1680':[[113,31],],
},{'33':[[113,33],],
'73':[[206,72],],
'2113':[[206,76],],
'2725':[[113,48],],
},{'227':[[113,46],],
},{'2724':[[113,47],],
},{'18':[[305,67],],
'19':[[113,65],],
'23':[[381,38],],
'38':[[246,557],],
},{'19':[[114,43],],
'1325':[[169,44],],
'2726':[[113,66],],
'4919':[[384,3417],],
},{'7':[[369,453],[139,30],[169,3],[169,72],[171,1049],],
'117':[[114,0],],
'124':[[114,14],],
'733':[[357,55],],
},{'7':[[114,3],[299,44],[139,32],[299,3],[369,455],[171,1051],],
'117':[[169,0],],
'124':[[169,16],],
'733':[[114,74],],
},{'26':[[169,57],[114,56],],
'33':[[384,7874],],
'89':[[169,41],[114,40],],
'94':[[169,19],],
'134':[[169,36],],
'700':[[169,25],[114,23],],
},{'314':[[114,54],[169,28],[169,55],[114,26],],
},{'915':[[169,34],[114,32],],
},{'357':[[169,64],[114,63],],
},{'23':[[169,70],[114,69],],
},{'147':[[367,95],],
'285':[[116,129],],
'1244':[[181,192],],
'1814':[[270,249],],
},{'182':[[167,23],[117,23],],
},{'615':[[235,110],[244,64],[118,63],],
},{'23':[[235,466],[363,583],],
'436':[[335,984],[335,1076],[335,1645],[335,1794],[244,85],[118,76],],
},{'16':[[118,99],],
'203':[[186,382],],
},{'199':[[118,113],],
'271':[[336,161],],
},{'16':[[244,177],[118,135],],
},{'19':[[268,38],[384,7730],],
'546':[[244,203],[118,172],],
},{'26':[[199,63],[363,670],[379,147],],
'165':[[384,903],[244,147],],
'338':[[384,4682],],
'2742':[[244,204],[118,173],],
},{'12':[[200,181],[243,224],[246,17],[121,25],],
},{'167':[[246,314],],
'489':[[121,28],],
'596':[[251,249],[251,64],],
},{'26':[[121,387],],
'37':[[331,491],],
'575':[[121,95],[121,39],],
'1198':[[121,569],],
},{'19':[[121,82],],
},{'506':[[121,84],],
},{'215':[[335,2021],[335,2749],],
'2748':[[121,85],],
},{'2010':[[121,415],],
'2749':[[121,86],],
},{'596':[[121,89],],
},{'152':[[277,636],[121,117],],
'1225':[[246,1481],],
},{'152':[[121,119],],
},{'36':[[121,148],],
},{'23':[[121,166],],
},{'19':[[121,400],[121,193],],
'429':[[161,351],],
},{'1781':[[121,474],],
'2756':[[121,401],[121,194],],
'2772':[[246,1179],],
},{'1315':[[121,197],],
'2746':[[121,388],],
},{'16':[[121,206],],
},{'23':[[246,1078],],
'680':[[121,210],],
},{'37':[[121,216],],
'861':[[302,137],[134,135],],
},{'277':[[224,111],],
'491':[[121,225],],
'2486':[[251,302],[384,797],[384,2212],[251,266],],
},{'31':[[121,236],],
},{'19':[[121,240],],
},{'67':[[121,245],],
'82':[[246,96],],
'132':[[334,64],],
'370':[[191,271],],
'502':[[186,408],],
'551':[[353,44],],
'790':[[331,159],],
'869':[[335,1196],[335,1221],[335,1755],],
'2058':[[335,1777],[335,1537],[335,1587],[335,1679],[335,1442],[335,1392],],
'2449':[[181,675],],
'4313':[[335,1290],[353,50],],
},{'23':[[121,328],],
},{'1225':[[121,358],],
},{'12':[[121,367],],
},{'26':[[121,396],],
},{'1164':[[121,407],],
},{'346':[[164,589],],
'1547':[[235,291],],
'1781':[[121,412],],
},{'16':[[246,953],],
'1381':[[121,438],],
'1781':[[200,200],],
'2072':[[246,1178],],
'3274':[[246,1008],],
},{'374':[[277,345],],
'543':[[121,480],[121,466],],
'773':[[194,58],],
'3131':[[384,1441],],
},{'30':[[121,482],],
},{'23':[[121,525],],
'77':[[331,190],],
},{'531':[[121,551],],
},{'19':[[121,560],],
},{'7':[[122,26],],
'31':[[368,110],],
'140':[[160,321],],
'144':[[305,57],],
'203':[[160,293],],
'340':[[122,131],],
'346':[[160,396],],
'671':[[260,83],],
'1004':[[163,44],],
'1006':[[122,77],],
'1532':[[319,64],],
},{'7':[[122,44],],
'479':[[122,96],],
},{'7':[[122,98],[122,50],],
},{'7':[[122,65],[365,171],],
'63':[[186,100],],
'1003':[[313,347],],
'1493':[[122,54],],
},{'19':[[122,72],],
},{'2658':[[122,88],],
},{'28':[[122,104],],
},{'77':[[122,106],],
'2300':[[217,431],],
},{'128':[[123,16],[202,18],[221,18],[265,14],[323,16],[345,16],[395,18],],
'451':[[384,3553],],
'3579':[[384,3987],],
'4718':[[384,3527],],
},{'12':[[123,28],],
'532':[[384,4820],],
'3275':[[179,1044],],
},{'15':[[123,34],],
'277':[[266,329],],
},{'7':[[159,169],[159,6],[171,1288],],
'14':[[125,9],],
'117':[[125,0],],
'2789':[[159,170],],
},{'23':[[125,215],[125,11],],
'275':[[384,4014],],
},{'2':[[125,14],],
'152':[[277,639],],
},{'2791':[[125,15],],
},{'2792':[[125,16],],
},{'33':[[277,698],],
'837':[[277,705],],
'2793':[[125,17],],
},{'23':[[304,271],[304,280],],
'63':[[125,19],],
},{'16':[[125,92],],
'34':[[125,22],],
},{'63':[[125,24],],
},{'115':[[125,30],],
},{'16':[[258,41],],
'63':[[125,32],],
},{'23':[[125,35],],
},{'26':[[125,38],],
},{'19':[[125,41],],
},{'57':[[125,46],],
},{'23':[[125,49],],
'77':[[355,814],[242,107],],
},{'593':[[125,51],],
},{'2':[[188,90],],
'15':[[384,3042],[384,3163],],
'36':[[125,127],[125,54],],
'511':[[125,96],],
'921':[[384,3661],],
'2221':[[384,3401],],
'2675':[[384,3680],],
'2855':[[159,2],[125,272],[125,279],[171,1292],],
'3018':[[159,20],],
'4772':[[384,3476],],
'4915':[[384,3689],],
},{'67':[[125,60],],
'2806':[[125,128],[125,55],],
},{'82':[[277,60],],
'108':[[125,147],],
'818':[[321,398],],
'1697':[[384,886],],
'2807':[[125,56],],
'3104':[[161,333],],
'4636':[[384,228],],
'4664':[[384,1495],],
},{'77':[[336,93],],
'2808':[[125,57],],
},{'23':[[125,79],],
'149':[[125,151],],
'511':[[125,119],[125,103],],
},{'199':[[125,83],],
},{'598':[[125,94],],
},{'2806':[[125,97],],
},{'16':[[125,105],],
},{'2814':[[125,106],],
},{'23':[[200,183],[125,109],],
'481':[[384,2189],[384,786],],
'553':[[217,342],],
'635':[[384,3257],],
'1104':[[384,2883],],
'1245':[[384,408],],
'3850':[[384,2839],],
'4190':[[384,395],[384,570],],
'4622':[[384,3573],],
'4833':[[384,2185],],
},{'2807':[[125,129],],
},{'2817':[[125,130],],
},{'2818':[[125,131],],
},{'63':[[125,133],],
},{'2820':[[125,134],],
},{'598':[[125,136],],
},{'133':[[164,231],],
'1993':[[161,75],],
'2822':[[125,137],],
},{'995':[[125,141],],
},{'12':[[125,144],],
},{'39':[[384,5863],],
'2808':[[125,148],],
},{'562':[[125,159],],
},{'203':[[159,56],],
'639':[[125,164],],
},{'23':[[125,173],],
'152':[[159,58],[125,166],],
},{'130':[[159,51],],
'2829':[[125,174],],
},{'26':[[125,176],],
},{'12':[[159,45],],
'63':[[125,178],],
},{'89':[[362,49],],
'130':[[125,185],],
'252':[[362,30],],
},{'31':[[125,192],],
},{'15':[[125,196],],
'2838':[[125,204],],
},{'77':[[251,171],[160,131],[160,603],[344,315],[214,100],[243,37],[246,1370],[355,990],[277,714],[290,80],[335,2385],],
'154':[[125,199],],
'255':[[355,272],],
'931':[[164,200],],
'3251':[[344,133],],
},{'1002':[[125,201],],
},{'152':[[125,203],],
},{'2835':[[125,205],],
},{'152':[[125,211],],
},{'420':[[125,228],],
},{'1380':[[384,4589],],
'2841':[[125,229],],
},{'63':[[125,231],],
},{'2843':[[125,232],],
},{'23':[[125,234],],
},{'16':[[189,471],],
'2845':[[125,235],],
},{'420':[[125,244],],
},{'2847':[[125,245],],
},{'2':[[125,251],],
},{'33':[[125,255],],
},{'2850':[[125,256],],
},{'364':[[125,261],],
'1288':[[331,527],],
},{'23':[[125,268],],
},{'7':[[125,277],[171,1290],[125,270],],
'117':[[159,0],],
},{'2854':[[125,278],[159,1],[171,1291],[125,271],],
},{'2806':[[125,280],[159,3],[171,1293],[125,273],],
},{'16':[[128,213],[134,97],[302,94],[322,215],[126,32],],
},{'16':[[128,89],[134,106],],
'31':[[134,43],[128,45],],
},{'17':[[365,124],],
'82':[[134,49],[302,46],[128,51],[322,48],],
'173':[[365,38],[365,51],[365,62],[365,81],[365,92],[365,103],[365,27],],
'2795':[[304,281],],
},{'550':[[322,53],[128,56],],
},{'2858':[[134,107],[128,90],],
},{'51':[[384,3640],],
'347':[[384,6570],],
'420':[[359,105],],
'921':[[322,111],[128,109],],
},{'16':[[322,139],[314,46],[128,137],],
'31':[[363,414],[363,635],],
'203':[[161,518],],
},{'237':[[322,149],[337,60],[128,147],],
'316':[[363,98],],
'2179':[[196,85],[156,91],],
},{'203':[[322,190],[128,188],],
'2061':[[384,8943],],
},{'48':[[129,18],],
},{'12':[[341,230],[307,230],[384,2215],],
'38':[[246,537],],
'69':[[384,3414],],
'217':[[384,8974],],
'671':[[130,20],],
'4667':[[384,440],],
'4803':[[384,1817],],
'4927':[[384,5873],],
},{'18':[[384,1591],],
'128':[[132,20],],
},{'7':[[133,20],],
'229':[[133,82],],
},{'7':[[133,29],],
'60':[[133,89],],
},{'7':[[133,38],],
'48':[[133,100],],
},{'7':[[133,47],],
'2324':[[133,106],],
},{'7':[[133,56],],
'88':[[133,117],],
},{'7':[[133,65],],
'930':[[133,123],],
},{'7':[[133,125],[133,74],],
},{'290':[[133,96],],
},{'16':[[133,121],[133,104],],
},{'19':[[133,113],],
},{'152':[[133,115],],
},{'491':[[335,3443],],
'1133':[[302,133],[134,131],],
'4823':[[384,2051],],
},{'82':[[302,150],[134,148],],
},{'199':[[321,264],[135,47],],
},{'912':[[135,161],],
},{'199':[[135,194],],
},{'130':[[135,203],],
},{'16':[[320,146],],
'33':[[141,26],],
'39':[[152,168],],
'43':[[335,982],[320,162],],
'52':[[253,115],],
'348':[[193,56],[352,56],],
'349':[[142,139],],
'447':[[313,438],],
'712':[[173,232],[137,187],],
'870':[[213,350],[189,395],],
},{'700':[[137,206],[173,251],],
'778':[[173,236],[137,191],],
},{'147':[[173,253],[137,208],],
},{'48':[[173,258],[137,213],],
},{'15':[[186,151],],
'19':[[156,106],],
'36':[[173,263],[137,218],],
'128':[[282,23],[393,23],],
'203':[[181,90],],
},{'23':[[343,100],],
'63':[[173,281],[137,236],],
'462':[[394,45],],
},{'1061':[[173,304],[137,259],],
},{'301':[[246,914],],
'1225':[[138,42],],
},{'7':[[139,34],[169,5],[271,44],[171,1053],[271,3],[369,457],],
'18':[[312,57],],
'117':[[299,0],],
'182':[[299,16],],
'733':[[169,75],],
},{'7':[[139,36],[171,1055],[299,5],[205,3],[205,44],[369,459],],
'33':[[181,698],[209,222],],
'63':[[269,196],],
'117':[[271,0],],
'404':[[271,16],],
'733':[[299,47],],
},{'7':[[139,38],[271,5],[192,44],[192,3],[171,1057],[369,461],],
'117':[[205,0],],
'236':[[205,16],],
'733':[[271,47],],
'2179':[[153,872],],
'2999':[[153,1107],[153,1278],],
},{'7':[[139,40],[171,1059],[216,44],[216,3],[205,5],[369,463],],
'117':[[192,0],],
'182':[[192,16],],
'733':[[205,47],],
},{'7':[[139,42],[171,1061],[237,44],[192,5],[237,3],[369,465],],
'33':[[181,690],],
'117':[[216,0],],
'140':[[269,192],],
'404':[[216,16],],
'733':[[192,47],],
},{'134':[[352,30],[193,30],],
'147':[[193,83],[352,83],],
'328':[[352,20],[193,20],[140,18],],
'420':[[352,58],[193,58],],
},{'65':[[142,78],],
'123':[[142,26],],
},{'404':[[142,32],],
'2905':[[142,92],],
},{'404':[[142,38],],
'2906':[[142,98],],
},{'134':[[373,36],],
'182':[[373,18],[142,44],],
'2904':[[142,103],],
},{'26':[[142,102],],
'124':[[142,56],],
'682':[[142,115],],
},{'77':[[210,147],[142,91],],
'680':[[153,1314],],
'3566':[[181,447],],
},{'277':[[142,97],],
},{'7':[[142,100],],
'19':[[246,1147],],
'23':[[246,1236],[246,1083],],
'38':[[246,1240],],
'1123':[[246,1245],],
'2907':[[246,1241],],
},{'7':[[142,105],],
},{'422':[[142,120],],
'1198':[[384,7579],],
'2384':[[234,409],],
},{'31':[[142,154],],
'552':[[224,99],],
},{'12':[[142,168],],
'63':[[355,1074],],
},{'23':[[153,1224],[384,9674],],
'47':[[384,6805],],
'77':[[384,9454],],
'89':[[355,1104],[142,174],[153,520],],
'3642':[[188,121],],
'3648':[[188,170],],
},{'281':[[142,177],],
'2576':[[362,51],],
},{'7':[[245,70],[171,692],[154,5],[369,96],],
'117':[[145,0],],
'150':[[145,53],],
'169':[[154,44],],
'173':[[145,14],],
'375':[[342,321],],
},{'18':[[243,48],],
'38':[[358,286],],
'150':[[266,114],],
'301':[[174,124],[243,117],],
'926':[[335,2207],[335,3054],[337,87],],
'1431':[[165,63],],
'2626':[[274,446],[212,63],[145,61],],
},{'151':[[212,70],[145,68],],
'844':[[343,86],],
},{'2500':[[212,78],[145,76],],
},{'48':[[146,136],],
'482':[[146,51],],
'723':[[358,367],],
'786':[[146,41],],
},{'2918':[[146,137],],
},{'26':[[261,190],[358,350],],
'1194':[[146,149],],
},{'12':[[146,154],],
},{'19':[[146,167],],
},{'780':[[148,56],],
'1047':[[148,21],],
},{'15':[[297,26],[149,26],],
},{'7':[[362,5],[389,3],[171,791],[354,80],[389,52],[369,195],],
'117':[[151,0],],
'173':[[151,16],],
'232':[[362,76],],
},{'89':[[389,22],[151,22],],
},{'19':[[362,53],],
'479':[[160,401],[389,35],[151,35],],
},{'340':[[151,38],],
},{'7':[[152,20],],
'229':[[152,73],],
},{'7':[[152,26],],
'33':[[152,190],],
'350':[[152,77],],
'1506':[[178,215],],
},{'2930':[[152,27],],
},{'7':[[152,32],],
'131':[[152,86],],
},{'2932':[[152,33],],
},{'868':[[152,39],],
},{'7':[[152,44],],
'377':[[335,632],],
'378':[[153,1350],],
'1954':[[152,51],],
'2013':[[335,575],],
'2023':[[152,208],],
'2513':[[153,1125],],
'2531':[[335,845],[153,931],],
'2943':[[152,106],],
},{'2935':[[152,45],],
},{'7':[[152,56],],
'2944':[[152,118],],
},{'567':[[152,62],],
},{'12':[[335,942],[152,68],],
'154':[[159,139],],
},{'162':[[152,123],[152,71],],
'550':[[257,112],],
},{'3':[[274,713],[274,350],],
'23':[[152,83],],
'482':[[262,18],[219,18],],
},{'7':[[152,88],],
'567':[[288,39],],
'4707':[[384,967],],
'4768':[[384,1450],],
},{'613':[[152,105],],
'866':[[152,154],],
},{'7':[[152,117],],
},{'869':[[152,202],],
'1416':[[152,196],],
},{'23':[[152,211],],
},{'343':[[152,220],],
},{'26':[[153,48],],
'420':[[153,98],],
},{'271':[[384,5406],],
'420':[[153,108],],
'566':[[381,109],],
'921':[[153,88],],
'1003':[[181,761],],
'1868':[[384,8293],],
'2352':[[227,216],],
'4576':[[384,7262],],
},{'33':[[384,9376],],
'2026':[[153,140],],
},{'837':[[153,166],],
},{'2951':[[153,167],],
},{'16':[[153,169],],
'4620':[[384,1741],],
},{'7':[[380,20],],
'1273':[[153,216],],
},{'3':[[153,250],],
},{'2955':[[153,251],],
},{'481':[[153,255],],
},{'94':[[153,260],],
'99':[[153,265],],
'1029':[[153,409],[153,289],[153,474],],
'1088':[[153,396],],
'1532':[[153,270],],
'2125':[[153,268],],
},{'94':[[153,281],],
'1029':[[153,461],[153,719],],
'1088':[[153,707],],
'1089':[[153,451],],
'2958':[[153,290],],
'2991':[[153,1117],[153,1288],[153,870],],
},{'2959':[[153,282],],
},{'67':[[355,1288],],
'149':[[153,312],],
'1332':[[355,433],],
'1351':[[355,1192],],
},{'39':[[153,317],],
'417':[[384,5867],],
},{'380':[[153,430],],
'1278':[[153,332],],
'1392':[[153,337],],
'1947':[[153,422],],
},{'217':[[335,806],],
'244':[[335,751],],
'347':[[153,335],[335,744],],
'572':[[153,347],],
'949':[[335,763],],
'989':[[153,571],],
'1004':[[335,781],[153,436],],
'1671':[[335,838],],
'2132':[[335,803],],
'2568':[[153,339],],
'3527':[[335,748],],
},{'77':[[153,635],[246,1706],[153,361],],
},{'470':[[153,383],],
},{'139':[[153,574],],
'236':[[153,385],],
'247':[[153,589],],
'333':[[153,476],],
'1211':[[153,412],],
'2963':[[153,423],],
'2968':[[153,432],],
'2972':[[153,1358],[153,726],[153,734],[153,1183],[153,935],[153,979],[153,1129],[153,1404],],
'2974':[[153,1261],[153,596],[153,803],[153,1068],],
},{'147':[[153,400],],
'170':[[153,1417],],
'173':[[153,387],],
'1835':[[153,732],[153,977],[153,1181],[153,1402],],
'2963':[[153,431],],
'2969':[[153,394],],
},{'404':[[153,393],],
'881':[[153,414],],
'1004':[[153,398],],
},{'2969':[[153,415],],
},{'422':[[153,510],],
},{'173':[[153,587],],
'215':[[153,1357],],
'615':[[153,585],],
'1705':[[153,1415],],
'1908':[[153,1065],[153,800],[153,1258],[153,593],],
'2180':[[153,1128],[153,934],[153,725],],
'2968':[[153,1182],[153,733],[153,1403],[153,978],],
},{'1868':[[153,798],[153,1063],[153,1256],[153,591],],
},{'333':[[153,802],[153,1067],[153,1260],[153,595],],
},{'33':[[153,601],],
'128':[[312,28],],
'152':[[232,99],],
},{'3':[[188,347],[277,840],],
'15':[[188,190],[188,351],[246,2],[171,1318],[277,844],[246,1842],[277,64],],
'23':[[246,1867],],
'921':[[246,1643],],
'1143':[[277,57],],
'1153':[[153,611],],
},{'23':[[246,1714],],
'34':[[246,505],],
'49':[[153,617],],
'55':[[246,486],],
'63':[[246,1100],],
'1109':[[277,146],],
'1194':[[246,1722],],
'1315':[[289,159],[188,203],[246,498],[315,159],],
'1447':[[384,1848],],
'1553':[[224,224],],
'2058':[[246,150],],
'3091':[[160,666],],
},{'31':[[342,276],[342,289],],
'140':[[153,640],],
'728':[[232,74],[232,66],],
'1547':[[232,97],],
},{'7':[[232,30],],
'48':[[232,68],],
'63':[[232,118],],
'2247':[[153,645],],
},{'69':[[353,87],],
'149':[[356,41],],
'817':[[153,647],],
},{'23':[[355,802],[290,45],[335,41],],
'26':[[243,175],],
'346':[[160,232],],
'449':[[179,146],[290,200],[179,1255],],
'555':[[277,167],],
'2980':[[153,648],],
},{'250':[[153,678],],
},{'63':[[153,683],],
'67':[[174,130],],
'128':[[175,27],[154,29],],
'149':[[321,102],],
'791':[[384,4975],],
'1304':[[243,89],],
},{'1592':[[153,714],],
},{'18':[[153,768],],
'149':[[335,2387],],
'714':[[384,387],],
},{'348':[[153,795],],
'3741':[[227,156],[214,111],],
},{'15':[[153,1323],[153,805],],
},{'20':[[384,5711],],
'43':[[176,215],[153,819],[246,1411],[337,92],[384,6546],],
'67':[[193,78],[352,78],],
'281':[[384,1753],],
'949':[[384,9280],],
'1187':[[384,7526],],
'1310':[[384,6499],],
},{'12':[[381,79],[181,187],[363,141],[218,103],[313,164],],
'43':[[246,1930],[394,196],[321,258],[344,294],],
'63':[[181,338],],
'202':[[161,210],],
'305':[[153,821],],
},{'23':[[326,30],],
'89':[[153,829],],
},{'215':[[153,1135],],
'402':[[153,1275],[153,864],[153,1104],],
'1004':[[153,1287],[153,869],[153,1116],],
'1072':[[153,1151],[153,1373],[153,889],],
'2999':[[153,1355],],
},{'3':[[153,1297],],
'215':[[153,1138],],
'228':[[153,1113],[153,1284],[153,866],],
'1004':[[153,924],],
'2139':[[153,1330],],
},{'12':[[153,885],],
'255':[[234,402],],
},{'23':[[153,897],[153,1101],[153,887],],
'1592':[[153,1335],],
},{'333':[[153,926],],
'461':[[153,952],],
},{'228':[[153,929],],
'2139':[[153,963],],
},{'62':[[153,1386],],
'147':[[153,965],[153,1169],[153,1332],[153,1390],],
'1493':[[153,1328],[153,1165],[153,961],[335,654],[335,904],[335,887],],
'1573':[[335,659],[335,910],[335,893],],
},{'202':[[153,1037],],
},{'236':[[173,25],[153,1277],[153,1106],],
'454':[[173,105],],
'2179':[[153,1290],[153,1119],],
'2180':[[153,1354],],
'2992':[[153,1139],],
},{'23':[[153,1148],[153,1370],],
'228':[[153,1123],[153,1348],],
'1004':[[153,1156],[153,1378],],
'1592':[[153,1393],[153,1172],],
'2139':[[153,1388],[153,1167],],
},{'19':[[153,1364],[153,1142],],
'23':[[283,154],],
'128':[[283,137],],
},{'19':[[153,1305],[153,1367],[160,157],[265,36],[153,1145],],
'2010':[[274,556],],
'3099':[[384,3645],],
'4675':[[384,500],],
},{'1405':[[153,1202],],
},{'454':[[181,503],],
'681':[[153,1211],],
'2384':[[355,625],[384,5314],[235,492],],
'4860':[[384,2545],],
'5094':[[384,6910],],
},{'16':[[274,79],],
'31':[[181,991],[189,564],[213,424],[224,211],[181,970],[395,103],],
'63':[[153,1245],],
},{'26':[[153,1295],],
'562':[[352,93],[193,93],],
},{'861':[[153,1320],],
},{'13':[[384,7454],],
'30':[[193,89],[352,89],],
'73':[[274,581],],
'144':[[164,320],],
'225':[[153,1410],],
},{'7':[[388,16],],
'16':[[155,39],],
'229':[[388,54],],
},{'26':[[304,185],],
'126':[[164,418],[155,48],],
'709':[[304,21],],
'1346':[[304,166],],
'1356':[[164,598],],
},{'236':[[196,28],[156,29],],
'423':[[196,68],[156,74],],
},{'236':[[196,30],[156,31],],
'1387':[[196,78],[156,84],],
},{'182':[[157,20],],
'277':[[157,34],],
'682':[[157,71],],
'2415':[[157,61],],
},{'83':[[157,78],],
},{'134':[[158,29],],
'142':[[224,40],],
'182':[[257,20],[224,20],[200,22],[158,16],],
'736':[[200,69],],
},{'50':[[159,16],],
},{'23':[[159,128],],
'346':[[159,80],],
'420':[[159,37],[159,18],],
'609':[[159,106],],
'3022':[[159,26],],
},{'3017':[[159,27],[159,38],[159,81],[159,107],[159,19],],
},{'149':[[159,149],],
'2806':[[159,21],],
},{'3019':[[159,22],],
},{'108':[[159,24],],
},{'3021':[[159,25],],
},{'3018':[[159,28],],
},{'7':[[180,56],],
'18':[[188,60],[246,1859],],
'23':[[335,3302],],
'147':[[316,85],[316,95],[384,9558],],
'149':[[159,30],],
'443':[[289,145],[315,145],],
'550':[[257,153],],
'1553':[[384,328],],
'4687':[[384,603],],
'4730':[[384,1014],],
},{'130':[[159,40],],
},{'23':[[159,60],],
},{'3026':[[159,61],],
},{'416':[[159,64],],
},{'1131':[[159,73],],
},{'3':[[159,75],],
},{'152':[[159,77],],
},{'2167':[[277,717],],
'3031':[[159,78],],
'3037':[[159,93],],
'4577':[[379,155],],
},{'23':[[159,83],],
},{'3033':[[159,84],],
},{'154':[[159,87],],
'1442':[[384,6875],],
},{'31':[[159,90],],
'77':[[242,112],],
},{'26':[[159,92],],
},{'362':[[159,95],],
},{'3038':[[159,96],],
},{'26':[[159,98],],
'4163':[[306,684],],
},{'165':[[186,496],],
'3040':[[159,99],],
},{'12':[[159,103],],
},{'3018':[[159,108],],
},{'3043':[[159,109],],
},{'12':[[159,113],],
},{'16':[[384,1290],],
'432':[[159,117],],
'1194':[[274,40],],
},{'23':[[159,123],],
},{'26':[[159,125],],
},{'1445':[[384,2222],],
'3048':[[159,126],],
},{'3019':[[159,150],],
},{'3050':[[159,151],],
},{'346':[[159,161],],
},{'2':[[384,3083],[384,3066],],
'16':[[188,66],[159,166],],
'18':[[384,7156],],
'23':[[384,9173],[384,4193],],
'39':[[188,81],[188,99],],
'59':[[246,1937],],
'77':[[384,1750],],
'674':[[384,7162],],
'817':[[384,6356],],
'1422':[[384,8059],],
'4639':[[384,4729],],
'4900':[[384,3143],],
'4901':[[384,3149],],
'5041':[[384,5622],],
},{'82':[[174,62],],
'3053':[[188,67],[188,82],[188,100],[246,1938],[159,167],],
},{'462':[[160,29],],
'800':[[251,107],],
},{'2':[[160,32],],
},{'538':[[160,46],],
},{'531':[[160,51],],
},{'23':[[164,465],],
'205':[[164,644],],
'305':[[384,9473],],
'433':[[160,55],],
},{'63':[[160,59],],
},{'562':[[160,66],],
},{'152':[[160,71],],
},{'3062':[[160,72],],
},{'158':[[189,551],],
'281':[[160,76],],
'305':[[274,345],],
},{'199':[[160,92],],
},{'220':[[160,103],],
},{'2':[[160,133],],
},{'16':[[335,1689],],
'31':[[160,142],],
},{'23':[[160,214],[285,143],[160,210],],
'655':[[379,197],],
},{'2981':[[160,233],],
},{'150':[[160,261],],
},{'34':[[160,644],],
'62':[[160,379],],
'227':[[160,277],],
},{'2070':[[160,282],],
},{'202':[[160,295],],
},{'1169':[[160,407],],
},{'220':[[160,534],],
'228':[[160,426],],
},{'31':[[181,960],[359,81],],
'203':[[160,428],],
},{'18':[[206,41],[160,459],],
'459':[[194,112],],
},{'63':[[160,509],],
},{'203':[[160,512],],
},{'140':[[160,528],],
},{'18':[[160,592],],
},{'3082':[[160,593],],
'4521':[[359,103],],
},{'2008':[[160,610],],
},{'12':[[187,189],],
'19':[[160,618],],
},{'73':[[251,331],],
'164':[[160,627],],
},{'33':[[160,642],],
},{'12':[[355,655],[160,649],],
'39':[[355,1182],],
'248':[[186,205],],
'305':[[186,337],],
},{'420':[[160,658],],
},{'16':[[242,126],[160,662],],
},{'99':[[384,1854],],
'126':[[176,272],[160,665],],
'146':[[304,187],],
'182':[[304,33],],
'230':[[176,107],],
'2317':[[176,98],],
},{'46':[[390,97],],
'321':[[176,63],],
'891':[[384,4463],],
'1447':[[160,668],],
'3897':[[246,906],],
},{'276':[[311,76],[387,76],],
'2510':[[160,680],],
},{'1967':[[160,684],],
},{'149':[[161,23],],
'792':[[384,219],],
'4635':[[384,2239],[384,2326],[384,224],],
},{'12':[[161,26],],
'3128':[[249,69],],
},{'821':[[161,37],],
},{'694':[[161,40],],
},{'314':[[384,8600],],
'647':[[384,7940],[384,8109],],
'1211':[[384,8549],],
'1283':[[384,8561],],
'1286':[[384,8578],],
'2590':[[161,56],[161,463],[390,117],],
'2611':[[384,7113],[384,3644],[384,7951],],
'4667':[[384,8408],],
},{'275':[[384,260],],
'2104':[[161,70],],
'4637':[[384,244],],
},{'3100':[[161,71],],
},{'67':[[339,62],[384,7014],],
'2823':[[161,76],],
'3743':[[384,7638],],
'4610':[[384,3495],],
},{'130':[[161,96],],
},{'31':[[161,317],],
'203':[[161,332],[384,8841],[161,133],],
},{'20':[[161,153],],
},{'20':[[161,156],],
'1915':[[303,54],],
},{'20':[[161,159],],
},{'20':[[303,56],[161,162],],
},{'2594':[[161,183],[161,175],],
},{'3109':[[161,176],],
'3111':[[161,180],],
},{'2594':[[161,187],[161,179],],
},{'3109':[[161,184],],
'3111':[[161,188],],
},{'15':[[384,3947],],
'23':[[161,289],[161,220],],
'3971':[[384,5456],],
},{'23':[[339,202],[161,294],],
},{'26':[[161,325],],
'77':[[384,2380],],
'705':[[384,860],],
},{'12':[[161,339],],
},{'373':[[246,387],],
'1208':[[161,342],],
},{'16':[[209,72],[161,348],],
'2107':[[176,74],],
},{'23':[[161,366],],
'63':[[384,5465],],
'152':[[161,490],],
},{'9':[[161,404],],
'23':[[161,379],],
'63':[[161,394],],
'140':[[358,107],],
'314':[[358,255],],
},{'12':[[161,409],],
'46':[[358,241],],
'499':[[161,392],],
'861':[[358,100],],
'1481':[[277,241],],
'4510':[[358,248],],
},{'77':[[162,54],],
'89':[[161,407],],
},{'321':[[161,437],],
},{'203':[[339,186],],
'3123':[[161,438],],
},{'19':[[384,9264],],
'39':[[161,442],],
},{'376':[[161,455],],
},{'10':[[384,1638],[384,1900],],
'15':[[161,470],],
'33':[[384,3031],],
'792':[[384,1895],],
'1504':[[384,1897],],
'3833':[[384,5909],],
'4892':[[384,3269],],
},{'89':[[249,68],],
'199':[[161,473],],
'1234':[[335,2745],[335,2017],],
},{'2':[[161,508],],
'1462':[[306,764],],
'1504':[[358,278],],
},{'596':[[161,513],],
},{'19':[[384,1440],],
'1553':[[384,1431],],
'1914':[[161,515],],
},{'2863':[[161,519],],
},{'75':[[249,201],[339,272],[161,528],],
},{'94':[[304,58],],
'126':[[321,334],],
'244':[[304,228],],
'593':[[339,279],[161,535],],
},{'23':[[321,174],[350,163],[384,4655],[161,574],],
},{'16':[[162,70],],
'18':[[284,198],[269,218],],
},{'27':[[342,181],],
'199':[[162,152],],
'3199':[[384,4022],[227,65],[171,59],],
'4421':[[342,175],],
'4433':[[344,326],],
},{'16':[[162,177],],
},{'18':[[266,327],],
'39':[[162,201],],
},{'63':[[384,1352],],
'248':[[266,334],[162,205],],
},{'89':[[162,211],],
},{'1151':[[162,255],],
},{'63':[[162,277],[384,6160],[384,8862],],
'224':[[179,508],[179,561],[290,615],[290,562],],
'1004':[[384,8626],],
'1029':[[179,844],],
'1846':[[290,509],[179,455],],
'3377':[[179,353],[290,407],],
'5058':[[384,8847],],
},{'33':[[162,303],],
},{'26':[[162,305],],
'922':[[355,1408],],
},{'2342':[[162,359],],
},{'228':[[163,18],],
},{'375':[[163,53],],
},{'19':[[274,671],[163,61],],
'613':[[342,256],],
'4643':[[384,4235],],
},{'420':[[164,106],],
},{'27':[[164,126],],
},{'63':[[164,652],[164,177],],
},{'2823':[[164,232],],
},{'47':[[164,310],],
},{'165':[[164,328],],
},{'23':[[164,350],],
},{'15':[[164,376],],
},{'203':[[331,48],],
'1143':[[174,239],],
'3157':[[164,377],],
},{'77':[[164,379],],
},{'1205':[[164,631],[164,458],],
},{'67':[[164,463],],
},{'3':[[304,183],[164,470],],
'23':[[384,7383],[331,427],[384,2495],[246,584],],
'36':[[274,683],],
},{'712':[[164,495],],
'1391':[[164,489],],
'4903':[[384,4723],],
},{'12':[[164,500],],
},{'15':[[164,509],],
'59':[[355,878],],
'512':[[384,1506],],
'928':[[384,2245],],
},{'57':[[164,517],],
},{'3':[[164,530],],
'15':[[164,625],],
'36':[[164,563],],
'47':[[365,185],],
'329':[[365,79],],
'420':[[365,200],],
'3168':[[164,565],],
},{'183':[[181,836],],
'1353':[[235,229],],
'2533':[[181,712],],
'3167':[[164,564],],
},{'2':[[384,6307],],
'7':[[379,164],],
'128':[[300,20],],
'909':[[317,57],],
'2690':[[164,572],],
'3619':[[384,2704],],
},{'1202':[[164,593],],
},{'50':[[308,51],[340,51],[164,619],],
},{'15':[[164,621],],
'185':[[365,133],],
'329':[[365,25],],
'346':[[365,158],],
},{'19':[[317,51],[164,638],],
},{'518':[[164,655],],
'532':[[388,72],[164,650],],
'930':[[384,478],],
'1202':[[388,63],],
},{'124':[[165,26],],
},{'305':[[165,61],],
},{'16':[[242,167],[242,160],],
'31':[[165,68],],
'224':[[344,180],],
'283':[[384,7670],[384,7685],],
'1465':[[242,141],],
},{'33':[[165,70],],
'89':[[191,234],[313,216],[186,104],],
'154':[[367,134],[250,131],],
},{'682':[[168,18],],
},{'315':[[168,21],],
},{'33':[[313,319],],
'77':[[170,253],],
'147':[[170,228],],
'152':[[313,355],],
'176':[[170,55],],
'236':[[313,33],[170,21],],
'470':[[313,134],],
'921':[[384,6654],],
},{'164':[[170,162],],
'236':[[170,23],],
'499':[[170,138],],
'1828':[[170,62],],
},{'26':[[170,264],],
'63':[[170,140],],
'236':[[170,25],],
'1828':[[170,70],],
'3182':[[170,163],],
},{'73':[[170,160],],
'236':[[170,27],],
'288':[[170,202],],
'346':[[170,214],],
'682':[[170,86],],
},{'12':[[170,44],],
'77':[[335,3632],],
'963':[[335,3138],],
'4339':[[335,2181],],
},{'19':[[181,231],],
'23':[[363,326],],
'2382':[[170,67],],
},{'1244':[[170,96],],
},{'140':[[170,132],],
},{'31':[[170,143],],
},{'59':[[170,176],],
},{'370':[[170,211],],
},{'1846':[[170,278],],
},{'26':[[227,17],[171,19],],
},{'18':[[171,27],],
},{'23':[[303,91],],
'499':[[303,163],],
'1160':[[227,98],[171,29],],
'2058':[[303,108],],
},{'2':[[171,49],[171,85],[214,368],[384,880],[227,55],[227,100],[262,43],[307,159],[341,159],[384,2237],[384,2324],[384,4020],[384,4010],[384,222],[384,233],[384,4008],[384,3731],[384,3720],[384,3538],[384,2788],[384,2830],[384,3376],[384,3158],[384,3037],[384,2941],[384,2897],],
'13':[[384,3399],[384,2140],[384,365],[384,2160],[384,2294],[384,1870],],
'23':[[384,597],],
'59':[[384,2657],],
'63':[[384,4088],[384,4074],[384,4055],[384,4102],],
'152':[[214,378],],
'275':[[384,213],[384,1570],[384,1529],[384,1547],],
'604':[[384,2151],],
'910':[[384,2971],],
'2675':[[384,112],[384,1017],[384,1738],[384,1761],[384,1452],[384,84],[384,262],[384,273],[384,288],[384,2037],[384,2071],[384,2094],[384,981],[384,1111],[384,313],[384,1001],[384,580],[384,819],[384,2254],[384,2271],[384,1037],[384,606],[384,2738],[384,2643],[384,2722],[384,2676],],
'3102':[[384,3496],],
'4629':[[384,2333],[384,755],[384,2206],[384,565],[384,542],[384,2174],[384,473],[384,431],[384,410],[384,389],[384,736],[384,961],[384,1956],[384,1925],[384,1909],[384,1882],[384,172],[384,1645],[384,1381],[384,774],[384,1657],],
},{'15':[[227,58],[171,52],],
'375':[[384,2319],],
'3196':[[341,160],[307,160],],
},{'3':[[384,2043],],
'99':[[384,1070],],
'422':[[277,693],],
'518':[[384,2681],[384,3865],],
'552':[[384,1393],],
'956':[[227,62],[171,56],],
'1180':[[384,2752],],
'4190':[[384,4030],],
'4621':[[384,295],],
'4642':[[384,2063],],
'4706':[[384,2085],],
'4729':[[384,1010],],
},{'67':[[227,64],[171,58],],
'3196':[[384,4021],],
},{'18':[[355,1382],],
'921':[[384,92],],
'1100':[[277,907],],
'1793':[[384,2714],],
'2547':[[227,104],[227,70],[171,89],[171,64],],
'3201':[[171,70],[227,76],],
},{'12':[[384,2199],],
'18':[[384,6917],],
'2547':[[227,75],[171,69],],
},{'18':[[277,634],],
'301':[[227,82],[171,76],],
},{'16':[[208,49],[304,240],],
'203':[[171,82],],
'499':[[227,89],],
},{'3':[[171,191],[208,103],[226,19],[226,91],[227,318],[274,836],[336,3],[336,24],[336,145],[384,1500],],
'15':[[384,1473],[336,43],],
'567':[[384,210],],
},{'7':[[171,650],[262,49],[262,3],[245,28],[369,54],],
'16':[[304,399],],
'27':[[262,47],],
'117':[[219,0],],
'313':[[219,14],],
'734':[[245,77],],
},{'7':[[171,1304],],
'117':[[174,0],],
'2511':[[227,225],],
},{'7':[[171,1316],],
'15':[[235,455],],
'59':[[277,838],[188,345],],
'84':[[246,33],],
'117':[[246,0],],
'136':[[188,349],[277,842],],
'924':[[331,43],],
'1682':[[277,62],],
},{'1915':[[214,52],[227,252],[303,5],[171,1335],],
},{'7':[[172,18],],
'128':[[172,68],],
'229':[[172,41],],
},{'7':[[172,24],],
'875':[[172,127],],
'3213':[[172,48],],
},{'7':[[172,30],],
'1397':[[172,65],],
},{'7':[[172,43],],
'19':[[244,116],[244,99],[172,71],],
'546':[[172,113],],
'861':[[384,898],],
'2494':[[384,1659],],
},{'89':[[244,33],],
'140':[[172,53],[172,47],],
'165':[[244,105],[244,120],[244,71],[172,132],],
'248':[[384,894],],
'357':[[172,73],],
'995':[[172,156],],
},{'136':[[396,110],],
'140':[[172,117],],
'2061':[[244,151],[172,150],],
},{'173':[[173,23],],
'780':[[173,93],],
},{'404':[[173,27],],
'454':[[173,114],],
},{'16':[[355,1174],],
'55':[[246,711],],
'203':[[355,89],],
'470':[[173,316],],
'631':[[186,142],],
'1123':[[384,3432],],
'1424':[[384,4794],],
'2067':[[384,4529],],
},{'83':[[246,1684],],
'195':[[173,328],],
},{'1305':[[174,34],],
},{'2262':[[174,42],],
},{'346':[[384,1012],],
'1180':[[174,46],],
'2642':[[384,1129],],
},{'224':[[355,263],],
'1169':[[355,313],[174,52],],
'3827':[[243,71],],
},{'99':[[174,65],],
'1362':[[384,2342],],
'2087':[[384,3885],],
},{'67':[[174,73],],
},{'152':[[174,76],],
},{'12':[[344,182],],
'26':[[174,102],],
'301':[[355,319],[174,142],],
'443':[[246,394],],
'3225':[[174,77],],
'3227':[[243,99],],
},{'12':[[243,98],],
'3226':[[174,143],[174,103],[344,183],[355,320],[174,78],],
},{'43':[[174,81],],
},{'2':[[243,102],],
'23':[[384,8567],],
'63':[[384,8516],],
'224':[[174,107],],
'275':[[384,8581],],
'439':[[384,8384],],
'3796':[[384,6707],],
'4629':[[384,8470],[384,8494],[384,7570],[384,8394],[384,8168],[384,8174],],
},{'99':[[243,59],],
'542':[[174,137],],
'1123':[[355,316],],
},{'23':[[174,148],],
},{'3231':[[174,149],],
},{'3232':[[174,150],],
},{'1180':[[174,152],],
'3994':[[384,494],],
'4701':[[384,2987],],
'4837':[[384,9425],],
},{'100':[[174,156],],
'215':[[174,170],],
'217':[[174,198],],
'1177':[[174,212],],
'1180':[[174,184],],
},{'224':[[174,159],],
},{'215':[[174,217],],
'217':[[174,203],],
'314':[[174,161],],
'780':[[174,175],],
'1125':[[174,189],],
},{'224':[[174,164],],
},{'217':[[179,174],[290,228],],
'224':[[174,173],],
},{'224':[[174,178],],
},{'1180':[[174,180],],
},{'224':[[174,187],],
},{'224':[[174,192],],
},{'99':[[174,194],],
},{'224':[[174,201],],
},{'224':[[174,206],],
},{'224':[[174,215],],
},{'158':[[174,229],],
},{'3248':[[174,230],],
},{'23':[[174,248],],
'2726':[[381,39],],
},{'19':[[344,132],[243,82],],
'63':[[344,143],],
'266':[[174,260],],
'940':[[290,176],[179,1224],[179,122],],
},{'137':[[174,274],],
},{'12':[[384,7296],],
'19':[[381,383],[384,8725],[384,7367],[381,92],[176,171],[384,7012],[384,6822],[384,5242],[384,4268],],
'23':[[384,1084],],
'149':[[384,6029],[384,347],],
'613':[[384,8335],],
'2315':[[381,497],],
'2388':[[384,3205],[384,2995],[384,2646],[384,1824],[384,4451],],
'2675':[[384,2724],[384,5032],[384,8564],[384,5355],[384,5399],[384,5482],[384,2678],[384,1454],[384,2256],[384,823],[384,2273],[384,8890],],
'3149':[[384,4236],],
'3556':[[384,9452],],
'4924':[[384,9469],],
'4985':[[384,4403],],
'5011':[[384,4991],],
},{'59':[[176,192],],
},{'31':[[176,197],],
},{'1391':[[176,223],],
},{'128':[[207,65],],
'250':[[207,103],],
'776':[[207,49],],
'1053':[[207,22],[177,21],],
'1532':[[207,81],],
},{'1047':[[282,21],[393,21],[177,23],],
},{'7':[[272,20],],
'63':[[207,94],],
'135':[[177,55],],
},{'277':[[178,102],],
'659':[[233,29],[383,19],[383,27],[178,29],],
},{'147':[[178,213],],
},{'16':[[178,245],],
},{'154':[[352,65],[193,65],],
'175':[[178,303],],
'447':[[181,117],],
},{'31':[[178,321],],
},{'43':[[358,111],],
'1840':[[179,47],],
},{'12':[[249,77],],
'202':[[384,7978],],
'637':[[179,76],],
},{'215':[[179,1106],[179,1114],],
'313':[[179,1083],[179,1126],[179,82],],
'671':[[179,1542],[179,1487],[179,1340],[179,1592],],
'3503':[[179,1456],[179,1561],[179,1511],[179,1309],],
'3519':[[179,1138],[179,1142],[179,1146],],
},{'74':[[179,94],],
'1591':[[179,993],],
'3512':[[290,147],],
},{'1610':[[290,150],[179,97],],
},{'241':[[290,153],[179,100],],
},{'23':[[179,1534],[179,1332],[179,1479],[179,1584],],
'82':[[179,1232],[290,182],[179,128],],
'3527':[[335,2498],],
},{'2330':[[179,1238],[290,185],[179,131],],
},{'1315':[[179,1264],[290,207],[179,153],],
},{'15':[[179,1268],[290,211],[179,157],],
'89':[[246,1007],[246,896],],
'288':[[188,206],],
},{'23':[[246,1368],[246,1437],[246,1384],[246,1345],[246,668],],
'31':[[246,1749],],
'36':[[246,684],],
'49':[[246,1708],],
'1183':[[179,1043],[246,490],],
'1364':[[246,1780],],
'3274':[[188,207],[179,1269],[179,158],[290,212],],
'3626':[[246,1768],],
'3952':[[246,1730],],
},{'224':[[290,327],[179,273],[179,315],[290,369],],
'1033':[[217,478],],
'1309':[[384,4928],],
'1846':[[179,231],[290,285],],
'3275':[[290,213],[179,159],],
},{'3276':[[179,232],[179,274],[179,316],[290,214],[290,286],[290,328],[290,370],[179,160],],
},{'301':[[217,254],],
'3277':[[179,233],[179,275],[179,317],[179,161],[290,215],[290,287],[290,329],[290,371],],
},{'301':[[217,247],],
'3278':[[179,234],[179,276],[179,318],[179,162],[290,216],[290,288],[290,330],[290,372],],
},{'217':[[290,220],[384,8801],[179,166],],
},{'3280':[[290,221],[179,167],],
},{'3281':[[290,222],[179,168],],
},{'217':[[290,224],[384,8557],[384,8574],[179,170],],
},{'3283':[[290,225],[179,171],],
},{'3284':[[290,226],[179,172],],
},{'3239':[[290,229],[179,175],],
},{'3286':[[290,230],[179,176],],
},{'1264':[[290,233],[179,179],],
'3337':[[290,339],[179,285],],
},{'3288':[[290,234],[179,180],],
'3358':[[290,381],[179,327],],
},{'217':[[290,236],[179,182],],
},{'3290':[[290,237],[179,183],],
},{'3291':[[290,238],[179,184],],
},{'217':[[179,191],[290,241],[290,245],[179,187],],
},{'3293':[[179,192],[290,242],[290,246],[179,188],],
},{'1309':[[179,332],[290,386],],
'3294':[[290,243],[179,189],],
},{'3294':[[290,247],[179,193],],
},{'217':[[290,249],[179,195],],
},{'3297':[[290,250],[179,196],],
'3342':[[290,348],[179,294],],
'3407':[[290,652],[179,598],],
},{'3298':[[290,251],[179,197],],
'3364':[[290,390],[179,336],],
},{'99':[[290,253],[179,199],],
},{'3300':[[290,254],[179,200],],
'3343':[[290,350],[179,296],],
},{'3301':[[290,255],[179,201],],
},{'99':[[290,257],[179,203],],
},{'3303':[[290,258],[179,204],],
},{'99':[[179,418],[290,472],],
'217':[[290,262],[179,208],],
},{'1305':[[290,355],[179,301],],
'3305':[[290,263],[179,209],],
'3339':[[290,342],[179,288],],
},{'1305':[[179,343],[290,397],],
'3306':[[290,264],[179,210],],
},{'99':[[179,442],[290,496],],
'217':[[290,266],[179,212],],
},{'3308':[[290,267],[179,213],],
},{'3309':[[290,268],[179,214],],
},{'217':[[290,270],[179,216],],
},{'3311':[[290,271],[179,217],],
'3349':[[290,359],[179,305],],
},{'3312':[[290,272],[179,218],],
},{'1211':[[290,275],[179,221],],
'3350':[[290,361],[179,307],],
},{'3314':[[290,276],[179,222],],
'3374':[[290,403],[179,349],],
},{'99':[[290,278],[179,224],],
'4748':[[384,6062],],
'4803':[[384,8911],],
},{'3316':[[290,279],[179,225],],
'3351':[[290,363],[179,309],],
},{'3317':[[290,280],[179,226],],
},{'217':[[290,292],[179,238],],
},{'217':[[290,294],[179,240],],
},{'217':[[290,296],[179,242],],
},{'217':[[290,298],[179,244],],
},{'217':[[290,300],[179,246],],
},{'217':[[179,251],[290,303],[290,305],[179,249],],
},{'217':[[290,307],[179,253],],
},{'99':[[290,309],[179,255],],
},{'99':[[290,311],[179,257],],
},{'217':[[290,314],[179,260],],
'3333':[[290,334],[179,280],],
},{'217':[[290,316],[179,262],],
},{'217':[[290,318],[179,264],],
},{'99':[[290,320],[179,266],],
},{'99':[[290,322],[179,268],],
},{'1310':[[290,333],[179,279],],
},{'217':[[290,608],[179,554],],
'3328':[[290,335],[179,281],],
'3435':[[290,569],[179,515],],
},{'1267':[[179,445],[290,499],],
'3334':[[290,336],[179,282],],
'3477':[[290,660],[179,606],],
},{'3335':[[290,337],[179,283],],
},{'3336':[[290,338],[179,284],],
},{'3288':[[290,340],[179,286],],
},{'3338':[[290,341],[179,287],],
},{'1309':[[290,344],[179,290],],
'3341':[[290,346],[179,292],],
},{'3340':[[290,345],[179,291],],
},{'3340':[[290,347],[179,293],],
},{'3298':[[290,349],[179,295],],
},{'3301':[[290,351],[179,297],],
},{'3344':[[290,352],[179,298],],
},{'3345':[[290,353],[179,299],],
},{'3306':[[290,356],[179,302],],
},{'3347':[[290,357],[179,303],],
},{'3348':[[290,358],[179,304],],
},{'3312':[[290,360],[179,306],],
},{'3314':[[290,362],[179,308],],
},{'3317':[[290,364],[179,310],],
},{'1310':[[290,375],[179,321],],
},{'3353':[[290,376],[179,322],],
},{'3354':[[290,377],[179,323],],
},{'3355':[[290,378],[179,324],],
},{'3356':[[290,379],[179,325],],
},{'3357':[[290,380],[179,326],],
},{'3289':[[290,382],[179,328],],
},{'3359':[[290,383],[179,329],],
},{'3360':[[290,384],[179,330],],
},{'891':[[179,530],[290,584],],
'3295':[[290,387],[179,333],],
},{'3362':[[290,388],[179,334],],
},{'217':[[179,466],[290,520],],
'3363':[[290,389],[179,335],],
},{'3299':[[290,391],[179,337],],
},{'3365':[[290,392],[179,338],],
},{'3366':[[290,393],[179,339],],
},{'314':[[384,190],],
'3234':[[384,495],],
'3367':[[290,394],[179,340],],
'4667':[[384,488],],
},{'3368':[[290,395],[179,341],],
},{'1180':[[179,543],[290,597],],
'3307':[[290,398],[179,344],],
},{'3370':[[290,399],[179,345],],
},{'3371':[[290,400],[179,346],],
},{'3372':[[290,401],[179,347],],
},{'3373':[[290,402],[179,348],],
},{'3315':[[290,404],[179,350],],
},{'3375':[[290,405],[179,351],],
},{'3376':[[290,406],[179,352],],
},{'449':[[384,8613],],
'542':[[217,422],],
'1177':[[384,8570],],
'1305':[[384,7902],],
'2631':[[179,459],[290,513],[290,566],[290,619],[179,512],[290,411],[179,565],[179,357],],
},{'217':[[290,414],[179,360],],
},{'3379':[[290,415],[179,361],],
},{'1310':[[179,567],[290,621],],
'3380':[[290,416],[179,362],],
},{'217':[[290,418],[179,364],],
},{'3382':[[290,419],[179,365],],
},{'3383':[[290,420],[179,366],],
},{'217':[[290,422],[179,368],],
},{'99':[[179,414],[290,468],],
'217':[[384,8702],],
'3385':[[290,423],[179,369],],
},{'3386':[[290,424],[179,370],],
},{'217':[[290,429],[179,375],],
},{'217':[[290,431],[179,377],],
},{'1267':[[290,434],[179,380],],
'3460':[[290,629],[179,575],],
},{'1288':[[290,438],[179,384],],
},{'1309':[[179,578],[290,632],],
'3391':[[290,439],[179,385],],
},{'994':[[290,442],[179,388],],
'3442':[[290,581],[179,527],],
},{'3393':[[290,443],[179,389],],
},{'891':[[290,447],[179,393],],
'3463':[[290,636],[179,582],],
},{'99':[[290,449],[179,395],],
'3402':[[290,465],[179,411],],
'3447':[[290,592],[179,538],],
},{'780':[[290,452],[179,398],],
},{'99':[[290,454],[179,400],],
'217':[[384,8631],[384,8660],[384,8596],],
},{'780':[[290,457],[179,403],],
},{'891':[[290,461],[179,407],],
},{'1305':[[179,589],[290,643],],
'3400':[[290,462],[179,408],],
},{'99':[[290,464],[179,410],],
},{'3396':[[290,466],[179,412],],
},{'1261':[[290,470],[179,416],],
'3470':[[290,647],[179,593],],
},{'217':[[290,475],[179,421],],
'3471':[[290,649],[179,595],],
},{'99':[[290,477],[179,423],],
},{'99':[[290,480],[179,426],],
'3472':[[290,651],[179,597],],
},{'3298':[[290,653],[179,599],],
'3407':[[290,481],[179,427],],
'3429':[[290,547],[179,493],],
'3435':[[290,600],[179,546],],
},{'302':[[186,76],],
'2090':[[290,484],[179,430],],
'3408':[[290,601],[179,547],],
'4701':[[384,9030],],
'4837':[[384,5266],[384,4309],],
},{'3409':[[290,485],[179,431],],
},{'99':[[290,487],[179,433],],
'3659':[[188,253],],
},{'1697':[[290,489],[179,435],],
'3474':[[290,656],[179,602],],
},{'99':[[290,491],[179,437],],
},{'1125':[[188,294],[290,494],[179,440],],
},{'100':[[290,504],[179,450],],
},{'217':[[290,516],[179,462],],
},{'217':[[290,518],[179,464],],
},{'217':[[290,522],[179,468],],
},{'217':[[290,524],[179,470],],
},{'99':[[290,527],[179,473],],
},{'99':[[290,529],[179,475],],
},{'99':[[290,531],[179,477],],
},{'99':[[290,533],[179,479],],
},{'99':[[290,535],[179,481],],
},{'99':[[290,538],[179,484],],
},{'99':[[290,540],[179,486],],
},{'99':[[290,542],[179,488],],
},{'99':[[290,544],[179,490],],
},{'99':[[290,546],[179,492],],
},{'99':[[290,549],[179,495],],
'3438':[[290,573],[179,519],],
},{'99':[[290,551],[179,497],],
'1125':[[188,273],],
},{'99':[[290,553],[179,499],],
},{'99':[[290,555],[179,501],],
},{'99':[[290,557],[179,503],],
},{'217':[[179,545],[290,599],],
'1310':[[290,568],[179,514],],
},{'3334':[[290,570],[179,516],],
},{'3436':[[290,571],[179,517],],
},{'217':[[384,8714],[384,8729],],
'3437':[[290,572],[179,518],],
},{'1125':[[290,575],[179,521],],
},{'99':[[290,577],[179,523],],
},{'1309':[[290,579],[179,525],],
'3401':[[290,644],[179,590],],
},{'3441':[[290,580],[179,526],],
},{'3393':[[290,582],[179,528],],
},{'99':[[290,586],[179,532],],
},{'217':[[290,588],[179,534],],
},{'1305':[[290,590],[179,536],],
},{'3446':[[290,591],[179,537],],
},{'3396':[[290,593],[179,539],],
},{'994':[[290,595],[179,541],],
},{'3409':[[290,602],[179,548],],
},{'1260':[[290,604],[179,550],],
},{'100':[[290,606],[179,552],],
},{'215':[[290,610],[179,556],],
},{'3381':[[290,622],[179,568],],
'3392':[[290,633],[179,579],],
},{'3454':[[290,623],[179,569],],
},{'3455':[[290,624],[179,570],],
},{'3456':[[290,625],[179,571],],
},{'3457':[[290,626],[179,572],],
},{'3458':[[290,627],[179,573],],
},{'3459':[[290,628],[179,574],],
},{'3390':[[290,630],[179,576],],
},{'3454':[[290,634],[179,580],],
},{'3462':[[290,635],[179,581],],
},{'3395':[[290,637],[179,583],],
},{'3464':[[290,638],[179,584],],
},{'3465':[[290,639],[179,585],],
},{'3466':[[290,640],[179,586],],
},{'3467':[[290,641],[179,587],],
},{'3441':[[290,645],[179,591],],
},{'3469':[[290,646],[179,592],],
},{'3404':[[290,648],[179,594],],
},{'3405':[[290,650],[179,596],],
},{'3408':[[290,654],[179,600],],
},{'3473':[[290,655],[179,601],],
},{'3412':[[290,657],[179,603],],
},{'3475':[[290,658],[179,604],],
},{'3476':[[290,659],[179,605],],
},{'3335':[[290,661],[179,607],],
},{'3478':[[290,662],[179,608],],
},{'3479':[[290,663],[179,609],],
},{'84':[[179,646],],
},{'19':[[246,638],[246,703],],
'203':[[179,648],],
'639':[[246,687],],
},{'955':[[179,652],],
},{'439':[[179,654],],
},{'92':[[179,688],],
'215':[[179,710],],
'1329':[[179,664],],
'3508':[[179,1346],],
},{'16':[[251,180],[313,357],],
'54':[[313,315],],
'152':[[179,674],],
},{'139':[[179,731],[179,797],],
'173':[[179,681],],
'1705':[[179,1605],],
'2357':[[179,1193],],
},{'139':[[179,1189],],
'164':[[179,1183],],
'236':[[179,685],],
'247':[[179,1195],],
'3487':[[179,798],[179,732],],
'3534':[[179,1191],],
},{'3485':[[179,689],],
'3539':[[179,1348],],
},{'173':[[179,692],],
'1101':[[179,724],],
'1281':[[277,422],],
},{'236':[[179,694],],
'2128':[[277,533],],
'3490':[[277,423],[179,725],],
'4071':[[277,536],],
},{'659':[[179,700],],
'2126':[[179,727],],
},{'347':[[179,702],],
'3492':[[179,728],],
},{'147':[[179,813],[179,746],],
'333':[[179,769],[179,704],],
'3498':[[179,811],[179,744],],
},{'186':[[179,753],[179,820],],
'1677':[[179,771],[179,1056],[179,706],],
'3516':[[179,1356],],
'3517':[[179,1422],],
},{'1004':[[179,818],[179,751],],
'1677':[[179,773],[179,708],],
'2132':[[179,805],],
'3498':[[179,736],],
},{'696':[[179,714],],
'1725':[[179,777],],
},{'696':[[179,743],],
'883':[[179,735],[179,801],],
'1677':[[179,781],[179,718],],
'1725':[[179,810],],
'3488':[[179,733],[179,799],],
'3496':[[179,806],[179,737],],
},{'1677':[[179,759],],
'3544':[[179,1416],],
},{'173':[[179,1158],[179,765],],
'235':[[179,1607],],
'1835':[[179,1425],],
'2127':[[179,1419],[179,788],],
},{'236':[[179,784],],
'1573':[[179,803],],
},{'173':[[179,826],],
'1029':[[179,1235],[179,1271],[179,1447],[179,1502],[179,1552],[179,1602],],
'3488':[[179,1196],],
},{'659':[[179,1282],[179,834],],
'791':[[179,1344],[179,860],],
'1667':[[179,1455],[179,1510],[179,1560],[179,1308],],
},{'333':[[179,836],],
'671':[[179,856],],
},{'1591':[[179,838],],
},{'1591':[[179,863],],
'3505':[[179,839],],
'3506':[[179,842],[179,841],[179,840],],
},{'1591':[[179,849],],
},{'75':[[179,1599],[179,1437],[179,1377],[179,1373],[179,1495],[179,1549],],
'215':[[179,1338],[179,1485],[179,854],[179,1590],[179,1540],],
'333':[[179,1336],[179,1538],[179,1483],[179,1588],[179,852],],
'3267':[[179,1543],[179,1341],[179,1593],[179,1488],],
'3503':[[179,861],[179,1345],],
'3504':[[179,857],],
},{'94':[[179,871],],
'224':[[179,1471],[179,1526],[179,1576],[179,1324],],
},{'13':[[335,181],[179,931],],
'126':[[335,165],[179,915],],
'1004':[[335,170],[179,953],[335,190],[179,920],],
},{'31':[[179,948],],
},{'671':[[290,146],[179,966],],
},{'1029':[[179,968],],
},{'43':[[355,1422],],
'57':[[249,107],],
'231':[[179,976],],
'1051':[[232,46],],
},{'241':[[179,1028],],
},{'139':[[179,1355],],
'333':[[179,1050],],
},{'333':[[179,1053],],
'2132':[[179,1421],],
},{'1004':[[179,1302],],
'1101':[[179,1522],[179,1467],[179,1320],[179,1572],],
'1278':[[179,1066],[179,1120],],
'1651':[[179,1075],[179,1077],],
},{'313':[[179,1123],[179,1072],],
'1652':[[179,1080],],
'3530':[[179,1137],],
'3531':[[179,1141],],
'3532':[[179,1145],],
'3535':[[179,1288],],
},{'659':[[179,1129],[179,1086],],
'1651':[[179,1104],[179,1102],],
'3526':[[179,1285],],
},{'7':[[217,98],],
'82':[[217,257],],
'3520':[[179,1087],],
'3753':[[217,123],],
},{'7':[[217,92],],
'82':[[217,250],],
'3521':[[179,1088],],
},{'7':[[217,86],],
'82':[[217,243],],
'3522':[[179,1089],],
},{'7':[[217,80],],
'82':[[217,236],],
'284':[[384,5729],],
'3523':[[179,1090],],
'3751':[[217,105],],
},{'7':[[217,26],],
'152':[[344,275],],
'237':[[217,152],],
'3524':[[179,1091],],
},{'659':[[179,1132],[179,1093],],
'1651':[[179,1112],[179,1110],],
'2153':[[179,1284],],
},{'7':[[217,32],],
'152':[[344,273],],
'791':[[335,334],[335,2497],],
'1281':[[335,747],],
'1319':[[217,160],],
'2126':[[335,779],],
'3526':[[179,1094],],
},{'7':[[217,62],],
'271':[[217,203],],
'1509':[[179,1098],],
},{'7':[[217,20],],
'229':[[217,143],],
'3520':[[179,1130],],
},{'236':[[179,1136],],
'2132':[[179,1493],],
'3541':[[179,1375],],
},{'1677':[[179,1140],],
'1735':[[179,1597],],
'3544':[[179,1435],],
},{'1677':[[179,1144],],
'1735':[[179,1547],],
'3540':[[179,1371],],
},{'181':[[179,1156],],
'236':[[179,1150],[335,310],[335,3209],[335,490],[335,2575],[335,712],[335,1895],[335,1156],[335,3591],],
'247':[[335,1903],[335,497],[335,2583],[335,317],[335,3216],[335,719],[335,1163],[335,3598],],
},{'3488':[[179,1190],],
'4158':[[335,3567],],
},{'333':[[179,1287],],
'671':[[179,1518],[179,1316],[179,1463],[179,1568],],
'1282':[[179,1306],],
'3518':[[179,1303],],
},{'23':[[217,458],[217,427],[179,1296],],
'26':[[217,472],],
'596':[[344,283],],
'1424':[[384,5726],],
'2286':[[217,265],],
},{'49':[[384,9896],],
'275':[[381,318],],
'3536':[[179,1297],],
'4622':[[384,402],],
},{'1101':[[179,1473],[179,1528],[179,1578],[179,1326],],
},{'2127':[[179,1359],],
'3485':[[179,1347],],
'3540':[[179,1363],],
},{'215':[[179,1370],],
'1677':[[179,1362],],
},{'147':[[179,1399],],
'333':[[179,1406],],
'1677':[[179,1366],],
'1734':[[179,1413],],
'3508':[[179,1374],],
},{'2132':[[179,1432],[179,1368],],
},{'1591':[[179,1404],],
},{'215':[[179,1434],],
'1677':[[179,1415],],
},{'333':[[179,1442],],
'1677':[[179,1430],],
'3508':[[179,1438],],
},{'1591':[[179,1440],],
},{'124':[[238,24],[180,24],],
'2327':[[180,68],],
},{'7':[[180,63],],
'63':[[335,3305],],
'186':[[316,89],],
'241':[[316,97],],
'5188':[[384,9560],],
},{'26':[[180,221],],
'140':[[180,169],],
},{'346':[[180,178],],
},{'2':[[316,67],],
'62':[[180,184],],
},{'19':[[180,199],],
},{'12':[[180,202],],
},{'162':[[180,213],],
'4839':[[384,2263],],
},{'3554':[[180,214],],
},{'17':[[181,289],],
'348':[[214,84],],
'2500':[[180,225],],
'2675':[[384,9451],],
},{'16':[[181,62],],
'318':[[381,479],],
'800':[[384,1284],],
'3984':[[251,132],],
'5168':[[384,9071],],
},{'2890':[[181,91],],
},{'15':[[331,45],],
'255':[[246,802],],
'1315':[[246,839],[181,136],],
},{'203':[[181,138],],
},{'2275':[[384,4653],],
'3560':[[181,139],],
},{'23':[[181,142],],
},{'77':[[384,592],],
'861':[[181,271],],
},{'462':[[181,276],],
'513':[[181,449],],
'3566':[[181,324],],
},{'203':[[181,280],],
'878':[[384,3908],],
},{'23':[[181,446],],
'699':[[181,323],],
'1178':[[194,55],],
'3565':[[181,281],],
'3579':[[181,409],[181,384],],
'4639':[[384,5091],],
},{'23':[[181,284],],
},{'3556':[[181,290],],
},{'351':[[181,294],],
},{'3569':[[181,295],],
},{'67':[[181,299],],
},{'23':[[384,7457],],
'230':[[384,3181],],
'364':[[181,303],],
'540':[[384,8046],[384,8022],[384,3487],],
'5002':[[384,4705],],
},{'63':[[181,308],],
},{'31':[[181,320],[181,311],],
'39':[[384,4834],],
},{'131':[[384,1429],],
'177':[[197,470],],
'479':[[335,1033],[220,106],],
'613':[[208,31],],
'653':[[220,77],],
'3574':[[181,321],],
},{'12':[[181,332],],
},{'346':[[181,369],],
'1074':[[181,352],],
},{'12':[[181,377],],
'1021':[[181,358],],
},{'23':[[181,408],[384,3986],[181,383],],
},{'1492':[[181,417],],
},{'39':[[181,443],],
},{'1169':[[181,524],],
},{'48':[[181,571],[186,63],],
'63':[[181,552],],
},{'31':[[181,559],],
'1235':[[181,746],],
},{'133':[[186,172],],
'593':[[246,439],[246,446],],
'2079':[[181,587],],
'3653':[[246,463],],
},{'351':[[181,639],],
'1255':[[246,1225],],
},{'869':[[355,660],],
'2449':[[181,710],],
},{'89':[[181,756],],
},{'639':[[357,17],],
'2105':[[384,1907],],
'2949':[[181,762],],
},{'343':[[335,561],],
'3589':[[181,763],],
},{'2283':[[181,790],],
},{'23':[[181,804],],
},{'15':[[304,274],],
'231':[[276,59],],
'706':[[181,818],],
},{'27':[[181,882],],
'402':[[181,847],],
},{'19':[[246,719],[321,378],[181,863],],
'36':[[246,745],],
},{'140':[[181,896],],
},{'152':[[181,898],],
},{'1':[[355,1138],],
'61':[[181,935],],
'149':[[355,1096],],
'199':[[317,90],],
'360':[[206,96],],
},{'208':[[181,937],],
},{'34':[[181,942],],
},{'220':[[359,129],[181,996],],
},{'19':[[394,143],[182,33],],
},{'134':[[183,28],[215,28],],
'766':[[183,16],],
'1012':[[215,16],],
},{'15':[[215,26],[183,26],],
'29':[[384,8305],],
},{'63':[[303,158],],
'321':[[215,58],[183,58],],
'4731':[[384,1027],],
},{'13':[[384,3045],],
'562':[[184,39],],
},{'88':[[331,182],],
'567':[[186,57],],
},{'12':[[186,68],],
},{'19':[[186,96],],
},{'18':[[186,131],],
},{'152':[[186,133],],
},{'18':[[186,180],],
'89':[[186,215],],
},{'12':[[384,5970],],
'16':[[186,198],],
},{'23':[[186,220],],
},{'199':[[186,241],],
},{'67':[[186,291],],
},{'532':[[186,315],],
'926':[[277,352],],
'2058':[[335,1603],[335,1738],[335,1268],],
},{'48':[[186,320],],
'1913':[[246,1428],],
},{'19':[[331,480],[384,7446],],
'152':[[384,2703],],
'1109':[[186,374],],
},{'31':[[186,385],],
},{'63':[[186,414],],
'2576':[[355,637],],
},{'12':[[355,93],],
'15':[[384,141],],
'16':[[186,423],],
'19':[[384,2385],],
'1933':[[384,2522],],
},{'3622':[[186,424],],
},{'43':[[186,451],],
},{'23':[[186,473],],
},{'267':[[217,344],[355,1453],[246,1767],],
'302':[[384,5387],],
'598':[[235,239],],
'2646':[[186,484],],
'4405':[[384,6417],],
},{'16':[[186,499],[384,3861],[384,2339],],
'31':[[384,2157],],
'63':[[384,3893],],
'203':[[384,760],[384,2877],],
'817':[[384,1963],],
'1101':[[384,8921],],
'1148':[[384,9119],],
'1305':[[384,7747],],
'3196':[[384,1910],[384,1646],],
'3938':[[251,230],],
},{'12':[[187,158],],
'94':[[187,21],],
'149':[[187,184],],
'2220':[[187,57],],
},{'73':[[187,154],],
},{'2662':[[187,172],],
},{'150':[[339,216],],
'217':[[384,9134],],
'224':[[339,135],],
'346':[[187,175],],
'447':[[384,4324],],
'1135':[[384,2048],],
'2466':[[384,3697],[384,3806],],
'2647':[[384,9262],],
'2671':[[384,7312],],
'3803':[[384,9385],],
'4849':[[384,5904],],
'4992':[[384,7223],],
},{'16':[[188,25],],
'23':[[312,53],],
'1606':[[277,155],],
},{'156':[[188,159],],
'1225':[[384,5775],[188,34],],
},{'15':[[188,36],],
},{'3634':[[188,37],],
},{'3':[[188,40],],
},{'1840':[[384,5759],[277,96],],
'2470':[[188,50],],
'2512':[[384,5767],[188,94],],
'4763':[[384,1419],],
},{'3':[[188,72],],
'3639':[[188,74],],
},{'3638':[[188,73],],
},{'105':[[188,76],],
},{'1305':[[188,266],],
'2345':[[188,245],],
'2512':[[188,115],],
},{'529':[[188,120],],
'1267':[[188,118],],
},{'3':[[188,131],],
'1225':[[188,161],],
},{'941':[[188,134],],
},{'553':[[188,139],],
'740':[[224,204],],
},{'3645':[[188,140],],
},{'255':[[188,156],],
},{'19':[[246,725],[246,755],],
'33':[[188,165],],
'67':[[246,769],],
'3648':[[188,166],],
'3650':[[188,182],[188,169],],
'3651':[[188,175],],
},{'3648':[[188,176],[188,167],],
},{'186':[[188,181],],
'603':[[277,667],],
'3649':[[188,168],],
},{'2':[[358,342],[261,182],],
'915':[[188,174],],
'3649':[[188,177],],
},{'3648':[[188,183],],
},{'2':[[246,1914],],
'12':[[246,462],[188,213],],
'23':[[246,1470],],
'77':[[188,192],],
'248':[[246,1900],],
'3656':[[384,5292],[277,180],],
},{'67':[[336,58],],
'137':[[188,219],],
},{'19':[[188,232],],
'2111':[[384,1787],],
},{'19':[[210,166],],
'73':[[210,175],],
'2512':[[188,304],[188,243],[188,283],[188,262],[277,179],[384,5291],],
'3669':[[384,5299],],
},{'2345':[[188,269],[188,290],[188,312],[188,330],[188,248],],
},{'186':[[188,250],],
},{'314':[[188,252],],
},{'224':[[188,257],],
},{'186':[[188,271],],
},{'224':[[188,278],],
},{'186':[[188,292],],
},{'224':[[188,299],],
},{'1314':[[188,308],],
},{'186':[[188,314],],
},{'1125':[[188,316],],
},{'224':[[188,321],],
},{'12':[[384,5298],],
'224':[[188,325],],
},{'3669':[[188,326],],
},{'217':[[384,9027],],
'2345':[[188,328],],
'4931':[[384,7536],[384,6818],],
},{'186':[[188,332],],
},{'1180':[[188,334],],
},{'224':[[188,339],],
},{'236':[[189,28],],
'423':[[189,130],],
},{'402':[[189,30],],
'2221':[[189,150],],
},{'63':[[189,439],],
'346':[[189,158],],
'404':[[189,32],],
},{'31':[[189,169],],
},{'23':[[189,463],],
},{'26':[[251,46],],
'39':[[308,155],[340,122],],
'1963':[[384,4346],],
'2104':[[189,545],],
},{'518':[[189,548],],
},{'23':[[213,428],[189,568],],
},{'128':[[190,26],],
'1052':[[190,17],],
},{'225':[[190,76],],
},{'123':[[191,22],],
'147':[[191,166],[191,177],],
'2372':[[191,54],],
},{'63':[[191,160],],
'921':[[191,153],],
},{'23':[[191,220],],
},{'154':[[191,260],],
'550':[[335,3575],[335,3607],],
'1192':[[335,3696],[335,3730],[335,3399],],
},{'152':[[352,49],[193,49],],
},{'63':[[352,62],[193,62],],
},{'7':[[194,24],],
'2006':[[194,68],],
},{'7':[[194,70],[194,30],],
},{'7':[[194,36],],
'163':[[194,76],],
},{'1245':[[194,44],],
},{'158':[[194,65],],
},{'26':[[194,96],],
'91':[[353,142],],
'532':[[194,105],],
'3697':[[194,108],],
},{'615':[[194,107],],
},{'7':[[217,110],],
'791':[[217,268],[197,337],],
},{'52':[[197,558],],
'236':[[197,551],],
'3700':[[197,577],],
},{'139':[[197,576],],
'173':[[197,556],],
'175':[[197,621],],
},{'26':[[200,64],],
'134':[[200,48],],
'173':[[257,16],[200,18],],
},{'12':[[200,56],],
'143':[[200,60],],
'182':[[200,20],[257,18],[335,2532],[335,2562],],
'236':[[335,3511],],
'247':[[335,3611],[335,3579],],
'436':[[335,3530],[335,3661],[335,3644],],
'682':[[335,3522],],
'945':[[335,2659],],
'1029':[[335,2572],[335,3552],],
'1180':[[335,3515],],
'1591':[[335,2567],[335,3546],],
'2128':[[335,3736],],
'3702':[[335,2861],],
'4363':[[335,2860],[335,2863],],
'4380':[[335,3544],],
'4383':[[335,3649],],
'4391':[[335,3751],],
},{'23':[[200,177],[200,242],],
'173':[[257,31],[200,33],],
'436':[[200,109],],
},{'61':[[200,118],],
'182':[[257,34],[200,36],],
},{'61':[[200,125],],
'182':[[257,36],[200,38],],
'277':[[200,115],],
'887':[[200,122],],
},{'420':[[200,152],],
},{'554':[[200,256],],
},{'518':[[200,260],],
},{'375':[[200,277],],
},{'39':[[249,176],],
'224':[[257,180],[200,298],],
},{'94':[[203,23],],
'249':[[203,59],],
},{'19':[[203,75],[203,34],],
'343':[[344,78],[321,128],],
},{'3':[[246,1063],],
'19':[[263,92],[263,33],[338,29],[263,62],],
'23':[[263,76],],
'2693':[[246,1051],],
'3712':[[203,35],],
'5147':[[384,8414],],
},{'231':[[263,51],[338,47],[203,53],],
},{'19':[[203,63],],
},{'7':[[206,20],],
'229':[[206,86],],
},{'7':[[206,26],],
'1192':[[206,92],],
},{'7':[[206,32],],
'3722':[[206,98],],
},{'453':[[384,2974],],
'921':[[206,46],],
},{'33':[[206,69],],
},{'923':[[206,78],],
},{'3598':[[206,97],],
},{'39':[[207,86],],
},{'18':[[208,28],],
},{'67':[[208,47],],
},{'134':[[209,57],],
'173':[[260,22],[209,18],],
'1006':[[260,57],],
},{'236':[[209,24],],
'653':[[209,89],],
},{'147':[[209,262],],
'165':[[209,245],],
'236':[[253,24],[209,28],],
'653':[[209,110],],
'935':[[253,74],],
'1019':[[209,210],],
},{'63':[[209,236],],
'241':[[209,231],],
},{'43':[[209,258],],
},{'346':[[209,260],],
'1357':[[284,175],[269,174],],
},{'3':[[384,9854],],
'14':[[384,9749],],
'23':[[210,143],],
'34':[[210,47],],
'482':[[210,59],],
},{'33':[[210,158],],
},{'173':[[213,57],],
},{'236':[[213,61],],
},{'77':[[213,470],[213,278],],
'228':[[213,77],],
'454':[[213,261],],
},{'182':[[213,81],],
'615':[[213,273],],
},{'772':[[213,98],],
},{'63':[[214,45],],
'82':[[246,244],],
'92':[[261,44],[384,265],],
'567':[[384,8672],],
'1503':[[384,8536],],
'2058':[[214,19],[227,114],[303,35],],
'3953':[[384,1513],[384,1188],],
'4696':[[384,1156],],
},{'648':[[214,66],],
},{'36':[[214,110],],
'364':[[227,155],],
'4487':[[384,9540],[384,9843],[384,9049],],
},{'63':[[214,222],],
},{'196':[[384,7637],],
'1146':[[214,226],],
},{'203':[[214,243],],
},{'39':[[303,197],[214,260],],
},{'226':[[214,270],],
'2314':[[384,385],],
'4846':[[384,2784],[384,2401],],
},{'199':[[274,87],],
'818':[[214,337],],
},{'800':[[266,53],],
'1006':[[359,90],],
'3747':[[214,338],],
'4523':[[368,39],[368,71],[359,132],],
},{'7':[[217,68],],
'13':[[384,6369],],
'271':[[217,212],],
'780':[[384,6353],],
},{'7':[[217,74],],
'271':[[217,222],],
'791':[[335,2505],],
'3752':[[217,117],],
},{'7':[[217,104],],
'82':[[217,262],],
},{'7':[[217,116],],
'791':[[217,274],],
},{'7':[[217,122],],
'791':[[217,279],],
},{'7':[[217,128],],
'791':[[217,284],],
'3755':[[217,135],],
},{'7':[[217,286],[217,134],],
},{'15':[[217,175],],
},{'1249':[[217,180],],
},{'77':[[384,2098],],
'1225':[[384,2871],],
'1448':[[217,200],],
},{'1245':[[217,290],],
},{'23':[[217,483],],
'26':[[217,293],],
'33':[[384,7126],],
'553':[[217,326],],
'897':[[217,310],],
'1245':[[277,307],[277,134],],
'2785':[[217,432],],
},{'1003':[[217,305],],
'1467':[[234,367],],
},{'149':[[355,1039],],
'199':[[217,334],],
'1003':[[290,83],],
'3760':[[277,308],],
},{'284':[[217,399],],
},{'696':[[217,446],],
},{'1220':[[217,450],],
},{'12':[[217,452],],
},{'123':[[218,45],],
'147':[[218,360],],
'177':[[218,207],],
},{'224':[[218,300],],
},{'12':[[274,144],[355,497],],
'39':[[218,319],],
'63':[[335,563],],
},{'195':[[355,1087],],
'417':[[218,342],[220,117],[355,749],[277,931],[355,475],],
'1237':[[218,323],[335,1014],],
'2179':[[235,316],],
},{'2148':[[218,330],],
},{'63':[[218,344],],
},{'961':[[219,21],],
'1267':[[262,27],[219,27],],
},{'26':[[341,172],[307,172],],
'961':[[262,21],],
'1288':[[262,30],[219,30],],
'1325':[[341,155],[307,155],],
},{'437':[[220,32],],
},{'39':[[335,1031],],
'57':[[220,104],],
'305':[[335,1260],],
},{'7':[[223,32],],
'2360':[[223,39],],
},{'82':[[224,66],],
'182':[[224,25],],
},{'199':[[224,107],],
'2072':[[246,871],],
},{'31':[[224,125],],
},{'523':[[224,138],],
},{'150':[[224,222],],
},{'15':[[224,231],],
},{'39':[[249,258],],
'203':[[227,106],[227,95],],
'2589':[[249,143],],
},{'237':[[355,634],],
'422':[[331,506],],
'3784':[[227,107],],
},{'23':[[227,173],],
},{'26':[[277,124],],
'1151':[[355,143],[355,812],],
'1319':[[277,34],[227,189],],
},{'63':[[277,44],[227,199],],
'1119':[[277,851],],
},{'34':[[384,973],],
'155':[[384,2230],],
'588':[[384,3998],],
'2076':[[384,1126],],
'3788':[[227,200],[277,45],],
'4084':[[277,752],],
'4621':[[384,1025],],
'4649':[[384,1132],],
'4884':[[384,2912],],
},{'2228':[[229,45],],
},{'12':[[229,69],[229,80],[341,189],[307,189],],
'39':[[308,182],[340,149],],
'73':[[340,125],[308,158],],
'861':[[266,134],],
},{'3572':[[384,3182],],
'3791':[[229,70],],
},{'7':[[229,73],],
'217':[[384,7290],],
'4323':[[384,7277],],
},{'3791':[[229,81],],
},{'7':[[231,32],],
},{'13':[[384,6421],],
'23':[[231,56],],
'674':[[384,7820],],
'1033':[[335,2952],[384,6706],],
'1101':[[384,5327],],
'2675':[[384,9247],],
'4405':[[384,3116],],
'4903':[[384,8506],],
},{'428':[[231,72],],
'4850':[[384,2471],],
},{'31':[[231,80],],
},{'31':[[231,120],],
},{'7':[[232,42],],
'199':[[232,90],],
},{'230':[[232,85],],
},{'27':[[342,146],],
'145':[[335,3000],],
'149':[[232,88],],
'370':[[384,4232],],
'4026':[[384,5668],],
},{'25':[[384,1406],],
'659':[[243,159],],
'728':[[246,598],],
'1027':[[232,106],],
'1101':[[384,9164],],
'1393':[[371,94],[280,101],],
'2384':[[384,9384],],
},{'26':[[234,107],],
},{'77':[[234,354],],
},{'43':[[234,395],],
},{'23':[[335,996],[353,77],[234,404],],
'5026':[[384,5193],],
'5137':[[384,8166],],
},{'3168':[[235,230],],
},{'1364':[[235,242],],
},{'102':[[235,245],],
},{'281':[[235,255],],
},{'15':[[235,261],],
},{'31':[[335,940],[235,310],],
},{'19':[[384,3009],[384,3219],],
'671':[[251,142],[251,126],],
'961':[[235,343],],
},{'1967':[[235,424],],
},{'128':[[239,20],],
},{'19':[[355,344],[242,29],],
},{'67':[[355,347],],
'818':[[384,7541],[242,33],],
},{'420':[[242,70],],
},{'529':[[278,30],],
'995':[[242,86],],
},{'273':[[242,121],],
},{'27':[[355,233],],
'43':[[242,146],],
'146':[[355,1031],],
},{'16':[[306,800],],
'1120':[[242,158],],
},{'248':[[242,174],],
'598':[[335,3132],],
'4866':[[384,2914],],
},{'16':[[242,192],],
},{'1003':[[242,197],],
},{'63':[[355,303],],
'199':[[355,254],[243,70],],
'1304':[[355,307],[344,174],],
},{'3251':[[243,83],],
},{'74':[[290,122],],
'79':[[384,2113],],
'215':[[384,1687],],
'2330':[[243,170],],
'4282':[[384,6248],],
},{'48':[[243,197],],
'420':[[321,216],],
},{'3830':[[243,198],],
},{'167':[[243,209],],
},{'3':[[384,1460],[384,620],[384,5445],],
'15':[[384,257],],
'63':[[243,211],],
'77':[[384,6971],],
'567':[[384,2010],[384,3281],],
'3874':[[384,4152],],
'3946':[[384,5908],],
},{'82':[[244,66],],
'988':[[244,22],],
},{'878':[[368,84],],
'3213':[[244,121],],
},{'2':[[246,19],],
},{'696':[[246,41],],
},{'36':[[246,100],[246,50],],
},{'39':[[246,52],],
},{'267':[[246,60],],
},{'26':[[246,81],],
'2675':[[384,9374],[384,9395],[384,9359],],
},{'86':[[246,85],],
},{'248':[[246,89],],
},{'23':[[246,452],[246,91],],
},{'164':[[246,106],],
},{'63':[[246,111],],
'248':[[246,1121],],
},{'23':[[246,1123],[277,652],[246,113],],
},{'1':[[246,144],],
'39':[[384,1779],],
},{'3848':[[246,145],],
},{'23':[[344,176],[355,951],],
'449':[[384,2838],],
'513':[[246,228],],
},{'31':[[246,310],[246,235],],
},{'203':[[246,247],],
},{'1381':[[246,249],],
},{'1476':[[246,253],],
},{'3854':[[246,254],],
},{'203':[[246,267],],
},{'36':[[246,298],[355,888],[246,270],],
},{'557':[[246,272],],
},{'12':[[246,288],],
},{'12':[[277,126],],
'608':[[246,296],],
},{'12':[[246,302],],
'55':[[246,300],],
},{'131':[[246,306],],
},{'3226':[[246,395],],
},{'63':[[246,397],],
},{'931':[[246,417],],
},{'12':[[246,428],],
'43':[[344,297],],
},{'936':[[246,456],],
},{'303':[[246,458],],
},{'3868':[[246,459],],
},{'305':[[246,520],],
},{'196':[[384,9933],],
'2023':[[246,524],],
'3115':[[384,2381],],
},{'305':[[246,529],],
},{'15':[[246,532],],
},{'3':[[384,4151],[384,8592],],
'59':[[246,553],],
},{'12':[[384,9477],],
'26':[[384,1437],],
'99':[[307,187],[341,187],],
'1260':[[307,205],[341,205],],
'1401':[[246,565],],
'1470':[[341,152],[307,152],],
'3774':[[307,173],[341,173],],
'3874':[[246,554],],
},{'1374':[[384,3191],],
'2726':[[246,558],],
},{'3':[[384,7752],[384,7193],[384,5449],[246,562],],
'15':[[384,7914],],
'567':[[384,1367],[384,7405],[384,2023],],
'3833':[[384,621],],
'4749':[[384,1184],[384,1509],],
},{'23':[[246,573],],
},{'140':[[246,595],],
},{'23':[[246,602],],
},{'343':[[246,606],],
'4267':[[331,371],],
},{'955':[[246,611],],
},{'1029':[[246,617],],
},{'12':[[246,621],],
'1117':[[246,663],],
},{'439':[[246,625],],
},{'955':[[246,640],],
'2042':[[251,114],],
},{'255':[[246,1194],[384,6903],[246,648],],
'343':[[384,6923],],
'470':[[384,727],],
},{'19':[[246,708],],
'23':[[246,659],],
'152':[[246,690],],
},{'23':[[246,673],],
},{'16':[[246,696],],
},{'12':[[355,220],],
'63':[[246,750],],
'305':[[246,717],],
'567':[[331,312],],
},{'351':[[246,735],],
},{'19':[[277,670],],
'152':[[246,757],],
},{'1202':[[246,799],],
},{'26':[[246,846],],
'615':[[246,1618],],
},{'707':[[246,1573],[246,1586],],
'2719':[[355,1294],],
'3895':[[246,847],],
},{'343':[[246,1134],],
'567':[[246,905],],
},{'357':[[342,298],],
'534':[[246,912],],
},{'39':[[246,943],],
},{'299':[[246,968],],
},{'224':[[246,1002],],
},{'2042':[[246,1031],],
},{'1249':[[246,1037],],
},{'3':[[246,1965],],
'23':[[246,1944],],
'1225':[[246,1039],],
'2690':[[246,1960],],
},{'152':[[246,1041],],
},{'237':[[246,1061],],
},{'531':[[246,1068],],
},{'3907':[[246,1069],],
},{'67':[[246,1140],],
'855':[[246,1106],],
},{'31':[[246,1109],],
},{'149':[[384,2711],],
'160':[[304,352],],
'278':[[384,2387],],
'869':[[246,1111],],
'1746':[[384,877],],
'4794':[[384,1701],],
'4986':[[384,4417],],
},{'26':[[384,9553],],
'518':[[246,1117],],
'3931':[[246,1442],],
},{'266':[[355,874],],
'343':[[246,1127],],
},{'3897':[[246,1135],],
},{'19':[[288,27],],
'23':[[246,1143],],
},{'19':[[246,1150],],
},{'19':[[246,1176],],
},{'12':[[276,57],[246,1230],],
},{'861':[[246,1233],],
},{'203':[[246,1302],[246,1260],],
},{'3920':[[246,1261],],
},{'27':[[246,1647],],
'63':[[246,1263],],
},{'31':[[246,1266],],
},{'3920':[[246,1303],],
},{'164':[[246,1306],],
},{'23':[[246,1309],],
},{'912':[[246,1311],],
},{'63':[[246,1334],],
'199':[[246,1509],],
'482':[[246,1331],],
},{'89':[[246,1407],],
},{'1682':[[246,1440],],
},{'30':[[320,61],],
'224':[[246,1547],],
'3930':[[246,1441],],
'5149':[[384,8500],],
},{'18':[[277,720],],
'518':[[384,3738],],
'2076':[[384,1035],],
'2752':[[277,637],[246,1482],],
},{'63':[[246,1484],],
},{'152':[[277,909],],
'3932':[[277,721],],
'3933':[[246,1485],],
},{'1307':[[246,1493],],
},{'241':[[246,1516],],
},{'343':[[246,1521],],
},{'1302':[[251,251],],
'2219':[[384,3839],],
'2289':[[251,229],],
'3896':[[246,1587],[246,1574],],
},{'343':[[246,1580],],
},{'12':[[246,1595],],
},{'31':[[246,1616],],
},{'19':[[335,2462],],
'203':[[246,1622],],
'669':[[335,1987],],
'673':[[335,2717],[335,2726],],
'682':[[335,2560],[335,2530],],
'696':[[335,2517],],
'926':[[335,2511],],
'960':[[335,2341],],
'961':[[335,2440],],
'1033':[[384,2431],],
'1364':[[355,422],],
'1462':[[384,1324],],
'3793':[[384,7291],],
},{'726':[[246,1636],],
},{'1993':[[246,1665],],
},{'16':[[246,1673],],
},{'2':[[246,1689],],
'149':[[355,905],],
'2388':[[384,5907],],
},{'19':[[246,1698],],
},{'16':[[246,1702],],
},{'33':[[246,1704],],
},{'16':[[246,1710],],
},{'3950':[[246,1711],],
},{'43':[[246,1729],],
},{'15':[[384,1605],],
'19':[[246,1752],],
'567':[[384,1512],[384,1187],],
},{'1236':[[246,1799],],
},{'2':[[246,1812],],
'13':[[384,4032],],
'1840':[[246,1832],],
},{'305':[[246,1926],[246,1968],],
'1255':[[246,1851],],
},{'19':[[246,1877],],
},{'19':[[246,1894],],
},{'3904':[[246,1945],],
'3958':[[246,1895],],
},{'23':[[246,1912],],
},{'531':[[246,1919],],
},{'615':[[246,1976],],
'2989':[[246,1931],],
},{'2116':[[246,1952],],
},{'3963':[[246,1953],],
},{'3964':[[246,1954],],
},{'3965':[[246,1955],],
},{'3966':[[246,1956],],
},{'589':[[246,1958],],
},{'1414':[[247,259],],
},{'63':[[248,33],],
},{'2':[[249,27],],
'817':[[384,5455],],
},{'33':[[249,40],],
},{'1998':[[249,58],],
'4630':[[384,181],],
},{'63':[[249,194],],
},{'12':[[249,271],],
},{'48':[[249,285],],
},{'128':[[250,101],],
'134':[[250,44],],
'381':[[310,18],[250,18],],
},{'13':[[384,4855],[384,4885],[384,4871],],
'77':[[367,126],[250,123],],
'139':[[384,8261],],
'844':[[384,4827],],
'4903':[[384,5111],[384,5104],],
},{'1553':[[367,136],[250,133],],
'1631':[[313,463],],
},{'252':[[251,87],],
'2745':[[251,65],],
},{'343':[[251,167],[251,81],],
},{'3980':[[251,88],],
},{'343':[[384,1277],[251,95],],
},{'31':[[251,131],],
},{'949':[[251,144],],
},{'140':[[251,184],],
},{'16':[[251,193],],
},{'226':[[251,196],],
},{'26':[[251,203],],
},{'1315':[[251,223],],
},{'1123':[[251,304],[384,1317],[384,963],[384,1238],[251,269],],
'4692':[[384,639],],
},{'23':[[251,286],],
},{'19':[[384,1306],],
'31':[[251,289],],
},{'26':[[251,298],],
'77':[[384,493],],
'99':[[384,8366],],
'609':[[384,509],],
'1288':[[384,486],],
},{'100':[[384,660],],
'780':[[384,1173],],
'994':[[384,868],],
'3994':[[251,299],],
'4701':[[384,692],],
},{'542':[[251,307],],
},{'3':[[342,150],],
'23':[[251,328],],
},{'3086':[[251,332],],
},{'23':[[251,339],],
},{'551':[[251,344],],
},{'124':[[252,20],],
'136':[[252,42],],
},{'203':[[252,34],],
},{'518':[[253,165],],
},{'130':[[256,30],],
},{'970':[[257,64],],
'1677':[[257,40],],
},{'23':[[257,133],],
'1990':[[257,45],],
},{'707':[[257,56],],
'2323':[[384,9462],],
'2942':[[384,968],],
},{'19':[[257,72],],
},{'26':[[257,90],],
},{'1797':[[257,119],],
},{'16':[[257,135],],
},{'23':[[257,157],[257,138],],
},{'23':[[257,144],],
},{'1785':[[257,149],],
},{'277':[[257,155],],
},{'515':[[257,163],],
},{'2363':[[258,15],],
},{'4017':[[258,16],],
},{'4018':[[258,17],],
},{'2364':[[258,34],],
},{'4020':[[258,35],],
},{'16':[[258,68],],
},{'4022':[[258,69],],
},{'228':[[259,16],],
},{'20':[[261,50],],
},{'10':[[384,7596],],
'23':[[384,5667],],
'1719':[[261,64],[261,60],[261,56],[261,52],],
},{'20':[[261,54],],
},{'20':[[261,58],],
},{'20':[[261,62],],
},{'12':[[358,310],[261,150],],
'77':[[358,344],[261,184],],
},{'12':[[358,348],[261,188],],
},{'94':[[263,22],],
'143':[[263,89],],
'249':[[263,57],],
},{'143':[[263,69],],
'333':[[263,24],],
},{'203':[[266,108],],
},{'67':[[266,118],],
'1719':[[384,6752],],
},{'19':[[266,125],],
},{'224':[[266,131],],
},{'19':[[266,149],],
},{'1101':[[384,5276],[268,29],],
},{'3':[[269,198],],
'26':[[284,177],[269,176],],
},{'73':[[270,233],],
'593':[[384,5629],],
'5070':[[384,6342],],
'5071':[[384,6346],],
'5160':[[384,8915],],
},{'7':[[272,26],],
},{'7':[[272,32],],
},{'2509':[[273,39],],
},{'7':[[379,182],],
'1452':[[274,76],],
},{'375':[[274,455],[274,128],],
},{'4046':[[274,456],[274,129],],
},{'77':[[384,3701],],
'4047':[[274,457],[274,130],],
},{'18':[[384,3705],],
'77':[[384,3810],],
'152':[[274,460],[274,133],],
},{'16':[[274,152],],
'4378':[[335,3431],],
},{'15':[[274,174],],
},{'314':[[335,3445],],
'571':[[331,487],],
'1419':[[274,318],[274,193],],
'1444':[[335,3488],[335,3461],],
},{'301':[[274,263],],
'1245':[[384,153],],
'1679':[[342,183],],
'3993':[[384,1307],],
},{'1342':[[274,281],],
},{'16':[[363,617],[274,381],],
'4580':[[381,104],],
},{'30':[[274,468],],
},{'31':[[274,651],[274,493],],
'39':[[384,341],],
'4661':[[384,370],],
},{'23':[[274,523],],
},{'2010':[[274,541],],
},{'1353':[[274,686],],
},{'164':[[274,748],],
},{'1680':[[274,785],],
'4831':[[384,2166],],
},{'203':[[276,52],],
},{'23':[[277,142],],
},{'555':[[277,205],],
'562':[[277,160],],
'921':[[384,255],],
},{'1462':[[355,167],],
'2512':[[277,186],],
'4085':[[277,789],],
},{'3':[[277,196],],
},{'224':[[277,364],],
},{'130':[[277,404],],
},{'27':[[277,462],],
'596':[[277,443],],
},{'236':[[335,3319],[335,356],[335,3738],],
'285':[[335,420],],
'297':[[277,528],],
'1540':[[277,535],],
'1573':[[335,3327],[335,3749],[335,364],],
'1652':[[335,428],],
},{'31':[[277,611],],
},{'2791':[[277,640],],
},{'3893':[[277,671],],
},{'16':[[277,681],],
'1305':[[384,7912],],
'2352':[[384,9098],],
'5030':[[384,5305],],
},{'284':[[277,687],],
},{'4076':[[277,688],],
},{'4077':[[277,689],],
},{'2794':[[277,699],],
},{'63':[[277,723],],
},{'31':[[277,742],],
'82':[[384,5215],],
},{'1225':[[277,748],],
},{'152':[[277,750],],
},{'4083':[[277,751],],
},{'43':[[277,788],],
},{'12':[[277,809],],
},{'31':[[277,821],],
},{'598':[[277,834],],
},{'152':[[277,853],],
},{'26':[[277,950],],
'275':[[381,145],],
},{'43':[[277,953],],
},{'4091':[[277,954],],
},{'248':[[277,957],],
},{'152':[[277,966],],
},{'152':[[384,6363],],
'155':[[384,1375],[384,2397],],
'208':[[384,984],],
'347':[[278,25],],
'553':[[384,6136],],
'4679':[[384,519],],
},{'1335':[[278,46],[278,37],],
},{'23':[[280,79],[371,72],],
'126':[[280,46],],
'136':[[371,39],],
'1270':[[371,20],[280,22],],
},{'7':[[380,26],],
'389':[[371,26],[280,28],],
},{'117':[[284,216],],
'470':[[384,4969],[384,9334],[384,9253],],
'917':[[384,4317],],
'2949':[[384,8294],[384,7263],],
},{'3':[[287,45],],
'210':[[287,20],],
},{'31':[[287,76],],
},{'67':[[384,2089],],
'199':[[384,9667],],
'445':[[384,7010],],
'580':[[384,8940],],
'596':[[315,80],[289,80],],
'791':[[384,7221],],
'896':[[384,497],],
'1305':[[335,2944],],
'1819':[[384,6518],],
'1955':[[384,3201],[384,2991],],
'2135':[[384,6633],],
'2342':[[384,9740],],
'3113':[[384,3948],],
'4639':[[384,3766],],
},{'12':[[315,164],[355,901],[289,164],],
},{'23':[[315,173],[289,173],],
'299':[[384,1410],],
},{'43':[[290,69],],
},{'272':[[384,7228],],
'1123':[[384,3325],],
'1226':[[290,85],],
'1319':[[384,5797],],
},{'27':[[290,110],],
},{'7':[[291,32],],
},{'134':[[292,32],],
'182':[[292,18],],
},{'215':[[292,39],],
},{'835':[[293,133],],
},{'134':[[294,27],],
'1513':[[294,18],],
},{'7':[[350,58],],
'23':[[294,41],],
'289':[[350,173],],
},{'65':[[384,3171],],
'370':[[384,3120],],
'861':[[296,117],],
'1151':[[296,97],],
},{'19':[[296,109],],
'2950':[[384,9377],],
'5187':[[384,9518],],
},{'39':[[308,90],],
'4115':[[296,110],],
},{'67':[[384,2847],],
'128':[[301,20],],
'271':[[384,1872],],
},{'928':[[301,31],[301,39],[366,34],[384,1633],[384,6073],[301,25],],
'4620':[[384,2670],],
},{'790':[[301,49],],
},{'1915':[[303,62],],
},{'203':[[303,104],],
},{'23':[[384,1061],],
'364':[[303,150],],
},{'123':[[304,27],],
'708':[[304,174],],
},{'123':[[304,39],],
'126':[[339,104],],
'1283':[[304,202],],
},{'123':[[304,45],],
'126':[[321,219],[339,101],],
'244':[[304,209],],
},{'123':[[304,51],],
'244':[[304,216],],
},{'9':[[304,246],],
'123':[[304,64],],
'126':[[339,247],[321,307],],
},{'123':[[304,70],],
'146':[[304,256],],
},{'123':[[304,76],],
'147':[[304,289],],
'231':[[304,266],],
},{'146':[[304,277],],
'173':[[304,82],],
},{'123':[[304,88],],
'244':[[304,292],],
},{'123':[[304,94],],
'244':[[304,301],],
},{'2':[[304,308],],
'123':[[304,100],],
},{'123':[[304,106],],
'2100':[[304,319],],
},{'123':[[304,118],],
'4145':[[304,331],],
},{'123':[[304,130],],
'126':[[339,161],],
'160':[[304,346],],
},{'123':[[304,136],],
'126':[[339,141],],
'1276':[[304,361],],
},{'123':[[304,142],],
'1276':[[304,372],],
},{'123':[[304,148],],
'134':[[304,381],],
},{'126':[[384,3761],[326,51],],
'182':[[304,154],],
'1452':[[304,389],],
},{'1447':[[304,196],],
},{'23':[[304,200],],
},{'23':[[350,193],[304,207],],
},{'2229':[[304,297],],
},{'196':[[304,330],],
'546':[[304,313],],
},{'313':[[305,74],],
'2778':[[305,58],],
},{'203':[[305,62],],
},{'2726':[[305,68],],
},{'94':[[306,307],],
'1909':[[306,406],],
},{'75':[[306,1579],],
'92':[[306,333],[306,1550],],
'93':[[306,355],[306,376],[306,1123],[306,1061],],
'139':[[306,1577],],
'581':[[306,310],],
'1329':[[306,324],[306,1050],],
'1651':[[306,1582],],
'1909':[[306,451],],
'4152':[[306,345],[306,1214],],
'4180':[[306,1230],],
},{'75':[[306,453],],
'4150':[[306,1551],[306,334],],
},{'165':[[306,740],],
'173':[[306,1213],[306,344],],
'1029':[[306,498],],
'2712':[[306,1607],],
},{'236':[[306,353],[306,1059],],
'1830':[[306,659],],
'1902':[[306,347],],
},{'236':[[306,374],[306,1121],],
'1846':[[306,364],],
'4164':[[306,690],],
},{'4149':[[306,407],],
},{'147':[[306,488],],
'173':[[306,479],],
'175':[[306,718],],
'1589':[[306,525],],
'4157':[[306,482],],
},{'236':[[306,481],],
'1004':[[306,486],],
'1643':[[306,528],],
},{'236':[[335,3566],],
'313':[[306,573],],
'671':[[306,647],],
'744':[[306,580],],
'1281':[[335,3594],],
'3702':[[335,3580],[335,3612],],
'4161':[[306,584],],
'4162':[[306,587],],
},{'346':[[384,526],],
'4158':[[306,574],],
},{'4159':[[306,575],],
},{'75':[[306,692],],
'237':[[306,663],],
'1589':[[306,583],],
'1832':[[306,678],],
'4160':[[306,576],],
'4161':[[306,664],],
},{'1589':[[306,586],],
'1645':[[306,707],],
'1830':[[306,694],],
},{'199':[[306,683],],
},{'236':[[306,689],],
'1573':[[306,696],],
},{'506':[[306,749],],
},{'243':[[306,771],],
'333':[[306,809],],
'671':[[306,832],[306,819],],
},{'1169':[[306,781],],
},{'333':[[306,827],],
'671':[[306,848],],
'4167':[[306,782],],
},{'15':[[306,822],[306,836],],
'140':[[306,804],],
},{'174':[[306,873],],
'241':[[306,858],],
'333':[[306,814],],
'551':[[306,901],],
'671':[[306,894],[306,852],],
'1419':[[306,871],],
'4168':[[306,828],],
'4174':[[306,911],],
},{'4166':[[306,820],],
},{'780':[[306,834],],
},{'1589':[[306,840],],
'1828':[[306,1098],],
},{'174':[[306,876],],
'333':[[306,903],],
'780':[[306,910],],
'1589':[[306,860],],
},{'1589':[[306,866],],
},{'1589':[[306,882],],
'1828':[[306,1147],],
},{'186':[[306,1182],],
'236':[[306,1152],],
'671':[[306,1186],],
'1828':[[306,1202],],
},{'529':[[306,1168],],
},{'1132':[[306,1178],],
},{'1741':[[306,1229],],
'1847':[[306,1590],],
},{'231':[[306,1251],],
'1592':[[306,1305],[306,1293],],
},{'124':[[306,1285],],
'147':[[306,1301],[306,1289],],
},{'170':[[306,1483],],
'4183':[[306,1484],],
},{'41':[[307,143],[341,143],],
'61':[[307,91],[341,91],],
'62':[[307,163],[341,163],],
'121':[[341,48],[307,48],],
'333':[[307,22],[341,22],],
'593':[[307,216],[341,228],[341,216],[307,228],],
'1104':[[341,182],[307,182],],
},{'77':[[341,106],[307,106],],
},{'1117':[[341,126],[307,126],],
},{'39':[[341,134],[307,134],],
},{'12':[[341,218],[307,218],],
'1211':[[384,1370],],
'4905':[[384,3242],],
},{'1391':[[341,221],[307,221],],
},{'3':[[384,195],],
'12':[[384,569],],
'15':[[384,1767],[341,223],[307,223],[384,1940],],
'26':[[384,1652],],
'63':[[384,197],[384,1541],[384,1551],],
'921':[[384,588],],
'1102':[[384,777],],
'1424':[[384,2353],],
'1469':[[384,394],],
'3196':[[384,1382],[384,820],],
'4622':[[384,433],[384,2100],[384,413],],
'4629':[[384,3245],],
'4706':[[384,4029],],
'4729':[[384,1668],],
},{'1391':[[341,233],[307,233],],
},{'13':[[384,3035],],
'152':[[341,265],[307,265],],
'4405':[[384,3153],],
},{'13':[[384,4057],],
'375':[[341,267],[307,267],],
},{'15':[[341,270],[307,270],],
},{'761':[[340,16],],
'1011':[[308,16],],
},{'324':[[308,18],],
'762':[[340,18],],
},{'16':[[340,107],[308,140],],
},{'23':[[384,7413],],
'59':[[340,127],[308,160],],
},{'242':[[340,146],[308,179],],
},{'67':[[311,51],[311,59],[387,43],[387,51],[387,59],[311,43],],
},{'23':[[387,79],[311,79],],
'89':[[387,96],[311,96],],
'2675':[[384,1003],],
'4226':[[384,630],],
'4620':[[384,583],],
},{'150':[[339,157],],
'4201':[[387,80],[311,80],],
},{'236':[[313,24],],
'357':[[313,240],],
'705':[[313,116],],
'935':[[313,76],],
'4204':[[313,121],],
},{'73':[[313,255],],
'215':[[313,247],],
'236':[[313,26],],
'447':[[313,84],],
'596':[[313,301],],
'607':[[313,120],],
},{'147':[[313,353],],
'236':[[313,28],],
'2548':[[313,108],],
},{'16':[[313,205],],
},{'1381':[[313,350],],
},{'23':[[313,362],],
},{'12':[[313,375],],
'248':[[355,1069],],
},{'77':[[313,472],],
},{'351':[[314,69],],
},{'2479':[[314,94],],
},{'7':[[316,30],],
'603':[[316,80],],
},{'7':[[316,36],],
'2438':[[316,91],],
},{'7':[[316,42],],
'241':[[316,99],],
},{'7':[[316,49],],
'137':[[316,106],],
},{'7':[[316,108],[316,55],],
},{'7':[[316,61],],
'771':[[316,113],],
},{'2042':[[316,102],],
},{'230':[[316,111],],
},{'31':[[317,63],],
'134':[[317,33],],
'147':[[317,48],],
'709':[[317,17],],
},{'709':[[317,20],],
'1841':[[317,45],],
},{'164':[[317,71],],
},{'182':[[319,18],],
'2290':[[319,36],],
},{'206':[[384,6558],],
'2298':[[319,58],],
},{'19':[[381,136],],
'23':[[384,7439],],
'63':[[331,456],],
'77':[[384,9137],[384,9259],],
'531':[[384,629],[384,2746],[384,2268],[320,169],],
'1479':[[384,2285],[384,838],[384,72],[384,1775],],
'2675':[[384,290],[384,4414],[384,4449],[384,4677],],
},{'140':[[321,122],],
'150':[[321,106],],
'230':[[384,3631],],
'1033':[[384,5635],],
'2629':[[384,6088],],
},{'16':[[339,233],[321,293],],
'26':[[384,1809],],
},{'4127':[[339,248],[321,308],],
},{'1016':[[326,37],],
},{'122':[[328,15],],
},{'7':[[342,247],],
'77':[[328,30],[328,22],],
},{'15':[[329,52],],
'77':[[384,5977],],
'4582':[[381,127],],
},{'23':[[331,345],[331,349],[331,395],],
'149':[[329,70],],
'1101':[[384,7691],],
'2558':[[384,5270],],
},{'7':[[330,24],],
},{'7':[[330,30],],
},{'364':[[331,38],],
},{'77':[[331,50],],
},{'113':[[331,60],],
'149':[[331,301],],
'861':[[355,199],],
},{'153':[[331,86],],
},{'487':[[331,120],],
},{'26':[[331,122],],
'34':[[331,178],],
},{'995':[[331,126],],
},{'26':[[331,134],],
},{'272':[[331,171],],
'4244':[[331,135],],
},{'23':[[331,162],],
},{'12':[[331,199],[331,167],],
},{'63':[[331,176],],
},{'38':[[331,185],],
},{'203':[[331,188],],
},{'597':[[331,204],],
'4830':[[384,2108],],
},{'18':[[331,206],],
},{'4252':[[331,207],],
},{'99':[[331,211],],
},{'26':[[331,213],],
},{'305':[[331,218],],
},{'26':[[384,6117],],
'152':[[331,225],],
},{'16':[[331,229],],
},{'4258':[[331,230],],
},{'1682':[[331,242],],
},{'550':[[331,259],],
},{'420':[[331,296],],
},{'77':[[331,318],],
},{'26':[[331,434],],
'37':[[331,330],],
'89':[[331,423],],
'152':[[331,397],],
},{'921':[[331,361],],
},{'155':[[331,366],],
},{'23':[[331,370],],
'443':[[331,385],],
},{'248':[[331,379],],
},{'19':[[331,392],],
},{'224':[[331,451],],
},{'39':[[331,468],],
},{'105':[[331,522],],
'647':[[384,7932],],
'1699':[[384,9946],],
'2611':[[384,7946],[384,7110],],
},{'724':[[333,21],],
},{'126':[[334,27],],
},{'16':[[334,70],],
},{'445':[[335,60],],
},{'173':[[335,295],[335,129],],
'215':[[335,280],],
'1592':[[335,297],],
'2130':[[335,253],],
},{'173':[[335,475],[335,131],],
'1592':[[335,477],],
'2128':[[335,442],],
'4277':[[335,254],],
},{'173':[[335,697],[335,133],],
'1592':[[335,699],],
'4278':[[335,255],],
},{'78':[[384,8162],],
'83':[[355,694],],
'173':[[335,1083],[335,135],],
'1592':[[335,1085],],
'4279':[[335,256],],
},{'173':[[335,1874],[335,137],],
'275':[[384,7722],],
'1225':[[335,2303],],
'1592':[[335,1876],],
'2126':[[335,1831],],
'4280':[[335,257],],
},{'173':[[335,3194],[335,141],],
'950':[[335,259],],
'1592':[[335,3196],],
'4358':[[335,3173],],
'4452':[[384,6247],],
},{'78':[[384,5597],],
'173':[[335,3491],[335,143],],
'1592':[[335,3493],],
'4282':[[335,260],],
'4372':[[335,3341],],
},{'1591':[[335,262],],
},{'63':[[335,379],],
},{'30':[[355,1256],],
'99':[[335,394],],
},{'23':[[335,447],],
},{'19':[[335,471],],
},{'228':[[335,630],],
'1007':[[335,656],],
},{'2128':[[335,676],],
},{'63':[[335,797],[335,684],],
},{'228':[[335,814],],
'236':[[335,801],],
},{'147':[[335,883],],
'182':[[335,819],],
'339':[[335,872],[335,890],[335,907],[335,856],],
},{'236':[[335,822],],
'1128':[[335,832],],
'2128':[[335,850],],
'2132':[[335,841],],
'4295':[[335,863],],
'4297':[[335,867],],
},{'236':[[335,829],],
'1949':[[335,862],[335,847],],
},{'236':[[335,836],],
'4294':[[335,864],[335,868],[335,851],],
},{'236':[[335,859],],
'1949':[[335,866],],
},{'12':[[384,9057],],
'1582':[[335,878],],
},{'162':[[335,901],],
},{'2128':[[335,930],],
},{'4300':[[335,931],],
},{'63':[[335,960],],
'912':[[355,1014],],
},{'61':[[335,991],],
},{'3':[[335,1005],],
},{'502':[[335,1047],],
},{'147':[[335,1110],],
'182':[[335,1703],],
'236':[[335,1105],],
'4307':[[335,1128],],
'4309':[[335,1131],],
},{'94':[[335,1122],],
'1101':[[335,1416],[335,1563],],
'4308':[[335,1127],],
},{'94':[[335,1126],],
'1101':[[335,1573],[335,1427],],
},{'215':[[335,1508],[335,1281],[335,1785],[335,1642],],
'236':[[335,1130],],
'333':[[335,1142],],
'2128':[[335,1670],[335,1812],[335,1513],[335,1523],[335,1663],[335,1302],[335,1286],[335,1819],],
'2132':[[335,1135],],
'3617':[[335,1269],],
'4307':[[335,1417],[335,1564],],
},{'236':[[335,1133],],
'333':[[335,1144],],
'4308':[[335,1574],[335,1428],],
'4309':[[335,1524],[335,1270],[335,1664],[335,1813],[335,1303],],
},{'1589':[[335,1240],],
'1949':[[335,1352],],
},{'236':[[335,1276],[335,1637],[335,1780],[335,1503],],
'333':[[335,1791],],
'1591':[[335,1787],],
'2126':[[335,1658],[335,1297],[335,1807],[335,1518],],
'2127':[[335,1520],[335,1299],[335,1809],[335,1660],],
},{'7':[[353,49],],
'23':[[335,2353],],
'285':[[335,1289],],
'2332':[[335,1540],],
},{'236':[[335,1349],],
'1949':[[335,1384],[335,1369],],
},{'236':[[335,1366],],
'1573':[[335,1380],],
},{'236':[[335,1560],[335,1413],],
'2126':[[335,1577],[335,1431],],
'2127':[[335,1583],[335,1438],],
},{'236':[[335,1570],[335,1424],],
'4316':[[335,1584],[335,1439],],
},{'23':[[384,6200],[381,264],[384,7789],],
'77':[[335,1798],[335,1649],],
},{'12':[[335,1801],[335,2327],[335,1652],],
'447':[[335,3281],],
'598':[[335,3010],],
},{'14':[[385,56],],
'935':[[335,1849],],
'2060':[[390,141],],
},{'79':[[335,2293],[335,1856],],
},{'12':[[335,2691],[335,1948],],
'598':[[335,2974],],
'1029':[[335,3495],],
},{'26':[[384,8946],],
'77':[[384,5186],],
'542':[[384,7276],],
'671':[[384,7083],],
'2272':[[335,1963],],
},{'596':[[381,403],],
'609':[[335,1970],],
},{'19':[[335,2347],],
'349':[[384,5182],],
'1370':[[335,1997],],
},{'23':[[335,2790],[335,2072],],
'170':[[335,2280],],
'933':[[335,2130],[335,2825],],
'1589':[[335,2739],[335,2006],],
'1652':[[335,2011],],
'4325':[[335,1998],],
'4326':[[335,2251],[335,3098],],
'4332':[[335,2160],],
'4346':[[335,3097],[335,2250],],
'4364':[[335,2924],],
},{'147':[[335,2096],[335,2800],],
'171':[[335,2009],],
'236':[[335,2002],[335,2734],],
'671':[[335,3039],[335,2192],],
'1671':[[335,2807],[335,2103],],
'4326':[[335,2740],],
},{'215':[[335,2256],[335,3103],],
'236':[[335,2742],[335,2014],],
'4326':[[335,2826],[335,2131],],
'4327':[[335,2104],[335,2097],[335,2808],[335,2801],],
'4331':[[335,2926],[335,2162],],
'4336':[[335,2832],[335,2137],],
'4345':[[335,2247],[335,3094],],
},{'147':[[335,2074],[335,2792],],
'236':[[335,2019],[335,2747],],
'333':[[335,2821],[335,2126],],
'1652':[[335,2259],[335,3146],],
'2126':[[335,2828],[335,2133],],
'2127':[[335,2810],[335,2106],],
'4336':[[335,2830],[335,2135],],
},{'182':[[335,2628],[335,2036],],
'247':[[335,2635],],
'2159':[[335,2761],],
},{'236':[[335,2048],[335,2763],],
'963':[[335,2186],],
'1652':[[335,2233],[335,3080],],
'4326':[[335,2161],[335,2252],[335,3099],[335,2925],],
'4328':[[335,2927],[335,3095],[335,2163],[335,2248],],
'4339':[[335,3033],],
'4345':[[335,3101],[335,2254],],
},{'445':[[335,2184],],
'1128':[[335,2060],],
'1589':[[335,2051],],
'2128':[[335,2155],],
'4333':[[335,2159],],
},{'671':[[335,2062],],
'1589':[[335,2055],],
'2132':[[335,2158],],
},{'26':[[335,2090],],
'139':[[335,3602],],
'272':[[337,76],],
'4382':[[335,3570],],
},{'186':[[335,2099],[335,2803],],
'236':[[335,2796],[335,2092],],
},{'236':[[335,2805],[335,2101],],
'241':[[335,2111],],
'333':[[335,2819],[335,2124],],
'1671':[[335,2113],],
'4328':[[335,2138],[335,2833],],
'4329':[[335,2829],[335,2831],[335,2134],[335,2136],],
},{'143':[[335,3028],[335,2176],],
'182':[[337,22],],
'926':[[337,101],],
'1346':[[337,47],],
},{'182':[[335,3030],[335,2178],],
'963':[[335,2200],[335,3047],],
'4331':[[335,3034],[335,2187],],
},{'143':[[335,3032],[335,2180],],
'182':[[337,28],],
'963':[[337,54],],
},{'143':[[335,3037],[335,2190],],
'182':[[337,40],],
'2915':[[337,88],],
},{'1143':[[335,3062],[335,2215],],
},{'38':[[335,3078],[335,2231],],
},{'12':[[335,2473],],
'215':[[335,3083],[335,2236],],
'1029':[[335,2848],],
'1591':[[335,2846],],
},{'248':[[335,3091],[335,2244],],
},{'236':[[335,3093],[335,2246],],
'4328':[[335,2257],[335,3104],],
'4331':[[335,3100],[335,2253],],
},{'681':[[335,2856],],
'4331':[[335,3096],[335,2249],],
},{'305':[[335,2317],],
},{'12':[[384,5385],],
'4313':[[335,2354],],
},{'199':[[335,2371],],
},{'128':[[359,96],],
'1514':[[335,2432],],
},{'23':[[335,2478],],
},{'26':[[335,2480],],
},{'135':[[335,2960],],
'182':[[335,2555],[335,2526],],
'186':[[335,2844],],
'247':[[335,2597],],
'958':[[335,2569],],
'2132':[[335,2922],],
'3702':[[335,2573],],
'4364':[[335,2911],],
'4366':[[335,2907],],
},{'270':[[335,2539],],
},{'19':[[335,2543],],
},{'961':[[335,2552],],
},{'4356':[[335,2553],],
},{'139':[[335,2587],],
'143':[[335,2919],],
'1589':[[335,2594],],
'1652':[[335,2599],],
'1705':[[335,3172],],
'4346':[[335,2857],],
'4358':[[335,2858],],
'4370':[[335,3113],],
},{'139':[[335,2601],],
'1589':[[335,2772],[335,2768],[335,2612],],
'1652':[[335,2617],],
'1705':[[335,3170],],
'2131':[[335,3160],],
'4361':[[335,2878],],
},{'1419':[[335,2736],],
},{'333':[[335,2877],],
'445':[[335,3141],],
'933':[[335,3135],],
'1128':[[335,2778],],
'1589':[[335,2766],],
'1652':[[335,3149],],
'4363':[[335,3115],],
},{'671':[[335,2780],],
'1589':[[335,2770],],
'4361':[[335,3150],],
},{'147':[[335,2841],],
'236':[[335,2775],],
'333':[[335,2875],],
'921':[[335,2835],],
'963':[[335,3143],],
'3702':[[335,2862],],
'4353':[[335,2912],[335,2908],],
'4358':[[335,3114],[335,2920],[335,2859],],
},{'23':[[335,2998],],
'236':[[335,2910],[335,2904],],
'2444':[[335,2892],],
'4353':[[335,2923],],
},{'12':[[335,2900],],
},{'1671':[[335,2906],],
},{'23':[[353,154],],
'567':[[335,2934],],
},{'598':[[335,2936],],
},{'23':[[335,2967],],
'3613':[[384,5971],],
},{'1589':[[335,3112],],
'4361':[[335,3136],],
},{'236':[[335,3234],],
'247':[[335,3262],],
'333':[[335,3257],[335,3255],],
'958':[[335,3245],],
'4374':[[335,3293],],
},{'94':[[335,3291],],
'173':[[335,3260],],
'1652':[[335,3264],],
'1705':[[335,3340],],
'2127':[[335,3323],],
'2131':[[335,3332],],
'3548':[[335,3306],],
},{'23':[[335,3279],],
},{'94':[[335,3289],],
'264':[[335,3321],],
'449':[[335,3312],],
'933':[[335,3296],],
'3024':[[335,3303],],
'4372':[[335,3292],],
},{'16':[[335,3314],],
},{'19':[[335,3350],],
},{'39':[[384,6586],],
'420':[[335,3388],],
},{'152':[[335,3430],],
'372':[[343,83],],
},{'94':[[335,3538],],
'99':[[335,3619],],
'173':[[335,3527],],
},{'99':[[335,3624],],
'236':[[335,3532],],
'2132':[[335,3543],],
'3534':[[335,3568],],
'3702':[[335,3553],],
'4379':[[335,3539],],
},{'173':[[335,3536],],
'4379':[[335,3620],],
},{'236':[[335,3541],],
'4380':[[335,3569],[335,3625],[335,3554],],
},{'26':[[335,3638],],
'94':[[335,3648],],
'139':[[335,3711],],
'173':[[335,3577],],
'933':[[335,3642],],
'1652':[[335,3582],],
'1705':[[335,3777],],
},{'236':[[335,3622],],
'4391':[[335,3682],],
},{'4382':[[335,3626],],
},{'449':[[335,3653],[335,3636],],
},{'173':[[335,3646],],
'933':[[335,3699],],
'1281':[[335,3706],],
},{'436':[[384,5792],[384,8274],],
'2126':[[335,3688],],
'3702':[[335,3650],],
},{'99':[[335,3669],],
'215':[[335,3666],],
'333':[[335,3664],],
'491':[[335,3679],],
'4384':[[335,3683],],
},{'173':[[335,3677],],
'1835':[[335,3754],],
'4387':[[335,3700],],
},{'236':[[335,3681],],
'333':[[335,3720],],
'4071':[[335,3750],],
'4387':[[335,3707],],
'4390':[[335,3701],],
'4392':[[335,3756],[335,3743],],
},{'173':[[335,3733],],
'2127':[[335,3742],],
'4390':[[335,3755],],
},{'317':[[336,52],],
},{'38':[[336,119],],
},{'1967':[[336,126],],
},{'830':[[336,142],],
},{'182':[[337,34],],
'2864':[[337,61],],
},{'728':[[338,59],],
},{'646':[[338,71],],
'2704':[[357,36],],
},{'15':[[338,76],],
},{'7':[[379,32],],
'1225':[[338,81],],
'1254':[[379,129],],
},{'33':[[355,1177],],
'89':[[355,178],],
'154':[[338,83],],
},{'2008':[[338,87],],
},{'7':[[379,92],],
'144':[[338,90],],
'2051':[[379,205],],
},{'16':[[339,57],],
'31':[[384,4714],[384,6747],],
'107':[[384,677],],
'121':[[384,8361],],
'193':[[384,3156],],
'206':[[384,3134],[384,6807],],
'238':[[384,3478],],
'271':[[384,7822],],
'313':[[384,3101],[384,3151],],
'349':[[384,8952],],
'374':[[384,5102],],
'390':[[384,6416],],
'625':[[384,8136],],
'631':[[384,5624],[384,8061],[384,9024],],
'723':[[384,7957],],
'735':[[384,3145],],
'817':[[384,3115],[384,5338],[384,6580],],
'840':[[384,5647],],
'904':[[384,3140],[384,3130],],
'912':[[384,3105],],
'1156':[[384,8300],],
'2309':[[384,6424],],
'2577':[[384,7803],[384,8056],],
'3053':[[384,4730],],
'4405':[[384,3152],[384,3146],],
'4898':[[384,6046],],
'4928':[[384,3482],],
'4975':[[384,4201],],
'5089':[[384,6802],],
'5091':[[384,6812],],
},{'199':[[339,176],],
},{'182':[[342,20],],
'1346':[[342,90],],
},{'182':[[342,26],],
'455':[[342,101],],
},{'182':[[342,32],],
'455':[[342,116],],
},{'182':[[342,38],],
'2715':[[342,152],],
},{'182':[[342,44],],
'4053':[[342,184],],
},{'88':[[342,213],],
'182':[[342,50],],
},{'182':[[342,56],],
'4425':[[342,245],],
},{'182':[[342,62],],
'3149':[[342,257],],
},{'123':[[342,68],],
'502':[[342,266],],
},{'39':[[342,279],],
'123':[[342,74],],
},{'39':[[342,292],],
'123':[[342,80],],
},{'12':[[342,123],],
},{'12':[[342,143],],
},{'7':[[342,215],[342,186],[342,154],],
'3137':[[342,176],],
},{'1416':[[342,174],],
},{'4420':[[342,177],],
},{'518':[[342,239],],
},{'13':[[384,5642],],
'23':[[342,243],],
'4629':[[384,9935],[384,9927],],
},{'4424':[[342,244],],
},{'63':[[342,253],],
},{'64':[[342,296],],
},{'145':[[342,307],],
},{'16':[[343,59],],
},{'844':[[343,78],],
},{'39':[[343,81],],
},{'928':[[344,63],],
},{'80':[[384,7339],],
'205':[[344,325],],
'2836':[[344,316],],
},{'2342':[[348,23],],
},{'7':[[350,18],],
'229':[[350,141],],
},{'7':[[350,38],],
'41':[[350,158],],
},{'7':[[350,48],],
'3135':[[350,164],],
},{'7':[[350,68],],
'320':[[350,181],],
},{'7':[[350,88],],
'818':[[350,199],],
},{'7':[[350,98],],
'4446':[[350,211],],
},{'7':[[350,108],],
'479':[[350,216],],
},{'7':[[350,218],[350,118],],
},{'7':[[350,220],[350,128],],
},{'48':[[350,155],],
},{'196':[[350,186],],
},{'1276':[[350,210],],
},{'7':[[351,24],],
},{'7':[[351,30],],
},{'7':[[351,36],],
},{'7':[[351,42],],
},{'206':[[351,51],],
},{'13':[[384,6291],[384,5144],],
'16':[[381,574],[381,551],],
'25':[[384,6945],],
'63':[[353,32],],
'78':[[384,6246],],
'374':[[384,6443],],
'469':[[384,8657],[384,7810],[384,8767],[384,5592],],
'641':[[384,9875],],
'741':[[384,9084],],
'758':[[384,5640],],
'1131':[[384,4839],],
'2472':[[384,6080],],
'2577':[[384,8035],[384,8009],],
'3196':[[384,1571],[384,214],],
},{'128':[[353,66],],
},{'3807':[[353,78],],
},{'23':[[353,94],],
'707':[[353,158],],
},{'39':[[353,107],],
'4903':[[384,5689],],
},{'16':[[353,123],],
},{'91':[[353,131],],
},{'16':[[353,166],],
'203':[[353,148],],
},{'4367':[[353,155],],
},{'75':[[353,164],],
},{'23':[[353,169],],
},{'16':[[357,24],],
'23':[[353,181],],
'2402':[[384,4491],],
},{'23':[[354,28],],
},{'67':[[355,53],],
},{'373':[[355,58],],
},{'576':[[355,77],],
},{'1476':[[355,91],],
},{'3622':[[355,94],],
},{'167':[[355,129],],
},{'203':[[355,134],],
},{'86':[[355,183],],
},{'27':[[355,192],],
},{'16':[[384,653],[355,213],],
'28':[[384,1082],],
},{'1805':[[355,218],],
},{'3827':[[355,255],],
},{'305':[[355,334],],
},{'12':[[381,174],],
'167':[[355,379],],
},{'281':[[355,469],],
},{'1151':[[355,539],],
},{'31':[[355,621],],
},{'23':[[355,831],],
},{'4482':[[355,832],],
},{'12':[[355,882],],
},{'248':[[355,958],],
},{'562':[[355,1089],],
},{'77':[[384,9842],],
'152':[[355,1106],],
'2388':[[384,9539],],
'2675':[[384,9690],[384,9659],[384,9048],],
},{'248':[[355,1120],],
},{'15':[[355,1133],],
},{'33':[[355,1170],],
},{'230':[[355,1187],],
'1468':[[384,999],],
},{'12':[[355,1224],],
},{'3200':[[355,1383],],
},{'4493':[[355,1384],],
},{'532':[[355,1405],],
},{'31':[[355,1431],],
},{'305':[[355,1448],],
},{'2980':[[356,42],],
},{'12':[[356,54],],
},{'898':[[357,21],],
'3589':[[357,18],],
},{'4500':[[357,22],],
},{'12':[[358,145],],
'20':[[358,59],[358,47],],
'346':[[358,142],],
'1033':[[358,125],],
},{'20':[[358,62],[358,50],],
},{'20':[[358,65],[358,53],],
},{'20':[[358,68],[358,56],],
},{'19':[[358,139],],
},{'67':[[358,150],],
},{'1838':[[358,243],],
},{'33':[[384,5660],],
'63':[[358,245],],
},{'26':[[384,5663],],
'63':[[358,247],],
},{'1838':[[358,250],],
},{'77':[[358,271],],
},{'4512':[[358,272],],
},{'4513':[[358,273],],
},{'4514':[[358,274],],
},{'3129':[[358,279],],
},{'196':[[358,289],],
},{'89':[[358,355],],
},{'4518':[[358,356],],
},{'7':[[359,32],],
'225':[[359,93],],
},{'220':[[359,102],],
'513':[[384,7603],],
},{'1169':[[359,117],],
},{'63':[[359,131],],
'67':[[368,70],],
'220':[[368,38],],
},{'7':[[360,18],],
'229':[[360,38],],
},{'7':[[360,24],],
'144':[[385,65],],
'1241':[[360,45],],
},{'7':[[360,30],],
'1238':[[360,53],],
},{'7':[[360,47],],
},{'182':[[361,20],],
'940':[[361,41],],
},{'248':[[362,69],],
},{'16':[[396,154],[363,219],],
},{'926':[[363,229],],
},{'31':[[384,177],],
'926':[[363,418],],
},{'130':[[363,432],],
'562':[[384,6899],],
'948':[[384,6536],],
'1445':[[384,117],],
},{'2323':[[363,467],],
},{'484':[[363,565],],
},{'31':[[363,707],],
},{'305':[[363,723],],
},{'9':[[384,3655],],
'167':[[363,745],],
'202':[[384,5995],],
'271':[[384,5411],],
},{'173':[[365,18],],
'1346':[[365,121],],
},{'152':[[365,160],],
'165':[[365,140],],
'329':[[365,36],],
},{'329':[[365,49],],
'2058':[[365,149],],
},{'329':[[365,60],],
'4540':[[365,161],],
},{'12':[[365,192],],
'182':[[365,72],],
'1424':[[365,169],],
},{'329':[[365,90],],
'4543':[[365,193],],
},{'329':[[365,101],],
'3167':[[365,201],],
},{'420':[[365,176],],
},{'12':[[365,211],],
},{'343':[[365,223],],
},{'7':[[366,16],],
},{'7':[[366,22],],
},{'7':[[366,28],],
},{'250':[[367,104],],
'4683':[[384,544],],
},{'2566':[[368,25],],
},{'164':[[368,54],],
'165':[[384,1706],[384,317],],
'220':[[384,7056],],
'4795':[[384,1720],],
'5235':[[388,76],],
},{'12':[[368,79],],
},{'19':[[371,108],],
},{'236':[[372,20],],
'2013':[[372,36],],
},{'173':[[375,20],],
},{'162':[[377,14],],
},{'12':[[378,23],],
},{'7':[[379,20],],
'229':[[379,117],],
},{'7':[[379,26],],
'231':[[379,121],],
},{'7':[[379,38],],
'876':[[379,134],],
},{'7':[[379,44],],
'4576':[[379,140],],
},{'7':[[379,50],],
'185':[[379,150],],
},{'7':[[379,56],],
'894':[[379,158],],
},{'7':[[379,62],],
'184':[[379,162],],
},{'7':[[379,68],],
'1593':[[379,166],],
},{'7':[[379,74],],
'1593':[[379,173],],
},{'7':[[379,80],],
'277':[[379,180],],
},{'7':[[379,86],],
'55':[[379,190],],
},{'7':[[379,97],],
'2039':[[379,217],],
},{'7':[[379,219],[379,102],],
},{'7':[[379,136],],
},{'152':[[379,138],],
},{'788':[[384,4327],[384,4697],[384,5563],[384,7261],[384,9266],[384,9345],],
'4575':[[379,139],],
},{'152':[[379,154],],
},{'3032':[[379,156],],
},{'7':[[380,32],],
},{'422':[[381,103],[381,74],],
},{'12':[[384,1484],],
'89':[[381,364],],
'267':[[381,82],],
'705':[[384,2627],],
'1180':[[384,5703],],
'1719':[[384,3195],],
'1915':[[384,5518],],
'2808':[[384,887],],
'3115':[[384,861],],
'3995':[[384,693],],
},{'31':[[381,126],],
},{'33':[[381,176],],
},{'16':[[381,182],],
'878':[[384,4222],],
},{'23':[[381,194],],
},{'23':[[381,220],],
},{'100':[[384,3715],],
'215':[[384,8803],[384,7652],[381,225],],
'217':[[384,5705],[384,4483],],
'780':[[384,3820],],
'1180':[[384,2413],],
},{'101':[[384,7654],[381,227],],
'217':[[384,8323],],
'1180':[[384,7428],],
'1260':[[384,8368],],
'1261':[[384,8159],],
'1286':[[384,7882],],
'3671':[[384,7537],],
'4701':[[384,8106],],
'4847':[[384,8068],],
},{'12':[[381,354],],
},{'271':[[381,380],],
},{'67':[[381,401],],
'154':[[384,344],],
'4634':[[384,1480],],
},{'152':[[381,428],],
},{'23':[[381,431],],
},{'579':[[381,483],],
},{'2221':[[381,486],],
},{'1132':[[381,509],],
},{'16':[[381,512],],
'2646':[[384,647],],
},{'267':[[381,515],],
},{'4598':[[381,516],],
},{'1403':[[381,521],],
},{'224':[[381,612],],
},{'1967':[[384,17],],
'4532':[[384,178],],
},{'26':[[384,29],],
'349':[[384,6452],],
'4639':[[384,6651],],
},{'19':[[384,31],],
'2675':[[384,1680],],
},{'3':[[384,3349],[384,3489],[384,3502],],
'2479':[[384,41],],
},{'4605':[[384,42],],
},{'4606':[[384,43],],
},{'4607':[[384,44],],
},{'314':[[384,766],],
'321':[[384,46],],
'3874':[[384,8593],],
},{'1120':[[384,50],],
'4930':[[384,3494],],
},{'4610':[[384,51],],
},{'4611':[[384,52],],
},{'2388':[[384,56],],
},{'4613':[[384,57],],
},{'4614':[[384,58],],
},{'4615':[[384,59],],
},{'4616':[[384,60],],
},{'3':[[384,68],],
'1170':[[384,3990],],
'3253':[[384,6030],],
},{'922':[[384,78],],
},{'33':[[384,331],],
'886':[[384,1445],],
'2675':[[384,608],[384,1039],[384,1401],[384,582],[384,86],[384,1740],[384,2073],[384,2669],],
},{'3':[[384,2803],],
'77':[[384,89],],
'1381':[[384,1024],],
'1462':[[384,294],],
'4626':[[384,106],],
},{'12':[[384,965],],
'63':[[384,401],],
'77':[[384,2648],],
'107':[[384,3520],],
'562':[[384,2754],],
'921':[[384,1029],],
'1003':[[384,2923],],
'1125':[[384,1917],[384,2336],],
'1225':[[384,2852],],
'1381':[[384,412],[384,3558],[384,2347],[384,108],[384,399],],
'1991':[[384,2904],],
'3196':[[384,982],[384,432],[384,3732],[384,2831],],
'3758':[[384,2099],],
'4007':[[384,969],],
'4190':[[384,589],[384,821],[384,1383],[384,1768],[384,198],[384,2354],[384,1669],],
'4620':[[384,1040],],
'4621':[[384,90],],
'4706':[[384,2276],[384,2077],[384,3343],[384,2176],[384,2259],],
'4732':[[384,2732],],
'4787':[[384,3572],],
'4882':[[384,2861],],
},{'301':[[384,99],],
},{'4623':[[384,100],],
},{'1':[[384,247],],
'69':[[384,103],],
'77':[[384,1412],],
},{'2076':[[384,105],],
},{'3':[[384,2220],],
'375':[[384,2232],],
'1766':[[384,1746],],
'2675':[[384,114],],
'3196':[[384,2207],[384,756],],
'4117':[[384,1873],],
'4627':[[384,115],],
},{'1218':[[384,123],],
},{'2':[[384,4788],],
'5':[[384,7197],],
'8':[[384,3855],],
'9':[[384,7745],],
'34':[[384,9795],],
'35':[[384,2814],[384,8845],],
'82':[[384,8820],],
'99':[[384,1924],],
'165':[[384,3878],],
'217':[[384,3729],],
'230':[[384,1358],],
'277':[[384,4578],],
'282':[[384,8858],],
'284':[[384,2570],[384,2173],],
'295':[[384,9671],],
'373':[[384,4808],],
'374':[[384,7165],],
'447':[[384,7733],],
'494':[[384,8173],],
'538':[[384,9406],],
'547':[[384,9907],],
'567':[[384,8485],[384,8493],],
'588':[[384,8831],],
'613':[[384,1623],],
'642':[[384,8918],],
'646':[[384,2935],],
'696':[[384,9645],[384,1216],],
'791':[[384,2841],],
'817':[[384,9786],],
'827':[[384,4526],],
'840':[[384,2895],[384,8651],],
'857':[[384,430],[384,472],],
'888':[[384,9926],],
'904':[[384,1955],],
'908':[[384,1881],],
'912':[[384,8445],],
'926':[[384,8476],[384,6144],],
'933':[[384,5610],],
'949':[[384,7347],],
'960':[[384,8465],],
'1123':[[384,3569],],
'1135':[[384,1261],],
'1211':[[384,8452],],
'1212':[[384,541],],
'1310':[[384,4544],],
'1319':[[384,7910],[384,171],],
'1335':[[384,7569],],
'1424':[[384,8469],[384,9102],[384,7183],[384,8393],],
'1462':[[384,1656],],
'1467':[[384,9917],],
'1471':[[384,6119],],
'1476':[[384,932],[384,960],[384,127],],
'1667':[[384,8778],],
'1765':[[384,6104],[384,8622],],
'2042':[[384,156],],
'2309':[[384,8387],],
'2371':[[384,9114],],
'2545':[[384,1644],],
'2577':[[384,4144],],
'2591':[[384,7070],],
'2686':[[384,564],],
'2727':[[384,3418],],
'2743':[[384,904],],
'2816':[[384,409],],
'2985':[[384,388],],
'3099':[[384,8601],],
'3378':[[384,8614],],
'3537':[[384,9897],],
'3589':[[384,1908],],
'3656':[[384,5300],],
'3807':[[384,8167],],
'3871':[[384,9934],],
'4057':[[384,371],],
'4227':[[384,6089],],
'4588':[[384,8324],],
'4636':[[384,1343],],
'4664':[[384,1380],],
'4685':[[384,3555],],
'4705':[[384,735],],
'4708':[[384,754],[384,2858],],
'4710':[[384,2820],],
'4712':[[384,773],],
'4753':[[384,1203],],
'4783':[[384,2827],],
'4787':[[384,2205],],
'4838':[[384,3244],],
'4843':[[384,2332],],
'4862':[[384,2561],],
'4909':[[384,7916],],
'4922':[[384,3445],],
'5022':[[384,5129],[384,5875],[384,5937],[384,5431],],
'5150':[[384,9629],[384,9592],],
'5169':[[384,9092],],
'5173':[[384,9324],],
'5201':[[384,9706],],
},{'15':[[384,180],],
},{'375':[[384,183],],
},{'33':[[384,3290],],
'217':[[384,8406],],
'1283':[[384,188],],
},{'29':[[384,1176],[384,193],],
},{'26':[[384,1478],],
'82':[[384,9621],[384,9223],[384,9215],],
'551':[[384,8553],],
'3204':[[384,211],],
'4634':[[384,1479],],
'4695':[[384,670],],
},{'3196':[[384,2238],[384,2325],[384,223],],
},{'13':[[384,4913],],
'23':[[384,1342],[384,1503],[384,2329],[384,227],],
'375':[[384,2608],],
'2675':[[384,275],],
'5165':[[384,9034],],
},{'2675':[[384,243],],
'4750':[[384,2005],],
},{'147':[[384,270],],
},{'12':[[384,7017],],
'68':[[384,9516],[384,3685],],
'271':[[384,2261],],
'349':[[384,6650],[384,4659],[384,7305],[384,3540],],
'649':[[384,3765],],
'1680':[[384,4728],],
'1911':[[384,5090],],
'4636':[[384,276],],
},{'4639':[[384,277],],
},{'26':[[384,2834],],
'63':[[384,750],],
'67':[[384,279],],
'4618':[[384,3991],],
'4787':[[384,1666],],
},{'12':[[384,1563],[384,1536],],
'77':[[384,1456],],
'346':[[384,1554],],
'1365':[[384,285],],
'2675':[[384,1019],],
'4621':[[384,2804],],
'4689':[[384,616],],
'4824':[[384,2062],],
'4871':[[384,2728],],
},{'19':[[384,4234],[384,6572],],
'59':[[384,6520],],
'2675':[[384,3804],[384,3695],],
'3198':[[384,296],],
},{'4643':[[384,297],],
},{'77':[[384,303],],
},{'26':[[384,306],],
'140':[[384,2577],],
'159':[[384,2145],],
},{'4646':[[384,307],],
},{'4647':[[384,308],],
},{'732':[[384,561],],
'2076':[[384,1113],],
'4648':[[384,309],],
'4728':[[384,1008],],
'4730':[[384,1131],],
},{'1385':[[384,320],],
},{'63':[[384,3592],],
'77':[[384,323],],
},{'3024':[[384,329],],
'4732':[[384,1044],],
},{'609':[[384,337],],
},{'4591':[[384,345],],
},{'861':[[384,356],],
},{'63':[[384,358],],
},{'12':[[384,360],],
},{'63':[[384,362],],
},{'4658':[[384,363],],
},{'3196':[[384,366],],
},{'817':[[384,369],],
},{'2629':[[384,380],],
},{'3196':[[384,566],[384,390],],
},{'1123':[[384,1494],],
'4663':[[384,567],[384,391],],
'4760':[[384,1379],],
},{'271':[[384,404],],
},{'4665':[[384,405],],
},{'1':[[384,2589],],
'351':[[384,7005],],
'1120':[[384,439],],
'1211':[[384,946],],
'1261':[[384,420],],
'3994':[[384,510],[384,487],],
'4587':[[384,3716],],
'4632':[[384,8407],],
'4837':[[384,5395],],
'4908':[[384,9144],],
'4945':[[384,3727],],
'5107':[[384,7320],],
},{'217':[[384,425],],
},{'217':[[384,449],[384,427],],
},{'217':[[384,451],],
},{'420':[[384,461],],
'1424':[[384,917],],
},{'217':[[384,8908],],
'4671':[[384,462],],
},{'217':[[384,467],],
},{'217':[[384,469],],
},{'89':[[384,499],],
},{'3':[[384,502],],
},{'19':[[384,3642],],
'50':[[384,4167],],
'77':[[384,504],],
},{'29':[[384,513],],
},{'155':[[384,518],],
},{'13':[[384,521],],
'4879':[[384,2799],],
},{'12':[[384,524],],
},{'13':[[384,703],[384,3294],[384,3903],[384,535],],
'15':[[384,4113],],
'4629':[[384,3879],],
},{'13':[[384,2801],],
'3196':[[384,543],],
},{'284':[[384,8928],],
'926':[[384,7191],],
'1109':[[384,6157],],
'1123':[[384,574],],
'1424':[[384,791],],
'1462':[[384,746],],
'3046':[[384,1291],],
'4062':[[384,2167],],
},{'77':[[384,1933],],
'2500':[[384,3546],],
'2786':[[384,3988],[384,3528],[384,3554],],
'3024':[[384,604],],
'3563':[[384,593],],
'4720':[[384,830],],
},{'1205':[[384,599],],
'2076':[[384,1021],[384,618],],
'4799':[[384,1771],],
'4827':[[384,2092],],
},{'1381':[[384,602],],
},{'518':[[384,613],],
},{'63':[[384,615],],
},{'1960':[[384,636],],
},{'59':[[384,4470],],
'4690':[[384,637],],
},{'4691':[[384,638],],
},{'215':[[384,8547],],
'1286':[[384,658],],
},{'15':[[384,668],],
'275':[[384,3272],],
},{'4694':[[384,669],],
},{'499':[[390,124],],
'675':[[384,675],],
'869':[[384,1155],],
'2591':[[384,7107],],
'4875':[[384,2767],],
},{'31':[[384,1165],],
'33':[[384,690],],
'63':[[390,126],],
'869':[[384,4297],[384,680],],
'4907':[[384,3292],],
},{'4697':[[384,681],],
},{'4698':[[384,682],],
},{'31':[[384,685],],
},{'33':[[384,7105],[384,8105],],
'99':[[384,9044],[384,8598],],
'215':[[384,9079],[384,9029],[384,2986],],
'314':[[384,8157],],
'1125':[[384,4249],],
'4581':[[384,3196],],
'4697':[[384,691],],
},{'1211':[[384,701],],
},{'1177':[[384,708],],
},{'79':[[384,1863],],
'165':[[384,730],],
'1915':[[384,5532],[384,5525],],
},{'343':[[384,734],],
},{'15':[[384,1134],[384,1538],[384,1922],[384,1664],[384,748],],
'23':[[384,3531],],
'77':[[384,2076],[384,2275],[384,2258],],
'301':[[384,3564],],
'343':[[384,2345],],
'422':[[384,4028],],
'1462':[[384,2084],[384,2750],[384,2226],],
'2675':[[384,3342],],
'3196':[[384,2295],[384,1548],[384,2175],[384,2334],],
'4629':[[384,3570],],
'4799':[[384,2280],],
},{'26':[[384,992],],
'1125':[[384,752],],
'4622':[[384,966],],
},{'4707':[[384,753],],
'4867':[[384,2857],[384,2899],[384,2652],],
},{'3':[[384,763],],
'63':[[384,3504],[384,3351],],
},{'3':[[384,2819],],
'4709':[[384,764],],
},{'920':[[384,770],],
},{'26':[[384,772],],
},{'538':[[384,779],],
},{'1299':[[384,781],],
},{'15':[[384,793],],
},{'4715':[[384,794],],
},{'2762':[[384,798],],
},{'12':[[384,3526],],
'77':[[384,825],],
'2675':[[384,1763],],
'3196':[[384,1926],],
'4190':[[384,1653],],
},{'4718':[[384,1654],[384,1764],[384,1927],[384,826],],
},{'453':[[384,829],],
},{'1170':[[384,835],],
},{'1177':[[384,845],],
},{'77':[[384,848],],
},{'238':[[384,850],],
'1123':[[384,3235],],
'2591':[[384,3321],],
'4636':[[384,2609],],
'4866':[[384,2611],],
},{'100':[[384,865],],
},{'1211':[[384,884],],
'4725':[[384,866],],
},{'4707':[[384,993],],
},{'1462':[[384,1007],],
},{'63':[[384,3993],],
'4641':[[384,2835],[384,1667],],
'4649':[[384,1009],],
},{'588':[[384,3977],],
'3221':[[384,1130],[384,1013],],
},{'3789':[[384,1026],],
},{'26':[[384,1043],],
'77':[[384,2731],],
'861':[[384,1545],],
},{'314':[[384,1050],],
},{'152':[[384,1052],],
},{'2058':[[384,1065],],
},{'33':[[384,1072],],
},{'1245':[[384,1089],],
},{'4737':[[384,1090],],
},{'937':[[384,1100],],
},{'130':[[384,1108],],
},{'4740':[[384,1109],],
},{'817':[[384,1118],],
},{'35':[[384,1121],],
'285':[[384,2480],],
},{'4743':[[384,1122],],
},{'59':[[384,1124],],
},{'77':[[384,1161],],
},{'4746':[[384,1162],],
},{'100':[[384,1171],],
'215':[[384,6061],],
'1180':[[384,8321],],
},{'275':[[384,1508],[384,1183],],
'605':[[384,7529],],
'3953':[[384,1606],],
},{'15':[[384,1190],],
'1503':[[384,2004],],
'4694':[[384,3273],],
'4750':[[384,1191],],
},{'1503':[[384,1517],],
'4750':[[384,1192],],
},{'245':[[384,1524],[384,1199],],
},{'89':[[384,1527],[384,1202],],
},{'443':[[384,1251],],
},{'949':[[384,1298],],
},{'2486':[[384,1315],],
},{'780':[[384,1321],],
},{'321':[[384,1334],],
},{'4095':[[384,1376],],
},{'2487':[[384,1378],],
'2651':[[384,2439],],
},{'54':[[384,1414],],
'69':[[384,4384],],
},{'2229':[[384,1416],],
},{'63':[[384,1418],],
},{'3637':[[384,1420],],
},{'39':[[384,1426],],
},{'199':[[384,3692],],
'271':[[384,5788],],
'274':[[384,5114],],
'1310':[[384,6008],],
'1340':[[384,9182],],
'2773':[[384,1442],],
'3229':[[384,8175],],
'5080':[[384,6532],],
},{'4620':[[384,1446],],
},{'215':[[384,1449],],
},{'1122':[[384,1559],],
'4642':[[384,1457],],
},{'780':[[384,1466],],
},{'4770':[[384,1467],],
'4927':[[384,9717],],
},{'99':[[384,2035],],
'1286':[[384,3475],],
'2867':[[384,1818],],
'4771':[[384,1468],],
},{'203':[[384,1482],],
},{'4769':[[384,1560],],
},{'159':[[384,1581],],
'885':[[384,1566],],
},{'4775':[[384,1582],[384,1567],],
},{'4776':[[384,1568],],
},{'4452':[[384,1572],],
},{'63':[[384,1574],],
},{'63':[[384,1597],],
'649':[[384,1594],],
},{'63':[[384,1614],],
'4780':[[384,1598],],
},{'23':[[384,1602],],
},{'3':[[384,1959],],
'10':[[384,3260],],
'63':[[384,3033],],
'821':[[384,2289],],
'1504':[[384,5131],[384,5302],[384,4396],],
'3127':[[384,1898],[384,3270],[384,1901],],
'4749':[[384,1607],],
'4817':[[384,2826],],
'4819':[[384,1971],],
},{'499':[[384,1612],],
},{'82':[[384,2917],],
'494':[[384,1648],],
},{'4785':[[384,1649],],
},{'15':[[384,1915],],
'63':[[384,2204],],
'4706':[[384,3571],[384,1665],],
},{'589':[[384,1672],],
},{'270':[[384,1676],],
'1590':[[384,2794],],
},{'4604':[[384,1681],],
},{'77':[[384,1690],],
},{'176':[[384,1694],],
},{'59':[[384,1698],],
},{'12':[[384,5922],],
'905':[[384,1700],],
},{'1267':[[384,1719],],
},{'349':[[384,1724],],
},{'1843':[[384,1727],],
},{'63':[[384,1731],],
},{'39':[[384,2279],[384,1770],],
},{'3848':[[384,1780],],
},{'1177':[[384,1783],],
},{'265':[[384,1805],],
},{'99':[[384,2639],],
'215':[[384,8910],],
'217':[[384,2663],],
'1177':[[384,4003],[384,1816],],
'1180':[[384,6979],[384,5720],],
},{'436':[[384,1828],],
},{'1267':[[384,1834],],
},{'12':[[384,7243],],
'2949':[[384,5407],],
'4805':[[384,1835],],
},{'817':[[384,1844],],
},{'199':[[384,1857],],
},{'4808':[[384,1858],],
},{'15':[[384,1865],],
'33':[[384,2120],],
'277':[[384,1861],],
},{'1307':[[384,1920],],
'3196':[[384,2095],],
'3627':[[384,1911],],
},{'538':[[384,1929],],
},{'275':[[384,1942],],
},{'16':[[384,1945],],
},{'674':[[384,1949],],
},{'4783':[[384,1960],],
},{'3':[[384,1966],],
'10':[[384,2825],],
},{'4817':[[384,1967],],
},{'1488':[[384,1970],],
},{'301':[[384,1978],],
},{'1505':[[384,4922],],
'4820':[[384,1979],],
},{'4821':[[384,1980],],
},{'89':[[384,2050],],
},{'3':[[384,2061],],
},{'884':[[384,2685],[384,2067],],
'1033':[[384,2683],],
},{'562':[[384,2087],],
'4706':[[384,2281],],
},{'472':[[384,2091],],
'3554':[[384,2264],],
},{'15':[[384,2103],],
},{'1479':[[384,2106],],
},{'4829':[[384,2107],],
},{'532':[[384,2165],],
},{'532':[[384,2171],],
},{'443':[[384,2184],],
},{'152':[[384,2187],],
},{'443':[[384,2196],],
},{'26':[[384,2202],],
},{'217':[[384,7426],],
'314':[[384,4308],[384,5394],],
'1125':[[384,5265],[384,2250],],
'1177':[[384,9424],],
'1180':[[384,4363],[384,5428],],
'1267':[[384,9489],],
},{'99':[[384,2366],],
'1177':[[384,2665],],
'1260':[[384,2641],],
'1265':[[384,3198],],
'1283':[[384,2252],],
'3234':[[384,2988],],
'4188':[[384,3243],],
'4847':[[384,2415],],
},{'4639':[[384,2262],],
},{'4226':[[384,2286],],
},{'281':[[384,2314],],
},{'23':[[384,2316],],
},{'15':[[384,2331],],
},{'217':[[384,2358],],
},{'99':[[384,4410],[384,5502],],
'215':[[384,8731],[384,8704],],
'314':[[384,2364],],
'1288':[[384,3370],],
},{'275':[[384,2783],],
'837':[[384,2400],],
},{'99':[[384,5959],],
'4587':[[384,2414],],
'4927':[[384,8067],],
},{'1504':[[384,2463],],
},{'23':[[384,5893],],
'506':[[384,2465],],
'596':[[384,5903],],
},{'92':[[384,2470],],
},{'12':[[384,2473],],
},{'4743':[[384,2481],],
},{'346':[[384,2526],],
},{'12':[[384,2528],],
},{'12':[[384,3328],],
'33':[[384,2533],],
'63':[[384,2633],],
'77':[[384,4405],],
'215':[[384,4621],],
'1125':[[384,4632],],
},{'33':[[384,2776],[384,3450],[384,2539],],
'4876':[[384,2779],],
},{'4856':[[384,2780],[384,3451],[384,2540],],
},{'4856':[[384,2777],],
'4857':[[384,3452],[384,2541],],
},{'4858':[[384,2542],],
},{'362':[[384,2544],],
},{'4':[[384,7324],],
'13':[[384,7207],[384,2547],],
'54':[[384,3308],],
},{'314':[[384,6954],],
'780':[[384,2560],],
},{'948':[[384,2572],],
'956':[[384,3881],[384,3905],],
'1218':[[384,3858],[384,3843],],
'1553':[[384,3828],],
},{'567':[[384,2580],],
},{'2629':[[384,2606],],
},{'13':[[384,8000],],
'2315':[[384,9236],],
'3789':[[384,2913],],
'4724':[[384,2610],],
},{'33':[[384,2651],],
'63':[[384,2856],],
'3196':[[384,2898],],
},{'2096':[[384,2690],],
},{'1746':[[384,2698],],
},{'77':[[384,2720],],
},{'2300':[[384,2727],],
},{'1462':[[384,2734],],
},{'13':[[384,2759],],
},{'100':[[384,4737],],
'314':[[384,4365],],
'994':[[384,4412],],
'1177':[[384,4485],],
'2611':[[384,3456],[384,2764],],
'3099':[[390,118],],
'3409':[[384,4310],],
},{'466':[[384,2766],],
},{'4858':[[384,2778],],
},{'230':[[384,7511],],
'3746':[[384,2785],],
},{'3':[[384,2797],],
'2076':[[384,3599],],
},{'4878':[[384,2798],],
},{'87':[[384,2806],],
},{'88':[[384,2845],],
},{'2':[[384,2860],],
},{'915':[[384,2889],],
},{'2008':[[384,2911],],
},{'33':[[384,3601],],
'1122':[[384,2927],],
},{'135':[[384,2938],],
},{'3196':[[384,2972],],
},{'2080':[[384,2977],],
},{'1033':[[384,3222],[384,3012],],
},{'916':[[384,3226],[384,3016],],
},{'63':[[384,3025],],
},{'203':[[384,3268],],
'817':[[384,3028],],
},{'4892':[[384,3029],],
},{'313':[[384,5479],],
'3606':[[384,3046],],
},{'4894':[[384,3047],],
},{'923':[[384,3094],],
},{'1851':[[384,3099],],
},{'63':[[384,6045],[384,8508],],
'275':[[384,8747],],
'301':[[384,8586],],
'580':[[384,8765],],
'1101':[[384,8933],],
'1360':[[384,8762],],
'2675':[[384,8708],],
'3796':[[384,3117],],
'4629':[[384,8602],],
},{'321':[[384,3132],],
},{'648':[[384,3142],],
},{'648':[[384,3148],],
},{'4192':[[384,3154],],
},{'17':[[384,3277],],
'65':[[384,6799],],
'148':[[384,7115],],
'299':[[384,3165],],
'370':[[384,6035],],
'550':[[384,8358],],
'613':[[384,5688],],
'694':[[384,3920],],
'844':[[384,6695],],
'912':[[384,3927],[384,3934],],
'926':[[384,8505],],
'1254':[[384,6810],],
'1347':[[384,5110],],
'1462':[[384,4710],],
'1582':[[384,4210],],
'2402':[[384,4722],],
'4405':[[384,6803],[384,5103],],
'4965':[[384,4216],],
'4969':[[384,4187],],
'4974':[[384,4199],],
'5019':[[384,5099],],
'5102':[[384,8140],],
},{'1720':[[384,3167],],
},{'101':[[384,3241],],
'1180':[[384,7249],],
},{'79':[[384,3266],],
},{'100':[[384,4135],],
'314':[[384,3340],[384,3583],],
'780':[[384,4005],],
'1177':[[384,3822],],
'1211':[[384,4251],],
'1256':[[384,3372],],
'1261':[[384,3512],],
'4632':[[384,3291],],
'4667':[[384,3717],],
},{'215':[[384,8662],[384,9143],[384,9200],],
'780':[[384,9290],],
'1283':[[384,3338],],
},{'3877':[[384,7915],],
'4709':[[384,3505],[384,3352],],
},{'20':[[384,3749],],
'23':[[384,7993],],
'26':[[384,3357],],
'2589':[[384,3753],],
},{'1864':[[384,3363],],
},{'4911':[[384,3364],],
},{'4912':[[384,3365],],
},{'15':[[384,3392],],
},{'16':[[384,3663],],
'89':[[384,3688],],
'203':[[384,3410],],
},{'4915':[[384,3411],],
},{'4916':[[384,3412],],
},{'2867':[[384,3415],],
},{'4918':[[384,3416],],
},{'59':[[384,3421],],
},{'3':[[384,3442],],
},{'63':[[384,3444],],
},{'4629':[[384,3446],],
},{'840':[[384,3459],],
'5185':[[384,9468],],
},{'4924':[[384,3460],],
},{'1286':[[384,3472],],
},{'99':[[384,5872],[384,9716],],
'215':[[384,4735],[384,9864],[384,7147],[384,8976],],
'217':[[384,5934],[384,9806],],
'1125':[[384,8066],],
'4926':[[384,3473],],
},{'12':[[384,3481],],
},{'26':[[384,3492],],
},{'4929':[[384,3493],],
},{'215':[[384,5568],[384,7535],[384,9944],],
'217':[[384,5540],],
'314':[[384,6938],],
'1125':[[384,6817],[384,9589],],
'1211':[[384,3581],],
'1286':[[384,3510],],
'4581':[[384,5519],],
},{'13':[[384,3514],],
'1838':[[384,3550],],
'4622':[[384,3521],],
'4629':[[384,3556],],
},{'63':[[384,3516],],
},{'506':[[384,3542],],
},{'275':[[384,3585],],
},{'63':[[384,3587],],
},{'13':[[384,3590],],
},{'34':[[384,3619],[384,3605],],
},{'4938':[[384,3606],],
},{'13':[[384,3614],],
},{'4938':[[384,3620],],
},{'23':[[384,7982],],
'1238':[[384,3668],],
},{'48':[[384,3682],],
},{'4048':[[384,3702],],
'4049':[[384,3811],[384,3706],],
},{'15':[[384,3726],[384,3723],],
},{'4945':[[384,3724],],
},{'77':[[384,3813],],
},{'140':[[384,3939],],
'275':[[384,3824],],
},{'968':[[384,3849],],
},{'777':[[384,3899],],
},{'12':[[384,3901],],
},{'955':[[384,3912],],
},{'4903':[[384,3921],],
},{'150':[[384,3925],],
},{'4903':[[384,3928],],
},{'150':[[384,3932],],
},{'4903':[[384,3935],],
},{'4730':[[384,3978],],
},{'39':[[384,3984],],
},{'13':[[384,4042],],
},{'2411':[[384,4090],],
},{'2411':[[384,4104],],
},{'13':[[384,4106],],
},{'1864':[[384,4118],],
},{'275':[[384,4137],],
'2321':[[384,4215],],
},{'2411':[[384,4139],],
'4903':[[384,4211],],
},{'15':[[384,4172],],
'484':[[384,4291],],
},{'1004':[[384,4185],],
},{'4968':[[384,4186],],
},{'162':[[384,4190],],
},{'374':[[384,4195],],
},{'4971':[[384,4196],],
},{'4972':[[384,4197],],
},{'4973':[[384,4198],],
},{'4903':[[384,4200],],
},{'818':[[384,4206],],
},{'3253':[[384,4237],],
},{'1540':[[384,4257],],
},{'186':[[384,4260],],
},{'13':[[384,4372],[384,4301],],
},{'89':[[384,4354],],
},{'484':[[384,4368],],
},{'1117':[[384,4375],],
},{'4761':[[384,4385],],
},{'24':[[384,4402],],
},{'1381':[[384,4416],],
},{'31':[[384,5057],],
'349':[[384,4447],],
},{'1380':[[384,4460],],
},{'4988':[[384,4461],],
},{'4691':[[384,4471],],
},{'4990':[[384,4472],],
},{'130':[[384,4478],],
'4102':[[384,7222],],
},{'596':[[384,4509],],
},{'15':[[384,4556],],
},{'1492':[[384,4599],],
},{'2675':[[384,4639],],
},{'23':[[384,4645],],
},{'4639':[[384,4660],],
},{'271':[[384,4688],],
},{'1381':[[384,4690],],
},{'5000':[[384,4691],],
},{'2341':[[384,4704],],
},{'39':[[384,5423],],
'1381':[[384,4708],],
},{'375':[[384,4869],[384,4758],],
},{'533':[[384,4847],],
},{'955':[[384,4879],],
},{'137':[[384,4903],],
},{'26':[[384,4919],],
},{'548':[[384,4931],],
},{'18':[[384,4936],],
},{'1251':[[384,4990],],
},{'1680':[[384,5000],],
},{'1843':[[384,5036],],
'2034':[[384,7038],],
},{'199':[[384,5041],],
},{'131':[[384,5083],],
},{'12':[[384,5085],],
},{'5016':[[384,5086],],
},{'35':[[384,5096],],
'607':[[384,8818],],
},{'955':[[384,5098],],
},{'4903':[[384,5100],],
},{'217':[[384,8633],],
'1267':[[384,5126],],
},{'314':[[384,5936],],
'780':[[384,5542],],
'1180':[[384,5707],],
'1211':[[384,5504],[384,5430],],
'1256':[[384,5128],],
'1267':[[384,5570],[384,5722],],
'1283':[[384,5521],],
'2867':[[384,5874],],
'3316':[[384,6063],],
'3409':[[384,5267],],
'4667':[[384,5396],],
},{'77':[[384,5141],],
},{'5023':[[384,5142],],
},{'67':[[384,5149],],
},{'25':[[384,5192],],
},{'33':[[384,5213],],
},{'349':[[384,5235],],
},{'31':[[384,5238],],
},{'159':[[384,5304],],
},{'4075':[[384,5306],],
},{'13':[[384,5310],],
},{'26':[[384,5692],],
'2626':[[384,5330],],
},{'5033':[[384,5331],],
},{'20':[[384,5349],],
},{'5035':[[384,5350],],
},{'77':[[384,5463],],
'349':[[384,5352],],
},{'13':[[384,5380],],
},{'1304':[[384,5402],],
},{'152':[[384,5552],],
},{'13':[[384,5621],],
'275':[[384,9605],],
},{'13':[[384,5626],],
},{'12':[[384,5631],],
},{'63':[[384,5633],],
},{'968':[[384,5645],],
},{'10':[[384,7089],],
'1484':[[384,5655],],
},{'4456':[[384,5690],],
},{'186':[[384,5698],],
},{'468':[[384,5714],],
},{'15':[[384,5761],],
},{'15':[[384,5780],],
},{'59':[[384,5886],],
},{'1593':[[384,5919],],
},{'4794':[[384,5923],],
},{'1809':[[384,5927],],
},{'861':[[384,6005],],
},{'12':[[384,6027],],
},{'26':[[384,8739],],
'63':[[384,8143],[384,9190],],
'275':[[384,9868],],
'530':[[384,9508],],
'676':[[384,6042],],
'2675':[[384,9238],],
'4629':[[384,8466],[384,8453],[384,9593],[384,8846],[384,8615],],
},{'63':[[384,7118],[384,8113],[384,8145],[384,8741],],
'2675':[[384,8264],],
'5058':[[384,6043],],
},{'2384':[[384,6100],],
},{'1004':[[384,6102],],
},{'299':[[384,6115],],
},{'28':[[384,6124],],
},{'489':[[384,6209],],
},{'13':[[384,6225],],
},{'1132':[[384,6234],],
},{'547':[[384,6238],],
'878':[[384,6359],],
},{'12':[[384,6304],],
},{'47':[[384,6340],],
'1999':[[384,7397],],
},{'5069':[[384,6341],],
},{'1028':[[384,6345],],
},{'13':[[384,6350],],
},{'13':[[384,6389],],
'275':[[384,7151],],
},{'506':[[384,6435],],
'2585':[[396,159],],
},{'67':[[384,6460],],
},{'16':[[384,6469],],
},{'39':[[384,6486],],
},{'107':[[384,6502],],
},{'849':[[384,6523],],
},{'63':[[384,7153],],
'2675':[[384,6531],],
},{'23':[[384,6554],],
},{'513':[[384,6638],],
},{'67':[[384,6699],],
},{'1911':[[384,6703],],
},{'23':[[384,6733],],
},{'33':[[384,6756],],
},{'61':[[384,6793],],
'912':[[384,7137],],
},{'5087':[[384,6794],],
},{'674':[[384,6801],],
},{'4405':[[384,6808],],
},{'4903':[[384,6811],],
},{'67':[[384,6887],],
'680':[[384,6906],],
},{'68':[[384,6893],],
},{'449':[[384,6909],],
'1680':[[384,7288],],
'3793':[[384,7278],],
},{'3':[[384,6912],],
},{'3201':[[384,6918],],
},{'1864':[[384,6984],],
},{'77':[[384,6987],],
},{'39':[[384,7031],],
},{'196':[[384,7042],],
},{'77':[[384,7058],],
},{'16':[[384,8139],],
'203':[[384,7123],],
},{'33':[[384,9397],],
'63':[[384,9499],],
'275':[[384,9494],],
'1963':[[384,9188],],
'4629':[[384,8623],[384,8486],],
'5102':[[384,7124],],
},{'817':[[384,7130],],
},{'5087':[[384,7138],],
},{'5080':[[384,7154],],
},{'99':[[384,7319],],
},{'275':[[384,7336],],
},{'777':[[384,7388],],
},{'149':[[391,51],],
'5109':[[384,7389],],
},{'445':[[384,7401],],
'3978':[[384,8262],],
},{'43':[[384,7443],],
},{'63':[[384,7452],],
},{'23':[[384,7485],],
},{'1361':[[384,7515],],
},{'67':[[384,8895],],
'277':[[384,7592],],
},{'33':[[384,7611],],
},{'1484':[[384,7622],],
},{'697':[[384,7642],],
},{'960':[[384,7647],],
},{'13':[[384,8033],],
'23':[[384,7805],],
},{'347':[[384,7816],],
},{'186':[[384,7849],],
},{'375':[[384,7888],],
},{'13':[[384,7927],],
},{'1915':[[384,7955],],
},{'375':[[384,7998],],
},{'1719':[[384,8002],],
},{'374':[[384,8005],],
},{'63':[[384,8039],[384,8013],],
},{'12':[[384,8044],[384,8020],],
},{'69':[[384,8048],],
},{'4588':[[384,8107],],
},{'481':[[384,8129],],
},{'26':[[384,8131],],
},{'275':[[384,9156],],
'4405':[[384,8137],],
},{'681':[[384,8165],],
},{'506':[[384,8178],],
},{'13':[[384,8212],],
},{'78':[[384,8234],],
},{'23':[[384,9362],[384,8240],],
},{'275':[[384,8757],],
'2675':[[384,8258],],
},{'817':[[384,8342],],
'1156':[[384,8314],],
},{'5143':[[384,8315],],
},{'4903':[[384,8359],],
},{'275':[[384,8370],],
'5146':[[384,8371],],
},{'19':[[384,8413],],
},{'140':[[384,8443],],
'1699':[[391,21],],
},{'50':[[384,8499],],
},{'101':[[384,9202],],
'217':[[384,9688],],
'314':[[384,9292],],
'780':[[384,9591],],
'1177':[[384,9491],],
'1267':[[384,9628],],
'1286':[[384,9866],],
'1699':[[384,9808],],
'2590':[[384,8532],],
'3234':[[384,9426],],
'4667':[[384,9145],],
'4771':[[384,9718],],
},{'33':[[384,8540],],
},{'100':[[384,8635],],
'101':[[384,8978],],
'217':[[384,9081],],
'780':[[384,8706],],
'1180':[[384,8733],],
'1211':[[384,8805],],
'1260':[[384,8664],],
'1286':[[384,9046],],
'3316':[[384,8912],],
'3409':[[384,9031],],
},{'275':[[384,8774],],
},{'68':[[384,8793],],
},{'518':[[384,8797],],
},{'12':[[384,8827],],
},{'69':[[384,9315],],
'375':[[384,8868],[384,8855],],
},{'12':[[384,8877],],
},{'15':[[384,8879],],
},{'13':[[384,8914],],
},{'39':[[384,8961],],
},{'878':[[384,8991],],
},{'158':[[384,9000],],
},{'374':[[384,9020],],
},{'275':[[384,9033],],
},{'12':[[384,9052],],
},{'2675':[[384,9124],[384,9061],],
'4424':[[384,9936],[384,9928],],
},{'609':[[384,9070],],
},{'343':[[384,9091],],
},{'4629':[[384,9103],[384,9093],],
},{'1':[[384,9122],],
},{'24':[[384,9154],],
},{'199':[[384,9160],],
'791':[[384,9323],],
},{'63':[[384,9176],],
'439':[[384,9170],],
},{'15':[[384,9212],],
'501':[[384,9220],],
},{'275':[[384,9217],],
},{'1719':[[384,9226],],
},{'5177':[[384,9227],],
},{'68':[[384,9332],[384,9251],],
},{'39':[[384,9355],],
},{'275':[[384,9428],],
},{'5181':[[384,9429],],
},{'49':[[384,9456],],
},{'2690':[[384,9464],],
},{'12':[[384,9467],],
},{'81':[[384,9497],],
},{'4639':[[384,9517],],
},{'3024':[[384,9559],],
},{'2675':[[384,9563],],
},{'63':[[384,9567],],
},{'18':[[384,9571],],
},{'921':[[384,9573],],
},{'206':[[384,9607],],
},{'436':[[384,9616],],
},{'15':[[384,9618],],
},{'49':[[384,9648],],
},{'817':[[384,9651],],
},{'1667':[[384,9692],],
},{'349':[[384,9694],],
},{'275':[[384,9703],],
},{'77':[[384,9705],],
},{'723':[[384,9722],],
},{'349':[[384,9731],],
},{'1913':[[384,9735],],
},{'24':[[384,9742],],
},{'39':[[384,9765],],
},{'14':[[384,9772],],
},{'2229':[[384,9779],],
},{'3':[[384,9781],],
},{'2675':[[384,9819],],
'4629':[[384,9787],],
},{'4629':[[384,9796],],
},{'50':[[384,9799],],
},{'2675':[[384,9810],],
},{'2626':[[384,9814],],
},{'77':[[384,9833],],
},{'139':[[384,9837],],
},{'77':[[384,9839],],
},{'777':[[384,9846],],
},{'12':[[384,9848],],
},{'69':[[384,9859],],
},{'275':[[384,9877],],
},{'277':[[384,9882],],
},{'5167':[[384,9937],],
},{'5223':[[384,9938],],
},{'12':[[385,34],],
'63':[[385,67],],
},{'23':[[385,62],],
},{'7':[[386,20],],
},{'7':[[386,32],],
},{'7':[[388,22],],
'230':[[388,57],],
},{'7':[[388,28],],
'3174':[[388,64],],
},{'7':[[388,34],],
'3174':[[388,73],],
},{'7':[[388,40],],
'5236':[[388,82],],
},{'7':[[388,84],[388,46],],
},{'7':[[388,66],[388,59],],
},{'7':[[388,75],],
},{'61':[[388,81],],
},{'340':[[389,38],],
},{'20':[[390,38],],
},{'20':[[390,41],],
},{'125':[[391,17],],
},{'1260':[[391,25],],
},{'134':[[394,47],],
'402':[[394,18],],
},{'19':[[394,140],[394,175],[394,41],],
'23':[[394,192],],
},{'12':[[394,53],],
},{'12':[[394,149],],
},{'48':[[394,170],],
},{'63':[[395,30],],
},{'1113':[[395,73],],
},{'12':[[395,96],],
},{'926':[[396,69],],
},{'305':[[396,122],],
},{'532':[[396,151],],
},{'248':[[396,177],],
},
];
var firstchar_list = [
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[215,219,1001,1212,1833,1871,2120,2146,2931,2933,2934,2936,3147,3241,3300,3303,3326,3327,3362,3370,3450,4024,4703,],
[101,109,217,571,994,1121,1172,1174,1179,1206,1209,1211,1222,1256,1257,1260,1262,1283,1286,1288,1324,1423,1429,1444,1623,1697,1734,1975,1983,2086,2956,3230,3245,3307,3310,3313,3315,3317,3318,3331,3344,3351,3371,3373,3376,3383,3391,3392,3399,3400,3401,3403,3404,3405,3407,3420,3421,3436,3439,3441,3446,3448,3467,3469,3472,3475,3478,3506,3542,3658,3660,3661,3662,3663,3664,3666,3668,3672,3823,4159,4171,4172,4188,4356,4606,4607,4725,4728,4844,4921,5094,5177,],
[99,110,111,1261,1265,1419,1428,1447,1621,1622,1676,1699,2087,2119,2591,2955,3021,3022,3099,3234,3270,3295,3296,3299,3301,3302,3304,3314,3316,3332,3345,3352,3363,3366,3368,3380,3394,3395,3397,3422,3435,3443,3461,3462,3465,3671,3809,3810,3814,3942,3995,4272,4354,4588,4667,4668,4681,4687,4771,4772,4838,4847,4874,4889,4907,5022,5123,5150,5152,],
[891,1175,1180,1263,1268,1735,1977,2089,2867,3223,3247,3282,3285,3287,3288,3289,3291,3292,3298,3312,3338,3339,3353,3355,3357,3360,3365,3381,3384,3387,3388,3390,3396,3402,3409,3423,3425,3426,3455,3457,3459,3471,3543,3667,3985,4355,4669,4671,4860,5045,5171,],
[314,1207,1544,1770,2951,3138,3221,3280,3283,3286,3294,3309,3319,3320,3336,3340,3343,3347,3348,3350,3359,3375,3386,3398,3424,3427,3438,3452,3454,3464,3546,4670,4672,4922,4925,4979,5240,],
[1125,1171,1258,1269,1445,1979,2090,3239,3305,3306,3321,3328,3337,3346,3361,3411,3428,3430,3431,3440,3466,3477,3505,4325,4673,4702,4757,4862,],
[886,1216,1264,1267,1783,1822,1982,1985,3236,3281,3284,3293,3322,3323,3324,3333,3334,3341,3354,3369,3406,3413,3429,3432,3442,3451,3456,3458,3470,3659,4323,4360,4624,4674,],
[1176,1177,1980,3227,3290,3297,3308,3325,3329,3379,3410,3412,3415,3416,3433,3434,3437,3444,3463,3468,3473,3479,3507,3657,3863,],
[780,1173,1221,1259,1628,3244,3311,3330,3335,3356,3364,3367,3382,3385,3393,3414,3417,3445,3447,3449,3453,3460,3476,3480,3673,3674,3996,4825,5156,],
[100,1181,1182,1266,1664,3038,3242,3342,3349,3358,3372,3374,3377,3389,3418,3419,3474,3497,],
[],
[],
[],
[],
[166,186,1110,1649,1674,1885,1886,1887,1888,1889,1890,1891,1892,1903,1904,1905,1938,1939,1989,2188,2190,2192,2195,2197,2203,2204,2205,2207,2213,2215,2216,2928,4648,4769,4776,5183,5207,5237,5248,],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[804,805,1522,1525,1533,1534,1542,1564,1700,1800,2003,2005,2015,2018,2046,2047,2055,3110,3112,3731,4017,4018,4019,4040,4963,],
[],
[1,18,19,27,34,63,69,89,90,154,162,177,178,184,203,242,261,269,304,338,353,374,380,408,449,454,465,509,564,565,631,632,665,689,694,705,706,719,720,783,784,788,800,814,818,856,866,896,911,975,978,981,984,1003,1004,1037,1039,1120,1129,1130,1150,1159,1178,1195,1196,1201,1244,1247,1300,1303,1365,1390,1410,1421,1434,1454,1460,1481,1495,1505,1518,1536,1540,1594,1607,1707,1708,1717,1952,1993,2075,2079,2085,2104,2112,2200,2201,2228,2232,2286,2350,2396,2447,2477,2487,2493,2497,2511,2522,2577,2598,2608,2623,2627,2643,2649,2663,2665,2685,2692,2693,2707,2725,2789,2801,2803,2807,2813,2839,2846,2881,2888,2915,2998,3027,3028,3051,3122,3123,3129,3151,3168,3169,3174,3185,3192,3250,3261,3263,3274,3567,3575,3582,3584,3604,3605,3650,3680,3681,3696,3710,3721,3729,3786,3855,3861,3877,3882,3926,3927,3931,3934,3945,3946,3956,3964,3973,3984,3988,4000,4020,4021,4035,4057,4077,4079,4087,4089,4100,4201,4220,4253,4262,4302,4342,4350,4387,4393,4399,4452,4488,4489,4518,4519,4530,4532,4552,4574,4580,4599,4618,4627,4646,4685,4694,4707,4709,4716,4723,4726,4736,4741,4744,4749,4768,4783,4796,4797,4828,4927,4931,4981,4994,5013,5023,5030,5033,5040,5054,5060,5063,5075,5097,5121,5162,5196,5204,5206,5217,5223,5244,5247,5253,],
[25,31,153,237,250,276,300,322,420,439,447,481,492,499,536,567,581,608,681,714,840,867,888,894,898,902,917,943,979,1131,1146,1184,1202,1227,1306,1317,1318,1379,1400,1411,1453,1461,1475,1516,1541,1585,1741,1747,1840,1911,2021,2025,2044,2068,2110,2118,2149,2160,2194,2202,2208,2210,2295,2346,2453,2473,2569,2586,2587,2651,2718,2720,2738,2743,2748,2756,2791,2842,2848,2849,2971,2976,2978,2980,3004,3125,3166,3197,3225,3253,3502,3572,3576,3595,3622,3653,3656,3670,3758,3806,3826,3834,3879,3889,3894,3944,4065,4078,4190,4233,4306,4314,4456,4461,4462,4467,4593,4621,4634,4641,4650,4679,4706,4729,4732,4754,4765,4787,4791,4804,4813,4827,4836,4863,4893,4942,4992,5027,5049,5053,5096,5115,5128,5146,5186,],
[13,68,75,82,87,93,94,105,108,148,150,167,222,238,248,278,280,291,320,321,357,359,361,369,392,419,422,428,437,446,457,459,490,502,505,517,526,544,547,561,566,585,588,601,605,609,620,676,703,713,716,722,729,789,847,865,885,889,895,900,932,938,946,948,949,955,972,1101,1114,1134,1138,1153,1155,1170,1197,1213,1215,1217,1224,1242,1250,1311,1384,1386,1391,1427,1478,1479,1569,1570,1571,1574,1582,1605,1609,1611,1615,1619,1620,1624,1625,1682,1718,1739,1793,1794,1818,1824,1827,1828,1830,1832,1841,1844,1846,1857,1866,1867,1912,1933,1946,1948,1949,1960,1971,1994,1996,1998,2000,2002,2027,2034,2042,2045,2098,2117,2126,2127,2179,2180,2189,2196,2206,2217,2218,2220,2241,2245,2260,2265,2268,2293,2297,2317,2322,2328,2330,2341,2347,2384,2388,2403,2404,2412,2416,2446,2451,2461,2464,2467,2469,2470,2475,2481,2526,2545,2562,2564,2572,2578,2580,2633,2645,2658,2671,2673,2684,2686,2713,2731,2732,2750,2766,2796,2819,2820,2838,2841,2850,2859,2862,2864,2865,2890,2916,2947,2950,2952,2953,2957,2959,2962,2973,2986,2991,3001,3008,3012,3016,3025,3035,3047,3052,3056,3067,3080,3085,3094,3101,3102,3115,3126,3157,3177,3181,3186,3190,3224,3260,3266,3272,3492,3493,3503,3518,3520,3526,3530,3533,3551,3557,3561,3568,3601,3621,3623,3631,3635,3649,3685,3687,3690,3760,3764,3765,3776,3799,3808,3813,3815,3816,3825,3828,3843,3844,3862,3872,3875,3888,3890,3903,3905,3913,3915,3959,3961,3969,3978,3981,3990,4002,4050,4070,4072,4090,4095,4112,4149,4161,4166,4168,4170,4208,4219,4228,4237,4248,4254,4261,4270,4285,4295,4311,4316,4317,4329,4338,4339,4340,4397,4403,4427,4433,4446,4453,4458,4465,4480,4481,4495,4497,4534,4548,4586,4591,4604,4609,4626,4640,4699,4727,4735,4760,4830,4840,4851,4855,4868,4910,4923,4970,4986,4998,5008,5019,5026,5032,5062,5064,5069,5078,5093,5099,5111,5112,5137,5159,5169,5197,5226,5246,5251,],
[24,38,45,60,80,83,128,158,223,225,230,268,274,277,285,312,313,317,366,397,398,416,425,427,436,440,445,461,467,504,523,559,569,602,604,610,691,723,734,735,782,808,819,837,897,899,920,926,927,940,942,945,951,958,960,963,974,1006,1008,1034,1102,1136,1142,1149,1151,1157,1163,1165,1186,1187,1188,1190,1233,1276,1312,1366,1367,1399,1435,1480,1499,1521,1529,1535,1644,1677,1714,1749,1751,1752,1767,1769,1771,1772,1776,1777,1784,1787,1798,1801,1802,1806,1807,1819,1825,1829,1834,1874,1875,1900,1929,1931,2043,2056,2084,2128,2129,2137,2138,2159,2191,2267,2269,2298,2353,2355,2356,2358,2359,2361,2379,2380,2430,2462,2476,2479,2510,2544,2563,2581,2582,2589,2603,2626,2639,2704,2724,2734,2741,2764,2776,2787,2835,2851,2863,2908,2919,2922,2972,2988,2996,3002,3013,3023,3037,3039,3054,3069,3083,3090,3113,3132,3135,3149,3155,3199,3203,3237,3252,3498,3499,3500,3501,3531,3544,3545,3548,3586,3606,3616,3620,3682,3699,3700,3701,3702,3712,3732,3734,3735,3756,3761,3784,3811,3820,3822,3845,3847,3854,3970,4013,4014,4016,4026,4038,4045,4059,4067,4071,4086,4091,4092,4097,4162,4164,4203,4204,4205,4211,4223,4224,4273,4289,4294,4296,4299,4301,4303,4312,4332,4333,4337,4351,4353,4358,4359,4361,4362,4363,4364,4366,4370,4375,4383,4392,4425,4429,4455,4460,4523,4533,4538,4559,4578,4589,4598,4619,4636,4661,4705,4715,4751,4784,4786,4802,4810,4811,4842,4875,4879,4891,4903,4918,4943,4947,4968,4984,4988,4991,5003,5011,5021,5048,5104,5113,5144,5155,5215,5216,],
[56,74,78,79,102,112,156,159,212,213,229,231,271,318,429,442,466,496,508,530,535,543,545,549,563,580,603,611,639,648,695,698,815,892,907,936,961,983,1033,1108,1109,1112,1133,1144,1166,1254,1402,1414,1430,1443,1459,1462,1469,1474,1492,1531,1532,1548,1549,1550,1556,1558,1560,1561,1572,1586,1590,1608,1626,1629,1632,1635,1672,1687,1689,1694,1706,1764,1789,1862,1880,1961,2039,2081,2083,2092,2147,2169,2171,2285,2310,2325,2329,2331,2335,2337,2339,2348,2349,2351,2374,2428,2448,2474,2509,2541,2575,2640,2677,2689,2697,2700,2703,2722,2730,2744,2755,2828,2833,2917,2923,3036,3068,3086,3093,3128,3154,3180,3213,3222,3235,3248,3265,3267,3489,3519,3532,3540,3541,3585,3615,3624,3637,3740,3746,3768,3771,3835,3859,3930,3940,3955,3972,3983,3987,4003,4046,4048,4049,4064,4093,4117,4165,4167,4179,4187,4193,4206,4238,4252,4257,4264,4266,4274,4298,4406,4496,4577,4584,4602,4629,4684,4719,4720,4743,4773,4789,4793,4801,4822,4823,4834,4839,4857,4906,4915,4916,4983,5050,5068,5088,5108,5116,5166,5173,5193,5201,5202,5212,],
[15,48,71,121,142,146,175,193,206,260,263,265,299,331,346,388,415,424,460,472,528,551,579,643,679,732,770,786,798,834,876,890,915,924,939,953,954,1022,1107,1236,1323,1344,1345,1378,1383,1387,1424,1486,1490,1545,1578,1579,1580,1583,1584,1593,1602,1604,1616,1636,1670,1678,1681,1710,1728,1754,1804,1842,1858,1879,1883,1884,1906,1907,1923,1942,1967,2007,2017,2020,2080,2114,2134,2221,2247,2282,2289,2319,2342,2352,2362,2364,2394,2400,2401,2439,2441,2496,2542,2579,2614,2659,2675,2712,2719,2736,2740,2742,2745,2805,2818,2824,2832,2843,2939,2966,2993,3020,3045,3079,3088,3156,3194,3258,3512,3562,3566,3577,3578,3589,3603,3644,3686,3688,3789,3798,3842,3867,3948,4034,4036,4066,4096,4185,4186,4195,4196,4198,4242,4243,4247,4286,4291,4367,4396,4454,4582,4623,4633,4642,4647,4678,4711,4738,4748,4792,4798,4846,4892,4905,4959,5035,5074,5082,5085,5172,5184,5242,5243,],
[28,37,113,286,288,292,302,341,455,487,618,644,795,848,956,976,995,1027,1137,1231,1235,1275,1363,1436,1472,1527,1808,1972,1995,2036,2053,2071,2105,2214,2426,2427,2429,2436,2485,2530,2607,2634,2642,2739,2773,2794,2836,2844,2983,3044,3146,3188,3214,3251,3633,3638,3652,3857,3941,3958,4007,4009,4083,4105,4176,4240,4315,4472,4511,4608,4676,4697,4698,4761,4807,4888,4919,4924,5084,5102,5117,5234,5235,],
[42,136,220,245,266,339,367,596,629,813,996,1116,1127,1154,1205,1245,1302,1314,1316,1326,1396,1422,1449,1470,1538,1539,1575,1612,1633,1667,1688,1873,1950,1988,2061,2097,2116,2122,2263,2311,2324,2354,2445,2457,2543,2606,2644,2646,2661,2754,2882,2961,3015,3043,3064,3171,3276,3277,3278,3279,3482,3536,3619,3639,3774,3824,3830,3846,3850,4085,4102,4115,4148,4229,4269,4348,4386,4475,4491,4592,4596,4638,4654,4734,4816,4877,4993,5009,5010,5066,5092,5120,5154,],
[16,49,77,95,129,138,147,160,199,200,259,267,333,352,372,430,432,464,468,484,494,512,513,537,539,589,594,606,615,640,803,835,839,874,912,941,957,1105,1106,1147,1192,1232,1325,1351,1361,1385,1393,1404,1487,1503,1506,1524,1559,1597,1598,1637,1639,1692,1695,1701,1758,1810,2011,2016,2051,2076,2077,2091,2093,2094,2099,2101,2103,2130,2131,2132,2152,2209,2256,2292,2294,2326,2333,2458,2523,2528,2533,2599,2609,2624,2637,2717,2733,2781,2784,2793,2829,2837,2840,2845,2958,2967,2968,2969,2999,3018,3104,3118,3150,3158,3164,3178,3200,3206,3215,3216,3220,3483,3486,3538,3560,3563,3565,3579,3591,3600,3607,3610,3723,3745,3748,3841,3870,3884,3885,3911,3912,3920,3932,3939,3951,3992,4069,4121,4122,4141,4210,4267,4268,4275,4304,4307,4308,4326,4327,4328,4331,4336,4345,4371,4372,4373,4374,4419,4420,4445,4457,4466,4490,4522,4535,4605,4610,4612,4620,4630,4639,4655,4664,4835,4848,4850,4864,4883,4913,4944,4952,4995,4996,5000,5005,5018,5037,5056,5129,5161,5194,5218,5219,5252,],
[163,332,348,861,1189,1342,1343,2312,2672,2752,2899,3511,3640,3900,3994,4587,4803,4856,4989,5107,],
[243,1204,1305,1403,1407,1727,1974,2030,2660,2723,2989,3005,3641,3645,3722,3997,4052,5031,],
[14,20,21,22,32,40,81,115,252,258,270,284,289,298,306,413,418,423,473,518,521,527,534,583,599,612,645,649,671,675,687,701,702,704,790,791,793,794,836,878,880,893,919,950,959,997,1018,1122,1126,1135,1167,1199,1225,1243,1304,1359,1364,1372,1374,1380,1388,1398,1401,1412,1438,1464,1504,1606,1665,1666,1669,1675,1683,1742,1831,1854,1897,1898,1899,2059,2095,2111,2264,2275,2309,2323,2344,2345,2409,2432,2433,2434,2442,2478,2495,2524,2547,2561,2566,2568,2600,2605,2615,2770,2777,2782,2802,2806,2821,2834,2861,2866,2906,2909,2963,2964,3041,3058,3059,3060,3076,3100,3124,3173,3226,3228,3229,3238,3255,3264,3268,3408,3508,3590,3642,3739,3772,3791,3796,3864,3883,3887,3919,3989,4025,4027,4028,4029,4031,4107,4174,4277,4278,4279,4280,4281,4282,4283,4309,4310,4365,4368,4395,4471,4498,4502,4503,4504,4505,4507,4508,4509,4510,4512,4513,4514,4515,4554,4714,4739,4780,4782,4869,4885,4898,4917,5016,5058,5059,5103,5105,5118,5200,5221,],
[10,52,57,58,72,103,132,165,226,255,272,303,315,343,351,368,482,520,529,538,572,616,672,678,725,842,923,933,985,993,1020,1031,1145,1161,1198,1238,1309,1315,1322,1331,1338,1339,1340,1346,1348,1358,1368,1375,1389,1394,1431,1442,1458,1473,1477,1484,1508,1553,1679,1723,1745,1786,1835,1849,1850,1872,1908,1910,1963,1973,1987,1990,2073,2074,2100,2125,2303,2304,2305,2306,2307,2308,2315,2336,2368,2390,2393,2410,2438,2440,2450,2588,2590,2601,2616,2625,2641,2710,2737,2763,2792,2831,2858,2877,2887,2921,2938,2942,2985,3010,3030,3032,3077,3091,3134,3160,3167,3172,3189,3494,3495,3516,3517,3537,3555,3574,3598,3608,3646,3655,3678,3679,3697,3728,3757,3793,3817,3832,3837,3839,3874,3878,3902,3910,3921,3924,3933,3935,3952,3957,3982,3993,4004,4011,4033,4047,4051,4073,4076,4084,4116,4123,4124,4125,4126,4127,4128,4129,4130,4131,4132,4133,4134,4135,4136,4137,4138,4139,4140,4147,4158,4169,4194,4250,4251,4292,4330,4335,4346,4349,4378,4407,4408,4409,4410,4411,4412,4413,4414,4415,4416,4417,4421,4477,4499,4528,4539,4540,4541,4542,4543,4544,4545,4546,4553,4585,4601,4616,4625,4637,4701,4788,4805,4817,4818,4832,4841,4858,4859,4866,4873,4880,4904,4911,4912,4938,4967,4975,4977,4999,5055,5067,5076,5110,5185,5187,5195,5209,],
[4,6,7,39,54,70,86,130,139,275,316,334,342,410,489,497,584,586,590,700,817,841,877,879,931,1029,1132,1141,1148,1228,1251,1369,1373,1381,1566,1587,1603,1660,1662,1790,1791,1792,1795,1796,1811,1851,1914,1999,2022,2107,2174,2175,2223,2255,2300,2391,2435,2573,2583,2775,2785,2856,2903,2995,3019,3165,3176,3504,3535,3602,3705,3759,3947,3950,3976,3999,4110,4114,4119,4255,4284,4293,4341,4394,4398,4632,4689,4759,4794,4819,4861,4908,5147,5149,5178,5236,],
[2,3,26,47,96,97,98,118,119,120,123,124,125,126,137,141,143,151,152,155,170,171,172,179,180,181,182,187,188,189,190,191,192,205,210,211,214,216,218,228,232,233,234,235,236,246,247,264,279,294,308,309,310,327,328,329,337,347,370,371,377,378,379,381,387,389,390,391,393,394,396,399,401,402,404,407,409,414,421,426,431,450,451,456,458,462,463,469,474,475,476,477,478,485,486,511,514,542,595,621,627,628,633,634,642,650,651,652,654,655,657,658,659,660,661,662,663,664,667,668,669,670,674,682,683,684,686,688,690,692,708,709,710,711,717,718,728,736,737,738,740,741,742,743,744,745,746,747,748,749,750,751,752,753,754,755,756,757,758,759,767,768,769,771,772,774,781,785,787,801,823,824,825,826,827,828,829,830,831,832,843,850,852,853,854,858,862,863,864,868,869,871,872,873,881,882,883,906,986,987,988,989,990,991,998,999,1000,1005,1007,1009,1010,1013,1014,1019,1021,1023,1024,1025,1028,1030,1035,1036,1040,1041,1042,1043,1044,1045,1046,1047,1048,1049,1050,1051,1052,1053,1054,1055,1056,1057,1058,1059,1060,1061,1062,1063,1064,1065,1066,1067,1068,1069,1070,1071,1072,1073,1074,1075,1076,1077,1078,1079,1080,1081,1082,1083,1084,1085,1086,1087,1088,1089,1090,1091,1092,1093,1094,1095,1096,1097,1098,1099,1152,1156,1168,1226,1229,1270,1271,1272,1273,1274,1277,1278,1279,1280,1281,1282,1284,1285,1287,1289,1290,1291,1292,1293,1294,1295,1296,1297,1298,1321,1327,1341,1355,1357,1362,1371,1377,1392,1395,1420,1446,1455,1457,1471,1493,1498,1501,1502,1509,1510,1511,1512,1513,1517,1520,1523,1537,1567,1573,1588,1589,1591,1592,1599,1600,1650,1652,1653,1671,1684,1685,1696,1698,1702,1703,1704,1705,1709,1715,1716,1720,1721,1722,1724,1730,1736,1746,1748,1755,1756,1757,1762,1763,1768,1816,1823,1836,1847,1853,1856,1870,1881,1893,1896,1901,1916,1917,1918,1919,1920,1924,1925,1926,1927,1928,1930,1935,1936,1941,1945,1947,1951,1953,1954,1955,1956,1959,1962,1964,1966,1992,2013,2014,2031,2032,2033,2037,2038,2040,2041,2048,2057,2067,2069,2133,2135,2139,2140,2154,2155,2161,2181,2211,2222,2248,2249,2250,2251,2257,2258,2270,2276,2277,2278,2279,2280,2281,2283,2287,2290,2291,2301,2314,2318,2332,2334,2338,2340,2357,2360,2367,2369,2370,2371,2375,2376,2377,2378,2383,2385,2386,2395,2397,2402,2413,2414,2471,2472,2490,2491,2492,2498,2499,2502,2503,2504,2505,2506,2507,2508,2512,2513,2514,2525,2531,2535,2537,2538,2539,2548,2549,2550,2551,2552,2553,2554,2555,2556,2557,2558,2559,2560,2592,2593,2595,2596,2612,2613,2617,2618,2619,2620,2621,2622,2631,2636,2638,2657,2664,2666,2667,2669,2678,2679,2680,2681,2694,2695,2696,2698,2708,2709,2711,2728,2729,2778,2779,2780,2786,2869,2870,2871,2872,2873,2874,2875,2892,2893,2894,2895,2896,2897,2898,2912,2914,2924,2925,2926,2929,2930,2932,2935,2937,2948,2954,2960,2979,2990,2992,2994,3009,3014,3031,3071,3072,3082,3087,3089,3105,3106,3107,3108,3109,3111,3120,3121,3133,3148,3153,3163,3179,3205,3209,3210,3211,3233,3240,3243,3249,3256,3259,3378,3510,3513,3515,3521,3522,3523,3524,3525,3527,3528,3529,3534,3547,3549,3553,3564,3573,3580,3588,3596,3597,3625,3665,3689,3691,3692,3693,3698,3714,3716,3717,3718,3720,3749,3750,3751,3752,3753,3754,3755,3763,3777,3795,3800,3827,3865,3925,3928,3938,4023,4039,4042,4043,4075,4098,4101,4103,4108,4111,4113,4120,4142,4146,4150,4151,4152,4153,4154,4155,4180,4182,4189,4191,4213,4214,4215,4216,4217,4218,4227,4231,4235,4236,4276,4287,4320,4324,4401,4404,4428,4435,4436,4437,4438,4439,4440,4441,4442,4443,4447,4448,4449,4450,4470,4487,4520,4524,4525,4526,4549,4550,4551,4560,4561,4562,4563,4564,4565,4566,4567,4568,4569,4570,4571,4572,4573,4579,4583,4600,4615,4631,4635,4644,4651,4657,4658,4680,4683,4693,4740,4756,4774,4777,4778,4779,4814,4815,4831,4837,4865,4870,4881,4886,4894,4895,4897,4899,4900,4901,4902,4932,4933,4934,4935,4936,4937,4940,4948,4950,4951,4953,4954,4955,4956,4957,4960,4962,4964,4965,4966,4971,4972,4973,4974,4978,5004,5020,5028,5029,5038,5039,5041,5042,5043,5044,5046,5065,5070,5071,5073,5080,5081,5086,5087,5089,5090,5091,5101,5109,5114,5122,5124,5127,5130,5132,5136,5139,5142,5145,5148,5157,5158,5160,5170,5176,5182,5188,5189,5191,5192,5203,5210,5211,5213,5220,5227,5228,5229,5230,5231,5232,5233,5238,5239,5241,],
[8,9,17,46,64,88,91,122,127,134,135,157,174,176,185,201,311,340,344,376,383,384,400,406,411,433,434,435,441,444,452,471,491,495,503,516,540,548,550,557,560,568,577,578,592,613,619,646,666,707,721,731,773,838,846,859,913,1115,1119,1185,1191,1193,1208,1334,1353,1354,1406,1413,1425,1426,1437,1440,1456,1467,1488,1491,1496,1497,1530,1543,1568,1595,1631,1640,1641,1642,1643,1645,1646,1647,1648,1661,1690,1691,1712,1726,1737,1740,1744,1753,1765,1778,1782,1821,1855,1865,1868,1882,1902,1922,2009,2012,2029,2049,2050,2060,2062,2065,2072,2136,2141,2151,2157,2158,2165,2226,2230,2235,2237,2254,2262,2271,2302,2321,2372,2382,2398,2405,2408,2423,2452,2483,2516,2517,2536,2546,2570,2585,2602,2604,2628,2647,2655,2670,2690,2727,2746,2751,2765,2769,2771,2790,2798,2799,2808,2811,2815,2823,2855,2868,2876,2920,2965,3029,3048,3053,3055,3061,3073,3098,3103,3131,3144,3152,3161,3170,3175,3184,3202,3217,3218,3254,3257,3559,3581,3583,3587,3611,3617,3634,3643,3647,3675,3676,3677,3683,3694,3695,3711,3725,3726,3743,3744,3747,3769,3770,3773,3780,3783,3788,3797,3802,3838,3868,3869,3880,3891,3895,3899,3901,3907,3917,3937,3949,3960,3965,3966,3968,3977,3980,4001,4008,4032,4056,4058,4060,4061,4082,4099,4145,4156,4157,4173,4177,4199,4209,4221,4222,4234,4245,4258,4271,4322,4377,4379,4380,4381,4382,4384,4388,4389,4390,4391,4424,4451,4463,4493,4517,4531,4536,4557,4617,4643,4649,4665,4682,4686,4688,4690,4713,4718,4721,4722,4752,4799,4808,4812,4833,4872,4909,4958,5051,5083,5100,5143,5205,],
[262,287,558,673,875,914,1118,2078,2389,2534,2816,2891,2946,3821,4555,4876,5133,],
[29,55,66,104,116,117,144,183,197,204,283,293,307,319,354,385,386,412,438,470,480,493,525,556,574,575,587,653,730,775,776,777,797,855,860,870,916,918,962,969,970,973,992,1016,1104,1143,1183,1214,1223,1237,1248,1255,1319,1397,1408,1448,1465,1482,1483,1494,1554,1555,1576,1610,1617,1634,1725,1738,1743,1750,1781,1785,1797,1813,1820,1826,1838,1839,1852,1859,1861,1863,1864,1909,1940,1944,1958,1965,1968,1969,1970,2142,2156,2168,2178,2198,2236,2238,2242,2266,2273,2274,2288,2296,2320,2381,2387,2399,2411,2415,2418,2431,2454,2466,2480,2489,2494,2515,2518,2519,2520,2521,2540,2594,2597,2635,2652,2676,2715,2721,2759,2772,2809,2814,2822,2826,2860,2879,2883,2885,2889,2943,2949,2974,2984,3000,3003,3011,3026,3034,3040,3042,3050,3065,3114,3116,3136,3137,3139,3140,3145,3159,3183,3187,3191,3201,3219,3273,3484,3490,3491,3570,3571,3626,3628,3629,3706,3707,3727,3742,3775,3779,3805,3807,3848,3856,3908,3954,3986,4005,4041,4044,4088,4104,4207,4226,4241,4249,4265,4318,4334,4344,4352,4400,4405,4434,4459,4479,4494,4547,4594,4595,4603,4613,4622,4653,4659,4717,4724,4747,4755,4785,4795,4820,4824,4843,4852,4920,4926,4928,4929,4985,5014,5015,5034,5047,5077,5098,5106,5126,5131,5134,5153,5165,5180,5190,5198,5224,5249,],
[5,30,51,53,59,92,107,133,168,169,195,207,221,224,241,282,296,297,350,363,365,375,382,417,443,448,479,488,519,522,524,532,541,546,553,570,593,597,614,622,626,635,656,677,693,715,724,727,739,796,799,807,809,810,811,845,849,887,901,903,904,922,929,944,947,952,966,967,1002,1015,1017,1032,1038,1100,1113,1117,1123,1140,1158,1160,1169,1200,1210,1218,1219,1220,1234,1241,1246,1249,1299,1307,1308,1310,1313,1328,1329,1332,1333,1335,1337,1349,1352,1356,1360,1416,1417,1432,1439,1441,1452,1463,1485,1500,1507,1514,1515,1526,1546,1547,1563,1565,1613,1618,1630,1638,1651,1663,1668,1693,1711,1729,1780,1788,1799,1803,1812,1843,1845,1848,1876,1877,1915,1921,1937,1943,1981,1991,1997,2008,2024,2026,2028,2035,2052,2063,2064,2070,2088,2102,2106,2108,2109,2121,2123,2124,2143,2144,2150,2162,2163,2164,2166,2167,2172,2173,2176,2177,2183,2193,2199,2212,2219,2224,2225,2227,2229,2231,2239,2299,2313,2316,2407,2417,2419,2421,2422,2424,2425,2437,2455,2459,2460,2463,2482,2484,2488,2501,2527,2532,2565,2567,2571,2574,2576,2584,2632,2648,2650,2656,2662,2687,2699,2701,2705,2706,2726,2735,2747,2749,2757,2758,2760,2761,2762,2768,2774,2783,2788,2810,2847,2857,2878,2886,2900,2904,2905,2907,2913,2940,2944,2970,2982,2987,2997,3007,3024,3033,3046,3049,3063,3066,3070,3074,3078,3081,3084,3092,3095,3119,3130,3142,3182,3193,3195,3208,3231,3262,3271,3487,3488,3514,3550,3552,3556,3592,3599,3609,3612,3613,3614,3618,3627,3651,3708,3719,3766,3767,3781,3782,3785,3790,3801,3803,3804,3818,3819,3829,3853,3860,3866,3871,3873,3881,3886,3892,3897,3898,3904,3906,3909,3918,3922,3923,3936,3953,3963,3967,3971,3975,3998,4022,4037,4054,4062,4109,4175,4178,4181,4183,4197,4202,4232,4259,4263,4288,4297,4305,4313,4319,4321,4343,4357,4385,4418,4422,4423,4432,4444,4468,4469,4476,4478,4482,4483,4486,4500,4506,4516,4521,4527,4537,4556,4558,4575,4590,4611,4652,4662,4663,4691,4700,4742,4762,4764,4767,4770,4775,4781,4790,4829,4845,4849,4871,4878,4890,4914,4930,4939,4949,4969,4976,4980,4982,4987,5001,5012,5024,5052,5057,5072,5119,5135,5138,5164,5167,5168,5174,5179,5225,5245,5250,],
[12,23,41,44,61,67,73,76,84,106,114,131,149,196,198,202,208,244,251,257,295,301,305,323,324,325,326,330,336,345,364,373,483,500,515,552,554,555,600,623,624,625,630,637,638,685,696,697,726,760,761,762,763,764,765,766,833,905,908,930,937,1011,1012,1103,1139,1164,1230,1240,1252,1376,1409,1415,1466,1468,1528,1552,1557,1596,1601,1627,1654,1655,1656,1657,1658,1659,1673,1686,1713,1731,1732,1733,1759,1773,1774,1775,1779,1805,1817,1837,1869,1894,1895,1913,1957,1986,2001,2010,2023,2058,2066,2082,2113,2153,2182,2184,2185,2186,2233,2240,2243,2244,2252,2253,2259,2272,2284,2343,2392,2420,2444,2468,2610,2654,2668,2682,2691,2714,2716,2767,2795,2797,2804,2812,2852,2854,2884,2901,2902,2910,2911,2927,2977,3062,3075,3162,3196,3198,3207,3232,3269,3275,3481,3485,3496,3509,3539,3554,3569,3593,3594,3648,3684,3703,3704,3709,3713,3715,3733,3741,3762,3787,3812,3831,3836,3849,3851,3858,3876,3914,3974,3979,4006,4012,4053,4063,4081,4143,4144,4160,4184,4192,4200,4212,4225,4260,4290,4300,4376,4431,4484,4485,4529,4645,4660,4666,4708,4731,4750,4758,4763,4800,4826,4882,4884,4887,4946,4961,5006,5007,5036,5061,5095,5140,5163,5199,5208,5214,5222,],
[50,65,140,194,209,249,256,335,356,360,501,506,507,510,582,591,607,617,733,779,806,812,816,821,822,857,909,928,934,1111,1162,1194,1301,1320,1330,1336,1347,1519,1760,1761,1932,1934,2054,2187,2261,2327,2449,2456,2500,2653,2674,2683,2800,2880,2975,3017,3117,3141,3630,3632,3636,3654,3724,3792,3794,3840,3896,3929,3991,4074,4163,4244,4402,4464,4474,4492,4581,4597,4675,4677,4704,4730,4745,4746,4806,4809,4867,4945,5002,5175,5181,],
[35,145,173,239,240,253,254,395,531,573,636,641,647,712,778,851,910,971,980,1026,1382,1433,1450,1451,1551,1562,1614,1719,1766,2170,2246,2363,2365,2366,2486,2611,2629,2753,2817,2825,2981,3143,4010,4030,4080,4094,4239,4430,4473,4576,4695,4712,4737,4853,4854,4896,4941,4990,4997,5025,5079,],
[11,33,62,85,161,164,227,273,281,290,349,355,358,362,403,405,453,498,562,576,598,680,699,792,802,820,844,921,925,935,964,965,977,982,1128,1203,1239,1350,1370,1405,1418,1476,1577,1581,1680,1809,1814,1815,1860,1878,2006,2019,2096,2115,2145,2234,2373,2406,2443,2465,2529,2630,2688,2702,2827,2830,2918,2941,2945,3006,3057,3096,3097,3204,3212,3558,3730,3736,3737,3738,3778,3852,3916,3943,3962,4015,4068,4106,4118,4230,4246,4256,4347,4369,4426,4501,4614,4656,4692,4733,4766,5017,5141,],
[884,968,3127,3833,4628,4696,4753,4821,5125,5151,],
[36,43,1253,1976,1984,2004,2148,2853,4055,],
[533,1124,1489,1978,3246,3669,3893,4710,],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
];
</script></body></html>